From dc7aa709bda8451cd5e8e9fbba24524e530b9eae Mon Sep 17 00:00:00 2001 From: giles Date: Fri, 3 Jul 2026 13:49:43 +0000 Subject: [PATCH] review quick-wins: JIT gate, crash guards, crit-2 signal-return, regen repair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Server (sx_server.ml): - HTTP mode: JIT hook now opt-in via SX_SERVING_JIT, matching epoch mode (was unconditional — live serving-JIT miscompiles J1/J2/J3 de-risked) - command channel: malformed/non-ASCII line returns an error response instead of killing the shared process (C1/C1b) - response cache: soft error pages no longer cached (S4); http_render_page returns (html, is_error) Kernel spec + regen: - crit-2: signal-return frame stored the saved kont under :f but the reader looked up "saved-kont" — handler value became the whole program's result and the covering test passed vacuously. Fixed; raise-continuable now also resumes at the raise site (rest-k, not unwound-k), mirroring signal-condition - quasiquote: R7RS longhand unquote-splicing aliased to splice-unquote (used to serialize literally — silent zero-splice) - guard: re-raise sentinel gensym'd per execution (was forgeable by any (list '__guard-reraise__ x) value) - do: IIFE-head form no longer misparses as a Scheme do-loop - render: area/base/embed/param/track added to HTML_TAGS (were void-only and rendered as Undefined symbol) - REGEN REPAIR: checked-in sx_ref.ml carried hand-written additions that every regeneration silently lost (let-values/define-values/delay/ delay-force registrations, AdtValue define-type) plus 5 regen blockers (arrow-name mangling, 3-arg get, &rest defines, HO-position helper refs, transpiler prim-table gaps). Moved into bootstrap.py FIXUPS/skips and the transpiler prim table — regen is now reproducible, compiles, and tests at baseline (CI Dockerfile.test steps 3-4 could not previously have produced a compiling kernel) Primitives: - contains?: dict key-check arm per its spec doc - expt: promotes to float on int63 overflow ((expt 2 100) returned 0) - mcp_tree parity with sx_primitives: get (Integer indices + 3-arg default), split (literal substring, was char-class — the historical gotcha lived here), empty? on ""/{}, contains?, equal?, keyword-name, char-code (Integer), parse-number (Integer-aware) Python/docs: - shared/sx/boundary.py: dead validation now logs a one-time WARNING instead of silently no-oping (full revival gated: tier-1 declarations deleted and SX_BOUNDARY_STRICT=1 is live in production compose) - CLAUDE.md: canonical reference now points at spec/*.sx; island authoring rules corrected (let IS sequential, bodies ARE implicit begin) Verification: full suite 5762 passed / 274 failed — fail set byte-identical to the pre-change baseline (273 in-progress hs-* + pre-existing r7rs radix shadow). All repros verified fixed on both the native binary and the rebuilt WASM browser kernel. Review findings: /tmp/sx-review/*.md Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 19 +- hosts/ocaml/bin/mcp_tree.ml | 86 +- hosts/ocaml/bin/run_tests.ml | 4 +- hosts/ocaml/bin/sx_server.ml | 52 +- hosts/ocaml/bootstrap.py | 81 +- hosts/ocaml/lib/sx_primitives.ml | 22 +- hosts/ocaml/lib/sx_ref.ml | 297 +- hosts/ocaml/lib/sx_types.ml | 6 + hosts/ocaml/transpiler.sx | 8 +- shared/static/wasm/sx_browser.bc.js | 5986 +++++++++++----------- shared/static/wasm/sx_browser.bc.wasm.js | 2 +- shared/sx/boundary.py | 25 +- spec/evaluator.sx | 60 +- spec/render.sx | 10 +- 14 files changed, 3445 insertions(+), 3213 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 12eeb3af..8da9f5ac 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -173,15 +173,16 @@ artdag/ ## SX Language — Canonical Reference -The SX language is defined by a self-hosting specification in `shared/sx/ref/`. **Read these files for authoritative SX semantics** — they supersede any implementation detail in `sx.js` or Python evaluators. +The SX language is defined by a self-hosting specification in `spec/`. **Read these files for authoritative SX semantics.** (The former `shared/sx/ref/*.sx` copies were deleted — only `BOUNDARY.md` remains there.) The spec is transpiled into the OCaml kernel (`hosts/ocaml/lib/sx_ref.ml`, generated by `hosts/ocaml/bootstrap.py` — never edit the generated file; edit the spec and regenerate). ### Specification files -- **`shared/sx/ref/eval.sx`** — Core evaluator: types, trampoline (TCO), `eval-expr` dispatch, special forms (`if`, `when`, `cond`, `case`, `let`, `and`, `or`, `lambda`, `define`, `defcomp`, `defmacro`, `quasiquote`), higher-order forms (`map`, `filter`, `reduce`, `some`, `every?`, `for-each`), macro expansion, function/lambda/component calling. -- **`shared/sx/ref/parser.sx`** — Tokenizer and parser: grammar, string escapes, dict literals `{:key val}`, quote sugar (`` ` ``, `,`, `,@`), serializer. -- **`shared/sx/ref/primitives.sx`** — All ~80 built-in pure functions: arithmetic, comparison, predicates, string ops, collection ops, dict ops, format helpers, CSSX style primitives. -- **`shared/sx/ref/render.sx`** — Three rendering modes: `render-to-html` (server HTML), `render-to-sx`/`aser` (SX wire format for client), `render-to-dom` (browser). HTML tag registry, void elements, boolean attrs. -- **`shared/sx/ref/bootstrap_js.py`** — Transpiler: reads the `.sx` spec files and emits `sx-ref.js`. +- **`spec/evaluator.sx`** — The CEK-machine evaluator: frames, TCO trampoline, `step`/dispatch, special forms (`if`, `when`, `cond`, `case`, `let`, `and`, `or`, `lambda`, `define`, `defcomp`, `defmacro`, `quasiquote`, `guard`, `handler-bind`), higher-order forms (`map`, `filter`, `reduce`, `some`, `every?`, `for-each`), continuations (`call/cc`, `reset`/`shift`), macro expansion, strict-typing machinery, function/lambda/component calling. +- **`spec/parser.sx`** — Tokenizer and parser: grammar, string escapes, dict literals `{:key val}`, quote sugar (`` ` ``, `,`, `,@`), serializer. +- **`spec/primitives.sx`** — Declarative specs for the built-in pure functions: arithmetic, comparison, predicates, string ops, collection ops, dict ops, format helpers, CSSX style primitives. +- **`spec/render.sx`** — Rendering registries + escaping (HTML tag registry, void elements, boolean attrs); the mode dispatch (`render-to-html`, `aser`, `render-to-dom`) lives in `web/adapter-*.sx`. +- **`spec/special-forms.sx`, `spec/eval-rules.sx`** — Form specs and machine-readable evaluation rules. +- **`spec/signals.sx`, `spec/coroutines.sx`, `spec/canonical.sx`, `spec/stdlib.sx`** — Reactive signals, coroutines, canonical serialization, stdlib. - **`spec/harness.sx`** — Test harness: mock IO platform for testing components. Sessions, IO interception, log queries, assertions (`assert-io-called`, `assert-io-count`, `assert-io-args`, `assert-no-io`, `assert-state`). Extensible — new platforms add entries to the platform dict. Loaded automatically by test runners. - **`spec/tests/test-harness.sx`** — Tests for the harness itself (15 tests). @@ -310,7 +311,7 @@ cd artdag/l1 && mypy app/types.py app/routers/recipes.py tests/ ### SX Rendering Pipeline -The SX system renders component trees defined in s-expressions. Canonical semantics are in `shared/sx/ref/` (see "SX Language" section above). The same AST can be evaluated in different modes depending on where the server/client rendering boundary is drawn: +The SX system renders component trees defined in s-expressions. Canonical semantics are in `spec/` (see "SX Language" section above). The same AST can be evaluated in different modes depending on where the server/client rendering boundary is drawn: - `render_to_html(name, **kw)` — server-side, produces HTML. Maps to `render-to-html` in the spec. - `render_to_sx(name, **kw)` — server-side, produces SX wire format. Maps to `aser` in the spec. Component calls stay **unexpanded**. @@ -450,7 +451,7 @@ printf '(epoch 1)\n(prim-check "my-compiled-fn")\n' | sx_server.exe Key patterns discovered from the reactive runtime demos (see `sx/sx/reactive-runtime.sx`): -1. **Multi-expression bodies need `(do ...)`** — `fn`, `let`, and `when` bodies evaluate only the last expression. Wrap multiples in `(do expr1 expr2 expr3)`. -2. **`let` is parallel, not sequential** — bindings in the same `let` can't reference each other. Use nested `let` blocks when functions need to reference signals defined earlier. +1. **Multi-expression bodies sequence (implicit begin)** — `fn`, `let`, and `when` bodies evaluate every expression and return the last (verified on both the CEK and the VM; the old "only the last expression runs" rule described a deleted evaluator). `(do ...)` still works and is fine for clarity. +2. **`let` is SEQUENTIAL (`let*` semantics)** — later bindings see earlier ones (`(let ((a 1) (b a)) b)` → 1; tested intent, both engines). `cond`, however, has a mode-detection footgun with multi-expression clause bodies — use flat pairs with explicit `(do ...)` results. 3. **Reactive text needs `(deref (computed ...))`** — bare `(len (deref items))` is NOT reactive. Wrap in `(deref (computed (fn () (len (deref items)))))`. 4. **Effects go in inner `let`** — signals in outer `let`, functions and effects in inner `let`. The OCaml SSR evaluator can't resolve outer `let` bindings from same-`let` lambdas. diff --git a/hosts/ocaml/bin/mcp_tree.ml b/hosts/ocaml/bin/mcp_tree.ml index a0142191..5274ec3d 100644 --- a/hosts/ocaml/bin/mcp_tree.ml +++ b/hosts/ocaml/bin/mcp_tree.ml @@ -375,18 +375,34 @@ let setup_env () = | [String s] when String.length s = 1 -> let c = s.[0] in Bool ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) | _ -> Bool false); + (* Parity with sx_primitives: Integer, not float — make-char requires an + Integer codepoint, so the float version broke #\a char literals here. *) bind "char-code" (fun args -> match args with - | [String s] when String.length s > 0 -> Number (float_of_int (Char.code s.[0])) - | _ -> Number 0.0); + | [String s] when String.length s > 0 -> Integer (Char.code s.[0]) + | _ -> Integer 0); bind "code-char" (fun args -> match args with | [Number n] -> String (String.make 1 (Char.chr (int_of_float n))) | _ -> String ""); + (* Parity with sx_primitives: Integer-aware — the float-only version + shadowed the kernel one and broke rationals through the guest parser. *) bind "parse-number" (fun args -> match args with - | [String s] -> (try Number (float_of_string s) with _ -> Nil) + | [String s] -> + let has_dec = String.contains s '.' in + let has_exp = String.contains s 'e' || String.contains s 'E' in + if has_dec || has_exp then + (try Number (float_of_string s) with Failure _ -> Nil) + else + (match int_of_string_opt s with + | Some n -> Integer n + | None -> (try Number (float_of_string s) with Failure _ -> Nil)) | _ -> Nil); bind "identical?" (fun args -> match args with | [a; b] -> Bool (a == b) | _ -> Bool false); + (* Parity with sx_server: equal? exists in the real runtime env *) + bind "equal?" (fun args -> match args with + | [a; b] -> Bool (a = b) + | _ -> raise (Eval_error "equal?: expected 2 args")); (* Character classification for SX parser.sx *) bind "ident-start?" (fun args -> match args with | [String s] when String.length s = 1 -> @@ -427,8 +443,10 @@ let setup_env () = (* Runtime functions needed by tree-tools *) bind "symbol-name" (fun args -> match args with | [Symbol s] -> String s | _ -> String ""); + (* Parity with sx_server: error on non-keyword (was a silent "") *) bind "keyword-name" (fun args -> match args with - | [Keyword k] -> String k | _ -> String ""); + | [Keyword k] -> String k + | _ -> raise (Eval_error "keyword-name: expected keyword")); bind "make-symbol" (fun args -> match args with | [String s] -> Symbol s | _ -> Nil); (* Environment operations needed by harness *) @@ -443,12 +461,30 @@ let setup_env () = | _ -> Bool false); bind "make-env" (fun _args -> Env (make_env ())); bind "keys" (fun args -> match args with - | [Dict d] -> List (Hashtbl.fold (fun k _ acc -> String k :: acc) d []) + | [Dict d] -> List (dict_keys d) | _ -> List []); - bind "get" (fun args -> match args with - | [Dict d; String k] -> (match Hashtbl.find_opt d k with Some v -> v | None -> Nil) - | [Dict d; Keyword k] -> (match Hashtbl.find_opt d k with Some v -> v | None -> Nil) - | [List items; Number n] -> (let i = int_of_float n in if i >= 0 && i < List.length items then List.nth items i else Nil) + (* Parity with sx_primitives: Integer indices (literals parse as Integer, + so the Number-only arm returned nil for every (get lst 1)), Symbol keys, + and the 3-arg default form — default only when the key is ABSENT. *) + bind "get" (fun args -> + let dict_key = function + | String k | Keyword k | Symbol k -> Some k + | _ -> None in + let list_idx = function + | Integer i -> Some i + | Number n -> Some (int_of_float n) + | _ -> None in + match args with + | [Dict d; key] | [Dict d; key; _] when dict_key key <> None && Hashtbl.mem d (Option.get (dict_key key)) -> + Hashtbl.find d (Option.get (dict_key key)) + | [Dict _; _] -> Nil + | [Dict _; _; default] -> default + | ([List items; idx] | [ListRef { contents = items }; idx]) when list_idx idx <> None -> + (let i = Option.get (list_idx idx) in + if i >= 0 && i < List.length items then List.nth items i else Nil) + | ([List items; idx; default] | [ListRef { contents = items }; idx; default]) when list_idx idx <> None -> + (let i = Option.get (list_idx idx) in + if i >= 0 && i < List.length items then List.nth items i else default) | _ -> Nil); bind "dict-set!" (fun args -> match args with | [Dict d; String k; v] -> Hashtbl.replace d k v; v @@ -478,8 +514,12 @@ let setup_env () = | [Number _] -> Bool true | _ -> Bool false); bind "callable?" (fun args -> match args with | [NativeFn _ | Lambda _ | Component _ | Island _ | VmClosure _] -> Bool true | _ -> Bool false); + (* Parity with sx_primitives: empty string and empty dict are empty + (test-primitives.sx:89 asserts this; the old arms said false). *) bind "empty?" (fun args -> match args with | [List []] | [ListRef { contents = [] }] -> Bool true + | [String s] -> Bool (String.length s = 0) + | [Dict d] -> Bool (Hashtbl.length d = 0) | [Nil] -> Bool true | _ -> Bool false); bind "contains?" (fun args -> match args with | [String s; String sub] -> @@ -490,6 +530,11 @@ let setup_env () = in Bool (String.length sub = 0 || find 0) | [List l; v] | [ListRef { contents = l }; v] -> Bool (List.exists (fun x -> x = v) l) + | [Dict d; key] -> + (* Dicts: key check — matches the sx_primitives fix *) + (match key with + | String k | Keyword k | Symbol k -> Bool (Hashtbl.mem d k) + | _ -> Bool false) | _ -> Bool false); bind "starts-with?" (fun args -> match args with | [String s; String prefix] -> @@ -560,9 +605,28 @@ let setup_env () = | _ -> Nil); bind "trim" (fun args -> match args with | [String s] -> String (String.trim s) | _ -> String ""); + (* Parity with sx_primitives: literal SUBSTRING separator (the old + split_on_char d.[0] was char-class semantics — the historical + "split is char-class" gotcha lived HERE, not in the kernel), keeps + empties, empty separator → chars, and no crash on "". *) bind "split" (fun args -> match args with - | [String s; String d] -> - List (List.map (fun p -> String p) (String.split_on_char d.[0] s)) + | [String s; String sep] -> + let sl = String.length s and pl = String.length sep in + if pl = 0 then + List (List.init sl (fun i -> String (String.make 1 s.[i]))) + else if pl = 1 then + List (List.map (fun p -> String p) (String.split_on_char sep.[0] s)) + else begin + let parts = ref [] and start = ref 0 and i = ref 0 in + while !i <= sl - pl do + if String.sub s !i pl = sep then begin + parts := String.sub s !start (!i - !start) :: !parts; + start := !i + pl; i := !i + pl + end else incr i + done; + parts := String.sub s !start (sl - !start) :: !parts; + List (List.map (fun p -> String p) (List.rev !parts)) + end | _ -> List []); (* sx-parse — use the native OCaml parser for bootstrapping *) bind "sx-parse" (fun args -> match args with diff --git a/hosts/ocaml/bin/run_tests.ml b/hosts/ocaml/bin/run_tests.ml index 36e356d6..c4e4c2df 100644 --- a/hosts/ocaml/bin/run_tests.ml +++ b/hosts/ocaml/bin/run_tests.ml @@ -1151,7 +1151,7 @@ let make_test_env () = bind "promise?" (fun args -> match args with - | [v] -> Bool (Sx_ref.is_promise v) + | [v] -> Sx_ref.promise_p v | _ -> Bool false); bind "make-promise" (fun args -> @@ -1166,7 +1166,7 @@ let make_test_env () = bind "force" (fun args -> match args with - | [p] -> Sx_ref.force_promise p + | [p] -> Sx_ref.force p | _ -> Nil); env diff --git a/hosts/ocaml/bin/sx_server.ml b/hosts/ocaml/bin/sx_server.ml index 7c197d99..c6d2e28e 100644 --- a/hosts/ocaml/bin/sx_server.ml +++ b/hosts/ocaml/bin/sx_server.ml @@ -2631,8 +2631,12 @@ let http_render_page env path headers = Printf.eprintf "[http] route error for %s: %s\n%!" path (Printexc.to_string e); Nil in - (* Build an error page AST that keeps the layout intact *) + (* Build an error page AST that keeps the layout intact. + Sets is_error_page so callers can avoid caching soft error pages — + a transient routing failure must not be served from cache until restart. *) + let is_error_page = ref false in let error_page_ast msg = + is_error_page := true; List [Symbol "div"; Keyword "class"; String "p-8 max-w-2xl mx-auto"; List [Symbol "h2"; Keyword "class"; String "text-xl font-semibold text-rose-600 mb-4"; String "Page Error"]; @@ -2672,7 +2676,7 @@ let http_render_page env path headers = | String s | SxExpr s -> s | _ -> serialize_value body_result in let t1 = Unix.gettimeofday () in Printf.eprintf "[sx-http] %s (SX) aser=%.3fs body=%d\n%!" path (t1 -. t0) (String.length body_str); - Some body_str + Some (body_str, !is_error_page) end else begin (* Full page: aser → SSR → shell *) let outer_layout = get_app_str "outer-layout" "~shared:layout/app-body" in @@ -2727,7 +2731,7 @@ let http_render_page env path headers = let t4 = Unix.gettimeofday () in Printf.eprintf "[sx-http] %s route=%.3fs aser=%.3fs ssr=%.3fs shell=%.3fs total=%.3fs html=%d\n%!" path (t1 -. t0) (t2 -. t1) (t3 -. t2) (t4 -. t3) (t4 -. t0) (String.length html); - Some html + Some (html, !is_error_page) end end @@ -4159,8 +4163,18 @@ let http_mode port = http_inject_shell_statics env static_dir sx_sxc; (* Init shared VM globals AFTER all files loaded + shell statics injected. The env_bind hook keeps it in sync with any future bindings. *) - (* Enable lazy JIT — compile lambdas to bytecode on first call *) - register_jit_hook env; + (* Lazy JIT is OPT-IN via SX_SERVING_JIT=1, matching the epoch serving mode. + The serving JIT has confirmed miscompiles (`->` in argument position + evaluates steps once per remaining step and leaves stack residue; any + VM exception re-runs the whole call on the CEK, double-applying side + effects; user-macro call args are evaluated eagerly before fallback). + Until those are fixed, HTTP rendering runs on the CEK by default — + the response cache carries the hot paths. *) + (match Sys.getenv_opt "SX_SERVING_JIT" with + | Some ("1" | "true" | "yes" | "on") -> + register_jit_hook env + | _ -> + Printf.eprintf "[sx-http] serving JIT disabled (opt in with SX_SERVING_JIT=1)\n%!"); (* Install global IO resolver so perform works inside aser/eval_expr. This lets components call measure-text during server-side rendering. *) Sx_types._cek_io_resolver := Some (fun request _state -> @@ -4207,7 +4221,9 @@ let http_mode port = let cache_response path = match http_render_page env path [] with - | Some html -> + | Some (_, true) -> + Printf.eprintf "[cache] %s → error page, not cached\n%!" path + | Some (html, false) -> let resp = http_response html in Hashtbl.replace response_cache path resp; Printf.eprintf "[cache] %s → %d bytes\n%!" path (String.length html) @@ -4297,7 +4313,7 @@ let http_mode port = let response = try match http_render_page env path headers with - | Some body -> + | Some (body, is_err) -> (* htmx requests get HTML; SX requests get SX wire format *) let final_body = if is_htmx then (try @@ -4309,7 +4325,7 @@ let http_mode port = let ct = if is_ajax && not is_htmx then "text/sx; charset=utf-8" else "text/html; charset=utf-8" in let resp = http_response ~content_type:ct final_body in - Hashtbl.replace response_cache cache_key resp; + if not is_err then Hashtbl.replace response_cache cache_key resp; resp | None -> http_response ~status:404 "

Not Found

" with e -> @@ -4663,7 +4679,7 @@ let http_mode port = String.lowercase_ascii k = "hx-request") headers in let response = try match http_render_page env path headers with - | Some body -> + | Some (body, is_err) -> let final_body = if is_htmx then (try let exprs = Sx_parser.parse_all body in @@ -4674,7 +4690,7 @@ let http_mode port = let ct = if is_htmx then "text/html; charset=utf-8" else "text/sx; charset=utf-8" in let resp = http_response ~content_type:ct final_body in - if not is_htmx then Hashtbl.replace response_cache cache_key resp; + if not is_htmx && not is_err then Hashtbl.replace response_cache cache_key resp; resp | None -> http_response ~status:404 "(div :class \"p-8\" (h2 :class \"text-rose-600 font-semibold\" \"Page not found\") (p :class \"text-stone-500\" \"No route matched this path\"))" @@ -4690,7 +4706,7 @@ let http_mode port = Don't cache: response varies by cookie value. *) let response = try match http_render_page env path [] with - | Some body -> http_response body + | Some (body, _) -> http_response body | None -> http_response ~status:404 "

Not Found

" with e -> Printf.eprintf "[render] Cookie render error for %s: %s\n%!" path (Printexc.to_string e); @@ -4947,7 +4963,11 @@ let site_mode () = let line = String.trim line in if line = "" then () else begin - let exprs = Sx_parser.parse_all line in + (* A malformed line must never kill the shared command channel: + report it as an error response and keep serving. *) + match (try Ok (Sx_parser.parse_all line) with e -> Error e) with + | Error e -> send_error ("Malformed command line: " ^ Printexc.to_string e) + | Ok exprs -> match exprs with | [List [Symbol "epoch"; Number n]] -> current_epoch := int_of_float n @@ -4956,7 +4976,7 @@ let site_mode () = (* render-page: full SSR pipeline — URL → complete HTML *) | [List [Symbol "render-page"; String path]] -> (try match http_render_page env path [] with - | Some html -> send_ok_blob html + | Some (html, _) -> send_ok_blob html | None -> send_error ("render-page: no route for " ^ path) with e -> send_error ("render-page: " ^ Printexc.to_string e)) (* nav-urls: flat list of (href label) from nav tree *) @@ -5045,7 +5065,11 @@ let () = Printf.eprintf "[sx-server] discarding stale io-response (%d chars)\n%!" (String.length line) else begin - let exprs = Sx_parser.parse_all line in + (* A malformed line must never kill the shared command channel: + report it as an error response and keep serving. *) + match (try Ok (Sx_parser.parse_all line) with e -> Error e) with + | Error e -> send_error ("Malformed command line: " ^ Printexc.to_string e) + | Ok exprs -> match exprs with (* Epoch marker: (epoch N) — set current epoch, read next command *) | [List [Symbol "epoch"; Number n]] -> diff --git a/hosts/ocaml/bootstrap.py b/hosts/ocaml/bootstrap.py index e8df8b4e..d347e81e 100644 --- a/hosts/ocaml/bootstrap.py +++ b/hosts/ocaml/bootstrap.py @@ -156,8 +156,7 @@ let sf_define_type args env_val = (match pargs with | [v] -> (match v with - | Dict d -> Bool (Hashtbl.mem d "_adt" && - (match Hashtbl.find_opt d "_type" with Some (String t) -> t = type_name | _ -> false)) + | AdtValue a -> Bool (a.av_type = type_name) | _ -> Bool false) | _ -> Bool false))); List.iter (fun spec -> @@ -171,21 +170,18 @@ let sf_define_type args env_val = if List.length ctor_args <> arity then raise (Eval_error (Printf.sprintf "%s: expected %d args, got %d" cn arity (List.length ctor_args))) - else begin - let d = Hashtbl.create 4 in - Hashtbl.replace d "_adt" (Bool true); - Hashtbl.replace d "_type" (String type_name); - Hashtbl.replace d "_ctor" (String cn); - Hashtbl.replace d "_fields" (List ctor_args); - Dict d - end)); + else + AdtValue { + av_type = type_name; + av_ctor = cn; + av_fields = Array.of_list ctor_args; + })); env_bind_v (cn ^ "?") (NativeFn (cn ^ "?", fun pargs -> (match pargs with | [v] -> (match v with - | Dict d -> Bool (Hashtbl.mem d "_adt" && - (match Hashtbl.find_opt d "_ctor" with Some (String c) -> c = cn | _ -> false)) + | AdtValue a -> Bool (a.av_ctor = cn) | _ -> Bool false) | _ -> Bool false))); List.iteri (fun idx fname -> @@ -194,28 +190,53 @@ let sf_define_type args env_val = (match pargs with | [v] -> (match v with - | Dict d -> - (match Hashtbl.find_opt d "_fields" with - | Some (List fs) -> - if idx < List.length fs then List.nth fs idx - else raise (Eval_error (cn ^ "-" ^ fname ^ ": index out of bounds")) - | _ -> raise (Eval_error (cn ^ "-" ^ fname ^ ": not an ADT"))) - | _ -> raise (Eval_error (cn ^ "-" ^ fname ^ ": not a dict"))) + | AdtValue a -> + if idx < Array.length a.av_fields then a.av_fields.(idx) + else raise (Eval_error (cn ^ "-" ^ fname ^ ": index out of bounds")) + | _ -> raise (Eval_error (cn ^ "-" ^ fname ^ ": not an ADT"))) | _ -> raise (Eval_error (cn ^ "-" ^ fname ^ ": expected 1 arg"))))) ) field_names | _ -> ()) ) ctor_specs; Nil -(* Register define-type via custom_special_forms so the CEK dispatch finds it. - The top-level (register-special-form! ...) in spec/evaluator.sx is not a - define and therefore is not transpiled; we wire it up here instead. *) +(* Register special forms via custom_special_forms so the CEK dispatch finds + them. The top-level (register-special-form! ...) calls in spec/evaluator.sx + are not defines and therefore are not transpiled; we wire them up here. + let-values/define-values/delay/delay-force point at the TRANSPILED spec + functions (sf_let_values etc.) — these registrations were previously + hand-appended to the generated sx_ref.ml and were silently lost on every + regeneration (2026-07 review). *) let () = ignore (register_special_form (String "define-type") (NativeFn ("define-type", fun call_args -> match call_args with | [args; env] -> sf_define_type args env | _ -> Nil))) +let () = ignore (register_special_form (String "let-values") + (NativeFn ("let-values", fun call_args -> + match call_args with + | [args; env] -> sf_let_values args env + | _ -> Nil))) + +let () = ignore (register_special_form (String "define-values") + (NativeFn ("define-values", fun call_args -> + match call_args with + | [args; env] -> sf_define_values args env + | _ -> Nil))) + +let () = ignore (register_special_form (String "delay") + (NativeFn ("delay", fun call_args -> + match call_args with + | [args; env] -> sf_delay args env + | _ -> Nil))) + +let () = ignore (register_special_form (String "delay-force") + (NativeFn ("delay-force", fun call_args -> + match call_args with + | [args; env] -> sf_delay_force args env + | _ -> Nil))) + """ @@ -263,7 +284,21 @@ def compile_spec_to_ml(spec_dir: str | None = None) -> str: "pad-left", "pad-right", "char-at", "substring", # sf-define-type uses &rest + empty-dict literals that the transpiler # can't emit as valid OCaml; hand-written implementation in FIXUPS. - "sf-define-type"} + "sf-define-type", + # Arrow-named portability shims for non-OCaml hosts. All three + # are registered natively in sx_primitives.ml, and the + # transpiler has no mangling rule for '>' in identifiers + # (emits invalid OCaml like `string_>symbol`). + "string->symbol", "symbol->string", "integer->char", + # values/in-range use &rest, which the transpiler can't emit + # (see sf-define-type above). in-range is registered natively; + # values has never been in the compiled kernel — bound only in + # run_tests.ml (2026-07 review F-7); making it a real kernel + # primitive is a tracked follow-up. + "values", "in-range", "build-range", + # zero-arg guest shim; the native gensym (with optional + # prefix) is registered in sx_primitives.ml + "gensym"} defines = [(n, e) for n, e in defines if n not in skip] # Deduplicate — keep last definition for each name (CEK overrides tree-walk) diff --git a/hosts/ocaml/lib/sx_primitives.ml b/hosts/ocaml/lib/sx_primitives.ml index 95d68983..c002a755 100644 --- a/hosts/ocaml/lib/sx_primitives.ml +++ b/hosts/ocaml/lib/sx_primitives.ml @@ -430,8 +430,20 @@ let () = register "expt" (fun args -> match args with | [Integer a; Integer b] when b >= 0 -> - let rec ipow base e acc = if e = 0 then acc else ipow base (e - 1) (acc * base) in - Integer (ipow a b 1) + (* Overflow-checked integer power: promote to float instead of + silently wrapping int63 ((expt 2 100) used to return 0). *) + let mul_ovf x y = + if x = 0 || y = 0 then Some 0 + else let p = x * y in + if p / y <> x then None else Some p in + let rec ipow base e acc = + if e = 0 then Some acc + else match mul_ovf acc base with + | None -> None + | Some acc' -> ipow base (e - 1) acc' in + (match ipow a b 1 with + | Some n -> Integer n + | None -> Number (Float.pow (float_of_int a) (float_of_int b))) | [a; b] -> Number (Float.pow (as_number a) (as_number b)) | _ -> raise (Eval_error "expt: 2 args")); register "quotient" (fun args -> @@ -1227,6 +1239,12 @@ let () = else if String.sub s i (String.length sub) = sub then true else find (i + 1) in Bool (find 0) + | [Dict d; key] -> + (* Dicts: key check (per the spec doc). Keywords evaluate to their + string name, so (contains? {:a 1} :a) arrives as String "a". *) + (match key with + | String k | Keyword k | Symbol k -> Bool (Hashtbl.mem d k) + | _ -> Bool false) | _ -> raise (Eval_error "contains?: 2 args")); register "range" (fun args -> match args with diff --git a/hosts/ocaml/lib/sx_ref.ml b/hosts/ocaml/lib/sx_ref.ml index 7d1893fb..2a4fa8ff 100644 --- a/hosts/ocaml/lib/sx_ref.ml +++ b/hosts/ocaml/lib/sx_ref.ml @@ -24,19 +24,6 @@ let _protocol_registry_ = Dict (Hashtbl.create 0) (* === Transpiled from evaluator (frames + eval + CEK) === *) -(* seq-to-list: coerce list/vector/string/nil to list for HO dispatch *) -let seq_to_list v = - match v with - | Nil -> List [] - | List _ -> v - | ListRef { contents = items } -> List items - | Vector arr -> List (Array.to_list arr) - | String s -> - let chars = ref [] in - String.iter (fun c -> chars := String (String.make 1 c) :: !chars) s; - List (List.rev !chars) - | _ -> v - (* make-cek-state *) let rec make_cek_state control env kont = (CekState { cs_control = control; cs_env = env; cs_kont = kont; cs_phase = "eval"; cs_value = Nil }) @@ -484,7 +471,7 @@ and foreign_dispatch name args = (* foreign-parse-params-loop *) and foreign_parse_params_loop items acc = - (if sx_truthy ((empty_p (items))) then acc else (let item = (first (items)) in let rest_items = (rest (items)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_items)))))) in if not (sx_truthy _and) then _and else (let _and = (keyword_p ((first (rest_items)))) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(keyword_name ((first (rest_items)))); (String "as")]) in if not (sx_truthy _and) then _and else (prim_call ">=" [(len (rest_items)); (Number 2.0)]))))) then (foreign_parse_params_loop ((rest ((rest (rest_items))))) ((prim_call "append" [acc; (List [(let _d = Hashtbl.create 2 in Hashtbl.replace _d "type" (let t = (nth (rest_items) ((Number 1.0))) in (if sx_truthy ((keyword_p (t))) then (keyword_name (t)) else (String (sx_str [t])))); Hashtbl.replace _d "name" (if sx_truthy ((symbol_p (item))) then (symbol_name (item)) else (String (sx_str [item]))); Dict _d)])]))) else (foreign_parse_params_loop (rest_items) ((prim_call "append" [acc; (List [(CekFrame { cf_type = "any"; cf_env = Nil; cf_name = (if sx_truthy ((symbol_p (item))) then (symbol_name (item)) else (String (sx_str [item]))); cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })])])))))) + (if sx_truthy ((empty_p (items))) then acc else (let item = (first (items)) in let rest_items = (rest (items)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_items)))))) in if not (sx_truthy _and) then _and else (let _and = (keyword_p ((first (rest_items)))) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(keyword_name ((first (rest_items)))); (String "as")]) in if not (sx_truthy _and) then _and else (prim_call ">=" [(len (rest_items)); (Number 2.0)]))))) then (foreign_parse_params_loop ((rest ((rest (rest_items))))) ((prim_call "append" [acc; (List [(let _d = Hashtbl.create 2 in Hashtbl.replace _d "name" (if sx_truthy ((symbol_p (item))) then (symbol_name (item)) else (String (sx_str [item]))); Hashtbl.replace _d "type" (let t = (nth (rest_items) ((Number 1.0))) in (if sx_truthy ((keyword_p (t))) then (keyword_name (t)) else (String (sx_str [t])))); Dict _d)])]))) else (foreign_parse_params_loop (rest_items) ((prim_call "append" [acc; (List [(CekFrame { cf_type = "any"; cf_env = Nil; cf_name = (if sx_truthy ((symbol_p (item))) then (symbol_name (item)) else (String (sx_str [item]))); cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })])])))))) (* step-sf-io *) and step_sf_io args env kont = @@ -582,12 +569,24 @@ and parse_macro_params params_expr = (* qq-expand *) and qq_expand template env = - (if sx_truthy ((Bool (not (sx_truthy ((prim_call "=" [(type_of (template)); (String "list")])))))) then template else (if sx_truthy ((empty_p (template))) then (List []) else (let head = (first (template)) in (if sx_truthy ((let _and = (prim_call "=" [(type_of (head)); (String "symbol")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(symbol_name (head)); (String "unquote")]))) then (trampoline ((eval_expr ((nth (template) ((Number 1.0)))) (env)))) else (List.fold_left (fun result' item -> (if sx_truthy ((let _and = (prim_call "=" [(type_of (item)); (String "list")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((first (item)))); (String "symbol")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(symbol_name ((first (item)))); (String "splice-unquote")]))))) then (let spliced = (trampoline ((eval_expr ((nth (item) ((Number 1.0)))) (env)))) in (if sx_truthy ((prim_call "=" [(type_of (spliced)); (String "list")])) then (prim_call "concat" [result'; spliced]) else (if sx_truthy ((is_nil (spliced))) then result' else (prim_call "concat" [result'; (List [spliced])])))) else (prim_call "concat" [result'; (List [(qq_expand (item) (env))])]))) (List []) (sx_to_list template)))))) + (if sx_truthy ((Bool (not (sx_truthy ((prim_call "=" [(type_of (template)); (String "list")])))))) then template else (if sx_truthy ((empty_p (template))) then (List []) else (let head = (first (template)) in (if sx_truthy ((let _and = (prim_call "=" [(type_of (head)); (String "symbol")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(symbol_name (head)); (String "unquote")]))) then (trampoline ((eval_expr ((nth (template) ((Number 1.0)))) (env)))) else (List.fold_left (fun result' item -> (if sx_truthy ((let _and = (prim_call "=" [(type_of (item)); (String "list")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((first (item)))); (String "symbol")]) in if not (sx_truthy _and) then _and else (let _or = (prim_call "=" [(symbol_name ((first (item)))); (String "splice-unquote")]) in if sx_truthy _or then _or else (prim_call "=" [(symbol_name ((first (item)))); (String "unquote-splicing")])))))) then (let spliced = (trampoline ((eval_expr ((nth (item) ((Number 1.0)))) (env)))) in (if sx_truthy ((prim_call "=" [(type_of (spliced)); (String "list")])) then (prim_call "concat" [result'; spliced]) else (if sx_truthy ((is_nil (spliced))) then result' else (prim_call "concat" [result'; (List [spliced])])))) else (prim_call "concat" [result'; (List [(qq_expand (item) (env))])]))) (List []) (sx_to_list template)))))) (* sf-letrec *) and sf_letrec args env = (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in let names = ref ((List [])) in let val_exprs = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call "=" [(type_of ((first (bindings)))); (String "list")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let vname = (if sx_truthy ((prim_call "=" [(type_of ((first (binding)))); (String "symbol")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs (nth (binding) ((Number 1.0))); Nil)) in (env_bind local (sx_to_string vname) Nil)))))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let vname = (if sx_truthy ((prim_call "=" [(type_of ((nth (bindings) ((prim_call "*" [pair_idx; (Number 2.0)]))))); (String "symbol")])) then (symbol_name ((nth (bindings) ((prim_call "*" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call "*" [pair_idx; (Number 2.0)])))) in let val_expr = (nth (bindings) ((prim_call "inc" [(prim_call "*" [pair_idx; (Number 2.0)])]))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs val_expr; Nil)) in (env_bind local (sx_to_string vname) Nil))))) Nil (sx_to_list (prim_call "range" [(Number 0.0); (prim_call "/" [(len (bindings)); (Number 2.0)])]))))) in (let () = ignore ((let values = (List (List.map (fun e -> (trampoline ((eval_expr (e) (local))))) (sx_to_list !val_exprs))) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call "zip" [!names; values])); Nil)) in (List.iter (fun val' -> ignore ((if sx_truthy ((is_lambda (val'))) then (List.iter (fun n -> ignore ((env_bind (lambda_closure (val')) (sx_to_string n) (env_get (local) (n))))) (sx_to_list !names); Nil) else Nil))) (sx_to_list values); Nil)))) in (let () = ignore ((List.iter (fun e -> ignore ((trampoline ((eval_expr (e) (local)))))) (sx_to_list (prim_call "slice" [body; (Number 0.0); (prim_call "dec" [(len (body))])])); Nil)) in (make_thunk ((last (body))) (local)))))) +(* call-with-values *) +and call_with_values producer consumer = + (let result' = (sx_apply producer (List [])) in (if sx_truthy ((let _and = (dict_p (result')) in if not (sx_truthy _and) then _and else (get (result') ((String "_values"))))) then (sx_apply consumer (get (result') ((String "_list")))) else (sx_apply consumer (List [result'])))) + +(* sf-let-values *) +and sf_let_values args env = + (let clauses = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in (let () = ignore ((List.iter (fun clause -> ignore ((let names = (first (clause)) in let val_expr = (nth (clause) ((Number 1.0))) in (let result' = (trampoline ((eval_expr (val_expr) (local)))) in (let vs = (if sx_truthy ((let _and = (dict_p (result')) in if not (sx_truthy _and) then _and else (get (result') ((String "_values"))))) then (get (result') ((String "_list"))) else (List [result'])) in (for_each_indexed ((NativeFn ("\206\187", fun _args -> match _args with [idx; name] -> (fun idx name -> (env_bind local (sx_to_string (symbol_name (name))) (nth (vs) (idx)))) idx name | _ -> Nil))) (names))))))) (sx_to_list clauses); Nil)) in (let last_val = ref (Nil) in (let () = ignore ((List.iter (fun e -> ignore ((last_val := (trampoline ((eval_expr (e) (local)))); Nil))) (sx_to_list body); Nil)) in !last_val)))) + +(* sf-define-values *) +and sf_define_values args env = + (let names = (first (args)) in let val_expr = (nth (args) ((Number 1.0))) in (let result' = (trampoline ((eval_expr (val_expr) (env)))) in (let vs = (if sx_truthy ((let _and = (dict_p (result')) in if not (sx_truthy _and) then _and else (get (result') ((String "_values"))))) then (get (result') ((String "_list"))) else (List [result'])) in (let () = ignore ((for_each_indexed ((NativeFn ("\206\187", fun _args -> match _args with [idx; name] -> (fun idx name -> (env_bind env (sx_to_string (symbol_name (name))) (nth (vs) (idx)))) idx name | _ -> Nil))) (names))) in Nil)))) + (* step-sf-letrec *) and step_sf_letrec args env kont = (let thk = (sf_letrec (args) (env)) in (make_cek_state ((thunk_expr (thk))) ((thunk_env (thk))) (kont))) @@ -634,7 +633,7 @@ and step_sf_raise args env kont = (* step-sf-guard *) and step_sf_guard args env kont = - (let var_clauses = (first (args)) in let body = (rest (args)) in let var = (first (var_clauses)) in let clauses = (rest (var_clauses)) in let sentinel = (make_symbol ((String "__guard-reraise__"))) in (step_eval_list ((List [(Symbol "let"); (List [(List [(Symbol "__guard-result"); (cons ((Symbol "call/cc")) ((List [(cons ((Symbol "fn")) ((cons ((List [(Symbol "__guard-k")])) ((List [(cons ((Symbol "handler-bind")) ((cons ((List [(List [(cons ((Symbol "fn")) ((cons ((List [(Symbol "_")])) ((List [(Bool true)]))))); (cons ((Symbol "fn")) ((cons ((List [var])) ((List [(List [(Symbol "__guard-k"); (cons ((Symbol "cond")) ((prim_call "append" [clauses; (List [(List [(Symbol "else"); (List [(Symbol "list"); (List [(Symbol "quote"); sentinel]); var])])])])))])])))))])])) ((List [(List [(Symbol "__guard-k"); (cons ((Symbol "begin")) (body))])])))))])))))])))])]); (List [(Symbol "if"); (List [(Symbol "and"); (List [(Symbol "list?"); (Symbol "__guard-result")]); (List [(Symbol "="); (List [(Symbol "len"); (Symbol "__guard-result")]); (Number 2.0)]); (List [(Symbol "="); (List [(Symbol "first"); (Symbol "__guard-result")]); (List [(Symbol "quote"); sentinel])])]); (List [(Symbol "raise"); (List [(Symbol "nth"); (Symbol "__guard-result"); (Number 1.0)])]); (Symbol "__guard-result")])])) (env) (kont))) + (let var_clauses = (first (args)) in let body = (rest (args)) in let var = (first (var_clauses)) in let clauses = (rest (var_clauses)) in let sentinel = (prim_call "gensym" [(String "__guard-reraise__")]) in (step_eval_list ((List [(Symbol "let"); (List [(List [(Symbol "__guard-result"); (cons ((Symbol "call/cc")) ((List [(cons ((Symbol "fn")) ((cons ((List [(Symbol "__guard-k")])) ((List [(cons ((Symbol "handler-bind")) ((cons ((List [(List [(cons ((Symbol "fn")) ((cons ((List [(Symbol "_")])) ((List [(Bool true)]))))); (cons ((Symbol "fn")) ((cons ((List [var])) ((List [(List [(Symbol "__guard-k"); (cons ((Symbol "cond")) ((prim_call "append" [clauses; (List [(List [(Symbol "else"); (List [(Symbol "list"); (List [(Symbol "quote"); sentinel]); var])])])])))])])))))])])) ((List [(List [(Symbol "__guard-k"); (cons ((Symbol "begin")) (body))])])))))])))))])))])]); (List [(Symbol "if"); (List [(Symbol "and"); (List [(Symbol "list?"); (Symbol "__guard-result")]); (List [(Symbol "="); (List [(Symbol "len"); (Symbol "__guard-result")]); (Number 2.0)]); (List [(Symbol "="); (List [(Symbol "first"); (Symbol "__guard-result")]); (List [(Symbol "quote"); sentinel])])]); (List [(Symbol "raise"); (List [(Symbol "nth"); (Symbol "__guard-result"); (Number 1.0)])]); (Symbol "__guard-result")])])) (env) (kont))) (* step-sf-callcc *) and step_sf_callcc args env kont = @@ -650,7 +649,27 @@ and step_sf_let_match args env kont = (* step-eval-list *) and step_eval_list expr env kont = - (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((let _or = (prim_call "=" [(type_of (head)); (String "symbol")]) in if sx_truthy _or then _or else (let _or = (prim_call "=" [(type_of (head)); (String "lambda")]) in if sx_truthy _or then _or else (prim_call "=" [(type_of (head)); (String "list")])))))))) then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (make_cek_state ((first (expr))) (env) ((kont_push ((make_map_frame (Nil) ((rest (expr))) ((List [])) (env))) (kont))))) else (if sx_truthy ((prim_call "=" [(type_of (head)); (String "symbol")])) then (let name = (symbol_name (head)) in (let _match_val = name in (if sx_truthy ((prim_call "=" [_match_val; (String "if")])) then (step_sf_if (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "when")])) then (step_sf_when (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond")])) then (step_sf_cond (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "case")])) then (step_sf_case (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "and")])) then (step_sf_and (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "or")])) then (step_sf_or (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let*")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "lambda")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "fn")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defcomp")])) then (make_cek_value ((sf_defcomp (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defisland")])) then (make_cek_value ((sf_defisland (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defmacro")])) then (make_cek_value ((sf_defmacro (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defio")])) then (make_cek_value ((sf_defio (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-foreign")])) then (step_sf_define_foreign (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "io")])) then (step_sf_io (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "begin")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "do")])) then (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (args)))))) in if not (sx_truthy _and) then _and else (let _and = (list_p ((first (args)))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p ((first (args)))))))) in if not (sx_truthy _and) then _and else (list_p ((first ((first (args)))))))))) then (let bindings = (first (args)) in let test_clause = (nth (args) ((Number 1.0))) in let body = (rest ((rest (args)))) in let vars = (List (List.map (fun b -> (first (b))) (sx_to_list bindings))) in let inits = (List (List.map (fun b -> (nth (b) ((Number 1.0)))) (sx_to_list bindings))) in let steps = (List (List.map (fun b -> (if sx_truthy ((prim_call ">" [(len (b)); (Number 2.0)])) then (nth (b) ((Number 2.0))) else (first (b)))) (sx_to_list bindings))) in let test = (first (test_clause)) in let result' = (rest (test_clause)) in (step_eval_list ((cons ((Symbol "let")) ((cons ((Symbol "__do-loop")) ((cons ((List (List.map (fun b -> (List [(first (b)); (nth (b) ((Number 1.0)))])) (sx_to_list bindings)))) ((List [(cons ((Symbol "if")) ((cons (test) ((cons ((if sx_truthy ((empty_p (result'))) then Nil else (cons ((Symbol "begin")) (result')))) ((List [(cons ((Symbol "begin")) ((prim_call "append" [body; (List [(cons ((Symbol "__do-loop")) (steps))])])))])))))))])))))))) (env) (kont))) else (step_sf_begin (args) (env) (kont))) else (if sx_truthy ((prim_call "=" [_match_val; (String "guard")])) then (step_sf_guard (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "quote")])) then (make_cek_value ((if sx_truthy ((empty_p (args))) then Nil else (first (args)))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "quasiquote")])) then (make_cek_value ((qq_expand ((first (args))) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "->")])) then (step_sf_thread_first (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "->>")])) then (step_sf_thread_last (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "|>")])) then (step_sf_thread_last (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "as->")])) then (step_sf_thread_as (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "set!")])) then (step_sf_set_b (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "letrec")])) then (step_sf_letrec (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "reset")])) then (step_sf_reset (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "shift")])) then (step_sf_shift (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "deref")])) then (step_sf_deref (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope")])) then (step_sf_scope (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide")])) then (step_sf_provide (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "peek")])) then (step_sf_peek (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide!")])) then (step_sf_provide_b (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "context")])) then (step_sf_context (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "bind")])) then (step_sf_bind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "emit!")])) then (step_sf_emit (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "emitted")])) then (step_sf_emitted (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "handler-bind")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "restart-case")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "signal-condition")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "invoke-restart")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "match")])) then (step_sf_match (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let-match")])) then (step_sf_let_match (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "dynamic-wind")])) then (step_sf_dynamic_wind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (step_ho_map (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "map-indexed")])) then (step_ho_map_indexed (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (step_ho_filter (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (step_ho_reduce (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (step_ho_some (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "every?")])) then (step_ho_every (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (step_ho_for_each (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise")])) then (step_sf_raise (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-continuable")])) then (make_cek_state ((first (args))) (env) ((kont_push ((make_raise_eval_frame (env) ((Bool true)))) (kont)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "call/cc")])) then (step_sf_callcc (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "call-with-current-continuation")])) then (step_sf_callcc (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "perform")])) then (step_sf_perform (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-library")])) then (step_sf_define_library (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "import")])) then (step_sf_import (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-record-type")])) then (make_cek_value ((sf_define_record_type (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-protocol")])) then (make_cek_value ((sf_define_protocol (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "implement")])) then (make_cek_value ((sf_implement (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "parameterize")])) then (step_sf_parameterize (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "syntax-rules")])) then (make_cek_value ((sf_syntax_rules (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-syntax")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((let _and = (prim_call "has-key?" [custom_special_forms; name]) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((env_has (env) (name)))))))) then (make_cek_value ((cek_call ((get (custom_special_forms) (name))) (List [args; env]))) (env) (kont)) else (if sx_truthy ((let _and = (env_has (env) (name)) in if not (sx_truthy _and) then _and else (is_macro ((env_get (env) (name)))))) then (let mac = (env_get (env) (name)) in (make_cek_state ((expand_macro (mac) (args) (env))) (env) (kont))) else (if sx_truthy ((let _and = render_check in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((env_has (env) (name)))))) in if not (sx_truthy _and) then _and else (cek_call (render_check) (List [expr; env]))))) then (make_cek_value ((cek_call (render_fn) (List [expr; env]))) (env) (kont)) else (step_eval_call (head) (args) (env) (kont))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) else (step_eval_call (head) (args) (env) (kont))))) + (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((let _or = (prim_call "=" [(type_of (head)); (String "symbol")]) in if sx_truthy _or then _or else (let _or = (prim_call "=" [(type_of (head)); (String "lambda")]) in if sx_truthy _or then _or else (prim_call "=" [(type_of (head)); (String "list")])))))))) then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (make_cek_state ((first (expr))) (env) ((kont_push ((make_map_frame (Nil) ((rest (expr))) ((List [])) (env))) (kont))))) else (if sx_truthy ((prim_call "=" [(type_of (head)); (String "symbol")])) then (let name = (symbol_name (head)) in (let _match_val = name in (if sx_truthy ((prim_call "=" [_match_val; (String "if")])) then (step_sf_if (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "when")])) then (step_sf_when (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond")])) then (step_sf_cond (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "case")])) then (step_sf_case (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "and")])) then (step_sf_and (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "or")])) then (step_sf_or (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let*")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "lambda")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "fn")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defcomp")])) then (make_cek_value ((sf_defcomp (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defisland")])) then (make_cek_value ((sf_defisland (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defmacro")])) then (make_cek_value ((sf_defmacro (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "defio")])) then (make_cek_value ((sf_defio (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-foreign")])) then (step_sf_define_foreign (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "io")])) then (step_sf_io (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "begin")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "do")])) then (if sx_truthy ((let _and = (prim_call ">=" [(len (args)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (list_p ((first (args)))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p ((first (args)))))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (List.for_all (fun b -> sx_truthy ((list_p (b)))) (sx_to_list (first (args))))) in if not (sx_truthy _and) then _and else (list_p ((nth (args) ((Number 1.0)))))))))) then (let bindings = (first (args)) in let test_clause = (nth (args) ((Number 1.0))) in let body = (rest ((rest (args)))) in let vars = (List (List.map (fun b -> (first (b))) (sx_to_list bindings))) in let inits = (List (List.map (fun b -> (nth (b) ((Number 1.0)))) (sx_to_list bindings))) in let steps = (List (List.map (fun b -> (if sx_truthy ((prim_call ">" [(len (b)); (Number 2.0)])) then (nth (b) ((Number 2.0))) else (first (b)))) (sx_to_list bindings))) in let test = (first (test_clause)) in let result' = (rest (test_clause)) in (step_eval_list ((cons ((Symbol "let")) ((cons ((Symbol "__do-loop")) ((cons ((List (List.map (fun b -> (List [(first (b)); (nth (b) ((Number 1.0)))])) (sx_to_list bindings)))) ((List [(cons ((Symbol "if")) ((cons (test) ((cons ((if sx_truthy ((empty_p (result'))) then Nil else (cons ((Symbol "begin")) (result')))) ((List [(cons ((Symbol "begin")) ((prim_call "append" [body; (List [(cons ((Symbol "__do-loop")) (steps))])])))])))))))])))))))) (env) (kont))) else (step_sf_begin (args) (env) (kont))) else (if sx_truthy ((prim_call "=" [_match_val; (String "guard")])) then (step_sf_guard (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "quote")])) then (make_cek_value ((if sx_truthy ((empty_p (args))) then Nil else (first (args)))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "quasiquote")])) then (make_cek_value ((qq_expand ((first (args))) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "->")])) then (step_sf_thread_first (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "->>")])) then (step_sf_thread_last (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "|>")])) then (step_sf_thread_last (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "as->")])) then (step_sf_thread_as (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "set!")])) then (step_sf_set_b (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "letrec")])) then (step_sf_letrec (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "reset")])) then (step_sf_reset (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "shift")])) then (step_sf_shift (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "deref")])) then (step_sf_deref (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope")])) then (step_sf_scope (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide")])) then (step_sf_provide (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "peek")])) then (step_sf_peek (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide!")])) then (step_sf_provide_b (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "context")])) then (step_sf_context (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "bind")])) then (step_sf_bind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "emit!")])) then (step_sf_emit (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "emitted")])) then (step_sf_emitted (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "handler-bind")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "restart-case")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "signal-condition")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "invoke-restart")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "match")])) then (step_sf_match (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "let-match")])) then (step_sf_let_match (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "dynamic-wind")])) then (step_sf_dynamic_wind (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (step_ho_map (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "map-indexed")])) then (step_ho_map_indexed (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (step_ho_filter (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (step_ho_reduce (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (step_ho_some (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "every?")])) then (step_ho_every (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (step_ho_for_each (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise")])) then (step_sf_raise (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-continuable")])) then (make_cek_state ((first (args))) (env) ((kont_push ((make_raise_eval_frame (env) ((Bool true)))) (kont)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "call/cc")])) then (step_sf_callcc (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "call-with-current-continuation")])) then (step_sf_callcc (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "perform")])) then (step_sf_perform (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-library")])) then (step_sf_define_library (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "import")])) then (step_sf_import (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-record-type")])) then (make_cek_value ((sf_define_record_type (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-protocol")])) then (make_cek_value ((sf_define_protocol (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "implement")])) then (make_cek_value ((sf_implement (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "parameterize")])) then (step_sf_parameterize (args) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "syntax-rules")])) then (make_cek_value ((sf_syntax_rules (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-syntax")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((let _and = (prim_call "has-key?" [custom_special_forms; name]) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((env_has (env) (name)))))))) then (make_cek_value ((cek_call ((get (custom_special_forms) (name))) (List [args; env]))) (env) (kont)) else (if sx_truthy ((let _and = (env_has (env) (name)) in if not (sx_truthy _and) then _and else (is_macro ((env_get (env) (name)))))) then (let mac = (env_get (env) (name)) in (make_cek_state ((expand_macro (mac) (args) (env))) (env) (kont))) else (if sx_truthy ((let _and = render_check in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((env_has (env) (name)))))) in if not (sx_truthy _and) then _and else (cek_call (render_check) (List [expr; env]))))) then (make_cek_value ((cek_call (render_fn) (List [expr; env]))) (env) (kont)) else (step_eval_call (head) (args) (env) (kont))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) else (step_eval_call (head) (args) (env) (kont))))) + +(* sf-delay *) +and sf_delay args env = + (let thunk = (make_lambda ((List [])) ((first (args))) (env)) in (let _d = Hashtbl.create 4 in Hashtbl.replace _d "_promise" (Bool true); Hashtbl.replace _d "forced" (Bool false); Hashtbl.replace _d "thunk" thunk; Hashtbl.replace _d "value" Nil; Dict _d)) + +(* sf-delay-force *) +and sf_delay_force args env = + (let thunk = (make_lambda ((List [])) ((first (args))) (env)) in (let _d = Hashtbl.create 5 in Hashtbl.replace _d "_iterative" (Bool true); Hashtbl.replace _d "_promise" (Bool true); Hashtbl.replace _d "forced" (Bool false); Hashtbl.replace _d "thunk" thunk; Hashtbl.replace _d "value" Nil; Dict _d)) + +(* promise? *) +and promise_p v = + (let _and = (dict_p (v)) in if not (sx_truthy _and) then _and else (get (v) ((String "_promise")))) + +(* make-promise *) +and make_promise v = + (let _d = Hashtbl.create 3 in Hashtbl.replace _d "_promise" (Bool true); Hashtbl.replace _d "forced" (Bool true); Hashtbl.replace _d "value" v; Dict _d) + +(* force *) +and force p = + (if sx_truthy ((Bool (not (sx_truthy ((promise_p (p))))))) then p else (if sx_truthy ((get (p) ((String "forced")))) then (get (p) ((String "value"))) else (let result' = (sx_apply (get (p) ((String "thunk"))) (List [])) in (let final = (if sx_truthy ((let _and = (get (p) ((String "_iterative"))) in if not (sx_truthy _and) then _and else (promise_p (result')))) then (force (result')) else result') in (let () = ignore ((sx_dict_set_b p (String "forced") (Bool true))) in (let () = ignore ((sx_dict_set_b p (String "value") final)) in final)))))) (* kont-extract-provides *) and kont_extract_provides kont = @@ -757,80 +776,25 @@ and match_find_clause val' clauses env = and match_pattern pattern value env = (if sx_truthy ((prim_call "=" [pattern; (Symbol "_")])) then (Bool true) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(len (pattern)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (prim_call "=" [(first (pattern)); (Symbol "?")])))) then (let pred = (eval_expr ((nth (pattern) ((Number 1.0)))) (env)) in (cek_call (pred) ((List [value])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (prim_call "=" [(first (pattern)); (Symbol "quote")])))) then (prim_call "=" [value; (nth (pattern) ((Number 1.0)))]) else (if sx_truthy ((symbol_p (pattern))) then (let () = ignore ((env_bind env (sx_to_string (symbol_name (pattern))) value)) in (Bool true)) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (let _and = (symbol_p ((first (pattern)))) in if not (sx_truthy _and) then _and else (let _and = (dict_p (value)) in if not (sx_truthy _and) then _and else (get (value) ((String "_adt")))))))) then (let ctor_name = (symbol_name ((first (pattern)))) in let field_patterns = (rest (pattern)) in let fields = (get (value) ((String "_fields"))) in (let _and = (prim_call "=" [(get (value) ((String "_ctor"))); ctor_name]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(len (field_patterns)); (len (fields))]) in if not (sx_truthy _and) then _and else (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list (prim_call "zip" [field_patterns; fields]))))))) else (if sx_truthy ((let _and = (dict_p (pattern)) in if not (sx_truthy _and) then _and else (dict_p (value)))) then (Bool (List.for_all (fun k -> sx_truthy ((match_pattern ((get (pattern) (k))) ((get (value) (k))) (env)))) (sx_to_list (prim_call "keys" [pattern])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (list_p (value)) in if not (sx_truthy _and) then _and else (prim_call "contains?" [pattern; (Symbol "&rest")])))) then (let rest_idx = (prim_call "index-of" [pattern; (Symbol "&rest")]) in (let _and = (prim_call ">=" [(len (value)); rest_idx]) in if not (sx_truthy _and) then _and else (let _and = (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list (prim_call "zip" [(prim_call "slice" [pattern; (Number 0.0); rest_idx]); (prim_call "slice" [value; (Number 0.0); rest_idx])])))) in if not (sx_truthy _and) then _and else (let rest_name = (nth (pattern) ((prim_call "+" [rest_idx; (Number 1.0)]))) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (rest_name))) (prim_call "slice" [value; rest_idx]))) in (Bool true)))))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (list_p (value)))) then (if sx_truthy ((Bool (not (sx_truthy ((prim_call "=" [(len (pattern)); (len (value))])))))) then (Bool false) else (let pairs = (prim_call "zip" [pattern; value]) in (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list pairs))))) else (prim_call "=" [pattern; value]))))))))) +(* match-clause-is-else? *) +and match_clause_is_else_p clause = + (let p = (first (clause)) in (let _or = (prim_call "=" [p; (Symbol "_")]) in if sx_truthy _or then _or else (let _or = (prim_call "=" [p; (Symbol "else")]) in if sx_truthy _or then _or else (prim_call "=" [p; (String "else")])))) + +(* match-clause-ctor-name *) +and match_clause_ctor_name clause = + (let p = (first (clause)) in (if sx_truthy ((let _and = (list_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (p)))))) in if not (sx_truthy _and) then _and else (symbol_p ((first (p))))))) then (symbol_name ((first (p)))) else (if sx_truthy ((let _and = (symbol_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((prim_call "=" [p; (Symbol "_")]))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((prim_call "=" [p; (Symbol "else")])))))))) then Nil else Nil))) + +(* match-warn-non-exhaustive *) +and match_warn_non_exhaustive env type_name registered clause_ctors = + (let missing = (List (List.filter (fun c -> sx_truthy ((Bool (not (sx_truthy ((prim_call "contains?" [clause_ctors; c]))))))) (sx_to_list registered))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((empty_p (missing))))))) then (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((env_has (env) ((String "*adt-warned*")))))))) then (env_bind env (sx_to_string (String "*adt-warned*")) (Dict (Hashtbl.create 0))) else Nil)) in (let warned = (env_get (env) ((String "*adt-warned*"))) in let key = (String (sx_str [type_name; (String "|"); (prim_call "join" [(String ","); missing])])) in (if sx_truthy ((Bool (not (sx_truthy ((get (warned) (key))))))) then (let () = ignore ((sx_dict_set_b warned key (Bool true))) in (host_warn ((String (sx_str [(String "[sx] match: non-exhaustive — "); type_name; (String ": missing "); (prim_call "join" [(String ", "); missing])]))))) else Nil))) else Nil)) in Nil)) + +(* match-check-exhaustiveness *) +and match_check_exhaustiveness val' clauses env = + (if sx_truthy ((let _and = (dict_p (val')) in if not (sx_truthy _and) then _and else (get (val') ((String "_adt"))))) then (let type_name = (get (val') ((String "_type"))) in (if sx_truthy ((let _and = (env_has (env) ((String "*adt-registry*"))) in if not (sx_truthy _and) then _and else type_name)) then (let registered = (get ((env_get (env) ((String "*adt-registry*")))) (type_name)) in (if sx_truthy ((let _and = registered in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((Bool (List.exists (fun c -> sx_truthy ((match_clause_is_else_p (c)))) (sx_to_list clauses))))))))) then (let clause_ctors = (List (List.filter (fun n -> sx_truthy ((Bool (not (sx_truthy ((is_nil (n)))))))) (sx_to_list (List (List.map (fun c -> (match_clause_ctor_name (c))) (sx_to_list clauses)))))) in (match_warn_non_exhaustive (env) (type_name) (registered) (clause_ctors))) else Nil)) else Nil)) else Nil) + (* step-sf-match *) and step_sf_match args env kont = - (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let () = ignore (match_check_exhaustiveness val' clauses env) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (make_cek_value ((String (sx_str [(String "match: no clause matched "); (inspect (val'))]))) (env) ((kont_push ((make_raise_eval_frame (env) ((Bool false)))) (kont)))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))) - -(* match-check-exhaustiveness — Step 8 hand-patched into sx_ref.ml *) -and match_check_exhaustiveness val' clauses env = - let is_else_pat p = - match p with - | Symbol "_" | Symbol "else" -> true - | Keyword "else" -> true - | _ -> false - in - let clause_is_else c = - match c with - | List (p :: _) -> is_else_pat p - | _ -> false - in - let clause_ctor_name c = - match c with - | List (List (Symbol n :: _) :: _) -> Some n - | _ -> None - in - let type_name_opt = match val' with - | AdtValue a -> Some a.av_type - | Dict d -> - (match Hashtbl.find_opt d "_adt" with - | Some (Bool true) -> - (match Hashtbl.find_opt d "_type" with - | Some (String s) -> Some s - | _ -> None) - | _ -> None) - | _ -> None - in - match type_name_opt with - | None -> Nil - | Some type_name -> - if not (sx_truthy (env_has env (String "*adt-registry*"))) then Nil - else - let registry = env_get env (String "*adt-registry*") in - let registered = match registry with - | Dict r -> - (match Hashtbl.find_opt r type_name with - | Some (List ctors) -> Some ctors - | _ -> None) - | _ -> None in - (match registered with - | None -> Nil - | Some ctor_vals -> - let clauses_list = match clauses with List xs -> xs | _ -> [] in - if List.exists clause_is_else clauses_list then Nil - else - let clause_ctors = List.filter_map clause_ctor_name clauses_list in - let registered_names = List.filter_map (function - | String s -> Some s | _ -> None) ctor_vals in - let missing = List.filter (fun c -> not (List.mem c clause_ctors)) registered_names in - if missing = [] then Nil - else begin - if not (sx_truthy (env_has env (String "*adt-warned*"))) then - ignore (env_bind env (String "*adt-warned*") (Dict (Hashtbl.create 4))); - let warned = env_get env (String "*adt-warned*") in - let key = type_name ^ "|" ^ String.concat "," missing in - let already = match warned with - | Dict w -> (match Hashtbl.find_opt w key with Some (Bool true) -> true | _ -> false) - | _ -> false in - if already then Nil - else begin - (match warned with - | Dict w -> Hashtbl.replace w key (Bool true) - | _ -> ()); - let msg = "[sx] match: non-exhaustive — " ^ type_name ^ ": missing " ^ String.concat ", " missing in - ignore (host_warn (String msg)); - Nil - end - end) + (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let () = ignore ((match_check_exhaustiveness (val') (clauses) (env))) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (make_cek_value ((String (sx_str [(String "match: no clause matched "); (inspect (val'))]))) (env) ((kont_push ((make_raise_eval_frame (env) ((Bool false)))) (kont)))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))) (* step-sf-handler-bind *) and step_sf_handler_bind args env kont = @@ -866,15 +830,7 @@ and step_sf_let args env kont = (* step-sf-define *) and step_sf_define args env kont = - (* Desugar shorthand: (define (name p ...) body) -> (define name (fn (p ...) body)) *) - let args = match first args with - | List (fn_name :: params) -> - let body_parts = sx_to_list (rest args) in - let lambda_expr = List (Symbol "fn" :: List params :: body_parts) in - List [fn_name; lambda_expr] - | _ -> args - in - (let name_sym = (first (args)) in let has_effects = (let _and = (prim_call ">=" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (args) ((Number 1.0))))); (String "effects")]))) in let val_idx = (if sx_truthy ((let _and = (prim_call ">=" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (args) ((Number 1.0))))); (String "effects")])))) then (Number 3.0) else (Number 1.0)) in let effect_list = (if sx_truthy ((let _and = (prim_call ">=" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (args) ((Number 1.0))))); (String "effects")])))) then (nth (args) ((Number 2.0))) else Nil) in (make_cek_state ((nth (args) (val_idx))) (env) ((kont_push ((make_define_frame ((symbol_name (name_sym))) (env) (has_effects) (effect_list))) (kont))))) + (let resolved_args = (if sx_truthy ((prim_call "=" [(type_of ((first (args)))); (String "list")])) then (let fn_name = (first ((first (args)))) in let params = (rest ((first (args)))) in let body_parts = (rest (args)) in (List [fn_name; (prim_call "concat" [(List [(make_symbol ((String "fn")))]); (List [params]); body_parts])])) else args) in (let name_sym = (first (resolved_args)) in let has_effects = (let _and = (prim_call ">=" [(len (resolved_args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (resolved_args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (resolved_args) ((Number 1.0))))); (String "effects")]))) in let val_idx = (if sx_truthy ((let _and = (prim_call ">=" [(len (resolved_args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (resolved_args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (resolved_args) ((Number 1.0))))); (String "effects")])))) then (Number 3.0) else (Number 1.0)) in let effect_list = (if sx_truthy ((let _and = (prim_call ">=" [(len (resolved_args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (resolved_args) ((Number 1.0))))); (String "keyword")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(keyword_name ((nth (resolved_args) ((Number 1.0))))); (String "effects")])))) then (nth (resolved_args) ((Number 2.0))) else Nil) in (make_cek_state ((nth (resolved_args) (val_idx))) (env) ((kont_push ((make_define_frame ((symbol_name (name_sym))) (env) (has_effects) (effect_list))) (kont)))))) (* step-sf-set! *) and step_sf_set_b args env kont = @@ -972,9 +928,33 @@ and ho_fn_p v = and ho_swap_args ho_type evaled = (if sx_truthy ((prim_call "=" [ho_type; (String "reduce")])) then (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; (nth (evaled) ((Number 2.0))); a]) else evaled)) else (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; a]) else evaled))) +(* seq-to-list *) +and seq_to_list x = + (if sx_truthy ((prim_call "=" [x; Nil])) then (List []) else (if sx_truthy ((list_p (x))) then x else (if sx_truthy ((prim_call "vector?" [x])) then (prim_call "vector->list" [x]) else (if sx_truthy ((string_p (x))) then (let n = (len (x)) in (let rec loop = (fun i acc -> (if sx_truthy ((prim_call "<" [i; (Number 0.0)])) then acc else (loop ((prim_call "-" [i; (Number 1.0)])) ((cons ((prim_call "slice" [x; i; (prim_call "+" [i; (Number 1.0)])])) (acc)))))) in (loop ((prim_call "-" [n; (Number 1.0)])) ((List []))))) else x)))) + (* ho-setup-dispatch *) and ho_setup_dispatch ho_type evaled env kont = - (let ordered = (ho_swap_args (ho_type) (evaled)) in (let f = (first (ordered)) in (let _match_val = ho_type in (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (if sx_truthy ((prim_call ">" [(len (ordered)); (Number 2.0)])) then (let colls = (rest (ordered)) in (if sx_truthy ((Bool (List.exists (fun c -> sx_truthy ((empty_p (c)))) (sx_to_list colls)))) then (make_cek_value ((List [])) (env) (kont)) else (let heads = (List (List.map (fun c -> (first (c))) (sx_to_list colls))) in let tails = (List (List.map (fun c -> (rest (c))) (sx_to_list colls))) in (continue_with_call (f) (heads) (env) ((List [])) ((kont_push ((make_multi_map_frame (f) (tails) ((List [])) (env))) (kont))))))) else (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_map_frame (f) ((rest (coll))) ((List [])) (env))) (kont))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "map-indexed")])) then (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(Number 0.0); (first (coll))])) (env) ((List [])) ((kont_push ((make_map_indexed_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (coll))) ((List [])) ((first (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (let init = (nth (ordered) ((Number 1.0))) in let coll = seq_to_list (nth (ordered) ((Number 2.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (init) (env) (kont)) else (continue_with_call (f) ((List [init; (first (coll))])) (env) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool false)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_some_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "every")])) then (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool true)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_every_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (let coll = seq_to_list (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (Nil) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (coll))) (env))) (kont)))))) else (raise (Eval_error (value_to_str (String (sx_str [(String "Unknown HO type: "); ho_type]))))))))))))))) + (let ordered = (ho_swap_args (ho_type) (evaled)) in (let f = (first (ordered)) in (let _match_val = ho_type in (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (if sx_truthy ((prim_call ">" [(len (ordered)); (Number 2.0)])) then (let colls = (rest (ordered)) in (if sx_truthy ((Bool (List.exists (fun c -> sx_truthy ((empty_p (c)))) (sx_to_list colls)))) then (make_cek_value ((List [])) (env) (kont)) else (let heads = (List (List.map (fun c -> (first (c))) (sx_to_list colls))) in let tails = (List (List.map (fun c -> (rest (c))) (sx_to_list colls))) in (continue_with_call (f) (heads) (env) ((List [])) ((kont_push ((make_multi_map_frame (f) (tails) ((List [])) (env))) (kont))))))) else (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_map_frame (f) ((rest (coll))) ((List [])) (env))) (kont))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "map-indexed")])) then (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(Number 0.0); (first (coll))])) (env) ((List [])) ((kont_push ((make_map_indexed_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (coll))) ((List [])) ((first (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (let init = (nth (ordered) ((Number 1.0))) in let coll = (seq_to_list ((nth (ordered) ((Number 2.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (init) (env) (kont)) else (continue_with_call (f) ((List [init; (first (coll))])) (env) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool false)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_some_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "every")])) then (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool true)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_every_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (let coll = (seq_to_list ((nth (ordered) ((Number 1.0))))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (Nil) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (coll))) (env))) (kont)))))) else (raise (Eval_error (value_to_str (String (sx_str [(String "Unknown HO type: "); ho_type]))))))))))))))) + +(* sequence-to-list *) +and sequence_to_list s = + (seq_to_list (s)) + +(* sequence-to-vector *) +and sequence_to_vector s = + (prim_call "list->vector" [(seq_to_list (s))]) + +(* sequence-length *) +and sequence_length s = + (if sx_truthy ((prim_call "=" [s; Nil])) then (Number 0.0) else (if sx_truthy ((list_p (s))) then (len (s)) else (if sx_truthy ((prim_call "vector?" [s])) then (prim_call "vector-length" [s]) else (if sx_truthy ((string_p (s))) then (len (s)) else (len ((seq_to_list (s)))))))) + +(* sequence-ref *) +and sequence_ref s i = + (if sx_truthy ((let _or = (prim_call "=" [s; Nil]) in if sx_truthy _or then _or else (list_p (s)))) then (nth (s) (i)) else (if sx_truthy ((prim_call "vector?" [s])) then (prim_call "vector-ref" [s; i]) else (if sx_truthy ((string_p (s))) then (prim_call "slice" [s; i; (prim_call "+" [i; (Number 1.0)])]) else (nth ((seq_to_list (s))) (i))))) + +(* sequence-append *) +and sequence_append s1 s2 = + (if sx_truthy ((let _and = (prim_call "vector?" [s1]) in if not (sx_truthy _and) then _and else (prim_call "vector?" [s2]))) then (prim_call "list->vector" [(prim_call "concat" [(prim_call "vector->list" [s1]); (prim_call "vector->list" [s2])])]) else (if sx_truthy ((let _and = (string_p (s1)) in if not (sx_truthy _and) then _and else (string_p (s2)))) then (String (sx_str [s1; s2])) else (prim_call "concat" [(seq_to_list (s1)); (seq_to_list (s2))]))) (* step-ho-map *) and step_ho_map args env kont = @@ -1006,7 +986,7 @@ and step_ho_for_each args env kont = (* step-continue *) and step_continue state = - (let value = (cek_value (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (if sx_truthy ((kont_empty_p (kont))) then state else (let frame = (kont_top (kont)) in let rest_k = (kont_pop (kont)) in let ft = (frame_type (frame)) in (let _match_val = ft in (if sx_truthy ((prim_call "=" [_match_val; (String "if")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (make_cek_state ((get (frame) ((String "then")))) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((is_nil ((get (frame) ((String "else")))))) then (make_cek_value (Nil) (env) (rest_k)) else (make_cek_state ((get (frame) ((String "else")))) ((get (frame) ((String "env")))) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "when")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (fenv) (rest_k)) else (if sx_truthy ((prim_call "=" [(len (body)); (Number 1.0)])) then (make_cek_state ((first (body))) (fenv) (rest_k)) else (make_cek_state ((first (body))) (fenv) ((kont_push ((make_begin_frame ((rest (body))) (fenv))) (rest_k))))))) else (make_cek_value (Nil) (env) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "begin")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then (make_cek_state ((first (remaining))) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_begin_frame ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "let")])) then (let name = (get (frame) ((String "name"))) in let remaining = (get (frame) ((String "remaining"))) in let body = (get (frame) ((String "body"))) in let local = (get (frame) ((String "env"))) in (let () = ignore ((env_bind local (sx_to_string name) value)) in (if sx_truthy ((empty_p (remaining))) then (step_sf_begin (body) (local) (rest_k)) else (let next_binding = (first (remaining)) in let vname = (if sx_truthy ((prim_call "=" [(type_of ((first (next_binding)))); (String "symbol")])) then (symbol_name ((first (next_binding)))) else (first (next_binding))) in (make_cek_state ((nth (next_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) ((rest (remaining))) (body) (local))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "define")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in let has_effects = (get (frame) ((String "has-effects"))) in let effect_list = (get (frame) ((String "effect-list"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (let () = ignore ((if sx_truthy (has_effects) then (let effect_names = (List (List.map (fun e -> (if sx_truthy ((prim_call "=" [(type_of (e)); (String "symbol")])) then (symbol_name (e)) else e)) (sx_to_list effect_list))) in let effect_anns = (if sx_truthy ((env_has (fenv) ((String "*effect-annotations*")))) then (env_get (fenv) ((String "*effect-annotations*"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns name effect_names)) in (env_bind fenv (sx_to_string (String "*effect-annotations*")) effect_anns))) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-foreign")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (make_cek_value (value) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "set")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((env_set fenv (sx_to_string name) value)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "and")])) then (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String "remaining"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String "env")))) ((if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_and_frame ((rest (remaining))) ((get (frame) ((String "env")))))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "or")])) then (if sx_truthy (value) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String "remaining"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String "env")))) ((if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_or_frame ((rest (remaining))) ((get (frame) ((String "env")))))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let scheme_p = (get (frame) ((String "scheme"))) in (if sx_truthy (scheme_p) then (if sx_truthy (value) then (let clause = (first (remaining)) in (if sx_truthy ((let _and = (prim_call ">" [(len (clause)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (clause) ((Number 1.0))))); (String "symbol")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(symbol_name ((nth (clause) ((Number 1.0))))); (String "=>")])))) then (make_cek_state ((nth (clause) ((Number 2.0)))) (fenv) ((kont_push ((make_cond_arrow_frame (value) (fenv))) (rest_k)))) else (make_cek_state ((nth (clause) ((Number 1.0)))) (fenv) (rest_k)))) else (let next_clauses = (rest (remaining)) in (if sx_truthy ((empty_p (next_clauses))) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_clause = (first (next_clauses)) in let next_test = (first (next_clause)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next_clause) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next_clauses) (fenv) ((Bool true)))) (rest_k))))))))) else (if sx_truthy (value) then (make_cek_state ((nth (remaining) ((Number 1.0)))) (fenv) (rest_k)) else (let next = (prim_call "slice" [remaining; (Number 2.0); (len (remaining))]) in (if sx_truthy ((prim_call "<" [(len (next)); (Number 2.0)])) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_test = (first (next)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next) (fenv) ((Bool false)))) (rest_k))))))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "case")])) then (let match_val = (get (frame) ((String "match-val"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((is_nil (match_val))) then (sf_case_step_loop (value) (remaining) (fenv) (rest_k)) else (sf_case_step_loop (match_val) (remaining) (fenv) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "thread")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let mode = (get (frame) ((String "extra"))) in let bind_name = (get (frame) ((String "name"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (let form = (first (remaining)) in let rest_forms = (rest (remaining)) in let new_kont = (if sx_truthy ((empty_p ((rest (remaining))))) then rest_k else (kont_push ((make_thread_frame ((rest (remaining))) (fenv) (mode) (bind_name))) (rest_k))) in (if sx_truthy ((prim_call "=" [mode; (String "as")])) then (let new_env = (env_extend (fenv)) in (let () = ignore ((env_bind new_env (sx_to_string (symbol_name (bind_name))) value)) in (make_cek_state (form) (new_env) (new_kont)))) else (if sx_truthy ((let _and = (prim_call "=" [(type_of (form)); (String "list")]) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (form)))))) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((first (form)))); (String "symbol")]) in if not (sx_truthy _and) then _and else (ho_form_name_p ((symbol_name ((first (form)))))))))) then (make_cek_state ((cons ((first (form))) ((cons ((List [(Symbol "quote"); value])) ((rest (form))))))) (fenv) (new_kont)) else (if sx_truthy ((prim_call "=" [mode; (String "last")])) then (let result' = (thread_insert_arg_last (form) (value) (fenv)) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv) (mode) (bind_name))) (rest_k)))))) else (let result' = (thread_insert_arg (form) (value) (fenv)) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv) (mode) (bind_name))) (rest_k)))))))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "arg")])) then (let f = (get (frame) ((String "f"))) in let evaled = (get (frame) ((String "evaled"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let raw_args = (get (frame) ((String "raw-args"))) in let hname = (get (frame) ((String "head-name"))) in (if sx_truthy ((is_nil (f))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) ((List []))) else Nil)) in (if sx_truthy ((empty_p (remaining))) then (continue_with_call (value) ((List [])) (fenv) (raw_args) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (value) ((List [])) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))) else (let new_evaled = (prim_call "append" [evaled; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) (new_evaled)) else Nil)) in (continue_with_call (f) (new_evaled) (fenv) (raw_args) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (f) (new_evaled) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "dict")])) then (let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let fenv = (get (frame) ((String "env"))) in (let last_result = (last (results)) in let completed = (prim_call "append" [(prim_call "slice" [results; (Number 0.0); (prim_call "dec" [(len (results))])]); (List [(List [(first (last_result)); value])])]) in (if sx_truthy ((empty_p (remaining))) then (let d = (Dict (Hashtbl.create 0)) in (let () = ignore ((List.iter (fun pair -> ignore ((sx_dict_set_b d (first (pair)) (nth (pair) ((Number 1.0)))))) (sx_to_list completed); Nil)) in (make_cek_value (d) (fenv) (rest_k)))) else (let next_entry = (first (remaining)) in (make_cek_state ((nth (next_entry) ((Number 1.0)))) (fenv) ((kont_push ((make_dict_frame ((rest (remaining))) ((prim_call "append" [completed; (List [(List [(first (next_entry))])])])) (fenv))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "ho-setup")])) then (let ho_type = (get (frame) ((String "ho-type"))) in let remaining = (get (frame) ((String "remaining"))) in let evaled = (prim_call "append" [(get (frame) ((String "evaled"))); (List [value])]) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (ho_setup_dispatch (ho_type) (evaled) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_ho_setup_frame (ho_type) ((rest (remaining))) (evaled) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reset")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "deref")])) then (let val' = value in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (not (sx_truthy ((is_signal (val'))))))) then (make_cek_value (val') (fenv) (rest_k)) else (if sx_truthy ((has_reactive_reset_frame_p (rest_k))) then (reactive_shift_deref (val') (fenv) (rest_k)) else (let () = ignore ((let ctx = (sx_context ((String "sx-reactive")) (Nil)) in (if sx_truthy (ctx) then (let dep_list = ref ((get (ctx) ((String "deps")))) in let notify_fn = (get (ctx) ((String "notify"))) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call "contains?" [!dep_list; val'])))))) then (let () = ignore ((dep_list := sx_append_b !dep_list val'; Nil)) in (signal_add_sub_b (val') (notify_fn))) else Nil)) else Nil))) in (make_cek_value ((signal_value (val'))) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reactive-reset")])) then (let update_fn = (get (frame) ((String "update-fn"))) in let first_p = (get (frame) ((String "first-render"))) in (let () = ignore ((if sx_truthy ((let _and = update_fn in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy (first_p)))))) then (cek_call (update_fn) ((List [value]))) else Nil)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope")])) then (let name = (get (frame) ((String "name"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop (name))) in (make_cek_value (value) (fenv) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_scope_frame (name) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop ((get (frame) ((String "name")))))) in (make_cek_value (value) (fenv) (rest_k))) else (let new_frame = (make_provide_frame ((get (frame) ((String "name")))) ((get (frame) ((String "value")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String "subscribers") (get (frame) ((String "subscribers"))))) in (make_cek_state ((first (remaining))) (fenv) ((kont_push (new_frame) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "bind")])) then (let tracked = !_bind_tracking_ref in let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in let prev = (get (frame) ((String "prev-tracking"))) in (let () = ignore ((_bind_tracking_ref := prev; Nil)) in (let () = ignore ((let subscriber = (NativeFn ("\206\187", fun _args -> match _args with [fire_kont] -> (fun fire_kont -> (cek_run ((make_cek_state (body) (fenv) ((List [])))))) fire_kont | _ -> Nil)) in (List.iter (fun name -> ignore ((let existing = (get (!_provide_subscribers_ref) (name)) in (sx_dict_set_b !_provide_subscribers_ref name (prim_call "append" [(if sx_truthy (existing) then existing else (List [])); (List [subscriber])]))))) (sx_to_list tracked); Nil))) in (make_cek_value (value) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide-set")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in let target = (kont_find_provide (rest_k) (name)) in (let old_val = (if sx_truthy (target) then (get (target) ((String "value"))) else (scope_peek (name))) in (let () = ignore ((if sx_truthy (target) then (sx_dict_set_b target (String "value") value) else Nil)) in (let () = ignore ((scope_pop (name))) in (let () = ignore ((scope_push (name) (value))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((prim_call "=" [old_val; value])))))) then (fire_provide_subscribers (name)) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope-acc")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((let new_frame = (make_scope_acc_frame ((get (frame) ((String "name")))) ((get (frame) ((String "value")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String "emitted") (get (frame) ((String "emitted"))))) in new_frame))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let indexed = (get (frame) ((String "indexed"))) in let fenv = (get (frame) ((String "env"))) in (let new_results = (prim_call "append" [results; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let call_args = (if sx_truthy (indexed) then (List [(len (new_results)); (first (remaining))]) else (List [(first (remaining))])) in let next_frame = (if sx_truthy (indexed) then (make_map_indexed_frame (f) ((rest (remaining))) (new_results) (fenv)) else (make_map_frame (f) ((rest (remaining))) (new_results) (fenv))) in (continue_with_call (f) (call_args) (fenv) ((List [])) ((kont_push (next_frame) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let current_item = (get (frame) ((String "current-item"))) in let fenv = (get (frame) ((String "env"))) in (let new_results = (if sx_truthy (value) then (prim_call "append" [results; (List [current_item])]) else results) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (remaining))) (new_results) ((first (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (continue_with_call (f) ((List [value; (first (remaining))])) (fenv) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (Nil) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy (value) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_some_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "every")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool true)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_every_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "handler")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_handler_frame ((get (frame) ((String "f")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "restart")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "signal-return")])) then (let saved_kont = (get (frame) ((String "saved-kont"))) in (make_cek_value (value) ((get (frame) ((String "env")))) (saved_kont))) else (if sx_truthy ((prim_call "=" [_match_val; (String "comp-trace")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond-arrow")])) then (let test_value = (get (frame) ((String "match-val"))) in let fenv = (get (frame) ((String "env"))) in (continue_with_call (value) ((List [test_value])) (fenv) ((List [test_value])) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "wind-after")])) then (let after_thunk = (get (frame) ((String "after-thunk"))) in let winders_len = (get (frame) ((String "winders-len"))) in let body_result = value in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((if sx_truthy ((prim_call ">" [(len (!_winders_ref)); winders_len])) then (_winders_ref := (rest (!_winders_ref)); Nil) else Nil)) in (continue_with_call (after_thunk) ((List [])) (fenv) ((List [])) ((kont_push ((make_wind_return_frame (body_result) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "wind-return")])) then (make_cek_value ((get (frame) ((String "body-result")))) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-eval")])) then (let condition = value in let fenv = (get (frame) ((String "env"))) in let continuable_p = (get (frame) ((String "scheme"))) in let unwind_result = (kont_unwind_to_handler (rest_k) (condition)) in let handler_fn = (get (unwind_result) ((String "handler"))) in let unwound_k = (get (unwind_result) ((String "kont"))) in (if sx_truthy ((is_nil (handler_fn))) then (let () = ignore ((_last_error_kont_ref := unwound_k; Nil)) in (host_error ((String (sx_str [(String "Unhandled exception: "); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (fenv) ((List [condition])) ((if sx_truthy (continuable_p) then (kont_push ((make_signal_return_frame (fenv) (unwound_k))) (unwound_k)) else (kont_push ((make_raise_guard_frame (fenv) (unwound_k))) (unwound_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-guard")])) then (let () = ignore ((_last_error_kont_ref := rest_k; Nil)) in (host_error ((String "exception handler returned from non-continuable raise")))) else (if sx_truthy ((prim_call "=" [_match_val; (String "multi-map")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let new_results = (prim_call "append" [(get (frame) ((String "results"))); (List [value])]) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (List.exists (fun c -> sx_truthy ((empty_p (c)))) (sx_to_list remaining)))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let heads = (List (List.map (fun c -> (first (c))) (sx_to_list remaining))) in let tails = (List (List.map (fun c -> (rest (c))) (sx_to_list remaining))) in (continue_with_call (f) (heads) (fenv) ((List [])) ((kont_push ((make_multi_map_frame (f) (tails) (new_results) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "callcc")])) then (let k = (make_callcc_continuation (rest_k) ((len (!_winders_ref)))) in (continue_with_call (value) ((List [k])) ((get (frame) ((String "env")))) ((List [k])) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "vm-resume")])) then (let resume_fn = (get (frame) ((String "f"))) in (let result' = (sx_apply resume_fn (List [value])) in (if sx_truthy ((let _and = (dict_p (result')) in if not (sx_truthy _and) then _and else (get (result') ((String "__vm_suspended"))))) then (make_cek_suspended ((get (result') ((String "request")))) ((get (frame) ((String "env")))) ((kont_push ((make_vm_resume_frame ((get (result') ((String "resume")))) ((get (frame) ((String "env")))))) (rest_k)))) else (make_cek_value (result') ((get (frame) ((String "env")))) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "perform")])) then (make_cek_suspended (value) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "import")])) then (let import_set = (get (frame) ((String "args"))) in let remaining_sets = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((bind_import_set (import_set) (fenv))) in (if sx_truthy ((empty_p (remaining_sets))) then (make_cek_value (Nil) (fenv) (rest_k)) else (step_sf_import (remaining_sets) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "parameterize")])) then (let remaining = (get (frame) ((String "remaining"))) in let current_param = (get (frame) ((String "f"))) in let results = (get (frame) ((String "results"))) in let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((is_nil (current_param))) then (let param_obj = value in let val_expr = (nth ((first (remaining))) ((Number 1.0))) in (make_cek_state (val_expr) (fenv) ((kont_push ((make_parameterize_frame (remaining) (param_obj) (results) (body) (fenv))) (rest_k))))) else (let converted_val = value in let new_results = (prim_call "append" [results; (List [(List [(parameter_uid (current_param)); converted_val])])]) in let rest_bindings = (rest (remaining)) in (if sx_truthy ((empty_p (rest_bindings))) then (let body_expr = (if sx_truthy ((prim_call "=" [(len (body)); (Number 1.0)])) then (first (body)) else (cons ((Symbol "begin")) (body))) in let provide_kont = (kont_push_provides (new_results) (fenv) (rest_k)) in (make_cek_state (body_expr) (fenv) (provide_kont))) else (make_cek_state ((first ((first (rest_bindings))))) (fenv) ((kont_push ((make_parameterize_frame (rest_bindings) (Nil) (new_results) (body) (fenv))) (rest_k)))))))) else (let () = ignore ((_last_error_kont_ref := rest_k; Nil)) in (raise (Eval_error (value_to_str (String (sx_str [(String "Unknown frame type: "); ft])))))))))))))))))))))))))))))))))))))))))))))))))))))) + (let value = (cek_value (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (if sx_truthy ((kont_empty_p (kont))) then state else (let frame = (kont_top (kont)) in let rest_k = (kont_pop (kont)) in let ft = (frame_type (frame)) in (let _match_val = ft in (if sx_truthy ((prim_call "=" [_match_val; (String "if")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (make_cek_state ((get (frame) ((String "then")))) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((is_nil ((get (frame) ((String "else")))))) then (make_cek_value (Nil) (env) (rest_k)) else (make_cek_state ((get (frame) ((String "else")))) ((get (frame) ((String "env")))) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "when")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (fenv) (rest_k)) else (if sx_truthy ((prim_call "=" [(len (body)); (Number 1.0)])) then (make_cek_state ((first (body))) (fenv) (rest_k)) else (make_cek_state ((first (body))) (fenv) ((kont_push ((make_begin_frame ((rest (body))) (fenv))) (rest_k))))))) else (make_cek_value (Nil) (env) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "begin")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then (make_cek_state ((first (remaining))) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_begin_frame ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "let")])) then (let name = (get (frame) ((String "name"))) in let remaining = (get (frame) ((String "remaining"))) in let body = (get (frame) ((String "body"))) in let local = (get (frame) ((String "env"))) in (let () = ignore ((env_bind local (sx_to_string name) value)) in (if sx_truthy ((empty_p (remaining))) then (step_sf_begin (body) (local) (rest_k)) else (let next_binding = (first (remaining)) in let vname = (if sx_truthy ((prim_call "=" [(type_of ((first (next_binding)))); (String "symbol")])) then (symbol_name ((first (next_binding)))) else (first (next_binding))) in (make_cek_state ((nth (next_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) ((rest (remaining))) (body) (local))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "define")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in let has_effects = (get (frame) ((String "has-effects"))) in let effect_list = (get (frame) ((String "effect-list"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (let () = ignore ((if sx_truthy (has_effects) then (let effect_names = (List (List.map (fun e -> (if sx_truthy ((prim_call "=" [(type_of (e)); (String "symbol")])) then (symbol_name (e)) else e)) (sx_to_list effect_list))) in let effect_anns = (if sx_truthy ((env_has (fenv) ((String "*effect-annotations*")))) then (env_get (fenv) ((String "*effect-annotations*"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns name effect_names)) in (env_bind fenv (sx_to_string (String "*effect-annotations*")) effect_anns))) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "define-foreign")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (make_cek_value (value) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "set")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((env_set fenv (sx_to_string name) value)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "and")])) then (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String "remaining"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String "env")))) ((if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_and_frame ((rest (remaining))) ((get (frame) ((String "env")))))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "or")])) then (if sx_truthy (value) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String "remaining"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String "env")))) ((if sx_truthy ((prim_call "=" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_or_frame ((rest (remaining))) ((get (frame) ((String "env")))))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let scheme_p = (get (frame) ((String "scheme"))) in (if sx_truthy (scheme_p) then (if sx_truthy (value) then (let clause = (first (remaining)) in (if sx_truthy ((let _and = (prim_call ">" [(len (clause)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((nth (clause) ((Number 1.0))))); (String "symbol")]) in if not (sx_truthy _and) then _and else (prim_call "=" [(symbol_name ((nth (clause) ((Number 1.0))))); (String "=>")])))) then (make_cek_state ((nth (clause) ((Number 2.0)))) (fenv) ((kont_push ((make_cond_arrow_frame (value) (fenv))) (rest_k)))) else (make_cek_state ((nth (clause) ((Number 1.0)))) (fenv) (rest_k)))) else (let next_clauses = (rest (remaining)) in (if sx_truthy ((empty_p (next_clauses))) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_clause = (first (next_clauses)) in let next_test = (first (next_clause)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next_clause) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next_clauses) (fenv) ((Bool true)))) (rest_k))))))))) else (if sx_truthy (value) then (make_cek_state ((nth (remaining) ((Number 1.0)))) (fenv) (rest_k)) else (let next = (prim_call "slice" [remaining; (Number 2.0); (len (remaining))]) in (if sx_truthy ((prim_call "<" [(len (next)); (Number 2.0)])) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_test = (first (next)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next) (fenv) ((Bool false)))) (rest_k))))))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "case")])) then (let match_val = (get (frame) ((String "match-val"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((is_nil (match_val))) then (sf_case_step_loop (value) (remaining) (fenv) (rest_k)) else (sf_case_step_loop (match_val) (remaining) (fenv) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "thread")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let mode = (get (frame) ((String "extra"))) in let bind_name = (get (frame) ((String "name"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (let form = (first (remaining)) in let rest_forms = (rest (remaining)) in let new_kont = (if sx_truthy ((empty_p ((rest (remaining))))) then rest_k else (kont_push ((make_thread_frame ((rest (remaining))) (fenv) (mode) (bind_name))) (rest_k))) in (if sx_truthy ((prim_call "=" [mode; (String "as")])) then (let new_env = (env_extend (fenv)) in (let () = ignore ((env_bind new_env (sx_to_string (symbol_name (bind_name))) value)) in (make_cek_state (form) (new_env) (new_kont)))) else (if sx_truthy ((let _and = (prim_call "=" [(type_of (form)); (String "list")]) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (form)))))) in if not (sx_truthy _and) then _and else (let _and = (prim_call "=" [(type_of ((first (form)))); (String "symbol")]) in if not (sx_truthy _and) then _and else (ho_form_name_p ((symbol_name ((first (form)))))))))) then (make_cek_state ((cons ((first (form))) ((cons ((List [(Symbol "quote"); value])) ((rest (form))))))) (fenv) (new_kont)) else (if sx_truthy ((prim_call "=" [mode; (String "last")])) then (let result' = (thread_insert_arg_last (form) (value) (fenv)) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv) (mode) (bind_name))) (rest_k)))))) else (let result' = (thread_insert_arg (form) (value) (fenv)) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv) (mode) (bind_name))) (rest_k)))))))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "arg")])) then (let f = (get (frame) ((String "f"))) in let evaled = (get (frame) ((String "evaled"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in let raw_args = (get (frame) ((String "raw-args"))) in let hname = (get (frame) ((String "head-name"))) in (if sx_truthy ((is_nil (f))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) ((List []))) else Nil)) in (if sx_truthy ((empty_p (remaining))) then (continue_with_call (value) ((List [])) (fenv) (raw_args) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (value) ((List [])) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))) else (let new_evaled = (prim_call "append" [evaled; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) (new_evaled)) else Nil)) in (continue_with_call (f) (new_evaled) (fenv) (raw_args) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (f) (new_evaled) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "dict")])) then (let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let fenv = (get (frame) ((String "env"))) in (let last_result = (last (results)) in let completed = (prim_call "append" [(prim_call "slice" [results; (Number 0.0); (prim_call "dec" [(len (results))])]); (List [(List [(first (last_result)); value])])]) in (if sx_truthy ((empty_p (remaining))) then (let d = (Dict (Hashtbl.create 0)) in (let () = ignore ((List.iter (fun pair -> ignore ((sx_dict_set_b d (first (pair)) (nth (pair) ((Number 1.0)))))) (sx_to_list completed); Nil)) in (make_cek_value (d) (fenv) (rest_k)))) else (let next_entry = (first (remaining)) in (make_cek_state ((nth (next_entry) ((Number 1.0)))) (fenv) ((kont_push ((make_dict_frame ((rest (remaining))) ((prim_call "append" [completed; (List [(List [(first (next_entry))])])])) (fenv))) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "ho-setup")])) then (let ho_type = (get (frame) ((String "ho-type"))) in let remaining = (get (frame) ((String "remaining"))) in let evaled = (prim_call "append" [(get (frame) ((String "evaled"))); (List [value])]) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (ho_setup_dispatch (ho_type) (evaled) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_ho_setup_frame (ho_type) ((rest (remaining))) (evaled) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reset")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "deref")])) then (let val' = value in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (not (sx_truthy ((is_signal (val'))))))) then (make_cek_value (val') (fenv) (rest_k)) else (if sx_truthy ((has_reactive_reset_frame_p (rest_k))) then (reactive_shift_deref (val') (fenv) (rest_k)) else (let () = ignore ((let ctx = (sx_context ((String "sx-reactive")) (Nil)) in (if sx_truthy (ctx) then (let dep_list = ref ((get (ctx) ((String "deps")))) in let notify_fn = (get (ctx) ((String "notify"))) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call "contains?" [!dep_list; val'])))))) then (let () = ignore ((dep_list := sx_append_b !dep_list val'; Nil)) in (signal_add_sub_b (val') (notify_fn))) else Nil)) else Nil))) in (make_cek_value ((signal_value (val'))) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reactive-reset")])) then (let update_fn = (get (frame) ((String "update-fn"))) in let first_p = (get (frame) ((String "first-render"))) in (let () = ignore ((if sx_truthy ((let _and = update_fn in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy (first_p)))))) then (cek_call (update_fn) ((List [value]))) else Nil)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope")])) then (let name = (get (frame) ((String "name"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop (name))) in (make_cek_value (value) (fenv) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_scope_frame (name) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop ((get (frame) ((String "name")))))) in (make_cek_value (value) (fenv) (rest_k))) else (let new_frame = (make_provide_frame ((get (frame) ((String "name")))) ((get (frame) ((String "value")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String "subscribers") (get (frame) ((String "subscribers"))))) in (make_cek_state ((first (remaining))) (fenv) ((kont_push (new_frame) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "bind")])) then (let tracked = !_bind_tracking_ref in let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in let prev = (get (frame) ((String "prev-tracking"))) in (let () = ignore ((_bind_tracking_ref := prev; Nil)) in (let () = ignore ((let subscriber = (NativeFn ("\206\187", fun _args -> match _args with [fire_kont] -> (fun fire_kont -> (cek_run ((make_cek_state (body) (fenv) ((List [])))))) fire_kont | _ -> Nil)) in (List.iter (fun name -> ignore ((let existing = (get (!_provide_subscribers_ref) (name)) in (sx_dict_set_b !_provide_subscribers_ref name (prim_call "append" [(if sx_truthy (existing) then existing else (List [])); (List [subscriber])]))))) (sx_to_list tracked); Nil))) in (make_cek_value (value) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "provide-set")])) then (let name = (get (frame) ((String "name"))) in let fenv = (get (frame) ((String "env"))) in let target = (kont_find_provide (rest_k) (name)) in (let old_val = (if sx_truthy (target) then (get (target) ((String "value"))) else (scope_peek (name))) in (let () = ignore ((if sx_truthy (target) then (sx_dict_set_b target (String "value") value) else Nil)) in (let () = ignore ((scope_pop (name))) in (let () = ignore ((scope_push (name) (value))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((prim_call "=" [old_val; value])))))) then (fire_provide_subscribers (name)) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "scope-acc")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((let new_frame = (make_scope_acc_frame ((get (frame) ((String "name")))) ((get (frame) ((String "value")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String "emitted") (get (frame) ((String "emitted"))))) in new_frame))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "map")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let indexed = (get (frame) ((String "indexed"))) in let fenv = (get (frame) ((String "env"))) in (let new_results = (prim_call "append" [results; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let call_args = (if sx_truthy (indexed) then (List [(len (new_results)); (first (remaining))]) else (List [(first (remaining))])) in let next_frame = (if sx_truthy (indexed) then (make_map_indexed_frame (f) ((rest (remaining))) (new_results) (fenv)) else (make_map_frame (f) ((rest (remaining))) (new_results) (fenv))) in (continue_with_call (f) (call_args) (fenv) ((List [])) ((kont_push (next_frame) (rest_k)))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "filter")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let results = (get (frame) ((String "results"))) in let current_item = (get (frame) ((String "current-item"))) in let fenv = (get (frame) ((String "env"))) in (let new_results = (if sx_truthy (value) then (prim_call "append" [results; (List [current_item])]) else results) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (remaining))) (new_results) ((first (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "reduce")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (continue_with_call (f) ((List [value; (first (remaining))])) (fenv) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "for-each")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (Nil) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "some")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy (value) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_some_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "every")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool true)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_every_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "handler")])) then (let remaining = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_handler_frame ((get (frame) ((String "f")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "restart")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "signal-return")])) then (let saved_kont = (get (frame) ((String "f"))) in (make_cek_value (value) ((get (frame) ((String "env")))) (saved_kont))) else (if sx_truthy ((prim_call "=" [_match_val; (String "comp-trace")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "cond-arrow")])) then (let test_value = (get (frame) ((String "match-val"))) in let fenv = (get (frame) ((String "env"))) in (continue_with_call (value) ((List [test_value])) (fenv) ((List [test_value])) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "wind-after")])) then (let after_thunk = (get (frame) ((String "after-thunk"))) in let winders_len = (get (frame) ((String "winders-len"))) in let body_result = value in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((if sx_truthy ((prim_call ">" [(len (!_winders_ref)); winders_len])) then (_winders_ref := (rest (!_winders_ref)); Nil) else Nil)) in (continue_with_call (after_thunk) ((List [])) (fenv) ((List [])) ((kont_push ((make_wind_return_frame (body_result) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "wind-return")])) then (make_cek_value ((get (frame) ((String "body-result")))) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-eval")])) then (let condition = value in let fenv = (get (frame) ((String "env"))) in let continuable_p = (get (frame) ((String "scheme"))) in let unwind_result = (kont_unwind_to_handler (rest_k) (condition)) in let handler_fn = (get (unwind_result) ((String "handler"))) in let unwound_k = (get (unwind_result) ((String "kont"))) in (if sx_truthy ((is_nil (handler_fn))) then (let () = ignore ((_last_error_kont_ref := unwound_k; Nil)) in (host_error ((String (sx_str [(String "Unhandled exception: "); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (fenv) ((List [condition])) ((if sx_truthy (continuable_p) then (kont_push ((make_signal_return_frame (fenv) (rest_k))) (unwound_k)) else (kont_push ((make_raise_guard_frame (fenv) (unwound_k))) (unwound_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "raise-guard")])) then (let () = ignore ((_last_error_kont_ref := rest_k; Nil)) in (host_error ((String "exception handler returned from non-continuable raise")))) else (if sx_truthy ((prim_call "=" [_match_val; (String "multi-map")])) then (let f = (get (frame) ((String "f"))) in let remaining = (get (frame) ((String "remaining"))) in let new_results = (prim_call "append" [(get (frame) ((String "results"))); (List [value])]) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((Bool (List.exists (fun c -> sx_truthy ((empty_p (c)))) (sx_to_list remaining)))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let heads = (List (List.map (fun c -> (first (c))) (sx_to_list remaining))) in let tails = (List (List.map (fun c -> (rest (c))) (sx_to_list remaining))) in (continue_with_call (f) (heads) (fenv) ((List [])) ((kont_push ((make_multi_map_frame (f) (tails) (new_results) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "callcc")])) then (let k = (make_callcc_continuation (rest_k) ((len (!_winders_ref)))) in (continue_with_call (value) ((List [k])) ((get (frame) ((String "env")))) ((List [k])) (rest_k))) else (if sx_truthy ((prim_call "=" [_match_val; (String "vm-resume")])) then (let resume_fn = (get (frame) ((String "f"))) in (let result' = (sx_apply resume_fn (List [value])) in (if sx_truthy ((let _and = (dict_p (result')) in if not (sx_truthy _and) then _and else (get (result') ((String "__vm_suspended"))))) then (make_cek_suspended ((get (result') ((String "request")))) ((get (frame) ((String "env")))) ((kont_push ((make_vm_resume_frame ((get (result') ((String "resume")))) ((get (frame) ((String "env")))))) (rest_k)))) else (make_cek_value (result') ((get (frame) ((String "env")))) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "perform")])) then (make_cek_suspended (value) ((get (frame) ((String "env")))) (rest_k)) else (if sx_truthy ((prim_call "=" [_match_val; (String "import")])) then (let import_set = (get (frame) ((String "args"))) in let remaining_sets = (get (frame) ((String "remaining"))) in let fenv = (get (frame) ((String "env"))) in (let () = ignore ((bind_import_set (import_set) (fenv))) in (if sx_truthy ((empty_p (remaining_sets))) then (make_cek_value (Nil) (fenv) (rest_k)) else (step_sf_import (remaining_sets) (fenv) (rest_k))))) else (if sx_truthy ((prim_call "=" [_match_val; (String "parameterize")])) then (let remaining = (get (frame) ((String "remaining"))) in let current_param = (get (frame) ((String "f"))) in let results = (get (frame) ((String "results"))) in let body = (get (frame) ((String "body"))) in let fenv = (get (frame) ((String "env"))) in (if sx_truthy ((is_nil (current_param))) then (let param_obj = value in let val_expr = (nth ((first (remaining))) ((Number 1.0))) in (make_cek_state (val_expr) (fenv) ((kont_push ((make_parameterize_frame (remaining) (param_obj) (results) (body) (fenv))) (rest_k))))) else (let converted_val = value in let new_results = (prim_call "append" [results; (List [(List [(parameter_uid (current_param)); converted_val])])]) in let rest_bindings = (rest (remaining)) in (if sx_truthy ((empty_p (rest_bindings))) then (let body_expr = (if sx_truthy ((prim_call "=" [(len (body)); (Number 1.0)])) then (first (body)) else (cons ((Symbol "begin")) (body))) in let provide_kont = (kont_push_provides (new_results) (fenv) (rest_k)) in (make_cek_state (body_expr) (fenv) (provide_kont))) else (make_cek_state ((first ((first (rest_bindings))))) (fenv) ((kont_push ((make_parameterize_frame (rest_bindings) (Nil) (new_results) (body) (fenv))) (rest_k)))))))) else (let () = ignore ((_last_error_kont_ref := rest_k; Nil)) in (raise (Eval_error (value_to_str (String (sx_str [(String "Unknown frame type: "); ft])))))))))))))))))))))))))))))))))))))))))))))))))))))) (* continue-with-call *) and continue_with_call f args env raw_args kont = @@ -1032,6 +1012,18 @@ and make_coroutine thunk = and eval_expr expr env = (cek_run ((make_cek_state (expr) (env) ((List []))))) +(* *gensym-counter* *) +and _gensym_counter_ = + (Number 0.0) + +(* intern *) +and intern s = + (make_symbol (s)) + +(* symbol-interned? *) +and symbol_interned_p sym = + (Bool true) + (* Wire up trampoline to resolve thunks via the CEK machine *) let () = trampoline_fn := (fun v -> @@ -1053,10 +1045,6 @@ let cek_run_iterative state = done; (match cek_suspended_p !s with | Bool true -> - (* Propagate suspension via the OCaml-side hook so it converts to - VmSuspended and flows to the outer driver (value_to_js / resume - callback). Without the hook (pure CEK harness), keep the legacy - error so test runners surface the misuse. *) (match !_cek_io_suspend_hook with | Some hook -> hook !s | None -> raise (Eval_error "IO suspension in non-IO context")) @@ -1176,63 +1164,19 @@ let sf_define_type args env_val = ) ctor_specs; Nil -(* Register define-type via custom_special_forms so the CEK dispatch finds it. - The top-level (register-special-form! ...) in spec/evaluator.sx is not a - define and therefore is not transpiled; we wire it up here instead. *) +(* Register special forms via custom_special_forms so the CEK dispatch finds + them. The top-level (register-special-form! ...) calls in spec/evaluator.sx + are not defines and therefore are not transpiled; we wire them up here. + let-values/define-values/delay/delay-force point at the TRANSPILED spec + functions (sf_let_values etc.) — these registrations were previously + hand-appended to the generated sx_ref.ml and were silently lost on every + regeneration (2026-07 review). *) let () = ignore (register_special_form (String "define-type") (NativeFn ("define-type", fun call_args -> match call_args with | [args; env] -> sf_define_type args env | _ -> Nil))) -(* Multiple values — helpers shared by let-values, define-values *) -let make_values_dict vs = - let d = Hashtbl.create 2 in - Hashtbl.replace d "_values" (Bool true); - Hashtbl.replace d "_list" (List vs); - Dict d - -let values_to_list result = - match result with - | Dict d when (match Hashtbl.find_opt d "_values" with Some (Bool true) -> true | _ -> false) -> - (match Hashtbl.find_opt d "_list" with Some (List l) -> l | _ -> [result]) - | _ -> [result] - -(* (let-values (((a b) expr) ...) body...) *) -let sf_let_values args env_val = - let items = match args with List l -> l | _ -> [] in - let clauses = match List.nth_opt items 0 with Some (List l) -> l | _ -> [] in - let body = if List.length items > 1 then List.tl items else [] in - let local_env = env_extend env_val in - List.iter (fun clause -> - let names = (match clause with List (List ns :: _) -> ns | _ -> []) in - let val_expr = (match clause with List (_ :: e :: _) -> e | _ -> Nil) in - let result = eval_expr val_expr local_env in - let vs = values_to_list result in - List.iteri (fun idx name -> - let n = (match name with Symbol s -> s | String s -> s | _ -> value_to_string name) in - let v = if idx < List.length vs then List.nth vs idx else Nil in - ignore (env_bind local_env (String n) v) - ) names - ) clauses; - let last_val = ref Nil in - List.iter (fun e -> last_val := eval_expr e local_env) body; - !last_val - -(* (define-values (a b ...) expr) *) -let sf_define_values args env_val = - let items = match args with List l -> l | _ -> [] in - let names = (match List.nth_opt items 0 with Some (List l) -> l | _ -> []) in - let val_expr = (match List.nth_opt items 1 with Some e -> e | None -> Nil) in - let result = eval_expr val_expr env_val in - let vs = values_to_list result in - List.iteri (fun idx name -> - let n = (match name with Symbol s -> s | String s -> s | _ -> value_to_string name) in - let v = if idx < List.length vs then List.nth vs idx else Nil in - ignore (env_bind env_val (String n) v) - ) names; - Nil - let () = ignore (register_special_form (String "let-values") (NativeFn ("let-values", fun call_args -> match call_args with @@ -1245,49 +1189,6 @@ let () = ignore (register_special_form (String "define-values") | [args; env] -> sf_define_values args env | _ -> Nil))) -(* Phase 9: Promises — delay/force/delay-force/make-promise/promise? *) - -let make_promise_dict ?(iterative=false) thunk = - let d = Hashtbl.create 4 in - Hashtbl.replace d "_promise" (Bool true); - Hashtbl.replace d "forced" (Bool false); - Hashtbl.replace d "thunk" thunk; - Hashtbl.replace d "value" Nil; - if iterative then Hashtbl.replace d "_iterative" (Bool true); - Dict d - -let sf_delay args env_val = - let expr = match args with List (e :: _) -> e | _ -> Nil in - let thunk = make_lambda (List []) expr env_val in - make_promise_dict thunk - -let sf_delay_force args env_val = - let expr = match args with List (e :: _) -> e | _ -> Nil in - let thunk = make_lambda (List []) expr env_val in - make_promise_dict ~iterative:true thunk - -let is_promise v = - match v with - | Dict d -> (match Hashtbl.find_opt d "_promise" with Some (Bool true) -> true | _ -> false) - | _ -> false - -let rec force_promise p = - if not (is_promise p) then p - else match p with - | Dict d -> - (match Hashtbl.find_opt d "forced" with - | Some (Bool true) -> - (match Hashtbl.find_opt d "value" with Some v -> v | None -> Nil) - | _ -> - let thunk = (match Hashtbl.find_opt d "thunk" with Some t -> t | None -> Nil) in - let result = cek_call thunk (List []) in - let iterative = (match Hashtbl.find_opt d "_iterative" with Some (Bool true) -> true | _ -> false) in - let final_val = if iterative && is_promise result then force_promise result else result in - Hashtbl.replace d "forced" (Bool true); - Hashtbl.replace d "value" final_val; - final_val) - | _ -> p - let () = ignore (register_special_form (String "delay") (NativeFn ("delay", fun call_args -> match call_args with diff --git a/hosts/ocaml/lib/sx_types.ml b/hosts/ocaml/lib/sx_types.ml index 91416918..d8e4b574 100644 --- a/hosts/ocaml/lib/sx_types.ml +++ b/hosts/ocaml/lib/sx_types.ml @@ -904,6 +904,12 @@ let dict_set (d : dict) key v = Hashtbl.replace d key v let dict_delete (d : dict) key = Hashtbl.remove d key +(* keys/vals order: OCaml Hashtbl fold order is unspecified (in practice + reverse insertion for fresh tables). NOTE (2026-07 review): this is a + determinism footgun for serialization/content-addressing, but render + attr emission depends on the current order (tests pin source-order + attributes), so changing it is gated on the insertion-order dict ruling + (RULINGS R29) — do not "fix" locally. *) let dict_keys (d : dict) = Hashtbl.fold (fun k _ acc -> String k :: acc) d [] diff --git a/hosts/ocaml/transpiler.sx b/hosts/ocaml/transpiler.sx index d954480b..20e47b5b 100644 --- a/hosts/ocaml/transpiler.sx +++ b/hosts/ocaml/transpiler.sx @@ -956,7 +956,13 @@ (= op "starts-with?") (= op "ends-with?") (= op "string-contains?") - (= op "string-length")) + (= op "string-length") + (= op "vector?") + (= op "vector->list") + (= op "list->vector") + (= op "vector-length") + (= op "vector-ref") + (= op "gensym")) (str "(prim_call " (ml-quote-string op) diff --git a/shared/static/wasm/sx_browser.bc.js b/shared/static/wasm/sx_browser.bc.js index 9d93d827..742d699f 100644 --- a/shared/static/wasm/sx_browser.bc.js +++ b/shared/static/wasm/sx_browser.bc.js @@ -44544,6 +44544,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "inexact->exact: 1 arg"], 1); }); + var s = [0, 0]; register ("expt", function(args){ @@ -44560,10 +44561,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(0 <= b$0){ var e = b$0, acc = 1; for(;;){ - if(0 === e) return [1, acc]; - var acc$0 = caml_mul(acc, base), e$0 = e - 1 | 0; - e = e$0; - acc = acc$0; + if(0 === e) + var match$0 = [0, acc]; + else{ + if(0 === acc || 0 === base) + var match = s; + else + var + p = caml_mul(acc, base), + match = caml_div(p, base) !== acc ? 0 : [0, p]; + if(match){ + var acc$0 = match[1], e$0 = e - 1 | 0; + e = e$0; + acc = acc$0; + continue; + } + var match$0 = 0; + } + if(! match$0) return [2, Math.pow(base, b$0)]; + var n = match$0[1]; + return [1, n]; } } } @@ -44643,7 +44660,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } throw caml_maybe_attach_backtrace([0, Sx_types[9], "gcd: 2 args"], 1); }); - var s = [2, 0.], t = [1, 0]; + var t = [2, 0.], u = [1, 0]; register ("lcm", function(args){ @@ -44661,7 +44678,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= a$2 = a[1], f = Stdlib[18].call(null, b$3), g = igcd(Stdlib[18].call(null, a$2), f); - if(0 === g) return t; + if(0 === g) return u; var h = Stdlib[18].call(null, b$3); return [1, caml_mul(caml_div(Stdlib[18].call(null, a$2), g), h)]; } @@ -44675,7 +44692,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= a$1 = a$0, b$1 = b$0; for(;;){ - if(b$1 === 0.) return a$1 === 0. ? s : [2, a$0 / a$1 * b$0]; + if(b$1 === 0.) return a$1 === 0. ? t : [2, a$0 / a$1 * b$0]; var b$2 = a$1 % b$1; a$1 = b$1; b$1 = b$2; @@ -44686,8 +44703,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_0 = "0", - u = [0, [8, [0, 0, 3], 0, 0, 0], cst_g], - v = [0, [4, 0, 0, 0, [12, 47, [4, 0, 0, 0, 0]]], cst_d_d]; + v = [0, [8, [0, 0, 3], 0, 0, 0], cst_g], + w = [0, [4, 0, 0, 0, [12, 47, [4, 0, 0, 0, 0]]], cst_d_d]; register ("number->string", function(args){ @@ -44729,7 +44746,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 2: var match$0 = args[2], f = a[1]; if(! match$0) - return [3, caml_call1(Stdlib_Printf[4].call(null, u), f)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, v), f)]; var c = match$0[1]; if(typeof c !== "number" && 1 === c[0] && ! match$0[2]){ var r$0 = c[1], h = r$0 < 2, i = h || 36 < r$0; @@ -44742,7 +44759,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 34: if(! args[2]){ var d = a[2], n$0 = a[1]; - return [3, caml_call2(Stdlib_Printf[4].call(null, v), n$0, d)]; + return [3, caml_call2(Stdlib_Printf[4].call(null, w), n$0, d)]; } break; } @@ -44863,15 +44880,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-rational: expected 2 integers"], 1); }); - var w = [0, 0], x = [0, 1]; + var x = [0, 0], y = [0, 1]; register ("rational?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 34 === a[0]){if(args[2]) break a; return x;} - if(! args[2]) return w; + if(typeof a !== "number" && 34 === a[0]){if(args[2]) break a; return y;} + if(! args[2]) return x; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "rational?: expected 1 arg"], 1); @@ -44892,7 +44909,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "numerator: expected rational or integer"], 1); }); - var y = [1, 1]; + var z = [1, 1]; register ("denominator", function(args){ @@ -44901,7 +44918,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 1: - if(! args[2]) return y; break; + if(! args[2]) return z; break; case 34: if(! args[2]){var d = a[2]; return [1, d];} break; } @@ -44912,18 +44929,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_s$0 = "%s", - z = [0, [8, [0, 0, 2], 0, 0, 0], "%E"], - A = [0, [8, [0, 0, 4], 0, 0, 0], "%G"], - B = [0, [4, 8, 0, 0, 0], "%X"], - C = [0, [2, 0, 0], cst_s$0], - D = [0, [4, 0, 0, 0, 0], "%d"], - E = [0, [8, [0, 0, 1], 0, 0, 0], "%e"], - F = [0, [8, [0, 0, 0], 0, 0, 0], "%f"], - G = [0, [8, [0, 0, 3], 0, 0, 0], cst_g], - H = [0, [4, 10, 0, 0, 0], "%o"], - I = [0, [2, 0, 0], cst_s$0], - J = [0, [4, 12, 0, 0, 0], "%u"], - K = [0, [4, 6, 0, 0, 0], "%x"]; + A = [0, [8, [0, 0, 2], 0, 0, 0], "%E"], + B = [0, [8, [0, 0, 4], 0, 0, 0], "%G"], + C = [0, [4, 8, 0, 0, 0], "%X"], + D = [0, [2, 0, 0], cst_s$0], + E = [0, [4, 0, 0, 0, 0], "%d"], + F = [0, [8, [0, 0, 1], 0, 0, 0], "%e"], + G = [0, [8, [0, 0, 0], 0, 0, 0], "%f"], + H = [0, [8, [0, 0, 3], 0, 0, 0], cst_g], + I = [0, [4, 10, 0, 0, 0], "%o"], + J = [0, [2, 0, 0], cst_s$0], + K = [0, [4, 12, 0, 0, 0], "%u"], + L = [0, [4, 6, 0, 0, 0], "%x"]; register ("printf-spec", function(args){ @@ -44987,19 +45004,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= switch(switcher){ case 0: var - fmt = Stdlib_Scanf[13].call(null, spec_str, z), + fmt = Stdlib_Scanf[13].call(null, spec_str, A), o = to_float(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt), o)]; break; case 2: var - fmt$0 = Stdlib_Scanf[13].call(null, spec_str, A), + fmt$0 = Stdlib_Scanf[13].call(null, spec_str, B), p = to_float(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$0), p)]; break; case 19: var - fmt$1 = Stdlib_Scanf[13].call(null, spec_str, B), + fmt$1 = Stdlib_Scanf[13].call(null, spec_str, C), q = to_int(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$1), q)]; break; @@ -45008,37 +45025,37 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= n_val = to_int(arg), body = Stdlib_String[16].call(null, spec_str, 0, n - 1 | 0), r = Stdlib[28].call(null, body, "s"), - fmt$2 = Stdlib_Scanf[13].call(null, r, C), + fmt$2 = Stdlib_Scanf[13].call(null, r, D), t = Stdlib_Char[1].call(null, n_val & 255), u = Stdlib_String[1].call(null, 1, t), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$2), u)]; break; case 32: var - fmt$4 = Stdlib_Scanf[13].call(null, spec_str, E), + fmt$4 = Stdlib_Scanf[13].call(null, spec_str, F), w = to_float(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$4), w)]; break; case 33: var - fmt$5 = Stdlib_Scanf[13].call(null, spec_str, F), + fmt$5 = Stdlib_Scanf[13].call(null, spec_str, G), x = to_float(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$5), x)]; break; case 34: var - fmt$6 = Stdlib_Scanf[13].call(null, spec_str, G), + fmt$6 = Stdlib_Scanf[13].call(null, spec_str, H), y = to_float(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$6), y)]; break; case 42: var - fmt$7 = Stdlib_Scanf[13].call(null, spec_str, H), - L = to_int(arg), - a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$7), L)]; + fmt$7 = Stdlib_Scanf[13].call(null, spec_str, I), + z = to_int(arg), + a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$7), z)]; break; case 46: - var fmt$8 = Stdlib_Scanf[13].call(null, spec_str, I); + var fmt$8 = Stdlib_Scanf[13].call(null, spec_str, J); b: { if(typeof arg === "number"){ @@ -45061,20 +45078,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= break; case 48: var - fmt$9 = Stdlib_Scanf[13].call(null, spec_str, J), + fmt$9 = Stdlib_Scanf[13].call(null, spec_str, K), M = to_int(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$9), M)]; break; case 51: var - fmt$10 = Stdlib_Scanf[13].call(null, spec_str, K), + fmt$10 = Stdlib_Scanf[13].call(null, spec_str, L), N = to_int(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$10), N)]; break; case 31: case 36: var - fmt$3 = Stdlib_Scanf[13].call(null, spec_str, D), + fmt$3 = Stdlib_Scanf[13].call(null, spec_str, E), v = to_int(arg), a = [3, caml_call1(Stdlib_Printf[4].call(null, fmt$3), v)]; break; @@ -45805,7 +45822,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } throw caml_maybe_attach_backtrace([0, Sx_types[9], "nil?: 1 arg"], 1); }); - var L = [0, 0], M = [0, 1]; + var M = [0, 0], N = [0, 1]; register ("number?", function(args){ @@ -45813,12 +45830,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(args){ var a = args[1]; if(typeof a !== "number") - switch(a[0]){case 1:case 2:case 34: if(args[2]) break a; return M;} - if(! args[2]) return L; + switch(a[0]){case 1:case 2:case 34: if(args[2]) break a; return N;} + if(! args[2]) return M; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "number?: 1 arg"], 1); }); - var N = [0, 0], O = [0, 1]; + var O = [0, 0], P = [0, 1]; register ("integer?", function(args){ @@ -45828,55 +45845,55 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 1: - if(args[2]) break a; return O; + if(args[2]) break a; return P; case 2: if(args[2]) break a; var f = a[1]; return [0, Stdlib_Float[18].call(null, f)]; } - if(! args[2]) return N; + if(! args[2]) return O; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "integer?: 1 arg"], 1); }); - var P = [0, 0], Q = [0, 1]; + var Q = [0, 0], R = [0, 1]; register ("float?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 2 === a[0]){if(args[2]) break a; return Q;} - if(! args[2]) return P; + if(typeof a !== "number" && 2 === a[0]){if(args[2]) break a; return R;} + if(! args[2]) return Q; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "float?: 1 arg"], 1); }); - var R = [0, 0], S = [0, 1]; + var S = [0, 0], T = [0, 1]; register ("string?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 3 === a[0]){if(args[2]) break a; return S;} - if(! args[2]) return R; + if(typeof a !== "number" && 3 === a[0]){if(args[2]) break a; return T;} + if(! args[2]) return S; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "string?: 1 arg"], 1); }); - var T = [0, 0], U = [0, 1]; + var U = [0, 0], V = [0, 1]; register ("boolean?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 0 === a[0]){if(args[2]) break a; return U;} - if(! args[2]) return T; + if(typeof a !== "number" && 0 === a[0]){if(args[2]) break a; return V;} + if(! args[2]) return U; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "boolean?: 1 arg"], 1); }); - var V = [0, 0], W = [0, 1]; + var W = [0, 0], X = [0, 1]; register ("list?", function(args){ @@ -45884,12 +45901,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(args){ var a = args[1]; if(typeof a !== "number") - switch(a[0]){case 6:case 21: if(args[2]) break a; return W;} - if(! args[2]) return V; + switch(a[0]){case 6:case 21: if(args[2]) break a; return X;} + if(! args[2]) return W; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "list?: 1 arg"], 1); }); - var X = [0, 0], Y = [0, 1], Z = [0, 1]; + var Y = [0, 0], Z = [0, 1], _ = [0, 1]; register ("dict?", function(args){ @@ -45899,58 +45916,58 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 7: - if(args[2]) break a; return Y; - case 38: if(args[2]) break a; return Z; + case 38: + if(args[2]) break a; return _; } - if(! args[2]) return X; + if(! args[2]) return Y; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "dict?: 1 arg"], 1); }); - var _ = [0, 0], $ = [0, 1]; + var $ = [0, 0], aa = [0, 1]; register ("adt?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 38 === a[0]){if(args[2]) break a; return $;} - if(! args[2]) return _; + if(typeof a !== "number" && 38 === a[0]){if(args[2]) break a; return aa;} + if(! args[2]) return $; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "adt?: 1 arg"], 1); }); - var aa = [0, 0], ab = [0, 1]; + var ab = [0, 0], ac = [0, 1]; register ("symbol?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 4 === a[0]){if(args[2]) break a; return ab;} - if(! args[2]) return aa; + if(typeof a !== "number" && 4 === a[0]){if(args[2]) break a; return ac;} + if(! args[2]) return ab; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "symbol?: 1 arg"], 1); }); - var ac = [0, 0], ad = [0, 1]; + var ad = [0, 0], ae = [0, 1]; register ("keyword?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 5 === a[0]){if(args[2]) break a; return ad;} - if(! args[2]) return ac; + if(typeof a !== "number" && 5 === a[0]){if(args[2]) break a; return ae;} + if(! args[2]) return ad; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "keyword?: 1 arg"], 1); }); var - ae = [0, 1], - af = [0, 0], + af = [0, 1], ag = [0, 0], - ah = [0, 1], - ai = [0, 0], - aj = [0, 1]; + ah = [0, 0], + ai = [0, 1], + aj = [0, 0], + ak = [0, 1]; register ("empty?", function(args){ @@ -45964,9 +45981,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= { switch(a[0]){ case 3: - if(a[1] !== cst){if(args[2]) break a; return ag;} + if(a[1] !== cst){if(args[2]) break a; return ah;} if(args[2]) break a; - return ah; + return ai; case 6: if(a[1]){if(args[2]) break a; break c;} if(args[2]) break a; @@ -45981,13 +45998,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= break; default: break b; } - return aj; + return ak; } - return ai; + return aj; } - if(0 === a){if(args[2]) break a; return ae;} + if(0 === a){if(args[2]) break a; return af;} } - if(! args[2]) return af; + if(! args[2]) return ag; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "empty?: 1 arg"], 1); }); @@ -46116,7 +46133,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "string-contains?: 2 string args"], 1); }); - var ak = [0, 0]; + var al = [0, 0]; register ("starts-with?", function(args){ @@ -46146,9 +46163,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } } - return ak; + return al; }); - var al = [0, 0]; + var am = [0, 0]; register ("ends-with?", function(args){ @@ -46179,9 +46196,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } } - return al; + return am; }); - var am = [2, -1.]; + var an = [2, -1.]; register ("index-of", function(args){ @@ -46204,7 +46221,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= hl = caml_ml_string_length(haystack), i = 0; for(;;){ - if(hl < (i + nl | 0)) return am; + if(hl < (i + nl | 0)) return an; if(Stdlib_String[16].call(null, haystack, i, nl) === needle) return [2, i]; var i$0 = i + 1 | 0; @@ -46418,7 +46435,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } throw caml_maybe_attach_backtrace([0, Sx_types[9], "join: 2 args"], 1); }); - var an = [0, [8, [0, 0, 3], 0, 0, 0], cst_g]; + var ao = [0, [8, [0, 0, 3], 0, 0, 0], cst_g]; register ("replace", function(args){ @@ -46434,7 +46451,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var n$0 = t[1]; return Stdlib_Float[18].call(null, n$0) ? Stdlib[33].call(null, n$0 | 0) - : caml_call1(Stdlib_Printf[4].call(null, an), n$0); + : caml_call1(Stdlib_Printf[4].call(null, ao), n$0); case 12: var v = caml_call1(sx_trampoline_fn[1], t); if(typeof v !== "number" && 3 === v[0]){var s$0 = v[1]; return s$0;} @@ -46567,7 +46584,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "parse-number: 1 string arg"], 1); }); - var ao = [0, 0, 0]; + var ap = [0, 0, 0]; register ("regex-match", function(args){ @@ -46602,7 +46619,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var exn = caml_wrap_exception(exn$0); if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0); - groups[1] = Stdlib[37].call(null, groups[1], ao); + groups[1] = Stdlib[37].call(null, groups[1], ap); } var g = i + 1 | 0; if(d === i) break; @@ -46623,7 +46640,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "regex-match: pattern and input strings"], 1); }); - var ap = [0, 0]; + var aq = [0, 0]; register ("regex-match?", function(args){ @@ -46642,7 +46659,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= f = [0, Re[7].call(null, 0, 0, e, input)]; return f; } - catch(exn){return ap;} + catch(exn){return aq;} } } } @@ -46808,11 +46825,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_args = " args", cst_len = "len", - aq = [0, [11, "len: ", [4, 0, 0, 0, [11, cst_args, 0]]], "len: %d args"], - ar = [1, 0], - as = [1, 1], + ar = [0, [11, "len: ", [4, 0, 0, 0, [11, cst_args, 0]]], "len: %d args"], + as = [1, 0], at = [1, 1], - au = [1, 0]; + au = [1, 1], + av = [1, 0]; register (cst_len, function(args){ @@ -46824,7 +46841,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number"){ switch(a[0]){ case 0: - if(a[1]){if(args[2]) break a; return as;} + if(a[1]){if(args[2]) break a; return at;} if(args[2]) break a; break b; case 3: @@ -46853,7 +46870,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var e = a[1][1]; if(args[2]) break a; var l = e; break; case 1: case 2: - if(args[2]) break a; return at; + if(args[2]) break a; return au; case 4: case 5: case 8: @@ -46862,18 +46879,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 11: case 12: case 15: - if(args[2]) break a; return au; + if(args[2]) break a; return av; default: break a; } return [1, Stdlib_List[1].call(null, l)]; } if(0 !== a || args[2]) break a; } - return ar; + return as; } var b = Stdlib_List[1].call(null, args), - c = caml_call1(Stdlib_Printf[4].call(null, aq), b); + c = caml_call1(Stdlib_Printf[4].call(null, ar), b); throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1); }); register("length", Stdlib_Hashtbl[6].call(null, primitives, cst_len)); @@ -46917,7 +46934,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "first: 1 list arg"], 1); }); - var av = [6, 0], aw = [6, 0]; + var aw = [6, 0], ax = [6, 0]; register ("rest", function(args){ @@ -46940,11 +46957,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= break; default: break a; } - return aw; + return ax; } return [6, xs]; } - if(0 === a && ! args[2]) return av; + if(0 === a && ! args[2]) return aw; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "rest: 1 list arg"], 1); @@ -46972,7 +46989,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "last: 1 list arg"], 1); }); - var ax = [6, 0]; + var ay = [6, 0]; register ("init", function(args){ @@ -46988,7 +47005,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= default: break a; } var match = Stdlib_List[10].call(null, l); - if(! match) return ax; + if(! match) return ay; var rest = match[2]; return [6, Stdlib_List[10].call(null, rest)]; } @@ -47242,6 +47259,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("concat", function(args){return [6, Stdlib_List[24].call(null, as_list, args)];}); + var az = [0, 0]; register ("contains?", function(args){ @@ -47261,7 +47279,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= for(;;){ if (caml_ml_string_length(s) < (i + caml_ml_string_length(sub) | 0)) - var f = 0; + var h = 0; else{ if (Stdlib_String[16].call(null, s, i, caml_ml_string_length(sub)) @@ -47270,21 +47288,31 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= i = i$0; continue; } - var f = 1; + var h = 1; } - return [0, f]; + return [0, h]; } case 6: - var d = args[2]; - if(! d) break a; - if(d[2]) break a; - var item = d[1], l = a[1]; - break; - case 21: - var e = args[2], g = a[1][1]; + var e = args[2]; if(! e) break a; if(e[2]) break a; - var item = e[1], l = g; + var item = e[1], l = a[1]; + break; + case 7: + var f = args[2]; + if(! f) break a; + if(f[2]) break a; + var key = f[1], d = a[1]; + if(typeof key !== "number" && key[0] - 3 >>> 0 < 3){ + var k = key[1]; + return [0, Stdlib_Hashtbl[9].call(null, d, k)]; + } + return az; + case 21: + var g = args[2], j = a[1][1]; + if(! g) break a; + if(g[2]) break a; + var item = g[1], l = j; break; default: break a; } @@ -47377,7 +47405,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "contains?: 2 args"], 1); }); - var ay = [6, 0], az = [6, 0]; + var aA = [6, 0], aB = [6, 0]; register ("range", function(args){ @@ -47408,7 +47436,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= && 1 === stop_v[0] && typeof step_v !== "number" && 1 === step_v[0]){ var st$0 = step_v[1], e$0 = stop_v[1], s$0 = start_v[1]; - if(0 === st$0) return az; + if(0 === st$0) return aB; var b = 0; if(0 < st$0){ var i = s$0, items = b; @@ -47434,7 +47462,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= s = as_number(start_v), e = as_number(stop_v), st = as_number(step_v); - if(st === 0.) return ay; + if(st === 0.) return aA; var a = 0; if(0. < st){ var i$1 = s, items$2 = a; @@ -48166,15 +48194,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_s = "~%s", - aA = [3, ""], - aB = [0, [12, 126, [2, 0, 0]], cst_s], - aC = [0, [12, 126, [2, 0, 0]], cst_s], - aD = [0, [12, 58, [2, 0, [12, 32, [2, 0, 0]]]], ":%s %s"], - aE = + aC = [3, ""], + aD = [0, [12, 126, [2, 0, 0]], cst_s], + aE = [0, [12, 126, [2, 0, 0]], cst_s], + aF = [0, [12, 58, [2, 0, [12, 32, [2, 0, 0]]]], ":%s %s"], + aG = [0, [11, "(make-spread {", [2, 0, [11, "})", 0]]], "(make-spread {%s})"], - aF = [0, [11, "#<", [2, 0, [12, 62, 0]]], "#<%s>"], - aG = [0, [11, "#"], - aH = [0, [11, "#(", [2, 0, [12, 41, 0]]], "#(%s)"]; + aH = [0, [11, "#<", [2, 0, [12, 62, 0]]], "#<%s>"], + aI = [0, [11, "#"], + aJ = [0, [11, "#(", [2, 0, [12, 41, 0]]], "#(%s)"]; register ("serialize", function(args){ @@ -48184,15 +48212,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 8: - if(args[2]) break a; return aA; + if(args[2]) break a; return aC; case 9: if(args[2]) break a; var c = a[1], b = c[1]; - return [3, caml_call1(Stdlib_Printf[4].call(null, aB), b)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aD), b)]; case 10: if(args[2]) break a; var i = a[1], d = i[1]; - return [3, caml_call1(Stdlib_Printf[4].call(null, aC), d)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aE), d)]; case 17: if(args[2]) break a; var s = a[1]; return [3, s]; case 18: @@ -48207,21 +48235,21 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= v = param[2], k = param[1], a = Sx_types[117].call(null, v); - return caml_call2(Stdlib_Printf[4].call(null, aD), k, a); + return caml_call2(Stdlib_Printf[4].call(null, aF), k, a); }, pairs), e = Stdlib_String[7].call(null, cst$1, dict_parts); - return [3, caml_call1(Stdlib_Printf[4].call(null, aE), e)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aG), e)]; case 19: if(args[2]) break a; var s$0 = a[1]; return [3, s$0]; case 27: if(args[2]) break a; var r = a[1], f = r[1][1]; - return [3, caml_call1(Stdlib_Printf[4].call(null, aF), f)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aH), f)]; case 28: if(args[2]) break a; var p = a[1], g = p[1]; - return [3, caml_call1(Stdlib_Printf[4].call(null, aG), g)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aI), g)]; case 29: if(args[2]) break a; var @@ -48231,7 +48259,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(v){return Sx_types[117].call(null, v);}, arr), elts = Stdlib_Array[10].call(null, h), j = Stdlib_String[7].call(null, cst$1, elts); - return [3, caml_call1(Stdlib_Printf[4].call(null, aH), j)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, aJ), j)]; } if(! args[2]) return [3, Sx_types[117].call(null, a)]; } @@ -48381,19 +48409,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("clear-stores", function(args){Stdlib_Hashtbl[2].call(null, store_registry); return 0;}); - var aI = [0, 1], aJ = [0, 1], aK = [6, 0], aL = [6, 0]; + var aK = [0, 1], aL = [0, 1], aM = [6, 0], aN = [6, 0]; register ("resource", function(args){ var state = Stdlib_Hashtbl[1].call(null, 0, 8); - Stdlib_Hashtbl[11].call(null, state, "loading", aI); + Stdlib_Hashtbl[11].call(null, state, "loading", aK); Stdlib_Hashtbl[11].call(null, state, "data", 0); Stdlib_Hashtbl[11].call(null, state, cst_error, 0); var sig_d = Stdlib_Hashtbl[1].call(null, 0, 8); - Stdlib_Hashtbl[11].call(null, sig_d, cst_signal, aJ); + Stdlib_Hashtbl[11].call(null, sig_d, cst_signal, aL); Stdlib_Hashtbl[11].call(null, sig_d, cst_value, [7, state]); - Stdlib_Hashtbl[11].call(null, sig_d, "subscribers", aK); - Stdlib_Hashtbl[11].call(null, sig_d, "deps", aL); + Stdlib_Hashtbl[11].call(null, sig_d, "subscribers", aM); + Stdlib_Hashtbl[11].call(null, sig_d, "deps", aN); return [7, sig_d]; }); register @@ -48502,15 +48530,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-spread: 1 dict"], 1); }); - var aM = [0, 0], aN = [0, 1]; + var aO = [0, 0], aP = [0, 1]; register ("spread?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 18 === a[0]){if(args[2]) break a; return aN;} - if(! args[2]) return aM; + if(typeof a !== "number" && 18 === a[0]){if(args[2]) break a; return aP;} + if(! args[2]) return aO; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "spread?: 1 arg"], 1); }); @@ -48542,7 +48570,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = caml_call2(sx_call_fn[1], f, args); return caml_call1(sx_trampoline_fn[1], a); } - var aO = [6, 0]; + var aQ = [6, 0]; register ("map", function(args){ @@ -48552,7 +48580,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var a = b[1], f = args[1]; if(typeof a === "number"){ - if(0 === a && ! b[2]) return aO; + if(0 === a && ! b[2]) return aQ; } else{ switch(a[0]){ @@ -48572,7 +48600,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "map: expected (fn list)"], 1); }); - var aP = [6, 0]; + var aR = [6, 0]; register ("map-indexed", function(args){ @@ -48582,7 +48610,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var a = b[1], f = args[1]; if(typeof a === "number"){ - if(0 === a && ! b[2]) return aP; + if(0 === a && ! b[2]) return aR; } else{ switch(a[0]){ @@ -48604,7 +48632,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "map-indexed: expected (fn list)"], 1); }); - var aQ = [6, 0]; + var aS = [6, 0]; register ("filter", function(args){ @@ -48614,7 +48642,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var a = b[1], f = args[1]; if(typeof a === "number"){ - if(0 === a && ! b[2]) return aQ; + if(0 === a && ! b[2]) return aS; } else{ switch(a[0]){ @@ -48641,7 +48669,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst$4 = ", ", - aR = + aT = [0, [11, "for-each: expected (fn list), got (", @@ -48680,7 +48708,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(v){return Sx_types[61].call(null, v);}, args), types = Stdlib_String[7].call(null, cst$4, c), d = Stdlib_List[1].call(null, args), - e = caml_call2(Stdlib_Printf[4].call(null, aR), types, d); + e = caml_call2(Stdlib_Printf[4].call(null, aT), types, d); throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1); }); register @@ -48714,7 +48742,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "reduce: expected (fn init list)"], 1); }); - var aS = [0, 0], aT = [0, 0]; + var aU = [0, 0], aV = [0, 0]; register ("some", function(args){ @@ -48724,7 +48752,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var a = b[1], f = args[1]; if(typeof a === "number"){ - if(0 === a && ! b[2]) return aS; + if(0 === a && ! b[2]) return aU; } else{ switch(a[0]){ @@ -48737,7 +48765,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(! b[2]){ var param = items; for(;;){ - if(! param) return aT; + if(! param) return aV; var rest = param[2], x = param[1], result = call_any(f, [0, x, 0]); if(Sx_types[71].call(null, result)) return result; param = rest; @@ -48749,7 +48777,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "some: expected (fn list)"], 1); }); - var aU = [0, 1]; + var aW = [0, 1]; register ("every?", function(args){ @@ -48759,7 +48787,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var a = b[1], f = args[1]; if(typeof a === "number"){ - if(0 === a && ! b[2]) return aU; + if(0 === a && ! b[2]) return aW; } else{ switch(a[0]){ @@ -48880,7 +48908,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "vm-stack-copy!: expected (src dst count)"], 1); }); - var aV = [0, 0]; + var aX = [0, 0]; register ("primitive?", function(args){ @@ -48891,29 +48919,29 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [0, Stdlib_Hashtbl[9].call(null, primitives, name)]; } } - return aV; + return aX; }); - var aW = [0, 0], aX = [0, 1]; + var aY = [0, 0], aZ = [0, 1]; register ("lambda?", function(args){ if(args){ var a = args[1]; - if(typeof a !== "number" && 8 === a[0] && ! args[2]) return aX; + if(typeof a !== "number" && 8 === a[0] && ! args[2]) return aZ; } - return aW; + return aY; }); - var aY = [0, 0], aZ = [0, 1]; + var a0 = [0, 0], a1 = [0, 1]; register ("island?", function(args){ if(args){ var a = args[1]; - if(typeof a !== "number" && 10 === a[0] && ! args[2]) return aZ; + if(typeof a !== "number" && 10 === a[0] && ! args[2]) return a1; } - return aY; + return a0; }); - var a0 = [0, 0]; + var a2 = [0, 0]; register ("record?", function(args){ @@ -48921,7 +48949,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var v = args[1]; return Sx_types[100].call(null, v); } - return a0; + return a2; }); register ("make-rtd", @@ -48983,7 +49011,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ([0, Sx_types[9], "record-set!: expected (record index value)"], 1); }); - var a1 = [0, 0]; + var a3 = [0, 0]; register ("record-type?", function(args){ @@ -48994,7 +49022,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return Sx_types[99].call(null, v, uid); } } - return a1; + return a3; }); register ("make-record-constructor", @@ -49065,17 +49093,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-parameter: expected 1-2 args"], 1); }); - var a2 = [0, 0], a3 = [0, 0], a4 = [0, 1]; + var a4 = [0, 0], a5 = [0, 0], a6 = [0, 1]; register ("parameter?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 28 === a[0]){if(args[2]) break a; return a4;} - if(! args[2]) return a3; + if(typeof a !== "number" && 28 === a[0]){if(args[2]) break a; return a6;} + if(! args[2]) return a5; } - return a2; + return a4; }); register ("parameter-uid", @@ -49132,15 +49160,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("vector", function(args){return [29, Stdlib_Array[11].call(null, args)];}); - var a5 = [0, 0], a6 = [0, 1]; + var a7 = [0, 0], a8 = [0, 1]; register ("vector?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 29 === a[0]){if(args[2]) break a; return a6;} - if(! args[2]) return a5; + if(typeof a !== "number" && 29 === a[0]){if(args[2]) break a; return a8;} + if(! args[2]) return a7; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "vector?: 1 arg"], 1); }); @@ -49156,7 +49184,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_out_of_bounds_length = " out of bounds (length ", - a7 = + a9 = [0, [11, "vector-ref: index ", @@ -49182,7 +49210,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = c || arr.length - 1 <= i; if(! d) return caml_check_bound(arr, i)[i + 1]; var - e = caml_call2(Stdlib_Printf[4].call(null, a7), i, arr.length - 1); + e = caml_call2(Stdlib_Printf[4].call(null, a9), i, arr.length - 1); throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1); } } @@ -49191,7 +49219,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ([0, Sx_types[9], "vector-ref: expected (vector index)"], 1); }); var - a8 = + a_ = [0, [11, "vector-set!: index ", @@ -49220,7 +49248,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= e = d || arr.length - 1 <= i; if(e){ var - f = caml_call2(Stdlib_Printf[4].call(null, a8), i, arr.length - 1); + f = caml_call2(Stdlib_Printf[4].call(null, a_), i, arr.length - 1); throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1); } caml_check_bound(arr, i)[i + 1] = v; @@ -49322,15 +49350,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("make-string-buffer", function(param){return [30, Stdlib_Buffer[1].call(null, 64)];}); - var a9 = [0, 0], a_ = [0, 1]; + var a$ = [0, 0], ba = [0, 1]; register ("string-buffer?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 30 === a[0]){if(args[2]) break a; return a_;} - if(! args[2]) return a9; + if(typeof a !== "number" && 30 === a[0]){if(args[2]) break a; return ba;} + if(! args[2]) return a$; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "string-buffer?: expected 1 arg"], 1); @@ -49397,15 +49425,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("make-buffer", function(param){return [30, Stdlib_Buffer[1].call(null, 64)];}); - var a$ = [0, 0], ba = [0, 1]; + var bb = [0, 0], bc = [0, 1]; register ("buffer?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 30 === a[0]){if(args[2]) break a; return ba;} - if(! args[2]) return a$; + if(typeof a !== "number" && 30 === a[0]){if(args[2]) break a; return bc;} + if(! args[2]) return bb; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "buffer?: expected 1 arg"], 1); @@ -49593,7 +49621,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[20].call (null, function(s){return [3, s];}, cap_stack[1])]; }); - var bb = [0, 1], bc = [0, 1]; + var bd = [0, 1], be = [0, 1]; register ("has-capability?", function(args){ @@ -49602,14 +49630,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number" && a[0] - 3 >>> 0 < 3 && ! args[2]){ var cap = a[1]; return 0 === cap_stack[1] - ? bc + ? be : [0, Stdlib_List[37].call(null, cap, cap_stack[1])]; } } - return bb; + return bd; }); var - bd = + bf = [0, [11, "Capability '", @@ -49628,7 +49656,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Stdlib_List[37].call(null, cap, cap_stack[1])) return 0; var b = Stdlib_String[7].call(null, cst$4, cap_stack[1]), - c = caml_call2(Stdlib_Printf[4].call(null, bd), cap, b); + c = caml_call2(Stdlib_Printf[4].call(null, bf), cap, b); throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1); } } @@ -49637,7 +49665,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("capability-restricted?", function(args){return [0, 0 !== cap_stack[1] ? 1 : 0];}); - var be = [0, 0], bf = [0, 1], bg = [0, 1]; + var bg = [0, 0], bh = [0, 1], bi = [0, 1]; register ("is-else-clause?", function(args){ @@ -49646,14 +49674,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 0: - if(a[1] && ! args[2]) return bf; break; + if(a[1] && ! args[2]) return bh; break; case 5: - if(a[1] === "else" && ! args[2]) return bg; break; + if(a[1] === "else" && ! args[2]) return bi; break; } } - return be; + return bg; }); - var bh = [0, 0]; + var bj = [0, 0]; register ("cond-scheme?", function(args){ @@ -49674,9 +49702,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= clauses)]; } } - return bh; + return bj; }); - var bi = [0, 0], bj = [0, 1], bk = [0, 1]; + var bk = [0, 0], bl = [0, 1], bm = [0, 1]; register ("component?", function(args){ @@ -49685,12 +49713,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof a !== "number") switch(a[0]){ case 9: - if(! args[2]) return bj; break; + if(! args[2]) return bl; break; case 10: - if(! args[2]) return bk; break; + if(! args[2]) return bm; break; } } - return bi; + return bk; }); register ("lambda-closure", @@ -49716,7 +49744,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var bl = [0, 0]; + var bn = [0, 0]; register ("component-has-children?", function(args){ @@ -49730,7 +49758,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(! args[2]){var i = a[1]; return [0, i[3]];} break; } } - return bl; + return bn; }); register ("component-name", @@ -49747,7 +49775,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var bm = [6, 0]; + var bo = [6, 0]; register ("component-params", function(args){ @@ -49773,7 +49801,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= break; } } - return bm; + return bo; }); register ("component-body", @@ -49811,15 +49839,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var bn = [0, 0], bo = [0, 1]; + var bp = [0, 0], bq = [0, 1]; register ("macro?", function(args){ if(args){ var a = args[1]; - if(typeof a !== "number" && 11 === a[0] && ! args[2]) return bo; + if(typeof a !== "number" && 11 === a[0] && ! args[2]) return bq; } - return bn; + return bp; }); register ("for-each-indexed", @@ -49850,7 +49878,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "for-each-indexed: expected (fn list)"], 1); }); - var bp = [6, 0]; + var br = [6, 0]; register ("lambda-params", function(args){ @@ -49862,7 +49890,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[20].call(null, function(s){return [3, s];}, l[1])]; } } - return bp; + return br; }); register ("lambda-body", @@ -49873,7 +49901,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var bq = [0, 1]; + var bs = [0, 1]; register ("empty-dict?", function(args){ @@ -49884,7 +49912,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [0, 0 === Stdlib_Hashtbl[15].call(null, d) ? 1 : 0]; } } - return bq; + return bs; }); register ("make-raw-html", @@ -49895,7 +49923,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var br = [3, cst]; + var bt = [3, cst]; register ("raw-html-content", function(args){ @@ -49903,7 +49931,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[1]; if(typeof a !== "number" && 17 === a[0] && ! args[2]){var s = a[1]; return [3, s];} } - return br; + return bt; }); var cst_VM_undefined = "VM undefined: "; register @@ -49984,7 +50012,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_depth = " depth=", cst$3 = "->", cst_scope_push = "scope-push!", - bs = + bu = [0, [11, "PUSH ", @@ -50013,7 +50041,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = Stdlib_List[1].call(null, stack) + 1 | 0, e = Stdlib_List[1].call(null, stack); scope_log[1] = - [0, caml_call3(Stdlib_Printf[4].call(null, bs), name, e, d), c]; + [0, caml_call3(Stdlib_Printf[4].call(null, bu), name, e, d), c]; } Stdlib_Hashtbl[11].call(null, scope_stacks, name, [0, value, stack]); return 0; @@ -50024,7 +50052,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_scope_pop = "scope-pop!", - bt = + bv = [0, [11, "POP ", @@ -50052,7 +50080,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = Stdlib[17].call(null, 0, c), e = Stdlib_List[1].call(null, stack); scope_log[1] = - [0, caml_call3(Stdlib_Printf[4].call(null, bt), name, e, d), b]; + [0, caml_call3(Stdlib_Printf[4].call(null, bv), name, e, d), b]; } if(stack){ var rest = stack[2]; @@ -50065,7 +50093,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_found = " found=", - bu = + bw = [0, [11, "PEEK ", @@ -50091,7 +50119,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= scope_log[1] = [0, caml_call3 - (Stdlib_Printf[4].call(null, bu), name, c, 0 !== stack ? 1 : 0), + (Stdlib_Printf[4].call(null, bw), name, c, 0 !== stack ? 1 : 0), b]; } if(! stack) return 0; @@ -50103,7 +50131,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_context = "context", - bv = + bx = [0, [11, "CTX ", @@ -50129,7 +50157,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= scope_log[1] = [0, caml_call3 - (Stdlib_Printf[4].call(null, bv), name, b, 0 !== stack ? 1 : 0), + (Stdlib_Printf[4].call(null, bx), name, b, 0 !== stack ? 1 : 0), a]; } if(stack){var v = stack[1]; return v;} @@ -50141,8 +50169,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; }); var - bw = [3, "bad args"], - bx = + by = [3, "bad args"], + bz = [0, [11, "name=", @@ -50176,10 +50204,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= 0), b = Stdlib_String[7].call(null, ",", all_keys), c = Stdlib_List[1].call(null, stack); - return [3, caml_call3(Stdlib_Printf[4].call(null, bx), name, c, b)]; + return [3, caml_call3(Stdlib_Printf[4].call(null, bz), name, c, b)]; } } - return bw; + return by; }); register ("collect!", @@ -50218,7 +50246,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }); - var cst_collected = "collected", by = [6, 0], bz = [6, 0]; + var cst_collected = "collected", bA = [6, 0], bB = [6, 0]; register (cst_collected, function(args){ @@ -50238,15 +50266,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var match = stack[1]; if(typeof match !== "number" && 6 === match[0]){var items = match[1]; return [6, items];} } - return bz; + return bB; } } - return by; + return bA; }); var cst_clear_collected = "clear-collected!", - bA = [6, 0], - bB = [0, [6, 0], 0]; + bC = [6, 0], + bD = [0, [6, 0], 0]; register (cst_clear_collected, function(args){ @@ -50264,10 +50292,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } if(stack){ var rest = stack[2]; - Stdlib_Hashtbl[11].call(null, scope_stacks, name, [0, bA, rest]); + Stdlib_Hashtbl[11].call(null, scope_stacks, name, [0, bC, rest]); } else - Stdlib_Hashtbl[11].call(null, scope_stacks, name, bB); + Stdlib_Hashtbl[11].call(null, scope_stacks, name, bD); return 0; } } @@ -50324,7 +50352,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; }); var - bC = + bE = [0, [11, "provide-set!: '", [2, 0, [11, "' is not a reactive provide", 0]]], "provide-set!: '%s' is not a reactive provide"]; @@ -50355,7 +50383,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; } } - var c = caml_call1(Stdlib_Printf[4].call(null, bC), name); + var c = caml_call1(Stdlib_Printf[4].call(null, bE), name); throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1); } } @@ -50607,7 +50635,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var fn = match[1]; return caml_call1(fn, args); }); - var cst_emitted = "emitted", bD = [6, 0], bE = [6, 0]; + var cst_emitted = "emitted", bF = [6, 0], bG = [6, 0]; register (cst_emitted, function(args){ @@ -50627,26 +50655,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var match = stack[1]; if(typeof match !== "number" && 6 === match[0]){var items = match[1]; return [6, items];} } - return bE; + return bG; } } - return bD; + return bF; }); - var bF = [6, 0]; + var bH = [6, 0]; register ("scope-emitted", function(args){ var match = Stdlib_Hashtbl[7].call(null, primitives, cst_emitted); - if(! match) return bF; + if(! match) return bH; var fn = match[1]; return caml_call1(fn, args); }); - var bG = [6, 0]; + var bI = [6, 0]; register ("scope-collected", function(args){ var match = Stdlib_Hashtbl[7].call(null, primitives, cst_collected); - if(! match) return bG; + if(! match) return bI; var fn = match[1]; return caml_call1(fn, args); }); @@ -50688,10 +50716,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var regex_table = Stdlib_Hashtbl[1].call(null, 0, 32), cst_id = "id", - bH = [0, 1]; + bJ = [0, 1]; function make_regex_value(id, source, flags){ var d = Stdlib_Hashtbl[1].call(null, 0, 4); - Stdlib_Hashtbl[11].call(null, d, "__regex__", bH); + Stdlib_Hashtbl[11].call(null, d, "__regex__", bJ); Stdlib_Hashtbl[11].call(null, d, cst_id, [2, id]); Stdlib_Hashtbl[11].call(null, d, "source", [3, source]); Stdlib_Hashtbl[11].call(null, d, "flags", [3, flags]); @@ -51237,15 +51265,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-regexp: (pattern [flags])"], 1); }); - var bI = [0, 0], bJ = [0, 1]; + var bK = [0, 0], bL = [0, 1]; register ("regexp?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 36 === a[0]){if(args[2]) break a; return bJ;} - if(! args[2]) return bI; + if(typeof a !== "number" && 36 === a[0]){if(args[2]) break a; return bL;} + if(! args[2]) return bK; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "regexp?: 1 arg"], 1); }); @@ -51620,17 +51648,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= register ("make-hash-table", function(param){return [31, Stdlib_Hashtbl[1].call(null, 0, 16)];}); - var bK = [0, 0], bL = [0, 0], bM = [0, 1]; + var bM = [0, 0], bN = [0, 0], bO = [0, 1]; register ("hash-table?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 31 === a[0]){if(args[2]) break a; return bM;} - if(! args[2]) return bL; + if(typeof a !== "number" && 31 === a[0]){if(args[2]) break a; return bO;} + if(! args[2]) return bN; } - return bK; + return bM; }); register ("hash-table-set!", @@ -51834,9 +51862,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "hash-table-merge!: expected (dst src)"], 1); }); - var bN = [6, 0]; + var bP = [6, 0]; function seq_to_list(v){ - if(typeof v === "number"){if(0 === v) return bN;} + if(typeof v === "number"){if(0 === v) return bP;} else switch(v[0]){ case 3: @@ -51919,15 +51947,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_out_of_bounds = " out of bounds", cst_sequence_ref_index = "sequence-ref: index ", cst_sequence_ref_index_d_out_o = "sequence-ref: index %d out of bounds", - bO = - [0, - [11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]], - cst_sequence_ref_index_d_out_o], - bP = - [0, - [11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]], - cst_sequence_ref_index_d_out_o], bQ = + [0, + [11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]], + cst_sequence_ref_index_d_out_o], + bR = + [0, + [11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]], + cst_sequence_ref_index_d_out_o], + bS = [0, [11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]], cst_sequence_ref_index_d_out_o]; @@ -51950,7 +51978,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var g = caml_string_get(s, i$0); return [3, Stdlib_String[1].call(null, 1, g)]; } - var f = caml_call1(Stdlib_Printf[4].call(null, bP), i$0); + var f = caml_call1(Stdlib_Printf[4].call(null, bR), i$0); throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1); case 2: if(a[2]) break a; @@ -51959,7 +51987,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var j = caml_string_get(s, i$1); return [3, Stdlib_String[1].call(null, 1, j)]; } - var h = caml_call1(Stdlib_Printf[4].call(null, bQ), i$1); + var h = caml_call1(Stdlib_Printf[4].call(null, bS), i$1); throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1); } } @@ -51979,7 +52007,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var xs = lst[1]; try{var e = Stdlib_List[8].call(null, xs, i); return e;} catch(exn){ - var d = caml_call1(Stdlib_Printf[4].call(null, bO), i); + var d = caml_call1(Stdlib_Printf[4].call(null, bQ), i); throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1); } } @@ -52174,13 +52202,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "intern: expected 1 string"], 1); }); - var bR = [0, 1]; + var bT = [0, 1]; register ("symbol-interned?", function(args){ if(args){ var a = args[1]; - if(typeof a !== "number" && 4 === a[0] && ! args[2]) return bR; + if(typeof a !== "number" && 4 === a[0] && ! args[2]) return bT; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "symbol-interned?: expected 1 symbol"], 1); @@ -52199,15 +52227,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-char: expected integer codepoint"], 1); }); - var bS = [0, 0], bT = [0, 1]; + var bU = [0, 0], bV = [0, 1]; register ("char?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 32 === a[0]){if(args[2]) break a; return bT;} - if(! args[2]) return bS; + if(typeof a !== "number" && 32 === a[0]){if(args[2]) break a; return bV;} + if(! args[2]) return bU; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "char?: expected 1 argument"], 1); @@ -52575,15 +52603,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ([0, Sx_types[9], "list->string: expected list of chars"], 1); }); register("eof-object", function(args){return 1;}); - var bU = [0, 1], bV = [0, 0]; + var bW = [0, 1], bX = [0, 0]; register ("eof-object?", function(args){ a: if(args){ var a = args[1]; - if(typeof a === "number" && a){if(args[2]) break a; return bU;} - if(! args[2]) return bV; + if(typeof a === "number" && a){if(args[2]) break a; return bW;} + if(! args[2]) return bX; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "eof-object?: expected 1 argument"], 1); @@ -52623,41 +52651,41 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "get-output-string: expected output port"], 1); }); - var bW = [0, 0], bX = [0, 1]; + var bY = [0, 0], bZ = [0, 1]; register ("port?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 33 === a[0]){if(args[2]) break a; return bX;} - if(! args[2]) return bW; + if(typeof a !== "number" && 33 === a[0]){if(args[2]) break a; return bZ;} + if(! args[2]) return bY; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "port?: expected 1 argument"], 1); }); - var bY = [0, 0], bZ = [0, 1]; + var b0 = [0, 0], b1 = [0, 1]; register ("input-port?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 33 === a[0] && 0 === a[1][2][0]){if(args[2]) break a; return bZ;} - if(! args[2]) return bY; + if(typeof a !== "number" && 33 === a[0] && 0 === a[1][2][0]){if(args[2]) break a; return b1;} + if(! args[2]) return b0; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "input-port?: expected 1 argument"], 1); }); - var b0 = [0, 0], b1 = [0, 1]; + var b2 = [0, 0], b3 = [0, 1]; register ("output-port?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 33 === a[0] && 0 !== a[1][2][0]){if(args[2]) break a; return b1;} - if(! args[2]) return b0; + if(typeof a !== "number" && 33 === a[0] && 0 !== a[1][2][0]){if(args[2]) break a; return b3;} + if(! args[2]) return b2; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "output-port?: expected 1 argument"], 1); @@ -52804,7 +52832,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= "write-string: expected string and output port"], 1); }); - var b2 = [0, 0]; + var b4 = [0, 0]; register ("char-ready?", function(args){ @@ -52821,7 +52849,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [0, pos[1] < caml_ml_string_length(src) ? 1 : 0]; } } - if(! args[2]) return b2; + if(! args[2]) return b4; } } throw caml_maybe_attach_backtrace @@ -52945,10 +52973,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_f = "%.*f", cst_6f = "%.6f", - b3 = [0, [8, [0, 0, 0], 0, [0, 6], 0], cst_6f], - b4 = [0, [8, [0, 0, 0], 0, 1, 0], cst_f], b5 = [0, [8, [0, 0, 0], 0, [0, 6], 0], cst_6f], - b6 = [0, [8, [0, 0, 0], 0, 1, 0], cst_f]; + b6 = [0, [8, [0, 0, 0], 0, 1, 0], cst_f], + b7 = [0, [8, [0, 0, 0], 0, [0, 6], 0], cst_6f], + b8 = [0, [8, [0, 0, 0], 0, 1, 0], cst_f]; register ("format-decimal", function(args){ @@ -52963,10 +52991,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof d !== "number" && 1 === d[0]){ if(b[2]) break; var prec = d[1]; - return [3, caml_call2(Stdlib_Printf[4].call(null, b4), prec, n)]; + return [3, caml_call2(Stdlib_Printf[4].call(null, b6), prec, n)]; } if(! b[2]) - return [3, caml_call1(Stdlib_Printf[4].call(null, b3), n)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, b5), n)]; } break; case 2: @@ -52977,10 +53005,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(c[2]) break; var prec$0 = e[1]; return [3, - caml_call2(Stdlib_Printf[4].call(null, b6), prec$0, n$0)]; + caml_call2(Stdlib_Printf[4].call(null, b8), prec$0, n$0)]; } if(! c[2]) - return [3, caml_call1(Stdlib_Printf[4].call(null, b5), n$0)]; + return [3, caml_call1(Stdlib_Printf[4].call(null, b7), n$0)]; } break; } @@ -53034,15 +53062,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return [35, ht]; }); - var b7 = [0, 0], b8 = [0, 1]; + var b9 = [0, 0], b_ = [0, 1]; register ("set?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 35 === a[0]){if(args[2]) break a; return b8;} - if(! args[2]) return b7; + if(typeof a !== "number" && 35 === a[0]){if(args[2]) break a; return b_;} + if(! args[2]) return b9; } throw caml_maybe_attach_backtrace([0, Sx_types[9], "set?: 1 arg"], 1); }); @@ -53321,15 +53349,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "make-bytevector: expected n [fill]"], 1); }); - var b9 = [0, 0], b_ = [0, 1]; + var b$ = [0, 0], ca = [0, 1]; register ("bytevector?", function(args){ a: if(args){ var a = args[1]; - if(typeof a !== "number" && 37 === a[0]){if(args[2]) break a; return b_;} - if(! args[2]) return b9; + if(typeof a !== "number" && 37 === a[0]){if(args[2]) break a; return ca;} + if(! args[2]) return b$; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "bytevector?: 1 arg"], 1); @@ -53346,7 +53374,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }); var cst_out_of_range = " out of range", - b$ = + cb = [0, [11, "bytevector-u8-ref: index ", @@ -53368,7 +53396,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= e = i < 0, f = e || caml_ml_bytes_length(b) <= i; if(! f) return [1, caml_bytes_get(b, i)]; - var g = caml_call1(Stdlib_Printf[4].call(null, b$), i); + var g = caml_call1(Stdlib_Printf[4].call(null, cb), i); throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1); } } @@ -53379,7 +53407,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= 1); }); var - ca = + cc = [0, [11, "bytevector-u8-set!: index ", @@ -53406,7 +53434,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= g = i < 0, h = g || caml_ml_bytes_length(b) <= i; if(h){ - var j = caml_call1(Stdlib_Printf[4].call(null, ca), i); + var j = caml_call1(Stdlib_Printf[4].call(null, cc), i); throw caml_maybe_attach_backtrace([0, Sx_types[9], j], 1); } var k = byte < 0, l = k || 255 < byte; @@ -53615,7 +53643,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ([0, Sx_types[9], "bytevector->list: expected bytevector"], 1); }); var - cb = + cd = [0, [11, "list->bytevector: byte ", @@ -53643,7 +53671,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof v !== "number" && 1 === v[0]){ var n = v[1]; if(0 <= n && 255 >= n) return Stdlib_Char[1].call(null, n); - var c = caml_call1(Stdlib_Printf[4].call(null, cb), n); + var c = caml_call1(Stdlib_Printf[4].call(null, cd), n); throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1); } var @@ -53761,7 +53789,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-write: (path content)"], 1); }); - var cc = [0, 2, [0, 3, [0, 1, [0, 7, 0]]]]; + var ce = [0, 2, [0, 3, [0, 1, [0, 7, 0]]]]; register ("file-append", function(args){ @@ -53774,7 +53802,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(typeof c !== "number" && 3 === c[0] && ! b[2]){ var content = c[1], path = a[1]; try{ - var oc = Stdlib[62].call(null, cc, 420, path); + var oc = Stdlib[62].call(null, ce, 420, path); Stdlib[66].call(null, oc, content); Stdlib[76].call(null, oc); return 0; @@ -53965,59 +53993,59 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file: path must be a string"], 1); } - var cd = [1, 0]; + var cf = [1, 0]; register ("file-size", function(args){ if(args && ! args[2]){ var v = args[1], match = stat_or(v); - if(! match) return cd; + if(! match) return cf; var s = match[1]; return [1, s[9]]; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-size: (path)"], 1); }); - var ce = [1, 0]; + var cg = [1, 0]; register ("file-mtime", function(args){ if(args && ! args[2]){ var v = args[1], match = stat_or(v); - if(! match) return ce; + if(! match) return cg; var s = match[1]; return [1, s[11] | 0]; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-mtime: (path)"], 1); }); - var cf = [0, 0]; + var ch = [0, 0]; register ("file-isfile?", function(args){ if(args && ! args[2]){ var v = args[1], match = stat_or(v); - if(! match) return cf; + if(! match) return ch; var s = match[1]; return [0, 0 === s[3] ? 1 : 0]; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-isfile?: (path)"], 1); }); - var cg = [0, 0]; + var ci = [0, 0]; register ("file-isdir?", function(args){ if(args && ! args[2]){ var v = args[1], match = stat_or(v); - if(! match) return cg; + if(! match) return ci; var s = match[1]; return [0, 1 === s[3] ? 1 : 0]; } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-isdir?: (path)"], 1); }); - var ch = [0, 0, 0]; + var cj = [0, 0, 0]; register ("file-readable?", function(args){ @@ -54025,14 +54053,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[1]; if(typeof a !== "number" && 3 === a[0] && ! args[2]){ var path = a[1]; - try{Unix[57].call(null, path, ch); var b = 1;}catch(exn){var b = 0;} + try{Unix[57].call(null, path, cj); var b = 1;}catch(exn){var b = 0;} return [0, b]; } } throw caml_maybe_attach_backtrace ([0, Sx_types[9], "file-readable?: (path)"], 1); }); - var ci = [0, 1, 0]; + var ck = [0, 1, 0]; register ("file-writable?", function(args){ @@ -54040,7 +54068,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[1]; if(typeof a !== "number" && 3 === a[0] && ! args[2]){ var path = a[1]; - try{Unix[57].call(null, path, ci); var b = 1;}catch(exn){var b = 0;} + try{Unix[57].call(null, path, ck); var b = 1;}catch(exn){var b = 0;} return [0, b]; } } @@ -54228,13 +54256,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var channel_next_id = [0, 0], - cj = [0, 2, [0, 5, [0, 6, 0]]], - ck = [0, 1, [0, 5, [0, 6, 0]]], - cl = [0, 2, 0], - cm = [0, 0, 0], - cn = [0, 2, [0, 5, [0, 4, 0]]], - co = [0, 1, [0, 5, [0, 4, 0]]], - cp = [0, [11, cst_file, [4, 0, 0, 0, 0]], "file%d"]; + cl = [0, 2, [0, 5, [0, 6, 0]]], + cm = [0, 1, [0, 5, [0, 6, 0]]], + cn = [0, 2, 0], + co = [0, 0, 0], + cp = [0, 2, [0, 5, [0, 4, 0]]], + cq = [0, 1, [0, 5, [0, 4, 0]]], + cr = [0, [11, cst_file, [4, 0, 0, 0, 0]], "file%d"]; register ("channel-open", function(args){ @@ -54258,23 +54286,23 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib[28].call(null, "channel-open: invalid mode ", mode); throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1); } - var a = cj; + var a = cl; } else - var a = ck; + var a = cm; else - var a = cl; + var a = cn; else - var a = cm; + var a = co; else - var a = cn; + var a = cp; else - var a = co; + var a = cq; var fd = Unix[24].call(null, path, a, 420), id = channel_next_id[1]; channel_next_id[1]++; - var name = caml_call1(Stdlib_Printf[4].call(null, cp), id); + var name = caml_call1(Stdlib_Printf[4].call(null, cr), id); Stdlib_Hashtbl[11].call (null, channel_table, name, [0, fd, mode, [0, 0], [0, 1]]); return [3, name]; @@ -54731,7 +54759,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "exec-process: (cmd-list)"], 1); }); - var cq = [0, 0, 0], cr = [0, 4, 0], cs = [0, 6, 0]; + var cs = [0, 0, 0], ct = [0, 4, 0], cu = [0, 6, 0]; register ("exec-pipeline", function(args){ @@ -54879,7 +54907,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }, open_out_redir = function(path, append){ - var a = append ? cr : cs; + var a = append ? ct : cu; try{ var g = Unix[24].call(null, path, [0, 1, [0, 5, a]], 420); return g; @@ -54916,7 +54944,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(0 === i) if(ip){ var path = ip[1]; - try{var m = Unix[24].call(null, path, cq, 420), stdin_fd = m;} + try{var m = Unix[24].call(null, path, cs, 420), stdin_fd = m;} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Unix[1]) @@ -55108,11 +55136,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "socket: port must be a number"], 1); } - var ct = [0, [11, "sock", [4, 0, 0, 0, 0]], "sock%d"]; + var cv = [0, [11, "sock", [4, 0, 0, 0, 0]], "sock%d"]; function alloc_chan_name(param){ var id = channel_next_id[1]; channel_next_id[1]++; - return caml_call1(Stdlib_Printf[4].call(null, ct), id); + return caml_call1(Stdlib_Printf[4].call(null, cv), id); } var cst_rw = "rw"; register @@ -55188,7 +55216,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "socket-connect-async: (host port)"], 1); }); - var cu = [3, cst]; + var cw = [3, cst]; register ("channel-async-error", function(args){ @@ -55201,7 +55229,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(err) var e$0 = err[1], b = [3, Unix[2].call(null, e$0)]; else - var b = cu; + var b = cw; return b; } catch(exn$0){ @@ -55443,7 +55471,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_May = "May", cst_local = "local", cst_utc = "utc", - cv = + cx = [0, "Sunday", "Monday", @@ -55452,7 +55480,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= "Thursday", "Friday", "Saturday"], - cw = + cy = [0, "January", "February", @@ -55466,13 +55494,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= "October", "November", "December"], - cx = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], - cy = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], cz = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], cA = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], - cB = [0, [4, 0, [0, 2, 4], 0, 0], "%04d"], - cC = [0, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - cD = + cB = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], + cC = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], + cD = [0, [4, 0, [0, 2, 4], 0, 0], "%04d"], + cE = [0, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + cF = [0, "Jan", "Feb", @@ -55486,11 +55514,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= "Oct", "Nov", "Dec"], - cE = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], - cF = [0, [4, 0, [0, 1, 2], 0, 0], "%2d"], - cG = [0, [4, 0, [0, 2, 3], 0, 0], "%03d"], - cH = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], - cI = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d]; + cG = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], + cH = [0, [4, 0, [0, 1, 2], 0, 0], "%2d"], + cI = [0, [4, 0, [0, 2, 3], 0, 0], "%03d"], + cJ = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d], + cK = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d]; register ("clock-format", function(args){ @@ -55542,14 +55570,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_Buffer[12].call(null, buf, 37); break a; case 28: var - days = caml_obj_dup(cv), + days = caml_obj_dup(cx), a = tm[7], f = caml_check_bound(days, a)[a + 1]; Stdlib_Buffer[16].call(null, buf, f); break a; case 29: var - mons = caml_obj_dup(cw), + mons = caml_obj_dup(cy), b = tm[5], g = caml_check_bound(mons, b)[b + 1]; Stdlib_Buffer[16].call(null, buf, g); @@ -55557,39 +55585,39 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 35: var j = tm[3], - k = caml_call1(Stdlib_Printf[4].call(null, cx), j); + k = caml_call1(Stdlib_Printf[4].call(null, cz), j); Stdlib_Buffer[16].call(null, buf, k); break a; case 36: var h = tm[3] % 12 | 0, l = 0 === h ? 12 : h, - m = caml_call1(Stdlib_Printf[4].call(null, cy), l); + m = caml_call1(Stdlib_Printf[4].call(null, cA), l); Stdlib_Buffer[16].call(null, buf, m); break a; case 40: var o = tm[2], - p = caml_call1(Stdlib_Printf[4].call(null, cz), o); + p = caml_call1(Stdlib_Printf[4].call(null, cB), o); Stdlib_Buffer[16].call(null, buf, p); break a; case 46: var q = tm[1], - r = caml_call1(Stdlib_Printf[4].call(null, cA), q); + r = caml_call1(Stdlib_Printf[4].call(null, cC), q); Stdlib_Buffer[16].call(null, buf, r); break a; case 52: var s = 1900 + tm[6] | 0, - t = caml_call1(Stdlib_Printf[4].call(null, cB), s); + t = caml_call1(Stdlib_Printf[4].call(null, cD), s); Stdlib_Buffer[16].call(null, buf, t); break a; case 53: Stdlib_Buffer[16].call(null, buf, tz_label); break a; case 60: var - days$0 = caml_obj_dup(cC), + days$0 = caml_obj_dup(cE), d = tm[7], u = caml_check_bound(days$0, d)[d + 1]; Stdlib_Buffer[16].call(null, buf, u); @@ -55597,25 +55625,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 63: var w = tm[4], - x = caml_call1(Stdlib_Printf[4].call(null, cE), w); + x = caml_call1(Stdlib_Printf[4].call(null, cG), w); Stdlib_Buffer[16].call(null, buf, x); break a; case 64: var y = tm[4], - z = caml_call1(Stdlib_Printf[4].call(null, cF), y); + z = caml_call1(Stdlib_Printf[4].call(null, cH), y); Stdlib_Buffer[16].call(null, buf, z); break a; case 69: var A = tm[8] + 1 | 0, - B = caml_call1(Stdlib_Printf[4].call(null, cG), A); + B = caml_call1(Stdlib_Printf[4].call(null, cI), A); Stdlib_Buffer[16].call(null, buf, B); break a; case 72: var C = tm[5] + 1 | 0, - D = caml_call1(Stdlib_Printf[4].call(null, cH), C); + D = caml_call1(Stdlib_Printf[4].call(null, cJ), C); Stdlib_Buffer[16].call(null, buf, D); break a; case 75: @@ -55629,13 +55657,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 84: var G = (1900 + tm[6] | 0) % 100 | 0, - H = caml_call1(Stdlib_Printf[4].call(null, cI), G); + H = caml_call1(Stdlib_Printf[4].call(null, cK), G); Stdlib_Buffer[16].call(null, buf, H); break a; case 61: case 67: var - mons$0 = caml_obj_dup(cD), + mons$0 = caml_obj_dup(cF), e = tm[5], v = caml_check_bound(mons$0, e)[e + 1]; Stdlib_Buffer[16].call(null, buf, v); @@ -55660,8 +55688,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ([0, Sx_types[9], "clock-format: (seconds [format [tz]])"], 1); }); var - cJ = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], - cK = [0, 0, 0, 0, 1, 0, 70, 0, 0, 0]; + cL = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + cM = [0, 0, 0, 0, 1, 0, 70, 0, 0, 0]; register ("clock-scan", function(args){ @@ -55727,7 +55755,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } }, i = 0, - tm = cK; + tm = cM; for(;;){ if(i >= n) break; if(37 === caml_string_get(fmt, i) && (i + 1 | 0) < n){ @@ -55855,7 +55883,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = a; return b; }, - days_in_month = caml_obj_dup(cJ), + days_in_month = caml_obj_dup(cL), year = tm[6] + 1900 | 0, mon = tm[5], mday = tm[4], @@ -56084,7 +56112,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= args); return 0; }); - var cL = [0, 0]; + var cN = [0, 0]; register ("jit-excluded?", function(args){ @@ -56092,7 +56120,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[1]; if(typeof a !== "number" && a[0] - 3 >>> 0 < 2 && ! args[2]){var n = a[1]; return [0, Sx_types[49].call(null, n)];} } - return cL; + return cN; }); register ("jit-exclude-callers-of!", @@ -56223,7 +56251,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, Sx_types[9], "cid-from-sx: (value)"], 1); }); - var cM = [0, 0]; + var cO = [0, 0]; register ("ed25519-verify", function(args){ @@ -56248,9 +56276,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } } - return cM; + return cO; }); - var cN = [0, 0]; + var cP = [0, 0]; register ("rsa-sha256-verify", function(args){ @@ -56275,10 +56303,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } } - return cN; + return cP; }); runtime.caml_register_global - (1367, + (1369, [0, primitives, sx_call_fn, @@ -56320,7 +56348,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } (globalThis)); -//# 17916 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 17944 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_runtime:[F(2),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(2),F(3),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(3),F(3),F(2),F(2),F(1),F(1),F(3),F(2),F(2),F(1),F(1),F(2),F(1),F(1),F(1),F(2),F(2),F(3),F(1),F(1),F(2),F(1),F(2),F(1)*,F(1)*,F(1),F(2),F(2),F(3),F(3),F(1),F(1),F(2),F(2),F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1)*,F(1),F(1),F(2),F(1)*,F(2),F(1),F(1)*,F(2),F(1),F(1)*,F(1),F(1),F(4),F(2),F(1),F(1),F(2),F(2),F(1),N,F(2),N,N,F(1)*,F(1),F(2),F(2),F(2),F(1)*,F(2)*,F(1)*,F(1)*,F(2),F(4),F(2),F(2),F(2),F(2)*,F(1)*,N,N,N,N,F(1),N,F(1),F(1),F(2)] (function (globalThis){ @@ -57810,8 +57838,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } (globalThis)); -//# 19407 "../lib/.sx.objs/jsoo/default/sx.cma.js" -//# shape: Sx_ref:[N,F(1),N,N,N,N,F(1),F(3)*,F(3)*,F(3),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3)*,F(2)*,F(2)*,F(4)*,F(4)*,F(3)*,F(2)*,F(6)*,F(3)*,F(3)*,F(2)*,F(3)*,F(4)*,F(3),F(3),F(4)*,F(4)*,F(4)*,F(5)*,F(3)*,F(3)*,F(3)*,F(3)*,F(3)*,F(4)*,F(3)*,F(2)*,F(4)*,F(1)*,F(3)*,F(2)*,F(2)*,F(4)*,F(3)*,F(1)*,F(3)*,F(2)*,F(1)*,F(4)*,F(2)*,F(1),F(3)*,F(3)*,F(2)*,F(2)*,F(2)*,F(1)*,F(2)*,F(3)*,F(5)*,F(2),F(2),F(2),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(1),F(1),N,F(2),N,N,N,N,N,N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(2),N,F(2),F(1),F(1),F(1),N,F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(3),F(1),F(2),F(3),F(2),F(2),F(3),N,N,F(1),N,N,F(1),F(2),F(2),F(3),F(3),F(3),F(2),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(3),F(3),F(2),F(2),F(3),F(1),F(1),F(2),F(1),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(1),F(1),F(1),F(3),F(3),F(3),F(5),F(2),F(2),F(2),F(3),F(3),F(3),F(2),F(3),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(2),F(3),F(4),F(1),F(1)*,F(2),F(4),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(5),F(4),F(2),F(1),F(1)*,F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(2),F(2),F(2),F(2),F(2),F(1),F(1)] +//# 19435 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# shape: Sx_ref:[N,F(1),N,N,N,N,F(3)*,F(3)*,F(3),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3)*,F(2)*,F(2)*,F(4)*,F(4)*,F(3)*,F(2)*,F(6)*,F(3)*,F(3)*,F(2)*,F(3)*,F(4)*,F(3),F(3),F(4)*,F(4)*,F(4)*,F(5)*,F(3)*,F(3)*,F(3)*,F(3)*,F(3)*,F(4)*,F(3)*,F(2)*,F(4)*,F(1)*,F(3)*,F(2)*,F(2)*,F(4)*,F(3)*,F(1)*,F(3)*,F(2)*,F(1)*,F(4)*,F(2)*,F(1),F(3)*,F(3)*,F(2)*,F(2)*,F(2)*,F(1)*,F(2)*,F(3)*,F(5)*,F(2),F(2),F(2),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(1),F(1),N,F(2),N,N,N,N,N,N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(2),N,F(2),F(1),F(1),F(1),N,F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(3),F(1),F(2),F(3),F(2),F(2),F(3),N,N,F(1),N,N,F(1),F(2),F(2),F(3),F(3),F(3),F(2),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(2),F(2),F(3),F(1),F(1),F(2),F(1),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(3),F(3),F(5),F(2),F(2),F(2),F(3),F(3),F(3),F(2),F(3),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(1),F(3),F(3),F(1),F(1),F(4),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(2),F(3),F(4),F(1),F(1)*,F(2),F(1),F(4),F(1),F(1),F(1),F(2),F(2),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(5),F(4),F(2),F(1),F(1)*,F(2),N,F(1),F(1)*,F(1),F(1),F(1),F(1),F(2)] (function (globalThis){ "use strict"; @@ -57839,41 +57867,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_runtime = global_data.Sx_runtime, Sx_types = global_data.Sx_types, Stdlib_List = global_data.Stdlib__List, - Stdlib_String = global_data.Stdlib__String, Stdlib = global_data.Stdlib, Stdlib_Printf = global_data.Stdlib__Printf, Stdlib_Array = global_data.Stdlib__Array, + Stdlib_String = global_data.Stdlib__String, Sx_primitives = global_data.Sx_primitives, trampoline_fn = [0, function(v){return v;}]; function trampoline(v){return caml_call1(trampoline_fn[1], v);} var protocol_registry = [7, Stdlib_Hashtbl[1].call(null, 0, 0)], - b = [6, 0]; - function seq_to_list(v){ - if(typeof v === "number"){if(0 === v) return b;} - else - switch(v[0]){ - case 3: - var s = v[1], chars = [0, 0]; - Stdlib_String[30].call - (null, - function(c){ - var a = chars[1]; - chars[1] = [0, [3, Stdlib_String[1].call(null, 1, c)], a]; - return 0; - }, - s); - return [6, Stdlib_List[10].call(null, chars[1])]; - case 6: - return v; - case 21: - var items = v[1][1]; return [6, items]; - case 29: - var arr = v[1]; return [6, Stdlib_Array[10].call(null, arr)]; - } - return v; - } - var cst_eval = "eval"; + cst_eval = "eval"; function make_cek_state(control, env, kont){ return [22, [0, control, env, kont, cst_eval, 0]]; } @@ -57887,45 +57890,45 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_kont = "kont", cst_phase = "phase", cst_request = "request", - c = [3, cst_io_suspended]; + b = [3, cst_io_suspended]; function make_cek_suspended(request, env, kont){ var d = Stdlib_Hashtbl[1].call(null, 0, 4); Stdlib_Hashtbl[11].call(null, d, cst_env, env); Stdlib_Hashtbl[11].call(null, d, cst_kont, kont); - Stdlib_Hashtbl[11].call(null, d, cst_phase, c); + Stdlib_Hashtbl[11].call(null, d, cst_phase, b); Stdlib_Hashtbl[11].call(null, d, cst_request, request); return [7, d]; } var cst = "=", - d = [0, [3, cst_continue], 0], - e = [3, cst_phase], - f = [3, cst_kont]; + c = [0, [3, cst_continue], 0], + d = [3, cst_phase], + e = [3, cst_kont]; function cek_terminal_p(state){ var - a = [0, Sx_runtime[26].call(null, state, e), d], + a = [0, Sx_runtime[26].call(null, state, d), c], and = Sx_runtime[2].call(null, cst, a); if(! Sx_types[71].call(null, and)) return and; - var b = Sx_runtime[26].call(null, state, f); + var b = Sx_runtime[26].call(null, state, e); return Sx_runtime[34].call(null, b); } - var g = [0, [3, cst_io_suspended], 0], h = [3, cst_phase]; + var f = [0, [3, cst_io_suspended], 0], g = [3, cst_phase]; function cek_suspended_p(state){ - var a = [0, Sx_runtime[26].call(null, state, h), g]; + var a = [0, Sx_runtime[26].call(null, state, g), f]; return Sx_runtime[2].call(null, cst, a); } - var i = [3, "control"]; - function cek_control(s){return Sx_runtime[26].call(null, s, i);} - var j = [3, cst_env]; - function cek_env(s){return Sx_runtime[26].call(null, s, j);} - var k = [3, cst_kont]; - function cek_kont(s){return Sx_runtime[26].call(null, s, k);} - var l = [3, cst_phase]; - function cek_phase(s){return Sx_runtime[26].call(null, s, l);} - var m = [3, cst_request]; - function cek_io_request(s){return Sx_runtime[26].call(null, s, m);} - var cst_value = "value", n = [3, cst_value]; - function cek_value(s){return Sx_runtime[26].call(null, s, n);} + var h = [3, "control"]; + function cek_control(s){return Sx_runtime[26].call(null, s, h);} + var i = [3, cst_env]; + function cek_env(s){return Sx_runtime[26].call(null, s, i);} + var j = [3, cst_kont]; + function cek_kont(s){return Sx_runtime[26].call(null, s, j);} + var k = [3, cst_phase]; + function cek_phase(s){return Sx_runtime[26].call(null, s, k);} + var l = [3, cst_request]; + function cek_io_request(s){return Sx_runtime[26].call(null, s, l);} + var cst_value = "value", m = [3, cst_value]; + function cek_value(s){return Sx_runtime[26].call(null, s, m);} var cst_if = "if"; function make_if_frame(then_expr, else_expr, env){ return [23, [0, cst_if, env, else_expr, then_expr, 0, 0, 0, 0, 0, 0]]; @@ -58003,48 +58006,48 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_list = "list", cst_quote = "quote", - o = [0, [3, cst_list], 0], - p = [4, cst_quote], - q = [4, cst_quote]; + n = [0, [3, cst_list], 0], + o = [4, cst_quote], + p = [4, cst_quote]; function thread_insert_arg(form, value, fenv){ var - a = [0, Sx_runtime[74].call(null, form), o], + a = [0, Sx_runtime[74].call(null, form), n], b = Sx_runtime[2].call(null, cst, a); if(! Sx_types[71].call(null, b)) return eval_expr - ([6, [0, form, [0, [6, [0, q, [0, value, 0]]], 0]]], fenv); + ([6, [0, form, [0, [6, [0, p, [0, value, 0]]], 0]]], fenv); var c = Sx_runtime[16].call(null, form), - d = Sx_runtime[19].call(null, [6, [0, p, [0, value, 0]]], c), + d = Sx_runtime[19].call(null, [6, [0, o, [0, value, 0]]], c), e = Sx_runtime[15].call(null, form); return eval_expr(Sx_runtime[19].call(null, e, d), fenv); } var cst_append = "append", - r = [0, [3, cst_list], 0], - s = [4, cst_quote], - t = [4, cst_quote]; + q = [0, [3, cst_list], 0], + r = [4, cst_quote], + s = [4, cst_quote]; function thread_insert_arg_last(form, value, fenv){ var - a = [0, Sx_runtime[74].call(null, form), r], + a = [0, Sx_runtime[74].call(null, form), q], b = Sx_runtime[2].call(null, cst, a); return Sx_types[71].call(null, b) ? eval_expr (Sx_runtime[2].call (null, cst_append, - [0, form, [0, [6, [0, [6, [0, s, [0, value, 0]]], 0]], 0]]), + [0, form, [0, [6, [0, [6, [0, r, [0, value, 0]]], 0]], 0]]), fenv) : eval_expr - ([6, [0, form, [0, [6, [0, t, [0, value, 0]]], 0]]], fenv); + ([6, [0, form, [0, [6, [0, s, [0, value, 0]]], 0]]], fenv); } - var cst_map = "map", u = [0, 0]; + var cst_map = "map", t = [0, 0]; function make_map_frame(f, remaining, results, env){ - return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, u, 0]]; + return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, t, 0]]; } - var v = [0, 1]; + var u = [0, 1]; function make_map_indexed_frame(f, remaining, results, env){ - return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, v, 0]]; + return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, u, 0]]; } var cst_multi_map = "multi-map"; function make_multi_map_frame(f, remaining_lists, results, env){ @@ -58096,9 +58099,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function make_scope_frame(name, remaining, env){ return [23, [0, cst_scope, env, name, 0, remaining, 0, 0, 0, 0, 0]]; } - var cst_provide = "provide", w = [6, 0]; + var cst_provide = "provide", v = [6, 0]; function make_provide_frame(name, value, remaining, env){ - return [23, [0, cst_provide, env, name, 0, remaining, 0, 0, w, value, 0]]; + return [23, [0, cst_provide, env, name, 0, remaining, 0, 0, v, value, 0]]; } var cst_bind = "bind"; function make_bind_frame(body, env, prev_tracking){ @@ -58108,11 +58111,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function make_provide_set_frame(name, env){ return [23, [0, cst_provide_set, env, name, 0, 0, 0, 0, 0, 0, 0]]; } - var cst_scope_acc = "scope-acc", x = [6, 0]; + var cst_scope_acc = "scope-acc", w = [6, 0]; function make_scope_acc_frame(name, value, remaining, env){ var value$0 = Sx_types[71].call(null, value) ? value : 0; return [23, - [0, cst_scope_acc, env, name, 0, remaining, 0, 0, 0, value$0, x]]; + [0, cst_scope_acc, env, name, 0, remaining, 0, 0, 0, value$0, w]]; } var cst_reset = "reset"; function make_reset_frame(env){ @@ -58199,26 +58202,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_file = "file", cst_name = "name", - y = [6, 0], - z = [0, [3, cst_comp_trace], 0], - A = [3, cst_file], - B = [3, cst_name]; + x = [6, 0], + y = [0, [3, cst_comp_trace], 0], + z = [3, cst_file], + A = [3, cst_name]; function kont_collect_comp_trace(kont$1){ var kont = kont$1; for(;;){ var a = Sx_runtime[34].call(null, kont); - if(Sx_types[71].call(null, a)) return y; + if(Sx_types[71].call(null, a)) return x; var frame = Sx_runtime[15].call(null, kont), - b = [0, frame_type(frame), z], + b = [0, frame_type(frame), y], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)){ var e = kont_collect_comp_trace(Sx_runtime[16].call(null, kont)), d = Stdlib_Hashtbl[1].call(null, 0, 2), - f = Sx_runtime[26].call(null, frame, A); + f = Sx_runtime[26].call(null, frame, z); Stdlib_Hashtbl[11].call(null, d, cst_file, f); - var g = Sx_runtime[26].call(null, frame, B); + var g = Sx_runtime[26].call(null, frame, A); Stdlib_Hashtbl[11].call(null, d, cst_name, g); return Sx_runtime[19].call(null, [7, d], e); } @@ -58275,7 +58278,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= 0, 0]]; } - var C = [2, 1.]; + var B = [2, 1.]; function find_matching_handler(handlers$1, condition){ var handlers = handlers$1; for(;;){ @@ -58284,14 +58287,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var pair = Sx_runtime[15].call(null, handlers), pred = Sx_runtime[15].call(null, pair), - handler_fn = Sx_runtime[18].call(null, pair, C), + handler_fn = Sx_runtime[18].call(null, pair, B), b = cek_call(pred, [6, [0, condition, 0]]); if(Sx_types[71].call(null, b)) return handler_fn; var handlers$0 = Sx_runtime[16].call(null, handlers); handlers = handlers$0; } } - var cst_f = "f", D = [0, [3, cst_handler], 0], E = [3, cst_f]; + var cst_f = "f", C = [0, [3, cst_handler], 0], D = [3, cst_f]; function kont_find_handler(kont$2, condition){ var kont = kont$2; for(;;){ @@ -58299,12 +58302,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)) return 0; var frame = Sx_runtime[15].call(null, kont), - b = [0, frame_type(frame), D], + b = [0, frame_type(frame), C], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)){ var match = - find_matching_handler(Sx_runtime[26].call(null, frame, E), condition), + find_matching_handler(Sx_runtime[26].call(null, frame, D), condition), d = Sx_runtime[84].call(null, match); if(! Sx_types[71].call(null, d)) return match; var kont$0 = Sx_runtime[16].call(null, kont); @@ -58318,12 +58321,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_after_thunk = "after-thunk", cst_winders_len = "winders-len", winders_ref = [], - F = [0, [3, cst_handler], 0], - G = [3, cst_f], - H = [0, [3, cst_wind_after], 0], - I = [3, cst_winders_len], - J = [6, 0], - K = [3, cst_after_thunk]; + E = [0, [3, cst_handler], 0], + F = [3, cst_f], + G = [0, [3, cst_wind_after], 0], + H = [3, cst_winders_len], + I = [6, 0], + J = [3, cst_after_thunk]; function kont_unwind_to_handler(kont$0, condition){ var kont = kont$0; for(;;){ @@ -58337,12 +58340,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var frame = Sx_runtime[15].call(null, kont), rest_k = Sx_runtime[16].call(null, kont), - b = [0, frame_type(frame), F], + b = [0, frame_type(frame), E], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)){ var match = - find_matching_handler(Sx_runtime[26].call(null, frame, G), condition), + find_matching_handler(Sx_runtime[26].call(null, frame, F), condition), e = Sx_runtime[84].call(null, match); if(! Sx_types[71].call(null, e)){ var d$0 = Stdlib_Hashtbl[1].call(null, 0, 2); @@ -58353,15 +58356,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont = rest_k; } else{ - var f = [0, frame_type(frame), H], g = Sx_runtime[2].call(null, cst, f); + var f = [0, frame_type(frame), G], g = Sx_runtime[2].call(null, cst, f); if(Sx_types[71].call(null, g)){ var - h = [0, Sx_runtime[26].call(null, frame, I), 0], + h = [0, Sx_runtime[26].call(null, frame, H), 0], i = [0, Sx_runtime[25].call(null, winders_ref[1]), h], j = Sx_runtime[2].call(null, cst$0, i); if(Sx_types[71].call(null, j)) winders_ref[1] = Sx_runtime[16].call(null, winders_ref[1]); - cek_call(Sx_runtime[26].call(null, frame, K), J); + cek_call(Sx_runtime[26].call(null, frame, J), I); kont = rest_k; } else @@ -58369,7 +58372,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } } - var L = [6, 0]; + var K = [6, 0]; function wind_escape_to(target_len){ for(;;){ var @@ -58378,7 +58381,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(! Sx_types[71].call(null, b)) return 0; var after_thunk = Sx_runtime[15].call(null, winders_ref[1]); winders_ref[1] = Sx_runtime[16].call(null, winders_ref[1]); - cek_call(after_thunk, L); + cek_call(after_thunk, K); } } function find_named_restart(restarts$1, name){ @@ -58395,7 +58398,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= restarts = restarts$0; } } - var M = [0, [3, cst_restart], 0], N = [3, cst_f]; + var L = [0, [3, cst_restart], 0], M = [3, cst_f]; function kont_find_restart(kont$2, name){ var kont = kont$2; for(;;){ @@ -58403,11 +58406,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)) return 0; var frame = Sx_runtime[15].call(null, kont), - b = [0, frame_type(frame), M], + b = [0, frame_type(frame), L], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)){ var - match = find_named_restart(Sx_runtime[26].call(null, frame, N), name), + match = find_named_restart(Sx_runtime[26].call(null, frame, M), name), d = Sx_runtime[84].call(null, match); if(! Sx_types[71].call(null, d)) return [6, @@ -58418,8 +58421,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else{var kont$1 = Sx_runtime[16].call(null, kont); kont = kont$1;} } } - var cst_type = "type", O = [3, cst_type]; - function frame_type(f){return Sx_runtime[26].call(null, f, O);} + var cst_type = "type", N = [3, cst_type]; + function frame_type(f){return Sx_runtime[26].call(null, f, N);} function kont_push(frame, kont){ return Sx_runtime[19].call(null, frame, kont); } @@ -58428,26 +58431,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function kont_empty_p(kont){return Sx_runtime[34].call(null, kont);} var captured = [6, 0], - P = [3, "shift without enclosing reset"], - Q = [0, [3, cst_reset], 0], - R = [0, [3, cst_reactive_reset], 0]; + O = [3, "shift without enclosing reset"], + P = [0, [3, cst_reset], 0], + Q = [0, [3, cst_reactive_reset], 0]; function kont_capture_to_reset(kont){ var k = kont, captured$0 = captured; for(;;){ var a = Sx_runtime[34].call(null, k); if(Sx_types[71].call(null, a)){ - var b = Sx_runtime[3].call(null, P); + var b = Sx_runtime[3].call(null, O); throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1); } var frame = Sx_runtime[15].call(null, k), - c = [0, frame_type(frame), Q], + c = [0, frame_type(frame), P], or = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, or)) var or$0 = or; else var - d = [0, frame_type(frame), R], + d = [0, frame_type(frame), Q], or$0 = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, or$0)) return [6, [0, captured$0, [0, Sx_runtime[16].call(null, k), 0]]]; @@ -58460,7 +58463,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= captured$0 = captured$1; } } - var S = [6, 0], T = [2, 1.]; + var R = [6, 0], S = [2, 1.]; function kont_push_provides(pairs$1, env, kont$1){ var pairs = pairs$1, kont = kont$1; for(;;){ @@ -58468,15 +58471,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)) return kont; var pair = Sx_runtime[15].call(null, pairs), - b = Sx_runtime[18].call(null, pair, T), - c = make_provide_frame(Sx_runtime[15].call(null, pair), b, S, env), + b = Sx_runtime[18].call(null, pair, S), + c = make_provide_frame(Sx_runtime[15].call(null, pair), b, R, env), kont$0 = Sx_runtime[19].call(null, c, kont), pairs$0 = Sx_runtime[16].call(null, pairs); pairs = pairs$0; kont = kont$0; } } - var U = [0, [3, cst_provide], 0], V = [3, cst_name]; + var T = [0, [3, cst_provide], 0], U = [3, cst_name]; function kont_find_provide(kont$1, name){ var kont = kont$1; for(;;){ @@ -58484,11 +58487,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, b)) return 0; var frame = Sx_runtime[15].call(null, kont), - c = [0, frame_type(frame), U], + c = [0, frame_type(frame), T], and = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, and)) var - d = [0, Sx_runtime[26].call(null, frame, V), [0, name, 0]], + d = [0, Sx_runtime[26].call(null, frame, U), [0, name, 0]], a = Sx_runtime[2].call(null, cst, d); else var a = and; @@ -58497,7 +58500,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont = kont$0; } } - var W = [0, [3, cst_scope_acc], 0], X = [3, cst_name]; + var V = [0, [3, cst_scope_acc], 0], W = [3, cst_name]; function kont_find_scope_acc(kont$1, name){ var kont = kont$1; for(;;){ @@ -58505,11 +58508,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, b)) return 0; var frame = Sx_runtime[15].call(null, kont), - c = [0, frame_type(frame), W], + c = [0, frame_type(frame), V], and = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, and)) var - d = [0, Sx_runtime[26].call(null, frame, X), [0, name, 0]], + d = [0, Sx_runtime[26].call(null, frame, W), [0, name, 0]], a = Sx_runtime[2].call(null, cst, d); else var a = and; @@ -58518,35 +58521,35 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont = kont$0; } } - var Y = [0, 0], Z = [0, [3, cst_reactive_reset], 0], _ = [0, 1]; + var X = [0, 0], Y = [0, [3, cst_reactive_reset], 0], Z = [0, 1]; function has_reactive_reset_frame_p(kont$1){ var kont = kont$1; for(;;){ var a = Sx_runtime[34].call(null, kont); - if(Sx_types[71].call(null, a)) return Y; + if(Sx_types[71].call(null, a)) return X; var - b = [0, frame_type(Sx_runtime[15].call(null, kont)), Z], + b = [0, frame_type(Sx_runtime[15].call(null, kont)), Y], c = Sx_runtime[2].call(null, cst, b); - if(Sx_types[71].call(null, c)) return _; + if(Sx_types[71].call(null, c)) return Z; var kont$0 = Sx_runtime[16].call(null, kont); kont = kont$0; } } var captured$0 = [6, 0], - $ = [3, "reactive deref without enclosing reactive-reset"], - aa = [0, [3, cst_reactive_reset], 0]; + _ = [3, "reactive deref without enclosing reactive-reset"], + $ = [0, [3, cst_reactive_reset], 0]; function kont_capture_to_reactive_reset(kont){ var k = kont, captured = captured$0; for(;;){ var a = Sx_runtime[34].call(null, k); if(Sx_types[71].call(null, a)){ - var b = Sx_runtime[3].call(null, $); + var b = Sx_runtime[3].call(null, _); throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1); } var frame = Sx_runtime[15].call(null, k), - c = [0, frame_type(frame), aa], + c = [0, frame_type(frame), $], d = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, d)) return [6, @@ -58564,13 +58567,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function register_special_form(name, handler){ return Sx_runtime[12].call(null, custom_special_forms, name, handler); } - var cst$1 = ".", cst_join = "join", ab = [3, cst$1]; + var cst$1 = ".", cst_join = "join", aa = [3, cst$1]; function library_name_key(spec){ var a = Sx_runtime[6].call(null, spec), b = [0, - ab, + aa, [0, [6, Stdlib_List[20].call @@ -58590,13 +58593,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = [0, library_registry, [0, library_name_key(spec), 0]]; return Sx_runtime[2].call(null, cst_has_key, a); } - var cst_exports = "exports", ac = [3, cst_exports]; + var cst_exports = "exports", ab = [3, cst_exports]; function library_exports(spec){ var a = library_name_key(spec), entry = Sx_runtime[26].call(null, library_registry, a); return Sx_types[71].call(null, entry) - ? Sx_runtime[26].call(null, entry, ac) + ? Sx_runtime[26].call(null, entry, ab) : [7, Stdlib_Hashtbl[1].call(null, 0, 0)]; } function register_library(spec, exports){ @@ -58634,14 +58637,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function foreign_names(param){ return Sx_runtime[2].call(null, cst_keys, [0, foreign_registry, 0]); } - var result = [6, 0], ad = [6, 0]; + var result = [6, 0], ac = [6, 0]; function foreign_parse_params(param_list){ var a = Sx_runtime[38].call(null, param_list), - items = Sx_types[71].call(null, a) ? param_list : ad; + items = Sx_types[71].call(null, a) ? param_list : ac; return foreign_parse_params_loop(items, result); } - var cst$2 = ">=", ae = [0, [2, 2.], 0], af = [2, 1.]; + var cst$2 = ">=", ad = [0, [2, 2.], 0], ae = [2, 1.]; function foreign_parse_kwargs_b(spec, remaining$1){ var remaining = remaining$1; for(;;){ @@ -58650,7 +58653,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and = [0, 1 - Sx_types[71].call(null, b)]; if(Sx_types[71].call(null, and)){ var - c = [0, Sx_runtime[25].call(null, remaining), ae], + c = [0, Sx_runtime[25].call(null, remaining), ad], and$0 = Sx_runtime[2].call(null, cst$2, c); if(Sx_types[71].call(null, and$0)) var @@ -58663,7 +58666,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(! Sx_types[71].call(null, a)) return 0; var - v = Sx_runtime[18].call(null, remaining, af), + v = Sx_runtime[18].call(null, remaining, ae), e = Sx_runtime[33].call(null, v), f = Sx_types[71].call(null, e) ? Sx_types[73].call(null, v) : v, g = Sx_runtime[15].call(null, remaining), @@ -58678,13 +58681,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_method = "method", cst_object = "object", - ag = [0, [3, cst$1], 0], - ah = [0, [2, 1.], 0], - ai = [3, cst$1]; + af = [0, [3, cst$1], 0], + ag = [0, [2, 1.], 0], + ah = [3, cst$1]; function foreign_resolve_binding(binding_str){ var - parts = Sx_runtime[2].call(null, "split", [0, binding_str, ag]), - a = [0, Sx_runtime[25].call(null, parts), ah], + parts = Sx_runtime[2].call(null, "split", [0, binding_str, af]), + a = [0, Sx_runtime[25].call(null, parts), ag], b = Sx_runtime[2].call(null, "<=", a); if(Sx_types[71].call(null, b)){ var d = Stdlib_Hashtbl[1].call(null, 0, 2); @@ -58696,7 +58699,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= method = Sx_runtime[17].call(null, parts), c = Sx_runtime[21].call(null, parts), e = Sx_runtime[16].call(null, c), - f = [0, ai, [0, Sx_runtime[21].call(null, e), 0]], + f = [0, ah, [0, Sx_runtime[21].call(null, e), 0]], obj = Sx_runtime[2].call(null, cst_join, f), d$0 = Stdlib_Hashtbl[1].call(null, 0, 2); Stdlib_Hashtbl[11].call(null, d$0, cst_method, method); @@ -58711,17 +58714,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_any = "any", cst_foreign = "foreign ", cst_range = "range", - aj = [3, cst_args_got], - ak = [3, cst_expected], - al = [3, cst_foreign], - am = [2, 0.], - an = [3, cst_type], - ao = [0, [3, cst_any], 0], - ap = [3, cst_got], - aq = [3, "' expected "], - ar = [3, cst_name], - as = [3, ": arg '"], - at = [3, cst_foreign]; + ai = [3, cst_args_got], + aj = [3, cst_expected], + ak = [3, cst_foreign], + al = [2, 0.], + am = [3, cst_type], + an = [0, [3, cst_any], 0], + ao = [3, cst_got], + ap = [3, "' expected "], + aq = [3, cst_name], + ar = [3, ": arg '"], + as = [3, cst_foreign]; function foreign_check_args(name, params, args){ var b = Sx_runtime[34].call(null, params), @@ -58735,9 +58738,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(Sx_types[71].call(null, a)){ var - e = [0, aj, [0, Sx_runtime[25].call(null, args), 0]], + e = [0, ai, [0, Sx_runtime[25].call(null, args), 0]], f = - [0, al, [0, name, [0, ak, [0, Sx_runtime[25].call(null, params), e]]]], + [0, ak, [0, name, [0, aj, [0, Sx_runtime[25].call(null, params), e]]]], g = [3, Sx_runtime[5].call(null, f)], h = Sx_runtime[3].call(null, g); throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1); @@ -58745,7 +58748,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var i = [0, Sx_runtime[25].call(null, args), 0], j = [0, Sx_runtime[25].call(null, params), i], - k = [0, am, [0, Sx_runtime[2].call(null, "min", j), 0]], + k = [0, al, [0, Sx_runtime[2].call(null, "min", j), 0]], l = Sx_runtime[2].call(null, cst_range, k), m = Sx_runtime[6].call(null, l); Stdlib_List[18].call @@ -58754,8 +58757,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var spec = Sx_runtime[18].call(null, params, i), val = Sx_runtime[18].call(null, args, i), - expected = Sx_runtime[26].call(null, spec, an), - b = Sx_runtime[2].call(null, cst, [0, expected, ao]), + expected = Sx_runtime[26].call(null, spec, am), + b = Sx_runtime[2].call(null, cst, [0, expected, an]), and = [0, 1 - Sx_types[71].call(null, b)]; if(Sx_types[71].call(null, and)) var @@ -58767,12 +58770,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var d = [0, - aq, - [0, expected, [0, ap, [0, Sx_runtime[74].call(null, val), 0]]]], + ap, + [0, expected, [0, ao, [0, Sx_runtime[74].call(null, val), 0]]]], e = [0, - at, - [0, name, [0, as, [0, Sx_runtime[26].call(null, spec, ar), d]]]], + as, + [0, name, [0, ar, [0, Sx_runtime[26].call(null, spec, aq), d]]]], f = [3, Sx_runtime[5].call(null, e)], g = Sx_runtime[3].call(null, f); throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1); @@ -58788,61 +58791,61 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_foreign_dispatch = "foreign-dispatch", cst_returns = "returns", cst_sync = "sync", - au = [3, cst_name], - av = [0, [3, cst_returns], 0], - aw = [3, cst_returns], - ax = [0, [3, "promise"], 0], - ay = [3, cst_async], - az = [0, [3, cst_async], 0], - aA = [0, [4, cst_ffi_args], 0], - aB = [4, cst_quote], - aC = [4, cst_foreign_dispatch], - aD = [4, cst_perform], - aE = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]], - aF = [4, cst_fn], - aG = [0, [4, cst_ffi_args], 0], - aH = [4, cst_quote], - aI = [4, cst_foreign_dispatch], - aJ = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]], - aK = [4, cst_fn], - aL = [3, cst_sync], - aM = [3, cst_sync]; + at = [3, cst_name], + au = [0, [3, cst_returns], 0], + av = [3, cst_returns], + aw = [0, [3, "promise"], 0], + ax = [3, cst_async], + ay = [0, [3, cst_async], 0], + az = [0, [4, cst_ffi_args], 0], + aA = [4, cst_quote], + aB = [4, cst_foreign_dispatch], + aC = [4, cst_perform], + aD = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]], + aE = [4, cst_fn], + aF = [0, [4, cst_ffi_args], 0], + aG = [4, cst_quote], + aH = [4, cst_foreign_dispatch], + aI = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]], + aJ = [4, cst_fn], + aK = [3, cst_sync], + aL = [3, cst_sync]; function foreign_build_lambda(spec){ var - name = Sx_runtime[26].call(null, spec, au), - a = Sx_runtime[2].call(null, cst_has_key, [0, spec, av]); + name = Sx_runtime[26].call(null, spec, at), + a = Sx_runtime[2].call(null, cst_has_key, [0, spec, au]); if(Sx_types[71].call(null, a)) var - r = Sx_runtime[26].call(null, spec, aw), - b = Sx_runtime[2].call(null, cst, [0, r, ax]), - mode = Sx_types[71].call(null, b) ? ay : aL; + r = Sx_runtime[26].call(null, spec, av), + b = Sx_runtime[2].call(null, cst, [0, r, aw]), + mode = Sx_types[71].call(null, b) ? ax : aK; else - var mode = aM; - var c = Sx_runtime[2].call(null, cst, [0, mode, az]); + var mode = aL; + var c = Sx_runtime[2].call(null, cst, [0, mode, ay]); return Sx_types[71].call(null, c) ? [6, [0, - aF, + aE, [0, - aE, + aD, [0, [6, [0, - aD, - [0, [6, [0, aC, [0, [6, [0, aB, [0, name, 0]]], aA]]], 0]]], + aC, + [0, [6, [0, aB, [0, [6, [0, aA, [0, name, 0]]], az]]], 0]]], 0]]]] : [6, [0, - aK, + aJ, [0, - aJ, - [0, [6, [0, aI, [0, [6, [0, aH, [0, name, 0]]], aG]]], 0]]]]; + aI, + [0, [6, [0, aH, [0, [6, [0, aG, [0, name, 0]]], aF]]], 0]]]]; } var cst_params = "params", - aN = [2, 1.], - aO = [3, cst_name], - aP = [3, cst_params]; + aM = [2, 1.], + aN = [3, cst_name], + aO = [3, cst_params]; function sf_define_foreign(args, env){ var a = Sx_runtime[15].call(null, args), b = Sx_runtime[40].call(null, a); if(Sx_types[71].call(null, b)) @@ -58852,11 +58855,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else var name = Sx_runtime[15].call(null, args); var - param_list = Sx_runtime[18].call(null, args, aN), + param_list = Sx_runtime[18].call(null, args, aM), spec = [7, Stdlib_Hashtbl[1].call(null, 0, 0)]; - Sx_runtime[12].call(null, spec, aO, name); + Sx_runtime[12].call(null, spec, aN, name); var d = foreign_parse_params(param_list); - Sx_runtime[12].call(null, spec, aP, d); + Sx_runtime[12].call(null, spec, aO, d); var e = Sx_runtime[16].call(null, args); foreign_parse_kwargs_b(spec, Sx_runtime[16].call(null, e)); foreign_register_b(name, spec); @@ -58882,50 +58885,50 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_concat = "concat", cst_host_call = "host-call", - aQ = [0, [3, "'"], 0], - aR = [3, "foreign-dispatch: unknown foreign function '"], - aS = [3, cst_params], - aT = [3, "js"], - aU = [6, 0], - aV = [0, [3, ": no binding for current platform"], 0], - aW = [3, cst_foreign], - aX = [3, cst_object], - aY = [3, cst_method], + aP = [0, [3, "'"], 0], + aQ = [3, "foreign-dispatch: unknown foreign function '"], + aR = [3, cst_params], + aS = [3, "js"], + aT = [6, 0], + aU = [0, [3, ": no binding for current platform"], 0], + aV = [3, cst_foreign], + aW = [3, cst_object], + aX = [3, cst_method], + aY = [3, cst_host_call], aZ = [3, cst_host_call], - a0 = [3, cst_host_call], - a1 = [3, "host-global"], - a2 = [3, cst_host_call], - a3 = [0, [3, ": host-call not available on this platform"], 0], - a4 = [3, cst_foreign]; + a0 = [3, "host-global"], + a1 = [3, cst_host_call], + a2 = [0, [3, ": host-call not available on this platform"], 0], + a3 = [3, cst_foreign]; function foreign_dispatch(name, args){ var spec = foreign_lookup(name), a = Sx_runtime[84].call(null, spec); if(Sx_types[71].call(null, a)){ var - b = [3, Sx_runtime[5].call(null, [0, aR, [0, name, aQ]])], + b = [3, Sx_runtime[5].call(null, [0, aQ, [0, name, aP]])], c = Sx_runtime[3].call(null, b); throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1); } var - params = Sx_runtime[26].call(null, spec, aS), - binding = Sx_runtime[26].call(null, spec, aT), + params = Sx_runtime[26].call(null, spec, aR), + binding = Sx_runtime[26].call(null, spec, aS), d = Sx_runtime[84].call(null, params), - e = Sx_types[71].call(null, d) ? aU : params; + e = Sx_types[71].call(null, d) ? aT : params; foreign_check_args(name, e, args); var f = Sx_runtime[84].call(null, binding); if(Sx_types[71].call(null, f)){ var - g = [3, Sx_runtime[5].call(null, [0, aW, [0, name, aV]])], + g = [3, Sx_runtime[5].call(null, [0, aV, [0, name, aU]])], h = Sx_runtime[3].call(null, g); throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1); } var resolved = foreign_resolve_binding(binding), - obj_name = Sx_runtime[26].call(null, resolved, aX), - method = Sx_runtime[26].call(null, resolved, aY), - i = Sx_runtime[92].call(null, aZ); + obj_name = Sx_runtime[26].call(null, resolved, aW), + method = Sx_runtime[26].call(null, resolved, aX), + i = Sx_runtime[92].call(null, aY); if(! Sx_types[71].call(null, i)){ var - o = [3, Sx_runtime[5].call(null, [0, a4, [0, name, a3]])], + o = [3, Sx_runtime[5].call(null, [0, a3, [0, name, a2]])], p = Sx_runtime[3].call(null, o); throw caml_maybe_attach_backtrace([0, Sx_types[9], p], 1); } @@ -58935,22 +58938,22 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= k = Sx_runtime[2].call (null, cst_concat, [0, [6, [0, 0, [0, method, 0]]], [0, args, 0]]), - l = Sx_runtime[93].call(null, a0); + l = Sx_runtime[93].call(null, aZ); return Sx_runtime[8].call(null, l, k); } var - obj = cek_call(Sx_runtime[93].call(null, a1), [6, [0, obj_name, 0]]), + obj = cek_call(Sx_runtime[93].call(null, a0), [6, [0, obj_name, 0]]), m = Sx_runtime[2].call (null, cst_concat, [0, [6, [0, obj, [0, method, 0]]], [0, args, 0]]), - n = Sx_runtime[93].call(null, a2); + n = Sx_runtime[93].call(null, a1); return Sx_runtime[8].call(null, n, m); } var cst_as = "as", - a5 = [0, [3, cst_as], 0], - a6 = [0, [2, 2.], 0], - a7 = [2, 1.]; + a4 = [0, [3, cst_as], 0], + a5 = [0, [2, 2.], 0], + a6 = [2, 1.]; function foreign_parse_params_loop(items$1, acc$2){ var items = items$1, acc = acc$2; for(;;){ @@ -58968,11 +58971,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, and$0)){ var f = Sx_runtime[15].call(null, rest_items), - g = [0, Sx_types[73].call(null, f), a5], + g = [0, Sx_types[73].call(null, f), a4], and$1 = Sx_runtime[2].call(null, cst, g); if(Sx_types[71].call(null, and$1)) var - h = [0, Sx_runtime[25].call(null, rest_items), a6], + h = [0, Sx_runtime[25].call(null, rest_items), a5], a = Sx_runtime[2].call(null, cst$2, h); else var a = and$1; @@ -58985,20 +58988,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)){ var d = Stdlib_Hashtbl[1].call(null, 0, 2), - t = Sx_runtime[18].call(null, rest_items, a7), - i = Sx_runtime[33].call(null, t), + i = Sx_runtime[40].call(null, item), j = Sx_types[71].call(null, i) - ? Sx_types[73].call(null, t) - : [3, Sx_runtime[5].call(null, [0, t, 0])]; - Stdlib_Hashtbl[11].call(null, d, cst_type, j); - var - k = Sx_runtime[40].call(null, item), - l = - Sx_types[71].call(null, k) ? Sx_types[72].call(null, item) : [3, Sx_runtime[5].call(null, [0, item, 0])]; - Stdlib_Hashtbl[11].call(null, d, cst_name, l); + Stdlib_Hashtbl[11].call(null, d, cst_name, j); + var + t = Sx_runtime[18].call(null, rest_items, a6), + k = Sx_runtime[33].call(null, t), + l = + Sx_types[71].call(null, k) + ? Sx_types[73].call(null, t) + : [3, Sx_runtime[5].call(null, [0, t, 0])]; + Stdlib_Hashtbl[11].call(null, d, cst_type, l); var acc$0 = Sx_runtime[2].call @@ -59030,9 +59033,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cst_args = "args", cst_op = "op", - a8 = [0, [3, "' \xe2\x80\x94 not in *io-registry*"], 0], - a9 = [3, "io: unknown operation '"], - a_ = [4, cst_perform]; + a7 = [0, [3, "' \xe2\x80\x94 not in *io-registry*"], 0], + a8 = [3, "io: unknown operation '"], + a9 = [4, cst_perform]; function step_sf_io(args, env, kont){ var name = Sx_runtime[15].call(null, args), @@ -59041,7 +59044,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= b = [0, 1 - Sx_types[71].call(null, a)]; if(Sx_types[71].call(null, b)){ var - c = [3, Sx_runtime[5].call(null, [0, a9, [0, name, a8]])], + c = [3, Sx_runtime[5].call(null, [0, a8, [0, name, a7]])], e = Sx_runtime[3].call(null, c); throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1); } @@ -59049,7 +59052,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_Hashtbl[11].call(null, d, cst_args, io_args); Stdlib_Hashtbl[11].call(null, d, cst_op, name); return make_cek_state - (Sx_runtime[19].call(null, a_, [6, [0, [7, d], 0]]), env, kont); + (Sx_runtime[19].call(null, a9, [6, [0, [7, d], 0]]), env, kont); } var strict_ref = []; function set_strict_b(val){strict_ref[1] = val; return 0;} @@ -59070,70 +59073,70 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_slice = "slice", cst_string = "string", cst_symbol = "symbol", - a$ = [0, [3, cst_any], 0], - ba = [0, 1], - bb = [0, [3, cst_number], 0], - bc = [0, [3, cst_string], 0], - bd = [0, [3, cst_boolean], 0], - be = [0, [3, cst_nil], 0], - bf = [0, [3, cst_list], 0], - bg = [0, [3, cst_dict], 0], - bh = [0, [3, cst_lambda], 0], + a_ = [0, [3, cst_any], 0], + a$ = [0, 1], + ba = [0, [3, cst_number], 0], + bb = [0, [3, cst_string], 0], + bc = [0, [3, cst_boolean], 0], + bd = [0, [3, cst_nil], 0], + be = [0, [3, cst_list], 0], + bf = [0, [3, cst_dict], 0], + bg = [0, [3, cst_lambda], 0], + bh = [0, [3, cst_symbol], 0], bi = [0, [3, cst_symbol], 0], - bj = [0, [3, cst_symbol], 0], + bj = [0, [3, cst_keyword], 0], bk = [0, [3, cst_keyword], 0], - bl = [0, [3, cst_keyword], 0], - bm = [0, [3, cst$4], 0], - bn = [0, [2, 1.], 0], - bo = [2, 0.], - bp = [0, 1]; + bl = [0, [3, cst$4], 0], + bm = [0, [2, 1.], 0], + bn = [2, 0.], + bo = [0, 1]; function value_matches_type_p(val, expected_type$1){ var expected_type = expected_type$1; for(;;){ - var a = Sx_runtime[2].call(null, cst, [0, expected_type, a$]); - if(Sx_types[71].call(null, a)) return ba; - var b = Sx_runtime[2].call(null, cst, [0, expected_type, bb]); + var a = Sx_runtime[2].call(null, cst, [0, expected_type, a_]); + if(Sx_types[71].call(null, a)) return a$; + var b = Sx_runtime[2].call(null, cst, [0, expected_type, ba]); if(Sx_types[71].call(null, b)) return Sx_runtime[35].call(null, val); - var c = Sx_runtime[2].call(null, cst, [0, expected_type, bc]); + var c = Sx_runtime[2].call(null, cst, [0, expected_type, bb]); if(Sx_types[71].call(null, c)) return Sx_runtime[36].call(null, val); - var d = Sx_runtime[2].call(null, cst, [0, expected_type, bd]); + var d = Sx_runtime[2].call(null, cst, [0, expected_type, bc]); if(Sx_types[71].call(null, d)) return Sx_runtime[37].call(null, val); - var e = Sx_runtime[2].call(null, cst, [0, expected_type, be]); + var e = Sx_runtime[2].call(null, cst, [0, expected_type, bd]); if(Sx_types[71].call(null, e)) return Sx_runtime[84].call(null, val); - var f = Sx_runtime[2].call(null, cst, [0, expected_type, bf]); + var f = Sx_runtime[2].call(null, cst, [0, expected_type, be]); if(Sx_types[71].call(null, f)) return Sx_runtime[38].call(null, val); - var g = Sx_runtime[2].call(null, cst, [0, expected_type, bg]); + var g = Sx_runtime[2].call(null, cst, [0, expected_type, bf]); if(Sx_types[71].call(null, g)) return Sx_runtime[39].call(null, val); - var h = Sx_runtime[2].call(null, cst, [0, expected_type, bh]); + var h = Sx_runtime[2].call(null, cst, [0, expected_type, bg]); if(Sx_types[71].call(null, h)) return Sx_runtime[86].call(null, val); - var i = Sx_runtime[2].call(null, cst, [0, expected_type, bi]); + var i = Sx_runtime[2].call(null, cst, [0, expected_type, bh]); if(Sx_types[71].call(null, i)){ - var j = [0, Sx_runtime[74].call(null, val), bj]; + var j = [0, Sx_runtime[74].call(null, val), bi]; return Sx_runtime[2].call(null, cst, j); } - var k = Sx_runtime[2].call(null, cst, [0, expected_type, bk]); + var k = Sx_runtime[2].call(null, cst, [0, expected_type, bj]); if(Sx_types[71].call(null, k)){ - var l = [0, Sx_runtime[74].call(null, val), bl]; + var l = [0, Sx_runtime[74].call(null, val), bk]; return Sx_runtime[2].call(null, cst, l); } var and = Sx_runtime[36].call(null, expected_type), m = Sx_types[71].call(null, and) - ? Sx_runtime[2].call(null, cst_ends_with, [0, expected_type, bm]) + ? Sx_runtime[2].call(null, cst_ends_with, [0, expected_type, bl]) : and; - if(! Sx_types[71].call(null, m)) return bp; + if(! Sx_types[71].call(null, m)) return bo; var or = Sx_runtime[84].call(null, val); if(Sx_types[71].call(null, or)) return or; var n = [0, Sx_runtime[2].call(null, "string-length", [0, expected_type, 0]), - bn], + bm], o = [0, expected_type, - [0, bo, [0, Sx_runtime[2].call(null, cst$5, n), 0]]], + [0, bn, [0, Sx_runtime[2].call(null, cst$5, n), 0]]], expected_type$0 = Sx_runtime[2].call(null, cst_slice, o); expected_type = expected_type$0; } @@ -59143,25 +59146,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_expected$0 = " expected ", cst$6 = ")", cst_Type_error = "Type error: ", - bq = [3, "positional"], - br = [3, "rest-type"], + bp = [3, "positional"], + bq = [3, "rest-type"], + br = [2, 1.], bs = [2, 1.], - bt = [2, 1.], - bu = [0, [3, cst$6], 0], - bv = [3, cst$7], - bw = [3, cst_got], - bx = [3, " for param "], - by = [3, cst_expected$0], - bz = [3, cst_Type_error], - bA = [2, 1.], - bB = [0, [3, cst$6], 0], - bC = [3, cst$7], - bD = [3, cst_got], - bE = [3, " for rest arg "], - bF = [3, cst_expected$0], - bG = [3, cst_Type_error], - bH = [6, 0], - bI = [6, 0]; + bt = [0, [3, cst$6], 0], + bu = [3, cst$7], + bv = [3, cst_got], + bw = [3, " for param "], + bx = [3, cst_expected$0], + by = [3, cst_Type_error], + bz = [2, 1.], + bA = [0, [3, cst$6], 0], + bB = [3, cst$7], + bC = [3, cst_got], + bD = [3, " for rest arg "], + bE = [3, cst_expected$0], + bF = [3, cst_Type_error], + bG = [6, 0], + bH = [6, 0]; function strict_check_args(name, args){ var and = strict_ref[1], @@ -59170,8 +59173,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var spec = Sx_runtime[26].call(null, prim_param_types_ref[1], name); if(! Sx_types[71].call(null, spec)) return 0; var - positional = Sx_runtime[26].call(null, spec, bq), - rest_type = Sx_runtime[26].call(null, spec, br); + positional = Sx_runtime[26].call(null, spec, bp), + rest_type = Sx_runtime[26].call(null, spec, bq); if(Sx_types[71].call(null, positional)){ var c = Sx_runtime[6].call(null, positional), @@ -59187,9 +59190,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(pair){ var idx = Sx_runtime[15].call(null, pair), - param = Sx_runtime[18].call(null, pair, bs), + param = Sx_runtime[18].call(null, pair, br), p_name = Sx_runtime[15].call(null, param), - p_type = Sx_runtime[18].call(null, param, bt), + p_type = Sx_runtime[18].call(null, param, bs), a = [0, idx, [0, Sx_runtime[25].call(null, args), 0]], b = Sx_runtime[2].call(null, cst$3, a); if(Sx_types[71].call(null, b)){ @@ -59199,19 +59202,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = [0, 1 - Sx_types[71].call(null, c)]; if(Sx_types[71].call(null, d)){ var - e = [0, bv, [0, [3, Sx_runtime[5].call(null, [0, val, 0])], bu]], + e = [0, bu, [0, [3, Sx_runtime[5].call(null, [0, val, 0])], bt]], f = [0, - bz, + by, [0, name, [0, - by, + bx, [0, p_type, [0, - bx, - [0, p_name, [0, bw, [0, Sx_runtime[74].call(null, val), e]]]]]]]], + bw, + [0, p_name, [0, bv, [0, Sx_runtime[74].call(null, val), e]]]]]]]], g = [3, Sx_runtime[5].call(null, f)], h = Sx_runtime[3].call(null, g); throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1); @@ -59223,7 +59226,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } if(Sx_types[71].call(null, rest_type)) var - positional$0 = Sx_types[71].call(null, positional) ? positional : bI, + positional$0 = Sx_types[71].call(null, positional) ? positional : bH, f = [0, Sx_runtime[25].call(null, positional$0), 0], g = [0, Sx_runtime[25].call(null, args), f], a = Sx_runtime[2].call(null, cst$0, g); @@ -59231,7 +59234,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = rest_type; if(! Sx_types[71].call(null, a)) return 0; var - positional$1 = Sx_types[71].call(null, positional) ? positional : bH, + positional$1 = Sx_types[71].call(null, positional) ? positional : bG, h = [0, args, [0, Sx_runtime[25].call(null, positional$1), 0]], i = Sx_runtime[2].call(null, cst_slice, h), j = Sx_runtime[6].call(null, i), @@ -59247,24 +59250,24 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(pair){ var idx = Sx_runtime[15].call(null, pair), - val = Sx_runtime[18].call(null, pair, bA), + val = Sx_runtime[18].call(null, pair, bz), a = value_matches_type_p(val, rest_type), b = [0, 1 - Sx_types[71].call(null, a)]; if(! Sx_types[71].call(null, b)) return 0; var - c = [0, bC, [0, [3, Sx_runtime[5].call(null, [0, val, 0])], bB]], + c = [0, bB, [0, [3, Sx_runtime[5].call(null, [0, val, 0])], bA]], d = [0, - bG, + bF, [0, name, [0, - bF, + bE, [0, rest_type, [0, - bE, - [0, idx, [0, bD, [0, Sx_runtime[74].call(null, val), c]]]]]]]], + bD, + [0, idx, [0, bC, [0, Sx_runtime[74].call(null, val), c]]]]]]]], e = [3, Sx_runtime[5].call(null, d)], f = Sx_runtime[3].call(null, e); throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1); @@ -59276,15 +59279,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst$9 = "\xce\xbb", cst$8 = "+", cst_index_of = "index-of", - bJ = [0, [3, cst_rest], 0], - bK = [2, 0.], - bL = [0, [2, 1.], 0], - bM = [0, 1], - bN = [6, 0], - bO = [0, 0]; + bI = [0, [3, cst_rest], 0], + bJ = [2, 0.], + bK = [0, [2, 1.], 0], + bL = [0, 1], + bM = [6, 0], + bN = [0, 0]; function bind_lambda_params(params, args, local){ var - rest_idx = Sx_runtime[2].call(null, cst_index_of, [0, params, bJ]), + rest_idx = Sx_runtime[2].call(null, cst_index_of, [0, params, bI]), and = Sx_runtime[35].call(null, rest_idx); if(Sx_types[71].call(null, and)) var @@ -59292,12 +59295,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= a = Sx_runtime[2].call(null, cst$3, b); else var a = and; - if(! Sx_types[71].call(null, a)) return bO; + if(! Sx_types[71].call(null, a)) return bN; var positional = Sx_runtime[2].call - (null, cst_slice, [0, params, [0, bK, [0, rest_idx, 0]]]), - c = Sx_runtime[2].call(null, cst$8, [0, rest_idx, bL]), + (null, cst_slice, [0, params, [0, bJ, [0, rest_idx, 0]]]), + c = Sx_runtime[2].call(null, cst$8, [0, rest_idx, bK]), rest_name = Sx_runtime[18].call(null, params, c); Sx_runtime[94].call (null, @@ -59329,18 +59332,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= f = Sx_types[71].call(null, e) ? Sx_runtime[2].call(null, cst_slice, [0, args, [0, rest_idx, 0]]) - : bN, + : bM, g = Sx_runtime[4].call(null, rest_name); Sx_runtime[78].call(null, local, g, f); - return bM; + return bL; } var cst_expects = " expects ", cst_zip = "zip", - bP = [3, cst_args_got], - bQ = [3, cst_expects], - bR = [3, cst_lambda], - bS = [2, 1.]; + bO = [3, cst_args_got], + bP = [3, cst_expects], + bQ = [3, cst_lambda], + bR = [2, 1.]; function call_lambda(f, args, caller_env){ var params = Sx_types[74].call(null, f), @@ -59355,10 +59358,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= g = Sx_runtime[2].call(null, cst$0, e); if(Sx_types[71].call(null, g)){ var - h = [0, bP, [0, Sx_runtime[25].call(null, args), 0]], - i = [0, bQ, [0, Sx_runtime[25].call(null, params), h]], + h = [0, bO, [0, Sx_runtime[25].call(null, args), 0]], + i = [0, bP, [0, Sx_runtime[25].call(null, params), h]], or = Sx_types[77].call(null, f), - or$0 = Sx_types[71].call(null, or) ? or : bR, + or$0 = Sx_types[71].call(null, or) ? or : bQ, j = [3, Sx_runtime[5].call(null, [0, or$0, i])], k = Sx_runtime[3].call(null, j); throw caml_maybe_attach_backtrace([0, Sx_types[9], k], 1); @@ -59370,7 +59373,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, bS), + a = Sx_runtime[18].call(null, pair, bR), b = Sx_runtime[15].call(null, pair), c = Sx_runtime[4].call(null, b); Sx_runtime[78].call(null, local, c, a); @@ -59393,12 +59396,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var q = Sx_types[75].call(null, f); return Sx_types[58].call(null, q, local); } - var cst_children = "children", bT = [2, 1.], bU = [3, cst_children]; + var cst_children = "children", bS = [2, 1.], bT = [3, cst_children]; function call_component(comp, raw_args, env){ var parsed = parse_keyword_args(raw_args, env), kwargs = Sx_runtime[15].call(null, parsed), - children = Sx_runtime[18].call(null, parsed, bT), + children = Sx_runtime[18].call(null, parsed, bS), a = Sx_types[85].call(null, comp), local = Sx_runtime[82].call(null, a, env), b = Sx_types[83].call(null, comp), @@ -59416,7 +59419,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= c); var d = Sx_types[86].call(null, comp); if(Sx_types[71].call(null, d)){ - var e = Sx_runtime[4].call(null, bU); + var e = Sx_runtime[4].call(null, bT); Sx_runtime[78].call(null, local, e, children); } var f = Sx_types[84].call(null, comp); @@ -59427,51 +59430,51 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_i = "i", cst_inc = "inc", cst_skip = "skip", - bV = [6, 0], - bW = [2, 0.], - bX = [3, cst_i], - bY = [0, 0], - bZ = [3, cst_skip], - b0 = [3, cst_i], - b1 = [3, cst_skip], - b2 = [3, cst_i], - b3 = [0, 0], - b4 = [3, cst_skip], - b5 = [0, [3, cst_keyword], 0], - b6 = [3, cst_i], - b7 = [0, 1], - b8 = [3, cst_skip], - b9 = [3, cst_i]; + bU = [6, 0], + bV = [2, 0.], + bW = [3, cst_i], + bX = [0, 0], + bY = [3, cst_skip], + bZ = [3, cst_i], + b0 = [3, cst_skip], + b1 = [3, cst_i], + b2 = [0, 0], + b3 = [3, cst_skip], + b4 = [0, [3, cst_keyword], 0], + b5 = [3, cst_i], + b6 = [0, 1], + b7 = [3, cst_skip], + b8 = [3, cst_i]; function parse_keyword_args(raw_args, env){ var kwargs = [7, Stdlib_Hashtbl[1].call(null, 0, 0)], a = Sx_runtime[6].call(null, raw_args), d = Stdlib_Hashtbl[1].call(null, 0, 2), - b = Sx_runtime[3].call(null, bX); - Stdlib_Hashtbl[11].call(null, d, b, bW); - var c = Sx_runtime[3].call(null, bZ); - Stdlib_Hashtbl[11].call(null, d, c, bY); - var children = [0, bV]; + b = Sx_runtime[3].call(null, bW); + Stdlib_Hashtbl[11].call(null, d, b, bV); + var c = Sx_runtime[3].call(null, bY); + Stdlib_Hashtbl[11].call(null, d, c, bX); + var children = [0, bU]; Stdlib_List[26].call (null, function(state, arg){ var - idx = Sx_runtime[26].call(null, state, b0), - skip = Sx_runtime[26].call(null, state, b1); + idx = Sx_runtime[26].call(null, state, bZ), + skip = Sx_runtime[26].call(null, state, b0); if(Sx_types[71].call(null, skip)){ var b = [0, state, [0, - b4, + b3, [0, - b3, - [0, b2, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]]]; + b2, + [0, b1, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]]]; return Sx_runtime[2].call(null, cst_assoc, b); } var - c = [0, Sx_runtime[74].call(null, arg), b5], + c = [0, Sx_runtime[74].call(null, arg), b4], and = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, and)) var @@ -59492,10 +59495,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, state, [0, - b8, + b7, [0, - b7, - [0, b6, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]]]; + b6, + [0, b5, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]]]; return Sx_runtime[2].call(null, cst_assoc, i); } var j = trampoline(eval_expr(arg, env)); @@ -59504,7 +59507,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= k = [0, state, - [0, b9, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]; + [0, b8, [0, Sx_runtime[2].call(null, cst_inc, [0, idx, 0]), 0]]]; return Sx_runtime[2].call(null, cst_assoc, k); }, [7, d], @@ -59513,13 +59516,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst$10 = "=>", - b_ = [0, [3, cst_list], 0], - b$ = [0, [2, 2.], 0], - ca = [0, [2, 3.], 0], - cb = [0, [3, cst_symbol], 0], - cc = [2, 1.], - cd = [0, [3, cst$10], 0], - ce = [2, 1.]; + b9 = [0, [3, cst_list], 0], + b_ = [0, [2, 2.], 0], + b$ = [0, [2, 3.], 0], + ca = [0, [3, cst_symbol], 0], + cb = [2, 1.], + cc = [0, [3, cst$10], 0], + cd = [2, 1.]; function cond_scheme_p(clauses){ var a = Sx_runtime[6].call(null, clauses); return [0, @@ -59527,27 +59530,27 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(c){ var - a = [0, Sx_runtime[74].call(null, c), b_], + a = [0, Sx_runtime[74].call(null, c), b9], and = Sx_runtime[2].call(null, cst, a); if(Sx_types[71].call(null, and)){ var - b = [0, Sx_runtime[25].call(null, c), b$], + b = [0, Sx_runtime[25].call(null, c), b_], or = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, or)) var or$0 = or; else{ var - d = [0, Sx_runtime[25].call(null, c), ca], + d = [0, Sx_runtime[25].call(null, c), b$], and$0 = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, and$0)){ var - e = Sx_runtime[18].call(null, c, cc), - f = [0, Sx_runtime[74].call(null, e), cb], + e = Sx_runtime[18].call(null, c, cb), + f = [0, Sx_runtime[74].call(null, e), ca], and$1 = Sx_runtime[2].call(null, cst, f); if(Sx_types[71].call(null, and$1)) var - g = Sx_runtime[18].call(null, c, ce), - h = [0, Sx_types[72].call(null, g), cd], + g = Sx_runtime[18].call(null, c, cd), + h = [0, Sx_types[72].call(null, g), cc], or$0 = Sx_runtime[2].call(null, cst, h); else var or$0 = and$1; @@ -59564,70 +59567,70 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst_else = "else", - cf = [0, [3, cst_keyword], 0], - cg = [0, [3, cst_else], 0], - ch = [0, [3, cst_symbol], 0], - ci = [0, [3, cst_else], 0], - cj = [0, [3, ":else"], 0]; + ce = [0, [3, cst_keyword], 0], + cf = [0, [3, cst_else], 0], + cg = [0, [3, cst_symbol], 0], + ch = [0, [3, cst_else], 0], + ci = [0, [3, ":else"], 0]; function is_else_clause(test){ var - a = [0, Sx_runtime[74].call(null, test), cf], + a = [0, Sx_runtime[74].call(null, test), ce], and = Sx_runtime[2].call(null, cst, a); if(Sx_types[71].call(null, and)) var - b = [0, Sx_types[73].call(null, test), cg], + b = [0, Sx_types[73].call(null, test), cf], or = Sx_runtime[2].call(null, cst, b); else var or = and; if(Sx_types[71].call(null, or)) return or; var - c = [0, Sx_runtime[74].call(null, test), ch], + c = [0, Sx_runtime[74].call(null, test), cg], and$0 = Sx_runtime[2].call(null, cst, c); if(! Sx_types[71].call(null, and$0)) return and$0; var - d = [0, Sx_types[72].call(null, test), ci], + d = [0, Sx_types[72].call(null, test), ch], or$0 = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, or$0)) return or$0; - var e = [0, Sx_types[72].call(null, test), cj]; + var e = [0, Sx_types[72].call(null, test), ci]; return Sx_runtime[2].call(null, cst, e); } var cst$11 = "*", cst$12 = "/", - ck = [2, 1.], - cl = [0, [2, 2.], 0], + cj = [2, 1.], + ck = [0, [2, 2.], 0], + cl = [6, 0], cm = [6, 0], - cn = [6, 0], - co = [0, [3, cst_list], 0], - cp = [0, [2, 2.], 0], - cq = [0, [3, cst_symbol], 0], - cr = [2, 1.], - cs = [0, [2, 1.], 0], - ct = [3, cst_begin], - cu = [0, [2, 2.], 0], - cv = [2, 0.], - cw = [0, [3, cst_symbol], 0], + cn = [0, [3, cst_list], 0], + co = [0, [2, 2.], 0], + cp = [0, [3, cst_symbol], 0], + cq = [2, 1.], + cr = [0, [2, 1.], 0], + cs = [3, cst_begin], + ct = [0, [2, 2.], 0], + cu = [2, 0.], + cv = [0, [3, cst_symbol], 0], + cw = [0, [2, 2.], 0], cx = [0, [2, 2.], 0], cy = [0, [2, 2.], 0], - cz = [0, [2, 2.], 0], - cA = [0, [2, 2.], 0]; + cz = [0, [2, 2.], 0]; function sf_named_let(args, env){ var b = Sx_runtime[15].call(null, args), loop_name = Sx_types[72].call(null, b), - bindings = Sx_runtime[18].call(null, args, ck), - body = Sx_runtime[2].call(null, cst_slice, [0, args, cl]), + bindings = Sx_runtime[18].call(null, args, cj), + body = Sx_runtime[2].call(null, cst_slice, [0, args, ck]), c = Sx_runtime[15].call(null, bindings), - d = [0, Sx_runtime[74].call(null, c), co], + d = [0, Sx_runtime[74].call(null, c), cn], and = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, and)) var e = Sx_runtime[15].call(null, bindings), - f = [0, Sx_runtime[25].call(null, e), cp], + f = [0, Sx_runtime[25].call(null, e), co], a = Sx_runtime[2].call(null, cst, f); else var a = and; - var params = [0, cm], inits = [0, cn]; + var params = [0, cl], inits = [0, cm]; if(Sx_types[71].call(null, a)){ var g = Sx_runtime[6].call(null, bindings); Stdlib_List[18].call @@ -59635,7 +59638,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(binding){ var b = Sx_runtime[15].call(null, binding), - c = [0, Sx_runtime[74].call(null, b), cq], + c = [0, Sx_runtime[74].call(null, b), cp], d = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, d)) var @@ -59644,7 +59647,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else var a = Sx_runtime[15].call(null, binding); params[1] = Sx_runtime[11].call(null, params[1], a); - var f = Sx_runtime[18].call(null, binding, cr); + var f = Sx_runtime[18].call(null, binding, cq); inits[1] = Sx_runtime[11].call(null, inits[1], f); return 0; }, @@ -59652,30 +59655,30 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } else{ var - o = [0, Sx_runtime[25].call(null, bindings), cu], - p = [0, cv, [0, Sx_runtime[2].call(null, cst$12, o), 0]], + o = [0, Sx_runtime[25].call(null, bindings), ct], + p = [0, cu, [0, Sx_runtime[2].call(null, cst$12, o), 0]], q = Sx_runtime[2].call(null, cst_range, p), r = Sx_runtime[6].call(null, q); Stdlib_List[26].call (null, function(acc, pair_idx){ var - b = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cx]), + b = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cw]), c = Sx_runtime[18].call(null, bindings, b), - d = [0, Sx_runtime[74].call(null, c), cw], + d = [0, Sx_runtime[74].call(null, c), cv], e = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, e)) var - f = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cy]), + f = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cx]), g = Sx_runtime[18].call(null, bindings, f), a = Sx_types[72].call(null, g); else var - k = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cA]), + k = Sx_runtime[2].call(null, cst$11, [0, pair_idx, cz]), a = Sx_runtime[18].call(null, bindings, k); params[1] = Sx_runtime[11].call(null, params[1], a); var - h = [0, Sx_runtime[2].call(null, cst$11, [0, pair_idx, cz]), 0], + h = [0, Sx_runtime[2].call(null, cst$11, [0, pair_idx, cy]), 0], i = Sx_runtime[2].call(null, cst_inc, h), j = Sx_runtime[18].call(null, bindings, i); inits[1] = Sx_runtime[11].call(null, inits[1], j); @@ -59685,13 +59688,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= r); } var - h = [0, Sx_runtime[25].call(null, body), cs], + h = [0, Sx_runtime[25].call(null, body), cr], i = Sx_runtime[2].call(null, cst, h); if(Sx_types[71].call(null, i)) var loop_body = Sx_runtime[15].call(null, body); else var - n = Sx_types[59].call(null, ct), + n = Sx_types[59].call(null, cs), loop_body = Sx_runtime[19].call(null, n, body); var loop_fn = Sx_types[42].call(null, params[1], loop_body, env), @@ -59710,26 +59713,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return cek_call(loop_fn, init_vals); } var - cB = [0, [2, 1.], 0], - cC = [0, [3, cst_symbol], 0], - cD = [0, [3, cst_list], 0], - cE = [0, [2, 3.], 0], - cF = [0, [3, cst_keyword], 0], - cG = [2, 1.], - cH = [0, [3, cst_as], 0], - cI = [2, 1.], - cJ = [3, cst_begin]; + cA = [0, [2, 1.], 0], + cB = [0, [3, cst_symbol], 0], + cC = [0, [3, cst_list], 0], + cD = [0, [2, 3.], 0], + cE = [0, [3, cst_keyword], 0], + cF = [2, 1.], + cG = [0, [3, cst_as], 0], + cH = [2, 1.], + cI = [3, cst_begin]; function sf_lambda(args, env){ var params_expr = Sx_runtime[15].call(null, args), body_exprs = Sx_runtime[16].call(null, args), - a = [0, Sx_runtime[25].call(null, body_exprs), cB], + a = [0, Sx_runtime[25].call(null, body_exprs), cA], b = Sx_runtime[2].call(null, cst, a); if(Sx_types[71].call(null, b)) var body = Sx_runtime[15].call(null, body_exprs); else var - d = Sx_types[59].call(null, cJ), + d = Sx_types[59].call(null, cI), body = Sx_runtime[19].call(null, d, body_exprs); var c = Sx_runtime[6].call(null, params_expr), @@ -59739,25 +59742,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(p){ var - b = [0, Sx_runtime[74].call(null, p), cC], + b = [0, Sx_runtime[74].call(null, p), cB], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)) return Sx_types[72].call(null, p); var - d = [0, Sx_runtime[74].call(null, p), cD], + d = [0, Sx_runtime[74].call(null, p), cC], and = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, and)){ var - e = [0, Sx_runtime[25].call(null, p), cE], + e = [0, Sx_runtime[25].call(null, p), cD], and$0 = Sx_runtime[2].call(null, cst, e); if(Sx_types[71].call(null, and$0)){ var - f = Sx_runtime[18].call(null, p, cG), - g = [0, Sx_runtime[74].call(null, f), cF], + f = Sx_runtime[18].call(null, p, cF), + g = [0, Sx_runtime[74].call(null, f), cE], and$1 = Sx_runtime[2].call(null, cst, g); if(Sx_types[71].call(null, and$1)) var - h = Sx_runtime[18].call(null, p, cI), - i = [0, Sx_types[73].call(null, h), cH], + h = Sx_runtime[18].call(null, p, cH), + i = [0, Sx_types[73].call(null, h), cG], a = Sx_runtime[2].call(null, cst, i); else var a = and$1; @@ -59779,36 +59782,36 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_effect_annotations = "*effect-annotations*", cst_effects = "effects", cst$13 = "~", - cK = [2, 1.], - cL = [3, cst$13], - cM = [2, 1.], - cN = [2, 2.], - cO = [3, "auto"], - cP = [3, "affinity"], - cQ = [3, cst_effects], - cR = [0, [3, cst_list], 0], - cS = [0, [3, cst_symbol], 0], + cJ = [2, 1.], + cK = [3, cst$13], + cL = [2, 1.], + cM = [2, 2.], + cN = [3, "auto"], + cO = [3, "affinity"], + cP = [3, cst_effects], + cQ = [0, [3, cst_list], 0], + cR = [0, [3, cst_symbol], 0], + cS = [3, cst_effect_annotations], cT = [3, cst_effect_annotations], cU = [3, cst_effect_annotations], - cV = [3, cst_effect_annotations], - cW = [3, cst_current_file], - cX = [3, cst_current_file]; + cV = [3, cst_current_file], + cW = [3, cst_current_file]; function sf_defcomp(args, env){ var name_sym = Sx_runtime[15].call(null, args), - params_raw = Sx_runtime[18].call(null, args, cK), + params_raw = Sx_runtime[18].call(null, args, cJ), body = Sx_runtime[17].call(null, args), a = Sx_types[72].call(null, name_sym), - comp_name = Sx_runtime[128].call(null, a, cL), + comp_name = Sx_runtime[128].call(null, a, cK), parsed = parse_comp_params(params_raw), params = Sx_runtime[15].call(null, parsed), - has_children = Sx_runtime[18].call(null, parsed, cM), - param_types = Sx_runtime[18].call(null, parsed, cN), - affinity = defcomp_kwarg(args, cP, cO), + has_children = Sx_runtime[18].call(null, parsed, cL), + param_types = Sx_runtime[18].call(null, parsed, cM), + affinity = defcomp_kwarg(args, cO, cN), comp = Sx_types[55].call (null, comp_name, params, has_children, body, env, affinity), - effects = defcomp_kwarg(args, cQ, 0), + effects = defcomp_kwarg(args, cP, 0), b = Sx_runtime[84].call(null, param_types), and = [0, 1 - Sx_types[71].call(null, b)]; if(Sx_types[71].call(null, and)){ @@ -59820,7 +59823,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= e = [0, 1 - Sx_types[71].call(null, d)]; if(Sx_types[71].call(null, e)){ var - f = [0, Sx_runtime[74].call(null, effects), cR], + f = [0, Sx_runtime[74].call(null, effects), cQ], g = Sx_runtime[2].call(null, cst, f); if(Sx_types[71].call(null, g)) var @@ -59831,7 +59834,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(e){ var - a = [0, Sx_runtime[74].call(null, e), cS], + a = [0, Sx_runtime[74].call(null, e), cR], b = Sx_runtime[2].call(null, cst, a); return Sx_types[71].call(null, b) ? Sx_types[72].call(null, e) @@ -59843,19 +59846,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= effect_list = [6, [0, [3, Sx_runtime[5].call(null, [0, effects, 0])], 0]]; var - i = Sx_runtime[76].call(null, env, cT), + i = Sx_runtime[76].call(null, env, cS), effect_anns = Sx_types[71].call(null, i) - ? Sx_runtime[77].call(null, env, cU) + ? Sx_runtime[77].call(null, env, cT) : [7, Stdlib_Hashtbl[1].call(null, 0, 0)], j = Sx_types[72].call(null, name_sym); Sx_runtime[12].call(null, effect_anns, j, effect_list); - var k = Sx_runtime[4].call(null, cV); + var k = Sx_runtime[4].call(null, cU); Sx_runtime[78].call(null, env, k, effect_anns); } - var l = Sx_runtime[76].call(null, env, cW); + var l = Sx_runtime[76].call(null, env, cV); if(Sx_types[71].call(null, l)){ - var m = Sx_runtime[77].call(null, env, cX); + var m = Sx_runtime[77].call(null, env, cW); Sx_types[82].call(null, comp, m); } var @@ -59865,26 +59868,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return comp; } var + cX = [0, [2, 1.], 0], cY = [0, [2, 1.], 0], - cZ = [0, [2, 1.], 0], - c0 = [2, 2.], - c1 = [0, [3, cst_keyword], 0], + cZ = [2, 2.], + c0 = [0, [3, cst_keyword], 0], + c1 = [0, [2, 1.], 0], c2 = [0, [2, 1.], 0], - c3 = [0, [2, 1.], 0], - c4 = [0, [3, cst_keyword], 0]; + c3 = [0, [3, cst_keyword], 0]; function defcomp_kwarg(args, key, default$){ var - a = [0, Sx_runtime[25].call(null, args), cY], + a = [0, Sx_runtime[25].call(null, args), cX], end = Sx_runtime[2].call(null, cst$5, a), result = [0, default$], - b = Sx_runtime[2].call(null, cst_range, [0, c0, [0, end, cZ]]), + b = Sx_runtime[2].call(null, cst_range, [0, cZ, [0, end, cY]]), c = Sx_runtime[6].call(null, b); Stdlib_List[18].call (null, function(i){ var b = Sx_runtime[18].call(null, args, i), - c = [0, Sx_runtime[74].call(null, b), c1], + c = [0, Sx_runtime[74].call(null, b), c0], and = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, and)){ var @@ -59893,7 +59896,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and$0 = Sx_runtime[2].call(null, cst, e); if(Sx_types[71].call(null, and$0)) var - f = [0, Sx_runtime[2].call(null, cst$8, [0, i, c2]), [0, end, 0]], + f = [0, Sx_runtime[2].call(null, cst$8, [0, i, c1]), [0, end, 0]], a = Sx_runtime[2].call(null, cst$3, f); else var a = and$0; @@ -59902,9 +59905,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(Sx_types[71].call(null, a)){ var - g = Sx_runtime[2].call(null, cst$8, [0, i, c3]), + g = Sx_runtime[2].call(null, cst$8, [0, i, c2]), val = Sx_runtime[18].call(null, args, g), - h = [0, Sx_runtime[74].call(null, val), c4], + h = [0, Sx_runtime[74].call(null, val), c3], j = Sx_runtime[2].call(null, cst, h), k = Sx_types[71].call(null, j) ? Sx_types[73].call(null, val) : val; result[1] = k; @@ -59915,56 +59918,56 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return result[1]; } var - c5 = [6, 0], + c4 = [6, 0], + c5 = [0, 0], c6 = [0, 0], - c7 = [0, 0], - c8 = [0, [3, cst_list], 0], - c9 = [0, [2, 3.], 0], - c_ = [0, [3, cst_symbol], 0], - c$ = [0, [3, cst_keyword], 0], - da = [2, 1.], - db = [0, [3, cst_as], 0], - dc = [2, 1.], - dd = [2, 2.], + c7 = [0, [3, cst_list], 0], + c8 = [0, [2, 3.], 0], + c9 = [0, [3, cst_symbol], 0], + c_ = [0, [3, cst_keyword], 0], + c$ = [2, 1.], + da = [0, [3, cst_as], 0], + db = [2, 1.], + dc = [2, 2.], + dd = [0, [3, cst_symbol], 0], de = [0, [3, cst_symbol], 0], - df = [0, [3, cst_symbol], 0], - dg = [0, [3, "&key"], 0], - dh = [0, 1], - di = [0, [3, cst_rest], 0], - dj = [0, 1], - dk = [0, [3, "&children"], 0], - dl = [0, 1]; + df = [0, [3, "&key"], 0], + dg = [0, 1], + dh = [0, [3, cst_rest], 0], + di = [0, 1], + dj = [0, [3, "&children"], 0], + dk = [0, 1]; function parse_comp_params(params_expr){ var param_types = [7, Stdlib_Hashtbl[1].call(null, 0, 0)], a = Sx_runtime[6].call(null, params_expr), - params = [0, c5], - has_children = [0, c6], - in_key = [0, c7]; + params = [0, c4], + has_children = [0, c5], + in_key = [0, c6]; Stdlib_List[18].call (null, function(p){ var - b = [0, Sx_runtime[74].call(null, p), c8], + b = [0, Sx_runtime[74].call(null, p), c7], and = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, and)){ var - c = [0, Sx_runtime[25].call(null, p), c9], + c = [0, Sx_runtime[25].call(null, p), c8], and$0 = Sx_runtime[2].call(null, cst, c); if(Sx_types[71].call(null, and$0)){ var d = Sx_runtime[15].call(null, p), - e = [0, Sx_runtime[74].call(null, d), c_], + e = [0, Sx_runtime[74].call(null, d), c9], and$1 = Sx_runtime[2].call(null, cst, e); if(Sx_types[71].call(null, and$1)){ var - f = Sx_runtime[18].call(null, p, da), - g = [0, Sx_runtime[74].call(null, f), c$], + f = Sx_runtime[18].call(null, p, c$), + g = [0, Sx_runtime[74].call(null, f), c_], and$2 = Sx_runtime[2].call(null, cst, g); if(Sx_types[71].call(null, and$2)) var - h = Sx_runtime[18].call(null, p, dc), - i = [0, Sx_types[73].call(null, h), db], + h = Sx_runtime[18].call(null, p, db), + i = [0, Sx_types[73].call(null, h), da], a = Sx_runtime[2].call(null, cst, i); else var a = and$2; @@ -59981,8 +59984,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var j = Sx_runtime[15].call(null, p), name = Sx_types[72].call(null, j), - ptype = Sx_runtime[18].call(null, p, dd), - k = [0, Sx_runtime[74].call(null, ptype), de], + ptype = Sx_runtime[18].call(null, p, dc), + k = [0, Sx_runtime[74].call(null, ptype), dd], l = Sx_runtime[2].call(null, cst, k), type_val = Sx_types[71].call(null, l) ? Sx_types[72].call(null, ptype) : ptype, @@ -59994,22 +59997,22 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } else{ var - n = [0, Sx_runtime[74].call(null, p), df], + n = [0, Sx_runtime[74].call(null, p), de], o = Sx_runtime[2].call(null, cst, n); if(Sx_types[71].call(null, o)){ var name$0 = Sx_types[72].call(null, p), - q = Sx_runtime[2].call(null, cst, [0, name$0, dg]); + q = Sx_runtime[2].call(null, cst, [0, name$0, df]); if(Sx_types[71].call(null, q)) - in_key[1] = dh; + in_key[1] = dg; else{ - var r = Sx_runtime[2].call(null, cst, [0, name$0, di]); + var r = Sx_runtime[2].call(null, cst, [0, name$0, dh]); if(Sx_types[71].call(null, r)) - has_children[1] = dj; + has_children[1] = di; else{ - var s = Sx_runtime[2].call(null, cst, [0, name$0, dk]); + var s = Sx_runtime[2].call(null, cst, [0, name$0, dj]); if(Sx_types[71].call(null, s)) - has_children[1] = dl; + has_children[1] = dk; else if(! Sx_types[71].call(null, has_children[1])) if(Sx_types[71].call(null, in_key[1])) params[1] = Sx_runtime[11].call(null, params[1], name$0); @@ -60025,38 +60028,38 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [6, [0, params[1], [0, has_children[1], [0, param_types, 0]]]]; } var - dm = [2, 1.], - dn = [0, [2, 2.], 0], - dp = [0, [2, 1.], 0], - dq = [3, cst$13], - dr = [2, 1.], + dl = [2, 1.], + dm = [0, [2, 2.], 0], + dn = [0, [2, 1.], 0], + dp = [3, cst$13], + dq = [2, 1.], + dr = [3, cst_current_file], ds = [3, cst_current_file], - dt = [3, cst_current_file], - du = [3, cst_begin]; + dt = [3, cst_begin]; function sf_defisland(args, env){ var name_sym = Sx_runtime[15].call(null, args), - params_raw = Sx_runtime[18].call(null, args, dm), - body_exprs = Sx_runtime[2].call(null, cst_slice, [0, args, dn]), - a = [0, Sx_runtime[25].call(null, body_exprs), dp], + params_raw = Sx_runtime[18].call(null, args, dl), + body_exprs = Sx_runtime[2].call(null, cst_slice, [0, args, dm]), + a = [0, Sx_runtime[25].call(null, body_exprs), dn], b = Sx_runtime[2].call(null, cst, a); if(Sx_types[71].call(null, b)) var body = Sx_runtime[15].call(null, body_exprs); else var - h = Sx_types[59].call(null, du), + h = Sx_types[59].call(null, dt), body = Sx_runtime[19].call(null, h, body_exprs); var c = Sx_types[72].call(null, name_sym), - comp_name = Sx_runtime[128].call(null, c, dq), + comp_name = Sx_runtime[128].call(null, c, dp), parsed = parse_comp_params(params_raw), params = Sx_runtime[15].call(null, parsed), - has_children = Sx_runtime[18].call(null, parsed, dr), + has_children = Sx_runtime[18].call(null, parsed, dq), island = Sx_types[56].call(null, comp_name, params, has_children, body, env), - d = Sx_runtime[76].call(null, env, ds); + d = Sx_runtime[76].call(null, env, dr); if(Sx_types[71].call(null, d)){ - var e = Sx_runtime[77].call(null, env, dt); + var e = Sx_runtime[77].call(null, env, ds); Sx_types[82].call(null, island, e); } var @@ -60065,7 +60068,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_runtime[78].call(null, env, g, island); return island; } - var dv = [0, [2, 2.], 0], dw = [2, 1.]; + var du = [0, [2, 2.], 0], dv = [2, 1.]; function defio_parse_kwargs_b(spec, remaining$1){ var remaining = remaining$1; for(;;){ @@ -60074,7 +60077,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and = [0, 1 - Sx_types[71].call(null, b)]; if(Sx_types[71].call(null, and)){ var - c = [0, Sx_runtime[25].call(null, remaining), dv], + c = [0, Sx_runtime[25].call(null, remaining), du], and$0 = Sx_runtime[2].call(null, cst$2, c); if(Sx_types[71].call(null, and$0)) var @@ -60087,7 +60090,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(! Sx_types[71].call(null, a)) return 0; var - e = Sx_runtime[18].call(null, remaining, dw), + e = Sx_runtime[18].call(null, remaining, dv), f = Sx_runtime[15].call(null, remaining), g = Sx_types[73].call(null, f); Sx_runtime[12].call(null, spec, g, e); @@ -60097,25 +60100,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= remaining = remaining$0; } } - var dx = [3, cst_name]; + var dw = [3, cst_name]; function sf_defio(args, env){ var name = Sx_runtime[15].call(null, args), spec = [7, Stdlib_Hashtbl[1].call(null, 0, 0)]; - Sx_runtime[12].call(null, spec, dx, name); + Sx_runtime[12].call(null, spec, dw, name); defio_parse_kwargs_b(spec, Sx_runtime[16].call(null, args)); io_register_b(name, spec); return spec; } - var dy = [2, 1.], dz = [2, 2.], dA = [2, 1.]; + var dx = [2, 1.], dy = [2, 2.], dz = [2, 1.]; function sf_defmacro(args, env){ var name_sym = Sx_runtime[15].call(null, args), - params_raw = Sx_runtime[18].call(null, args, dy), - body = Sx_runtime[18].call(null, args, dz), + params_raw = Sx_runtime[18].call(null, args, dx), + body = Sx_runtime[18].call(null, args, dy), parsed = parse_macro_params(params_raw), params = Sx_runtime[15].call(null, parsed), - rest_param = Sx_runtime[18].call(null, parsed, dA), + rest_param = Sx_runtime[18].call(null, parsed, dz), a = Sx_types[72].call(null, name_sym), mac = Sx_types[57].call(null, params, rest_param, body, env, a), b = Sx_types[72].call(null, name_sym), @@ -60125,47 +60128,47 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst_in_rest = "in-rest", - dB = [6, 0], - dC = [0, 0], - dD = [3, cst_in_rest], - dE = [0, [3, cst_symbol], 0], - dF = [0, [3, cst_rest], 0], - dG = [0, [3, cst_in_rest], [0, [0, 1], 0]], - dH = [3, cst_in_rest], - dI = [0, [3, cst_symbol], 0], - dJ = [0, [3, cst_symbol], 0]; + dA = [6, 0], + dB = [0, 0], + dC = [3, cst_in_rest], + dD = [0, [3, cst_symbol], 0], + dE = [0, [3, cst_rest], 0], + dF = [0, [3, cst_in_rest], [0, [0, 1], 0]], + dG = [3, cst_in_rest], + dH = [0, [3, cst_symbol], 0], + dI = [0, [3, cst_symbol], 0]; function parse_macro_params(params_expr){ var a = Sx_runtime[6].call(null, params_expr), d = Stdlib_Hashtbl[1].call(null, 0, 1), - b = Sx_runtime[3].call(null, dD); - Stdlib_Hashtbl[11].call(null, d, b, dC); - var params = [0, dB], rest_param = [0, 0]; + b = Sx_runtime[3].call(null, dC); + Stdlib_Hashtbl[11].call(null, d, b, dB); + var params = [0, dA], rest_param = [0, 0]; Stdlib_List[26].call (null, function(state, p){ var - b = [0, Sx_runtime[74].call(null, p), dE], + b = [0, Sx_runtime[74].call(null, p), dD], and = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, and)) var - c = [0, Sx_types[72].call(null, p), dF], + c = [0, Sx_types[72].call(null, p), dE], a = Sx_runtime[2].call(null, cst, c); else var a = and; if(Sx_types[71].call(null, a)) - return Sx_runtime[2].call(null, cst_assoc, [0, state, dG]); - var d = Sx_runtime[26].call(null, state, dH); + return Sx_runtime[2].call(null, cst_assoc, [0, state, dF]); + var d = Sx_runtime[26].call(null, state, dG); if(Sx_types[71].call(null, d)){ var - e = [0, Sx_runtime[74].call(null, p), dI], + e = [0, Sx_runtime[74].call(null, p), dH], f = Sx_runtime[2].call(null, cst, e), g = Sx_types[71].call(null, f) ? Sx_types[72].call(null, p) : p; rest_param[1] = g; return state; } var - h = [0, Sx_runtime[74].call(null, p), dJ], + h = [0, Sx_runtime[74].call(null, p), dI], i = Sx_runtime[2].call(null, cst, h), j = Sx_types[71].call(null, i) ? Sx_types[72].call(null, p) : p; params[1] = Sx_runtime[11].call(null, params[1], j); @@ -60176,83 +60179,92 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [6, [0, params[1], [0, rest_param[1], 0]]]; } var - dK = [0, [3, cst_list], 0], - dL = [6, 0], - dM = [0, [3, cst_symbol], 0], - dN = [0, [3, "unquote"], 0], - dO = [2, 1.], - dP = [6, 0], - dQ = [0, [3, cst_list], 0], - dR = [0, [2, 2.], 0], - dS = [0, [3, cst_symbol], 0], - dT = [0, [3, "splice-unquote"], 0], - dU = [2, 1.], - dV = [0, [3, cst_list], 0]; + dJ = [0, [3, cst_list], 0], + dK = [6, 0], + dL = [0, [3, cst_symbol], 0], + dM = [0, [3, "unquote"], 0], + dN = [2, 1.], + dO = [6, 0], + dP = [0, [3, cst_list], 0], + dQ = [0, [2, 2.], 0], + dR = [0, [3, cst_symbol], 0], + dS = [0, [3, "splice-unquote"], 0], + dT = [2, 1.], + dU = [0, [3, cst_list], 0], + dV = [0, [3, "unquote-splicing"], 0]; function qq_expand(template, env){ var - b = [0, Sx_runtime[74].call(null, template), dK], + b = [0, Sx_runtime[74].call(null, template), dJ], c = Sx_runtime[2].call(null, cst, b), d = [0, 1 - Sx_types[71].call(null, c)]; if(Sx_types[71].call(null, d)) return template; var e = Sx_runtime[34].call(null, template); - if(Sx_types[71].call(null, e)) return dL; + if(Sx_types[71].call(null, e)) return dK; var head = Sx_runtime[15].call(null, template), - f = [0, Sx_runtime[74].call(null, head), dM], + f = [0, Sx_runtime[74].call(null, head), dL], and = Sx_runtime[2].call(null, cst, f); if(Sx_types[71].call(null, and)) var - g = [0, Sx_types[72].call(null, head), dN], + g = [0, Sx_types[72].call(null, head), dM], a = Sx_runtime[2].call(null, cst, g); else var a = and; if(Sx_types[71].call(null, a)) return trampoline - (eval_expr(Sx_runtime[18].call(null, template, dO), env)); + (eval_expr(Sx_runtime[18].call(null, template, dN), env)); var h = Sx_runtime[6].call(null, template); return Stdlib_List[26].call (null, function(result, item){ var - b = [0, Sx_runtime[74].call(null, item), dQ], - and = Sx_runtime[2].call(null, cst, b); + a = [0, Sx_runtime[74].call(null, item), dP], + and = Sx_runtime[2].call(null, cst, a); if(Sx_types[71].call(null, and)){ var - c = [0, Sx_runtime[25].call(null, item), dR], - and$0 = Sx_runtime[2].call(null, cst, c); + b = [0, Sx_runtime[25].call(null, item), dQ], + and$0 = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, and$0)){ var - d = Sx_runtime[15].call(null, item), - e = [0, Sx_runtime[74].call(null, d), dS], - and$1 = Sx_runtime[2].call(null, cst, e); - if(Sx_types[71].call(null, and$1)) + c = Sx_runtime[15].call(null, item), + d = [0, Sx_runtime[74].call(null, c), dR], + and$1 = Sx_runtime[2].call(null, cst, d); + if(Sx_types[71].call(null, and$1)){ var - f = Sx_runtime[15].call(null, item), - g = [0, Sx_types[72].call(null, f), dT], - a = Sx_runtime[2].call(null, cst, g); + e = Sx_runtime[15].call(null, item), + f = [0, Sx_types[72].call(null, e), dS], + or = Sx_runtime[2].call(null, cst, f); + if(Sx_types[71].call(null, or)) + var or$0 = or; + else + var + k = Sx_runtime[15].call(null, item), + l = [0, Sx_types[72].call(null, k), dV], + or$0 = Sx_runtime[2].call(null, cst, l); + } else - var a = and$1; + var or$0 = and$1; } else - var a = and$0; + var or$0 = and$0; } else - var a = and; - if(! Sx_types[71].call(null, a)){ - var k = [0, result, [0, [6, [0, qq_expand(item, env), 0]], 0]]; - return Sx_runtime[2].call(null, cst_concat, k); + var or$0 = and; + if(! Sx_types[71].call(null, or$0)){ + var j = [0, result, [0, [6, [0, qq_expand(item, env), 0]], 0]]; + return Sx_runtime[2].call(null, cst_concat, j); } var spliced = trampoline - (eval_expr(Sx_runtime[18].call(null, item, dU), env)), - h = [0, Sx_runtime[74].call(null, spliced), dV], - i = Sx_runtime[2].call(null, cst, h); - if(Sx_types[71].call(null, i)) + (eval_expr(Sx_runtime[18].call(null, item, dT), env)), + g = [0, Sx_runtime[74].call(null, spliced), dU], + h = Sx_runtime[2].call(null, cst, g); + if(Sx_types[71].call(null, h)) return Sx_runtime[2].call (null, cst_concat, [0, result, [0, spliced, 0]]); - var j = Sx_runtime[84].call(null, spliced); - return Sx_types[71].call(null, j) + var i = Sx_runtime[84].call(null, spliced); + return Sx_types[71].call(null, i) ? result : Sx_runtime [2].call @@ -60260,7 +60272,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_concat, [0, result, [0, [6, [0, spliced, 0]], 0]]); }, - dP, + dO, h); } var @@ -60406,48 +60418,157 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var o = Sx_runtime[17].call(null, body); return Sx_types[58].call(null, o, local); } + var + cst_list$0 = "_list", + cst_values = "_values", + d$ = [6, 0], + ea = [3, cst_values], + eb = [3, cst_list$0]; + function call_with_values(producer, consumer){ + var + result = Sx_runtime[8].call(null, producer, d$), + and = Sx_runtime[39].call(null, result), + a = + Sx_types[71].call(null, and) + ? Sx_runtime[26].call(null, result, ea) + : and; + if(! Sx_types[71].call(null, a)) + return Sx_runtime[8].call(null, consumer, [6, [0, result, 0]]); + var b = Sx_runtime[26].call(null, result, eb); + return Sx_runtime[8].call(null, consumer, b); + } + var ec = [2, 1.], ed = [3, cst_values], ee = [3, cst_list$0]; + function sf_let_values(args, env){ + var + clauses = Sx_runtime[15].call(null, args), + body = Sx_runtime[16].call(null, args), + local = Sx_runtime[81].call(null, env), + a = Sx_runtime[6].call(null, clauses); + Stdlib_List[18].call + (null, + function(clause){ + var + names = Sx_runtime[15].call(null, clause), + val_expr = Sx_runtime[18].call(null, clause, ec), + result = trampoline(eval_expr(val_expr, local)), + and = Sx_runtime[39].call(null, result), + a = + Sx_types[71].call(null, and) + ? Sx_runtime[26].call(null, result, ed) + : and, + vs = + Sx_types[71].call(null, a) + ? Sx_runtime[26].call(null, result, ee) + : [6, [0, result, 0]]; + Sx_runtime[94].call + (null, + [15, + cst$9, + function(args){ + if(args){ + var a = args[2]; + if(a && ! a[2]){ + var + name = a[1], + idx = args[1], + b = Sx_runtime[18].call(null, vs, idx), + c = Sx_types[72].call(null, name), + d = Sx_runtime[4].call(null, c); + return Sx_runtime[78].call(null, local, d, b); + } + } + return 0; + }], + names); + return 0; + }, + a); + var b = Sx_runtime[6].call(null, body), last_val = [0, 0]; + Stdlib_List[18].call + (null, + function(e){last_val[1] = trampoline(eval_expr(e, local)); return 0;}, + b); + return last_val[1]; + } + var ef = [2, 1.], eg = [3, cst_values], eh = [3, cst_list$0]; + function sf_define_values(args, env){ + var + names = Sx_runtime[15].call(null, args), + val_expr = Sx_runtime[18].call(null, args, ef), + result = trampoline(eval_expr(val_expr, env)), + and = Sx_runtime[39].call(null, result), + a = + Sx_types[71].call(null, and) + ? Sx_runtime[26].call(null, result, eg) + : and, + vs = + Sx_types[71].call(null, a) + ? Sx_runtime[26].call(null, result, eh) + : [6, [0, result, 0]]; + Sx_runtime[94].call + (null, + [15, + cst$9, + function(args){ + if(args){ + var a = args[2]; + if(a && ! a[2]){ + var + name = a[1], + idx = args[1], + b = Sx_runtime[18].call(null, vs, idx), + c = Sx_types[72].call(null, name), + d = Sx_runtime[4].call(null, c); + return Sx_runtime[78].call(null, env, d, b); + } + } + return 0; + }], + names); + return 0; + } function step_sf_letrec(args, env, kont){ var thk = sf_letrec(args, env), a = Sx_types[93].call(null, thk); return make_cek_state(Sx_types[92].call(null, thk), a, kont); } - var d$ = [2, 1.], ea = [2, 2.], eb = [6, 0], ec = [6, 0], ed = [6, 0]; + var ei = [2, 1.], ej = [2, 2.], ek = [6, 0], el = [6, 0], em = [6, 0]; function step_sf_dynamic_wind(args, env, kont){ var before = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - body = trampoline(eval_expr(Sx_runtime[18].call(null, args, d$), env)), - after = trampoline(eval_expr(Sx_runtime[18].call(null, args, ea), env)); - cek_call(before, eb); + body = trampoline(eval_expr(Sx_runtime[18].call(null, args, ei), env)), + after = trampoline(eval_expr(Sx_runtime[18].call(null, args, ej), env)); + cek_call(before, ek); var winders_len = Sx_runtime[25].call(null, winders_ref[1]); winders_ref[1] = Sx_runtime[19].call(null, after, winders_ref[1]); return continue_with_call (body, - ed, + em, env, - ec, + el, kont_push(make_wind_after_frame(after, winders_len, env), kont)); } var - ee = [0, [2, 1.], 0], - ef = [0, [2, 2.], 0], - eg = [0, [3, cst_keyword], 0], - eh = [0, [3, cst_value], 0], - ei = [2, 1.], - ej = [0, [2, 2.], 0]; + en = [0, [2, 1.], 0], + eo = [0, [2, 2.], 0], + ep = [0, [3, cst_keyword], 0], + eq = [0, [3, cst_value], 0], + er = [2, 1.], + es = [0, [2, 2.], 0]; function sf_scope(args, env){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - rest = Sx_runtime[2].call(null, cst_slice, [0, args, ee]), - b = [0, Sx_runtime[25].call(null, rest), ef], + rest = Sx_runtime[2].call(null, cst_slice, [0, args, en]), + b = [0, Sx_runtime[25].call(null, rest), eo], and = Sx_runtime[2].call(null, cst$2, b); if(Sx_types[71].call(null, and)){ var c = Sx_runtime[15].call(null, rest), - d = [0, Sx_runtime[74].call(null, c), eg], + d = [0, Sx_runtime[74].call(null, c), ep], and$0 = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, and$0)) var e = Sx_runtime[15].call(null, rest), - f = [0, Sx_types[73].call(null, e), eh], + f = [0, Sx_types[73].call(null, e), eq], a = Sx_runtime[2].call(null, cst, f); else var a = and$0; @@ -60456,8 +60577,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(Sx_types[71].call(null, a)) var - g = trampoline(eval_expr(Sx_runtime[18].call(null, rest, ei), env)), - body_exprs = Sx_runtime[2].call(null, cst_slice, [0, rest, ej]), + g = trampoline(eval_expr(Sx_runtime[18].call(null, rest, er), env)), + body_exprs = Sx_runtime[2].call(null, cst_slice, [0, rest, es]), val = g; else var body_exprs = rest, val = 0; @@ -60470,12 +60591,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_runtime[106].call(null, name); return result[1]; } - var ek = [2, 1.], el = [0, [2, 2.], 0]; + var et = [2, 1.], eu = [0, [2, 2.], 0]; function sf_provide(args, env){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - val = trampoline(eval_expr(Sx_runtime[18].call(null, args, ek), env)), - body_exprs = Sx_runtime[2].call(null, cst_slice, [0, args, el]); + val = trampoline(eval_expr(Sx_runtime[18].call(null, args, et), env)), + body_exprs = Sx_runtime[2].call(null, cst_slice, [0, args, eu]); Sx_runtime[105].call(null, name, val); var a = Sx_runtime[6].call(null, body_exprs), result = [0, 0]; Stdlib_List[18].call @@ -60489,27 +60610,27 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_sr_literals = "__sr-literals", cst_sr_rules = "__sr-rules", cst_syntax_rules_body = "__syntax-rules-body__", - em = [0, [3, cst_syntax_rules_body], 0], - en = [3, cst_sr_rules], - eo = [3, cst_sr_literals], - ep = [2, 1.], - eq = [2, 1.]; + ev = [0, [3, cst_syntax_rules_body], 0], + ew = [3, cst_sr_rules], + ex = [3, cst_sr_literals], + ey = [2, 1.], + ez = [2, 1.]; function expand_macro(mac, raw_args, env){ var body = Sx_types[90].call(null, mac), and = Sx_runtime[40].call(null, body); if(Sx_types[71].call(null, and)) var - b = [0, Sx_types[72].call(null, body), em], + b = [0, Sx_types[72].call(null, body), ev], a = Sx_runtime[2].call(null, cst, b); else var a = and; if(Sx_types[71].call(null, a)){ var closure = Sx_types[91].call(null, mac), - c = Sx_runtime[77].call(null, closure, en); + c = Sx_runtime[77].call(null, closure, ew); return syntax_rules_expand - (Sx_runtime[77].call(null, closure, eo), c, raw_args); + (Sx_runtime[77].call(null, closure, ex), c, raw_args); } var d = Sx_types[91].call(null, mac), @@ -60528,11 +60649,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(pair){ var b = [0, Sx_runtime[25].call(null, raw_args), 0], - c = [0, Sx_runtime[18].call(null, pair, ep), b], + c = [0, Sx_runtime[18].call(null, pair, ey), b], d = Sx_runtime[2].call(null, cst$3, c); if(Sx_types[71].call(null, d)) var - e = Sx_runtime[18].call(null, pair, eq), + e = Sx_runtime[18].call(null, pair, ez), a = Sx_runtime[18].call(null, raw_args, e); else var a = 0; @@ -60568,59 +60689,59 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst_IO_suspension_in_non_IO_co = "IO suspension in non-IO context", - er = [3, cst_IO_suspension_in_non_IO_co]; + eA = [3, cst_IO_suspension_in_non_IO_co]; function cek_run(state){ var final = cek_step_loop(state), a = cek_suspended_p(final); if(! Sx_types[71].call(null, a)) return cek_value(final); var match = Sx_types[13][1]; if(match){var hook = match[1]; return caml_call1(hook, final);} - var b = Sx_runtime[3].call(null, er); + var b = Sx_runtime[3].call(null, eA); throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1); } function cek_resume(suspended_state, result){ var a = cek_kont(suspended_state); return cek_step_loop(make_cek_value(result, cek_env(suspended_state), a)); } - var es = [0, [3, cst_eval], 0]; + var eB = [0, [3, cst_eval], 0]; function cek_step(state){ - var a = [0, cek_phase(state), es], b = Sx_runtime[2].call(null, cst, a); + var a = [0, cek_phase(state), eB], b = Sx_runtime[2].call(null, cst, a); return Sx_types[71].call(null, b) ? step_eval(state) : step_continue(state); } var cst_starts_with = "starts-with?", - et = [3, cst_number], - eu = [3, cst_string], - ev = [3, cst_boolean], - ew = [3, cst_nil], - ex = [3, cst_symbol], - ey = [0, [3, cst$13], 0], - ez = [0, [3, "true"], 0], - eA = [0, 1], - eB = [0, [3, "false"], 0], - eC = [0, 0], - eD = [0, [3, cst_nil], 0], - eE = [3, "Undefined symbol: "], - eF = [3, cst_keyword], - eG = [3, cst_dict], - eH = [6, 0], - eI = [3, cst_list], - eJ = [6, 0]; + eC = [3, cst_number], + eD = [3, cst_string], + eE = [3, cst_boolean], + eF = [3, cst_nil], + eG = [3, cst_symbol], + eH = [0, [3, cst$13], 0], + eI = [0, [3, "true"], 0], + eJ = [0, 1], + eK = [0, [3, "false"], 0], + eL = [0, 0], + eM = [0, [3, cst_nil], 0], + eN = [3, "Undefined symbol: "], + eO = [3, cst_keyword], + eP = [3, cst_dict], + eQ = [6, 0], + eR = [3, cst_list], + eS = [6, 0]; function step_eval(state){ var expr = cek_control(state), env = cek_env(state), kont = cek_kont(state), match_val = Sx_runtime[74].call(null, expr); - if(caml_equal(match_val, et)) return make_cek_value(expr, env, kont); - if(caml_equal(match_val, eu)) return make_cek_value(expr, env, kont); - if(caml_equal(match_val, ev)) return make_cek_value(expr, env, kont); - if(caml_equal(match_val, ew)) return make_cek_value(0, env, kont); - if(! caml_equal(match_val, ex)){ - if(caml_equal(match_val, eF)) + if(caml_equal(match_val, eC)) return make_cek_value(expr, env, kont); + if(caml_equal(match_val, eD)) return make_cek_value(expr, env, kont); + if(caml_equal(match_val, eE)) return make_cek_value(expr, env, kont); + if(caml_equal(match_val, eF)) return make_cek_value(0, env, kont); + if(! caml_equal(match_val, eG)){ + if(caml_equal(match_val, eO)) return make_cek_value(Sx_types[73].call(null, expr), env, kont); - if(caml_equal(match_val, eG)){ + if(caml_equal(match_val, eP)){ var ks = Sx_runtime[2].call(null, cst_keys, [0, expr, 0]), h = Sx_runtime[34].call(null, ks); @@ -60631,7 +60752,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= first_key = Sx_runtime[15].call(null, ks), i = Sx_runtime[16].call(null, ks), j = Sx_runtime[6].call(null, i), - remaining_entries = [0, eH]; + remaining_entries = [0, eQ]; Stdlib_List[18].call (null, function(k){ @@ -60650,10 +60771,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state (Sx_runtime[26].call(null, expr, first_key), env, k); } - if(! caml_equal(match_val, eI)) return make_cek_value(expr, env, kont); + if(! caml_equal(match_val, eR)) return make_cek_value(expr, env, kont); var l = Sx_runtime[34].call(null, expr); return Sx_types[71].call(null, l) - ? make_cek_value(eJ, env, kont) + ? make_cek_value(eS, env, kont) : step_eval_list(expr, env, kont); } var @@ -60666,18 +60787,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, b)) var val = Sx_runtime[93].call(null, name); else{ - var c = Sx_runtime[2].call(null, cst, [0, name, ez]); + var c = Sx_runtime[2].call(null, cst, [0, name, eI]); if(Sx_types[71].call(null, c)) - var val = eA; + var val = eJ; else{ - var d = Sx_runtime[2].call(null, cst, [0, name, eB]); + var d = Sx_runtime[2].call(null, cst, [0, name, eK]); if(Sx_types[71].call(null, d)) - var val = eC; + var val = eL; else{ - var e = Sx_runtime[2].call(null, cst, [0, name, eD]); + var e = Sx_runtime[2].call(null, cst, [0, name, eM]); if(! Sx_types[71].call(null, e)){ var - f = [3, Sx_runtime[5].call(null, [0, eE, [0, name, 0]])], + f = [3, Sx_runtime[5].call(null, [0, eN, [0, name, 0]])], g = Sx_runtime[3].call(null, f); throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1); } @@ -60688,12 +60809,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var and = Sx_runtime[84].call(null, val); if(Sx_types[71].call(null, and)) - Sx_runtime[2].call(null, cst_starts_with, [0, name, ey]); + Sx_runtime[2].call(null, cst_starts_with, [0, name, eH]); return make_cek_value(val, env, kont); } - var eK = [0, 0]; + var eT = [0, 0]; function step_sf_raise(args, env, kont){ - var a = kont_push(make_raise_eval_frame(env, eK), kont); + var a = kont_push(make_raise_eval_frame(env, eT), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } var @@ -60704,8 +60825,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_first = "first", cst_handler_bind = "handler-bind", cst_raise = "raise", - eL = [3, "__guard-reraise__"], - eM = + eU = [0, [3, "__guard-reraise__"], 0], + eV = [0, [6, [0, @@ -60714,45 +60835,45 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [6, [0, [4, "nth"], [0, [4, cst_guard_result], [0, [2, 1.], 0]]]], 0]]], [0, [4, cst_guard_result], 0]], - eN = [4, cst_quote], - eO = [6, [0, [4, cst_first], [0, [4, cst_guard_result], 0]]], - eP = [4, cst], - eQ = + eW = [4, cst_quote], + eX = [6, [0, [4, cst_first], [0, [4, cst_guard_result], 0]]], + eY = [4, cst], + eZ = [6, [0, [4, cst], [0, [6, [0, [4, "len"], [0, [4, cst_guard_result], 0]]], [0, [2, 2.], 0]]]], - eR = [6, [0, [4, "list?"], [0, [4, cst_guard_result], 0]]], - eS = [4, cst_and], - eT = [4, cst_if], - eU = [4, cst_begin], - eV = [4, cst_guard_k], - eW = [4, cst_quote], - eX = [4, cst_list], - eY = [4, cst_else], - eZ = [4, cst_cond], - e0 = [4, cst_guard_k], - e1 = [4, cst_fn], - e2 = [6, [0, [0, 1], 0]], - e3 = [6, [0, [4, cst$14], 0]], - e4 = [4, cst_fn], - e5 = [4, cst_handler_bind], - e6 = [6, [0, [4, cst_guard_k], 0]], - e7 = [4, cst_fn], - e8 = [4, cst_call_cc], - e9 = [4, cst_guard_result], - e_ = [4, cst_let]; + e0 = [6, [0, [4, "list?"], [0, [4, cst_guard_result], 0]]], + e1 = [4, cst_and], + e2 = [4, cst_if], + e3 = [4, cst_begin], + e4 = [4, cst_guard_k], + e5 = [4, cst_quote], + e6 = [4, cst_list], + e7 = [4, cst_else], + e8 = [4, cst_cond], + e9 = [4, cst_guard_k], + e_ = [4, cst_fn], + e$ = [6, [0, [0, 1], 0]], + fa = [6, [0, [4, cst$14], 0]], + fb = [4, cst_fn], + fc = [4, cst_handler_bind], + fd = [6, [0, [4, cst_guard_k], 0]], + fe = [4, cst_fn], + ff = [4, cst_call_cc], + fg = [4, cst_guard_result], + fh = [4, cst_let]; function step_sf_guard$0(counter, args, env, kont){ var var_clauses = Sx_runtime[15].call(null, args), body = Sx_runtime[16].call(null, args), var$ = Sx_runtime[15].call(null, var_clauses), clauses = Sx_runtime[16].call(null, var_clauses), - sentinel = Sx_types[59].call(null, eL), + sentinel = Sx_runtime[2].call(null, "gensym", eU), b = - [6, [0, [6, [0, eV, [0, Sx_runtime[19].call(null, eU, body), 0]]], 0]], + [6, [0, [6, [0, e4, [0, Sx_runtime[19].call(null, e3, body), 0]]], 0]], c = Sx_runtime[2].call (null, @@ -60764,45 +60885,45 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, [6, [0, - eY, + e7, [0, [6, - [0, eX, [0, [6, [0, eW, [0, sentinel, 0]]], [0, var$, 0]]]], + [0, e6, [0, [6, [0, e5, [0, sentinel, 0]]], [0, var$, 0]]]], 0]]], 0]], 0]]), - d = [6, [0, [6, [0, e0, [0, Sx_runtime[19].call(null, eZ, c), 0]]], 0]], + d = [6, [0, [6, [0, e9, [0, Sx_runtime[19].call(null, e8, c), 0]]], 0]], e = Sx_runtime[19].call(null, [6, [0, var$, 0]], d), - f = [0, Sx_runtime[19].call(null, e1, e), 0], - g = Sx_runtime[19].call(null, e3, e2), - h = [6, [0, [6, [0, Sx_runtime[19].call(null, e4, g), f]], 0]], + f = [0, Sx_runtime[19].call(null, e_, e), 0], + g = Sx_runtime[19].call(null, fa, e$), + h = [6, [0, [6, [0, Sx_runtime[19].call(null, fb, g), f]], 0]], i = Sx_runtime[19].call(null, h, b), - j = [6, [0, Sx_runtime[19].call(null, e5, i), 0]], - k = Sx_runtime[19].call(null, e6, j), - l = [6, [0, Sx_runtime[19].call(null, e7, k), 0]], + j = [6, [0, Sx_runtime[19].call(null, fc, i), 0]], + k = Sx_runtime[19].call(null, fd, j), + l = [6, [0, Sx_runtime[19].call(null, fe, k), 0]], a = [6, [0, - e_, + fh, [0, - [6, [0, [6, [0, e9, [0, Sx_runtime[19].call(null, e8, l), 0]]], 0]], + [6, [0, [6, [0, fg, [0, Sx_runtime[19].call(null, ff, l), 0]]], 0]], [0, [6, [0, - eT, + e2, [0, [6, [0, - eS, + e1, [0, - eR, + e0, [0, - eQ, + eZ, [0, [6, - [0, eP, [0, eO, [0, [6, [0, eN, [0, sentinel, 0]]], 0]]]], + [0, eY, [0, eX, [0, [6, [0, eW, [0, sentinel, 0]]], 0]]]], 0]]]]], - eM]]], + eV]]], 0]]]]; return counter < 50 ? step_eval_list$0(counter + 1 | 0, a, env, kont) @@ -60822,11 +60943,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (make_case_frame(0, Sx_runtime[16].call(null, args), env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var e$ = [2, 1.], fa = [4, cst_begin]; + var fi = [2, 1.], fj = [4, cst_begin]; function step_sf_let_match(args, env, kont){ var pattern = Sx_runtime[15].call(null, args), - expr = Sx_runtime[18].call(null, args, e$), + expr = Sx_runtime[18].call(null, args, fi), a = Sx_runtime[16].call(null, args), body = Sx_runtime[16].call(null, a); return step_sf_match @@ -60834,7 +60955,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, expr, [0, - [6, [0, pattern, [0, Sx_runtime[19].call(null, fa, body), 0]]], + [6, [0, pattern, [0, Sx_runtime[19].call(null, fj, body), 0]]], 0]]], env, kont); @@ -60848,174 +60969,176 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_syntax_rules = "syntax-rules", render_check = 0, render_fn = 0, - fb = [0, [3, cst_symbol], 0], - fc = [6, 0], - fd = [6, 0], - fe = [0, [3, cst_symbol], 0], - ff = [0, [3, cst_if], 0], - fg = [0, [3, cst_when], 0], - fh = [0, [3, cst_cond], 0], - fi = [0, [3, cst_case], 0], - fj = [0, [3, cst_and], 0], - fk = [0, [3, cst_or], 0], - fl = [0, [3, cst_let], 0], - fm = [0, [3, "let*"], 0], - fn = [0, [3, cst_lambda], 0], - fo = [0, [3, cst_fn], 0], - fp = [0, [3, cst_define], 0], - fq = [0, [3, "defcomp"], 0], - fr = [0, [3, "defisland"], 0], - fs = [0, [3, "defmacro"], 0], - ft = [0, [3, "defio"], 0], - fu = [0, [3, cst_define_foreign], 0], - fv = [0, [3, "io"], 0], - fw = [0, [3, cst_begin], 0], - fx = [0, [3, "do"], 0], - fy = [2, 1.], - fz = [2, 1.], - fA = [0, [2, 2.], 0], - fB = [2, 2.], - fC = [4, cst_do_loop], - fD = [4, cst_begin], - fE = [4, cst_if], - fF = [2, 1.], - fG = [4, cst_do_loop], - fH = [4, cst_let], - fI = [4, cst_begin], - fJ = [0, [3, "guard"], 0], - fK = [0, [3, cst_quote], 0], - fL = [0, [3, "quasiquote"], 0], - fM = [0, [3, "->"], 0], - fN = [0, [3, "->>"], 0], - fO = [0, [3, "|>"], 0], - fP = [0, [3, "as->"], 0], - fQ = [0, [3, "set!"], 0], - fR = [0, [3, "letrec"], 0], - fS = [0, [3, cst_reset], 0], - fT = [0, [3, "shift"], 0], - fU = [0, [3, cst_deref], 0], - fV = [0, [3, cst_scope], 0], - fW = [0, [3, cst_provide], 0], - fX = [0, [3, cst_peek], 0], - fY = [0, [3, "provide!"], 0], - fZ = [0, [3, "context"], 0], - f0 = [0, [3, cst_bind], 0], - f1 = [0, [3, "emit!"], 0], - f2 = [0, [3, cst_emitted], 0], - f3 = [0, [3, cst_handler_bind], 0], - f4 = [0, [3, "restart-case"], 0], - f5 = [0, [3, "signal-condition"], 0], - f6 = [0, [3, "invoke-restart"], 0], - f7 = [0, [3, "match"], 0], - f8 = [0, [3, "let-match"], 0], - f9 = [0, [3, cst_dynamic_wind], 0], - f_ = [0, [3, cst_map], 0], - f$ = [0, [3, cst_map_indexed], 0], - ga = [0, [3, cst_filter], 0], - gb = [0, [3, cst_reduce], 0], - gc = [0, [3, cst_some], 0], - gd = [0, [3, cst_every$0], 0], - ge = [0, [3, cst_for_each], 0], - gf = [0, [3, cst_raise], 0], - gg = [0, [3, "raise-continuable"], 0], - gh = [0, 1], - gi = [0, [3, cst_call_cc], 0], - gj = [0, [3, "call-with-current-continuation"], 0], - gk = [0, [3, cst_perform], 0], - gl = [0, [3, "define-library"], 0], - gm = [0, [3, cst_import], 0], - gn = [0, [3, "define-record-type"], 0], - go = [0, [3, "define-protocol"], 0], - gp = [0, [3, "implement"], 0], - gq = [0, [3, cst_parameterize], 0], - gr = [0, [3, cst_syntax_rules], 0], - gs = [0, [3, "define-syntax"], 0], - gt = [0, [3, cst_lambda], 0], - gu = [0, [3, cst_list], 0]; + fk = [0, [3, cst_symbol], 0], + fl = [6, 0], + fm = [6, 0], + fn = [0, [3, cst_symbol], 0], + fo = [0, [3, cst_if], 0], + fp = [0, [3, cst_when], 0], + fq = [0, [3, cst_cond], 0], + fr = [0, [3, cst_case], 0], + fs = [0, [3, cst_and], 0], + ft = [0, [3, cst_or], 0], + fu = [0, [3, cst_let], 0], + fv = [0, [3, "let*"], 0], + fw = [0, [3, cst_lambda], 0], + fx = [0, [3, cst_fn], 0], + fy = [0, [3, cst_define], 0], + fz = [0, [3, "defcomp"], 0], + fA = [0, [3, "defisland"], 0], + fB = [0, [3, "defmacro"], 0], + fC = [0, [3, "defio"], 0], + fD = [0, [3, cst_define_foreign], 0], + fE = [0, [3, "io"], 0], + fF = [0, [3, cst_begin], 0], + fG = [0, [3, "do"], 0], + fH = [0, [2, 2.], 0], + fI = [2, 1.], + fJ = [2, 1.], + fK = [2, 1.], + fL = [0, [2, 2.], 0], + fM = [2, 2.], + fN = [4, cst_do_loop], + fO = [4, cst_begin], + fP = [4, cst_if], + fQ = [2, 1.], + fR = [4, cst_do_loop], + fS = [4, cst_let], + fT = [4, cst_begin], + fU = [0, [3, "guard"], 0], + fV = [0, [3, cst_quote], 0], + fW = [0, [3, "quasiquote"], 0], + fX = [0, [3, "->"], 0], + fY = [0, [3, "->>"], 0], + fZ = [0, [3, "|>"], 0], + f0 = [0, [3, "as->"], 0], + f1 = [0, [3, "set!"], 0], + f2 = [0, [3, "letrec"], 0], + f3 = [0, [3, cst_reset], 0], + f4 = [0, [3, "shift"], 0], + f5 = [0, [3, cst_deref], 0], + f6 = [0, [3, cst_scope], 0], + f7 = [0, [3, cst_provide], 0], + f8 = [0, [3, cst_peek], 0], + f9 = [0, [3, "provide!"], 0], + f_ = [0, [3, "context"], 0], + f$ = [0, [3, cst_bind], 0], + ga = [0, [3, "emit!"], 0], + gb = [0, [3, cst_emitted], 0], + gc = [0, [3, cst_handler_bind], 0], + gd = [0, [3, "restart-case"], 0], + ge = [0, [3, "signal-condition"], 0], + gf = [0, [3, "invoke-restart"], 0], + gg = [0, [3, "match"], 0], + gh = [0, [3, "let-match"], 0], + gi = [0, [3, cst_dynamic_wind], 0], + gj = [0, [3, cst_map], 0], + gk = [0, [3, cst_map_indexed], 0], + gl = [0, [3, cst_filter], 0], + gm = [0, [3, cst_reduce], 0], + gn = [0, [3, cst_some], 0], + go = [0, [3, cst_every$0], 0], + gp = [0, [3, cst_for_each], 0], + gq = [0, [3, cst_raise], 0], + gr = [0, [3, "raise-continuable"], 0], + gs = [0, 1], + gt = [0, [3, cst_call_cc], 0], + gu = [0, [3, "call-with-current-continuation"], 0], + gv = [0, [3, cst_perform], 0], + gw = [0, [3, "define-library"], 0], + gx = [0, [3, cst_import], 0], + gy = [0, [3, "define-record-type"], 0], + gz = [0, [3, "define-protocol"], 0], + gA = [0, [3, "implement"], 0], + gB = [0, [3, cst_parameterize], 0], + gC = [0, [3, cst_syntax_rules], 0], + gD = [0, [3, "define-syntax"], 0], + gE = [0, [3, cst_lambda], 0], + gF = [0, [3, cst_list], 0]; function step_eval_list$0(counter, expr$1, env, kont){ var expr = expr$1; for(;;){ var head = Sx_runtime[15].call(null, expr), args = Sx_runtime[16].call(null, expr), - e = [0, Sx_runtime[74].call(null, head), fb], + e = [0, Sx_runtime[74].call(null, head), fk], or = Sx_runtime[2].call(null, cst, e); if(Sx_types[71].call(null, or)) var or$0 = or; else{ var - aY = [0, Sx_runtime[74].call(null, head), gt], - or$1 = Sx_runtime[2].call(null, cst, aY); + aZ = [0, Sx_runtime[74].call(null, head), gE], + or$1 = Sx_runtime[2].call(null, cst, aZ); if(Sx_types[71].call(null, or$1)) var or$0 = or$1; else var - aZ = [0, Sx_runtime[74].call(null, head), gu], - or$0 = Sx_runtime[2].call(null, cst, aZ); + a0 = [0, Sx_runtime[74].call(null, head), gF], + or$0 = Sx_runtime[2].call(null, cst, a0); } var f = [0, 1 - Sx_types[71].call(null, or$0)]; if(Sx_types[71].call(null, f)){ var g = Sx_runtime[34].call(null, expr); - if(Sx_types[71].call(null, g)) return make_cek_value(fc, env, kont); + if(Sx_types[71].call(null, g)) return make_cek_value(fl, env, kont); var h = kont_push - (make_map_frame(0, Sx_runtime[16].call(null, expr), fd, env), kont); + (make_map_frame(0, Sx_runtime[16].call(null, expr), fm, env), kont); return make_cek_state(Sx_runtime[15].call(null, expr), env, h); } var - i = [0, Sx_runtime[74].call(null, head), fe], + i = [0, Sx_runtime[74].call(null, head), fn], j = Sx_runtime[2].call(null, cst, i); if(! Sx_types[71].call(null, j)) return step_eval_call(head, args, env, kont); var match_val = Sx_types[72].call(null, head), - k = Sx_runtime[2].call(null, cst, [0, match_val, ff]); + k = Sx_runtime[2].call(null, cst, [0, match_val, fo]); if(Sx_types[71].call(null, k)) return step_sf_if(args, env, kont); - var l = Sx_runtime[2].call(null, cst, [0, match_val, fg]); + var l = Sx_runtime[2].call(null, cst, [0, match_val, fp]); if(Sx_types[71].call(null, l)) return step_sf_when(args, env, kont); - var m = Sx_runtime[2].call(null, cst, [0, match_val, fh]); + var m = Sx_runtime[2].call(null, cst, [0, match_val, fq]); if(Sx_types[71].call(null, m)) return step_sf_cond(args, env, kont); - var n = Sx_runtime[2].call(null, cst, [0, match_val, fi]); + var n = Sx_runtime[2].call(null, cst, [0, match_val, fr]); if(Sx_types[71].call(null, n)) return step_sf_case(args, env, kont); - var o = Sx_runtime[2].call(null, cst, [0, match_val, fj]); + var o = Sx_runtime[2].call(null, cst, [0, match_val, fs]); if(Sx_types[71].call(null, o)) return step_sf_and(args, env, kont); - var p = Sx_runtime[2].call(null, cst, [0, match_val, fk]); + var p = Sx_runtime[2].call(null, cst, [0, match_val, ft]); if(Sx_types[71].call(null, p)) return step_sf_or(args, env, kont); - var q = Sx_runtime[2].call(null, cst, [0, match_val, fl]); + var q = Sx_runtime[2].call(null, cst, [0, match_val, fu]); if(Sx_types[71].call(null, q)) return step_sf_let(args, env, kont); - var r = Sx_runtime[2].call(null, cst, [0, match_val, fm]); + var r = Sx_runtime[2].call(null, cst, [0, match_val, fv]); if(Sx_types[71].call(null, r)) return step_sf_let(args, env, kont); - var s = Sx_runtime[2].call(null, cst, [0, match_val, fn]); + var s = Sx_runtime[2].call(null, cst, [0, match_val, fw]); if(Sx_types[71].call(null, s)) return step_sf_lambda(args, env, kont); - var t = Sx_runtime[2].call(null, cst, [0, match_val, fo]); + var t = Sx_runtime[2].call(null, cst, [0, match_val, fx]); if(Sx_types[71].call(null, t)) return step_sf_lambda(args, env, kont); - var u = Sx_runtime[2].call(null, cst, [0, match_val, fp]); + var u = Sx_runtime[2].call(null, cst, [0, match_val, fy]); if(Sx_types[71].call(null, u)) return step_sf_define(args, env, kont); - var v = Sx_runtime[2].call(null, cst, [0, match_val, fq]); + var v = Sx_runtime[2].call(null, cst, [0, match_val, fz]); if(Sx_types[71].call(null, v)) return make_cek_value(sf_defcomp(args, env), env, kont); - var w = Sx_runtime[2].call(null, cst, [0, match_val, fr]); + var w = Sx_runtime[2].call(null, cst, [0, match_val, fA]); if(Sx_types[71].call(null, w)) return make_cek_value(sf_defisland(args, env), env, kont); - var x = Sx_runtime[2].call(null, cst, [0, match_val, fs]); + var x = Sx_runtime[2].call(null, cst, [0, match_val, fB]); if(Sx_types[71].call(null, x)) return make_cek_value(sf_defmacro(args, env), env, kont); - var y = Sx_runtime[2].call(null, cst, [0, match_val, ft]); + var y = Sx_runtime[2].call(null, cst, [0, match_val, fC]); if(Sx_types[71].call(null, y)) return make_cek_value(sf_defio(args, env), env, kont); - var z = Sx_runtime[2].call(null, cst, [0, match_val, fu]); + var z = Sx_runtime[2].call(null, cst, [0, match_val, fD]); if(Sx_types[71].call(null, z)) return step_sf_define_foreign(args, env, kont); - var A = Sx_runtime[2].call(null, cst, [0, match_val, fv]); + var A = Sx_runtime[2].call(null, cst, [0, match_val, fE]); if(Sx_types[71].call(null, A)) return step_sf_io(args, env, kont); - var B = Sx_runtime[2].call(null, cst, [0, match_val, fw]); + var B = Sx_runtime[2].call(null, cst, [0, match_val, fF]); if(Sx_types[71].call(null, B)) return step_sf_begin(args, env, kont); - var C = Sx_runtime[2].call(null, cst, [0, match_val, fx]); + var C = Sx_runtime[2].call(null, cst, [0, match_val, fG]); if(! Sx_types[71].call(null, C)) break; var - D = Sx_runtime[34].call(null, args), - and = [0, 1 - Sx_types[71].call(null, D)]; + D = [0, Sx_runtime[25].call(null, args), fH], + and = Sx_runtime[2].call(null, cst$2, D); if(Sx_types[71].call(null, and)){ var E = Sx_runtime[15].call(null, args), @@ -61025,11 +61148,26 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= F = Sx_runtime[15].call(null, args), G = Sx_runtime[34].call(null, F), and$1 = [0, 1 - Sx_types[71].call(null, G)]; - if(Sx_types[71].call(null, and$1)) + if(Sx_types[71].call(null, and$1)){ var H = Sx_runtime[15].call(null, args), - I = Sx_runtime[15].call(null, H), - a = Sx_runtime[38].call(null, I); + I = Sx_runtime[6].call(null, H), + and$2 = + [0, + Stdlib_List[33].call + (null, + function(b){ + var a = Sx_runtime[38].call(null, b); + return Sx_types[71].call(null, a); + }, + I)]; + if(Sx_types[71].call(null, and$2)) + var + J = Sx_runtime[18].call(null, args, fI), + a = Sx_runtime[38].call(null, J); + else + var a = and$2; + } else var a = and$1; } @@ -61041,187 +61179,187 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(! Sx_types[71].call(null, a)) return step_sf_begin(args, env, kont); var bindings = Sx_runtime[15].call(null, args), - test_clause = Sx_runtime[18].call(null, args, fy), - J = Sx_runtime[16].call(null, args), - body = Sx_runtime[16].call(null, J), - K = Sx_runtime[6].call(null, bindings); + test_clause = Sx_runtime[18].call(null, args, fJ), + K = Sx_runtime[16].call(null, args), + body = Sx_runtime[16].call(null, K), + L = Sx_runtime[6].call(null, bindings); Stdlib_List[20].call - (null, function(b){return Sx_runtime[15].call(null, b);}, K); - var L = Sx_runtime[6].call(null, bindings); + (null, function(b){return Sx_runtime[15].call(null, b);}, L); + var M = Sx_runtime[6].call(null, bindings); Stdlib_List[20].call - (null, function(b){return Sx_runtime[18].call(null, b, fz);}, L); + (null, function(b){return Sx_runtime[18].call(null, b, fK);}, M); var - M = Sx_runtime[6].call(null, bindings), + N = Sx_runtime[6].call(null, bindings), steps = [6, Stdlib_List[20].call (null, function(b){ var - a = [0, Sx_runtime[25].call(null, b), fA], + a = [0, Sx_runtime[25].call(null, b), fL], c = Sx_runtime[2].call(null, cst$0, a); return Sx_types[71].call(null, c) - ? Sx_runtime[18].call(null, b, fB) + ? Sx_runtime[18].call(null, b, fM) : Sx_runtime[15].call(null, b); }, - M)], + N)], test = Sx_runtime[15].call(null, test_clause), result = Sx_runtime[16].call(null, test_clause), - N = [0, body, [0, [6, [0, Sx_runtime[19].call(null, fC, steps), 0]], 0]], - O = Sx_runtime[2].call(null, cst_append, N), - P = [6, [0, Sx_runtime[19].call(null, fD, O), 0]], - Q = Sx_runtime[34].call(null, result), - R = - Sx_types[71].call(null, Q) ? 0 : Sx_runtime[19].call(null, fI, result), - S = Sx_runtime[19].call(null, R, P), - T = Sx_runtime[19].call(null, test, S), - U = [6, [0, Sx_runtime[19].call(null, fE, T), 0]], - V = Sx_runtime[6].call(null, bindings), - W = + O = [0, body, [0, [6, [0, Sx_runtime[19].call(null, fN, steps), 0]], 0]], + P = Sx_runtime[2].call(null, cst_append, O), + Q = [6, [0, Sx_runtime[19].call(null, fO, P), 0]], + R = Sx_runtime[34].call(null, result), + S = + Sx_types[71].call(null, R) ? 0 : Sx_runtime[19].call(null, fT, result), + T = Sx_runtime[19].call(null, S, Q), + U = Sx_runtime[19].call(null, test, T), + V = [6, [0, Sx_runtime[19].call(null, fP, U), 0]], + W = Sx_runtime[6].call(null, bindings), + X = [6, Stdlib_List[20].call (null, function(b){ - var a = [0, Sx_runtime[18].call(null, b, fF), 0]; + var a = [0, Sx_runtime[18].call(null, b, fQ), 0]; return [6, [0, Sx_runtime[15].call(null, b), a]]; }, - V)], - X = Sx_runtime[19].call(null, W, U), - Y = Sx_runtime[19].call(null, fG, X), - expr$0 = Sx_runtime[19].call(null, fH, Y); + W)], + Y = Sx_runtime[19].call(null, X, V), + Z = Sx_runtime[19].call(null, fR, Y), + expr$0 = Sx_runtime[19].call(null, fS, Z); expr = expr$0; } - var Z = Sx_runtime[2].call(null, cst, [0, match_val, fJ]); - if(Sx_types[71].call(null, Z)) + var _ = Sx_runtime[2].call(null, cst, [0, match_val, fU]); + if(Sx_types[71].call(null, _)) return counter < 50 ? step_sf_guard$0(counter + 1 | 0, args, env, kont) : caml_trampoline_return(step_sf_guard$0, [0, args, env, kont]); - var _ = Sx_runtime[2].call(null, cst, [0, match_val, fK]); - if(Sx_types[71].call(null, _)){ + var $ = Sx_runtime[2].call(null, cst, [0, match_val, fV]); + if(Sx_types[71].call(null, $)){ var - $ = Sx_runtime[34].call(null, args), - aa = Sx_types[71].call(null, $) ? 0 : Sx_runtime[15].call(null, args); - return make_cek_value(aa, env, kont); + aa = Sx_runtime[34].call(null, args), + ab = Sx_types[71].call(null, aa) ? 0 : Sx_runtime[15].call(null, args); + return make_cek_value(ab, env, kont); } - var ab = Sx_runtime[2].call(null, cst, [0, match_val, fL]); - if(Sx_types[71].call(null, ab)) + var ac = Sx_runtime[2].call(null, cst, [0, match_val, fW]); + if(Sx_types[71].call(null, ac)) return make_cek_value (qq_expand(Sx_runtime[15].call(null, args), env), env, kont); - var ac = Sx_runtime[2].call(null, cst, [0, match_val, fM]); - if(Sx_types[71].call(null, ac)) - return step_sf_thread_first(args, env, kont); - var ad = Sx_runtime[2].call(null, cst, [0, match_val, fN]); + var ad = Sx_runtime[2].call(null, cst, [0, match_val, fX]); if(Sx_types[71].call(null, ad)) - return step_sf_thread_last(args, env, kont); - var ae = Sx_runtime[2].call(null, cst, [0, match_val, fO]); + return step_sf_thread_first(args, env, kont); + var ae = Sx_runtime[2].call(null, cst, [0, match_val, fY]); if(Sx_types[71].call(null, ae)) return step_sf_thread_last(args, env, kont); - var af = Sx_runtime[2].call(null, cst, [0, match_val, fP]); - if(Sx_types[71].call(null, af)) return step_sf_thread_as(args, env, kont); - var ag = Sx_runtime[2].call(null, cst, [0, match_val, fQ]); - if(Sx_types[71].call(null, ag)) return step_sf_set_b(args, env, kont); - var ah = Sx_runtime[2].call(null, cst, [0, match_val, fR]); - if(Sx_types[71].call(null, ah)) return step_sf_letrec(args, env, kont); - var ai = Sx_runtime[2].call(null, cst, [0, match_val, fS]); - if(Sx_types[71].call(null, ai)) return step_sf_reset(args, env, kont); - var aj = Sx_runtime[2].call(null, cst, [0, match_val, fT]); - if(Sx_types[71].call(null, aj)) return step_sf_shift(args, env, kont); - var ak = Sx_runtime[2].call(null, cst, [0, match_val, fU]); - if(Sx_types[71].call(null, ak)) return step_sf_deref(args, env, kont); - var al = Sx_runtime[2].call(null, cst, [0, match_val, fV]); - if(Sx_types[71].call(null, al)) return step_sf_scope(args, env, kont); - var am = Sx_runtime[2].call(null, cst, [0, match_val, fW]); - if(Sx_types[71].call(null, am)) return step_sf_provide(args, env, kont); - var an = Sx_runtime[2].call(null, cst, [0, match_val, fX]); - if(Sx_types[71].call(null, an)) return step_sf_peek(args, env, kont); - var ao = Sx_runtime[2].call(null, cst, [0, match_val, fY]); - if(Sx_types[71].call(null, ao)) return step_sf_provide_b(args, env, kont); - var ap = Sx_runtime[2].call(null, cst, [0, match_val, fZ]); - if(Sx_types[71].call(null, ap)) return step_sf_context(args, env, kont); - var aq = Sx_runtime[2].call(null, cst, [0, match_val, f0]); - if(Sx_types[71].call(null, aq)) return step_sf_bind(args, env, kont); - var ar = Sx_runtime[2].call(null, cst, [0, match_val, f1]); - if(Sx_types[71].call(null, ar)) return step_sf_emit(args, env, kont); - var as = Sx_runtime[2].call(null, cst, [0, match_val, f2]); - if(Sx_types[71].call(null, as)) return step_sf_emitted(args, env, kont); - var at = Sx_runtime[2].call(null, cst, [0, match_val, f3]); - if(Sx_types[71].call(null, at)) - return step_sf_handler_bind(args, env, kont); - var au = Sx_runtime[2].call(null, cst, [0, match_val, f4]); + var af = Sx_runtime[2].call(null, cst, [0, match_val, fZ]); + if(Sx_types[71].call(null, af)) + return step_sf_thread_last(args, env, kont); + var ag = Sx_runtime[2].call(null, cst, [0, match_val, f0]); + if(Sx_types[71].call(null, ag)) return step_sf_thread_as(args, env, kont); + var ah = Sx_runtime[2].call(null, cst, [0, match_val, f1]); + if(Sx_types[71].call(null, ah)) return step_sf_set_b(args, env, kont); + var ai = Sx_runtime[2].call(null, cst, [0, match_val, f2]); + if(Sx_types[71].call(null, ai)) return step_sf_letrec(args, env, kont); + var aj = Sx_runtime[2].call(null, cst, [0, match_val, f3]); + if(Sx_types[71].call(null, aj)) return step_sf_reset(args, env, kont); + var ak = Sx_runtime[2].call(null, cst, [0, match_val, f4]); + if(Sx_types[71].call(null, ak)) return step_sf_shift(args, env, kont); + var al = Sx_runtime[2].call(null, cst, [0, match_val, f5]); + if(Sx_types[71].call(null, al)) return step_sf_deref(args, env, kont); + var am = Sx_runtime[2].call(null, cst, [0, match_val, f6]); + if(Sx_types[71].call(null, am)) return step_sf_scope(args, env, kont); + var an = Sx_runtime[2].call(null, cst, [0, match_val, f7]); + if(Sx_types[71].call(null, an)) return step_sf_provide(args, env, kont); + var ao = Sx_runtime[2].call(null, cst, [0, match_val, f8]); + if(Sx_types[71].call(null, ao)) return step_sf_peek(args, env, kont); + var ap = Sx_runtime[2].call(null, cst, [0, match_val, f9]); + if(Sx_types[71].call(null, ap)) return step_sf_provide_b(args, env, kont); + var aq = Sx_runtime[2].call(null, cst, [0, match_val, f_]); + if(Sx_types[71].call(null, aq)) return step_sf_context(args, env, kont); + var ar = Sx_runtime[2].call(null, cst, [0, match_val, f$]); + if(Sx_types[71].call(null, ar)) return step_sf_bind(args, env, kont); + var as = Sx_runtime[2].call(null, cst, [0, match_val, ga]); + if(Sx_types[71].call(null, as)) return step_sf_emit(args, env, kont); + var at = Sx_runtime[2].call(null, cst, [0, match_val, gb]); + if(Sx_types[71].call(null, at)) return step_sf_emitted(args, env, kont); + var au = Sx_runtime[2].call(null, cst, [0, match_val, gc]); if(Sx_types[71].call(null, au)) + return step_sf_handler_bind(args, env, kont); + var av = Sx_runtime[2].call(null, cst, [0, match_val, gd]); + if(Sx_types[71].call(null, av)) return step_sf_restart_case(args, env, kont); - var av = Sx_runtime[2].call(null, cst, [0, match_val, f5]); - if(Sx_types[71].call(null, av)) return step_sf_signal(args, env, kont); - var aw = Sx_runtime[2].call(null, cst, [0, match_val, f6]); - if(Sx_types[71].call(null, aw)) + var aw = Sx_runtime[2].call(null, cst, [0, match_val, ge]); + if(Sx_types[71].call(null, aw)) return step_sf_signal(args, env, kont); + var ax = Sx_runtime[2].call(null, cst, [0, match_val, gf]); + if(Sx_types[71].call(null, ax)) return step_sf_invoke_restart(args, env, kont); - var ax = Sx_runtime[2].call(null, cst, [0, match_val, f7]); - if(Sx_types[71].call(null, ax)) return step_sf_match(args, env, kont); - var ay = Sx_runtime[2].call(null, cst, [0, match_val, f8]); - if(Sx_types[71].call(null, ay)) return step_sf_let_match(args, env, kont); - var az = Sx_runtime[2].call(null, cst, [0, match_val, f9]); - if(Sx_types[71].call(null, az)) + var ay = Sx_runtime[2].call(null, cst, [0, match_val, gg]); + if(Sx_types[71].call(null, ay)) return step_sf_match(args, env, kont); + var az = Sx_runtime[2].call(null, cst, [0, match_val, gh]); + if(Sx_types[71].call(null, az)) return step_sf_let_match(args, env, kont); + var aA = Sx_runtime[2].call(null, cst, [0, match_val, gi]); + if(Sx_types[71].call(null, aA)) return step_sf_dynamic_wind(args, env, kont); - var aA = Sx_runtime[2].call(null, cst, [0, match_val, f_]); - if(Sx_types[71].call(null, aA)) return step_ho_map(args, env, kont); - var aB = Sx_runtime[2].call(null, cst, [0, match_val, f$]); - if(Sx_types[71].call(null, aB)) + var aB = Sx_runtime[2].call(null, cst, [0, match_val, gj]); + if(Sx_types[71].call(null, aB)) return step_ho_map(args, env, kont); + var aC = Sx_runtime[2].call(null, cst, [0, match_val, gk]); + if(Sx_types[71].call(null, aC)) return step_ho_map_indexed(args, env, kont); - var aC = Sx_runtime[2].call(null, cst, [0, match_val, ga]); - if(Sx_types[71].call(null, aC)) return step_ho_filter(args, env, kont); - var aD = Sx_runtime[2].call(null, cst, [0, match_val, gb]); - if(Sx_types[71].call(null, aD)) return step_ho_reduce(args, env, kont); - var aE = Sx_runtime[2].call(null, cst, [0, match_val, gc]); - if(Sx_types[71].call(null, aE)) return step_ho_some(args, env, kont); - var aF = Sx_runtime[2].call(null, cst, [0, match_val, gd]); - if(Sx_types[71].call(null, aF)) return step_ho_every(args, env, kont); - var aG = Sx_runtime[2].call(null, cst, [0, match_val, ge]); - if(Sx_types[71].call(null, aG)) return step_ho_for_each(args, env, kont); - var aH = Sx_runtime[2].call(null, cst, [0, match_val, gf]); - if(Sx_types[71].call(null, aH)) return step_sf_raise(args, env, kont); - var aI = Sx_runtime[2].call(null, cst, [0, match_val, gg]); - if(Sx_types[71].call(null, aI)){ - var aJ = kont_push(make_raise_eval_frame(env, gh), kont); - return make_cek_state(Sx_runtime[15].call(null, args), env, aJ); + var aD = Sx_runtime[2].call(null, cst, [0, match_val, gl]); + if(Sx_types[71].call(null, aD)) return step_ho_filter(args, env, kont); + var aE = Sx_runtime[2].call(null, cst, [0, match_val, gm]); + if(Sx_types[71].call(null, aE)) return step_ho_reduce(args, env, kont); + var aF = Sx_runtime[2].call(null, cst, [0, match_val, gn]); + if(Sx_types[71].call(null, aF)) return step_ho_some(args, env, kont); + var aG = Sx_runtime[2].call(null, cst, [0, match_val, go]); + if(Sx_types[71].call(null, aG)) return step_ho_every(args, env, kont); + var aH = Sx_runtime[2].call(null, cst, [0, match_val, gp]); + if(Sx_types[71].call(null, aH)) return step_ho_for_each(args, env, kont); + var aI = Sx_runtime[2].call(null, cst, [0, match_val, gq]); + if(Sx_types[71].call(null, aI)) return step_sf_raise(args, env, kont); + var aJ = Sx_runtime[2].call(null, cst, [0, match_val, gr]); + if(Sx_types[71].call(null, aJ)){ + var aK = kont_push(make_raise_eval_frame(env, gs), kont); + return make_cek_state(Sx_runtime[15].call(null, args), env, aK); } - var aK = Sx_runtime[2].call(null, cst, [0, match_val, gi]); - if(Sx_types[71].call(null, aK)) return step_sf_callcc(args, env, kont); - var aL = Sx_runtime[2].call(null, cst, [0, match_val, gj]); + var aL = Sx_runtime[2].call(null, cst, [0, match_val, gt]); if(Sx_types[71].call(null, aL)) return step_sf_callcc(args, env, kont); - var aM = Sx_runtime[2].call(null, cst, [0, match_val, gk]); - if(Sx_types[71].call(null, aM)) return step_sf_perform(args, env, kont); - var aN = Sx_runtime[2].call(null, cst, [0, match_val, gl]); - if(Sx_types[71].call(null, aN)) + var aM = Sx_runtime[2].call(null, cst, [0, match_val, gu]); + if(Sx_types[71].call(null, aM)) return step_sf_callcc(args, env, kont); + var aN = Sx_runtime[2].call(null, cst, [0, match_val, gv]); + if(Sx_types[71].call(null, aN)) return step_sf_perform(args, env, kont); + var aO = Sx_runtime[2].call(null, cst, [0, match_val, gw]); + if(Sx_types[71].call(null, aO)) return step_sf_define_library(args, env, kont); - var aO = Sx_runtime[2].call(null, cst, [0, match_val, gm]); - if(Sx_types[71].call(null, aO)) return step_sf_import(args, env, kont); - var aP = Sx_runtime[2].call(null, cst, [0, match_val, gn]); - if(Sx_types[71].call(null, aP)) - return make_cek_value(sf_define_record_type(args, env), env, kont); - var aQ = Sx_runtime[2].call(null, cst, [0, match_val, go]); + var aP = Sx_runtime[2].call(null, cst, [0, match_val, gx]); + if(Sx_types[71].call(null, aP)) return step_sf_import(args, env, kont); + var aQ = Sx_runtime[2].call(null, cst, [0, match_val, gy]); if(Sx_types[71].call(null, aQ)) - return make_cek_value(sf_define_protocol(args, env), env, kont); - var aR = Sx_runtime[2].call(null, cst, [0, match_val, gp]); + return make_cek_value(sf_define_record_type(args, env), env, kont); + var aR = Sx_runtime[2].call(null, cst, [0, match_val, gz]); if(Sx_types[71].call(null, aR)) - return make_cek_value(sf_implement(args, env), env, kont); - var aS = Sx_runtime[2].call(null, cst, [0, match_val, gq]); + return make_cek_value(sf_define_protocol(args, env), env, kont); + var aS = Sx_runtime[2].call(null, cst, [0, match_val, gA]); if(Sx_types[71].call(null, aS)) - return step_sf_parameterize(args, env, kont); - var aT = Sx_runtime[2].call(null, cst, [0, match_val, gr]); + return make_cek_value(sf_implement(args, env), env, kont); + var aT = Sx_runtime[2].call(null, cst, [0, match_val, gB]); if(Sx_types[71].call(null, aT)) + return step_sf_parameterize(args, env, kont); + var aU = Sx_runtime[2].call(null, cst, [0, match_val, gC]); + if(Sx_types[71].call(null, aU)) return make_cek_value(sf_syntax_rules(args, env), env, kont); - var aU = Sx_runtime[2].call(null, cst, [0, match_val, gs]); - if(Sx_types[71].call(null, aU)) return step_sf_define(args, env, kont); + var aV = Sx_runtime[2].call(null, cst, [0, match_val, gD]); + if(Sx_types[71].call(null, aV)) return step_sf_define(args, env, kont); var - and$2 = + and$3 = Sx_runtime[2].call (null, cst_has_key, [0, custom_special_forms, [0, match_val, 0]]); - if(Sx_types[71].call(null, and$2)) + if(Sx_types[71].call(null, and$3)) var - aV = Sx_runtime[76].call(null, env, match_val), - b = [0, 1 - Sx_types[71].call(null, aV)]; + aW = Sx_runtime[76].call(null, env, match_val), + b = [0, 1 - Sx_types[71].call(null, aW)]; else - var b = and$2; + var b = and$3; if(Sx_types[71].call(null, b)) return make_cek_value (cek_call @@ -61229,25 +61367,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [6, [0, args, [0, env, 0]]]), env, kont); - var and$3 = Sx_runtime[76].call(null, env, match_val); - if(Sx_types[71].call(null, and$3)) + var and$4 = Sx_runtime[76].call(null, env, match_val); + if(Sx_types[71].call(null, and$4)) var - aW = Sx_runtime[77].call(null, env, match_val), - c = Sx_runtime[89].call(null, aW); + aX = Sx_runtime[77].call(null, env, match_val), + c = Sx_runtime[89].call(null, aX); else - var c = and$3; + var c = and$4; if(Sx_types[71].call(null, c)){ var mac = Sx_runtime[77].call(null, env, match_val); return make_cek_state(expand_macro(mac, args, env), env, kont); } if(Sx_types[71].call(null, render_check)) var - aX = Sx_runtime[76].call(null, env, match_val), - and$4 = [0, 1 - Sx_types[71].call(null, aX)], + aY = Sx_runtime[76].call(null, env, match_val), + and$5 = [0, 1 - Sx_types[71].call(null, aY)], d = - Sx_types[71].call(null, and$4) + Sx_types[71].call(null, and$5) ? cek_call(render_check, [6, [0, expr, [0, env, 0]]]) - : and$4; + : and$5; else var d = render_check; return Sx_types[71].call(null, d) @@ -61259,36 +61397,111 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return caml_trampoline(step_eval_list$0(0, expr, env, kont)); } var - gv = [6, 0], - gw = [0, [3, cst_provide], 0], - gx = [3, cst_value], - gy = [6, 0], - gz = [6, 0], - gA = [3, cst_name], - gB = [3, cst_env]; + cst_promise = "_promise", + cst_forced = "forced", + cst_thunk = "thunk", + gG = [6, 0], + gH = [0, 1], + gI = [0, 0]; + function sf_delay(args, env){ + var + a = Sx_runtime[15].call(null, args), + thunk = Sx_types[42].call(null, gG, a, env), + d = Stdlib_Hashtbl[1].call(null, 0, 4); + Stdlib_Hashtbl[11].call(null, d, cst_promise, gH); + Stdlib_Hashtbl[11].call(null, d, cst_forced, gI); + Stdlib_Hashtbl[11].call(null, d, cst_thunk, thunk); + Stdlib_Hashtbl[11].call(null, d, cst_value, 0); + return [7, d]; + } + var + cst_iterative = "_iterative", + gJ = [6, 0], + gK = [0, 1], + gL = [0, 1], + gM = [0, 0]; + function sf_delay_force(args, env){ + var + a = Sx_runtime[15].call(null, args), + thunk = Sx_types[42].call(null, gJ, a, env), + d = Stdlib_Hashtbl[1].call(null, 0, 5); + Stdlib_Hashtbl[11].call(null, d, cst_iterative, gK); + Stdlib_Hashtbl[11].call(null, d, cst_promise, gL); + Stdlib_Hashtbl[11].call(null, d, cst_forced, gM); + Stdlib_Hashtbl[11].call(null, d, cst_thunk, thunk); + Stdlib_Hashtbl[11].call(null, d, cst_value, 0); + return [7, d]; + } + var gN = [3, cst_promise]; + function promise_p(v){ + var and = Sx_runtime[39].call(null, v); + return Sx_types[71].call(null, and) + ? Sx_runtime[26].call(null, v, gN) + : and; + } + var gO = [0, 1], gP = [0, 1]; + function make_promise(v){ + var d = Stdlib_Hashtbl[1].call(null, 0, 3); + Stdlib_Hashtbl[11].call(null, d, cst_promise, gO); + Stdlib_Hashtbl[11].call(null, d, cst_forced, gP); + Stdlib_Hashtbl[11].call(null, d, cst_value, v); + return [7, d]; + } + var + gQ = [3, cst_forced], + gR = [3, cst_value], + gS = [6, 0], + gT = [3, cst_thunk], + gU = [3, cst_iterative], + gV = [0, 1], + gW = [3, cst_forced], + gX = [3, cst_value]; + function force(p){ + var a = promise_p(p), b = [0, 1 - Sx_types[71].call(null, a)]; + if(Sx_types[71].call(null, b)) return p; + var c = Sx_runtime[26].call(null, p, gQ); + if(Sx_types[71].call(null, c)) return Sx_runtime[26].call(null, p, gR); + var + d = Sx_runtime[26].call(null, p, gT), + result = Sx_runtime[8].call(null, d, gS), + and = Sx_runtime[26].call(null, p, gU), + e = Sx_types[71].call(null, and) ? promise_p(result) : and, + final = Sx_types[71].call(null, e) ? force(result) : result; + Sx_runtime[12].call(null, p, gW, gV); + Sx_runtime[12].call(null, p, gX, final); + return final; + } + var + gY = [6, 0], + gZ = [0, [3, cst_provide], 0], + g0 = [3, cst_value], + g1 = [6, 0], + g2 = [6, 0], + g3 = [3, cst_name], + g4 = [3, cst_env]; function kont_extract_provides(kont){ var a = Sx_runtime[34].call(null, kont); - if(Sx_types[71].call(null, a)) return gv; + if(Sx_types[71].call(null, a)) return gY; var frame = Sx_runtime[15].call(null, kont), rest_frames = kont_extract_provides(Sx_runtime[16].call(null, kont)), - b = [0, frame_type(frame), gw], + b = [0, frame_type(frame), gZ], c = Sx_runtime[2].call(null, cst, b); if(! Sx_types[71].call(null, c)) return rest_frames; var - d = Sx_runtime[26].call(null, frame, gx), - e = Sx_runtime[26].call(null, frame, gA), + d = Sx_runtime[26].call(null, frame, g0), + e = Sx_runtime[26].call(null, frame, g3), f = [23, [0, cst_provide, - Sx_runtime[26].call(null, frame, gB), + Sx_runtime[26].call(null, frame, g4), e, 0, - gz, + g2, 0, 0, - gy, + g1, d, 0]]; return Sx_runtime[19].call(null, f, rest_frames); @@ -61298,8 +61511,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= provide_batch_depth_ref = [], provide_batch_queue_ref = [], provide_subscribers_ref = [], - gC = [0, [2, 0.], 0], - gD = [6, [0, 0, 0]]; + g5 = [0, [2, 0.], 0], + g6 = [6, [0, 0, 0]]; function fire_provide_subscribers(name){ var subs = Sx_runtime[26].call(null, provide_subscribers_ref[1], name); if(Sx_types[71].call(null, subs)) @@ -61310,7 +61523,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = subs; if(! Sx_types[71].call(null, a)) return 0; var - c = Sx_runtime[2].call(null, cst$0, [0, provide_batch_depth_ref[1], gC]); + c = Sx_runtime[2].call(null, cst$0, [0, provide_batch_depth_ref[1], g5]); if(Sx_types[71].call(null, c)){ var d = Sx_runtime[6].call(null, subs); Stdlib_List[18].call @@ -61330,40 +61543,40 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; } var e = Sx_runtime[6].call(null, subs); - Stdlib_List[18].call(null, function(sub){cek_call(sub, gD); return 0;}, e); + Stdlib_List[18].call(null, function(sub){cek_call(sub, g6); return 0;}, e); return 0; } - var gE = [0, [2, 1.], 0]; + var g7 = [0, [2, 1.], 0]; function batch_begin_b(param){ provide_batch_depth_ref[1] = - Sx_runtime[2].call(null, cst$8, [0, provide_batch_depth_ref[1], gE]); + Sx_runtime[2].call(null, cst$8, [0, provide_batch_depth_ref[1], g7]); return 0; } var - gF = [0, [2, 1.], 0], - gG = [0, [2, 0.], 0], - gH = [6, 0], - gI = [6, [0, 0, 0]]; + g8 = [0, [2, 1.], 0], + g9 = [0, [2, 0.], 0], + g_ = [6, 0], + g$ = [6, [0, 0, 0]]; function batch_end_b(param){ provide_batch_depth_ref[1] = - Sx_runtime[2].call(null, cst$5, [0, provide_batch_depth_ref[1], gF]); + Sx_runtime[2].call(null, cst$5, [0, provide_batch_depth_ref[1], g8]); var - a = Sx_runtime[2].call(null, cst, [0, provide_batch_depth_ref[1], gG]); + a = Sx_runtime[2].call(null, cst, [0, provide_batch_depth_ref[1], g9]); if(! Sx_types[71].call(null, a)) return 0; var queue = provide_batch_queue_ref[1]; - provide_batch_queue_ref[1] = gH; + provide_batch_queue_ref[1] = g_; var b = Sx_runtime[6].call(null, queue); - Stdlib_List[18].call(null, function(sub){cek_call(sub, gI); return 0;}, b); + Stdlib_List[18].call(null, function(sub){cek_call(sub, g$); return 0;}, b); return 0; } - var bind_tracking_ref = [], gJ = [6, 0]; + var bind_tracking_ref = [], ha = [6, 0]; function step_sf_bind(args, env, kont){ var body = Sx_runtime[15].call(null, args), prev = bind_tracking_ref[1]; - bind_tracking_ref[1] = gJ; + bind_tracking_ref[1] = ha; return make_cek_state (body, env, kont_push(make_bind_frame(body, env, prev), kont)); } - var gK = [6, 0]; + var hb = [6, 0]; function step_sf_parameterize(args, env, kont){ var bindings = Sx_runtime[15].call(null, args), @@ -61374,15 +61587,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, or$0)) return step_sf_begin(body, env, kont); var first_pair = Sx_runtime[15].call(null, bindings), - a = kont_push(make_parameterize_frame(bindings, 0, gK, body, env), kont); + a = kont_push(make_parameterize_frame(bindings, 0, hb, body, env), kont); return make_cek_state(Sx_runtime[15].call(null, first_pair), env, a); } - var gL = [0, [3, cst$14], 0], gM = [2, 0.], gN = [2, 0.]; + var hc = [0, [3, cst$14], 0], hd = [2, 0.], he = [2, 0.]; function syntax_rules_match(pattern, form, literals){ var and = Sx_runtime[40].call(null, pattern); if(Sx_types[71].call(null, and)) var - e = [0, Sx_types[72].call(null, pattern), gL], + e = [0, Sx_types[72].call(null, pattern), hc], a = Sx_runtime[2].call(null, cst, e); else var a = and; @@ -61440,7 +61653,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ? Sx_runtime[38].call(null, form) : and$4; if(Sx_types[71].call(null, m)) - return syntax_rules_match_list(pattern, gN, form, gM, literals); + return syntax_rules_match_list(pattern, he, form, hd, literals); var n = Sx_runtime[2].call(null, cst, [0, pattern, [0, form, 0]]); return Sx_types[71].call(null, n) ? [7, Stdlib_Hashtbl[1].call(null, 0, 0)] @@ -61448,17 +61661,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst$15 = "...", - gO = [0, [2, 1.], 0], - gP = [0, [2, 1.], 0], - gQ = [0, [3, cst$15], 0], - gR = [0, [2, 1.], 0], - gS = [0, [2, 2.], 0], - gT = [0, [2, 2.], 0], - gU = [0, [2, 0.], 0], - gV = [0, 0, 0], - gW = [0, [2, 2.], 0], - gX = [0, [2, 1.], 0], - gY = [0, [2, 1.], 0]; + hf = [0, [2, 1.], 0], + hg = [0, [2, 1.], 0], + hh = [0, [3, cst$15], 0], + hi = [0, [2, 1.], 0], + hj = [0, [2, 2.], 0], + hk = [0, [2, 2.], 0], + hl = [0, [2, 0.], 0], + hm = [0, 0, 0], + hn = [0, [2, 2.], 0], + ho = [0, [2, 1.], 0], + hp = [0, [2, 1.], 0]; function syntax_rules_match_list(pattern, pi, form, fi, literals){ var plen = Sx_runtime[25].call(null, pattern), @@ -61473,18 +61686,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var c = Sx_runtime[2].call(null, cst$2, [0, pi, [0, plen, 0]]); if(Sx_types[71].call(null, c)) return 0; var - d = [0, Sx_runtime[2].call(null, cst$8, [0, pi, gO]), [0, plen, 0]], + d = [0, Sx_runtime[2].call(null, cst$8, [0, pi, hf]), [0, plen, 0]], and$0 = Sx_runtime[2].call(null, cst$3, d); if(Sx_types[71].call(null, and$0)){ var - e = Sx_runtime[2].call(null, cst$8, [0, pi, gP]), + e = Sx_runtime[2].call(null, cst$8, [0, pi, hg]), f = Sx_runtime[18].call(null, pattern, e), and$1 = Sx_runtime[40].call(null, f); if(Sx_types[71].call(null, and$1)) var - g = Sx_runtime[2].call(null, cst$8, [0, pi, gR]), + g = Sx_runtime[2].call(null, cst$8, [0, pi, hi]), h = Sx_runtime[18].call(null, pattern, g), - i = [0, Sx_types[72].call(null, h), gQ], + i = [0, Sx_types[72].call(null, h), hh], a = Sx_runtime[2].call(null, cst, i); else var a = and$1; @@ -61494,15 +61707,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)){ var sub_pat = Sx_runtime[18].call(null, pattern, pi), - j = [0, plen, [0, Sx_runtime[2].call(null, cst$8, [0, pi, gS]), 0]]; + j = [0, plen, [0, Sx_runtime[2].call(null, cst$8, [0, pi, hj]), 0]]; Sx_runtime[2].call(null, cst$5, j); Sx_runtime[2].call(null, cst$5, [0, flen, [0, fi, 0]]); var - k = [0, plen, [0, Sx_runtime[2].call(null, cst$8, [0, pi, gT]), 0]], + k = [0, plen, [0, Sx_runtime[2].call(null, cst$8, [0, pi, hk]), 0]], l = [0, Sx_runtime[2].call(null, cst$5, k), 0], m = [0, Sx_runtime[2].call(null, cst$5, [0, flen, [0, fi, 0]]), l], n_ellipsis = Sx_runtime[2].call(null, cst$5, m), - n = Sx_runtime[2].call(null, cst$3, [0, n_ellipsis, gU]); + n = Sx_runtime[2].call(null, cst$3, [0, n_ellipsis, hl]); if(Sx_types[71].call(null, n)) return 0; var o = @@ -61527,14 +61740,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(f){return syntax_rules_match(sub_pat, f, literals);}, r)], - s = Sx_runtime[2].call(null, cst_contains, [0, sub_bindings, gV]); + s = Sx_runtime[2].call(null, cst_contains, [0, sub_bindings, hm]); if(Sx_types[71].call(null, s)) return 0; var t = Sx_runtime[2].call(null, cst$8, [0, fi, [0, n_ellipsis, 0]]), rest_result = syntax_rules_match_list (pattern, - Sx_runtime[2].call(null, cst$8, [0, pi, gW]), + Sx_runtime[2].call(null, cst$8, [0, pi, hn]), form, t, literals), @@ -61596,11 +61809,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= A = Sx_runtime[84].call(null, sub_result); if(Sx_types[71].call(null, A)) return 0; var - B = Sx_runtime[2].call(null, cst$8, [0, fi, gX]), + B = Sx_runtime[2].call(null, cst$8, [0, fi, ho]), rest_result$0 = syntax_rules_match_list (pattern, - Sx_runtime[2].call(null, cst$8, [0, pi, gY]), + Sx_runtime[2].call(null, cst$8, [0, pi, hp]), form, B, literals), @@ -61650,7 +61863,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= 0, f); } - var gZ = [6, 0], g0 = [6, 0]; + var hq = [6, 0], hr = [6, 0]; function syntax_rules_find_all_vars(template, bindings){ var and = Sx_runtime[40].call(null, template); if(Sx_types[71].call(null, and)){ @@ -61670,7 +61883,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)) return [6, [0, Sx_types[72].call(null, template), 0]]; var e = Sx_runtime[38].call(null, template); - if(! Sx_types[71].call(null, e)) return g0; + if(! Sx_types[71].call(null, e)) return hr; var f = Sx_runtime[6].call(null, template); return Stdlib_List[26].call (null, @@ -61679,10 +61892,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= a = [0, acc, [0, syntax_rules_find_all_vars(t, bindings), 0]]; return Sx_runtime[2].call(null, cst_append, a); }, - gZ, + hq, f); } - var g1 = [2, 0.]; + var hs = [2, 0.]; function syntax_rules_instantiate(template, bindings){ var and = Sx_runtime[40].call(null, template); if(Sx_types[71].call(null, and)) @@ -61702,39 +61915,39 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var f = Sx_runtime[34].call(null, template); return Sx_types[71].call(null, f) ? template - : syntax_rules_instantiate_list(template, g1, bindings); + : syntax_rules_instantiate_list(template, hs, bindings); } var - g2 = [6, 0], - g3 = [0, [2, 1.], 0], - g4 = [0, [2, 1.], 0], - g5 = [0, [3, cst$15], 0], - g6 = [0, [2, 1.], 0], - g7 = [0, [2, 2.], 0], - g8 = [0, [2, 2.], 0], - g9 = [0, [2, 1.], 0]; + ht = [6, 0], + hu = [0, [2, 1.], 0], + hv = [0, [2, 1.], 0], + hw = [0, [3, cst$15], 0], + hx = [0, [2, 1.], 0], + hy = [0, [2, 2.], 0], + hz = [0, [2, 2.], 0], + hA = [0, [2, 1.], 0]; function syntax_rules_instantiate_list(template, i$1, bindings){ var i = i$1; for(;;){ var a = [0, i, [0, Sx_runtime[25].call(null, template), 0]], b = Sx_runtime[2].call(null, cst$2, a); - if(Sx_types[71].call(null, b)) return g2; + if(Sx_types[71].call(null, b)) return ht; var elem = Sx_runtime[18].call(null, template, i), c = [0, Sx_runtime[25].call(null, template), 0], - d = [0, Sx_runtime[2].call(null, cst$8, [0, i, g3]), c], + d = [0, Sx_runtime[2].call(null, cst$8, [0, i, hu]), c], and = Sx_runtime[2].call(null, cst$3, d); if(Sx_types[71].call(null, and)){ var - e = Sx_runtime[2].call(null, cst$8, [0, i, g4]), + e = Sx_runtime[2].call(null, cst$8, [0, i, hv]), f = Sx_runtime[18].call(null, template, e), and$0 = Sx_runtime[40].call(null, f); if(Sx_types[71].call(null, and$0)) var - g = Sx_runtime[2].call(null, cst$8, [0, i, g6]), + g = Sx_runtime[2].call(null, cst$8, [0, i, hx]), h = Sx_runtime[18].call(null, template, g), - j = [0, Sx_types[72].call(null, h), g5], + j = [0, Sx_types[72].call(null, h), hw], has_ellipsis = Sx_runtime[2].call(null, cst, j); else var has_ellipsis = and$0; @@ -61745,7 +61958,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var p = syntax_rules_instantiate_list - (template, Sx_runtime[2].call(null, cst$8, [0, i, g9]), bindings), + (template, Sx_runtime[2].call(null, cst$8, [0, i, hA]), bindings), q = syntax_rules_instantiate(elem, bindings); return Sx_runtime[19].call(null, q, p); } @@ -61753,7 +61966,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= all_vars = syntax_rules_find_all_vars(elem, bindings), k = Sx_runtime[34].call(null, all_vars); if(! Sx_types[71].call(null, k)) break; - var i$0 = Sx_runtime[2].call(null, cst$8, [0, i, g7]); + var i$0 = Sx_runtime[2].call(null, cst$8, [0, i, hy]); i = i$0; } var @@ -61795,25 +62008,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= o)], rest_result = syntax_rules_instantiate_list - (template, Sx_runtime[2].call(null, cst$8, [0, i, g8]), bindings); + (template, Sx_runtime[2].call(null, cst$8, [0, i, hz]), bindings); return Sx_runtime[2].call (null, cst_append, [0, expanded, [0, rest_result, 0]]); } - var g_ = [3, cst$14]; + var hB = [3, cst$14]; function syntax_rules_expand(literals, rules, form){ var - a = Sx_types[59].call(null, g_), + a = Sx_types[59].call(null, hB), full_form = Sx_runtime[19].call(null, a, form); return syntax_rules_try_rules(literals, rules, full_form); } - var g$ = [3, "syntax-rules: no pattern matched for "], ha = [2, 1.]; + var hC = [3, "syntax-rules: no pattern matched for "], hD = [2, 1.]; function syntax_rules_try_rules(literals, rules$1, full_form){ var rules = rules$1; for(;;){ var a = Sx_runtime[34].call(null, rules); if(Sx_types[71].call(null, a)){ var - b = [0, g$, [0, Sx_runtime[69].call(null, full_form), 0]], + b = [0, hC, [0, Sx_runtime[69].call(null, full_form), 0]], c = [3, Sx_runtime[5].call(null, b)], d = Sx_runtime[3].call(null, c); throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1); @@ -61821,7 +62034,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var rule = Sx_runtime[15].call(null, rules), pattern = Sx_runtime[15].call(null, rule), - template = Sx_runtime[18].call(null, rule, ha), + template = Sx_runtime[18].call(null, rule, hD), bindings = syntax_rules_match(pattern, full_form, literals), e = Sx_runtime[84].call(null, bindings), f = [0, 1 - Sx_types[71].call(null, e)]; @@ -61832,13 +62045,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } } var - hb = [3, cst_sr_literals], - hc = [3, cst_sr_rules], - hd = [3, cst_syntax_rules], - he = [4, cst_syntax_rules_body], - hf = [3, "__sr-form"], - hg = [6, 0], - hh = [6, 0]; + hE = [3, cst_sr_literals], + hF = [3, cst_sr_rules], + hG = [3, cst_syntax_rules], + hH = [4, cst_syntax_rules_body], + hI = [3, "__sr-form"], + hJ = [6, 0], + hK = [6, 0]; function sf_syntax_rules(args, env){ var a = Sx_runtime[15].call(null, args), b = Sx_runtime[38].call(null, a); if(Sx_types[71].call(null, b)) @@ -61857,30 +62070,30 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= }, d)]; else - var literals = hh; + var literals = hK; var rules = Sx_runtime[16].call(null, args), closure = Sx_runtime[81].call(null, env), - e = Sx_runtime[4].call(null, hb); + e = Sx_runtime[4].call(null, hE); Sx_runtime[78].call(null, closure, e, literals); - var f = Sx_runtime[4].call(null, hc); + var f = Sx_runtime[4].call(null, hF); Sx_runtime[78].call(null, closure, f, rules); - return Sx_types[57].call(null, hg, hf, he, closure, hd); + return Sx_types[57].call(null, hJ, hI, hH, closure, hG); } var - hi = [6, 0], - hj = [6, 0], - hk = [0, [3, "export"], 0], - hl = [0, [3, cst_import], 0], - hm = [0, [3, cst_begin], 0]; + hL = [6, 0], + hM = [6, 0], + hN = [0, [3, "export"], 0], + hO = [0, [3, cst_import], 0], + hP = [0, [3, cst_begin], 0]; function step_sf_define_library(args, env, kont){ var lib_spec = Sx_runtime[15].call(null, args), decls = Sx_runtime[16].call(null, args), lib_env = Sx_runtime[81].call(null, env), a = Sx_runtime[6].call(null, decls), - exports = [0, hi], - body_forms = [0, hj]; + exports = [0, hL], + body_forms = [0, hM]; Stdlib_List[18].call (null, function(decl){ @@ -61902,7 +62115,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var d = Sx_runtime[15].call(null, decl), kind = Sx_types[72].call(null, d), - e = Sx_runtime[2].call(null, cst, [0, kind, hk]); + e = Sx_runtime[2].call(null, cst, [0, kind, hN]); if(Sx_types[71].call(null, e)){ var f = Sx_runtime[16].call(null, decl), @@ -61923,7 +62136,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= exports[1] = Sx_runtime[2].call(null, cst_append, [0, exports[1], h]); } else{ - var i = Sx_runtime[2].call(null, cst, [0, kind, hl]); + var i = Sx_runtime[2].call(null, cst, [0, kind, hO]); if(Sx_types[71].call(null, i)){ var j = Sx_runtime[16].call(null, decl), @@ -61937,7 +62150,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= k); } else{ - var l = Sx_runtime[2].call(null, cst, [0, kind, hm]); + var l = Sx_runtime[2].call(null, cst, [0, kind, hP]); if(Sx_types[71].call(null, l)){ var m = [0, Sx_runtime[16].call(null, decl), 0]; body_forms[1] = @@ -61974,14 +62187,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_only = "only", cst_prefix = "prefix", cst_rename = "rename", - hn = [0, [3, cst_only], 0], - ho = [2, 1.], - hp = [0, [3, cst_only], 0], - hq = [0, [3, cst_prefix], 0], - hr = [2, 2.], - hs = [0, [3, cst_except], 0], - ht = [0, [3, cst_prefix], 0], - hu = [0, [3, cst_rename], 0]; + hQ = [0, [3, cst_only], 0], + hR = [2, 1.], + hS = [0, [3, cst_only], 0], + hT = [0, [3, cst_prefix], 0], + hU = [2, 2.], + hV = [0, [3, cst_except], 0], + hW = [0, [3, cst_prefix], 0], + hX = [0, [3, cst_rename], 0]; function bind_import_set(import_set, env){ var and = Sx_runtime[38].call(null, import_set); if(Sx_types[71].call(null, and)){ @@ -62003,28 +62216,28 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= head = Sx_types[72].call(null, d); else var head = 0; - var or = Sx_runtime[2].call(null, cst, [0, head, hn]); + var or = Sx_runtime[2].call(null, cst, [0, head, hQ]); if(Sx_types[71].call(null, or)) var or$0 = or; else{ - var or$1 = Sx_runtime[2].call(null, cst, [0, head, hs]); + var or$1 = Sx_runtime[2].call(null, cst, [0, head, hV]); if(Sx_types[71].call(null, or$1)) var or$0 = or$1; else var - or$2 = Sx_runtime[2].call(null, cst, [0, head, ht]), + or$2 = Sx_runtime[2].call(null, cst, [0, head, hW]), or$0 = Sx_types[71].call(null, or$2) ? or$2 - : Sx_runtime[2].call(null, cst, [0, head, hu]); + : Sx_runtime[2].call(null, cst, [0, head, hX]); } var lib_spec = Sx_types[71].call(null, or$0) - ? Sx_runtime[18].call(null, import_set, ho) + ? Sx_runtime[18].call(null, import_set, hR) : import_set, exports = library_exports(lib_spec), - e = Sx_runtime[2].call(null, cst, [0, head, hp]); + e = Sx_runtime[2].call(null, cst, [0, head, hS]); if(Sx_types[71].call(null, e)){ var f = Sx_runtime[16].call(null, import_set), @@ -62051,10 +62264,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= h); return 0; } - var i = Sx_runtime[2].call(null, cst, [0, head, hq]); + var i = Sx_runtime[2].call(null, cst, [0, head, hT]); if(Sx_types[71].call(null, i)){ var - j = [0, Sx_runtime[18].call(null, import_set, hr), 0], + j = [0, Sx_runtime[18].call(null, import_set, hU), 0], pfx = [3, Sx_runtime[5].call(null, j)], k = Sx_runtime[2].call(null, cst_keys, [0, exports, 0]), l = Sx_runtime[6].call(null, k); @@ -62087,12 +62300,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; } var - hv = [0, [3, cst_only], 0], - hw = [2, 1.], - hx = [3, cst_import], - hy = [0, [3, cst_except], 0], - hz = [0, [3, cst_prefix], 0], - hA = [0, [3, cst_rename], 0]; + hY = [0, [3, cst_only], 0], + hZ = [2, 1.], + h0 = [3, cst_import], + h1 = [0, [3, cst_except], 0], + h2 = [0, [3, cst_prefix], 0], + h3 = [0, [3, cst_rename], 0]; function step_sf_import(args$0, env, kont){ var args = args$0; for(;;){ @@ -62121,25 +62334,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= head = Sx_types[72].call(null, f); else var head = 0; - var or = Sx_runtime[2].call(null, cst, [0, head, hv]); + var or = Sx_runtime[2].call(null, cst, [0, head, hY]); if(Sx_types[71].call(null, or)) var or$0 = or; else{ - var or$1 = Sx_runtime[2].call(null, cst, [0, head, hy]); + var or$1 = Sx_runtime[2].call(null, cst, [0, head, h1]); if(Sx_types[71].call(null, or$1)) var or$0 = or$1; else var - or$2 = Sx_runtime[2].call(null, cst, [0, head, hz]), + or$2 = Sx_runtime[2].call(null, cst, [0, head, h2]), or$0 = Sx_types[71].call(null, or$2) ? or$2 - : Sx_runtime[2].call(null, cst, [0, head, hA]); + : Sx_runtime[2].call(null, cst, [0, head, h3]); } var lib_spec = Sx_types[71].call(null, or$0) - ? Sx_runtime[18].call(null, import_set, hw) + ? Sx_runtime[18].call(null, import_set, hZ) : import_set, g = library_loaded_p(lib_spec); if(! Sx_types[71].call(null, g)){ @@ -62147,7 +62360,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= i = kont_push(make_import_frame(import_set, rest_sets, env), kont), d = Stdlib_Hashtbl[1].call(null, 0, 2); Stdlib_Hashtbl[11].call(null, d, "library", lib_spec); - Stdlib_Hashtbl[11].call(null, d, cst_op, hx); + Stdlib_Hashtbl[11].call(null, d, cst_op, h0); return make_cek_suspended([7, d], env, i); } bind_import_set(import_set, env); @@ -62156,43 +62369,43 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= args = rest_sets; } } - var hB = [3, "perform requires an IO request argument"]; + var h4 = [3, "perform requires an IO request argument"]; function step_sf_perform(args, env, kont){ var a = Sx_runtime[34].call(null, args); if(Sx_types[71].call(null, a)){ - var b = Sx_runtime[3].call(null, hB); + var b = Sx_runtime[3].call(null, h4); throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1); } var c = kont_push(make_perform_frame(env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, c); } var - hC = [2, 1.], - hD = [2, 2.], - hE = [0, [2, 3.], 0], - hF = [0, [3, cst$3], 0], - hG = [0, [3, cst$0], 0], - hH = [0, [2, 1.], 0], - hI = [2, 1.], - hJ = [2, 1.], - hK = [0, [2, 3.], 0], - hL = [2, 2.]; + h5 = [2, 1.], + h6 = [2, 2.], + h7 = [0, [2, 3.], 0], + h8 = [0, [3, cst$3], 0], + h9 = [0, [3, cst$0], 0], + h_ = [0, [2, 1.], 0], + h$ = [2, 1.], + ia = [2, 1.], + ib = [0, [2, 3.], 0], + ic = [2, 2.]; function sf_define_record_type(args, env){ var type_sym = Sx_runtime[15].call(null, args), - ctor_spec = Sx_runtime[18].call(null, args, hC), - pred_sym = Sx_runtime[18].call(null, args, hD), - field_specs = Sx_runtime[2].call(null, cst_slice, [0, args, hE]), + ctor_spec = Sx_runtime[18].call(null, args, h5), + pred_sym = Sx_runtime[18].call(null, args, h6), + field_specs = Sx_runtime[2].call(null, cst_slice, [0, args, h7]), raw_name = Sx_types[72].call(null, type_sym), - and = Sx_runtime[2].call(null, cst_starts_with, [0, raw_name, hF]), + and = Sx_runtime[2].call(null, cst_starts_with, [0, raw_name, h8]), a = Sx_types[71].call(null, and) - ? Sx_runtime[2].call(null, cst_ends_with, [0, raw_name, hG]) + ? Sx_runtime[2].call(null, cst_ends_with, [0, raw_name, h9]) : and; if(Sx_types[71].call(null, a)) var - b = [0, Sx_runtime[25].call(null, raw_name), hH], - c = [0, raw_name, [0, hI, [0, Sx_runtime[2].call(null, cst$5, b), 0]]], + b = [0, Sx_runtime[25].call(null, raw_name), h_], + c = [0, raw_name, [0, h$, [0, Sx_runtime[2].call(null, cst$5, b), 0]]], type_name = Sx_runtime[2].call(null, cst_slice, c); else var type_name = raw_name; @@ -62235,17 +62448,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var fs = a[1], idx = args[1], - b = Sx_runtime[18].call(null, fs, hJ), + b = Sx_runtime[18].call(null, fs, ia), accessor_name = Sx_types[72].call(null, b), c = Sx_types[103].call(null, idx), d = Sx_runtime[4].call(null, accessor_name); Sx_runtime[78].call(null, env, d, c); var - e = [0, Sx_runtime[25].call(null, fs), hK], + e = [0, Sx_runtime[25].call(null, fs), ib], f = Sx_runtime[2].call(null, cst$2, e); if(! Sx_types[71].call(null, f)) return 0; var - g = Sx_runtime[18].call(null, fs, hL), + g = Sx_runtime[18].call(null, fs, ic), mutator_name = Sx_types[72].call(null, g), h = Sx_types[104].call(null, idx), i = Sx_runtime[4].call(null, mutator_name); @@ -62264,32 +62477,32 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_get = "get", cst_impls = "impls", cst_methods = "methods", - hM = [3, cst_protocol_registry], - hN = [3, "satisfies?"], - hO = [4, "type-of"], - hP = [0, [3, cst_impls], 0], - hQ = [4, cst_protocol_registry], - hR = [4, cst_get], - hS = [4, cst_get], - hT = [4, cst_get], - hU = [4, cst_get], - hV = [4, cst_impl], - hW = [0, [3, ": not implemented for this type"], 0], - hX = [3, cst$1], - hY = [4, "error"], - hZ = [6, [0, [4, "nil?"], [0, [4, cst_impl], 0]]], - h0 = [4, cst_if], - h1 = [4, cst_impl], - h2 = [4, cst_let], - h3 = [4, cst_fn]; + id = [3, cst_protocol_registry], + ie = [3, "satisfies?"], + ig = [4, "type-of"], + ih = [0, [3, cst_impls], 0], + ii = [4, cst_protocol_registry], + ij = [4, cst_get], + ik = [4, cst_get], + il = [4, cst_get], + im = [4, cst_get], + io = [4, cst_impl], + ip = [0, [3, ": not implemented for this type"], 0], + iq = [3, cst$1], + ir = [4, "error"], + is = [6, [0, [4, "nil?"], [0, [4, cst_impl], 0]]], + it = [4, cst_if], + iu = [4, cst_impl], + iv = [4, cst_let], + iw = [4, cst_fn]; function sf_define_protocol(args, env){ var a = Sx_runtime[15].call(null, args), proto_name = Sx_types[72].call(null, a), method_specs = Sx_runtime[16].call(null, args), - b = Sx_runtime[4].call(null, hM); + b = Sx_runtime[4].call(null, id); Sx_runtime[78].call(null, env, b, protocol_registry); - var c = Sx_runtime[4].call(null, hN); + var c = Sx_runtime[4].call(null, ie); Sx_runtime[78].call (null, env, @@ -62340,53 +62553,53 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= method_name = Sx_types[72].call(null, a), params = Sx_runtime[16].call(null, spec), self_sym = Sx_runtime[15].call(null, params), - b = [0, Sx_runtime[19].call(null, hV, params), 0], + b = [0, Sx_runtime[19].call(null, io, params), 0], c = eval_expr ([6, [0, - h3, + iw, [0, params, [0, [6, [0, - h2, + iv, [0, [6, [0, [6, [0, - h1, + iu, [0, [6, [0, - hU, + im, [0, [6, [0, - hT, + il, [0, [6, - [0, hS, [0, [6, [0, hR, [0, hQ, [0, proto_name, 0]]]], hP]]], - [0, [6, [0, hO, [0, self_sym, 0]]], 0]]]], + [0, ik, [0, [6, [0, ij, [0, ii, [0, proto_name, 0]]]], ih]]], + [0, [6, [0, ig, [0, self_sym, 0]]], 0]]]], [0, method_name, 0]]]], 0]]], 0]], [0, [6, [0, - h0, + it, [0, - hZ, + is, [0, [6, [0, - hY, + ir, [0, [3, Sx_runtime[5].call - (null, [0, proto_name, [0, hX, [0, method_name, hW]]])], + (null, [0, proto_name, [0, iq, [0, method_name, ip]]])], 0]]], b]]]], 0]]]], @@ -62400,29 +62613,29 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; } var - h4 = [2, 1.], - h5 = [0, [2, 1.], 0], - h6 = [2, 1.], - h7 = [3, "Unknown protocol: "], - h8 = [3, cst_impls], - h9 = [3, cst_methods], - h_ = [3, cst_name], - h$ = [3, " in protocol "], - ia = [3, "Unknown method "], - ib = [3, cst_arity], - ic = [2, 1.], - id = [0, [2, 1.], 0], - ie = [4, cst_fn], - ig = [4, cst_begin]; + ix = [2, 1.], + iy = [0, [2, 1.], 0], + iz = [2, 1.], + iA = [3, "Unknown protocol: "], + iB = [3, cst_impls], + iC = [3, cst_methods], + iD = [3, cst_name], + iE = [3, " in protocol "], + iF = [3, "Unknown method "], + iG = [3, cst_arity], + iH = [2, 1.], + iI = [0, [2, 1.], 0], + iJ = [4, cst_fn], + iK = [4, cst_begin]; function sf_implement(args, env){ var a = Sx_runtime[15].call(null, args), proto_name = Sx_types[72].call(null, a), - b = Sx_runtime[18].call(null, args, h4), + b = Sx_runtime[18].call(null, args, ix), raw_type_name = Sx_types[72].call(null, b), - c = [0, Sx_runtime[25].call(null, raw_type_name), h5], + c = [0, Sx_runtime[25].call(null, raw_type_name), iy], d = - [0, raw_type_name, [0, h6, [0, Sx_runtime[2].call(null, cst$5, c), 0]]], + [0, raw_type_name, [0, iz, [0, Sx_runtime[2].call(null, cst$5, c), 0]]], type_name = Sx_runtime[2].call(null, cst_slice, d), e = Sx_runtime[16].call(null, args), method_defs = Sx_runtime[16].call(null, e), @@ -62430,12 +62643,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= f = Sx_runtime[84].call(null, proto); if(Sx_types[71].call(null, f)){ var - g = [3, Sx_runtime[5].call(null, [0, h7, [0, proto_name, 0]])], + g = [3, Sx_runtime[5].call(null, [0, iA, [0, proto_name, 0]])], h = Sx_runtime[3].call(null, g); throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1); } var - impls = Sx_runtime[26].call(null, proto, h8), + impls = Sx_runtime[26].call(null, proto, iB), or = Sx_runtime[26].call(null, impls, type_name), type_impls = Sx_types[71].call(null, or) @@ -62448,7 +62661,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = Sx_runtime[15].call(null, method_def), mname = Sx_types[72].call(null, a), - b = Sx_runtime[26].call(null, proto, h9), + b = Sx_runtime[26].call(null, proto, iC), c = Sx_runtime[6].call(null, b), d = [6, @@ -62456,7 +62669,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(m){ var - a = [0, Sx_runtime[26].call(null, m, h_), [0, mname, 0]], + a = [0, Sx_runtime[26].call(null, m, iD), [0, mname, 0]], b = Sx_runtime[2].call(null, cst, a); return Sx_types[71].call(null, b); }, @@ -62468,16 +62681,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= f = [3, Sx_runtime[5].call - (null, [0, ia, [0, mname, [0, h$, [0, proto_name, 0]]]])], + (null, [0, iF, [0, mname, [0, iE, [0, proto_name, 0]]]])], g = Sx_runtime[3].call(null, f); throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1); } var - arity = Sx_runtime[26].call(null, proto_method, ib), + arity = Sx_runtime[26].call(null, proto_method, iG), params = Sx_runtime[2].call - (null, cst_slice, [0, method_def, [0, ic, [0, arity, 0]]]), - h = [0, Sx_runtime[2].call(null, cst$8, [0, arity, id]), 0], + (null, cst_slice, [0, method_def, [0, iH, [0, arity, 0]]]), + h = [0, Sx_runtime[2].call(null, cst$8, [0, arity, iI]), 0], i = [0, Sx_runtime[25].call(null, method_def), h], j = Sx_runtime[2].call(null, cst, i); if(Sx_types[71].call(null, j)) @@ -62486,8 +62699,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var l = Sx_runtime[2].call(null, cst_slice, [0, method_def, [0, arity, 0]]), - body = Sx_runtime[19].call(null, ig, l); - var k = eval_expr([6, [0, ie, [0, params, [0, body, 0]]]], env); + body = Sx_runtime[19].call(null, iK, l); + var k = eval_expr([6, [0, iJ, [0, params, [0, body, 0]]]], env); Sx_runtime[12].call(null, type_impls, mname, k); return 0; }, @@ -62495,12 +62708,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_runtime[12].call(null, impls, type_name, type_impls); return 0; } - var ih = [0, 0], ii = [0, 0], ij = [3, cst_impls]; + var iL = [0, 0], iM = [0, 0], iN = [3, cst_impls]; function satisfies_p(proto_name, value){ var a = Sx_types[100].call(null, value), b = [0, 1 - Sx_types[71].call(null, a)]; - if(Sx_types[71].call(null, b)) return ih; + if(Sx_types[71].call(null, b)) return iL; var c = Sx_runtime[40].call(null, proto_name), d = @@ -62509,30 +62722,30 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= : proto_name, proto = Sx_runtime[26].call(null, protocol_registry, d), e = Sx_runtime[84].call(null, proto); - if(Sx_types[71].call(null, e)) return ii; + if(Sx_types[71].call(null, e)) return iM; var f = Sx_runtime[74].call(null, value), - g = Sx_runtime[26].call(null, proto, ij), + g = Sx_runtime[26].call(null, proto, iN), h = Sx_runtime[26].call(null, g, f), i = Sx_runtime[84].call(null, h); return [0, 1 - Sx_types[71].call(null, i)]; } var warnings = [6, 0], - ik = [0, [0, 1], 0], - il = [0, [0, 0], 0], - im = [0, [3, cst_else], 0], - io = [0, [0, 1], 0], - ip = [0, [0, 0], 0], - iq = + iO = [0, [0, 1], 0], + iP = [0, [0, 0], 0], + iQ = [0, [3, cst_else], 0], + iR = [0, [0, 1], 0], + iS = [0, [0, 0], 0], + iT = [0, [6, [0, [3, "match may be non-exhaustive (no wildcard or :else pattern)"], 0]], 0], - ir = [3, "match on boolean missing false case"], - is = [3, "match on boolean missing true case"]; + iU = [3, "match on boolean missing false case"], + iV = [3, "match on boolean missing true case"]; function check_match_exhaustiveness(clauses){ var b = Sx_runtime[6].call(null, clauses), @@ -62549,11 +62762,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var and = Sx_runtime[40].call(null, p); if(Sx_types[71].call(null, and)){ var - b = Sx_runtime[2].call(null, cst, [0, p, ik]), + b = Sx_runtime[2].call(null, cst, [0, p, iO]), and$0 = [0, 1 - Sx_types[71].call(null, b)]; if(Sx_types[71].call(null, and$0)) var - c = Sx_runtime[2].call(null, cst, [0, p, il]), + c = Sx_runtime[2].call(null, cst, [0, p, iP]), a = [0, 1 - Sx_types[71].call(null, c)]; else var a = and$0; @@ -62569,7 +62782,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[34].call (null, function(p){ - var a = Sx_runtime[2].call(null, cst, [0, p, im]); + var a = Sx_runtime[2].call(null, cst, [0, p, iQ]); return Sx_types[71].call(null, a); }, d)], @@ -62579,7 +62792,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[34].call (null, function(p){ - var a = Sx_runtime[2].call(null, cst, [0, p, io]); + var a = Sx_runtime[2].call(null, cst, [0, p, iR]); return Sx_types[71].call(null, a); }, e)], @@ -62589,7 +62802,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[34].call (null, function(p){ - var a = Sx_runtime[2].call(null, cst, [0, p, ip]); + var a = Sx_runtime[2].call(null, cst, [0, p, iS]); return Sx_types[71].call(null, a); }, f)], @@ -62600,7 +62813,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= : and, warnings$0 = Sx_types[71].call(null, g) - ? Sx_runtime[2].call(null, cst_append, [0, warnings, iq]) + ? Sx_runtime[2].call(null, cst_append, [0, warnings, iT]) : warnings, and$0 = Sx_types[71].call(null, has_true) ? has_true : has_false; if(Sx_types[71].call(null, and$0)){ @@ -62621,7 +62834,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and$0; if(Sx_types[71].call(null, a)) var - h = Sx_types[71].call(null, has_true) ? ir : is, + h = Sx_types[71].call(null, has_true) ? iU : iV, warnings$1 = Sx_runtime[2].call (null, cst_append, [0, warnings$0, [0, [6, [0, h, 0]], 0]]); @@ -62629,7 +62842,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var warnings$1 = warnings$0; return warnings$1; } - var it = [2, 1.]; + var iW = [2, 1.]; function match_find_clause(val, clauses$1, env){ var clauses = clauses$1; for(;;){ @@ -62638,7 +62851,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var clause = Sx_runtime[15].call(null, clauses), pattern = Sx_runtime[15].call(null, clause), - body = Sx_runtime[18].call(null, clause, it), + body = Sx_runtime[18].call(null, clause, iW), local = Sx_runtime[81].call(null, env), b = match_pattern(pattern, val, local); if(Sx_types[71].call(null, b)) return [6, [0, local, [0, body, 0]]]; @@ -62648,38 +62861,38 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var cst_adt = "_adt", - iu = [0, [4, cst$14], 0], - iv = [0, 1], - iw = [0, [2, 2.], 0], - ix = [0, [4, cst$4], 0], - iy = [2, 1.], - iz = [0, [4, cst_quote], 0], - iA = [2, 1.], - iB = [0, 1], - iC = [3, cst_adt], - iD = [3, "_fields"], - iE = [3, "_ctor"], - iF = [2, 1.], - iG = [0, [4, cst_rest], 0], - iH = [0, [4, cst_rest], 0], - iI = [2, 0.], - iJ = [2, 0.], - iK = [2, 1.], - iL = [0, [2, 1.], 0], - iM = [0, 1], - iN = [0, 0], - iO = [2, 1.]; + iX = [0, [4, cst$14], 0], + iY = [0, 1], + iZ = [0, [2, 2.], 0], + i0 = [0, [4, cst$4], 0], + i1 = [2, 1.], + i2 = [0, [4, cst_quote], 0], + i3 = [2, 1.], + i4 = [0, 1], + i5 = [3, cst_adt], + i6 = [3, "_fields"], + i7 = [3, "_ctor"], + i8 = [2, 1.], + i9 = [0, [4, cst_rest], 0], + i_ = [0, [4, cst_rest], 0], + i$ = [2, 0.], + ja = [2, 0.], + jb = [2, 1.], + jc = [0, [2, 1.], 0], + jd = [0, 1], + je = [0, 0], + jf = [2, 1.]; function match_pattern(pattern, value, env){ - var e = Sx_runtime[2].call(null, cst, [0, pattern, iu]); - if(Sx_types[71].call(null, e)) return iv; + var e = Sx_runtime[2].call(null, cst, [0, pattern, iX]); + if(Sx_types[71].call(null, e)) return iY; var and = Sx_runtime[38].call(null, pattern); if(Sx_types[71].call(null, and)){ var - f = [0, Sx_runtime[25].call(null, pattern), iw], + f = [0, Sx_runtime[25].call(null, pattern), iZ], and$0 = Sx_runtime[2].call(null, cst, f); if(Sx_types[71].call(null, and$0)) var - g = [0, Sx_runtime[15].call(null, pattern), ix], + g = [0, Sx_runtime[15].call(null, pattern), i0], b = Sx_runtime[2].call(null, cst, g); else var b = and$0; @@ -62687,7 +62900,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else var b = and; if(Sx_types[71].call(null, b)){ - var pred = eval_expr(Sx_runtime[18].call(null, pattern, iy), env); + var pred = eval_expr(Sx_runtime[18].call(null, pattern, i1), env); return cek_call(pred, [6, [0, value, 0]]); } var and$1 = Sx_runtime[38].call(null, pattern); @@ -62697,7 +62910,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and$2 = [0, 1 - Sx_types[71].call(null, h)]; if(Sx_types[71].call(null, and$2)) var - i = [0, Sx_runtime[15].call(null, pattern), iz], + i = [0, Sx_runtime[15].call(null, pattern), i2], c = Sx_runtime[2].call(null, cst, i); else var c = and$2; @@ -62705,7 +62918,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else var c = and$1; if(Sx_types[71].call(null, c)){ - var j = [0, value, [0, Sx_runtime[18].call(null, pattern, iA), 0]]; + var j = [0, value, [0, Sx_runtime[18].call(null, pattern, i3), 0]]; return Sx_runtime[2].call(null, cst, j); } var k = Sx_runtime[40].call(null, pattern); @@ -62714,7 +62927,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= l = Sx_types[72].call(null, pattern), m = Sx_runtime[4].call(null, l); Sx_runtime[78].call(null, env, m, value); - return iB; + return i4; } var and$3 = Sx_runtime[38].call(null, pattern); if(Sx_types[71].call(null, and$3)){ @@ -62730,7 +62943,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and$6 = Sx_runtime[39].call(null, value), a = Sx_types[71].call(null, and$6) - ? Sx_runtime[26].call(null, value, iC) + ? Sx_runtime[26].call(null, value, i5) : and$6; else var a = and$5; @@ -62745,8 +62958,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= p = Sx_runtime[15].call(null, pattern), ctor_name = Sx_types[72].call(null, p), field_patterns = Sx_runtime[16].call(null, pattern), - fields = Sx_runtime[26].call(null, value, iD), - q = [0, Sx_runtime[26].call(null, value, iE), [0, ctor_name, 0]], + fields = Sx_runtime[26].call(null, value, i6), + q = [0, Sx_runtime[26].call(null, value, i7), [0, ctor_name, 0]], and$7 = Sx_runtime[2].call(null, cst, q); if(! Sx_types[71].call(null, and$7)) return and$7; var @@ -62763,7 +62976,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, iF), + a = Sx_runtime[18].call(null, pair, i8), b = match_pattern(Sx_runtime[15].call(null, pair), a, env); return Sx_types[71].call(null, b); }, @@ -62797,13 +63010,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and$11 = Sx_runtime[38].call(null, value), d = Sx_types[71].call(null, and$11) - ? Sx_runtime[2].call(null, cst_contains, [0, pattern, iG]) + ? Sx_runtime[2].call(null, cst_contains, [0, pattern, i9]) : and$11; else var d = and$10; if(Sx_types[71].call(null, d)){ var - rest_idx = Sx_runtime[2].call(null, cst_index_of, [0, pattern, iH]), + rest_idx = Sx_runtime[2].call(null, cst_index_of, [0, pattern, i_]), y = [0, Sx_runtime[25].call(null, value), [0, rest_idx, 0]], and$12 = Sx_runtime[2].call(null, cst$2, y); if(! Sx_types[71].call(null, and$12)) return and$12; @@ -62811,12 +63024,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= z = [0, Sx_runtime[2].call - (null, cst_slice, [0, value, [0, iI, [0, rest_idx, 0]]]), + (null, cst_slice, [0, value, [0, i$, [0, rest_idx, 0]]]), 0], A = [0, Sx_runtime[2].call - (null, cst_slice, [0, pattern, [0, iJ, [0, rest_idx, 0]]]), + (null, cst_slice, [0, pattern, [0, ja, [0, rest_idx, 0]]]), z], B = Sx_runtime[2].call(null, cst_zip, A), C = Sx_runtime[6].call(null, B), @@ -62826,20 +63039,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, iK), + a = Sx_runtime[18].call(null, pair, jb), b = match_pattern(Sx_runtime[15].call(null, pair), a, env); return Sx_types[71].call(null, b); }, C)]; if(! Sx_types[71].call(null, and$13)) return and$13; var - D = Sx_runtime[2].call(null, cst$8, [0, rest_idx, iL]), + D = Sx_runtime[2].call(null, cst$8, [0, rest_idx, jc]), rest_name = Sx_runtime[18].call(null, pattern, D), E = Sx_runtime[2].call(null, cst_slice, [0, value, [0, rest_idx, 0]]), F = Sx_types[72].call(null, rest_name), G = Sx_runtime[4].call(null, F); Sx_runtime[78].call(null, env, G, E); - return iM; + return jd; } var and$14 = Sx_runtime[38].call(null, pattern), @@ -62854,7 +63067,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= J = [0, Sx_runtime[25].call(null, pattern), I], K = Sx_runtime[2].call(null, cst, J), L = [0, 1 - Sx_types[71].call(null, K)]; - if(Sx_types[71].call(null, L)) return iN; + if(Sx_types[71].call(null, L)) return je; var pairs = Sx_runtime[2].call(null, cst_zip, [0, pattern, [0, value, 0]]), M = Sx_runtime[6].call(null, pairs); @@ -62863,13 +63076,189 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, iO), + a = Sx_runtime[18].call(null, pair, jf), b = match_pattern(Sx_runtime[15].call(null, pair), a, env); return Sx_types[71].call(null, b); }, M)]; } - var iP = [0, 0], iQ = [3, "match: no clause matched "], iR = [2, 1.]; + var + jg = [0, [4, cst$14], 0], + jh = [0, [4, cst_else], 0], + ji = [0, [3, cst_else], 0]; + function match_clause_is_else_p(clause){ + var + p = Sx_runtime[15].call(null, clause), + or = Sx_runtime[2].call(null, cst, [0, p, jg]); + if(Sx_types[71].call(null, or)) return or; + var or$0 = Sx_runtime[2].call(null, cst, [0, p, jh]); + return Sx_types[71].call(null, or$0) + ? or$0 + : Sx_runtime[2].call(null, cst, [0, p, ji]); + } + var jj = [0, [4, cst$14], 0], jk = [0, [4, cst_else], 0]; + function match_clause_ctor_name(clause){ + var + p = Sx_runtime[15].call(null, clause), + and = Sx_runtime[38].call(null, p); + if(Sx_types[71].call(null, and)){ + var + c = Sx_runtime[34].call(null, p), + and$0 = [0, 1 - Sx_types[71].call(null, c)]; + if(Sx_types[71].call(null, and$0)) + var d = Sx_runtime[15].call(null, p), a = Sx_runtime[40].call(null, d); + else + var a = and$0; + } + else + var a = and; + if(Sx_types[71].call(null, a)){ + var e = Sx_runtime[15].call(null, p); + return Sx_types[72].call(null, e); + } + var and$1 = Sx_runtime[40].call(null, p); + if(Sx_types[71].call(null, and$1)){ + var + f = Sx_runtime[2].call(null, cst, [0, p, jj]), + and$2 = [0, 1 - Sx_types[71].call(null, f)]; + if(Sx_types[71].call(null, and$2)) + var + g = Sx_runtime[2].call(null, cst, [0, p, jk]), + b = [0, 1 - Sx_types[71].call(null, g)]; + else + var b = and$2; + } + else + var b = and$1; + return Sx_types[71].call(null, b) ? 0 : 0; + } + var + cst_adt_warned = "*adt-warned*", + jl = [3, cst_adt_warned], + jm = [3, cst_adt_warned], + jn = [3, cst_adt_warned], + jo = [3, ","], + jp = [3, "|"], + jq = [0, 1], + jr = [3, ", "], + js = [3, ": missing "], + jt = [3, "[sx] match: non-exhaustive \xe2\x80\x94 "]; + function match_warn_non_exhaustive + (env, type_name, registered, clause_ctors){ + var + a = Sx_runtime[6].call(null, registered), + missing = + [6, + Stdlib_List[44].call + (null, + function(c){ + var + a = + Sx_runtime[2].call + (null, cst_contains, [0, clause_ctors, [0, c, 0]]), + b = [0, 1 - Sx_types[71].call(null, a)]; + return Sx_types[71].call(null, b); + }, + a)], + b = Sx_runtime[34].call(null, missing), + c = [0, 1 - Sx_types[71].call(null, b)]; + if(Sx_types[71].call(null, c)){ + var + d = Sx_runtime[76].call(null, env, jl), + e = [0, 1 - Sx_types[71].call(null, d)]; + if(Sx_types[71].call(null, e)){ + var + f = [7, Stdlib_Hashtbl[1].call(null, 0, 0)], + g = Sx_runtime[4].call(null, jm); + Sx_runtime[78].call(null, env, g, f); + } + var + warned = Sx_runtime[77].call(null, env, jn), + h = + [0, + type_name, + [0, + jp, + [0, Sx_runtime[2].call(null, cst_join, [0, jo, [0, missing, 0]]), 0]]], + key = [3, Sx_runtime[5].call(null, h)], + i = Sx_runtime[26].call(null, warned, key), + j = [0, 1 - Sx_types[71].call(null, i)]; + if(Sx_types[71].call(null, j)){ + Sx_runtime[12].call(null, warned, key, jq); + var + k = + [0, + jt, + [0, + type_name, + [0, + js, + [0, + Sx_runtime[2].call(null, cst_join, [0, jr, [0, missing, 0]]), + 0]]]], + l = [3, Sx_runtime[5].call(null, k)]; + Sx_runtime[103].call(null, l); + } + } + return 0; + } + var + cst_adt_registry = "*adt-registry*", + ju = [3, cst_adt], + jv = [3, "_type"], + jw = [3, cst_adt_registry], + jx = [3, cst_adt_registry]; + function match_check_exhaustiveness(val, clauses, env){ + var + and = Sx_runtime[39].call(null, val), + b = + Sx_types[71].call(null, and) ? Sx_runtime[26].call(null, val, ju) : and; + if(! Sx_types[71].call(null, b)) return 0; + var + type_name = Sx_runtime[26].call(null, val, jv), + and$0 = Sx_runtime[76].call(null, env, jw), + type_name$0 = Sx_types[71].call(null, and$0) ? type_name : and$0; + if(! Sx_types[71].call(null, type_name$0)) return 0; + var + c = Sx_runtime[77].call(null, env, jx), + registered = Sx_runtime[26].call(null, c, type_name); + if(Sx_types[71].call(null, registered)) + var + d = Sx_runtime[6].call(null, clauses), + e = + [0, + Stdlib_List[34].call + (null, + function(c){ + var a = match_clause_is_else_p(c); + return Sx_types[71].call(null, a); + }, + d)], + a = [0, 1 - Sx_types[71].call(null, e)]; + else + var a = registered; + if(! Sx_types[71].call(null, a)) return 0; + var + f = Sx_runtime[6].call(null, clauses), + g = + [6, + Stdlib_List[20].call + (null, function(c){return match_clause_ctor_name(c);}, f)], + h = Sx_runtime[6].call(null, g), + clause_ctors = + [6, + Stdlib_List[44].call + (null, + function(n){ + var + a = Sx_runtime[84].call(null, n), + b = [0, 1 - Sx_types[71].call(null, a)]; + return Sx_types[71].call(null, b); + }, + h)]; + return match_warn_non_exhaustive(env, type_name, registered, clause_ctors); + } + var jy = [0, 0], jz = [3, "match: no clause matched "], jA = [2, 1.]; function step_sf_match(args, env, kont){ var val = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), @@ -62880,168 +63269,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= a = Sx_runtime[84].call(null, result); if(Sx_types[71].call(null, a)){ var - b = kont_push(make_raise_eval_frame(env, iP), kont), - c = [0, iQ, [0, Sx_runtime[69].call(null, val), 0]]; + b = kont_push(make_raise_eval_frame(env, jy), kont), + c = [0, jz, [0, Sx_runtime[69].call(null, val), 0]]; return make_cek_value([3, Sx_runtime[5].call(null, c)], env, b); } var d = Sx_runtime[15].call(null, result); - return make_cek_state(Sx_runtime[18].call(null, result, iR), d, kont); + return make_cek_state(Sx_runtime[18].call(null, result, jA), d, kont); } - var - cst_adt_registry = "*adt-registry*", - cst_adt_warned = "*adt-warned*", - iS = [3, cst_adt_registry], - iT = [3, cst_adt_registry], - iU = [3, cst_adt_warned], - iV = [3, cst_adt_warned], - iW = [3, cst_adt_warned], - iX = [0, 1]; - function match_check_exhaustiveness(val, clauses, env){ - function clause_is_else(c){ - if(typeof c !== "number" && 6 === c[0]){ - var match = c[1]; - if(match){ - var p = match[1]; - if(typeof p !== "number") - switch(p[0]){ - case 4: - var a = p[1]; if(a !== cst$14 && a !== cst_else) break; return 1; - case 5: - if(p[1] === cst_else) return 1; break; - } - return 0; - } - } - return 0; - } - function clause_ctor_name(c){ - if(typeof c !== "number" && 6 === c[0]){ - var b = c[1]; - if(b){ - var a = b[1]; - if(typeof a !== "number" && 6 === a[0]){ - var d = a[1]; - if(d){ - var match = d[1]; - if(typeof match !== "number" && 4 === match[0]){var n = match[1]; return [0, n];} - } - } - } - } - return 0; - } - a: - { - if(typeof val !== "number") - switch(val[0]){ - case 7: - var d = val[1], match$2 = Stdlib_Hashtbl[7].call(null, d, cst_adt); - if(match$2){ - var c = match$2[1]; - if(typeof c !== "number" && 0 === c[0] && c[1]){ - var match$3 = Stdlib_Hashtbl[7].call(null, d, "_type"); - if(match$3){ - var match$4 = match$3[1]; - if(typeof match$4 !== "number" && 3 === match$4[0]){ - var s = match$4[1], type_name_opt = [0, s]; - break a; - } - } - var type_name_opt = 0; - break a; - } - } - var type_name_opt = 0; - break a; - case 38: - var a = val[1], type_name_opt = [0, a[1]]; break a; - } - var type_name_opt = 0; - } - if(! type_name_opt) return 0; - var type_name = type_name_opt[1], e = Sx_runtime[76].call(null, env, iS); - if(! Sx_types[71].call(null, e)) return 0; - var registry = Sx_runtime[77].call(null, env, iT); - a: - { - if(typeof registry !== "number" && 7 === registry[0]){ - var - r = registry[1], - match$0 = Stdlib_Hashtbl[7].call(null, r, type_name); - if(match$0){ - var match$1 = match$0[1]; - if(typeof match$1 !== "number" && 6 === match$1[0]){ - var ctors = match$1[1], registered = [0, ctors]; - break a; - } - } - var registered = 0; - break a; - } - var registered = 0; - } - if(! registered) return 0; - var ctor_vals = registered[1]; - a: - { - if(typeof clauses !== "number" && 6 === clauses[0]){var xs = clauses[1], clauses_list = xs; break a;} - var clauses_list = 0; - } - if(Stdlib_List[34].call(null, clause_is_else, clauses_list)) return 0; - var - clause_ctors = Stdlib_List[23].call(null, clause_ctor_name, clauses_list), - registered_names = - Stdlib_List[23].call - (null, - function(param){ - if(typeof param !== "number" && 3 === param[0]){var s = param[1]; return [0, s];} - return 0; - }, - ctor_vals), - missing = - Stdlib_List[44].call - (null, - function(c){return 1 - Stdlib_List[37].call(null, c, clause_ctors);}, - registered_names); - if(0 === missing) return 0; - var f = Sx_runtime[76].call(null, env, iU); - if(1 - Sx_types[71].call(null, f)){ - var g = [7, Stdlib_Hashtbl[1].call(null, 0, 4)]; - Sx_runtime[78].call(null, env, iV, g); - } - var - warned = Sx_runtime[77].call(null, env, iW), - h = Stdlib_String[7].call(null, ",", missing), - i = Stdlib[28].call(null, "|", h), - key = Stdlib[28].call(null, type_name, i); - a: - { - if(typeof warned !== "number" && 7 === warned[0]){ - var w$0 = warned[1], match = Stdlib_Hashtbl[7].call(null, w$0, key); - if(match){ - var b = match[1]; - if(typeof b !== "number" && 0 === b[0] && b[1]){var already = 1; break a;} - } - var already = 0; - break a; - } - var already = 0; - } - if(already) return 0; - if(typeof warned !== "number" && 7 === warned[0]){ - var w = warned[1]; - Stdlib_Hashtbl[11].call(null, w, key, iX); - } - var - j = Stdlib_String[7].call(null, ", ", missing), - k = Stdlib[28].call(null, ": missing ", j), - l = Stdlib[28].call(null, type_name, k), - msg = - Stdlib[28].call(null, "[sx] match: non-exhaustive \xe2\x80\x94 ", l); - Sx_runtime[103].call(null, [3, msg]); - return 0; - } - var iY = [2, 1.]; + var jB = [2, 1.]; function step_sf_handler_bind(args, env, kont){ var handler_specs = Sx_runtime[15].call(null, args), @@ -63055,7 +63290,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = [0, - trampoline(eval_expr(Sx_runtime[18].call(null, spec, iY), env)), + trampoline(eval_expr(Sx_runtime[18].call(null, spec, jB), env)), 0]; return [6, [0, @@ -63072,7 +63307,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont); return make_cek_state(Sx_runtime[15].call(null, body), env, c); } - var iZ = [2, 2.], i0 = [2, 1.], i1 = [6, 0]; + var jC = [2, 2.], jD = [2, 1.], jE = [6, 0]; function step_sf_restart_case(args, env, kont){ var body = Sx_runtime[15].call(null, args), @@ -63084,8 +63319,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(spec){ var - b = [0, Sx_runtime[18].call(null, spec, iZ), 0], - c = [0, Sx_runtime[18].call(null, spec, i0), b], + b = [0, Sx_runtime[18].call(null, spec, jC), 0], + c = [0, Sx_runtime[18].call(null, spec, jD), b], d = Sx_runtime[15].call(null, spec), e = Sx_runtime[40].call(null, d); if(Sx_types[71].call(null, e)) @@ -63100,9 +63335,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state (body, env, - kont_push(make_restart_frame(restarts, i1, env), kont)); + kont_push(make_restart_frame(restarts, jE, env), kont)); } - var i2 = [3, "Unhandled condition: "]; + var jF = [3, "Unhandled condition: "]; function step_sf_signal(args, env, kont){ var condition = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), @@ -63116,20 +63351,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [6, [0, condition, 0]], kont_push(make_signal_return_frame(env, kont), kont)); var - b = [0, i2, [0, Sx_runtime[69].call(null, condition), 0]], + b = [0, jF, [0, Sx_runtime[69].call(null, condition), 0]], c = [3, Sx_runtime[5].call(null, b)], d = Sx_runtime[3].call(null, c); throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1); } var - i3 = [0, [2, 2.], 0], - i4 = [2, 1.], - i5 = [3, "No restart named: "], - i6 = [2, 1.], - i7 = [2, 2.], - i8 = [2, 1.], - i9 = [2, 2.], - i_ = [3, cst_env]; + jG = [0, [2, 2.], 0], + jH = [2, 1.], + jI = [3, "No restart named: "], + jJ = [2, 1.], + jK = [2, 2.], + jL = [2, 1.], + jM = [2, 2.], + jN = [3, cst_env]; function step_sf_invoke_restart(args, env, kont){ var a = Sx_runtime[15].call(null, args), b = Sx_runtime[40].call(null, a); if(Sx_types[71].call(null, b)) @@ -63140,28 +63375,28 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = Sx_runtime[40].call(null, rn), restart_name = Sx_types[71].call(null, d) ? Sx_types[72].call(null, rn) : rn, - e = [0, Sx_runtime[25].call(null, args), i3], + e = [0, Sx_runtime[25].call(null, args), jG], f = Sx_runtime[2].call(null, cst$2, e), restart_arg = Sx_types[71].call(null, f) - ? trampoline(eval_expr(Sx_runtime[18].call(null, args, i4), env)) + ? trampoline(eval_expr(Sx_runtime[18].call(null, args, jH), env)) : 0, found = kont_find_restart(kont, restart_name), g = Sx_runtime[84].call(null, found); if(Sx_types[71].call(null, g)){ var - h = [0, i5, [0, Sx_runtime[69].call(null, restart_name), 0]], + h = [0, jI, [0, Sx_runtime[69].call(null, restart_name), 0]], i = [3, Sx_runtime[5].call(null, h)], j = Sx_runtime[3].call(null, i); throw caml_maybe_attach_backtrace([0, Sx_types[9], j], 1); } var entry = Sx_runtime[15].call(null, found), - restart_frame = Sx_runtime[18].call(null, found, i6), - rest_kont = Sx_runtime[18].call(null, found, i7), - params = Sx_runtime[18].call(null, entry, i8), - body = Sx_runtime[18].call(null, entry, i9), - k = Sx_runtime[26].call(null, restart_frame, i_), + restart_frame = Sx_runtime[18].call(null, found, jJ), + rest_kont = Sx_runtime[18].call(null, found, jK), + params = Sx_runtime[18].call(null, entry, jL), + body = Sx_runtime[18].call(null, entry, jM), + k = Sx_runtime[26].call(null, restart_frame, jN), restart_env = Sx_runtime[81].call(null, k), l = Sx_runtime[34].call(null, params), m = [0, 1 - Sx_types[71].call(null, l)]; @@ -63173,15 +63408,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return make_cek_state(body, restart_env, rest_kont); } - var i$ = [0, [2, 2.], 0], ja = [2, 2.], jb = [2, 1.]; + var jO = [0, [2, 2.], 0], jP = [2, 2.], jQ = [2, 1.]; function step_sf_if(args, env, kont){ var - a = [0, Sx_runtime[25].call(null, args), i$], + a = [0, Sx_runtime[25].call(null, args), jO], b = Sx_runtime[2].call(null, cst$0, a), - c = Sx_types[71].call(null, b) ? Sx_runtime[18].call(null, args, ja) : 0, + c = Sx_types[71].call(null, b) ? Sx_runtime[18].call(null, args, jP) : 0, d = kont_push - (make_if_frame(Sx_runtime[18].call(null, args, jb), c, env), kont); + (make_if_frame(Sx_runtime[18].call(null, args, jQ), c, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, d); } function step_sf_when(args, env, kont){ @@ -63190,12 +63425,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont_push(make_when_frame(Sx_runtime[16].call(null, args), env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var jc = [0, [2, 1.], 0]; + var jR = [0, [2, 1.], 0]; function step_sf_begin(args, env, kont){ var a = Sx_runtime[34].call(null, args); if(Sx_types[71].call(null, a)) return make_cek_value(0, env, kont); var - b = [0, Sx_runtime[25].call(null, args), jc], + b = [0, Sx_runtime[25].call(null, args), jR], c = Sx_runtime[2].call(null, cst, b); if(Sx_types[71].call(null, c)) return make_cek_state(Sx_runtime[15].call(null, args), env, kont); @@ -63205,23 +63440,23 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state(Sx_runtime[15].call(null, args), env, d); } var - jd = [0, [3, cst_symbol], 0], - je = [0, [3, cst_list], 0], - jf = [0, [2, 2.], 0], - jg = [0, [3, cst_list], 0], - jh = [0, [2, 2.], 0], - ji = [0, [3, cst_symbol], 0], - jj = [2, 1.], - jk = [6, 0], - jl = [0, [2, 2.], 0], - jm = [2, 1.], - jn = [0, [2, 2.], 0], - jo = [0, [2, 2.], 0], - jp = [2, 1.]; + jS = [0, [3, cst_symbol], 0], + jT = [0, [3, cst_list], 0], + jU = [0, [2, 2.], 0], + jV = [0, [3, cst_list], 0], + jW = [0, [2, 2.], 0], + jX = [0, [3, cst_symbol], 0], + jY = [2, 1.], + jZ = [6, 0], + j0 = [0, [2, 2.], 0], + j1 = [2, 1.], + j2 = [0, [2, 2.], 0], + j3 = [0, [2, 2.], 0], + j4 = [2, 1.]; function step_sf_let(args, env, kont){ var c = Sx_runtime[15].call(null, args), - d = [0, Sx_runtime[74].call(null, c), jd], + d = [0, Sx_runtime[74].call(null, c), jS], e = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, e)) return make_cek_value(sf_named_let(args, env), env, kont); @@ -63233,12 +63468,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, f)) return step_sf_begin(body, local, kont); var g = Sx_runtime[15].call(null, bindings), - h = [0, Sx_runtime[74].call(null, g), je], + h = [0, Sx_runtime[74].call(null, g), jT], and = Sx_runtime[2].call(null, cst, h); if(Sx_types[71].call(null, and)) var i = Sx_runtime[15].call(null, bindings), - j = [0, Sx_runtime[25].call(null, i), jf], + j = [0, Sx_runtime[25].call(null, i), jU], a = Sx_runtime[2].call(null, cst, j); else var a = and; @@ -63246,16 +63481,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var first_binding = Sx_runtime[15].call(null, bindings); else var - x = [0, Sx_runtime[18].call(null, bindings, jp), 0], + x = [0, Sx_runtime[18].call(null, bindings, j4), 0], first_binding = [6, [0, Sx_runtime[15].call(null, bindings), x]]; var k = Sx_runtime[15].call(null, bindings), - l = [0, Sx_runtime[74].call(null, k), jg], + l = [0, Sx_runtime[74].call(null, k), jV], and$0 = Sx_runtime[2].call(null, cst, l); if(Sx_types[71].call(null, and$0)) var m = Sx_runtime[15].call(null, bindings), - n = [0, Sx_runtime[25].call(null, m), jh], + n = [0, Sx_runtime[25].call(null, m), jW], b = Sx_runtime[2].call(null, cst, n); else var b = and$0; @@ -63263,19 +63498,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var rest_bindings = Sx_runtime[16].call(null, bindings); else{ var - t = [0, Sx_runtime[25].call(null, bindings), jl], - u = [0, jm, [0, Sx_runtime[2].call(null, cst$12, t), 0]], + t = [0, Sx_runtime[25].call(null, bindings), j0], + u = [0, j1, [0, Sx_runtime[2].call(null, cst$12, t), 0]], v = Sx_runtime[2].call(null, cst_range, u), w = Sx_runtime[6].call(null, v), - pairs = [0, jk]; + pairs = [0, jZ]; Stdlib_List[26].call (null, function(acc, i){ var - a = [0, Sx_runtime[2].call(null, cst$11, [0, i, jn]), 0], + a = [0, Sx_runtime[2].call(null, cst$11, [0, i, j2]), 0], b = Sx_runtime[2].call(null, cst_inc, a), c = [0, Sx_runtime[18].call(null, bindings, b), 0], - d = Sx_runtime[2].call(null, cst$11, [0, i, jo]), + d = Sx_runtime[2].call(null, cst$11, [0, i, j3]), e = [6, [0, Sx_runtime[18].call(null, bindings, d), c]]; pairs[1] = Sx_runtime[11].call(null, pairs[1], e); return 0; @@ -63286,7 +63521,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } var o = Sx_runtime[15].call(null, first_binding), - p = [0, Sx_runtime[74].call(null, o), ji], + p = [0, Sx_runtime[74].call(null, o), jX], q = Sx_runtime[2].call(null, cst, p); if(Sx_types[71].call(null, q)) var @@ -63297,96 +63532,100 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var s = kont_push(make_let_frame(vname, rest_bindings, body, local), kont); return make_cek_state - (Sx_runtime[18].call(null, first_binding, jj), local, s); + (Sx_runtime[18].call(null, first_binding, jY), local, s); } var - jq = [0, [2, 4.], 0], - jr = [0, [3, cst_keyword], 0], - js = [2, 1.], - jt = [0, [3, cst_effects], 0], - ju = [2, 1.], - jv = [0, [2, 4.], 0], - jw = [0, [3, cst_keyword], 0], - jx = [2, 1.], - jy = [0, [3, cst_effects], 0], - jz = [2, 1.], - jA = [2, 3.], - jB = [0, [2, 4.], 0], - jC = [0, [3, cst_keyword], 0], - jD = [2, 1.], - jE = [0, [3, cst_effects], 0], - jF = [2, 1.], - jG = [2, 2.], - jH = [2, 1.], - jI = [4, cst_fn]; + j5 = [0, [3, cst_list], 0], + j6 = [3, cst_fn], + j7 = [0, [2, 4.], 0], + j8 = [0, [3, cst_keyword], 0], + j9 = [2, 1.], + j_ = [0, [3, cst_effects], 0], + j$ = [2, 1.], + ka = [0, [2, 4.], 0], + kb = [0, [3, cst_keyword], 0], + kc = [2, 1.], + kd = [0, [3, cst_effects], 0], + ke = [2, 1.], + kf = [2, 3.], + kg = [0, [2, 4.], 0], + kh = [0, [3, cst_keyword], 0], + ki = [2, 1.], + kj = [0, [3, cst_effects], 0], + kk = [2, 1.], + kl = [2, 2.], + km = [2, 1.]; function step_sf_define(args, env, kont){ - var match = Sx_runtime[15].call(null, args); - if(typeof match === "number" || ! (6 === match[0])) - var args$0 = args; - else{ - var match$0 = match[1]; - if(match$0) - var - params = match$0[2], - fn_name = match$0[1], - s = Sx_runtime[16].call(null, args), - body_parts = Sx_runtime[6].call(null, s), - args$0 = - [6, [0, fn_name, [0, [6, [0, jI, [0, [6, params], body_parts]]], 0]]]; - else - var args$0 = args; - } var - name_sym = Sx_runtime[15].call(null, args$0), - c = [0, Sx_runtime[25].call(null, args$0), jq], - and = Sx_runtime[2].call(null, cst$2, c); + c = Sx_runtime[15].call(null, args), + d = [0, Sx_runtime[74].call(null, c), j5], + e = Sx_runtime[2].call(null, cst, d); + if(Sx_types[71].call(null, e)) + var + f = Sx_runtime[15].call(null, args), + fn_name = Sx_runtime[15].call(null, f), + g = Sx_runtime[15].call(null, args), + params = Sx_runtime[16].call(null, g), + body_parts = Sx_runtime[16].call(null, args), + h = + [0, + [6, [0, Sx_types[59].call(null, j6), 0]], + [0, [6, [0, params, 0]], [0, body_parts, 0]]], + resolved_args = + [6, [0, fn_name, [0, Sx_runtime[2].call(null, cst_concat, h), 0]]]; + else + var resolved_args = args; + var + name_sym = Sx_runtime[15].call(null, resolved_args), + i = [0, Sx_runtime[25].call(null, resolved_args), j7], + and = Sx_runtime[2].call(null, cst$2, i); if(Sx_types[71].call(null, and)){ var - d = Sx_runtime[18].call(null, args$0, js), - e = [0, Sx_runtime[74].call(null, d), jr], - and$0 = Sx_runtime[2].call(null, cst, e); + j = Sx_runtime[18].call(null, resolved_args, j9), + k = [0, Sx_runtime[74].call(null, j), j8], + and$0 = Sx_runtime[2].call(null, cst, k); if(Sx_types[71].call(null, and$0)) var - f = Sx_runtime[18].call(null, args$0, ju), - g = [0, Sx_types[73].call(null, f), jt], - has_effects = Sx_runtime[2].call(null, cst, g); + l = Sx_runtime[18].call(null, resolved_args, j$), + m = [0, Sx_types[73].call(null, l), j_], + has_effects = Sx_runtime[2].call(null, cst, m); else var has_effects = and$0; } else var has_effects = and; var - h = [0, Sx_runtime[25].call(null, args$0), jv], - and$1 = Sx_runtime[2].call(null, cst$2, h); + n = [0, Sx_runtime[25].call(null, resolved_args), ka], + and$1 = Sx_runtime[2].call(null, cst$2, n); if(Sx_types[71].call(null, and$1)){ var - i = Sx_runtime[18].call(null, args$0, jx), - j = [0, Sx_runtime[74].call(null, i), jw], - and$2 = Sx_runtime[2].call(null, cst, j); + o = Sx_runtime[18].call(null, resolved_args, kc), + p = [0, Sx_runtime[74].call(null, o), kb], + and$2 = Sx_runtime[2].call(null, cst, p); if(Sx_types[71].call(null, and$2)) var - k = Sx_runtime[18].call(null, args$0, jz), - l = [0, Sx_types[73].call(null, k), jy], - a = Sx_runtime[2].call(null, cst, l); + q = Sx_runtime[18].call(null, resolved_args, ke), + r = [0, Sx_types[73].call(null, q), kd], + a = Sx_runtime[2].call(null, cst, r); else var a = and$2; } else var a = and$1; var - val_idx = Sx_types[71].call(null, a) ? jA : jH, - m = [0, Sx_runtime[25].call(null, args$0), jB], - and$3 = Sx_runtime[2].call(null, cst$2, m); + val_idx = Sx_types[71].call(null, a) ? kf : km, + s = [0, Sx_runtime[25].call(null, resolved_args), kg], + and$3 = Sx_runtime[2].call(null, cst$2, s); if(Sx_types[71].call(null, and$3)){ var - n = Sx_runtime[18].call(null, args$0, jD), - o = [0, Sx_runtime[74].call(null, n), jC], - and$4 = Sx_runtime[2].call(null, cst, o); + t = Sx_runtime[18].call(null, resolved_args, ki), + u = [0, Sx_runtime[74].call(null, t), kh], + and$4 = Sx_runtime[2].call(null, cst, u); if(Sx_types[71].call(null, and$4)) var - p = Sx_runtime[18].call(null, args$0, jF), - q = [0, Sx_types[73].call(null, p), jE], - b = Sx_runtime[2].call(null, cst, q); + v = Sx_runtime[18].call(null, resolved_args, kk), + w = [0, Sx_types[73].call(null, v), kj], + b = Sx_runtime[2].call(null, cst, w); else var b = and$4; } @@ -63394,43 +63633,46 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = and$3; var effect_list = - Sx_types[71].call(null, b) ? Sx_runtime[18].call(null, args$0, jG) : 0, - r = + Sx_types[71].call(null, b) + ? Sx_runtime[18].call(null, resolved_args, kl) + : 0, + x = kont_push (make_define_frame (Sx_types[72].call(null, name_sym), env, has_effects, effect_list), kont); - return make_cek_state(Sx_runtime[18].call(null, args$0, val_idx), env, r); + return make_cek_state + (Sx_runtime[18].call(null, resolved_args, val_idx), env, x); } - var jJ = [2, 1.]; + var kn = [2, 1.]; function step_sf_set_b(args, env, kont){ var a = Sx_runtime[15].call(null, args), b = kont_push(make_set_frame(Sx_types[72].call(null, a), env), kont); - return make_cek_state(Sx_runtime[18].call(null, args, jJ), env, b); + return make_cek_state(Sx_runtime[18].call(null, args, kn), env, b); } - var jK = [0, 1]; + var ko = [0, 1]; function step_sf_and(args, env, kont){ var a = Sx_runtime[34].call(null, args); - if(Sx_types[71].call(null, a)) return make_cek_value(jK, env, kont); + if(Sx_types[71].call(null, a)) return make_cek_value(ko, env, kont); var b = kont_push(make_and_frame(Sx_runtime[16].call(null, args), env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, b); } - var jL = [0, 0]; + var kp = [0, 0]; function step_sf_or(args, env, kont){ var a = Sx_runtime[34].call(null, args); - if(Sx_types[71].call(null, a)) return make_cek_value(jL, env, kont); + if(Sx_types[71].call(null, a)) return make_cek_value(kp, env, kont); var b = kont_push(make_or_frame(Sx_runtime[16].call(null, args), env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, b); } var - jM = [2, 1.], - jN = [0, 1], - jO = [0, [2, 2.], 0], - jP = [2, 1.], - jQ = [0, 0]; + kq = [2, 1.], + kr = [0, 1], + ks = [0, [2, 2.], 0], + kt = [2, 1.], + ku = [0, 0]; function step_sf_cond(args, env, kont){ var scheme_p = cond_scheme_p(args); if(Sx_types[71].call(null, scheme_p)){ @@ -63442,73 +63684,73 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= b = is_else_clause(test); return Sx_types[71].call(null, b) ? make_cek_state - (Sx_runtime[18].call(null, clause, jM), env, kont) + (Sx_runtime[18].call(null, clause, kq), env, kont) : make_cek_state - (test, env, kont_push(make_cond_frame(args, env, jN), kont)); + (test, env, kont_push(make_cond_frame(args, env, kr), kont)); } var - c = [0, Sx_runtime[25].call(null, args), jO], + c = [0, Sx_runtime[25].call(null, args), ks], d = Sx_runtime[2].call(null, cst$3, c); if(Sx_types[71].call(null, d)) return make_cek_value(0, env, kont); var test$0 = Sx_runtime[15].call(null, args), e = is_else_clause(test$0); return Sx_types[71].call(null, e) - ? make_cek_state(Sx_runtime[18].call(null, args, jP), env, kont) + ? make_cek_state(Sx_runtime[18].call(null, args, kt), env, kont) : make_cek_state - (test$0, env, kont_push(make_cond_frame(args, env, jQ), kont)); + (test$0, env, kont_push(make_cond_frame(args, env, ku), kont)); } - var jR = [3, cst_first]; + var kv = [3, cst_first]; function step_sf_thread_first(args, env, kont){ var a = kont_push - (make_thread_frame(Sx_runtime[16].call(null, args), env, jR, 0), kont); + (make_thread_frame(Sx_runtime[16].call(null, args), env, kv, 0), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var cst_last = "last", jS = [3, cst_last]; + var cst_last = "last", kw = [3, cst_last]; function step_sf_thread_last(args, env, kont){ var a = kont_push - (make_thread_frame(Sx_runtime[16].call(null, args), env, jS, 0), kont); + (make_thread_frame(Sx_runtime[16].call(null, args), env, kw, 0), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var jT = [2, 1.], jU = [3, cst_as]; + var kx = [2, 1.], ky = [3, cst_as]; function step_sf_thread_as(args, env, kont){ var init = Sx_runtime[15].call(null, args), - name = Sx_runtime[18].call(null, args, jT), + name = Sx_runtime[18].call(null, args, kx), a = Sx_runtime[16].call(null, args), forms = Sx_runtime[16].call(null, a); return make_cek_state (init, env, - kont_push(make_thread_frame(forms, env, jU, name), kont)); + kont_push(make_thread_frame(forms, env, ky, name), kont)); } function step_sf_lambda(args, env, kont){ return make_cek_value(sf_lambda(args, env), env, kont); } var - jV = [0, [2, 1.], 0], - jW = [0, [2, 2.], 0], - jX = [0, [3, cst_keyword], 0], - jY = [0, [3, cst_value], 0], - jZ = [2, 1.], - j0 = [0, [2, 2.], 0]; + kz = [0, [2, 1.], 0], + kA = [0, [2, 2.], 0], + kB = [0, [3, cst_keyword], 0], + kC = [0, [3, cst_value], 0], + kD = [2, 1.], + kE = [0, [2, 2.], 0]; function step_sf_scope(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - rest_args = Sx_runtime[2].call(null, cst_slice, [0, args, jV]), - b = [0, Sx_runtime[25].call(null, rest_args), jW], + rest_args = Sx_runtime[2].call(null, cst_slice, [0, args, kz]), + b = [0, Sx_runtime[25].call(null, rest_args), kA], and = Sx_runtime[2].call(null, cst$2, b); if(Sx_types[71].call(null, and)){ var c = Sx_runtime[15].call(null, rest_args), - d = [0, Sx_runtime[74].call(null, c), jX], + d = [0, Sx_runtime[74].call(null, c), kB], and$0 = Sx_runtime[2].call(null, cst, d); if(Sx_types[71].call(null, and$0)) var e = Sx_runtime[15].call(null, rest_args), - f = [0, Sx_types[73].call(null, e), jY], + f = [0, Sx_types[73].call(null, e), kC], a = Sx_runtime[2].call(null, cst, f); else var a = and$0; @@ -63517,8 +63759,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = and; if(Sx_types[71].call(null, a)) var - g = trampoline(eval_expr(Sx_runtime[18].call(null, rest_args, jZ), env)), - body = Sx_runtime[2].call(null, cst_slice, [0, rest_args, j0]), + g = trampoline(eval_expr(Sx_runtime[18].call(null, rest_args, kD), env)), + body = Sx_runtime[2].call(null, cst_slice, [0, rest_args, kE]), val = g; else var body = rest_args, val = 0; @@ -63531,12 +63773,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont); return make_cek_state(Sx_runtime[15].call(null, body), env, i); } - var j1 = [2, 1.], j2 = [0, [2, 2.], 0]; + var kF = [2, 1.], kG = [0, [2, 2.], 0]; function step_sf_provide(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - val = trampoline(eval_expr(Sx_runtime[18].call(null, args, j1), env)), - body = Sx_runtime[2].call(null, cst_slice, [0, args, j2]); + val = trampoline(eval_expr(Sx_runtime[18].call(null, args, kF), env)), + body = Sx_runtime[2].call(null, cst_slice, [0, args, kG]); Sx_runtime[105].call(null, name, val); var a = Sx_runtime[34].call(null, body); if(Sx_types[71].call(null, a)){ @@ -63550,15 +63792,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont); return make_cek_state(Sx_runtime[15].call(null, body), env, b); } - var j3 = [0, [2, 2.], 0], j4 = [2, 1.], j5 = [3, cst_value]; + var kH = [0, [2, 2.], 0], kI = [2, 1.], kJ = [3, cst_value]; function step_sf_context(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - a = [0, Sx_runtime[25].call(null, args), j3], + a = [0, Sx_runtime[25].call(null, args), kH], b = Sx_runtime[2].call(null, cst$2, a), default_val = Sx_types[71].call(null, b) - ? trampoline(eval_expr(Sx_runtime[18].call(null, args, j4), env)) + ? trampoline(eval_expr(Sx_runtime[18].call(null, args, kI), env)) : 0, frame = kont_find_provide(kont, name); if(Sx_types[71].call(null, bind_tracking_ref[1])){ @@ -63579,92 +63821,92 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ? Sx_types [71].call (null, frame) - ? Sx_runtime[26].call(null, frame, j5) + ? Sx_runtime[26].call(null, frame, kJ) : default_val : sv; return make_cek_value(f, env, kont); } var - j6 = [0, [2, 2.], 0], - j7 = [2, 1.], - j8 = [3, cst_value], - j9 = [3, cst_peek], - j_ = [3, cst_peek]; + kK = [0, [2, 2.], 0], + kL = [2, 1.], + kM = [3, cst_value], + kN = [3, cst_peek], + kO = [3, cst_peek]; function step_sf_peek(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - b = [0, Sx_runtime[25].call(null, args), j6], + b = [0, Sx_runtime[25].call(null, args), kK], c = Sx_runtime[2].call(null, cst$2, b), default_val = Sx_types[71].call(null, c) - ? trampoline(eval_expr(Sx_runtime[18].call(null, args, j7), env)) + ? trampoline(eval_expr(Sx_runtime[18].call(null, args, kL), env)) : 0, frame = kont_find_provide(kont, name); if(Sx_types[71].call(null, frame)) - var a = Sx_runtime[26].call(null, frame, j8); + var a = Sx_runtime[26].call(null, frame, kM); else{ - var d = Sx_runtime[76].call(null, env, j9); + var d = Sx_runtime[76].call(null, env, kN); if(Sx_types[71].call(null, d)) var - e = Sx_runtime[77].call(null, env, j_), + e = Sx_runtime[77].call(null, env, kO), a = Sx_runtime[8].call(null, e, [6, [0, name, [0, default_val, 0]]]); else var a = default_val; } return make_cek_value(a, env, kont); } - var j$ = [2, 1.]; + var kP = [2, 1.]; function step_sf_provide_b(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), a = kont_push(make_provide_set_frame(name, env), kont); - return make_cek_state(Sx_runtime[18].call(null, args, j$), env, a); + return make_cek_state(Sx_runtime[18].call(null, args, kP), env, a); } var cst_scope_emit = "scope-emit!", - ka = [2, 1.], - kb = [3, cst_emitted], - kc = [3, cst_emitted], - kd = [3, cst_scope_emit], - ke = [3, cst_scope_emit]; + kQ = [2, 1.], + kR = [3, cst_emitted], + kS = [3, cst_emitted], + kT = [3, cst_scope_emit], + kU = [3, cst_scope_emit]; function step_sf_emit(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), - val = trampoline(eval_expr(Sx_runtime[18].call(null, args, ka), env)), + val = trampoline(eval_expr(Sx_runtime[18].call(null, args, kQ), env)), frame = kont_find_scope_acc(kont, name); if(Sx_types[71].call(null, frame)){ var - a = [0, Sx_runtime[26].call(null, frame, kb), [0, [6, [0, val, 0]], 0]], + a = [0, Sx_runtime[26].call(null, frame, kR), [0, [6, [0, val, 0]], 0]], b = Sx_runtime[2].call(null, cst_append, a); - Sx_runtime[12].call(null, frame, kc, b); + Sx_runtime[12].call(null, frame, kS, b); return make_cek_value(0, env, kont); } - var c = Sx_runtime[76].call(null, env, kd); + var c = Sx_runtime[76].call(null, env, kT); if(Sx_types[71].call(null, c)){ - var d = Sx_runtime[77].call(null, env, ke); + var d = Sx_runtime[77].call(null, env, kU); Sx_runtime[8].call(null, d, [6, [0, name, [0, val, 0]]]); } return make_cek_value(0, env, kont); } var - kf = [3, cst_emitted], - kg = [3, cst_emitted], - kh = [3, cst_emitted], - ki = [6, 0]; + kV = [3, cst_emitted], + kW = [3, cst_emitted], + kX = [3, cst_emitted], + kY = [6, 0]; function step_sf_emitted(args, env, kont){ var name = trampoline(eval_expr(Sx_runtime[15].call(null, args), env)), frame = kont_find_scope_acc(kont, name); if(Sx_types[71].call(null, frame)) - var a = Sx_runtime[26].call(null, frame, kf); + var a = Sx_runtime[26].call(null, frame, kV); else{ - var b = Sx_runtime[76].call(null, env, kg); + var b = Sx_runtime[76].call(null, env, kW); if(Sx_types[71].call(null, b)) var - c = Sx_runtime[77].call(null, env, kh), + c = Sx_runtime[77].call(null, env, kX), a = Sx_runtime[8].call(null, c, [6, [0, name, 0]]); else - var a = ki; + var a = kY; } return make_cek_value(a, env, kont); } @@ -63672,15 +63914,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = kont_push(make_reset_frame(env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var kj = [2, 1.], kk = [2, 1.]; + var kZ = [2, 1.], k0 = [2, 1.]; function step_sf_shift(args, env, kont){ var a = Sx_runtime[15].call(null, args), k_name = Sx_types[72].call(null, a), - body = Sx_runtime[18].call(null, args, kj), + body = Sx_runtime[18].call(null, args, kZ), captured_result = kont_capture_to_reset(kont), captured = Sx_runtime[15].call(null, captured_result), - rest_kont = Sx_runtime[18].call(null, captured_result, kk), + rest_kont = Sx_runtime[18].call(null, captured_result, k0), k = Sx_runtime[96].call(null, captured, rest_kont), shift_env = Sx_runtime[81].call(null, env), b = Sx_runtime[4].call(null, k_name); @@ -63691,11 +63933,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = kont_push(make_deref_frame(env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var kl = [6, 0], km = [6, 0]; + var k1 = [6, 0], k2 = [6, 0]; function cek_call(f, args){ var b = Sx_runtime[84].call(null, args), - a = Sx_types[71].call(null, b) ? kl : args, + a = Sx_types[71].call(null, b) ? k1 : args, c = Sx_runtime[84].call(null, f); if(Sx_types[71].call(null, c)) return 0; var @@ -63703,22 +63945,22 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= or$0 = Sx_types[71].call(null, or) ? or : Sx_runtime[91].call(null, f); return Sx_types[71].call(null, or$0) ? cek_run - (continue_with_call(f, a, Sx_runtime[80].call(null, 0), a, km)) + (continue_with_call(f, a, Sx_runtime[80].call(null, 0), a, k2)) : 0; } var cst_update_fn = "update-fn", - kn = [2, 1.], - ko = [2, 2.], - kp = [3, cst_update_fn], - kq = [0, 0]; + k3 = [2, 1.], + k4 = [2, 2.], + k5 = [3, cst_update_fn], + k6 = [0, 0]; function reactive_shift_deref(sig, env, kont){ var scan_result = kont_capture_to_reactive_reset(kont), captured_frames = Sx_runtime[15].call(null, scan_result), - reset_frame = Sx_runtime[18].call(null, scan_result, kn), - remaining_kont = Sx_runtime[18].call(null, scan_result, ko), - update_fn = Sx_runtime[26].call(null, reset_frame, kp), + reset_frame = Sx_runtime[18].call(null, scan_result, k3), + remaining_kont = Sx_runtime[18].call(null, scan_result, k4), + update_fn = Sx_runtime[26].call(null, reset_frame, k5), subscriber = [15, cst$9, @@ -63726,7 +63968,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = Sx_runtime[6].call(null, 0); Stdlib_List[18].call(null, function(d){cek_call(d, 0); return 0;}, a); var - new_reset = make_reactive_reset_frame(env, update_fn, kq), + new_reset = make_reactive_reset_frame(env, update_fn, k6), new_kont = Sx_runtime[2].call (null, @@ -63765,113 +64007,150 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, [6, [0, reset_frame, 0]], [0, remaining_kont, 0]]]); return make_cek_value(Sx_runtime[116].call(null, sig), env, initial_kont); } - var kr = [0, [3, cst_symbol], 0], ks = [6, 0]; + var k7 = [0, [3, cst_symbol], 0], k8 = [6, 0]; function step_eval_call(head, args, env, kont){ var - a = [0, Sx_runtime[74].call(null, head), kr], + a = [0, Sx_runtime[74].call(null, head), k7], b = Sx_runtime[2].call(null, cst, a), hname = Sx_types[71].call(null, b) ? Sx_types[72].call(null, head) : 0; return make_cek_state (head, env, - kont_push(make_arg_frame(0, ks, args, env, args, hname), kont)); + kont_push(make_arg_frame(0, k8, args, env, args, hname), kont)); } var - kt = [0, [3, cst_map], 0], - ku = [0, [3, cst_map_indexed], 0], - kv = [0, [3, cst_filter], 0], - kw = [0, [3, cst_reduce], 0], - kx = [0, [3, cst_some], 0], - ky = [0, [3, cst_every$0], 0], - kz = [0, [3, cst_for_each], 0]; + k9 = [0, [3, cst_map], 0], + k_ = [0, [3, cst_map_indexed], 0], + k$ = [0, [3, cst_filter], 0], + la = [0, [3, cst_reduce], 0], + lb = [0, [3, cst_some], 0], + lc = [0, [3, cst_every$0], 0], + ld = [0, [3, cst_for_each], 0]; function ho_form_name_p(name){ - var or = Sx_runtime[2].call(null, cst, [0, name, kt]); + var or = Sx_runtime[2].call(null, cst, [0, name, k9]); if(Sx_types[71].call(null, or)) return or; - var or$0 = Sx_runtime[2].call(null, cst, [0, name, ku]); + var or$0 = Sx_runtime[2].call(null, cst, [0, name, k_]); if(Sx_types[71].call(null, or$0)) return or$0; - var or$1 = Sx_runtime[2].call(null, cst, [0, name, kv]); + var or$1 = Sx_runtime[2].call(null, cst, [0, name, k$]); if(Sx_types[71].call(null, or$1)) return or$1; - var or$2 = Sx_runtime[2].call(null, cst, [0, name, kw]); + var or$2 = Sx_runtime[2].call(null, cst, [0, name, la]); if(Sx_types[71].call(null, or$2)) return or$2; - var or$3 = Sx_runtime[2].call(null, cst, [0, name, kx]); + var or$3 = Sx_runtime[2].call(null, cst, [0, name, lb]); if(Sx_types[71].call(null, or$3)) return or$3; - var or$4 = Sx_runtime[2].call(null, cst, [0, name, ky]); + var or$4 = Sx_runtime[2].call(null, cst, [0, name, lc]); return Sx_types[71].call(null, or$4) ? or$4 - : Sx_runtime[2].call(null, cst, [0, name, kz]); + : Sx_runtime[2].call(null, cst, [0, name, ld]); } function ho_fn_p(v){ var or = Sx_runtime[91].call(null, v); return Sx_types[71].call(null, or) ? or : Sx_runtime[86].call(null, v); } - var kA = [0, [3, cst_reduce], 0], kB = [2, 1.], kC = [2, 2.], kD = [2, 1.]; + var le = [0, [3, cst_reduce], 0], lf = [2, 1.], lg = [2, 2.], lh = [2, 1.]; function ho_swap_args(ho_type, evaled){ - var c = Sx_runtime[2].call(null, cst, [0, ho_type, kA]); + var c = Sx_runtime[2].call(null, cst, [0, ho_type, le]); if(Sx_types[71].call(null, c)){ var a = Sx_runtime[15].call(null, evaled), - b = Sx_runtime[18].call(null, evaled, kB), + b = Sx_runtime[18].call(null, evaled, lf), d = ho_fn_p(a), and = [0, 1 - Sx_types[71].call(null, d)], e = Sx_types[71].call(null, and) ? ho_fn_p(b) : and; return Sx_types[71].call(null, e) ? [6, - [0, b, [0, Sx_runtime[18].call(null, evaled, kC), [0, a, 0]]]] + [0, b, [0, Sx_runtime[18].call(null, evaled, lg), [0, a, 0]]]] : evaled; } var a$0 = Sx_runtime[15].call(null, evaled), - b$0 = Sx_runtime[18].call(null, evaled, kD), + b$0 = Sx_runtime[18].call(null, evaled, lh), f = ho_fn_p(a$0), and$0 = [0, 1 - Sx_types[71].call(null, f)], g = Sx_types[71].call(null, and$0) ? ho_fn_p(b$0) : and$0; return Sx_types[71].call(null, g) ? [6, [0, b$0, [0, a$0, 0]]] : evaled; } var - kE = [0, [3, cst_map], 0], - kF = [0, [2, 2.], 0], - kG = [6, 0], - kH = [6, 0], - kI = [6, 0], - kJ = [2, 1.], - kK = [6, 0], - kL = [6, 0], - kM = [6, 0], - kN = [0, [3, cst_map_indexed], 0], - kO = [2, 1.], - kP = [6, 0], - kQ = [6, 0], - kR = [6, 0], - kS = [2, 0.], - kT = [0, [3, cst_filter], 0], - kU = [2, 1.], - kV = [6, 0], - kW = [6, 0], - kX = [6, 0], - kY = [0, [3, cst_reduce], 0], - kZ = [2, 1.], - k0 = [2, 2.], - k1 = [6, 0], - k2 = [0, [3, cst_some], 0], - k3 = [2, 1.], - k4 = [0, 0], - k5 = [6, 0], - k6 = [0, [3, cst_every], 0], - k7 = [2, 1.], - k8 = [0, 1], - k9 = [6, 0], - k_ = [0, [3, cst_for_each], 0], - k$ = [2, 1.], - la = [6, 0], - lb = [3, "Unknown HO type: "]; + cst_vector_list = "vector->list", + cst_vector = "vector?", + acc = [6, 0], + li = [0, 0, 0], + lj = [6, 0], + lk = [0, [2, 0.], 0], + ll = [0, [2, 1.], 0], + lm = [0, [2, 1.], 0], + ln = [0, [2, 1.], 0]; + function seq_to_list(x){ + var a = Sx_runtime[2].call(null, cst, [0, x, li]); + if(Sx_types[71].call(null, a)) return lj; + var b = Sx_runtime[38].call(null, x); + if(Sx_types[71].call(null, b)) return x; + var c = Sx_runtime[2].call(null, cst_vector, [0, x, 0]); + if(Sx_types[71].call(null, c)) + return Sx_runtime[2].call(null, cst_vector_list, [0, x, 0]); + var d = Sx_runtime[36].call(null, x); + if(! Sx_types[71].call(null, d)) return x; + var + n = Sx_runtime[25].call(null, x), + i$1 = Sx_runtime[2].call(null, cst$5, [0, n, ln]), + i = i$1, + acc$0 = acc; + for(;;){ + var e = Sx_runtime[2].call(null, cst$3, [0, i, lk]); + if(Sx_types[71].call(null, e)) return acc$0; + var + f = [0, x, [0, i, [0, Sx_runtime[2].call(null, cst$8, [0, i, ll]), 0]]], + g = Sx_runtime[2].call(null, cst_slice, f), + acc$1 = Sx_runtime[19].call(null, g, acc$0), + i$0 = Sx_runtime[2].call(null, cst$5, [0, i, lm]); + i = i$0; + acc$0 = acc$1; + } + } + var + lo = [0, [3, cst_map], 0], + lp = [0, [2, 2.], 0], + lq = [6, 0], + lr = [6, 0], + ls = [6, 0], + lt = [2, 1.], + lu = [6, 0], + lv = [6, 0], + lw = [6, 0], + lx = [0, [3, cst_map_indexed], 0], + ly = [2, 1.], + lz = [6, 0], + lA = [6, 0], + lB = [6, 0], + lC = [2, 0.], + lD = [0, [3, cst_filter], 0], + lE = [2, 1.], + lF = [6, 0], + lG = [6, 0], + lH = [6, 0], + lI = [0, [3, cst_reduce], 0], + lJ = [2, 1.], + lK = [2, 2.], + lL = [6, 0], + lM = [0, [3, cst_some], 0], + lN = [2, 1.], + lO = [0, 0], + lP = [6, 0], + lQ = [0, [3, cst_every], 0], + lR = [2, 1.], + lS = [0, 1], + lT = [6, 0], + lU = [0, [3, cst_for_each], 0], + lV = [2, 1.], + lW = [6, 0], + lX = [3, "Unknown HO type: "]; function ho_setup_dispatch(ho_type, evaled, env, kont){ var ordered = ho_swap_args(ho_type, evaled), f = Sx_runtime[15].call(null, ordered), - a = Sx_runtime[2].call(null, cst, [0, ho_type, kE]); + a = Sx_runtime[2].call(null, cst, [0, ho_type, lo]); if(Sx_types[71].call(null, a)){ var - b = [0, Sx_runtime[25].call(null, ordered), kF], + b = [0, Sx_runtime[25].call(null, ordered), lp], c = Sx_runtime[2].call(null, cst$0, b); if(Sx_types[71].call(null, c)){ var @@ -63886,7 +64165,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return Sx_types[71].call(null, a); }, d)]; - if(Sx_types[71].call(null, e)) return make_cek_value(kG, env, kont); + if(Sx_types[71].call(null, e)) return make_cek_value(lq, env, kont); var g = Sx_runtime[6].call(null, colls), heads = @@ -63902,59 +64181,59 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f, heads, env, - kI, - kont_push(make_multi_map_frame(f, tails, kH, env), kont)); + ls, + kont_push(make_multi_map_frame(f, tails, lr, env), kont)); } var - coll = seq_to_list(Sx_runtime[18].call(null, ordered, kJ)), + coll = seq_to_list(Sx_runtime[18].call(null, ordered, lt)), i = Sx_runtime[34].call(null, coll); - if(Sx_types[71].call(null, i)) return make_cek_value(kK, env, kont); + if(Sx_types[71].call(null, i)) return make_cek_value(lu, env, kont); var j = kont_push - (make_map_frame(f, Sx_runtime[16].call(null, coll), kL, env), kont); + (make_map_frame(f, Sx_runtime[16].call(null, coll), lv, env), kont); return continue_with_call - (f, [6, [0, Sx_runtime[15].call(null, coll), 0]], env, kM, j); + (f, [6, [0, Sx_runtime[15].call(null, coll), 0]], env, lw, j); } - var k = Sx_runtime[2].call(null, cst, [0, ho_type, kN]); + var k = Sx_runtime[2].call(null, cst, [0, ho_type, lx]); if(Sx_types[71].call(null, k)){ var - coll$0 = seq_to_list(Sx_runtime[18].call(null, ordered, kO)), + coll$0 = seq_to_list(Sx_runtime[18].call(null, ordered, ly)), l = Sx_runtime[34].call(null, coll$0); - if(Sx_types[71].call(null, l)) return make_cek_value(kP, env, kont); + if(Sx_types[71].call(null, l)) return make_cek_value(lz, env, kont); var m = kont_push (make_map_indexed_frame - (f, Sx_runtime[16].call(null, coll$0), kQ, env), + (f, Sx_runtime[16].call(null, coll$0), lA, env), kont); return continue_with_call (f, - [6, [0, kS, [0, Sx_runtime[15].call(null, coll$0), 0]]], + [6, [0, lC, [0, Sx_runtime[15].call(null, coll$0), 0]]], env, - kR, + lB, m); } - var n = Sx_runtime[2].call(null, cst, [0, ho_type, kT]); + var n = Sx_runtime[2].call(null, cst, [0, ho_type, lD]); if(Sx_types[71].call(null, n)){ var - coll$1 = seq_to_list(Sx_runtime[18].call(null, ordered, kU)), + coll$1 = seq_to_list(Sx_runtime[18].call(null, ordered, lE)), o = Sx_runtime[34].call(null, coll$1); - if(Sx_types[71].call(null, o)) return make_cek_value(kV, env, kont); + if(Sx_types[71].call(null, o)) return make_cek_value(lF, env, kont); var p = Sx_runtime[15].call(null, coll$1), q = kont_push - (make_filter_frame(f, Sx_runtime[16].call(null, coll$1), kW, p, env), + (make_filter_frame(f, Sx_runtime[16].call(null, coll$1), lG, p, env), kont); return continue_with_call - (f, [6, [0, Sx_runtime[15].call(null, coll$1), 0]], env, kX, q); + (f, [6, [0, Sx_runtime[15].call(null, coll$1), 0]], env, lH, q); } - var r = Sx_runtime[2].call(null, cst, [0, ho_type, kY]); + var r = Sx_runtime[2].call(null, cst, [0, ho_type, lI]); if(Sx_types[71].call(null, r)){ var - init = Sx_runtime[18].call(null, ordered, kZ), - coll$2 = seq_to_list(Sx_runtime[18].call(null, ordered, k0)), + init = Sx_runtime[18].call(null, ordered, lJ), + coll$2 = seq_to_list(Sx_runtime[18].call(null, ordered, lK)), s = Sx_runtime[34].call(null, coll$2); if(Sx_types[71].call(null, s)) return make_cek_value(init, env, kont); var @@ -63965,44 +64244,44 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f, [6, [0, init, [0, Sx_runtime[15].call(null, coll$2), 0]]], env, - k1, + lL, t); } - var u = Sx_runtime[2].call(null, cst, [0, ho_type, k2]); + var u = Sx_runtime[2].call(null, cst, [0, ho_type, lM]); if(Sx_types[71].call(null, u)){ var - coll$3 = seq_to_list(Sx_runtime[18].call(null, ordered, k3)), + coll$3 = seq_to_list(Sx_runtime[18].call(null, ordered, lN)), v = Sx_runtime[34].call(null, coll$3); - if(Sx_types[71].call(null, v)) return make_cek_value(k4, env, kont); + if(Sx_types[71].call(null, v)) return make_cek_value(lO, env, kont); var w = kont_push (make_some_frame(f, Sx_runtime[16].call(null, coll$3), env), kont); return continue_with_call - (f, [6, [0, Sx_runtime[15].call(null, coll$3), 0]], env, k5, w); + (f, [6, [0, Sx_runtime[15].call(null, coll$3), 0]], env, lP, w); } - var x = Sx_runtime[2].call(null, cst, [0, ho_type, k6]); + var x = Sx_runtime[2].call(null, cst, [0, ho_type, lQ]); if(Sx_types[71].call(null, x)){ var - coll$4 = seq_to_list(Sx_runtime[18].call(null, ordered, k7)), + coll$4 = seq_to_list(Sx_runtime[18].call(null, ordered, lR)), y = Sx_runtime[34].call(null, coll$4); - if(Sx_types[71].call(null, y)) return make_cek_value(k8, env, kont); + if(Sx_types[71].call(null, y)) return make_cek_value(lS, env, kont); var z = kont_push (make_every_frame(f, Sx_runtime[16].call(null, coll$4), env), kont); return continue_with_call - (f, [6, [0, Sx_runtime[15].call(null, coll$4), 0]], env, k9, z); + (f, [6, [0, Sx_runtime[15].call(null, coll$4), 0]], env, lT, z); } - var A = Sx_runtime[2].call(null, cst, [0, ho_type, k_]); + var A = Sx_runtime[2].call(null, cst, [0, ho_type, lU]); if(! Sx_types[71].call(null, A)){ var - D = [3, Sx_runtime[5].call(null, [0, lb, [0, ho_type, 0]])], + D = [3, Sx_runtime[5].call(null, [0, lX, [0, ho_type, 0]])], E = Sx_runtime[3].call(null, D); throw caml_maybe_attach_backtrace([0, Sx_types[9], E], 1); } var - coll$5 = seq_to_list(Sx_runtime[18].call(null, ordered, k$)), + coll$5 = seq_to_list(Sx_runtime[18].call(null, ordered, lV)), B = Sx_runtime[34].call(null, coll$5); if(Sx_types[71].call(null, B)) return make_cek_value(0, env, kont); var @@ -64010,68 +64289,129 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= kont_push (make_for_each_frame(f, Sx_runtime[16].call(null, coll$5), env), kont); return continue_with_call - (f, [6, [0, Sx_runtime[15].call(null, coll$5), 0]], env, la, C); + (f, [6, [0, Sx_runtime[15].call(null, coll$5), 0]], env, lW, C); } - var lc = [6, 0], ld = [3, cst_map]; + function sequence_to_list(s){return seq_to_list(s);} + var cst_list_vector = "list->vector"; + function sequence_to_vector(s){ + var a = [0, seq_to_list(s), 0]; + return Sx_runtime[2].call(null, cst_list_vector, a); + } + var lY = [0, 0, 0], lZ = [2, 0.]; + function sequence_length(s){ + var a = Sx_runtime[2].call(null, cst, [0, s, lY]); + if(Sx_types[71].call(null, a)) return lZ; + var b = Sx_runtime[38].call(null, s); + if(Sx_types[71].call(null, b)) return Sx_runtime[25].call(null, s); + var c = Sx_runtime[2].call(null, cst_vector, [0, s, 0]); + if(Sx_types[71].call(null, c)) + return Sx_runtime[2].call(null, "vector-length", [0, s, 0]); + var d = Sx_runtime[36].call(null, s); + if(Sx_types[71].call(null, d)) return Sx_runtime[25].call(null, s); + var e = seq_to_list(s); + return Sx_runtime[25].call(null, e); + } + var l0 = [0, 0, 0], l1 = [0, [2, 1.], 0]; + function sequence_ref(s, i){ + var + or = Sx_runtime[2].call(null, cst, [0, s, l0]), + or$0 = Sx_types[71].call(null, or) ? or : Sx_runtime[38].call(null, s); + if(Sx_types[71].call(null, or$0)) return Sx_runtime[18].call(null, s, i); + var a = Sx_runtime[2].call(null, cst_vector, [0, s, 0]); + if(Sx_types[71].call(null, a)) + return Sx_runtime[2].call(null, "vector-ref", [0, s, [0, i, 0]]); + var b = Sx_runtime[36].call(null, s); + if(Sx_types[71].call(null, b)){ + var + c = [0, s, [0, i, [0, Sx_runtime[2].call(null, cst$8, [0, i, l1]), 0]]]; + return Sx_runtime[2].call(null, cst_slice, c); + } + var d = seq_to_list(s); + return Sx_runtime[18].call(null, d, i); + } + function sequence_append(s1, s2){ + var + and = Sx_runtime[2].call(null, cst_vector, [0, s1, 0]), + a = + Sx_types[71].call(null, and) + ? Sx_runtime[2].call(null, cst_vector, [0, s2, 0]) + : and; + if(Sx_types[71].call(null, a)){ + var + b = [0, Sx_runtime[2].call(null, cst_vector_list, [0, s2, 0]), 0], + c = [0, Sx_runtime[2].call(null, cst_vector_list, [0, s1, 0]), b], + d = [0, Sx_runtime[2].call(null, cst_concat, c), 0]; + return Sx_runtime[2].call(null, cst_list_vector, d); + } + var + and$0 = Sx_runtime[36].call(null, s1), + e = + Sx_types[71].call(null, and$0) ? Sx_runtime[36].call(null, s2) : and$0; + if(Sx_types[71].call(null, e)) + return [3, Sx_runtime[5].call(null, [0, s1, [0, s2, 0]])]; + var f = [0, seq_to_list(s2), 0], g = [0, seq_to_list(s1), f]; + return Sx_runtime[2].call(null, cst_concat, g); + } + var l2 = [6, 0], l3 = [3, cst_map]; function step_ho_map(args, env, kont){ var a = kont_push - (make_ho_setup_frame(ld, Sx_runtime[16].call(null, args), lc, env), + (make_ho_setup_frame(l3, Sx_runtime[16].call(null, args), l2, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var le = [6, 0], lf = [3, cst_map_indexed]; + var l4 = [6, 0], l5 = [3, cst_map_indexed]; function step_ho_map_indexed(args, env, kont){ var a = kont_push - (make_ho_setup_frame(lf, Sx_runtime[16].call(null, args), le, env), + (make_ho_setup_frame(l5, Sx_runtime[16].call(null, args), l4, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var lg = [6, 0], lh = [3, cst_filter]; + var l6 = [6, 0], l7 = [3, cst_filter]; function step_ho_filter(args, env, kont){ var a = kont_push - (make_ho_setup_frame(lh, Sx_runtime[16].call(null, args), lg, env), + (make_ho_setup_frame(l7, Sx_runtime[16].call(null, args), l6, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var li = [6, 0], lj = [3, cst_reduce]; + var l8 = [6, 0], l9 = [3, cst_reduce]; function step_ho_reduce(args, env, kont){ var a = kont_push - (make_ho_setup_frame(lj, Sx_runtime[16].call(null, args), li, env), + (make_ho_setup_frame(l9, Sx_runtime[16].call(null, args), l8, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var lk = [6, 0], ll = [3, cst_some]; + var l_ = [6, 0], l$ = [3, cst_some]; function step_ho_some(args, env, kont){ var a = kont_push - (make_ho_setup_frame(ll, Sx_runtime[16].call(null, args), lk, env), + (make_ho_setup_frame(l$, Sx_runtime[16].call(null, args), l_, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var lm = [6, 0], ln = [3, cst_every]; + var ma = [6, 0], mb = [3, cst_every]; function step_ho_every(args, env, kont){ var a = kont_push - (make_ho_setup_frame(ln, Sx_runtime[16].call(null, args), lm, env), + (make_ho_setup_frame(mb, Sx_runtime[16].call(null, args), ma, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } - var lo = [6, 0], lp = [3, cst_for_each]; + var mc = [6, 0], md = [3, cst_for_each]; function step_ho_for_each(args, env, kont){ var a = kont_push - (make_ho_setup_frame(lp, Sx_runtime[16].call(null, args), lo, env), + (make_ho_setup_frame(md, Sx_runtime[16].call(null, args), mc, env), kont); return make_cek_state(Sx_runtime[15].call(null, args), env, a); } @@ -64086,244 +64426,244 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst_scheme = "scheme", cst_subscribers = "subscribers", last_error_kont_ref = [0, 0], - lq = [0, [3, cst_if], 0], - lr = [3, cst_env], - ls = [3, "then"], - lt = [3, cst_else], - lu = [3, cst_env], - lv = [3, cst_else], - lw = [0, [3, cst_when], 0], - lx = [3, cst_body], - ly = [3, cst_env], - lz = [0, [2, 1.], 0], - lA = [0, [3, cst_begin], 0], - lB = [3, cst_remaining], - lC = [3, cst_env], - lD = [0, [2, 1.], 0], - lE = [0, [3, cst_let], 0], - lF = [3, cst_name], - lG = [3, cst_remaining], - lH = [3, cst_body], - lI = [3, cst_env], - lJ = [0, [3, cst_symbol], 0], - lK = [2, 1.], - lL = [0, [3, cst_define], 0], - lM = [3, cst_name], - lN = [3, cst_env], - lO = [3, "has-effects"], - lP = [3, "effect-list"], - lQ = [0, [3, cst_symbol], 0], - lR = [3, cst_effect_annotations], - lS = [3, cst_effect_annotations], - lT = [3, cst_effect_annotations], - lU = [0, [3, cst_define_foreign], 0], - lV = [3, cst_name], - lW = [3, cst_env], - lX = [0, [3, cst_set], 0], - lY = [3, cst_name], - lZ = [3, cst_env], - l0 = [0, [3, cst_and], 0], - l1 = [3, cst_remaining], - l2 = [0, [2, 1.], 0], - l3 = [3, cst_env], - l4 = [3, cst_env], - l5 = [0, [3, cst_or], 0], - l6 = [3, cst_remaining], - l7 = [0, 0], - l8 = [0, [2, 1.], 0], - l9 = [3, cst_env], - l_ = [3, cst_env], - l$ = [0, [3, cst_cond], 0], - ma = [3, cst_remaining], - mb = [3, cst_env], - mc = [3, cst_scheme], - md = [0, [2, 2.], 0], - me = [0, [3, cst_symbol], 0], - mf = [2, 1.], - mg = [0, [3, cst$10], 0], - mh = [2, 1.], - mi = [2, 2.], - mj = [2, 1.], - mk = [2, 1.], - ml = [0, 1], - mm = [2, 1.], - mn = [2, 2.], - mo = [0, [2, 2.], 0], - mp = [2, 1.], - mq = [0, 0], - mr = [0, [3, cst_case], 0], - ms = [3, cst_match_val], - mt = [3, cst_remaining], - mu = [3, cst_env], - mv = [0, [3, cst_thread], 0], - mw = [3, cst_remaining], - mx = [3, cst_env], - my = [3, "extra"], - mz = [3, cst_name], - mA = [0, [3, cst_as], 0], - mB = [0, [3, cst_list], 0], - mC = [0, [3, cst_symbol], 0], - mD = [4, cst_quote], - mE = [0, [3, cst_last], 0], - mF = [0, [3, cst_arg], 0], - mG = [3, cst_f], - mH = [3, cst_evaled], - mI = [3, cst_remaining], - mJ = [3, cst_env], - mK = [3, "raw-args"], - mL = [3, "head-name"], - mM = [6, 0], - mN = [6, 0], - mO = [6, 0], - mP = [0, [3, cst_dict], 0], - mQ = [3, cst_remaining], - mR = [3, cst_results], + me = [0, [3, cst_if], 0], + mf = [3, cst_env], + mg = [3, "then"], + mh = [3, cst_else], + mi = [3, cst_env], + mj = [3, cst_else], + mk = [0, [3, cst_when], 0], + ml = [3, cst_body], + mm = [3, cst_env], + mn = [0, [2, 1.], 0], + mo = [0, [3, cst_begin], 0], + mp = [3, cst_remaining], + mq = [3, cst_env], + mr = [0, [2, 1.], 0], + ms = [0, [3, cst_let], 0], + mt = [3, cst_name], + mu = [3, cst_remaining], + mv = [3, cst_body], + mw = [3, cst_env], + mx = [0, [3, cst_symbol], 0], + my = [2, 1.], + mz = [0, [3, cst_define], 0], + mA = [3, cst_name], + mB = [3, cst_env], + mC = [3, "has-effects"], + mD = [3, "effect-list"], + mE = [0, [3, cst_symbol], 0], + mF = [3, cst_effect_annotations], + mG = [3, cst_effect_annotations], + mH = [3, cst_effect_annotations], + mI = [0, [3, cst_define_foreign], 0], + mJ = [3, cst_name], + mK = [3, cst_env], + mL = [0, [3, cst_set], 0], + mM = [3, cst_name], + mN = [3, cst_env], + mO = [0, [3, cst_and], 0], + mP = [3, cst_remaining], + mQ = [0, [2, 1.], 0], + mR = [3, cst_env], mS = [3, cst_env], - mT = [2, 0.], - mU = [2, 1.], - mV = [2, 1.], - mW = [0, [3, cst_ho_setup], 0], - mX = [3, "ho-type"], - mY = [3, cst_remaining], - mZ = [3, cst_evaled], - m0 = [3, cst_env], - m1 = [0, [3, cst_reset], 0], - m2 = [0, [3, cst_deref], 0], - m3 = [3, cst_env], - m4 = [3, "sx-reactive"], - m5 = [3, "deps"], - m6 = [3, "notify"], - m7 = [0, [3, cst_reactive_reset], 0], - m8 = [3, cst_update_fn], - m9 = [3, "first-render"], - m_ = [0, [3, cst_scope], 0], - m$ = [3, cst_name], - na = [3, cst_remaining], - nb = [3, cst_env], - nc = [0, [3, cst_provide], 0], - nd = [3, cst_remaining], - ne = [3, cst_env], - nf = [3, cst_name], - ng = [3, cst_value], - nh = [3, cst_name], - ni = [3, cst_subscribers], - nj = [3, cst_subscribers], - nk = [0, [3, cst_bind], 0], - nl = [3, cst_body], - nm = [3, cst_env], - nn = [3, "prev-tracking"], - no = [6, 0], - np = [6, 0], - nq = [0, [3, cst_provide_set], 0], - nr = [3, cst_name], - ns = [3, cst_env], - nt = [3, cst_value], - nu = [3, cst_value], - nv = [0, [3, cst_scope_acc], 0], + mT = [0, [3, cst_or], 0], + mU = [3, cst_remaining], + mV = [0, 0], + mW = [0, [2, 1.], 0], + mX = [3, cst_env], + mY = [3, cst_env], + mZ = [0, [3, cst_cond], 0], + m0 = [3, cst_remaining], + m1 = [3, cst_env], + m2 = [3, cst_scheme], + m3 = [0, [2, 2.], 0], + m4 = [0, [3, cst_symbol], 0], + m5 = [2, 1.], + m6 = [0, [3, cst$10], 0], + m7 = [2, 1.], + m8 = [2, 2.], + m9 = [2, 1.], + m_ = [2, 1.], + m$ = [0, 1], + na = [2, 1.], + nb = [2, 2.], + nc = [0, [2, 2.], 0], + nd = [2, 1.], + ne = [0, 0], + nf = [0, [3, cst_case], 0], + ng = [3, cst_match_val], + nh = [3, cst_remaining], + ni = [3, cst_env], + nj = [0, [3, cst_thread], 0], + nk = [3, cst_remaining], + nl = [3, cst_env], + nm = [3, "extra"], + nn = [3, cst_name], + no = [0, [3, cst_as], 0], + np = [0, [3, cst_list], 0], + nq = [0, [3, cst_symbol], 0], + nr = [4, cst_quote], + ns = [0, [3, cst_last], 0], + nt = [0, [3, cst_arg], 0], + nu = [3, cst_f], + nv = [3, cst_evaled], nw = [3, cst_remaining], nx = [3, cst_env], - ny = [3, cst_value], - nz = [3, cst_name], - nA = [3, cst_emitted], - nB = [3, cst_emitted], - nC = [0, [3, cst_map], 0], - nD = [3, cst_f], + ny = [3, "raw-args"], + nz = [3, "head-name"], + nA = [6, 0], + nB = [6, 0], + nC = [6, 0], + nD = [0, [3, cst_dict], 0], nE = [3, cst_remaining], nF = [3, cst_results], - nG = [3, "indexed"], - nH = [3, cst_env], - nI = [6, 0], - nJ = [0, [3, cst_filter], 0], - nK = [3, cst_f], - nL = [3, cst_remaining], - nM = [3, cst_results], - nN = [3, "current-item"], + nG = [3, cst_env], + nH = [2, 0.], + nI = [2, 1.], + nJ = [2, 1.], + nK = [0, [3, cst_ho_setup], 0], + nL = [3, "ho-type"], + nM = [3, cst_remaining], + nN = [3, cst_evaled], nO = [3, cst_env], - nP = [6, 0], - nQ = [0, [3, cst_reduce], 0], - nR = [3, cst_f], - nS = [3, cst_remaining], - nT = [3, cst_env], - nU = [6, 0], - nV = [0, [3, cst_for_each], 0], - nW = [3, cst_f], - nX = [3, cst_remaining], - nY = [3, cst_env], - nZ = [6, 0], - n0 = [0, [3, cst_some], 0], - n1 = [3, cst_f], - n2 = [3, cst_remaining], - n3 = [3, cst_env], - n4 = [0, 0], - n5 = [6, 0], - n6 = [0, [3, cst_every], 0], - n7 = [3, cst_f], - n8 = [3, cst_remaining], - n9 = [3, cst_env], - n_ = [0, 0], - n$ = [0, 1], - oa = [6, 0], - ob = [0, [3, cst_handler], 0], - oc = [3, cst_remaining], - od = [3, cst_env], - oe = [3, cst_f], - of = [0, [3, cst_restart], 0], - og = [0, [3, cst_signal_return], 0], - oh = [3, "saved-kont"], - oi = [3, cst_env], - oj = [0, [3, cst_comp_trace], 0], - ok = [0, [3, cst_cond_arrow], 0], - ol = [3, cst_match_val], - om = [3, cst_env], - on = [0, [3, cst_wind_after], 0], - oo = [3, cst_after_thunk], - op = [3, cst_winders_len], - oq = [3, cst_env], - or = [6, 0], - os = [6, 0], - ot = [0, [3, cst_wind_return], 0], - ou = [3, cst_env], - ov = [3, "body-result"], - ow = [0, [3, cst_raise_eval], 0], - ox = [3, cst_env], - oy = [3, cst_scheme], - oz = [3, cst_handler], - oA = [3, cst_kont], - oB = [3, "Unhandled exception: "], - oC = [0, [3, cst_raise_guard], 0], - oD = [3, "exception handler returned from non-continuable raise"], - oE = [0, [3, cst_multi_map], 0], + nP = [0, [3, cst_reset], 0], + nQ = [0, [3, cst_deref], 0], + nR = [3, cst_env], + nS = [3, "sx-reactive"], + nT = [3, "deps"], + nU = [3, "notify"], + nV = [0, [3, cst_reactive_reset], 0], + nW = [3, cst_update_fn], + nX = [3, "first-render"], + nY = [0, [3, cst_scope], 0], + nZ = [3, cst_name], + n0 = [3, cst_remaining], + n1 = [3, cst_env], + n2 = [0, [3, cst_provide], 0], + n3 = [3, cst_remaining], + n4 = [3, cst_env], + n5 = [3, cst_name], + n6 = [3, cst_value], + n7 = [3, cst_name], + n8 = [3, cst_subscribers], + n9 = [3, cst_subscribers], + n_ = [0, [3, cst_bind], 0], + n$ = [3, cst_body], + oa = [3, cst_env], + ob = [3, "prev-tracking"], + oc = [6, 0], + od = [6, 0], + oe = [0, [3, cst_provide_set], 0], + of = [3, cst_name], + og = [3, cst_env], + oh = [3, cst_value], + oi = [3, cst_value], + oj = [0, [3, cst_scope_acc], 0], + ok = [3, cst_remaining], + ol = [3, cst_env], + om = [3, cst_value], + on = [3, cst_name], + oo = [3, cst_emitted], + op = [3, cst_emitted], + oq = [0, [3, cst_map], 0], + or = [3, cst_f], + os = [3, cst_remaining], + ot = [3, cst_results], + ou = [3, "indexed"], + ov = [3, cst_env], + ow = [6, 0], + ox = [0, [3, cst_filter], 0], + oy = [3, cst_f], + oz = [3, cst_remaining], + oA = [3, cst_results], + oB = [3, "current-item"], + oC = [3, cst_env], + oD = [6, 0], + oE = [0, [3, cst_reduce], 0], oF = [3, cst_f], oG = [3, cst_remaining], - oH = [3, cst_results], - oI = [3, cst_env], - oJ = [6, 0], - oK = [0, [3, cst_callcc], 0], - oL = [3, cst_env], - oM = [0, [3, cst_vm_resume], 0], - oN = [3, cst_f], - oO = [3, cst_vm_suspended], - oP = [3, cst_env], - oQ = [3, cst_resume], + oH = [3, cst_env], + oI = [6, 0], + oJ = [0, [3, cst_for_each], 0], + oK = [3, cst_f], + oL = [3, cst_remaining], + oM = [3, cst_env], + oN = [6, 0], + oO = [0, [3, cst_some], 0], + oP = [3, cst_f], + oQ = [3, cst_remaining], oR = [3, cst_env], - oS = [3, cst_request], - oT = [3, cst_env], - oU = [0, [3, cst_perform], 0], - oV = [3, cst_env], - oW = [0, [3, cst_import], 0], - oX = [3, cst_args], - oY = [3, cst_remaining], - oZ = [3, cst_env], - o0 = [0, [3, cst_parameterize], 0], - o1 = [3, cst_remaining], - o2 = [3, cst_f], - o3 = [3, cst_results], - o4 = [3, cst_body], - o5 = [3, cst_env], - o6 = [2, 1.], - o7 = [0, [2, 1.], 0], - o8 = [4, cst_begin], - o9 = [3, "Unknown frame type: "]; + oS = [0, 0], + oT = [6, 0], + oU = [0, [3, cst_every], 0], + oV = [3, cst_f], + oW = [3, cst_remaining], + oX = [3, cst_env], + oY = [0, 0], + oZ = [0, 1], + o0 = [6, 0], + o1 = [0, [3, cst_handler], 0], + o2 = [3, cst_remaining], + o3 = [3, cst_env], + o4 = [3, cst_f], + o5 = [0, [3, cst_restart], 0], + o6 = [0, [3, cst_signal_return], 0], + o7 = [3, cst_f], + o8 = [3, cst_env], + o9 = [0, [3, cst_comp_trace], 0], + o_ = [0, [3, cst_cond_arrow], 0], + o$ = [3, cst_match_val], + pa = [3, cst_env], + pb = [0, [3, cst_wind_after], 0], + pc = [3, cst_after_thunk], + pd = [3, cst_winders_len], + pe = [3, cst_env], + pf = [6, 0], + pg = [6, 0], + ph = [0, [3, cst_wind_return], 0], + pi = [3, cst_env], + pj = [3, "body-result"], + pk = [0, [3, cst_raise_eval], 0], + pl = [3, cst_env], + pm = [3, cst_scheme], + pn = [3, cst_handler], + po = [3, cst_kont], + pp = [3, "Unhandled exception: "], + pq = [0, [3, cst_raise_guard], 0], + pr = [3, "exception handler returned from non-continuable raise"], + ps = [0, [3, cst_multi_map], 0], + pt = [3, cst_f], + pu = [3, cst_remaining], + pv = [3, cst_results], + pw = [3, cst_env], + px = [6, 0], + py = [0, [3, cst_callcc], 0], + pz = [3, cst_env], + pA = [0, [3, cst_vm_resume], 0], + pB = [3, cst_f], + pC = [3, cst_vm_suspended], + pD = [3, cst_env], + pE = [3, cst_resume], + pF = [3, cst_env], + pG = [3, cst_request], + pH = [3, cst_env], + pI = [0, [3, cst_perform], 0], + pJ = [3, cst_env], + pK = [0, [3, cst_import], 0], + pL = [3, cst_args], + pM = [3, cst_remaining], + pN = [3, cst_env], + pO = [0, [3, cst_parameterize], 0], + pP = [3, cst_remaining], + pQ = [3, cst_f], + pR = [3, cst_results], + pS = [3, cst_body], + pT = [3, cst_env], + pU = [2, 1.], + pV = [0, [2, 1.], 0], + pW = [4, cst_begin], + pX = [3, "Unknown frame type: "]; function step_continue(state){ var converted_val = cek_value(state), @@ -64335,7 +64675,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= frame = kont_top(kont), rest_k = kont_pop(kont), match_val = frame_type(frame), - j = Sx_runtime[2].call(null, cst, [0, match_val, lq]); + j = Sx_runtime[2].call(null, cst, [0, match_val, me]); if(Sx_types[71].call(null, j)){ if(Sx_types[71].call(null, converted_val)) var @@ -64344,17 +64684,17 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= else var c = converted_val; if(Sx_types[71].call(null, c)){ - var m = Sx_runtime[26].call(null, frame, lr); - return make_cek_state(Sx_runtime[26].call(null, frame, ls), m, rest_k); + var m = Sx_runtime[26].call(null, frame, mf); + return make_cek_state(Sx_runtime[26].call(null, frame, mg), m, rest_k); } var - n = Sx_runtime[26].call(null, frame, lt), + n = Sx_runtime[26].call(null, frame, mh), o = Sx_runtime[84].call(null, n); if(Sx_types[71].call(null, o)) return make_cek_value(0, env, rest_k); - var p = Sx_runtime[26].call(null, frame, lu); - return make_cek_state(Sx_runtime[26].call(null, frame, lv), p, rest_k); + var p = Sx_runtime[26].call(null, frame, mi); + return make_cek_state(Sx_runtime[26].call(null, frame, mj), p, rest_k); } - var q = Sx_runtime[2].call(null, cst, [0, match_val, lw]); + var q = Sx_runtime[2].call(null, cst, [0, match_val, mk]); if(Sx_types[71].call(null, q)){ if(Sx_types[71].call(null, converted_val)) var @@ -64364,12 +64704,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var e = converted_val; if(! Sx_types[71].call(null, e)) return make_cek_value(0, env, rest_k); var - body = Sx_runtime[26].call(null, frame, lx), - fenv = Sx_runtime[26].call(null, frame, ly), + body = Sx_runtime[26].call(null, frame, ml), + fenv = Sx_runtime[26].call(null, frame, mm), s = Sx_runtime[34].call(null, body); if(Sx_types[71].call(null, s)) return make_cek_value(0, fenv, rest_k); var - t = [0, Sx_runtime[25].call(null, body), lz], + t = [0, Sx_runtime[25].call(null, body), mn], u = Sx_runtime[2].call(null, cst, t); if(Sx_types[71].call(null, u)) return make_cek_state(Sx_runtime[15].call(null, body), fenv, rest_k); @@ -64379,16 +64719,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (make_begin_frame(Sx_runtime[16].call(null, body), fenv), rest_k); return make_cek_state(Sx_runtime[15].call(null, body), fenv, v); } - var w = Sx_runtime[2].call(null, cst, [0, match_val, lA]); + var w = Sx_runtime[2].call(null, cst, [0, match_val, mo]); if(Sx_types[71].call(null, w)){ var - remaining = Sx_runtime[26].call(null, frame, lB), - fenv$0 = Sx_runtime[26].call(null, frame, lC), + remaining = Sx_runtime[26].call(null, frame, mp), + fenv$0 = Sx_runtime[26].call(null, frame, mq), x = Sx_runtime[34].call(null, remaining); if(Sx_types[71].call(null, x)) return make_cek_value(converted_val, fenv$0, rest_k); var - y = [0, Sx_runtime[25].call(null, remaining), lD], + y = [0, Sx_runtime[25].call(null, remaining), mr], z = Sx_runtime[2].call(null, cst, y); if(Sx_types[71].call(null, z)) return make_cek_state @@ -64400,13 +64740,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= rest_k); return make_cek_state(Sx_runtime[15].call(null, remaining), fenv$0, A); } - var B = Sx_runtime[2].call(null, cst, [0, match_val, lE]); + var B = Sx_runtime[2].call(null, cst, [0, match_val, ms]); if(Sx_types[71].call(null, B)){ var - name = Sx_runtime[26].call(null, frame, lF), - remaining$0 = Sx_runtime[26].call(null, frame, lG), - body$0 = Sx_runtime[26].call(null, frame, lH), - local = Sx_runtime[26].call(null, frame, lI), + name = Sx_runtime[26].call(null, frame, mt), + remaining$0 = Sx_runtime[26].call(null, frame, mu), + body$0 = Sx_runtime[26].call(null, frame, mv), + local = Sx_runtime[26].call(null, frame, mw), C = Sx_runtime[4].call(null, name); Sx_runtime[78].call(null, local, C, converted_val); var D = Sx_runtime[34].call(null, remaining$0); @@ -64415,7 +64755,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var next_binding = Sx_runtime[15].call(null, remaining$0), E = Sx_runtime[15].call(null, next_binding), - F = [0, Sx_runtime[74].call(null, E), lJ], + F = [0, Sx_runtime[74].call(null, E), mx], G = Sx_runtime[2].call(null, cst, F); if(Sx_types[71].call(null, G)) var @@ -64430,15 +64770,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (vname, Sx_runtime[16].call(null, remaining$0), body$0, local), rest_k); return make_cek_state - (Sx_runtime[18].call(null, next_binding, lK), local, I); + (Sx_runtime[18].call(null, next_binding, my), local, I); } - var J = Sx_runtime[2].call(null, cst, [0, match_val, lL]); + var J = Sx_runtime[2].call(null, cst, [0, match_val, mz]); if(Sx_types[71].call(null, J)){ var - name$0 = Sx_runtime[26].call(null, frame, lM), - fenv$1 = Sx_runtime[26].call(null, frame, lN), - has_effects = Sx_runtime[26].call(null, frame, lO), - effect_list = Sx_runtime[26].call(null, frame, lP), + name$0 = Sx_runtime[26].call(null, frame, mA), + fenv$1 = Sx_runtime[26].call(null, frame, mB), + has_effects = Sx_runtime[26].call(null, frame, mC), + effect_list = Sx_runtime[26].call(null, frame, mD), and = Sx_runtime[86].call(null, converted_val); if(Sx_types[71].call(null, and)) var @@ -64461,29 +64801,29 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(e){ var - a = [0, Sx_runtime[74].call(null, e), lQ], + a = [0, Sx_runtime[74].call(null, e), mE], b = Sx_runtime[2].call(null, cst, a); return Sx_types[71].call(null, b) ? Sx_types[72].call(null, e) : e; }, N)], - O = Sx_runtime[76].call(null, fenv$1, lR), + O = Sx_runtime[76].call(null, fenv$1, mF), effect_anns = Sx_types[71].call(null, O) - ? Sx_runtime[77].call(null, fenv$1, lS) + ? Sx_runtime[77].call(null, fenv$1, mG) : [7, Stdlib_Hashtbl[1].call(null, 0, 0)]; Sx_runtime[12].call(null, effect_anns, name$0, effect_names); - var P = Sx_runtime[4].call(null, lT); + var P = Sx_runtime[4].call(null, mH); Sx_runtime[78].call(null, fenv$1, P, effect_anns); } return make_cek_value(converted_val, fenv$1, rest_k); } - var Q = Sx_runtime[2].call(null, cst, [0, match_val, lU]); + var Q = Sx_runtime[2].call(null, cst, [0, match_val, mI]); if(Sx_types[71].call(null, Q)){ var - name$1 = Sx_runtime[26].call(null, frame, lV), - fenv$2 = Sx_runtime[26].call(null, frame, lW), + name$1 = Sx_runtime[26].call(null, frame, mJ), + fenv$2 = Sx_runtime[26].call(null, frame, mK), and$0 = Sx_runtime[86].call(null, converted_val); if(Sx_types[71].call(null, and$0)) var @@ -64499,80 +64839,80 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_runtime[78].call(null, fenv$2, T, converted_val); return make_cek_value(converted_val, fenv$2, rest_k); } - var U = Sx_runtime[2].call(null, cst, [0, match_val, lX]); + var U = Sx_runtime[2].call(null, cst, [0, match_val, mL]); if(Sx_types[71].call(null, U)){ var - name$2 = Sx_runtime[26].call(null, frame, lY), - fenv$3 = Sx_runtime[26].call(null, frame, lZ), + name$2 = Sx_runtime[26].call(null, frame, mM), + fenv$3 = Sx_runtime[26].call(null, frame, mN), V = Sx_runtime[4].call(null, name$2); Sx_runtime[79].call(null, fenv$3, V, converted_val); return make_cek_value(converted_val, env, rest_k); } - var W = Sx_runtime[2].call(null, cst, [0, match_val, l0]); + var W = Sx_runtime[2].call(null, cst, [0, match_val, mO]); if(Sx_types[71].call(null, W)){ var X = [0, 1 - Sx_types[71].call(null, converted_val)]; if(Sx_types[71].call(null, X)) return make_cek_value(converted_val, env, rest_k); var - remaining$1 = Sx_runtime[26].call(null, frame, l1), + remaining$1 = Sx_runtime[26].call(null, frame, mP), Y = Sx_runtime[34].call(null, remaining$1); if(Sx_types[71].call(null, Y)) return make_cek_value(converted_val, env, rest_k); var - Z = [0, Sx_runtime[25].call(null, remaining$1), l2], + Z = [0, Sx_runtime[25].call(null, remaining$1), mQ], _ = Sx_runtime[2].call(null, cst, Z); if(Sx_types[71].call(null, _)) var rest_k$0 = rest_k; else var - aa = Sx_runtime[26].call(null, frame, l4), + aa = Sx_runtime[26].call(null, frame, mS), rest_k$0 = kont_push (make_and_frame(Sx_runtime[16].call(null, remaining$1), aa), rest_k); - var $ = Sx_runtime[26].call(null, frame, l3); + var $ = Sx_runtime[26].call(null, frame, mR); return make_cek_state (Sx_runtime[15].call(null, remaining$1), $, rest_k$0); } - var ab = Sx_runtime[2].call(null, cst, [0, match_val, l5]); + var ab = Sx_runtime[2].call(null, cst, [0, match_val, mT]); if(Sx_types[71].call(null, ab)){ if(Sx_types[71].call(null, converted_val)) return make_cek_value(converted_val, env, rest_k); var - remaining$2 = Sx_runtime[26].call(null, frame, l6), + remaining$2 = Sx_runtime[26].call(null, frame, mU), ac = Sx_runtime[34].call(null, remaining$2); - if(Sx_types[71].call(null, ac)) return make_cek_value(l7, env, rest_k); + if(Sx_types[71].call(null, ac)) return make_cek_value(mV, env, rest_k); var - ad = [0, Sx_runtime[25].call(null, remaining$2), l8], + ad = [0, Sx_runtime[25].call(null, remaining$2), mW], ae = Sx_runtime[2].call(null, cst, ad); if(Sx_types[71].call(null, ae)) var rest_k$1 = rest_k; else var - ag = Sx_runtime[26].call(null, frame, l_), + ag = Sx_runtime[26].call(null, frame, mY), rest_k$1 = kont_push (make_or_frame(Sx_runtime[16].call(null, remaining$2), ag), rest_k); - var af = Sx_runtime[26].call(null, frame, l9); + var af = Sx_runtime[26].call(null, frame, mX); return make_cek_state (Sx_runtime[15].call(null, remaining$2), af, rest_k$1); } - var ah = Sx_runtime[2].call(null, cst, [0, match_val, l$]); + var ah = Sx_runtime[2].call(null, cst, [0, match_val, mZ]); if(Sx_types[71].call(null, ah)){ var - remaining$3 = Sx_runtime[26].call(null, frame, ma), - fenv$4 = Sx_runtime[26].call(null, frame, mb), - scheme_p = Sx_runtime[26].call(null, frame, mc); + remaining$3 = Sx_runtime[26].call(null, frame, m0), + fenv$4 = Sx_runtime[26].call(null, frame, m1), + scheme_p = Sx_runtime[26].call(null, frame, m2); if(! Sx_types[71].call(null, scheme_p)){ if(Sx_types[71].call(null, converted_val)) return make_cek_state - (Sx_runtime[18].call(null, remaining$3, mm), fenv$4, rest_k); + (Sx_runtime[18].call(null, remaining$3, na), fenv$4, rest_k); var aq = [0, remaining$3, - [0, mn, [0, Sx_runtime[25].call(null, remaining$3), 0]]], + [0, nb, [0, Sx_runtime[25].call(null, remaining$3), 0]]], next = Sx_runtime[2].call(null, cst_slice, aq), - ar = [0, Sx_runtime[25].call(null, next), mo], + ar = [0, Sx_runtime[25].call(null, next), nc], as = Sx_runtime[2].call(null, cst$3, ar); if(Sx_types[71].call(null, as)) return make_cek_value(0, fenv$4, rest_k); @@ -64581,11 +64921,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= at = is_else_clause(next_test$0); return Sx_types[71].call(null, at) ? make_cek_state - (Sx_runtime[18].call(null, next, mp), fenv$4, rest_k) + (Sx_runtime[18].call(null, next, nd), fenv$4, rest_k) : make_cek_state (next_test$0, fenv$4, - kont_push(make_cond_frame(next, fenv$4, mq), rest_k)); + kont_push(make_cond_frame(next, fenv$4, ne), rest_k)); } if(! Sx_types[71].call(null, converted_val)){ var @@ -64599,25 +64939,25 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ap = is_else_clause(next_test); return Sx_types[71].call(null, ap) ? make_cek_state - (Sx_runtime[18].call(null, next_clause, mk), fenv$4, rest_k) + (Sx_runtime[18].call(null, next_clause, m_), fenv$4, rest_k) : make_cek_state (next_test, fenv$4, - kont_push(make_cond_frame(next_clauses, fenv$4, ml), rest_k)); + kont_push(make_cond_frame(next_clauses, fenv$4, m$), rest_k)); } var clause = Sx_runtime[15].call(null, remaining$3), - ai = [0, Sx_runtime[25].call(null, clause), md], + ai = [0, Sx_runtime[25].call(null, clause), m3], and$1 = Sx_runtime[2].call(null, cst$0, ai); if(Sx_types[71].call(null, and$1)){ var - aj = Sx_runtime[18].call(null, clause, mf), - ak = [0, Sx_runtime[74].call(null, aj), me], + aj = Sx_runtime[18].call(null, clause, m5), + ak = [0, Sx_runtime[74].call(null, aj), m4], and$2 = Sx_runtime[2].call(null, cst, ak); if(Sx_types[71].call(null, and$2)) var - al = Sx_runtime[18].call(null, clause, mh), - am = [0, Sx_types[72].call(null, al), mg], + al = Sx_runtime[18].call(null, clause, m7), + am = [0, Sx_types[72].call(null, al), m6], b = Sx_runtime[2].call(null, cst, am); else var b = and$2; @@ -64626,28 +64966,28 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = and$1; if(! Sx_types[71].call(null, b)) return make_cek_state - (Sx_runtime[18].call(null, clause, mj), fenv$4, rest_k); + (Sx_runtime[18].call(null, clause, m9), fenv$4, rest_k); var an = kont_push(make_cond_arrow_frame(converted_val, fenv$4), rest_k); - return make_cek_state(Sx_runtime[18].call(null, clause, mi), fenv$4, an); + return make_cek_state(Sx_runtime[18].call(null, clause, m8), fenv$4, an); } - var au = Sx_runtime[2].call(null, cst, [0, match_val, mr]); + var au = Sx_runtime[2].call(null, cst, [0, match_val, nf]); if(Sx_types[71].call(null, au)){ var - match_val$0 = Sx_runtime[26].call(null, frame, ms), - remaining$4 = Sx_runtime[26].call(null, frame, mt), - fenv$5 = Sx_runtime[26].call(null, frame, mu), + match_val$0 = Sx_runtime[26].call(null, frame, ng), + remaining$4 = Sx_runtime[26].call(null, frame, nh), + fenv$5 = Sx_runtime[26].call(null, frame, ni), av = Sx_runtime[84].call(null, match_val$0); return Sx_types[71].call(null, av) ? sf_case_step_loop(converted_val, remaining$4, fenv$5, rest_k) : sf_case_step_loop(match_val$0, remaining$4, fenv$5, rest_k); } - var aw = Sx_runtime[2].call(null, cst, [0, match_val, mv]); + var aw = Sx_runtime[2].call(null, cst, [0, match_val, nj]); if(Sx_types[71].call(null, aw)){ var - remaining$5 = Sx_runtime[26].call(null, frame, mw), - fenv$6 = Sx_runtime[26].call(null, frame, mx), - mode = Sx_runtime[26].call(null, frame, my), - bind_name = Sx_runtime[26].call(null, frame, mz), + remaining$5 = Sx_runtime[26].call(null, frame, nk), + fenv$6 = Sx_runtime[26].call(null, frame, nl), + mode = Sx_runtime[26].call(null, frame, nm), + bind_name = Sx_runtime[26].call(null, frame, nn), ax = Sx_runtime[34].call(null, remaining$5); if(Sx_types[71].call(null, ax)) return make_cek_value(converted_val, fenv$6, rest_k); @@ -64663,7 +65003,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (make_thread_frame (Sx_runtime[16].call(null, remaining$5), fenv$6, mode, bind_name), rest_k), - aA = Sx_runtime[2].call(null, cst, [0, mode, mA]); + aA = Sx_runtime[2].call(null, cst, [0, mode, no]); if(Sx_types[71].call(null, aA)){ var new_env = Sx_runtime[81].call(null, fenv$6), @@ -64673,7 +65013,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state(form, new_env, new_kont); } var - aD = [0, Sx_runtime[74].call(null, form), mB], + aD = [0, Sx_runtime[74].call(null, form), np], and$3 = Sx_runtime[2].call(null, cst, aD); if(Sx_types[71].call(null, and$3)){ var @@ -64682,7 +65022,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, and$4)){ var aF = Sx_runtime[15].call(null, form), - aG = [0, Sx_runtime[74].call(null, aF), mC], + aG = [0, Sx_runtime[74].call(null, aF), nq], and$5 = Sx_runtime[2].call(null, cst, aG); if(Sx_types[71].call(null, and$5)) var @@ -64699,12 +65039,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, a)){ var aI = Sx_runtime[16].call(null, form), - aJ = Sx_runtime[19].call(null, [6, [0, mD, [0, converted_val, 0]]], aI), + aJ = Sx_runtime[19].call(null, [6, [0, nr, [0, converted_val, 0]]], aI), aK = Sx_runtime[15].call(null, form); return make_cek_state (Sx_runtime[19].call(null, aK, aJ), fenv$6, new_kont); } - var aL = Sx_runtime[2].call(null, cst, [0, mode, mE]); + var aL = Sx_runtime[2].call(null, cst, [0, mode, ns]); if(Sx_types[71].call(null, aL)){ var result = thread_insert_arg_last(form, converted_val, fenv$6), @@ -64730,30 +65070,30 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (make_thread_frame(rest_forms, fenv$6, mode, bind_name), rest_k)); } - var aO = Sx_runtime[2].call(null, cst, [0, match_val, mF]); + var aO = Sx_runtime[2].call(null, cst, [0, match_val, nt]); if(Sx_types[71].call(null, aO)){ var - f = Sx_runtime[26].call(null, frame, mG), - evaled = Sx_runtime[26].call(null, frame, mH), - remaining$6 = Sx_runtime[26].call(null, frame, mI), - fenv$7 = Sx_runtime[26].call(null, frame, mJ), - raw_args = Sx_runtime[26].call(null, frame, mK), - hname = Sx_runtime[26].call(null, frame, mL), + f = Sx_runtime[26].call(null, frame, nu), + evaled = Sx_runtime[26].call(null, frame, nv), + remaining$6 = Sx_runtime[26].call(null, frame, nw), + fenv$7 = Sx_runtime[26].call(null, frame, nx), + raw_args = Sx_runtime[26].call(null, frame, ny), + hname = Sx_runtime[26].call(null, frame, nz), aP = Sx_runtime[84].call(null, f); if(Sx_types[71].call(null, aP)){ var and$6 = strict_ref[1], hname$0 = Sx_types[71].call(null, and$6) ? hname : and$6; - if(Sx_types[71].call(null, hname$0)) strict_check_args(hname, mM); + if(Sx_types[71].call(null, hname$0)) strict_check_args(hname, nA); var aQ = Sx_runtime[34].call(null, remaining$6); if(Sx_types[71].call(null, aQ)) - return continue_with_call(converted_val, mN, fenv$7, raw_args, rest_k); + return continue_with_call(converted_val, nB, fenv$7, raw_args, rest_k); var aR = kont_push (make_arg_frame (converted_val, - mO, + nC, Sx_runtime[16].call(null, remaining$6), fenv$7, raw_args, @@ -64789,12 +65129,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= strict_check_args(hname, new_evaled); return continue_with_call(f, new_evaled, fenv$7, raw_args, rest_k); } - var aU = Sx_runtime[2].call(null, cst, [0, match_val, mP]); + var aU = Sx_runtime[2].call(null, cst, [0, match_val, nD]); if(Sx_types[71].call(null, aU)){ var - remaining$7 = Sx_runtime[26].call(null, frame, mQ), - results = Sx_runtime[26].call(null, frame, mR), - fenv$8 = Sx_runtime[26].call(null, frame, mS), + remaining$7 = Sx_runtime[26].call(null, frame, nE), + results = Sx_runtime[26].call(null, frame, nF), + fenv$8 = Sx_runtime[26].call(null, frame, nG), last_result = Sx_runtime[17].call(null, results), aV = [0, @@ -64806,7 +65146,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= 0], aW = [0, Sx_runtime[25].call(null, results), 0], aX = - [0, results, [0, mT, [0, Sx_runtime[2].call(null, cst_dec, aW), 0]]], + [0, results, [0, nH, [0, Sx_runtime[2].call(null, cst_dec, aW), 0]]], aY = [0, Sx_runtime[2].call(null, cst_slice, aX), aV], completed = Sx_runtime[2].call(null, cst_append, aY), aZ = Sx_runtime[34].call(null, remaining$7); @@ -64818,7 +65158,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, mU), + a = Sx_runtime[18].call(null, pair, nI), b = Sx_runtime[15].call(null, pair); Sx_runtime[12].call(null, d, b, a); return 0; @@ -64840,19 +65180,19 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (make_dict_frame(Sx_runtime[16].call(null, remaining$7), a2, fenv$8), rest_k); return make_cek_state - (Sx_runtime[18].call(null, next_entry, mV), fenv$8, a3); + (Sx_runtime[18].call(null, next_entry, nJ), fenv$8, a3); } - var a4 = Sx_runtime[2].call(null, cst, [0, match_val, mW]); + var a4 = Sx_runtime[2].call(null, cst, [0, match_val, nK]); if(Sx_types[71].call(null, a4)){ var - ho_type = Sx_runtime[26].call(null, frame, mX), - remaining$8 = Sx_runtime[26].call(null, frame, mY), + ho_type = Sx_runtime[26].call(null, frame, nL), + remaining$8 = Sx_runtime[26].call(null, frame, nM), a5 = [0, - Sx_runtime[26].call(null, frame, mZ), + Sx_runtime[26].call(null, frame, nN), [0, [6, [0, converted_val, 0]], 0]], evaled$0 = Sx_runtime[2].call(null, cst_append, a5), - fenv$9 = Sx_runtime[26].call(null, frame, m0), + fenv$9 = Sx_runtime[26].call(null, frame, nO), a6 = Sx_runtime[34].call(null, remaining$8); if(Sx_types[71].call(null, a6)) return ho_setup_dispatch(ho_type, evaled$0, fenv$9, rest_k); @@ -64864,13 +65204,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= rest_k); return make_cek_state(Sx_runtime[15].call(null, remaining$8), fenv$9, a7); } - var a8 = Sx_runtime[2].call(null, cst, [0, match_val, m1]); + var a8 = Sx_runtime[2].call(null, cst, [0, match_val, nP]); if(Sx_types[71].call(null, a8)) return make_cek_value(converted_val, env, rest_k); - var a9 = Sx_runtime[2].call(null, cst, [0, match_val, m2]); + var a9 = Sx_runtime[2].call(null, cst, [0, match_val, nQ]); if(Sx_types[71].call(null, a9)){ var - fenv$10 = Sx_runtime[26].call(null, frame, m3), + fenv$10 = Sx_runtime[26].call(null, frame, nR), a_ = Sx_runtime[90].call(null, converted_val), a$ = [0, 1 - Sx_types[71].call(null, a_)]; if(Sx_types[71].call(null, a$)) @@ -64878,11 +65218,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var ba = has_reactive_reset_frame_p(rest_k); if(Sx_types[71].call(null, ba)) return reactive_shift_deref(converted_val, fenv$10, rest_k); - var ctx = Sx_runtime[72].call(null, m4, 0); + var ctx = Sx_runtime[72].call(null, nS, 0); if(Sx_types[71].call(null, ctx)){ var - dep_list = Sx_runtime[26].call(null, ctx, m5), - notify_fn = Sx_runtime[26].call(null, ctx, m6), + dep_list = Sx_runtime[26].call(null, ctx, nT), + notify_fn = Sx_runtime[26].call(null, ctx, nU), bb = Sx_runtime[2].call (null, cst_contains, [0, dep_list, [0, converted_val, 0]]), @@ -64895,11 +65235,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_value (Sx_runtime[116].call(null, converted_val), fenv$10, rest_k); } - var bd = Sx_runtime[2].call(null, cst, [0, match_val, m7]); + var bd = Sx_runtime[2].call(null, cst, [0, match_val, nV]); if(Sx_types[71].call(null, bd)){ var - update_fn = Sx_runtime[26].call(null, frame, m8), - first_p = Sx_runtime[26].call(null, frame, m9), + update_fn = Sx_runtime[26].call(null, frame, nW), + first_p = Sx_runtime[26].call(null, frame, nX), be = Sx_types[71].call(null, update_fn) ? [0, 1 - Sx_types[71].call(null, first_p)] @@ -64908,12 +65248,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cek_call(update_fn, [6, [0, converted_val, 0]]); return make_cek_value(converted_val, env, rest_k); } - var bf = Sx_runtime[2].call(null, cst, [0, match_val, m_]); + var bf = Sx_runtime[2].call(null, cst, [0, match_val, nY]); if(Sx_types[71].call(null, bf)){ var - name$3 = Sx_runtime[26].call(null, frame, m$), - remaining$9 = Sx_runtime[26].call(null, frame, na), - fenv$11 = Sx_runtime[26].call(null, frame, nb), + name$3 = Sx_runtime[26].call(null, frame, nZ), + remaining$9 = Sx_runtime[26].call(null, frame, n0), + fenv$11 = Sx_runtime[26].call(null, frame, n1), bg = Sx_runtime[34].call(null, remaining$9); if(Sx_types[71].call(null, bg)){ Sx_runtime[106].call(null, name$3); @@ -64928,36 +65268,36 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state (Sx_runtime[15].call(null, remaining$9), fenv$11, bh); } - var bi = Sx_runtime[2].call(null, cst, [0, match_val, nc]); + var bi = Sx_runtime[2].call(null, cst, [0, match_val, n2]); if(Sx_types[71].call(null, bi)){ var - remaining$10 = Sx_runtime[26].call(null, frame, nd), - fenv$12 = Sx_runtime[26].call(null, frame, ne), + remaining$10 = Sx_runtime[26].call(null, frame, n3), + fenv$12 = Sx_runtime[26].call(null, frame, n4), bj = Sx_runtime[34].call(null, remaining$10); if(Sx_types[71].call(null, bj)){ - var bk = Sx_runtime[26].call(null, frame, nf); + var bk = Sx_runtime[26].call(null, frame, n5); Sx_runtime[106].call(null, bk); return make_cek_value(converted_val, fenv$12, rest_k); } var bl = Sx_runtime[16].call(null, remaining$10), - bm = Sx_runtime[26].call(null, frame, ng), + bm = Sx_runtime[26].call(null, frame, n6), new_frame = make_provide_frame - (Sx_runtime[26].call(null, frame, nh), bm, bl, fenv$12), - bn = Sx_runtime[26].call(null, frame, ni); - Sx_runtime[12].call(null, new_frame, nj, bn); + (Sx_runtime[26].call(null, frame, n7), bm, bl, fenv$12), + bn = Sx_runtime[26].call(null, frame, n8); + Sx_runtime[12].call(null, new_frame, n9, bn); var bo = kont_push(new_frame, rest_k); return make_cek_state (Sx_runtime[15].call(null, remaining$10), fenv$12, bo); } - var bp = Sx_runtime[2].call(null, cst, [0, match_val, nk]); + var bp = Sx_runtime[2].call(null, cst, [0, match_val, n_]); if(Sx_types[71].call(null, bp)){ var tracked = bind_tracking_ref[1], - body$1 = Sx_runtime[26].call(null, frame, nl), - fenv$13 = Sx_runtime[26].call(null, frame, nm), - prev = Sx_runtime[26].call(null, frame, nn); + body$1 = Sx_runtime[26].call(null, frame, n$), + fenv$13 = Sx_runtime[26].call(null, frame, oa), + prev = Sx_runtime[26].call(null, frame, ob); bind_tracking_ref[1] = prev; var subscriber = @@ -64965,7 +65305,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cst$9, function(args){ if(args && ! args[2]) - return cek_run(make_cek_state(body$1, fenv$13, no)); + return cek_run(make_cek_state(body$1, fenv$13, oc)); return 0; }], bq = Sx_runtime[6].call(null, tracked); @@ -64975,7 +65315,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var existing = Sx_runtime[26].call(null, provide_subscribers_ref[1], name), - existing$0 = Sx_types[71].call(null, existing) ? existing : np, + existing$0 = Sx_types[71].call(null, existing) ? existing : od, a = Sx_runtime[2].call (null, @@ -64987,18 +65327,18 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= bq); return make_cek_value(converted_val, fenv$13, rest_k); } - var br = Sx_runtime[2].call(null, cst, [0, match_val, nq]); + var br = Sx_runtime[2].call(null, cst, [0, match_val, oe]); if(Sx_types[71].call(null, br)){ var - name$4 = Sx_runtime[26].call(null, frame, nr), - fenv$14 = Sx_runtime[26].call(null, frame, ns), + name$4 = Sx_runtime[26].call(null, frame, of), + fenv$14 = Sx_runtime[26].call(null, frame, og), target = kont_find_provide(rest_k, name$4), old_val = Sx_types[71].call(null, target) - ? Sx_runtime[26].call(null, target, nt) + ? Sx_runtime[26].call(null, target, oh) : Sx_runtime[107].call(null, name$4); if(Sx_types[71].call(null, target)) - Sx_runtime[12].call(null, target, nu, converted_val); + Sx_runtime[12].call(null, target, oi, converted_val); Sx_runtime[106].call(null, name$4); Sx_runtime[105].call(null, name$4, converted_val); var @@ -65007,34 +65347,34 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(Sx_types[71].call(null, bt)) fire_provide_subscribers(name$4); return make_cek_value(converted_val, fenv$14, rest_k); } - var bu = Sx_runtime[2].call(null, cst, [0, match_val, nv]); + var bu = Sx_runtime[2].call(null, cst, [0, match_val, oj]); if(Sx_types[71].call(null, bu)){ var - remaining$11 = Sx_runtime[26].call(null, frame, nw), - fenv$15 = Sx_runtime[26].call(null, frame, nx), + remaining$11 = Sx_runtime[26].call(null, frame, ok), + fenv$15 = Sx_runtime[26].call(null, frame, ol), bv = Sx_runtime[34].call(null, remaining$11); if(Sx_types[71].call(null, bv)) return make_cek_value(converted_val, fenv$15, rest_k); var bw = Sx_runtime[16].call(null, remaining$11), - bx = Sx_runtime[26].call(null, frame, ny), + bx = Sx_runtime[26].call(null, frame, om), new_frame$0 = make_scope_acc_frame - (Sx_runtime[26].call(null, frame, nz), bx, bw, fenv$15), - by = Sx_runtime[26].call(null, frame, nA); - Sx_runtime[12].call(null, new_frame$0, nB, by); + (Sx_runtime[26].call(null, frame, on), bx, bw, fenv$15), + by = Sx_runtime[26].call(null, frame, oo); + Sx_runtime[12].call(null, new_frame$0, op, by); var bz = kont_push(new_frame$0, rest_k); return make_cek_state (Sx_runtime[15].call(null, remaining$11), fenv$15, bz); } - var bA = Sx_runtime[2].call(null, cst, [0, match_val, nC]); + var bA = Sx_runtime[2].call(null, cst, [0, match_val, oq]); if(Sx_types[71].call(null, bA)){ var - f$0 = Sx_runtime[26].call(null, frame, nD), - remaining$12 = Sx_runtime[26].call(null, frame, nE), - results$0 = Sx_runtime[26].call(null, frame, nF), - indexed = Sx_runtime[26].call(null, frame, nG), - fenv$16 = Sx_runtime[26].call(null, frame, nH), + f$0 = Sx_runtime[26].call(null, frame, or), + remaining$12 = Sx_runtime[26].call(null, frame, os), + results$0 = Sx_runtime[26].call(null, frame, ot), + indexed = Sx_runtime[26].call(null, frame, ou), + fenv$16 = Sx_runtime[26].call(null, frame, ov), new_results = Sx_runtime[2].call (null, @@ -65063,16 +65403,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= new_results, fenv$16); return continue_with_call - (f$0, call_args, fenv$16, nI, kont_push(next_frame, rest_k)); + (f$0, call_args, fenv$16, ow, kont_push(next_frame, rest_k)); } - var bD = Sx_runtime[2].call(null, cst, [0, match_val, nJ]); + var bD = Sx_runtime[2].call(null, cst, [0, match_val, ox]); if(Sx_types[71].call(null, bD)){ var - f$1 = Sx_runtime[26].call(null, frame, nK), - remaining$13 = Sx_runtime[26].call(null, frame, nL), - results$1 = Sx_runtime[26].call(null, frame, nM), - current_item = Sx_runtime[26].call(null, frame, nN), - fenv$17 = Sx_runtime[26].call(null, frame, nO), + f$1 = Sx_runtime[26].call(null, frame, oy), + remaining$13 = Sx_runtime[26].call(null, frame, oz), + results$1 = Sx_runtime[26].call(null, frame, oA), + current_item = Sx_runtime[26].call(null, frame, oB), + fenv$17 = Sx_runtime[26].call(null, frame, oC), new_results$0 = Sx_types[71].call(null, converted_val) ? Sx_runtime @@ -65099,15 +65439,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f$1, [6, [0, Sx_runtime[15].call(null, remaining$13), 0]], fenv$17, - nP, + oD, bG); } - var bH = Sx_runtime[2].call(null, cst, [0, match_val, nQ]); + var bH = Sx_runtime[2].call(null, cst, [0, match_val, oE]); if(Sx_types[71].call(null, bH)){ var - f$2 = Sx_runtime[26].call(null, frame, nR), - remaining$14 = Sx_runtime[26].call(null, frame, nS), - fenv$18 = Sx_runtime[26].call(null, frame, nT), + f$2 = Sx_runtime[26].call(null, frame, oF), + remaining$14 = Sx_runtime[26].call(null, frame, oG), + fenv$18 = Sx_runtime[26].call(null, frame, oH), bI = Sx_runtime[34].call(null, remaining$14); if(Sx_types[71].call(null, bI)) return make_cek_value(converted_val, fenv$18, rest_k); @@ -65124,15 +65464,15 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= converted_val, [0, Sx_runtime[15].call(null, remaining$14), 0]]], fenv$18, - nU, + oI, bJ); } - var bK = Sx_runtime[2].call(null, cst, [0, match_val, nV]); + var bK = Sx_runtime[2].call(null, cst, [0, match_val, oJ]); if(Sx_types[71].call(null, bK)){ var - f$3 = Sx_runtime[26].call(null, frame, nW), - remaining$15 = Sx_runtime[26].call(null, frame, nX), - fenv$19 = Sx_runtime[26].call(null, frame, nY), + f$3 = Sx_runtime[26].call(null, frame, oK), + remaining$15 = Sx_runtime[26].call(null, frame, oL), + fenv$19 = Sx_runtime[26].call(null, frame, oM), bL = Sx_runtime[34].call(null, remaining$15); if(Sx_types[71].call(null, bL)) return make_cek_value(0, fenv$19, rest_k); @@ -65146,20 +65486,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f$3, [6, [0, Sx_runtime[15].call(null, remaining$15), 0]], fenv$19, - nZ, + oN, bM); } - var bN = Sx_runtime[2].call(null, cst, [0, match_val, n0]); + var bN = Sx_runtime[2].call(null, cst, [0, match_val, oO]); if(Sx_types[71].call(null, bN)){ var - f$4 = Sx_runtime[26].call(null, frame, n1), - remaining$16 = Sx_runtime[26].call(null, frame, n2), - fenv$20 = Sx_runtime[26].call(null, frame, n3); + f$4 = Sx_runtime[26].call(null, frame, oP), + remaining$16 = Sx_runtime[26].call(null, frame, oQ), + fenv$20 = Sx_runtime[26].call(null, frame, oR); if(Sx_types[71].call(null, converted_val)) return make_cek_value(converted_val, fenv$20, rest_k); var bO = Sx_runtime[34].call(null, remaining$16); if(Sx_types[71].call(null, bO)) - return make_cek_value(n4, fenv$20, rest_k); + return make_cek_value(oS, fenv$20, rest_k); var bP = kont_push @@ -65170,21 +65510,21 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f$4, [6, [0, Sx_runtime[15].call(null, remaining$16), 0]], fenv$20, - n5, + oT, bP); } - var bQ = Sx_runtime[2].call(null, cst, [0, match_val, n6]); + var bQ = Sx_runtime[2].call(null, cst, [0, match_val, oU]); if(Sx_types[71].call(null, bQ)){ var - f$5 = Sx_runtime[26].call(null, frame, n7), - remaining$17 = Sx_runtime[26].call(null, frame, n8), - fenv$21 = Sx_runtime[26].call(null, frame, n9), + f$5 = Sx_runtime[26].call(null, frame, oV), + remaining$17 = Sx_runtime[26].call(null, frame, oW), + fenv$21 = Sx_runtime[26].call(null, frame, oX), bR = [0, 1 - Sx_types[71].call(null, converted_val)]; if(Sx_types[71].call(null, bR)) - return make_cek_value(n_, fenv$21, rest_k); + return make_cek_value(oY, fenv$21, rest_k); var bS = Sx_runtime[34].call(null, remaining$17); if(Sx_types[71].call(null, bS)) - return make_cek_value(n$, fenv$21, rest_k); + return make_cek_value(oZ, fenv$21, rest_k); var bT = kont_push @@ -65195,14 +65535,14 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f$5, [6, [0, Sx_runtime[15].call(null, remaining$17), 0]], fenv$21, - oa, + o0, bT); } - var bU = Sx_runtime[2].call(null, cst, [0, match_val, ob]); + var bU = Sx_runtime[2].call(null, cst, [0, match_val, o1]); if(Sx_types[71].call(null, bU)){ var - remaining$18 = Sx_runtime[26].call(null, frame, oc), - fenv$22 = Sx_runtime[26].call(null, frame, od), + remaining$18 = Sx_runtime[26].call(null, frame, o2), + fenv$22 = Sx_runtime[26].call(null, frame, o3), bV = Sx_runtime[34].call(null, remaining$18); if(Sx_types[71].call(null, bV)) return make_cek_value(converted_val, fenv$22, rest_k); @@ -65211,28 +65551,28 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= bX = kont_push (make_handler_frame - (Sx_runtime[26].call(null, frame, oe), bW, fenv$22), + (Sx_runtime[26].call(null, frame, o4), bW, fenv$22), rest_k); return make_cek_state (Sx_runtime[15].call(null, remaining$18), fenv$22, bX); } - var bY = Sx_runtime[2].call(null, cst, [0, match_val, of]); + var bY = Sx_runtime[2].call(null, cst, [0, match_val, o5]); if(Sx_types[71].call(null, bY)) return make_cek_value(converted_val, env, rest_k); - var bZ = Sx_runtime[2].call(null, cst, [0, match_val, og]); + var bZ = Sx_runtime[2].call(null, cst, [0, match_val, o6]); if(Sx_types[71].call(null, bZ)){ - var saved_kont = Sx_runtime[26].call(null, frame, oh); + var saved_kont = Sx_runtime[26].call(null, frame, o7); return make_cek_value - (converted_val, Sx_runtime[26].call(null, frame, oi), saved_kont); + (converted_val, Sx_runtime[26].call(null, frame, o8), saved_kont); } - var b0 = Sx_runtime[2].call(null, cst, [0, match_val, oj]); + var b0 = Sx_runtime[2].call(null, cst, [0, match_val, o9]); if(Sx_types[71].call(null, b0)) return make_cek_value(converted_val, env, rest_k); - var b1 = Sx_runtime[2].call(null, cst, [0, match_val, ok]); + var b1 = Sx_runtime[2].call(null, cst, [0, match_val, o_]); if(Sx_types[71].call(null, b1)){ var - test_value = Sx_runtime[26].call(null, frame, ol), - fenv$23 = Sx_runtime[26].call(null, frame, om); + test_value = Sx_runtime[26].call(null, frame, o$), + fenv$23 = Sx_runtime[26].call(null, frame, pa); return continue_with_call (converted_val, [6, [0, test_value, 0]], @@ -65240,49 +65580,49 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [6, [0, test_value, 0]], rest_k); } - var b2 = Sx_runtime[2].call(null, cst, [0, match_val, on]); + var b2 = Sx_runtime[2].call(null, cst, [0, match_val, pb]); if(Sx_types[71].call(null, b2)){ var - after_thunk = Sx_runtime[26].call(null, frame, oo), - winders_len = Sx_runtime[26].call(null, frame, op), - fenv$24 = Sx_runtime[26].call(null, frame, oq), + after_thunk = Sx_runtime[26].call(null, frame, pc), + winders_len = Sx_runtime[26].call(null, frame, pd), + fenv$24 = Sx_runtime[26].call(null, frame, pe), b3 = [0, Sx_runtime[25].call(null, winders_ref[1]), [0, winders_len, 0]], b4 = Sx_runtime[2].call(null, cst$0, b3); if(Sx_types[71].call(null, b4)) winders_ref[1] = Sx_runtime[16].call(null, winders_ref[1]); return continue_with_call (after_thunk, - os, + pg, fenv$24, - or, + pf, kont_push (make_wind_return_frame(converted_val, fenv$24), rest_k)); } - var b5 = Sx_runtime[2].call(null, cst, [0, match_val, ot]); + var b5 = Sx_runtime[2].call(null, cst, [0, match_val, ph]); if(Sx_types[71].call(null, b5)){ - var b6 = Sx_runtime[26].call(null, frame, ou); - return make_cek_value(Sx_runtime[26].call(null, frame, ov), b6, rest_k); + var b6 = Sx_runtime[26].call(null, frame, pi); + return make_cek_value(Sx_runtime[26].call(null, frame, pj), b6, rest_k); } - var b7 = Sx_runtime[2].call(null, cst, [0, match_val, ow]); + var b7 = Sx_runtime[2].call(null, cst, [0, match_val, pk]); if(Sx_types[71].call(null, b7)){ var - fenv$25 = Sx_runtime[26].call(null, frame, ox), - continuable_p = Sx_runtime[26].call(null, frame, oy), + fenv$25 = Sx_runtime[26].call(null, frame, pl), + continuable_p = Sx_runtime[26].call(null, frame, pm), unwind_result = kont_unwind_to_handler(rest_k, converted_val), - handler_fn = Sx_runtime[26].call(null, unwind_result, oz), - unwound_k = Sx_runtime[26].call(null, unwind_result, oA), + handler_fn = Sx_runtime[26].call(null, unwind_result, pn), + unwound_k = Sx_runtime[26].call(null, unwind_result, po), b8 = Sx_runtime[84].call(null, handler_fn); if(Sx_types[71].call(null, b8)){ last_error_kont_ref[1] = unwound_k; var - b9 = [0, oB, [0, Sx_runtime[69].call(null, converted_val), 0]], + b9 = [0, pp, [0, Sx_runtime[69].call(null, converted_val), 0]], b_ = [3, Sx_runtime[5].call(null, b9)]; return Sx_runtime[102].call(null, b_); } var b$ = Sx_types[71].call(null, continuable_p) - ? kont_push(make_signal_return_frame(fenv$25, unwound_k), unwound_k) + ? kont_push(make_signal_return_frame(fenv$25, rest_k), unwound_k) : kont_push(make_raise_guard_frame(fenv$25, unwound_k), unwound_k); return continue_with_call (handler_fn, @@ -65291,22 +65631,22 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [6, [0, converted_val, 0]], b$); } - var ca = Sx_runtime[2].call(null, cst, [0, match_val, oC]); + var ca = Sx_runtime[2].call(null, cst, [0, match_val, pq]); if(Sx_types[71].call(null, ca)){ last_error_kont_ref[1] = rest_k; - return Sx_runtime[102].call(null, oD); + return Sx_runtime[102].call(null, pr); } - var cb = Sx_runtime[2].call(null, cst, [0, match_val, oE]); + var cb = Sx_runtime[2].call(null, cst, [0, match_val, ps]); if(Sx_types[71].call(null, cb)){ var - f$6 = Sx_runtime[26].call(null, frame, oF), - remaining$19 = Sx_runtime[26].call(null, frame, oG), + f$6 = Sx_runtime[26].call(null, frame, pt), + remaining$19 = Sx_runtime[26].call(null, frame, pu), cc = [0, - Sx_runtime[26].call(null, frame, oH), + Sx_runtime[26].call(null, frame, pv), [0, [6, [0, converted_val, 0]], 0]], new_results$1 = Sx_runtime[2].call(null, cst_append, cc), - fenv$26 = Sx_runtime[26].call(null, frame, oI), + fenv$26 = Sx_runtime[26].call(null, frame, pw), cd = Sx_runtime[6].call(null, remaining$19), ce = [0, @@ -65334,12 +65674,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (f$6, heads, fenv$26, - oJ, + px, kont_push (make_multi_map_frame(f$6, tails, new_results$1, fenv$26), rest_k)); } - var ch = Sx_runtime[2].call(null, cst, [0, match_val, oK]); + var ch = Sx_runtime[2].call(null, cst, [0, match_val, py]); if(Sx_types[71].call(null, ch)){ var ci = Sx_runtime[25].call(null, winders_ref[1]), @@ -65347,69 +65687,69 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return continue_with_call (converted_val, [6, [0, k, 0]], - Sx_runtime[26].call(null, frame, oL), + Sx_runtime[26].call(null, frame, pz), [6, [0, k, 0]], rest_k); } - var cj = Sx_runtime[2].call(null, cst, [0, match_val, oM]); + var cj = Sx_runtime[2].call(null, cst, [0, match_val, pA]); if(Sx_types[71].call(null, cj)){ var - resume_fn = Sx_runtime[26].call(null, frame, oN), + resume_fn = Sx_runtime[26].call(null, frame, pB), result$1 = Sx_runtime[8].call(null, resume_fn, [6, [0, converted_val, 0]]), and$8 = Sx_runtime[39].call(null, result$1), ck = Sx_types[71].call(null, and$8) - ? Sx_runtime[26].call(null, result$1, oO) + ? Sx_runtime[26].call(null, result$1, pC) : and$8; if(! Sx_types[71].call(null, ck)) return make_cek_value - (result$1, Sx_runtime[26].call(null, frame, oT), rest_k); + (result$1, Sx_runtime[26].call(null, frame, pH), rest_k); var - cl = Sx_runtime[26].call(null, frame, oP), + cl = Sx_runtime[26].call(null, frame, pD), cm = kont_push - (make_vm_resume_frame(Sx_runtime[26].call(null, result$1, oQ), cl), + (make_vm_resume_frame(Sx_runtime[26].call(null, result$1, pE), cl), rest_k), - cn = Sx_runtime[26].call(null, frame, oR); + cn = Sx_runtime[26].call(null, frame, pF); return make_cek_suspended - (Sx_runtime[26].call(null, result$1, oS), cn, cm); + (Sx_runtime[26].call(null, result$1, pG), cn, cm); } - var co = Sx_runtime[2].call(null, cst, [0, match_val, oU]); + var co = Sx_runtime[2].call(null, cst, [0, match_val, pI]); if(Sx_types[71].call(null, co)) return make_cek_suspended - (converted_val, Sx_runtime[26].call(null, frame, oV), rest_k); - var cp = Sx_runtime[2].call(null, cst, [0, match_val, oW]); + (converted_val, Sx_runtime[26].call(null, frame, pJ), rest_k); + var cp = Sx_runtime[2].call(null, cst, [0, match_val, pK]); if(Sx_types[71].call(null, cp)){ var - import_set = Sx_runtime[26].call(null, frame, oX), - remaining_sets = Sx_runtime[26].call(null, frame, oY), - fenv$27 = Sx_runtime[26].call(null, frame, oZ); + import_set = Sx_runtime[26].call(null, frame, pL), + remaining_sets = Sx_runtime[26].call(null, frame, pM), + fenv$27 = Sx_runtime[26].call(null, frame, pN); bind_import_set(import_set, fenv$27); var cq = Sx_runtime[34].call(null, remaining_sets); return Sx_types[71].call(null, cq) ? make_cek_value(0, fenv$27, rest_k) : step_sf_import(remaining_sets, fenv$27, rest_k); } - var cr = Sx_runtime[2].call(null, cst, [0, match_val, o0]); + var cr = Sx_runtime[2].call(null, cst, [0, match_val, pO]); if(! Sx_types[71].call(null, cr)){ last_error_kont_ref[1] = rest_k; var - cA = [3, Sx_runtime[5].call(null, [0, o9, [0, match_val, 0]])], + cA = [3, Sx_runtime[5].call(null, [0, pX, [0, match_val, 0]])], cB = Sx_runtime[3].call(null, cA); throw caml_maybe_attach_backtrace([0, Sx_types[9], cB], 1); } var - remaining$20 = Sx_runtime[26].call(null, frame, o1), - current_param = Sx_runtime[26].call(null, frame, o2), - results$2 = Sx_runtime[26].call(null, frame, o3), - body$2 = Sx_runtime[26].call(null, frame, o4), - fenv$28 = Sx_runtime[26].call(null, frame, o5), + remaining$20 = Sx_runtime[26].call(null, frame, pP), + current_param = Sx_runtime[26].call(null, frame, pQ), + results$2 = Sx_runtime[26].call(null, frame, pR), + body$2 = Sx_runtime[26].call(null, frame, pS), + fenv$28 = Sx_runtime[26].call(null, frame, pT), cs = Sx_runtime[84].call(null, current_param); if(Sx_types[71].call(null, cs)){ var ct = Sx_runtime[15].call(null, remaining$20), - val_expr = Sx_runtime[18].call(null, ct, o6); + val_expr = Sx_runtime[18].call(null, ct, pU); return make_cek_state (val_expr, fenv$28, @@ -65436,12 +65776,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= cv = Sx_runtime[34].call(null, rest_bindings); if(Sx_types[71].call(null, cv)){ var - cw = [0, Sx_runtime[25].call(null, body$2), o7], + cw = [0, Sx_runtime[25].call(null, body$2), pV], cx = Sx_runtime[2].call(null, cst, cw), body_expr = Sx_types[71].call(null, cx) ? Sx_runtime[15].call(null, body$2) - : Sx_runtime[19].call(null, o8, body$2), + : Sx_runtime[19].call(null, pW, body$2), provide_kont = kont_push_provides(new_results$2, fenv$28, rest_k); return make_cek_state(body_expr, fenv$28, provide_kont); } @@ -65455,23 +65795,23 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return make_cek_state(Sx_runtime[15].call(null, cz), fenv$28, cy); } var - o_ = [3, cst_value], - o$ = [3, "captured"], - pa = [0, 0], - pb = [3, "message"], - pc = [3, cst_vm_suspended], - pd = [3, cst_resume], - pe = [3, cst_request], - pf = [3, cst_args_got], - pg = [3, cst_expects], - ph = [3, cst_lambda], - pi = [2, 1.], - pj = [3, cst_vm_suspended], - pk = [3, cst_resume], - pl = [3, cst_request], - pm = [2, 1.], - pn = [3, cst_children], - po = [3, "Not callable: "]; + pY = [3, cst_value], + pZ = [3, "captured"], + p0 = [0, 0], + p1 = [3, "message"], + p2 = [3, cst_vm_suspended], + p3 = [3, cst_resume], + p4 = [3, cst_request], + p5 = [3, cst_args_got], + p6 = [3, cst_expects], + p7 = [3, cst_lambda], + p8 = [2, 1.], + p9 = [3, cst_vm_suspended], + p_ = [3, cst_resume], + p$ = [3, cst_request], + qa = [2, 1.], + qb = [3, cst_children], + qc = [3, "Not callable: "]; function continue_with_call(f, args, env, raw_args, kont){ var b = Sx_types[105].call(null, f); if(Sx_types[71].call(null, b)){ @@ -65480,7 +65820,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= frame = kont_find_provide(kont, uid), c = Sx_types[71].call(null, frame) - ? Sx_runtime[26].call(null, frame, o_) + ? Sx_runtime[26].call(null, frame, pY) : Sx_types[107].call(null, f); return make_cek_value(c, env, kont); } @@ -65500,7 +65840,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= h = Sx_runtime[34].call(null, args), arg$0 = Sx_types[71].call(null, h) ? 0 : Sx_runtime[15].call(null, args), cont_data = Sx_runtime[97].call(null, f), - captured$0 = Sx_runtime[26].call(null, cont_data, o$), + captured$0 = Sx_runtime[26].call(null, cont_data, pZ), result = cek_run(make_cek_value(arg$0, env, captured$0)); return make_cek_value(result, env, kont); } @@ -65530,24 +65870,24 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= result$0 = Sx_runtime[9].call(null, f, args), l = [0, Sx_runtime[10].call(null, result$0)]; if(Sx_types[71].call(null, l)){ - var m = kont_push(make_raise_eval_frame(env, pa), kont); - return make_cek_value(Sx_runtime[26].call(null, result$0, pb), env, m); + var m = kont_push(make_raise_eval_frame(env, p0), kont); + return make_cek_value(Sx_runtime[26].call(null, result$0, p1), env, m); } var and$2 = Sx_runtime[39].call(null, result$0), n = Sx_types[71].call(null, and$2) - ? Sx_runtime[26].call(null, result$0, pc) + ? Sx_runtime[26].call(null, result$0, p2) : and$2; if(! Sx_types[71].call(null, n)) return make_cek_value(result$0, env, kont); var o = kont_push - (make_vm_resume_frame(Sx_runtime[26].call(null, result$0, pd), env), + (make_vm_resume_frame(Sx_runtime[26].call(null, result$0, p3), env), kont); return make_cek_suspended - (Sx_runtime[26].call(null, result$0, pe), env, o); + (Sx_runtime[26].call(null, result$0, p4), env, o); } var p = Sx_runtime[86].call(null, f); if(! Sx_types[71].call(null, p)){ @@ -65557,7 +65897,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_types[71].call(null, or$1) ? or$1 : Sx_runtime[88].call(null, f); if(! Sx_types[71].call(null, or$2)){ var - P = [0, po, [0, Sx_runtime[69].call(null, f), 0]], + P = [0, qc, [0, Sx_runtime[69].call(null, f), 0]], Q = [3, Sx_runtime[5].call(null, P)], R = Sx_runtime[3].call(null, Q); throw caml_maybe_attach_backtrace([0, Sx_types[9], R], 1); @@ -65565,7 +65905,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var parsed = parse_keyword_args(raw_args, env), kwargs = Sx_runtime[15].call(null, parsed), - children = Sx_runtime[18].call(null, parsed, pm), + children = Sx_runtime[18].call(null, parsed, qa), I = Sx_types[85].call(null, f), local$0 = Sx_runtime[82].call(null, I, env), J = Sx_types[83].call(null, f), @@ -65583,7 +65923,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= K); var L = Sx_types[86].call(null, f); if(Sx_types[71].call(null, L)){ - var M = Sx_runtime[4].call(null, pn); + var M = Sx_runtime[4].call(null, qb); Sx_runtime[78].call(null, local$0, M, children); } var @@ -65605,10 +65945,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= v = Sx_runtime[2].call(null, cst$0, u); if(Sx_types[71].call(null, v)){ var - w = [0, pf, [0, Sx_runtime[25].call(null, args), 0]], - x = [0, pg, [0, Sx_runtime[25].call(null, params), w]], + w = [0, p5, [0, Sx_runtime[25].call(null, args), 0]], + x = [0, p6, [0, Sx_runtime[25].call(null, params), w]], or = Sx_types[77].call(null, f), - or$0 = Sx_types[71].call(null, or) ? or : ph, + or$0 = Sx_types[71].call(null, or) ? or : p7, y = [3, Sx_runtime[5].call(null, [0, or$0, x])], z = Sx_runtime[3].call(null, y); throw caml_maybe_attach_backtrace([0, Sx_types[9], z], 1); @@ -65620,7 +65960,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(pair){ var - a = Sx_runtime[18].call(null, pair, pi), + a = Sx_runtime[18].call(null, pair, p8), b = Sx_runtime[15].call(null, pair), c = Sx_runtime[4].call(null, b); Sx_runtime[78].call(null, local, c, a); @@ -65649,42 +65989,42 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= and$3 = Sx_runtime[39].call(null, jit_result), G = Sx_types[71].call(null, and$3) - ? Sx_runtime[26].call(null, jit_result, pj) + ? Sx_runtime[26].call(null, jit_result, p9) : and$3; if(! Sx_types[71].call(null, G)) return make_cek_value(jit_result, local, kont); var H = kont_push - (make_vm_resume_frame(Sx_runtime[26].call(null, jit_result, pk), env), + (make_vm_resume_frame(Sx_runtime[26].call(null, jit_result, p_), env), kont); return make_cek_suspended - (Sx_runtime[26].call(null, jit_result, pl), env, H); + (Sx_runtime[26].call(null, jit_result, p$), env, H); } - var pp = [0, [2, 2.], 0], pq = [2, 1.], pr = [0, [2, 2.], 0]; + var qd = [0, [2, 2.], 0], qe = [2, 1.], qf = [0, [2, 2.], 0]; function sf_case_step_loop(match_val, clauses$1, env, kont){ var clauses = clauses$1; for(;;){ var - a = [0, Sx_runtime[25].call(null, clauses), pp], + a = [0, Sx_runtime[25].call(null, clauses), qd], b = Sx_runtime[2].call(null, cst$3, a); if(Sx_types[71].call(null, b)) return make_cek_value(0, env, kont); var test = Sx_runtime[15].call(null, clauses), - body = Sx_runtime[18].call(null, clauses, pq), + body = Sx_runtime[18].call(null, clauses, qe), c = is_else_clause(test); if(Sx_types[71].call(null, c)) return make_cek_state(body, env, kont); var test_val = trampoline(eval_expr(test, env)), d = Sx_runtime[2].call(null, cst, [0, match_val, [0, test_val, 0]]); if(Sx_types[71].call(null, d)) return make_cek_state(body, env, kont); - var clauses$0 = Sx_runtime[2].call(null, cst_slice, [0, clauses, pr]); + var clauses$0 = Sx_runtime[2].call(null, cst_slice, [0, clauses, qf]); clauses = clauses$0; } } - var ps = [6, 0]; + var qg = [6, 0]; function eval_expr_cek(expr, env){ - return cek_run(make_cek_state(expr, env, ps)); + return cek_run(make_cek_state(expr, env, qg)); } function trampoline_cek(val){ var a = Sx_runtime[85].call(null, val); @@ -65695,10 +66035,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function make_coroutine(thunk){ return [23, [0, "coroutine", 0, 0, 0, 0, 0, 0, 0, 0, 0]]; } - var pt = [6, 0]; + var qh = [6, 0]; function eval_expr(expr, env){ - return cek_run(make_cek_state(expr, env, pt)); + return cek_run(make_cek_state(expr, env, qh)); } + function intern(s){return Sx_types[59].call(null, s);} + var qi = [0, 1]; + function symbol_interned_p(sym){return qi;} caml_update_dummy (custom_special_forms, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]); caml_update_dummy(bind_tracking_ref, [0, 0]); @@ -65896,16 +66239,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return Stdlib[28].call(null, msg, a); } var - pu = [0, 0], - pv = [0, 0], - pw = + qj = [0, 0], + qk = [0, 0], + ql = [0, [2, 0, [11, cst_expected, [4, 0, 0, 0, [11, cst_args_got, [4, 0, 0, 0, 0]]]]], "%s: expected %d args, got %d"], - px = [0, 0], - py = [0, 0]; + qm = [0, 0], + qn = [0, 0]; function sf_define_type(args, env_val){ a: { @@ -65954,9 +66297,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = v[1]; return [0, a[1] === type_name ? 1 : 0]; } - return pv; + return qk; } - return pu; + return qj; }]; env_bind_v(Stdlib[28].call(null, type_name, cst$4), b); Stdlib_List[18].call @@ -65981,7 +66324,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, type_name, cn, Stdlib_Array[11].call(null, ctor_args)]]; var a = Stdlib_List[1].call(null, ctor_args), - b = caml_call3(Stdlib_Printf[4].call(null, pw), cn, arity, a); + b = caml_call3(Stdlib_Printf[4].call(null, ql), cn, arity, a); throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1); }]); var @@ -65995,9 +66338,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = v[1]; return [0, a[2] === cn ? 1 : 0]; } - return py; + return qn; } - return px; + return qm; }]; env_bind_v(Stdlib[28].call(null, cn, cst$4), a); return Stdlib_List[19].call @@ -66059,147 +66402,6 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }]); - var cst_list$0 = "_list", cst_values = "_values", pz = [0, 1]; - function make_values_dict(vs){ - var d = Stdlib_Hashtbl[1].call(null, 0, 2); - Stdlib_Hashtbl[11].call(null, d, cst_values, pz); - Stdlib_Hashtbl[11].call(null, d, cst_list$0, [6, vs]); - return [7, d]; - } - function values_to_list(result){ - if(typeof result !== "number" && 7 === result[0]){ - var d = result[1], match = Stdlib_Hashtbl[7].call(null, d, cst_values); - a: - { - if(match){ - var a = match[1]; - if(typeof a !== "number" && 0 === a[0] && a[1]){var b = 1; break a;} - } - var b = 0; - } - if(b){ - var match$0 = Stdlib_Hashtbl[7].call(null, d, cst_list$0); - if(match$0){ - var match$1 = match$0[1]; - if(typeof match$1 !== "number" && 6 === match$1[0]){var l = match$1[1]; return l;} - } - return [0, result, 0]; - } - } - return [0, result, 0]; - } - function sf_let_values(args, env_val){ - a: - { - if(typeof args !== "number" && 6 === args[0]){var l$0 = args[1], items = l$0; break a;} - var items = 0; - } - var match = Stdlib_List[9].call(null, items, 0); - a: - { - if(match){ - var match$0 = match[1]; - if(typeof match$0 !== "number" && 6 === match$0[0]){var l = match$0[1], clauses = l; break a;} - } - var clauses = 0; - } - var - body = - 1 < Stdlib_List[1].call(null, items) - ? Stdlib_List[7].call(null, items) - : 0, - local_env = Sx_runtime[81].call(null, env_val); - Stdlib_List[18].call - (null, - function(clause){ - a: - { - if(typeof clause !== "number" && 6 === clause[0]){ - var b = clause[1]; - if(b){ - var match$0 = b[1]; - if(typeof match$0 !== "number" && 6 === match$0[0]){var ns = match$0[1], names = ns; break a;} - } - } - var names = 0; - } - a: - { - if(typeof clause !== "number" && 6 === clause[0]){ - var a = clause[1]; - if(a){ - var match = a[2]; - if(match){var e = match[1], val_expr = e; break a;} - } - } - var val_expr = 0; - } - var - result = eval_expr(val_expr, local_env), - vs = values_to_list(result); - return Stdlib_List[19].call - (null, - function(idx, name){ - a: - { - if(typeof name !== "number" && name[0] - 3 >>> 0 < 2){var s = name[1], n = s; break a;} - var n = Sx_types[35].call(null, name); - } - var - v = - idx < Stdlib_List[1].call(null, vs) - ? Stdlib_List[8].call(null, vs, idx) - : 0; - Sx_runtime[78].call(null, local_env, [3, n], v); - return 0; - }, - names); - }, - clauses); - var last_val = [0, 0]; - Stdlib_List[18].call - (null, - function(e){last_val[1] = eval_expr(e, local_env); return 0;}, - body); - return last_val[1]; - } - function sf_define_values(args, env_val){ - a: - { - if(typeof args !== "number" && 6 === args[0]){var l$0 = args[1], items = l$0; break a;} - var items = 0; - } - var match = Stdlib_List[9].call(null, items, 0); - a: - { - if(match){ - var match$0 = match[1]; - if(typeof match$0 !== "number" && 6 === match$0[0]){var l = match$0[1], names = l; break a;} - } - var names = 0; - } - var match$1 = Stdlib_List[9].call(null, items, 1); - if(match$1) var e = match$1[1], val_expr = e; else var val_expr = 0; - var result = eval_expr(val_expr, env_val), vs = values_to_list(result); - Stdlib_List[19].call - (null, - function(idx, name){ - a: - { - if(typeof name !== "number" && name[0] - 3 >>> 0 < 2){var s = name[1], n = s; break a;} - var n = Sx_types[35].call(null, name); - } - var - v = - idx < Stdlib_List[1].call(null, vs) - ? Stdlib_List[8].call(null, vs, idx) - : 0; - Sx_runtime[78].call(null, env_val, [3, n], v); - return 0; - }, - names); - return 0; - } var cst_let_values = "let-values"; register_special_form ([3, cst_let_values], @@ -66230,98 +66432,6 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }]); - var - cst_iterative = "_iterative", - cst_promise = "_promise", - cst_forced = "forced", - cst_thunk = "thunk", - pA = [0, 1], - pB = [0, 0], - pC = [0, 1]; - function make_promise_dict(opt, thunk){ - var iterative = opt ? opt[1] : 0, d = Stdlib_Hashtbl[1].call(null, 0, 4); - Stdlib_Hashtbl[11].call(null, d, cst_promise, pA); - Stdlib_Hashtbl[11].call(null, d, cst_forced, pB); - Stdlib_Hashtbl[11].call(null, d, cst_thunk, thunk); - Stdlib_Hashtbl[11].call(null, d, cst_value, 0); - if(iterative) Stdlib_Hashtbl[11].call(null, d, cst_iterative, pC); - return [7, d]; - } - var pD = [6, 0]; - function sf_delay(args, env_val){ - a: - { - if(typeof args !== "number" && 6 === args[0]){ - var match = args[1]; - if(match){var e = match[1], expr = e; break a;} - } - var expr = 0; - } - var thunk = Sx_types[42].call(null, pD, expr, env_val); - return make_promise_dict(0, thunk); - } - var pE = [6, 0], pF = [0, 1]; - function sf_delay_force(args, env_val){ - a: - { - if(typeof args !== "number" && 6 === args[0]){ - var match = args[1]; - if(match){var e = match[1], expr = e; break a;} - } - var expr = 0; - } - var thunk = Sx_types[42].call(null, pE, expr, env_val); - return make_promise_dict(pF, thunk); - } - function is_promise(v){ - if(typeof v !== "number" && 7 === v[0]){ - var d = v[1], match = Stdlib_Hashtbl[7].call(null, d, cst_promise); - if(match){ - var a = match[1]; - if(typeof a !== "number" && 0 === a[0] && a[1]) return 1; - } - return 0; - } - return 0; - } - var pG = [6, 0], pH = [0, 1]; - function force_promise(p){ - if(! is_promise(p)) return p; - if(typeof p !== "number" && 7 === p[0]){ - var d = p[1], match = Stdlib_Hashtbl[7].call(null, d, cst_forced); - if(match){ - var a = match[1]; - if(typeof a !== "number" && 0 === a[0] && a[1]){ - var match$2 = Stdlib_Hashtbl[7].call(null, d, cst_value); - if(! match$2) return 0; - var v = match$2[1]; - return v; - } - } - var match$0 = Stdlib_Hashtbl[7].call(null, d, cst_thunk); - if(match$0) var t = match$0[1], thunk = t; else var thunk = 0; - var - result = cek_call(thunk, pG), - match$1 = Stdlib_Hashtbl[7].call(null, d, cst_iterative); - a: - { - if(match$1){ - var b = match$1[1]; - if(typeof b !== "number" && 0 === b[0] && b[1]){var iterative = 1; break a;} - } - var iterative = 0; - } - var - final_val = - iterative - ? is_promise(result) ? force_promise(result) : result - : result; - Stdlib_Hashtbl[11].call(null, d, cst_forced, pH); - Stdlib_Hashtbl[11].call(null, d, cst_value, final_val); - return final_val; - } - return p; - } var cst_delay = "delay"; register_special_form ([3, cst_delay], @@ -66353,7 +66463,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return 0; }]); runtime.caml_register_global - (1734, + (1805, [0, trampoline_fn, trampoline, @@ -66361,7 +66471,6 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, 0], last_error_kont_ref, protocol_registry, - seq_to_list, make_cek_state, make_cek_value, make_cek_suspended, @@ -66505,6 +66614,9 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= parse_macro_params, qq_expand, sf_letrec, + call_with_values, + sf_let_values, + sf_define_values, step_sf_letrec, step_sf_dynamic_wind, sf_scope, @@ -66521,6 +66633,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= step_sf_case, step_sf_let_match, step_eval_list, + sf_delay, + sf_delay_force, + promise_p, + make_promise, + force, kont_extract_provides, fire_provide_subscribers, batch_begin_b, @@ -66547,8 +66664,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= check_match_exhaustiveness, match_find_clause, match_pattern, - step_sf_match, + match_clause_is_else_p, + match_clause_ctor_name, + match_warn_non_exhaustive, match_check_exhaustiveness, + step_sf_match, step_sf_handler_bind, step_sf_restart_case, step_sf_signal, @@ -66582,7 +66702,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= ho_form_name_p, ho_fn_p, ho_swap_args, + seq_to_list, ho_setup_dispatch, + sequence_to_list, + sequence_to_vector, + sequence_length, + sequence_ref, + sequence_append, step_ho_map, step_ho_map_indexed, step_ho_filter, @@ -66597,26 +66723,20 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= trampoline_cek, make_coroutine, eval_expr, + [2, 0.], + intern, + symbol_interned_p, cek_run_iterative, collect_comp_trace, format_comp_trace, enhance_error_with_trace, - sf_define_type, - make_values_dict, - values_to_list, - sf_let_values, - sf_define_values, - make_promise_dict, - sf_delay, - sf_delay_force, - is_promise, - force_promise], + sf_define_type], "Sx_ref"); return; } (globalThis)); -//# 28214 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 28334 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_vm:[N,N,N,N,N,N,F(1)*,N,F(1)*,F(2),F(1),F(1),F(1),F(1),F(1),F(1)*,F(2),N,N,N,N,N,F(1),F(1),N,F(3),F(1),F(6),F(3),F(3),F(2),F(3),F(1),F(2),F(2),F(2),F(1)*,F(3),F(2),F(1),F(1),F(2),F(1),F(1)*,F(2),F(1)] (function (globalThis){ @@ -67103,7 +67223,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= globals); var result = - Sx_ref[242].call + Sx_ref[258].call (null, [6, [0, j, [0, [6, [0, i, [0, fn_expr, 0]]], 0]]], [20, compile_env]); @@ -67163,8 +67283,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= active_vm[1] = [0, create(vm[4])]; var b = [20, Sx_types[20].call(null, 0)], - state = Sx_ref[237].call(null, f, [6, a], b, [6, a], k), - final = Sx_ref[156].call(null, state); + state = Sx_ref[253].call(null, f, [6, a], b, [6, a], k), + final = Sx_ref[158].call(null, state); active_vm[1] = saved_active; var match = Sx_runtime[13].call(null, final, l); if @@ -67174,7 +67294,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, VmSuspended, Sx_runtime[13].call(null, final, m), vm], 1); } - return Sx_ref[18].call(null, final); + return Sx_ref[17].call(null, final); } function call_closure(cl, args, globals){ vm_call_count[1]++; @@ -68469,7 +68589,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= case 9: case 10: case 24: - var result$1 = Sx_ref[222].call(null, fn_val, [6, args$2]); + var result$1 = Sx_ref[232].call(null, fn_val, [6, args$2]); break b; } var result$1 = 0; @@ -68570,7 +68690,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var cek_state = match[1]; vm[5] = 0; var - final = Sx_ref[158].call(null, cek_state, result), + final = Sx_ref[160].call(null, cek_state, result), match$0 = Sx_runtime[13].call(null, final, A); if (typeof match$0 !== "number" @@ -68579,7 +68699,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, VmSuspended, Sx_runtime[13].call(null, final, B), vm], 1); } - push(vm, Sx_ref[18].call(null, final)); + push(vm, Sx_ref[17].call(null, final)); } else push(vm, result); @@ -69149,7 +69269,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= globals); var result = - Sx_ref[242].call + Sx_ref[258].call (null, [6, [0, G, [0, [6, [0, F, [0, fn_expr, 0]]], 0]]], [20, compile_env]); @@ -69301,7 +69421,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= [0, function(suspended_state){ var - request = Sx_ref[17].call(null, suspended_state), + request = Sx_ref[16].call(null, suspended_state), vm = create(Sx_types[14][1]); vm[5] = [0, suspended_state]; var match = active_vm[1]; @@ -69316,8 +69436,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(f, args){ var a = [20, Sx_types[20].call(null, 0)], - state = Sx_ref[237].call(null, f, [6, args], a, [6, args], P), - final = Sx_ref[156].call(null, state), + state = Sx_ref[253].call(null, f, [6, args], a, [6, args], P), + final = Sx_ref[158].call(null, state), match = Sx_runtime[13].call(null, final, Q); if (typeof match !== "number" @@ -69332,7 +69452,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= throw caml_maybe_attach_backtrace ([0, VmSuspended, Sx_runtime[13].call(null, final, R), vm], 1); } - return Sx_ref[18].call(null, final); + return Sx_ref[17].call(null, final); }; var S = [0, [11, "UNKNOWN_", [4, 0, 0, 0, 0]], "UNKNOWN_%d"]; function opcode_name(n){ @@ -69502,7 +69622,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= quoted = [6, [0, U, [0, expr, 0]]], K = [20, Sx_types[20].call(null, 0)], code_val = - Sx_ref[242].call(null, [6, [0, compile_fn, [0, quoted, 0]]], K), + Sx_ref[258].call(null, [6, [0, compile_fn, [0, quoted, 0]]], K), code = code_from_value(code_val), cl = [0, code, [0], V, globals, 0], vm = create(globals), @@ -70313,7 +70433,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } (globalThis)); -//# 32192 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 32312 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_vm_ref:[F(2),F(2),F(1),F(1)*,N,F(2),F(1),F(1),F(1),F(1)*,F(1)*,F(2),F(1)*,F(1)*,F(2)*,F(4),F(5),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(3),F(4),F(2),F(3),F(1),F(2),F(1),F(1),F(1),F(1),F(1)*,F(1),F(1),F(1),F(1),F(2),F(1),F(2)*,F(1),F(2),F(1),F(3),F(4),F(3),F(1)*,F(3),N,F(1)*,F(1)*,F(1)*,F(2),F(1)*,F(3),F(2),F(3),N,N,N,F(3),F(3),F(2),F(2),F(2),F(3),F(2),F(3),F(1),F(5),F(2),F(2),F(1),F(3),F(1),N,N,F(1)*] (function (globalThis){ @@ -70344,12 +70464,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Sx_ref = global_data.Sx_ref, Stdlib_Array = global_data.Stdlib__Array, Stdlib = global_data.Stdlib, - cek_call = Sx_ref[222], - eval_expr = Sx_ref[242]; + cek_call = Sx_ref[232], + eval_expr = Sx_ref[258]; function trampoline(v){ if(typeof v !== "number" && 12 === v[0]){ var env = v[2], expr = v[1]; - return Sx_ref[242].call(null, expr, [20, env]); + return Sx_ref[258].call(null, expr, [20, env]); } return v; } @@ -70794,8 +70914,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = to_ocaml_list(args), b = [20, Sx_types[20].call(null, 0)], - state = Sx_ref[237].call(null, f, [6, a], b, [6, a], h), - final = Sx_ref[156].call(null, state), + state = Sx_ref[253].call(null, f, [6, a], b, [6, a], h), + final = Sx_ref[158].call(null, state), match = Sx_runtime[13].call(null, final, i); if (typeof match !== "number" @@ -70807,7 +70927,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= d = Sx_runtime[13].call(null, final, j); throw caml_maybe_attach_backtrace([0, Sx_vm[1], d, c], 1); } - return Sx_ref[18].call(null, final); + return Sx_ref[17].call(null, final); } function env_walk(env, name){ if(typeof env === "number"){if(0 === env) return 0;} @@ -71650,7 +71770,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } (globalThis)); -//# 33530 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 33650 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_render:[F(2),F(1),F(1)*,F(1)*,F(2),F(1),F(2),F(2),F(1),F(1),F(1),F(1),F(1),N,N,N,F(2),F(2),F(3),F(2),F(1),F(3),F(2),F(1)*,N,F(1),N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(1),F(1),N,F(1),N,N,F(1),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(1),F(2),F(3),F(3),F(3),F(3),F(2),F(2),F(3),F(3),F(2),F(2),F(3),F(1),F(1),F(1),F(1)] (function (globalThis){ @@ -71930,8 +72050,8 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_String = global_data.Stdlib__String, Sx_vm = global_data.Sx_vm, Stdlib_Printexc = global_data.Stdlib__Printexc; - function eval_expr(expr, env){return Sx_ref[242].call(null, expr, env);} - var cond_scheme_p = Sx_ref[137], cst$6 = "", a = [3, cst$6]; + function eval_expr(expr, env){return Sx_ref[258].call(null, expr, env);} + var cond_scheme_p = Sx_ref[136], cst$6 = "", a = [3, cst$6]; function raw_html_content(v){ if(typeof v !== "number" && 17 === v[0]){var s = v[1]; return [3, s];} return a; @@ -71977,11 +72097,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function render_html_island(comp, args, env){ return caml_call3(render_html_island_ref[1], comp, args, env); } - var cek_call = Sx_ref[222]; + var cek_call = Sx_ref[232]; function trampoline(v){ if(typeof v !== "number" && 12 === v[0]){ var env = v[2], expr = v[1]; - return Sx_ref[242].call(null, expr, [20, env]); + return Sx_ref[258].call(null, expr, [20, env]); } return v; } @@ -72026,7 +72146,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(p){Sx_runtime[78].call(null, local, p, 0); return 0;}, b); } - return Sx_ref[242].call(null, mac[3], local); + return Sx_ref[258].call(null, mac[3], local); } return 0; } @@ -73587,7 +73707,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var fn = Sx_types[30].call(null, render_env, cst_render_to_html), result = - Sx_ref[222].call(null, fn, [6, [0, expr, [0, [20, eval_env], 0]]]); + Sx_ref[232].call(null, fn, [6, [0, expr, [0, [20, eval_env], 0]]]); if(typeof result !== "number") switch(result[0]){case 3:case 17: var s = result[1]; return s;} return Sx_runtime[3].call(null, result); @@ -74687,7 +74807,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= result = Stdlib_List[26].call (null, - function(acc, expr){return Sx_ref[242].call(null, expr, env);}, + function(acc, expr){return Sx_ref[258].call(null, expr, env);}, 0, exprs); sync_env_to_vm(0); @@ -74767,7 +74887,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function api_eval_expr(expr_js, env_js){ var expr = js_to_value(expr_js); try{ - var result = Sx_ref[242].call(null, expr, [20, global_env]); + var result = Sx_ref[258].call(null, expr, [20, global_env]); sync_env_to_vm(0); var a = return_via_side_channel(value_to_js(result)); return a; @@ -74792,16 +74912,16 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= (null, function(expr){ var - state = Sx_ref[8].call(null, expr, env, f), - final = Sx_ref[156].call(null, state); + state = Sx_ref[7].call(null, expr, env, f), + final = Sx_ref[158].call(null, state); for(;;){ - var b = Sx_ref[12].call(null, final); + var b = Sx_ref[11].call(null, final); if(! Sx_types[71].call(null, b)){ - Sx_ref[18].call(null, final); + Sx_ref[17].call(null, final); count[1]++; return 0; } - var request = Sx_ref[17].call(null, final); + var request = Sx_ref[16].call(null, final); if(typeof request === "number" || ! (7 === request[0])) var op = cst$3; else{ @@ -74833,7 +74953,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var lib_spec = 0; } var - a = Sx_ref[102].call(null, lib_spec), + a = Sx_ref[101].call(null, lib_spec), match$0 = Sx_types[71].call(null, a) ? e : 0; if(match$0) var v$0 = match$0[1], response = v$0; @@ -74842,7 +74962,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } else var response = 0; - final = Sx_ref[158].call(null, final, response); + final = Sx_ref[160].call(null, final, response); } }, exprs); @@ -74998,7 +75118,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= exprs = Sx_parser[17].call(null, src), compile_fn = Sx_types[30].call(null, global_env, cst_compile_module), code = - Sx_ref[242].call + Sx_ref[258].call (null, [6, [0, compile_fn, [0, [6, exprs], 0]]], [20, global_env]), a = return_via_side_channel(value_to_js(code)); return a; @@ -75198,13 +75318,13 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var s = expr[1], e = Sx_parser[17].call(null, s); if(! e) return 0; var h = e[1]; - return Sx_ref[242].call(null, h, [20, global_env]); + return Sx_ref[258].call(null, h, [20, global_env]); } var match = args[2]; - if(! match) return Sx_ref[242].call(null, expr, [20, global_env]); + if(! match) return Sx_ref[258].call(null, expr, [20, global_env]); if(! match[2]){ var env_val = match[1]; - return Sx_ref[242].call(null, expr, env_val); + return Sx_ref[258].call(null, expr, env_val); } } throw caml_maybe_attach_backtrace @@ -75215,10 +75335,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args){ var match = args[2], expr = args[1]; - if(! match) return Sx_ref[242].call(null, expr, [20, global_env]); + if(! match) return Sx_ref[258].call(null, expr, [20, global_env]); if(! match[2]){ var e = match[1]; - return Sx_ref[242].call(null, expr, e); + return Sx_ref[258].call(null, expr, e); } } throw caml_maybe_attach_backtrace @@ -75437,7 +75557,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(args && ! args[2]){ var thunk = args[1]; try{ - Sx_ref[242].call(null, [6, [0, thunk, 0]], [20, global_env]); + Sx_ref[258].call(null, [6, [0, thunk, 0]], [20, global_env]); var d$0 = Stdlib_Hashtbl[1].call(null, 0, 2); Stdlib_Hashtbl[11].call(null, d$0, cst_ok, l); return [7, d$0]; @@ -75962,7 +76082,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = a[2]; if(b && ! b[2]){ var k = b[1], e = a[1], c = args[1]; - return Sx_ref[8].call(null, c, e, k); + return Sx_ref[7].call(null, c, e, k); } } } @@ -75975,7 +76095,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args && ! args[2]){ var s = args[1]; - return Sx_ref[159].call(null, s); + return Sx_ref[161].call(null, s); } throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_step], 1); }); @@ -75983,35 +76103,35 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= bind (cst_cek_phase, function(args){ - if(args && ! args[2]){var s = args[1]; return Sx_ref[16].call(null, s);} + if(args && ! args[2]){var s = args[1]; return Sx_ref[15].call(null, s);} throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_phase], 1); }); var cst_cek_value = "cek-value"; bind (cst_cek_value, function(args){ - if(args && ! args[2]){var s = args[1]; return Sx_ref[18].call(null, s);} + if(args && ! args[2]){var s = args[1]; return Sx_ref[17].call(null, s);} throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_value], 1); }); var cst_cek_terminal = "cek-terminal?"; bind (cst_cek_terminal, function(args){ - if(args && ! args[2]){var s = args[1]; return Sx_ref[11].call(null, s);} + if(args && ! args[2]){var s = args[1]; return Sx_ref[10].call(null, s);} throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_terminal], 1); }); var cst_cek_kont = "cek-kont"; bind (cst_cek_kont, function(args){ - if(args && ! args[2]){var s = args[1]; return Sx_ref[15].call(null, s);} + if(args && ! args[2]){var s = args[1]; return Sx_ref[14].call(null, s);} throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_kont], 1); }); var cst_frame_type = "frame-type"; bind (cst_frame_type, function(args){ - if(args && ! args[2]){var f = args[1]; return Sx_ref[75].call(null, f);} + if(args && ! args[2]){var f = args[1]; return Sx_ref[74].call(null, f);} throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_frame_type], 1); }); var cst_strict = "*strict*"; @@ -76023,7 +76143,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args && ! args[2]){ var v = args[1]; - Sx_ref[125][1] = v; + Sx_ref[124][1] = v; Sx_types[32].call(null, global_env, cst_strict, v); return 0; } @@ -76034,7 +76154,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args && ! args[2]){ var v = args[1]; - Sx_ref[128][1] = v; + Sx_ref[127][1] = v; Sx_types[32].call(null, global_env, cst_prim_param_types, v); return 0; } @@ -76047,7 +76167,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[2]; if(a && ! a[2]){ var t = a[1], v = args[1]; - return Sx_ref[131].call(null, v, t); + return Sx_ref[130].call(null, v, t); } } return 0; @@ -76109,7 +76229,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = a[1]; if(b && ! args[2]){ var rest = b[2]; - return Sx_ref[141].call(null, [6, rest], [20, global_env]); + return Sx_ref[140].call(null, [6, rest], [20, global_env]); } } } @@ -76124,7 +76244,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = a[1]; if(b && ! args[2]){ var rest = b[2]; - return Sx_ref[144].call(null, [6, rest], [20, global_env]); + return Sx_ref[143].call(null, [6, rest], [20, global_env]); } } } @@ -76139,7 +76259,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var b = a[1]; if(b && ! args[2]){ var rest = b[2]; - return Sx_ref[147].call(null, [6, rest], [20, global_env]); + return Sx_ref[146].call(null, [6, rest], [20, global_env]); } } } @@ -76185,7 +76305,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= return [17, Stdlib_String[7].call(null, cst$3, a)]; }); bind("define-page-helper", function(param){return 0;}); - Sx_types[26].call(null, global_env, "__io-registry", Sx_ref[105]); + Sx_types[26].call(null, global_env, "__io-registry", Sx_ref[104]); Sx_render[70].call(null, global_env); bind("set-render-active!", function(param){return 0;}); var q = [0, 1]; @@ -76225,10 +76345,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var match = param[2]; if(! match) return [0, kw, 0]; var rest$0 = match[2], value = match[1], b = process(rest$0); - return [0, kw, [0, Sx_ref[242].call(null, value, env), b]]; + return [0, kw, [0, Sx_ref[258].call(null, value, env), b]]; } var rest = param[2], a = process(rest); - return [0, Sx_ref[242].call(null, kw, env), a]; + return [0, Sx_ref[258].call(null, kw, env), a]; } return process(args); } @@ -76249,7 +76369,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } return 0; }]; - Sx_ref[87].call(null, [3, tag], a); + Sx_ref[86].call(null, [3, tag], a); return 0; }, Sx_render[28]); @@ -76261,7 +76381,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var match = args[2], thunk = args[1]; if(! match) try{ - var r = Sx_ref[222].call(null, thunk, 0); + var r = Sx_ref[232].call(null, thunk, 0); return [6, [0, t, [0, r, 0]]]; } catch(exn){ @@ -76273,12 +76393,12 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } if(! match[2]){ var handler = match[1]; - try{var a = Sx_ref[222].call(null, thunk, 0); return a;} + try{var a = Sx_ref[232].call(null, thunk, 0); return a;} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0); var msg = exn[2]; - return Sx_ref[222].call(null, handler, [6, [0, [3, msg], 0]]); + return Sx_ref[232].call(null, handler, [6, [0, [3, msg], 0]]); } } } @@ -76289,10 +76409,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args){ var match = args[2], expr = args[1]; - if(! match) return Sx_ref[242].call(null, expr, [20, global_env]); + if(! match) return Sx_ref[258].call(null, expr, [20, global_env]); if(! match[2]){ var e = match[1]; - return Sx_ref[242].call(null, expr, e); + return Sx_ref[258].call(null, expr, e); } } return 0; @@ -76313,11 +76433,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= var a = args[2]; if(a){ var match = a[2], raw = a[1], mac = args[1]; - if(! match) return Sx_ref[155].call(null, mac, raw, [20, global_env]); + if(! match) return Sx_ref[157].call(null, mac, raw, [20, global_env]); var b = match[1]; if(typeof b !== "number" && 20 === b[0] && ! match[2]){ var e = b[1]; - return Sx_ref[155].call(null, mac, raw, [20, e]); + return Sx_ref[157].call(null, mac, raw, [20, e]); } } } @@ -76332,7 +76452,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= if(b){ var c = b[2], a = b[1], f = args[1]; if(c && c[2]) break a; - if(Sx_types[70].call(null, f)) return Sx_ref[222].call(null, f, a); + if(Sx_types[70].call(null, f)) return Sx_ref[232].call(null, f, a); } } throw caml_maybe_attach_backtrace @@ -76371,10 +76491,10 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args){ var match = args[2], expr = args[1]; - if(! match) return Sx_ref[242].call(null, expr, [20, global_env]); + if(! match) return Sx_ref[258].call(null, expr, [20, global_env]); if(! match[2]){ var e = match[1]; - return Sx_ref[242].call(null, expr, e); + return Sx_ref[258].call(null, expr, e); } } return 0; @@ -76384,11 +76504,11 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= function(args){ if(args){ var match = args[2], template = args[1]; - if(! match) return Sx_ref[149].call(null, template, [20, global_env]); + if(! match) return Sx_ref[148].call(null, template, [20, global_env]); var a = match[1]; if(typeof a !== "number" && 20 === a[0] && ! match[2]){ var e = a[1]; - return Sx_ref[149].call(null, template, [20, e]); + return Sx_ref[148].call(null, template, [20, e]); } } return 0; @@ -76642,7 +76762,7 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= Stdlib_List[19].call (null, function(i, item){ - Sx_ref[242].call + Sx_ref[258].call (null, [6, [0, fn_val, [0, [2, i], [0, item, 0]]]], [20, global_env]); @@ -76979,4 +77099,4 @@ em=133,bq=102,bp="Re__Hash_set",cM="Stdlib__Type",cN=114,f5="Stdlib__Buffer",eh= } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3hfYnJvd3Nlci5iYy5qcyIsInNlY3Rpb25zIjpbeyJvZmZzZXQiOnsibGluZSI6MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL3N4X2Jyb3dzZXIuYmMucnVudGltZS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK3N5bmMuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JsYWtlMi5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2VmZmVjdC5qcyIsIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLytkb21haW4uanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rcnVudGltZV9ldmVudHMuanMiLCIvYnVpbHRpbi8renN0ZC5qcyIsIi9idWlsdGluLyt3ZWFrLmpzIiwiL2J1aWx0aW4vK2djLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytncmFwaGljcy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rcHJuZy5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK3N0ci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgcmV0dXJuIHMucmVwZWF0KG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5KG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsIGxlbiAtPSAxMDI0KVxuICAgIHMgKz0gZi5hcHBseShudWxsLCBhLnNsaWNlKGksIGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCwgbGVuIC09IDEwMjQpXG4gICAgcyArPSBmLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgZWxzZSByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICAgIGNhc2UgMCAvKiBCWVRFUyAqLzpcbiAgICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICAgIGNhc2UgNCAvKiBBUlJBWSAqLzpcbiAgICAgIHJldHVybiBzLmNbaV07XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIGlmIChpICsgMSA9PT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSksXG4gICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4KSB8IGIxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpLFxuICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCkgfCAoYjMgPDwgMTYpIHwgKGIyIDw8IDgpIHwgYjE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpLFxuICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAxKSxcbiAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0KSB8IChiMyA8PCAxNikgfCAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQoX3MsIF9pLCBfYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocywgaSwgaTE2KSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhmZiAmIChpMTYgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocywgaSwgaTMyKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhmZiAmIChpMzIgPj4gMjQpLFxuICAgIGIzID0gMHhmZiAmIChpMzIgPj4gMTYpLFxuICAgIGIyID0gMHhmZiAmIChpMzIgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLCBpLCBpNjQpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczoganNvb190ZXh0X2VuY29kZXJcbnZhciBqc29vX3RleHRfZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2RlclxudmFyIGpzb29fdGV4dF9kZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHtcbiAgICByZXR1cm4gbmV3IE1sQnl0ZXMoOSwgcywgcy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhID0ganNvb190ZXh0X2VuY29kZXIuZW5jb2RlKHMpO1xuICAgIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczoganNvb190ZXh0X2RlY29kZXJcbmNsYXNzIE1sQnl0ZXMge1xuICBjb25zdHJ1Y3Rvcih0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgICB0aGlzLnQgPSB0YWc7XG4gICAgdGhpcy5jID0gY29udGVudHM7XG4gICAgdGhpcy5sID0gbGVuZ3RoO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgc3dpdGNoICh0aGlzLnQpIHtcbiAgICAgIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIGNhc2UgOCAvKkJZVEVTIHwgTk9UX0FTQ0lJKi86XG4gICAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgMCAvKkJZVEVTIHwgVU5LTk9XTiovOlxuICAgICAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgICBlbHNlIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgfVxuXG4gIHRvVXRmMTYoKSB7XG4gICAgaWYgKHRoaXMudCA9PT0gOSkgcmV0dXJuIHRoaXMuYztcbiAgICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXModGhpcyk7XG4gICAgcmV0dXJuIGpzb29fdGV4dF9kZWNvZGVyLmRlY29kZShhKTtcbiAgfVxuXG4gIHNsaWNlKCkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50ID09PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gICAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCwgY29udGVudCwgdGhpcy5sKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09PSAyIC8qIFBBUlRJQUwgKi8pIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgXCJcXDBcIik7XG4gIGVsc2Ugcy5jID0gY2FtbF9zdWJfdWludDhfYXJyYXlfdG9fanNieXRlcyhzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYyxcbiAgICBsID0gYi5sZW5ndGgsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocykge1xuICBpZiAocy50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbiA/IDIgOiA5LCBcIlwiLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcoX2xlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuID8gMiA6IDksIFwiXCIsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIDAsIGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgMCwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShhLnNsaWNlKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5KGEpIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCwgYSwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICBzMS50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgczIudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBzMS5jIDwgczIuYyA/IC0xIDogczEuYyA+IHMyLmMgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZiAoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gczEuYyA9PT0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAxIC0gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gMSAtIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPD0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPCBzMi5jID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsIHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0KGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSBsID09PSBzLmwgPyAwIC8qIEJZVEVTIHwgVU5LTk9XTiAqLyA6IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChcbiAgICBpMiA9PT0gMCAmJlxuICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpXG4gICkge1xuICAgIHMyLmMgPVxuICAgICAgczEudCA9PT0gNCAvKiBBUlJBWSAqL1xuICAgICAgICA/IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbilcbiAgICAgICAgOiBpMSA9PT0gMCAmJiBzMS5jLmxlbmd0aCA9PT0gbGVuXG4gICAgICAgICAgPyBzMS5jXG4gICAgICAgICAgOiBzMS5jLnNsaWNlKGkxLCBpMSArIGxlbik7XG4gICAgczIudCA9IHMyLmMubGVuZ3RoID09PSBzMi5sID8gMCAvKiBCWVRFUyB8IFVOS05PV04gKi8gOiAyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz1cbiAgICAgIHMxLnQgPT09IDQgLyogQVJSQVkgKi9cbiAgICAgICAgPyBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pXG4gICAgICAgIDogaTEgPT09IDAgJiYgczEuYy5sZW5ndGggPT09IGxlblxuICAgICAgICAgID8gczEuY1xuICAgICAgICAgIDogczEuYy5zbGljZShpMSwgaTEgKyBsZW4pO1xuICAgIHMyLnQgPSBzMi5jLmxlbmd0aCA9PT0gczIubCA/IDAgLyogQllURVMgfCBVTktOT1dOICovIDogMjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsXG4gICAgICBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMltpMiArIGldID0gYzFbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzJbaTIgKyBpXSA9IGMxW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4obGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzJbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLCBiLCBjLCBkLCBlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSwgYiwgYywgZCwgZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykge1xuICByZXR1cm4gcy5sO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSwgczIpIHtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoMCwgczEuYyArIHMyLmMsIHMxLmwgKyBzMi5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gczEgPCBzMiA/IC0xIDogczEgPiBzMiA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYgKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gczEgPD0gczIgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBzMSA8IHMyID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7XG4gIHJldHVybiB4O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG52YXIganNvb190ZXh0X2RlY29kZXJfYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9kZWNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBzO1xuICB2YXIgYSA9XG4gICAgcy5sZW5ndGggPD0ganNvb190ZXh0X2RlY29kZXJfYnVmZi5sZW5ndGhcbiAgICAgID8gbmV3IFVpbnQ4QXJyYXkoanNvb190ZXh0X2RlY29kZXJfYnVmZiwgMCwgcy5sZW5ndGgpXG4gICAgICA6IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgYVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4ganNvb190ZXh0X2RlY29kZXIuZGVjb2RlKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgYSA9IGpzb29fdGV4dF9lbmNvZGVyLmVuY29kZShzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcygwLCBzLCBzLmxlbmd0aCk7XG59XG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIHMudG9VdGYxNigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiBzIGluc3RhbmNlb2YgTWxCeXRlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JldHVybnMgYSAoZnVsbCkgc3RyaW5nIG9mIGJ5dGVzIG9yIGFuIGFycmF5XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gICAgICByZXR1cm4gcy5jO1xuICAgIGRlZmF1bHQ6IC8qIEJZVEVTIG9yIEFSUkFZICovXG4gICAgICByZXR1cm4gcy5jO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgcmV0dXJuIHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc2J5dGVzXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmddIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc3N0cmluZ10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7XG4gIHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNdIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkge1xuICByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9zdHJpbmdfb2ZfanNieXRlc10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogMHgyMCxcbiAgQ09ERV9JTlQ4OiAweDAwLFxuICBDT0RFX0lOVDE2OiAweDAxLFxuICBDT0RFX0lOVDMyOiAweDAyLFxuICBDT0RFX0lOVDY0OiAweDAzLFxuICBDT0RFX1NIQVJFRDg6IDB4MDQsXG4gIENPREVfU0hBUkVEMTY6IDB4MDUsXG4gIENPREVfU0hBUkVEMzI6IDB4MDYsXG4gIENPREVfQkxPQ0szMjogMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAweDEzLFxuICBDT0RFX1NUUklORzg6IDB4MDksXG4gIENPREVfU1RSSU5HMzI6IDB4MGEsXG4gIENPREVfRE9VQkxFX0JJRzogMHgwYixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAweDBjLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAweDBkLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAweDBlLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogMHgwZixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6IDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAweDExLFxuICBDT0RFX0NVU1RPTTogMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogMHgxOSxcbn07XG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBVSW50OEFycmF5UmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTtcbiAgfVxuXG4gIHJlYWQ4cygpIHtcbiAgICByZXR1cm4gKHRoaXMuc1t0aGlzLmkrK10gPDwgMjQpID4+IDI0O1xuICB9XG5cbiAgcmVhZDE2dSgpIHtcbiAgICB2YXIgcyA9IHRoaXMucyxcbiAgICAgIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV07XG4gIH1cblxuICByZWFkMTZzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSArIDFdIDw8IDE2KSB8IChzW2kgKyAyXSA8PCA4KSB8IHNbaSArIDNdKSA+Pj4gMDtcbiAgfVxuXG4gIHJlYWQzMnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpICsgMV0gPDwgMTYpIHwgKHNbaSArIDJdIDw8IDgpIHwgc1tpICsgM107XG4gIH1cblxuICByZWFkc3RyKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogSnNTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmNsYXNzIEpzU3RyaW5nUmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspO1xuICB9XG5cbiAgcmVhZDhzKCkge1xuICAgIHJldHVybiAodGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0KSA+PiAyNDtcbiAgfVxuXG4gIHJlYWQxNnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQxNnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoXG4gICAgICAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCAxNikgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCA4KSB8XG4gICAgICAgIHMuY2hhckNvZGVBdChpICsgMykpID4+PlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICByZWFkMzJzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKFxuICAgICAgKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDgpIHxcbiAgICAgIHMuY2hhckNvZGVBdChpICsgMylcbiAgICApO1xuICB9XG5cbiAgcmVhZHN0cihsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zbGljZShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IEpzU3RyaW5nUmVhZGVyLCBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLCBvZnMpIHtcbiAgdmFyIGMgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gIHZhciBvZnMgPSB0eXBlb2Ygb2ZzID09PSBcIm51bWJlclwiID8gb2ZzIDogb2ZzWzBdO1xuICB2YXIgcmVhZGVyID1cbiAgICBjIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBuZXcgVUludDhBcnJheVJlYWRlcihjLCBvZnMpXG4gICAgICA6IG5ldyBKc1N0cmluZ1JlYWRlcihjLCBvZnMpO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKSB7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4O1xuICBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1KCkpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzaXplWzBdID0gNDtcbiAgICAgIHJldHVybiByZWFkZXIucmVhZDMycygpO1xuICAgIGNhc2UgMjpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPSB7XG4gIF9qOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgIHNlcmlhbGl6ZTogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgIGZpeGVkX2xlbmd0aDogOCxcbiAgICBjb21wYXJlOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgaGFzaDogY2FtbF9pbnQ2NF9oYXNoLFxuICB9LFxuICBfaToge1xuICAgIGRlc2VyaWFsaXplOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9uOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9iaWdhcnJheToge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyYXlcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG4gIF9iaWdhcnIwMjoge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyMDJcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG59O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX3NldF9vb19pZFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdmKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgc3dpdGNoIChtYWdpYykge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmQgLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNmO1xuICAgICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgaWYgKG92ZXJmbG93WzBdKSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGhlYWRlcl9sZW4gIT09IHJlYWRlci5pIC0gb2xkX3Bvcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBpbnZhbGlkIGhlYWRlclwiKTtcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIG9iamVjdHMgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSBudW1fb2JqZWN0cyA+IDAgPyBbXSA6IG51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweGY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgcmV0dXJuIGNvZGUgJiAweDNmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFmO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzKCk7XG4gICAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzKCk7XG4gICAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIGlmIChjb21wcmVzc2VkID09PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICAgICAgICBpZiAoY29tcHJlc3NlZCA9PT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWQgPT09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4ZmY7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIobGVuKTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIGNhc2UgMHgwYzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBkOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBmOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgICAgdmFyIGMsXG4gICAgICAgICAgICAgIHMgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSgpKSAhPT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgICAgaWYgKCFvcHMpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgICAgICBpZiAoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZF9zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkX3NpemUgIT09IHNpemVbMF0pXG4gICAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIH1cbiAgd2hpbGUgKG9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgIHZhciB4ID0gb2JqZWN0cy5wb3AoKTtcbiAgICBpZiAoeFsyXSA+PSAwKSBjYW1sX3NldF9vb19pZCh4KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNjtcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZShzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT09IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Zik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoIChyLnJlYWQzMnUoKSkge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAweDg0OTVhNmJkIC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqLzpcbiAgICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M2Y7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICBpZiAob3ZlcmZsb3dbMF0pIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG5jbGFzcyBNbE9iamVjdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vYmpzID0gW107XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfVxuXG4gIHN0b3JlKHYpIHtcbiAgICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gICAgdGhpcy5vYmpzLnB1c2godik7XG4gIH1cblxuICByZWNhbGwodikge1xuICAgIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICAgIHJldHVybiBpID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IChmdW5jdGlvbiAoKSB7XG4gIGNsYXNzIFdyaXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNodW5rID0gW107XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDIwO1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSAwO1xuICAgICAgdGhpcy5vYmpfY291bnRlciA9IDA7XG4gICAgICB0aGlzLnNpemVfMzIgPSAwO1xuICAgICAgdGhpcy5zaXplXzY0ID0gMDtcbiAgICB9XG5cbiAgICB3cml0ZShzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4OyBpID49IDA7IGkgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgd3JpdGVfYXQocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhmZjtcbiAgICB9XG5cbiAgICB3cml0ZV9jb2RlKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweGZmO1xuICAgIH1cblxuICAgIHdyaXRlX3NoYXJlZChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAxIDw8IDgpXG4gICAgICAgIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgMSA8PCAxNilcbiAgICAgICAgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwb3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaHVua19pZHg7XG4gICAgfVxuXG4gICAgZmluYWxpemUoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlKDMyLCAweDg0OTVhNmJlKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSxcbiAgICAgIGNsb3N1cmVzID0gZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTE7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgICk7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcigpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkge1xuICAgICAgICB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWModikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwgMF07XG4gICAgICAgIGlmICghb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPT0gc3pfMzJfNjRbMF0pXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICBcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdlswXSA9PT0gKHZbMF0gfCAwKSkge1xuICAgICAgICBpZiAodlswXSA9PT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZShcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKSA8PCA0KSxcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoXG4gICAgICAgICAgICAzMixcbiAgICAgICAgICAgIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sXG4gICAgICAgICAgICAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXSxcbiAgICAgICAgICApO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2godiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYgKCFjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgIFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApIHdyaXRlci53cml0ZSg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDkgLypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MGEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMCkgd3JpdGVyLndyaXRlKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwOSAvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZSB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwYSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT09ICh2IHwgMCkpIHtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYgKHR5cGVfb2ZfdiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIiArIHR5cGVfb2ZfdiArIFwiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MGMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgdFs3IC0gaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzO1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAxIDw8IDcpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8IDEgPDwgMTUpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWModltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3cml0ZXIuY2h1bmspO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXModiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlcihzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheSh0KSwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciB4ID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKHgpIHtcbiAgICB4LmZpbGUuY2xvc2UoZmFsc2UpO1xuICAgIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbENoYW5pZFxuZnVuY3Rpb24gTWxDaGFuaWQoaWQpIHtcbiAgdGhpcy5pZCA9IGlkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxDaGFuaWRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSwgaWR4KSB7XG4gIHZhciBjaGFuaWQ7XG4gIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gICAgY2hhbmlkID0gbmV3IE1sQ2hhbmlkKGlkeCk7XG4gIH0gZWxzZSBpZiAoY2FtbF9zeXNfZmRzW2lkeF0pIHtcbiAgICBjaGFuaWQgPSBjYW1sX3N5c19mZHNbaWR4XS5jaGFuaWQ7XG4gIH0gZWxzZSBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGYud3JpdGVvbmx5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGYuY3JlYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGYudHJ1bmNhdGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgZi5leGNsID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGYuYmluYXJ5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYudGV4dCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vbmJsb2NrID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZsYWdzID0gZmxhZ3NbMl07XG4gIH1cbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgZiwgcGVybXMpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlzX25vZGUgPSBmc19ub2RlX3N1cHBvcnRlZCgpO1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmIChpc19ub2RlKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH0gZWxzZSByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpO1xuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgwLCB7IHJkb25seTogMSwgYWx0bmFtZTogXCIvZGV2L3N0ZGluXCIsIGlzQ2hhcmFjdGVyRGV2aWNlOiB0cnVlIH0pLFxuICAgIDAsXG4gICk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgxLCB7IGJ1ZmZlcmVkOiBpc19ub2RlID8gMSA6IDIsIHdyb25seTogMSwgaXNDaGFyYWN0ZXJEZXZpY2U6IHRydWUgfSksXG4gICAgMSxcbiAgKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChcbiAgICBmaWxlKDIsIHsgYnVmZmVyZWQ6IGlzX25vZGUgPyAxIDogMiwgd3Jvbmx5OiAxLCBpc0NoYXJhY3RlckRldmljZTogdHJ1ZSB9KSxcbiAgICAyLFxuICApO1xufSkoKTtcblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogTWxDaGFuaWRcbmNsYXNzIGNhbWxfbWxfY2hhbm5lbHNfc3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgICB0aGlzLm9wZW5lZCA9IG5ldyBnbG9iYWxUaGlzLlNldCgpO1xuICB9XG5cbiAgY2xvc2UoY2hhbmlkKSB7XG4gICAgdGhpcy5vcGVuZWQuZGVsZXRlKGNoYW5pZCk7XG4gIH1cblxuICBnZXQoY2hhbmlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChjaGFuaWQpO1xuICB9XG5cbiAgc2V0KGNoYW5pZCwgdmFsKSB7XG4gICAgaWYgKHZhbC5vcGVuZWQpIHRoaXMub3BlbmVkLmFkZChjaGFuaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcC5zZXQoY2hhbmlkLCB2YWwpO1xuICB9XG5cbiAgYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZC52YWx1ZXMoKTtcbiAgfVxufVxuXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBjYW1sX21sX2NoYW5uZWxzX3N0YXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHMuZ2V0KGlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QoY2FwdHVyZWQsIGludG8pIHtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzLnNldChjYXB0dXJlZCwgbmV3Xyk7XG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpIHtcbiAgY2FtbF9tbF9jaGFubmVscy5zZXQoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCgpIHtcbiAgdmFyIGwgPSAwO1xuICB2YXIga2V5cyA9IGNhbWxfbWxfY2hhbm5lbHMuYWxsKCk7XG4gIGZvciAodmFyIGsgb2Yga2V5cykge1xuICAgIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChrKTtcbiAgICBpZiAoY2hhbi5vcGVuZWQgJiYgY2hhbi5vdXQpIGwgPSBbMCwgaywgbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9pb19idWZmZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiICsgZmQgKyBcIiBkb2Vzbid0IGV4aXN0XCIpO1xuICB2YXIgZmlsZSA9IGZkX2Rlc2MuZmlsZTtcbiAgdmFyIGNoYW5pZCA9IGZkX2Rlc2MuY2hhbmlkO1xuICB2YXIgYnVmZmVyZWQgPSBmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBvZmZzZXQ6IGZpbGUucG9zKCksXG4gICAgZmQ6IGZkLFxuICAgIG9wZW5lZDogdHJ1ZSxcbiAgICBvdXQ6IHRydWUsXG4gICAgYnVmZmVyX2N1cnI6IDAsXG4gICAgYnVmZmVyOiBuZXcgVWludDhBcnJheShjYW1sX2lvX2J1ZmZlcl9zaXplKSxcbiAgICBidWZmZXJlZDogYnVmZmVyZWQsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCkge1xuICB2YXIgZmRfZGVzYyA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmIChmZF9kZXNjID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIiArIGZkICsgXCIgZG9lc24ndCBleGlzdFwiKTtcbiAgdmFyIGZpbGUgPSBmZF9kZXNjLmZpbGU7XG4gIHZhciBjaGFuaWQgPSBmZF9kZXNjLmNoYW5pZDtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6IGZpbGUsXG4gICAgb2Zmc2V0OiBmaWxlLnBvcygpLFxuICAgIGZkOiBmZCxcbiAgICBvcGVuZWQ6IHRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjogMCxcbiAgICBidWZmZXJfbWF4OiAwLFxuICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoY2FtbF9pb19idWZmZXJfc2l6ZSksXG4gICAgcmVmaWxsOiByZWZpbGwsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLCBtb2RlKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlO1xuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnk7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9tbF9jaGFubmVscy5jbG9zZShjaGFuaWQpO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGgoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsIGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICBmKHMpO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCwgZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yZWZpbGwoY2hhbikge1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkge1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKSB7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsIGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbi5mZCA9PT0gLTEpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQmFkIGZpbGUgZGVzY3JpcHRvclwiKTtcbiAgICB9XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoXG4gICAgICBjaGFuLmJ1ZmZlcixcbiAgICAgIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheShjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYgKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciwgY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH0gZWxzZSBpZiAoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZiAobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZSAociA8IG4pIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCArIHJdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZiAociA9PT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLCAwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKTtcbiAgaWYgKHIgPCBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgMCk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludChjaGFuaWQpIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgcmVzID0gKChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYgKFxuICAgIHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heCAmJlxuICAgIHBvcyA8PSBjaGFuLm9mZnNldCAmJlxuICAgIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbiAgKSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCwgcG9zKSB7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3Vycik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZiAocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksIDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtY2hhbi5idWZmZXJfbWF4IHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgaWYgKHByZXZfbWF4ID09PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC1jaGFuLmJ1ZmZlcl9tYXggfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKCFjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYgKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09PSAwKSByZXR1cm4gMDtcbiAgaWYgKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoXG4gICAgICBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IGNoYW4uYnVmZmVyX2N1cnI7ICkge1xuICAgICAgcG9zICs9IGNoYW4uZmlsZS53cml0ZShjaGFuLmJ1ZmZlciwgcG9zLCBjaGFuLmJ1ZmZlcl9jdXJyIC0gcG9zLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmICghY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZiAoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiO1xuICB9XG4gIHN3aXRjaCAoY2hhbi5idWZmZXJlZCkge1xuICAgIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMCk7XG4gICAgICBpZiAoaWQgPCAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aCkgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICAgIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLCBidWZmZXIsIG9mZnNldCwgbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbikge1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoXG4gICAgY2hhbmlkLFxuICAgIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksXG4gICAgb2Zmc2V0LFxuICAgIGxlbixcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIoY2hhbmlkLCBjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLCBzLCAwLCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUoY2hhbmlkLCB2LCBmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpIHtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLCBwb3MpIHtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50KGNoYW5pZCwgaSkge1xuICB2YXIgYXJyID0gWyhpID4+IDI0KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZiwgaSAmIDB4ZmZdO1xuICBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIG5ldyBVaW50OEFycmF5KGFyciksIDAsIDQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLCB2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmICghdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvcihtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9BbGlhczogY2FtbF91bml4X2V4aXRcbi8vQWxpYXM6IHVuaXhfZXhpdFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdChjb2RlKSB7XG4gIGlmIChnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZXhpdCkgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKSB7XG4gIHN3aXRjaCAoZXhuWzJdKSB7XG4gICAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICAgIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICAgIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bikge1xuICB2YXIgciA9IFwiXCI7XG4gIGlmIChleG5bMF0gPT09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZiAoXG4gICAgICBleG4ubGVuZ3RoID09PSAzICYmXG4gICAgICBleG5bMl1bMF0gPT09IDAgJiZcbiAgICAgIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKVxuICAgICkge1xuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDI7XG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiBzdGFydCkgciArPSBcIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgciArPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgTWxCeXRlcykge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCI7XG4gIH0gZWxzZSBpZiAoZXhuWzBdID09PSAyNDgpIHtcbiAgICByICs9IGV4blsxXTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVycikgJiYgKGVyclswXSA9PT0gMCB8fCBlcnJbMF0gPT09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmIChoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsIGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZiAoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYgKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczoganNvb19zdGF0aWNfZW52XG52YXIganNvb19zdGF0aWNfZW52ID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbi8vUmVxdWlyZXM6IGpzb29fc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLCB2KSB7XG4gIGpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczoganNvb19zdGF0aWNfZW52XG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICBpZiAoanNvb19zdGF0aWNfZW52W25dKSByZXR1cm4ganNvb19zdGF0aWNfZW52W25dO1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W25dICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZiAoZ2xvYmFsVGhpcy5qc29vX2VudiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5qc29vX2VudltuXSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fZW52W25dO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudihuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnZfb3B0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52X29wdChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocildO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSkge1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52KG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdO1xuXG4gIGlmIChwcm9jZXNzPy5hcmd2Py5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2KF91bml0KSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKSB7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKSB7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgaWYgKGNoaWxkX3Byb2Nlc3M/LmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQsIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gIH0gZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKF9jbWQpIHtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSgpIHtcbiAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oX2IpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfVxuICB9XG4gIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3cgXiAoMHhmZmZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICByZXR1cm4gWzAsIHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUoKSB7XG4gIHJldHVybiAzMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplKCkge1xuICByZXR1cm4gMzI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSgpIHtcbiAgcmV0dXJuICgweDdmZmZmZmZmIC8gNCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXgoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIlVuaXhcIiA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIldpbjMyXCIgPyAxIDogMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4oKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIkN5Z3dpblwiID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbnZhciBvc190eXBlID0ganNvb19pc193aW4zMiA/IFwiV2luMzJcIiA6IFwiVW5peFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW9fYnVmZmVyX3NpemVcbnZhciBjYW1sX2lvX2J1ZmZlcl9zaXplID0gNjU1MzY7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lvX2J1ZmZlcl9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfaW9fYnVmZmVyX3NpemUoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfaW9fYnVmZmVyX3NpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RlbXBfZGlyX25hbWVcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfdGVtcF9kaXJfbmFtZShfdW5pdCkge1xuICBpZiAob3NfdHlwZSA9PT0gXCJXaW4zMlwiKSB7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHJlcXVpcmUoXCJub2RlOm9zXCIpLnRtcGRpcigpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGVtcF9kaXJfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vVmVyc2lvbjogPj0gNS40XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c190ZW1wX2Rpcl9uYW1lKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyKHNpZ25vKSB7XG4gIHJldHVybiBzaWdubztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmV2X2NvbnZlcnRfc2lnbmFsX251bWJlclxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfc3lzX3Jldl9jb252ZXJ0X3NpZ25hbF9udW1iZXIoc2lnbm8pIHtcbiAgcmV0dXJuIHNpZ25vO1xufVxuXG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vSWY6ICF3YXNtXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYgKHByb2Nlc3M/Lm9uKSB7XG4gICAgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5lcnJvcikge1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobFtpXSA9PT0gXCJiXCIpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZyA9ICtsW2ldLnNsaWNlKDIpO1xuICAgICAgfSBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnXG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZztcblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cygpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9ydW50aW1lX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UoX3VuaXQpIHtcbiAgcmV0dXJuIFswXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlKGIpIHtcbiAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlKCkge1xuICByZXR1cm4gWzBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KF9zbG90KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QoX2J0LCBfaWR4KSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoX2V4biwgX2J0KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KF9yYnQpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSByZXR1cm4gZiguLi5hcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYoLi4uYXJncy5zbGljZSgwLCBuKSk7XG4gICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3Muc2xpY2UobikpO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIHJldHVybiBmKC4uLm5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKyspIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgICByZXR1cm4gZiguLi5uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSB7XG4gICAgcmV0dXJuIGYoLi4uYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG4gICAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKykgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXJncy5sZW5ndGggPSBhcmdzTGVuO1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl9jcHMgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfY3BzX2Nsb3N1cmVcbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl90dXBsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3MpIHtcbiAgICB2YXIgbiA9IGYubCA+PSAwID8gZi5sIDogKGYubCA9IGYubGVuZ3RoKTtcbiAgICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICAgIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICAgIHZhciBnID0gZiguLi5hcmdzLnNsaWNlKDAsIG4pKTtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChnLCBhcmdzLnNsaWNlKG4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRklYTUU6IFJlc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvZiBoYW5kbGluZyBzcGVjaWFsbHkgZCA9IDEgb3IgMlxuICAgICAgdmFyIGFyZ3NfID0gYXJncy5zbGljZSgpO1xuICAgICAgYXJnc18ubGVuZ3RoID0gYXJnc0xlbjtcbiAgICAgIHZhciByZXQgPSBjYW1sX2Nwc19jbG9zdXJlKFxuICAgICAgICBmdW5jdGlvbiAoLi4uZXh0cmFfYXJncykge1xuICAgICAgICAgIGlmIChleHRyYV9hcmdzLmxlbmd0aCA9PT0gMCkgZXh0cmFfYXJncyA9IFt1bmRlZmluZWRdO1xuICAgICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChmLCBhcmdzLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0LmwgPSBkO1xuICAgICAgcmV0LmNwcy5sID0gZCArIDE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYW1sX2NhbGxfZ2VuX2NwcyhmLCBhcmdzKSB7XG4gICAgaWYgKCFmLmNwcykge1xuICAgICAgdmFyIGsgPSBhcmdzLnBvcCgpO1xuICAgICAgcmV0dXJuIGsoY2FtbF9jYWxsX2dlbl9kaXJlY3QoZiwgYXJncykpO1xuICAgIH1cbiAgICB2YXIgbiA9IGYuY3BzLmwgPj0gMCA/IGYuY3BzLmwgOiAoZi5jcHMubCA9IGYuY3BzLmxlbmd0aCk7XG4gICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2NwcyhnLCBhcmdzKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NMZW4tLTtcbiAgICAgIHZhciBhcmdzXyA9IGFyZ3Muc2xpY2UoKTtcbiAgICAgIGFyZ3NfLmxlbmd0aCA9IGFyZ3NMZW47XG4gICAgICB2YXIgY29udCA9IGNhbWxfY3BzX2Nsb3N1cmUoXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgICAgY29udC5sID0gZDtcbiAgICAgIGNvbnQuY3BzLmwgPSBkICsgMTtcbiAgICAgIHJldHVybiBrKGNvbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2NhbWxfY2FsbF9nZW5fZGlyZWN0LCBjYW1sX2NhbGxfZ2VuX2Nwc107XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vV2Vha2RlZlxudmFyIGNhbWxfY2FsbF9nZW4gPSBjYW1sX2NhbGxfZ2VuX3R1cGxlWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlbl90dXBsZVxuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1dlYWtkZWZcbnZhciBjYW1sX2NhbGxfZ2VuX2NwcyA9IGNhbWxfY2FsbF9nZW5fdHVwbGVbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLCB2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgdmFyIG1heCA9IC0xO1xuICBpZiAoc3ltYikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkeCA9IHN5bWJbaV1bMl07XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIGlkeCk7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IGlkeDtcbiAgICB9XG4gIH1cbiAgci5uZXh0X2lkeCA9IG1heCArIDE7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RvcGxldmVsX3JlbG9jXG52YXIganNvb190b3BsZXZlbF9yZWxvYyA9IHVuZGVmaW5lZDtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczoganNvb190b3BsZXZlbF9yZWxvY1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZiAoanNvb190b3BsZXZlbF9yZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soanNvb190b3BsZXZlbF9yZWxvYywgW25hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpO1xuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdO1xuICAgICAgaWYgKG5pZCA+PSAwKSBuID0gbmlkO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1bml0IGlzIHVua25vd24sIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGR5bmxpbmtpbmcgYSBwcmVjb21waWxlZCBqcyxcbiAgICAgICAgLy8gbGV0J3MgYWxsb2NhdGUgYSBmcmVzaCBpZHguXG4gICAgICAgIHZhciBuID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgubmV4dF9pZHgrKztcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV0gPSBuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmIChuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykge1xuICByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByKGYpIHtcbiAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobywgZiwgdikge1xuICBvW2ZdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLCBmKSB7XG4gIHJldHVybiBvW2ZdO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobywgZikge1xuICBkZWxldGUgb1tmXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sIGMpIHtcbiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlIChyZXM/Lmpvb190cmFtcCkge1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsIGFyZ3MsIGRpcmVjdCkge1xuICByZXR1cm4geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBhcmdzLCBqb29fZGlyZWN0OiBkaXJlY3QgfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX3dyYXBfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vQWxpYXM6IGNhbWxfY3BzX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZiwgYXJncykge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgam9vX3RyYW1wOiBmLFxuICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0geyBqb29fdHJhbXA6IGhhbmRsZXIsIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV0gfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZXM/Lmpvb19hcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyhfdW5pdCkge1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKENPTkZJRyhcImVmZmVjdHNcIikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZiAoXG4gICAgICBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUubWVzc2FnZSAmJlxuICAgICAgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSlcbiAgICApXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmIChcbiAgICAgIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZS5tZXNzYWdlICYmXG4gICAgICBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKVxuICAgIClcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLCBlXTtcbiAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICBlbHNlXG4gICAgICBleG4gPSBbMCwgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcikgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2UgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy8gQmFja3RyYWNlcyBhcmUgdmVyeSBleHBlbnNpdmUsIHdlIG9ubHkgZW5hYmxlIHRoZW0gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAvLyBhdCBjb21waWxlLXRpbWUgKC0tZW5hYmxlIHdpdGgtanMtZXJyb3IpIG9yIGF0IHN0YXJ0dXAgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MS5cbiAgLy8gTGlicmFyaWVzIHN1Y2ggYXMgQmFzZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlIGJhY2t0cmFjZXMgKHByb2dyYW1tYXRpY2FsbHkpIGJ1dFxuICAvLyBpdCdzIHdheSB0byBzbG93LiBIZXJlLCB3ZSBmb3JjZSB0aGUgZW5kLXVzZXIgdG8gb3B0LWluIHRvIGJhY2t0cmFjZXMuXG4gIGlmIChjYW1sX3JlY29yZF9iYWNrdHJhY2VfZW52X2ZsYWcgJiYgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4bjtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZiAoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT09IDI0OClcbiAgICBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmIChleG4uanNfZXJyb3IpIHtcbiAgICByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3Rocm93X2pzX2V4Y2VwdGlvbihleG4pIHtcbiAgdGhyb3cgZXhuO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7XG4gIHJldHVybiAhIXg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkge1xuICByZXR1cm4geCB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgYlswXSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJbaSArIDFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yICh2YXIgaSA9IGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLCBlLCBsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpIHtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICg7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmICgheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnY2FtbF9qc192YXI6IFwiJyArXG4gICAgICAgIHggK1xuICAgICAgICAnXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLicsXG4gICAgKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6XG4gIHJldHVybiBldmFsPy4oeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykge1xuICByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGYoKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZihhWzFdKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG5ldyBjKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0pO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7XG4gICAgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbiAgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEYoKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgYygpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkge1xuICAgIHJldHVybiBjLmFwcGx5KHRoaXMsIGEpO1xuICB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRigpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBjYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKSA6IHJlcztcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW3RoaXMsIGFyZ3NdKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuIChmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCkpIC0gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMoeCwgeSkge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRG91YmxlRXF1YWxzOlxuICByZXR1cm4gKyh4ID09IHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzKHgsIHkpIHtcbiAgcmV0dXJuICsoeCA9PT0geSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcocykge1xuICAvLyBVc2VzIGFuIGluZGlyZWN0IGV2YWwgdGhyb3VnaCB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgb3BlcmF0b3IuXG4gIC8vIChzZWUgaHR0cHM6Ly9tZG4uZGV2L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2V2YWwpXG4gIC8vIFRoaXMgaXMgZmFzdGVyIGFuZCBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlcy5cbiAgLy8gQWxzbyBwcmVwZW5kcyBgXCJ1c2Ugc3RyaWN0XCJgIGRpcmVjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vdCBpbmhlcml0ZWRcbiAgLy8gZnJvbSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHdpdGggYW4gaW5kaXJlY3QgZXZhbC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsnICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gV2UgYWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYmV0d2VlbiBleHByZXNzaW9uc1xuICAvLyBhbmQgc3RhdGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHdlIGFjY2VwdCBpbnZhbGlkIGlucHV0cyBsaWtlXG4gIC8vIFwiYSkoYlwiLCBidXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50KHRhZykge1xuICB0aHJvdyB0YWc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnKHRhZywgYXJnKSB7XG4gIHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyh0YWcsIGFyZ3MpIHtcbiAgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aChtc2cpIHtcbiAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlID0gWzI0OCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksIC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5KCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RpbWVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3M/LmNwdVVzYWdlKSB7XG4gICAgdmFyIHQgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3B1VXNhZ2UoKTtcbiAgICByZXR1cm4gQkxPQ0soMCwgdC51c2VyIC8gMWU2LCB0LnN5c3RlbSAvIDFlNiwgMCwgMCk7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZT8ubm93KSB7XG4gICAgcmV0dXJuIEJMT0NLKDAsIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwLCAwLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RpbWVzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICBkLmdldFVUQ0RhdGUoKSxcbiAgICBkLmdldFVUQ01vbnRoKCksXG4gICAgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldFVUQ0RheSgpLFxuICAgIGRveSxcbiAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgamFuLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAganVsLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0U2Vjb25kcygpLFxuICAgIGQuZ2V0TWludXRlcygpLFxuICAgIGQuZ2V0SG91cnMoKSxcbiAgICBkLmdldERhdGUoKSxcbiAgICBkLmdldE1vbnRoKCksXG4gICAgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldERheSgpLFxuICAgIGRveSxcbiAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHxcbiAgICAgIDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKSB7XG4gIHZhciBkID0gbmV3IERhdGUodG1bNl0gKyAxOTAwLCB0bVs1XSwgdG1bNF0sIHRtWzNdLCB0bVsyXSwgdG1bMV0pLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLCB0LCB0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQpO1xuICBpZiAoIWZpbGUuaXNhdHR5KSByZXR1cm4gMDtcbiAgcmV0dXJuIGZpbGUuaXNhdHR5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KF9maWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvclxudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLFxuICBcIkVBQ0NFU1wiLFxuICBcIkVBR0FJTlwiLFxuICBcIkVCQURGXCIsXG4gIFwiRUJVU1lcIixcbiAgXCJFQ0hJTERcIixcbiAgXCJFREVBRExLXCIsXG4gIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLFxuICBcIkVGQVVMVFwiLFxuICBcIkVGQklHXCIsXG4gIFwiRUlOVFJcIixcbiAgXCJFSU5WQUxcIixcbiAgXCJFSU9cIixcbiAgXCJFSVNESVJcIixcbiAgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIixcbiAgXCJFTkFNRVRPT0xPTkdcIixcbiAgXCJFTkZJTEVcIixcbiAgXCJFTk9ERVZcIixcbiAgXCJFTk9FTlRcIixcbiAgXCJFTk9FWEVDXCIsXG4gIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsXG4gIFwiRU5PU1BDXCIsXG4gIFwiRU5PU1lTXCIsXG4gIFwiRU5PVERJUlwiLFxuICBcIkVOT1RFTVBUWVwiLFxuICBcIkVOT1RUWVwiLFxuICBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIixcbiAgXCJFUElQRVwiLFxuICBcIkVSQU5HRVwiLFxuICBcIkVST0ZTXCIsXG4gIFwiRVNQSVBFXCIsXG4gIFwiRVNSQ0hcIixcbiAgXCJFWERFVlwiLFxuICBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIixcbiAgXCJFQUxSRUFEWVwiLFxuICBcIkVOT1RTT0NLXCIsXG4gIFwiRURFU1RBRERSUkVRXCIsXG4gIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsXG4gIFwiRU5PUFJPVE9PUFRcIixcbiAgXCJFUFJPVE9OT1NVUFBPUlRcIixcbiAgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsXG4gIFwiRVBGTk9TVVBQT1JUXCIsXG4gIFwiRUFGTk9TVVBQT1JUXCIsXG4gIFwiRUFERFJJTlVTRVwiLFxuICBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLFxuICBcIkVORVRVTlJFQUNIXCIsXG4gIFwiRU5FVFJFU0VUXCIsXG4gIFwiRUNPTk5BQk9SVEVEXCIsXG4gIFwiRUNPTk5SRVNFVFwiLFxuICBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsXG4gIFwiRU5PVENPTk5cIixcbiAgXCJFU0hVVERPV05cIixcbiAgXCJFVE9PTUFOWVJFRlNcIixcbiAgXCJFVElNRURPVVRcIixcbiAgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIixcbiAgXCJFSE9TVFVOUkVBQ0hcIixcbiAgXCJFTE9PUFwiLFxuICBcIkVPVkVSRkxPV1wiLFxuXTtcblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5O1xuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIC8vIGVycm5vIGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIC1lcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIiksXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmVycm9yXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N0cmVycm9yKGVycm5vKSB7XG4gIGNvbnN0IHV0aWwgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuICBpZiAoZXJybm8gPj0gMCkge1xuICAgIGNvbnN0IGNvZGUgPSB1bml4X2Vycm9yW2Vycm5vXTtcbiAgICByZXR1cm4gdXRpbFxuICAgICAgLmdldFN5c3RlbUVycm9yTWFwKClcbiAgICAgIC5lbnRyaWVzKClcbiAgICAgIC5maW5kKCh4KSA9PiB4WzFdWzBdID09PSBjb2RlKVsxXVsxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXRpbC5nZXRTeXN0ZW1FcnJvck1lc3NhZ2UoZXJybm8pO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyZXJyb3Jcbi8vUmVxdWlyZXM6IHVuaXhfZXJyb3Jcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3RyZXJyb3IoZXJybm8pIHtcbiAgY29uc3QgY29kZSA9IHVuaXhfZXJyb3JbZXJybm9dO1xuICByZXR1cm4gY29kZSB8fCBcIlVua25vd24gZXJyb3IgXCIgKyBlcnJubztcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvcl9tZXNzYWdlXG4vL0FsaWFzOiBjYW1sX3VuaXhfZXJyb3JfbWVzc2FnZVxuLy9SZXF1aXJlczogY2FtbF9zdHJlcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIHVuaXhfZXJyb3JfbWVzc2FnZShlcnIpIHtcbiAgY29uc3QgZXJybm8gPSB0eXBlb2YgZXJyID09PSBcIm51bWJlclwiID8gZXJyIDogLWVyclsxXTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNhbWxfc3RyZXJyb3IoZXJybm8pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jaGRpclxuLy9BbGlhczogdW5peF9jaGRpclxuZnVuY3Rpb24gY2FtbF91bml4X2NoZGlyKGRpcikge1xuICByZXR1cm4gY2FtbF9zeXNfY2hkaXIoZGlyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gZmFsc2UsXG4gICAgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXRfNjQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gdHJ1ZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyBmYWxzZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0XzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyB0cnVlLFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NobW9kXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9jaG1vZFxuZnVuY3Rpb24gY2FtbF91bml4X2NobW9kKG5hbWUsIHBlcm1zKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2NobW9kOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmNobW9kKHJvb3QucmVzdCwgcGVybXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vQWxpYXM6IHVuaXhfcmVuYW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVuYW1lKG8sIG4pIHtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmIChvX3Jvb3QuZGV2aWNlICE9PSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSwgXCJFWERFVlwiLCBcInJlbmFtZVwiKTtcbiAgaWYgKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSkgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm90IGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X2xpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9saW5rKGZvbGxvdywgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2UubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8vIFdlIGNhbid0IGNvbnRyb2wgd2hldGhlciBhICdzcmMnIHN5bWxpbmsgaXMgZm9sbG93ZWQgb3Igbm90LlxuICAvLyBTbyB3ZSBmYWlsIHdoZW4gJ2ZvbGxvdycgaXMgc2V0LCBhcyBkb2N1bWVudGVkIGluIHRoZSBVbml4IG1vZHVsZS5cbiAgaWYgKHR5cGVvZiBmb2xsb3cgIT09IFwibnVtYmVyXCIpXG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoLyogcmFpc2UgVW5peF9lcnJvciAqLyAxLCBcIkVOT1NZU1wiLCBcImxpbmtcIik7XG4gIGlmIChzcmNfcm9vdC5kZXZpY2UgIT09IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRVhERVZcIiwgXCJsaW5rXCIpO1xuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLmxpbmsoXG4gICAgc3JjX3Jvb3QucmVzdCxcbiAgICBkc3Rfcm9vdC5yZXN0LFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmICghZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmsoXG4gICAgdG9fZGlyLFxuICAgIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHNyYyksXG4gICAgZHN0X3Jvb3QucmVzdCxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdXRpbWVzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91dGltZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF91dGltZXMobmFtZSwgYXRpbWUsIG10aW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudXRpbWVzKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91dGltZXM6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByb290LmRldmljZS51dGltZXMocm9vdC5yZXN0LCBhdGltZSwgbXRpbWUsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGUobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUocm9vdC5yZXN0LCBsZW4sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2ludDY0X3RvX2Zsb2F0XG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjQobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUoXG4gICAgcm9vdC5yZXN0LFxuICAgIGNhbWxfaW50NjRfdG9fZmxvYXQobGVuKSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfYWNjZXNzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9hY2Nlc3NcbmZ1bmN0aW9uIGNhbWxfdW5peF9hY2Nlc3MobmFtZSwgZmxhZ3MpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnIgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZi53ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGYueCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBmLmYgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmFjY2Vzcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfYWNjZXNzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UuYWNjZXNzKHJvb3QucmVzdCwgZiwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9zeXNfZmRzLCBNbENoYW5pZFxuLy9BbGlhczogdW5peF9vcGVuXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLnJkd3IgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZi5ub25ibG9jayA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgICBmLmNyZWF0ZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2OlxuICAgICAgICBmLnRydW5jYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYuZXhjbCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vY3R0eSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA5OlxuICAgICAgICBmLmRzeW5jID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBmLnN5bmMgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LCBmLCBwZXJtcywgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgdmFyIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIHZhciBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2ZkcywgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgY21kKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgY21kKTtcbiAgcmV0dXJuIGZkX2Rlc2MuZmlsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzdGF0XG4vL0FsaWFzOiB1bml4X2ZzdGF0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3RhdChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3RhdFwiKTtcbiAgaWYgKCFmaWxlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyBmYWxzZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mc3RhdF82NFxuLy9BbGlhczogdW5peF9mc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3VuaXhfZnN0YXRfNjQoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZnN0YXRcIik7XG4gIGlmICghZmlsZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mc3RhdDY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZjaG1vZFxuLy9BbGlhczogdW5peF9mY2htb2Rcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2ZjaG1vZChmZCwgcGVybXMpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZmNobW9kXCIpO1xuICBpZiAoIWZpbGUuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZjaG1vZDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBmaWxlLmNobW9kKHBlcm1zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzeW5jXG4vL0FsaWFzOiB1bml4X2ZzeW5jXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3luYyhmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3luY1wiKTtcbiAgaWYgKCFmaWxlLnN5bmMpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzeW5jOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3luYygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfd3JpdGVcbi8vQWxpYXM6IHVuaXhfd3JpdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF91bml4X3dyaXRlKGZkLCBidWYsIHBvcywgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgdmFyIHdyaXR0ZW4gPSAwO1xuICB3aGlsZSAobGVuID4gMCkge1xuICAgIHZhciBuID0gZmlsZS53cml0ZShhLCBwb3MsIGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgICB3cml0dGVuICs9IG47XG4gICAgcG9zICs9IG47XG4gICAgbGVuIC09IG47XG4gIH1cbiAgcmV0dXJuIHdyaXR0ZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zaW5nbGVfd3JpdGVcbi8vQWxpYXM6IHVuaXhfc2luZ2xlX3dyaXRlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF9zaW5nbGVfd3JpdGUoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwid3JpdGVcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gZmlsZS53cml0ZShcbiAgICBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZiksXG4gICAgcG9zLFxuICAgIGxlbixcbiAgICAvKiByYWlzZSB1bml4X2Vycm9yICovIDEsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF93cml0ZV9iaWdhcnJheVxuLy9BbGlhczogY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3VuaXhfd3JpdGVfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgd3JpdHRlbiA9IDA7XG4gIHdoaWxlIChsZW4gPiAwKSB7XG4gICAgdmFyIG4gPSBmaWxlLndyaXRlKGEsIHBvcywgbGVuLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xuICAgIHdyaXR0ZW4gKz0gbjtcbiAgICBwb3MgKz0gbjtcbiAgICBsZW4gLT0gbjtcbiAgfVxuICByZXR1cm4gd3JpdHRlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRcbi8vQWxpYXM6IHVuaXhfcmVhZFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZChmZCwgYnVmLCBwb3MsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJyZWFkXCIpO1xuICByZXR1cm4gZmlsZS5yZWFkKFxuICAgIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKSxcbiAgICBwb3MsXG4gICAgbGVuLFxuICAgIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRfYmlnYXJyYXlcbi8vQWxpYXM6IHVuaXhfcmVhZF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcInJlYWRcIik7XG4gIHJldHVybiBmaWxlLnJlYWQoYSwgcG9zLCBsZW4sIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc2Vla1xuLy9BbGlhczogdW5peF9sc2Vla1xuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlXG5mdW5jdGlvbiBjYW1sX3VuaXhfbHNlZWsoZmQsIGxlbiwgd2hlbmNlKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImxzZWVrXCIpO1xuICByZXR1cm4gZmlsZS5zZWVrKGxlbiwgd2hlbmNlLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHNlZWtfNjRcbi8vQWxpYXM6IHVuaXhfbHNlZWtfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9pbnQ2NF90b19mbG9hdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzZWVrXzY0KGZkLCBsZW4sIHdoZW5jZSkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJsc2Vla1wiKTtcbiAgcmV0dXJuIGZpbGUuc2VlayhjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIHdoZW5jZSwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Z0cnVuY2F0ZVxuLy9BbGlhczogdW5peF9mdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2Z0cnVuY2F0ZShmZCwgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImZ0cnVuY2F0ZVwiKTtcbiAgaWYgKCFmaWxlLnRydW5jYXRlKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mdHJ1bmNhdGU6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICBmaWxlLnRydW5jYXRlKGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mdHJ1bmNhdGVfNjRcbi8vQWxpYXM6IHVuaXhfZnRydW5jYXRlXzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGgsIGNhbWxfaW50NjRfdG9fZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9mdHJ1bmNhdGVfNjQoZmQsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmdHJ1bmNhdGVcIik7XG4gIGlmICghZmlsZS50cnVuY2F0ZSkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfZnRydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgZmlsZS50cnVuY2F0ZShjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2Vcbi8vQWxpYXM6IHVuaXhfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImNsb3NlXCIpO1xuICBmaWxlLmNsb3NlKC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9BbGlhczogdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5faW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuZnVuY3Rpb24gY2FtbF91bml4X2luY2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgZmlsZS5jaGVja19zdHJlYW1fc2VtYW50aWNzKFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB1bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5fb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3Jcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG5mdW5jdGlvbiBjYW1sX3VuaXhfb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwib3V0X2NoYW5uZWxfb2ZfZGVzY3JcIik7XG4gIGZpbGUuY2hlY2tfc3RyZWFtX3NlbWFudGljcyhcIm91dF9jaGFubmVsX29mX2Rlc2NyXCIpO1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0dWlkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldGV1aWRcbi8vQWxpYXM6IHVuaXhfZ2V0ZXVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGV1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0ZXVpZCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0ZXVpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0Z2lkXG4vL0FsaWFzOiB1bml4X2dldGdpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRnaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldGdpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0ZWdpZFxuLy9BbGlhczogdW5peF9nZXRlZ2lkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0ZWdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRlZ2lkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXRlZ2lkKCk7XG4gIH1cbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd25hbVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHduYW1cbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuLy9BbGlhczogY2FtbF91bml4X2dldGdybmFtXG4vL0FsaWFzOiB1bml4X2dldGdybmFtXG4vL0FsaWFzOiBjYW1sX3VuaXhfZ2V0Z3JnaWRcbi8vQWxpYXM6IHVuaXhfZ2V0Z3JnaWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd25hbShfdW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsoX3VuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCkgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlcjogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJyZWFkZGlyXCIpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJjbG9zZWRpclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihyYWlzZV91bml4LCBjb2RlLCBjbWQsIG1zZywgcGF0aCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpXG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIGNtZCwgcGF0aCkpO1xuICBlbHNlIHtcbiAgICB2YXIgbXNnID0gY29kZSArIFwiOiBcIiArIG1zZyArIFwiLCBcIiArIGNtZDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSBtc2cgKz0gXCIgJ1wiICsgcGF0aCArIFwiJ1wiO1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG1zZyk7XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIiA/IG5hbWUgKyBcIi9cIiA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5lbHNlIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKSB7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9XG4gIGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHxcbiAgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKSB7fVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczoganNvb19pc193aW4zMlxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSBcIi9cIikgcmV0dXJuIFtcIlwiLCBwYXRoLnNsaWNlKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9XG4gICAgICAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgdmFyIGlzVW5jID0gZGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gXCI6XCI7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChyZXN1bHRbMl0gfHwgaXNVbmMpIHtcbiAgICAgIHZhciByb290ID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgICB2YXIgc2VwID0gcmVzdWx0WzJdIHx8IFwiXCI7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4ganNvb19pc193aW4zMiA/IHdpbjMyIDogcG9zaXg7XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoKG5hbWUpIHtcbiAgbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkpIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdCgvWy9cXFxcXS8pO1xuICB2YXIgbmNvbXAgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChjb21wW2ldKSB7XG4gICAgICBjYXNlIFwiLi5cIjpcbiAgICAgICAgbmNvbXAucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmNvbXAucHVzaChjb21wW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdO1xuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgcGF0aDogXCIvc3RhdGljL1wiLFxuICBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKSxcbn0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpIHtcbiAgdmFyIHByZXYgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF07XG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZiAoXG4gICAgICBuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09PSAwICYmXG4gICAgICAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKVxuICAgIClcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gIH1cbiAgaWYgKCFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdD8ubWF0Y2goL15bYS16QS1aXTpcXC8kLykpIHtcbiAgICAgIHZhciBtID0geyBwYXRoOiByb290LCBkZXZpY2U6IG5ldyBNbE5vZGVEZXZpY2Uocm9vdCkgfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsIGYpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goeyBwYXRoOiBuYW1lLCBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UobmFtZSwgZikgfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSkge1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmIChqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT09IG5hbWUpIGlkeCA9IGk7XG4gIGlmIChpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRjd2Rcbi8vQWxpYXM6IHVuaXhfZ2V0Y3dkXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZiAocm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCkpIHtcbiAgICBpZiAocm9vdC5yZXN0KVxuICAgICAgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVOT1RESVJcIixcbiAgICAgIFwiY2hkaXJcIixcbiAgICAgIFwibm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhkaXIpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZGlyKSwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lLCByYWlzZV91bml4KSB7XG4gIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgIHJhaXNlX3VuaXgsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICBuYW1lLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBsW2kgKyAxXSA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYSA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobywgbikge1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYgKG9fcm9vdC5kZXZpY2UgIT09IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZiAoIW9fcm9vdC5kZXZpY2UucmVuYW1lKSBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKF92ZmQsIF9raW5kLCBfbGF5b3V0LCBfc2hhcmVkLCBfZGltcywgX3Bvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndiwgX2FyZ24pIHtcbiAgLy8gYXJnbiA9PT0gNlxuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLCBhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsIGNvbnRlbnQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSkgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZiAoIWdsb2JhbFRoaXMuanNvb19mc190bXApIGdsb2JhbFRoaXMuanNvb19mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wLnB1c2goeyBuYW1lOiBuYW1lLCBjb250ZW50OiBjb250ZW50IH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCgpIHtcbiAgdmFyIHRtcCA9IGdsb2JhbFRoaXMuanNvb19mc190bXA7XG4gIGlmICh0bXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKykge1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSwgdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LCBjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50KG5hbWUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG5hbWUpIDogbmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgeyByZG9ubHk6IDEgfSk7XG4gICAgdmFyIGxlbiA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKGJ1ZiwgMCwgbGVuLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGJ1Zik7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRGV2aWNlIHtcbiAgY29uc3RydWN0b3Iocm9vdCwgZikge1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5sb29rdXBGdW4gPSBmO1xuICB9XG5cbiAgbm0obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgKyBuYW1lO1xuICB9XG5cbiAgY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSkge1xuICAgIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIGxvb2t1cChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcodGhpcy5yb290KSxcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobmFtZSksXG4gICAgICApO1xuICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleGlzdHMobmFtZSwgZG9fbm90X2xvb2t1cCkge1xuICAgIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHJldHVybiAxO1xuICAgIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gICAgaWYgKCFkb19ub3RfbG9va3VwKSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdID8gMSA6IDA7XG4gIH1cblxuICBpc0ZpbGUobmFtZSkge1xuICAgIGlmICh0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkZGlyKG5ld25hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuZXduYW1lKSArIFwiIDogZGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9sZF9zbGFzaCA9IHRoaXMuc2xhc2gob2xkbmFtZSk7XG4gICAgdmFyIG5ld19zbGFzaCA9IHRoaXMuc2xhc2gobmV3bmFtZSk7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuZXdfc2xhc2gpO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnJlYWRkaXIob2xkbmFtZSkpIHtcbiAgICAgIHRoaXMucmVuYW1lKG9sZF9zbGFzaCArIGYsIG5ld19zbGFzaCArIGYpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W29sZF9zbGFzaF07XG4gIH1cblxuICByZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkge1xuICAgIGlmICghdGhpcy5leGlzdHMob2xkbmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG9sZG5hbWUpICsgXCIgOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIGlmICh0aGlzLmlzX2RpcihvbGRuYW1lKSkge1xuICAgICAgdGhpcy5yZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkgJiYgdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFtuZXduYW1lXSA9IHRoaXMuY29udGVudFtvbGRuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbb2xkbmFtZV07XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgX21vZGUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICAgIHBhcmVudCA9IHBhcmVudD8uWzFdIHx8IFwiXCI7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyhwYXJlbnQpKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICApO1xuICAgIGlmICghdGhpcy5pc19kaXIocGFyZW50KSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHZhciBuYW1lX3NsYXNoID0gbmFtZSA9PT0gXCJcIiA/IFwiXCIgOiB0aGlzLnNsYXNoKG5hbWUpO1xuICAgIGlmICghdGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICBmb3IgKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgICAgaWYgKG4uc3RhcnRzV2l0aChuYW1lX3NsYXNoKSAmJiBuICE9PSBuYW1lX3NsYXNoKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRU5PVEVNUFRZXCIsXG4gICAgICAgICAgXCJybWRpclwiLFxuICAgICAgICAgIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiLFxuICAgICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG4gIH1cblxuICByZWFkZGlyKG5hbWUpIHtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgPT09IFwiXCIgPyBcIlwiIDogdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmIChuLnN0YXJ0c1dpdGgobmFtZV9zbGFzaCkgJiYgbiAhPT0gbmFtZV9zbGFzaCkge1xuICAgICAgICB2YXIgbGFzdCA9IG4uaW5kZXhPZihcIi9cIiwgbmFtZV9zbGFzaC5sZW5ndGgpO1xuICAgICAgICBpZiAobGFzdCA8IDApIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBtID0gbi5zbGljZShuYW1lX3NsYXNoLmxlbmd0aCwgbGFzdCk7XG4gICAgICAgIGlmIChtICYmICFzZWVuW21dKSB7XG4gICAgICAgICAgc2VlblttXSA9IHRydWU7XG4gICAgICAgICAgYS5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgb3BlbmRpcihuYW1lLCByYWlzZV91bml4KSB7XG4gICAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gICAgdmFyIGMgPSBmYWxzZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRTeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjKVxuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICAgIFwiRUJBREZcIixcbiAgICAgICAgICAgIFwicmVhZGRpclwiLFxuICAgICAgICAgICAgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGkgPT09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9O1xuICAgICAgfSxcbiAgICAgIGNsb3NlU3luYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYylcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgICBcIkVCQURGXCIsXG4gICAgICAgICAgICBcInJlYWRkaXJcIixcbiAgICAgICAgICAgIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiLFxuICAgICAgICAgICk7XG4gICAgICAgIGMgPSB0cnVlO1xuICAgICAgICBhID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpc19kaXIobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSA/IDEgOiAwO1xuICB9XG5cbiAgdW5saW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUsIHRydWUpKSB7XG4gICAgICAvLyBbdHJ1ZV0gbWVhbnMgbm8gXCJsb29rdXBcIiBpZiBub3QgZm91bmQuXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJ1bmxpbmtcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYWNjZXNzKG5hbWUsIF9mbGFncywgcmFpc2VfdW5peCkge1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVBQ0NFU1NcIixcbiAgICAgICAgICBcImFjY2Vzc1wiLFxuICAgICAgICAgIFwicGVybWlzc2lvbiBkZW5pZWQsXCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBfcGVybXMsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgZmlsZTtcbiAgICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFSVNESVJcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGlmIChmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKDApO1xuICAgIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSh0aGlzLm5tKG5hbWUpLCByYWlzZV91bml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbiAgfVxuXG4gIHRydW5jYXRlKG5hbWUsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHZhciBmaWxlO1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVJU0RJUlwiLFxuICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGZpbGUudHJ1bmNhdGUobGVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIobmFtZSwgY29udGVudCkge1xuICAgIHZhciBmaWxlO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGlmIChjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKSBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gICAgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gICAgZWxzZSBpZiAoY29udGVudC50b1N0cmluZykge1xuICAgICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoXG4gICAgICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSksXG4gICAgICApO1xuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICAgIH0gZWxzZVxuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgIHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiLFxuICAgICAgKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBNbEZha2VGaWxlIGV4dGVuZHMgTWxGaWxlIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gY29udGVudDtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbikge1xuICAgIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gICAgdmFyIG9sZF9sZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvbGQpO1xuICAgIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbiB8IDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgTWF0aC5taW4obGVuLCBvbGRfbGVuKSk7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG4gIH1cblxuICB3cml0ZShvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICAgIH1cbiAgICBjYW1sX2JsaXRfYnl0ZXMoXG4gICAgICBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5KGJ1ZiksXG4gICAgICBwb3MsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBvZmZzZXQsXG4gICAgICBsZW4sXG4gICAgKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgcmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4gfCAwKTtcbiAgICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmNsYXNzIE1sRmFrZUZkX291dCBleHRlbmRzIE1sRmFrZUZpbGUge1xuICBjb25zdHJ1Y3RvcihmZCwgZmxhZ3MpIHtcbiAgICBzdXBlcihjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoX3MpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgaWYgKGZkID09PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGVsc2UgaWYgKGZkID09PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIpIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ1bmNhdGUoX2xlbiwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgcmFpc2VfdW5peCxcbiAgICAgIFwiRUlOVkFMXCIsXG4gICAgICBcImZ0cnVuY2F0ZVwiLFxuICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgd3JpdHRlbiA9IGxlbjtcbiAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGVuID4gMCAmJlxuICAgICAgICBwb3MgPj0gMCAmJlxuICAgICAgICBwb3MgKyBsZW4gPD0gYnVmLmxlbmd0aCAmJlxuICAgICAgICBidWZbcG9zICsgbGVuIC0gMV0gPT09IDEwXG4gICAgICApXG4gICAgICAgIGxlbi0tO1xuICAgICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH1cbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVCQURGXCIsXG4gICAgICBcIndyaXRlXCIsXG4gICAgICBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIixcbiAgICApO1xuICB9XG5cbiAgcmVhZChfYnVmLCBfcG9zLCBfbGVuLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFQkFERlwiLCBcInJlYWRcIiwgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIpO1xuICB9XG5cbiAgc2VlayhfbGVuLCBfd2hlbmNlLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFU1BJUEVcIiwgXCJsc2Vla1wiLCBcImlsbGVnYWwgc2Vla1wiKTtcbiAgfVxuICBwb3MoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKF9jbWQpIHt9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRmQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBmbGFncykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2Vla2VkID0gZmFsc2U7XG4gIH1cblxuICBlcnJfY2xvc2VkKGNtZCwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRUJBREZcIiwgY21kLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIik7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGgoKTtcbiAgICB0aGlzLmVycl9jbG9zZWQoXCJsZW5ndGhcIik7XG4gIH1cblxuICB0cnVuY2F0ZShsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICBpZiAoISh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgICAgXCJ0cnVuY2F0ZVwiLFxuICAgICAgICAgIFwiaW52YWxpZCBhcmd1bWVudFwiLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZS50cnVuY2F0ZShsZW4pO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJ0cnVuY2F0ZVwiLCByYWlzZV91bml4KTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlICYmICh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBsZW4gPSB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgICAgIHRoaXMub2Zmc2V0ICs9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHRoaXMuZXJyX2Nsb3NlZChcIndyaXRlXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgcmVhZChidWYsIHBvcywgbGVuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKHRoaXMuZmlsZSAmJiAhdGhpcy5mbGFncy53cm9ubHkpIHtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgIGxlbiA9IHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gICAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJyZWFkXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgc2VlayhvZmZzZXQsIHdoZW5jZSwgcmFpc2VfdW5peCkge1xuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIFwibHNlZWtcIixcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5maWxlKSB0aGlzLmVycl9jbG9zZWQoXCJjbG9zZVwiKTtcbiAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKGNtZCkge1xuICAgIGlmICghdGhpcy5maWxlKSByZXR1cm4gdGhpcy5lcnJfY2xvc2VkKGNtZCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuY2xhc3MgTWxJbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGxvLCBtaSwgaGkpIHtcbiAgICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX2pcIjtcbiAgfVxuXG4gIHN0YXRpYyBVTlNJR05FRF9NQVggPSBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZik7XG4gIHN0YXRpYyBTSUdORURfTUFYID0gbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmLCAweDdmZmYpO1xuICBzdGF0aWMgU0lHTkVEX01JTiA9IG5ldyBNbEludDY0KDB4MDAwMDAwLCAweDAwMDAwMCwgMHg4MDAwKTtcblxuICBzbGljZSgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbywgdGhpcy5taSwgdGhpcy5oaSk7XG4gIH1cblxuICB1Y29tcGFyZSh4KSB7XG4gICAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb21wYXJlKHgpIHtcbiAgICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICAgIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICAgIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gICAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHZhciBsbyA9IC10aGlzLmxvO1xuICAgIHZhciBtaSA9IC10aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgICB2YXIgaGkgPSAtdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xuICB9XG5cbiAgYWRkKHgpIHtcbiAgICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gICAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbiAgfVxuXG4gIHN1Yih4KSB7XG4gICAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gICAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICAgIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBtdWwoeCkge1xuICAgIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICAgIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gICAgdmFyIGhpID1cbiAgICAgICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArXG4gICAgICB0aGlzLmhpICogeC5sbyArXG4gICAgICB0aGlzLm1pICogeC5taSArXG4gICAgICB0aGlzLmxvICogeC5oaTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvIHwgdGhpcy5taSB8IHRoaXMuaGkpID09PSAwO1xuICB9XG5cbiAgaXNOZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGkgPDwgMTYgPCAwO1xuICB9XG5cbiAgYW5kKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG4gIH1cblxuICBvcih4KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gfCB4LmxvLCB0aGlzLm1pIHwgeC5taSwgdGhpcy5oaSB8IHguaGkpO1xuICB9XG5cbiAgeG9yKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyBeIHgubG8sIHRoaXMubWkgXiB4Lm1pLCB0aGlzLmhpIF4geC5oaSk7XG4gIH1cblxuICBzaGlmdF9sZWZ0KHMpIHtcbiAgICBzID0gcyAmIDYzO1xuICAgIGlmIChzID09PSAwKSByZXR1cm4gdGhpcztcbiAgICBpZiAocyA8IDI0KSB7XG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgIHRoaXMubG8gPDwgcyxcbiAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHMgPCA0OClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpLFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSk7XG4gIH1cblxuICBzaGlmdF9yaWdodF91bnNpZ25lZChzKSB7XG4gICAgcyA9IHMgJiA2MztcbiAgICBpZiAocyA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHMgPCAyNClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgICB0aGlzLmhpID4+IHMsXG4gICAgICApO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgdGhpcy5oaSA+PiAocyAtIDI0KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xuICB9XG5cbiAgc2hpZnRfcmlnaHQocykge1xuICAgIHMgPSBzICYgNjM7XG4gICAgaWYgKHMgPT09IDApIHJldHVybiB0aGlzO1xuICAgIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICAgIGlmIChzIDwgMjQpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYsXG4gICAgICApO1xuICAgIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSkgPj4gMTYsXG4gICAgICAgIHNpZ24gJiAweGZmZmYsXG4gICAgICApO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xuICB9XG5cbiAgbHNsMSgpIHtcbiAgICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbiAgfVxuXG4gIGxzcjEoKSB7XG4gICAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG4gIH1cblxuICB1ZGl2bW9kKHgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgbW9kdWx1cyA9IHRoaXMuc2xpY2UoKTtcbiAgICB2YXIgZGl2aXNvciA9IHguc2xpY2UoKTtcbiAgICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLCAwLCAwKTtcbiAgICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGl2aXNvci5sc2wxKCk7XG4gICAgfVxuICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgb2Zmc2V0LS07XG4gICAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICAgIHF1b3RpZW50LmxvKys7XG4gICAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICAgIH1cbiAgICAgIGRpdmlzb3IubHNyMSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBxdW90aWVudDogcXVvdGllbnQsIG1vZHVsdXM6IG1vZHVsdXMgfTtcbiAgfVxuXG4gIGRpdih5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gICAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICAgIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICAgIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIG1vZCh5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpO1xuICAgIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gICAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICB0b0ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbiAgfVxuXG4gIHRvRmxvYXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzLmxvXG4gICAgKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuaGkgPj4gOCxcbiAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubG8gJiAweGZmLFxuICAgIF07XG4gIH1cblxuICBsbzMyKCkge1xuICAgIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xuICB9XG5cbiAgaGkzMigpIHtcbiAgICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgsIHkpIHtcbiAgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LCB5LCBfdG90YWwpIHtcbiAgcmV0dXJuIHguY29tcGFyZSh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnKHgpIHtcbiAgcmV0dXJuIHgubmVnKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCh4LCB5KSB7XG4gIHJldHVybiB4LmFkZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViKHgsIHkpIHtcbiAgcmV0dXJuIHguc3ViKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgsIHkpIHtcbiAgcmV0dXJuIHgubXVsKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7XG4gIHJldHVybiAreC5pc1plcm8oKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7XG4gIHJldHVybiAreC5pc05lZygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQoeCwgeSkge1xuICByZXR1cm4geC5hbmQoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IoeCwgeSkge1xuICByZXR1cm4geC5vcih5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yKHgsIHkpIHtcbiAgcmV0dXJuIHgueG9yKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X2xlZnQocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQoeCwgcykge1xuICByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdlxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYoeCwgeSkge1xuICByZXR1cm4geC5kaXYoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kXG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCh4LCB5KSB7XG4gIHJldHVybiB4Lm1vZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuLy9BbGlhczogY2FtbF9pbnQ2NF9vZl9pbnRcbi8vQWxpYXM6IGNhbWxfaW50NjRfb2ZfbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50NjRfdG9faW50XG4vL0FsaWFzOiBjYW1sX2ludDY0X3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMih4KSB7XG4gIHJldHVybiB4LnRvSW50KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geC50b0Zsb2F0KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0KHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSBcIiBcIjtcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQobiwgXCIwXCIpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZShzKTtcbiAgdmFyIGkgPSByWzBdLFxuICAgIHNpZ24gPSByWzFdLFxuICAgIGJhc2UgPSByWzJdLFxuICAgIHNpZ25lZG5lc3MgPSByWzNdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9IE1sSW50NjQuVU5TSUdORURfTUFYLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJJbnQ2NC5vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcIkludDY0Lm9mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoXG4gICAgc2lnbmVkbmVzcyAmJlxuICAgIGNhbWxfaW50NjRfdWx0KHNpZ24gPCAwID8gTWxJbnQ2NC5TSUdORURfTUlOIDogTWxJbnQ2NC5TSUdORURfTUFYLCByZXMpXG4gIClcbiAgICBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZixcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KSB7XG4gIHJldHVybiB2LmhpMzIoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAoYVs3XSA8PCAwKSB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgIChhWzRdIDw8IDApIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgKGFbMV0gPDwgMCkgfCAoYVswXSA8PCA4KSxcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkge1xuICByZXR1cm4geC50b0FycmF5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpIF4gdi5oaTMyKCk7XG59XG4iLCIvL1Byb3ZpZGVzOiBNbE11dGV4XG5jbGFzcyBNbE11dGV4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X25ld1xuLy9SZXF1aXJlczogTWxNdXRleFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIG5ldyBNbE11dGV4KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbXV0ZXhfbG9ja1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9sb2NrKHQpIHtcbiAgaWYgKHQubG9ja2VkKSBjYW1sX2ZhaWx3aXRoKFwiTXV0ZXgubG9jazogbXV0ZXggYWxyZWFkeSBsb2NrZWQuIENhbm5vdCB3YWl0LlwiKTtcbiAgZWxzZSB0LmxvY2tlZCA9IHRydWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X3RyeV9sb2NrXG5mdW5jdGlvbiBjYW1sX21sX211dGV4X3RyeV9sb2NrKHQpIHtcbiAgaWYgKCF0LmxvY2tlZCkge1xuICAgIHQubG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tdXRleF91bmxvY2tcbmZ1bmN0aW9uIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHQpIHtcbiAgdC5sb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHMuX25hdCA9IHtcbiAgICBkZXNlcmlhbGl6ZTogZGVzZXJpYWxpemVfbmF0LFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplX25hdCxcbiAgICBoYXNoOiBjYW1sX2hhc2hfbmF0LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuY2xhc3MgTWxOYXQge1xuICBjb25zdHJ1Y3Rvcih4KSB7XG4gICAgdGhpcy5kYXRhID0gbmV3IEludDMyQXJyYXkoeCk7XG4gICAgLy8gRm9yIG51bSA8IDEuNVxuICAgIC8vIGxlbmd0aF9uYXQgaXNuJ3QgZXh0ZXJuYWwsIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGUgT2JqLnNpemVcbiAgICAvLyB3b3JrIG91dCByaWdodC5cbiAgICAvLyBXZSBhZGQgKzIgdG8gdGhlIGFycmF5IGxlbmd0aDpcbiAgICAvLyAtICsxIGZvciB0aGUgdGFnXG4gICAgLy8gLSArMSBmb3IgdGhlIGN1c3RvbV9vcHMgc2xvdFxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDI7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGxlbmd0aF9uYXRcbmZ1bmN0aW9uIGxlbmd0aF9uYXQoeCkge1xuICByZXR1cm4geC5kYXRhLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpIHtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGFyci5kYXRhW2ldID0gLTE7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy9Qcm92aWRlczogc2V0X3RvX3plcm9fbmF0XG5mdW5jdGlvbiBzZXRfdG9femVyb19uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzICsgaV0gPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBibGl0X25hdFxuZnVuY3Rpb24gYmxpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMiwgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0gbmF0Mi5kYXRhW29mczIgKyBpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQuZGF0YVtvZnMgKyBpXSAhPT0gMCkgcmV0dXJuIGkgKyAxO1xuICB9XG4gIHJldHVybiAxOyAvLyAwIGNvdW50cyBhcyAxIGRpZ2l0XG59XG5cbi8vUHJvdmlkZXM6IG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdFxuZnVuY3Rpb24gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdCwgb2ZzKSB7XG4gIHZhciBhID0gbmF0LmRhdGFbb2ZzXTtcbiAgdmFyIGIgPSAwO1xuICBpZiAoYSAmIDB4ZmZmZjAwMDApIHtcbiAgICBiICs9IDE2O1xuICAgIGEgPj4+PSAxNjtcbiAgfVxuICBpZiAoYSAmIDB4ZmYwMCkge1xuICAgIGIgKz0gODtcbiAgICBhID4+Pj0gODtcbiAgfVxuICBpZiAoYSAmIDB4ZjApIHtcbiAgICBiICs9IDQ7XG4gICAgYSA+Pj49IDQ7XG4gIH1cbiAgaWYgKGEgJiAxMikge1xuICAgIGIgKz0gMjtcbiAgICBhID4+Pj0gMjtcbiAgfVxuICBpZiAoYSAmIDIpIHtcbiAgICBiICs9IDE7XG4gICAgYSA+Pj49IDE7XG4gIH1cbiAgaWYgKGEgJiAxKSB7XG4gICAgYiArPSAxO1xuICB9XG4gIHJldHVybiAzMiAtIGI7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X2ludFxuZnVuY3Rpb24gaXNfZGlnaXRfaW50KG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdID49IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9ub3JtYWxpemVkXG5mdW5jdGlvbiBpc19kaWdpdF9ub3JtYWxpemVkKF9uYXQsIF9vZnMpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdICYgMSkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpbmNyX25hdFxuZnVuY3Rpb24gaW5jcl9uYXQobmF0LCBvZnMsIGxlbiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHggfCAwO1xuICAgIGlmICh4ID09PSB4ID4+PiAwKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2FycnkgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogYWRkX25hdFxuLy9SZXF1aXJlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0geDtcbiAgICBpZiAoeCA9PT0geCA+Pj4gMCkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGNhcnJ5KTtcbn1cblxuLy9Qcm92aWRlczogY29tcGxlbWVudF9uYXRcbmZ1bmN0aW9uIGNvbXBsZW1lbnRfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcyArIGldID0gKC0xID4+PiAwKSAtIChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gY2FycnlfaW4gPT09IDEgPyAwIDogMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcyArIGldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9ycm93ID09PSAxID8gMCA6IDE7XG59XG5cbi8vIG9jYW1sIGZsaXBzIGNhcnJ5X2luXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IHN1Yl9uYXRcbi8vUmVxdWlyZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBzdWJfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSBjYXJyeV9pbiA9PT0gMSA/IDAgOiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvcnJvdyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGJvcnJvdyA9PT0gMSA/IDAgOiAxKTtcbn1cblxuLy8gbmF0MSArPSBuYXQyICogbmF0M1tvZnMzXVxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBtdWx0X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogYWRkX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBhID0gbmF0My5kYXRhW29mczNdID4+PiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9XG4gICAgICAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgK1xuICAgICAgKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApICogKGEgJiAweDAwMDBmZmZmKSArXG4gICAgICBjYXJyeTtcbiAgICB2YXIgeDIgPSAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4MiAvIDY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4MztcbiAgICBjYXJyeSArPSBNYXRoLmZsb29yKHgzIC8gNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZiAobGVuMiA8IGxlbjEgJiYgY2FycnkpIHtcbiAgICByZXR1cm4gYWRkX25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgbGVuMixcbiAgICAgIGxlbjEgLSBsZW4yLFxuICAgICAgbmF0X29mX2FycmF5KFtjYXJyeV0pLFxuICAgICAgMCxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgaSxcbiAgICAgIGxlbjEgLSBpLFxuICAgICAgbmF0MixcbiAgICAgIG9mczIsXG4gICAgICBsZW4yLFxuICAgICAgbmF0MyxcbiAgICAgIG9mczMgKyBpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBuYXQxID0gMiAqIG5hdDEgKyBuYXQyICogbmF0MlxuLy8gbGVuMSA+PSAyICogbGVuMlxuLy9Qcm92aWRlczogc3F1YXJlX25hdFxuLy9SZXF1aXJlczogbXVsdF9uYXQsIGFkZF9uYXRcbmZ1bmN0aW9uIHNxdWFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgY2FycnkgPSAwO1xuICBjYXJyeSArPSBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDEsIG9mczEsIGxlbjEsIDApO1xuICBjYXJyeSArPSBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQyLCBvZnMyLCBsZW4yKTtcbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZiAobmJpdHMgPT09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IChhIDw8IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPj4+ICgzMiAtIG5iaXRzKTtcbiAgfVxuICBuYXQyLmRhdGFbb2ZzMl0gPSB3cmFwO1xuICByZXR1cm4gMDtcbn1cblxuLy8gQXNzdW1pbmcgYyA+IGEsIHJldHVybnMgW3F1b3RpZW50LCByZW1haW5kZXJdIG9mIChhPDwzMiArIGIpL2Ncbi8vUHJvdmlkZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9oZWxwZXIoYSwgYiwgYykge1xuICB2YXIgeCA9IGEgKiA2NTUzNiArIChiID4+PiAxNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4IC8gYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwZmZmZik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3IodyAvIGMpLCB3ICUgY107XG59XG5cbi8vIG5hdDFbb2ZzMStsZW5dIDwgbmF0MltvZnMyXVxuLy9Qcm92aWRlczogZGl2X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2RpZ2l0X25hdChuYXRxLCBvZnNxLCBuYXRyLCBvZnNyLCBuYXQxLCBvZnMxLCBsZW4sIG5hdDIsIG9mczIpIHtcbiAgdmFyIHJlbSA9IG5hdDEuZGF0YVtvZnMxICsgbGVuIC0gMV0gPj4+IDA7XG4gIC8vIG5hdHFbb2ZzcStsZW4tMV0gaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIChkdWUgdG8gdGhlIE1TRCByZXF1aXJlbWVudCksXG4gIC8vIGFuZCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uXG4gIGZvciAodmFyIGkgPSBsZW4gLSAyOyBpID49IDA7IGktLSkge1xuICAgIHZhciB4ID0gZGl2X2hlbHBlcihyZW0sIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsIG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCk7XG4gICAgbmF0cS5kYXRhW29mc3EgKyBpXSA9IHhbMF07XG4gICAgcmVtID0geFsxXTtcbiAgfVxuICBuYXRyLmRhdGFbb2Zzcl0gPSByZW07XG4gIHJldHVybiAwO1xufVxuXG4vLyBuYXQxW25hdDI6XSA6PSBuYXQxIC8gbmF0MlxuLy8gbmF0MVs6bmF0Ml0gOj0gbmF0MSAlIG5hdDJcbi8vIGxlbjEgPiBsZW4yLCBuYXQyW29mczIrbGVuMi0xXSA+IG5hdDFbb2ZzMStsZW4xLTFdXG4vL1Byb3ZpZGVzOiBkaXZfbmF0XG4vL1JlcXVpcmVzOiBkaXZfZGlnaXRfbmF0LCBkaXZfaGVscGVyLCBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQsIHNoaWZ0X2xlZnRfbmF0LCBzaGlmdF9yaWdodF9uYXQsIGNyZWF0ZV9uYXQsIHNldF90b196ZXJvX25hdCwgbXVsdF9kaWdpdF9uYXQsIHN1Yl9uYXQsIGNvbXBhcmVfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIGRpdl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICBpZiAobGVuMiA9PT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSArIDEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMiArIGxlbjIgLSAxKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIgKyBsZW4yIC0gMV0gPj4+IDApICsgMTtcbiAgdmFyIGEgPSBjcmVhdGVfbmF0KGxlbjIgKyAxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID1cbiAgICAgIGQgPT09IDQyOTQ5NjcyOTZcbiAgICAgICAgPyBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwXG4gICAgICAgIDogZGl2X2hlbHBlcihcbiAgICAgICAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsXG4gICAgICAgICAgICBuYXQxLmRhdGFbb2ZzMSArIGkgLSAxXSA+Pj4gMCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgKVswXTtcbiAgICBzZXRfdG9femVyb19uYXQoYSwgMCwgbGVuMiArIDEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIgKyAxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiArIDEsIGEsIDAsIGxlbjIgKyAxLCAxKTtcblxuICAgIHdoaWxlIChcbiAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gIT09IDAgfHxcbiAgICAgIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMFxuICAgICkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMSArIGkgLSBsZW4yLCBsZW4yICsgMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IHF1bztcbiAgfVxuXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHNoaWZ0IHJlbWFpbmRlclxuICBzaGlmdF9yaWdodF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyByZXN0b3JlXG4gIHJldHVybiAwO1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmIChuYml0cyA9PT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGEgPSBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYgKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmIChuYXQxLmRhdGFbb2ZzMV0gPCBuYXQyLmRhdGFbb2ZzMl0pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfbmF0XG4vL1JlcXVpcmVzOiBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgYSA9IG51bV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIGxlbjEpO1xuICB2YXIgYiA9IG51bV9kaWdpdHNfbmF0KG5hdDIsIG9mczIsIGxlbjIpO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwID4gbmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgcmV0dXJuIDE7XG4gICAgaWYgKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAgPCBuYXQyLmRhdGFbb2ZzMiArIGldID4+PiAwKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxhbmRfZGlnaXRfbmF0XG5mdW5jdGlvbiBsYW5kX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSAmPSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBsb3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBsb3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIHw9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGx4b3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBseG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSBePSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeikge1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3opIHtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX3dpbjMyXG52YXIganNvb19pc193aW4zMiA9XG4gIGdsb2JhbFRoaXMuRGVubz8uYnVpbGQ/Lm9zID09PSBcIndpbmRvd3NcIiB8fFxuICBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHNcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbmNsYXNzIE1sTm9kZURldmljZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICB0aGlzLmZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgfVxuXG4gIG5tKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yb290ICsgbmFtZTtcbiAgfVxuXG4gIGV4aXN0cyhuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGlzRmlsZShuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpID8gMSA6IDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLCB7IG1vZGU6IG1vZGUgfSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGlzX2RpcihuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB1bmxpbmsobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgdXRpbWVzKG5hbWUsIGF0aW1lLCBtdGltZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXRpbWUgPT09IDAgJiYgbXRpbWUgPT09IDApIHtcbiAgICAgICAgYXRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIG10aW1lID0gYXRpbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZzLnV0aW1lc1N5bmModGhpcy5ubShuYW1lKSwgYXRpbWUsIG10aW1lKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICB0cnVuY2F0ZShuYW1lLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy50cnVuY2F0ZVN5bmModGhpcy5ubShuYW1lKSwgbGVuIHwgMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgY29uc3RzID0gdGhpcy5mcy5jb25zdGFudHM7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIga2V5IGluIGYpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5SX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuV19PSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXMgfD0ganNvb19pc193aW4zMiA/IGNvbnN0cy5SX09LIDogY29uc3RzLlhfT0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5GX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5hY2Nlc3NTeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBwZXJtcywgcmFpc2VfdW5peCkge1xuICAgIHZhciBjb25zdHMgPSB0aGlzLmZzLmNvbnN0YW50cztcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gZikge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInJkb25seVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRE9OTFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3cm9ubHlcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmR3clwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRFdSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXBwZW5kXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19DUkVBVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX1RSVU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhjbFwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19FWENMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fVEVYVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm5vbmJsb2NrXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm9jdHR5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PQ1RUWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRzeW5jXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0RTWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3luY1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19TWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMsIHBlcm1zKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIHJlbmFtZShvLCBuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKGpzb29faXNfd2luMzIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLm5tKG4pO1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5ubShvKTtcbiAgICAgICAgdmFyIHRhcmdldF9zdGF0cywgc291cmNlX3N0YXRzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldF9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGFyZ2V0LCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgKHNvdXJjZV9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmMoc291cmNlLCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgc291cmNlX3N0YXRzLmlzRGlyZWN0b3J5KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRhcmdldF9zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xhc2godGFyZ2V0KS5zdGFydHNXaXRoKHRoaXMuc2xhc2goc291cmNlKSkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcy5ybWRpclN5bmModGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCByZW5hbWUgJyR7c291cmNlfScgLT4gJyR7dGFyZ2V0fSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyLCB7XG4gICAgICAgICAgICAgIGVycm5vOiAtMjAsXG4gICAgICAgICAgICAgIGNvZGU6IFwiRU5PVERJUlwiLFxuICAgICAgICAgICAgICBzeXNjYWxsOiBcInJlbmFtZVwiLFxuICAgICAgICAgICAgICBwYXRoOiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgbHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNobW9kKG5hbWUsIHBlcm1zLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2htb2RTeW5jKHRoaXMubm0obmFtZSksIHBlcm1zKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgc3ltbGluayh0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRoaXMubm0ocGF0aCksXG4gICAgICAgIHRvX2RpciA9PT0gMCA/IG51bGwgOiB0b19kaXJbMV0gPyBcImRpclwiIDogXCJmaWxlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRsaW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCBcInV0ZjhcIik7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IG9jYW1sX3N0YXRzX2Zyb21fbm9kZV9zdGF0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdFxuZnVuY3Rpb24gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSkge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vIHwgMCxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAgbGFyZ2UgPyBjYW1sX2ludDY0X29mX2Zsb2F0KGpzX3N0YXRzLnNpemUpIDoganNfc3RhdHMuc2l6ZSB8IDAsXG4gICAganNfc3RhdHMuYXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMubXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMuY3RpbWVNcyAvIDEwMDAsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuY2xhc3MgTWxOb2RlRGV2aWNlIHt9XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvciwgb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzXG5jbGFzcyBNbE5vZGVGZCBleHRlbmRzIE1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKGZkLCBmbGFncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mcyA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuICAgIHRoaXMuZmQgPSBmZDtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKGZkKTtcbiAgICAgIGZsYWdzLm5vU2VlayA9XG4gICAgICAgIHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNGSUZPKCkgfHwgc3RhdHMuaXNTb2NrZXQoKTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5mbGFncy5hcHBlbmQgPyBzdGF0cy5zaXplIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmc3RhdCB3aWxsIGZhaWwgb24gc3RhbmRhcmQgc3RyZWFtcyB1bmRlciBXaW5kb3dzIHdpdGggbm9kZVxuICAgICAgLy8gMTggKGFuZCBsb3dlcikuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8zODExLlxuICAgICAgZmxhZ3Mubm9TZWVrID0gdHJ1ZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZWVrZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCwgbGVuIHwgMCk7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPiBsZW4pIHRoaXMub2Zmc2V0ID0gbGVuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBpc2F0dHkoKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoXCJub2RlOnR0eVwiKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eSh0aGlzLmZkKSA/IDEgOiAwO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5mbGFncy5ub1NlZWsgfHwgIXRoaXMuc2Vla2VkKSB7XG4gICAgICAgIHZhciB3cml0dGVuID0gdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHdyaXR0ZW4gPSB0aGlzLmZzLndyaXRlU3luYyhcbiAgICAgICAgICB0aGlzLmZkLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBidWZfb2Zmc2V0LFxuICAgICAgICAgIGxlbixcbiAgICAgICAgICB0aGlzLm9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbiAgfVxuXG4gIHJlYWQoYSwgYnVmX29mZnNldCwgbGVuLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZsYWdzLm5vU2VlayB8fCAhdGhpcy5zZWVrZWQpIHtcbiAgICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCB0aGlzLm9mZnNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9mZnNldCArPSByZWFkO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlZWsob2Zmc2V0LCB3aGVuY2UsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5mbGFncy5ub1NlZWspIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRVNQSVBFXCIsIFwibHNlZWtcIiwgXCJpbGxlZ2FsIHNlZWtcIik7XG4gICAgfVxuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFSU5WQUxcIixcbiAgICAgICAgXCJsc2Vla1wiLFxuICAgICAgICBcImludmFsaWQgYXJndW1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgc3RhdChsYXJnZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjaG1vZChwZXJtcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZjaG1vZFN5bmModGhpcy5mZCwgcGVybXMpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSk7XG4gICAgfVxuICB9XG5cbiAgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5mc3luY1N5bmModGhpcy5mZCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZShyYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrX3N0cmVhbV9zZW1hbnRpY3MoY21kKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIGNtZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGpzX3N0YXRzLmlzRmlsZSgpIHx8XG4gICAgICAgIGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNGSUZPKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNTb2NrZXQoKVxuICAgICAgKVxuICAgIClcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIGNtZCxcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5jbGFzcyBNbE5vZGVGZCB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpIHtcbiAgaWYgKGZsYWdzLmFsdG5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MuYWx0bmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoX2ZkLCBfZmxhZ3MpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncywgbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4LCBjbWQpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoXG4gICAgICBlcnIuY29kZSxcbiAgICAgIGNtZCB8fCBlcnIuc3lzY2FsbCxcbiAgICAgIGVyci5wYXRoLFxuICAgICAgZXJyLmVycm5vLFxuICAgICk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxudmFyIGNhbWxfdW5wYWNrRmxvYXQxNiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgRVhQX01BU0sxNiA9IDMxOyAvLyAyICoqIDUgLSAxXG4gIHZhciBTSUdOSUZJQ0FORF9NQVNLMTYgPSAxMDIzOyAvLyAyICoqIDEwIC0gMVxuICB2YXIgTUlOX1NVQk5PUk1BTDE2ID0gcG93KDIsIC0yNCk7IC8vIDIgKiogLTEwICogMiAqKiAtMTRcbiAgdmFyIFNJR05JRklDQU5EX0RFTk9NMTYgPSAwLjAwMDk3NjU2MjU7IC8vIDIgKiogLTEwXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzaWduID0gYnl0ZXMgPj4+IDE1O1xuICAgIHZhciBleHBvbmVudCA9IChieXRlcyA+Pj4gMTApICYgRVhQX01BU0sxNjtcbiAgICB2YXIgc2lnbmlmaWNhbmQgPSBieXRlcyAmIFNJR05JRklDQU5EX01BU0sxNjtcbiAgICBpZiAoZXhwb25lbnQgPT09IEVYUF9NQVNLMTYpXG4gICAgICByZXR1cm4gc2lnbmlmaWNhbmQgPT09IDBcbiAgICAgICAgPyBzaWduID09PSAwXG4gICAgICAgICAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgICA6IE51bWJlci5OYU47XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKVxuICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICogKHNpZ24gPT09IDAgPyBNSU5fU1VCTk9STUFMMTYgOiAtTUlOX1NVQk5PUk1BTDE2KTtcbiAgICB2YXIgciA9XG4gICAgICBwb3coMiwgZXhwb25lbnQgLSAxNSkgKlxuICAgICAgKHNpZ24gPT09IDBcbiAgICAgICAgPyAxICsgc2lnbmlmaWNhbmQgKiBTSUdOSUZJQ0FORF9ERU5PTTE2XG4gICAgICAgIDogLTEgLSBzaWduaWZpY2FuZCAqIFNJR05JRklDQU5EX0RFTk9NMTYpO1xuICAgIHJldHVybiByO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9wYWNrRmxvYXQxNlxudmFyIGNhbWxfcGFja0Zsb2F0MTYgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBJTlZFUlNFX09GX0VQU0lMT04gPSAxIC8gTnVtYmVyLkVQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUaWVzVG9FdmVuKG51bSkge1xuICAgIHJldHVybiBudW0gKyBJTlZFUlNFX09GX0VQU0lMT04gLSBJTlZFUlNFX09GX0VQU0lMT047XG4gIH1cblxuICBjb25zdCBGTE9BVDE2X01JTl9WQUxVRSA9IDYuMTAzNTE1NjI1ZS01O1xuICBjb25zdCBGTE9BVDE2X01BWF9WQUxVRSA9IDY1NTA0O1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT04gPSAwLjAwMDk3NjU2MjU7XG5cbiAgY29uc3QgRkxPQVQxNl9FUFNJTE9OX01VTFRJUExJRURfQllfRkxPQVQxNl9NSU5fVkFMVUUgPVxuICAgIEZMT0FUMTZfRVBTSUxPTiAqIEZMT0FUMTZfTUlOX1ZBTFVFO1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT05fREVWSURFRF9CWV9FUFNJTE9OID1cbiAgICBGTE9BVDE2X0VQU0lMT04gKiBJTlZFUlNFX09GX0VQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUb0Zsb2F0MTYobnVtKSB7XG4gICAgY29uc3QgbnVtYmVyID0gK251bTtcblxuICAgIC8vIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLTBcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpIHx8IG51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBmaW5pdGUgZXhjZXB0IDAsIC0wXG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA+IDAgPyAxIDogLTE7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBNYXRoLmFicyhudW1iZXIpO1xuXG4gICAgLy8gc21hbGwgbnVtYmVyXG4gICAgaWYgKGFic29sdXRlIDwgRkxPQVQxNl9NSU5fVkFMVUUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNpZ24gKlxuICAgICAgICByb3VuZFRpZXNUb0V2ZW4oXG4gICAgICAgICAgYWJzb2x1dGUgLyBGTE9BVDE2X0VQU0lMT05fTVVMVElQTElFRF9CWV9GTE9BVDE2X01JTl9WQUxVRSxcbiAgICAgICAgKSAqXG4gICAgICAgIEZMT0FUMTZfRVBTSUxPTl9NVUxUSVBMSUVEX0JZX0ZMT0FUMTZfTUlOX1ZBTFVFXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXAgPSAoMSArIEZMT0FUMTZfRVBTSUxPTl9ERVZJREVEX0JZX0VQU0lMT04pICogYWJzb2x1dGU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGVtcCAtICh0ZW1wIC0gYWJzb2x1dGUpO1xuXG4gICAgLy8gbGFyZ2UgbnVtYmVyXG4gICAgaWYgKHJlc3VsdCA+IEZMT0FUMTZfTUFYX1ZBTFVFIHx8IE51bWJlci5pc05hTihyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGJhc2UgYWxnb3JpdGhtOiBodHRwOi8vZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcblxuICBjb25zdCBiYXNlVGFibGUgPSBuZXcgVWludDE2QXJyYXkoNTEyKTtcbiAgY29uc3Qgc2hpZnRUYWJsZSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGNvbnN0IGUgPSBpIC0gMTI3O1xuXG4gICAgLy8gdmVyeSBzbWFsbCBudW1iZXIgKDAsIC0wKVxuICAgIGlmIChlIDwgLTI0KSB7XG4gICAgICBiYXNlVGFibGVbaV0gPSAweDAwMDA7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAyNDtcbiAgICAgIHNoaWZ0VGFibGVbaSB8IDB4MTAwXSA9IDI0O1xuXG4gICAgICAvLyBzbWFsbCBudW1iZXIgKGRlbm9ybSlcbiAgICB9IGVsc2UgaWYgKGUgPCAtMTQpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4MDQwMCA+PiAoLWUgLSAxNCk7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9ICgweDA0MDAgPj4gKC1lIC0gMTQpKSB8IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAtZSAtIDE7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAtZSAtIDE7XG5cbiAgICAgIC8vIG5vcm1hbCBudW1iZXJcbiAgICB9IGVsc2UgaWYgKGUgPD0gMTUpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IChlICsgMTUpIDw8IDEwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAoKGUgKyAxNSkgPDwgMTApIHwgMHg4MDAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDEzO1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMTM7XG5cbiAgICAgIC8vIGxhcmdlIG51bWJlciAoSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2UgaWYgKGUgPCAxMjgpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4N2MwMDtcbiAgICAgIGJhc2VUYWJsZVtpIHwgMHgxMDBdID0gMHhmYzAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDI0O1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMjQ7XG5cbiAgICAgIC8vIHN0YXkgKE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVRhYmxlW2ldID0gMHg3YzAwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAweGZjMDA7XG4gICAgICBzaGlmdFRhYmxlW2ldID0gMTM7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAxMztcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7XG4gIGNvbnN0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgY29uc3QgdWludDMyVmlldyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG4gICAgZmxvYXRWaWV3WzBdID0gcm91bmRUb0Zsb2F0MTYobnVtKTtcbiAgICBjb25zdCBmID0gdWludDMyVmlld1swXTtcbiAgICBjb25zdCBlID0gKGYgPj4gMjMpICYgMHgxZmY7XG4gICAgcmV0dXJuIGJhc2VUYWJsZVtlXSArICgoZiAmIDB4MDA3ZmZmZmYpID4+IHNoaWZ0VGFibGVbZV0pO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKSB7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2aWV3ID0gRmxvYXQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgdmlldyA9IEZsb2F0NjRBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZpZXcgPSBJbnQ4QXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2aWV3ID0gVWludDhBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZpZXcgPSBJbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmlldyA9IFVpbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2aWV3ID0gSW50MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZpZXcgPSBJbnQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmlldyA9IEZsb2F0MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2aWV3ID0gRmxvYXQ2NEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZpZXcgPSBVaW50OEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHZpZXcgPSBVaW50MTZBcnJheTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIjtcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG4vL1JlcXVpcmVzOiBjYW1sX3BhY2tGbG9hdDE2LCBjYW1sX3VucGFja0Zsb2F0MTZcbmNsYXNzIE1sX0JpZ2FycmF5IHtcbiAgY29uc3RydWN0b3Ioa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5kYXRhID0gYnVmZmVyO1xuICAgIHRoaXMuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuICB9XG5cbiAgb2Zmc2V0KGFyZykge1xuICAgIHZhciBvZnMgPSAwO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYXJnLmxlbmd0aClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgb2ZzID0gb2ZzICogdGhpcy5kaW1zW2ldICsgYXJnW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSkge1xuICAgICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBvZnMgPSBvZnMgKiB0aGlzLmRpbXNbaV0gKyAoYXJnW2ldIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZnM7XG4gIH1cblxuICBnZXQob2ZzKSB7XG4gICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgICAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLCBoKTtcbiAgICAgIGNhc2UgMTA6XG4gICAgICBjYXNlIDExOlxuICAgICAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgICAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICAgICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgcmV0dXJuIGNhbWxfdW5wYWNrRmxvYXQxNih0aGlzLmRhdGFbb2ZzXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW29mc107XG4gICAgfVxuICB9XG5cbiAgc2V0KG9mcywgdikge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIC8vIEludDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgICAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGFbb2ZzXSA9IGNhbWxfcGFja0Zsb2F0MTYodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBJbnQ2NFxuICAgICAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gYSA6IGI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHZhciBpbSA9IHZbMV07XG4gICAgICAgIHZhciByZSA9IHZbMl07XG4gICAgICAgIGlmIChpbSA9PT0gcmUpIHtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gaW0gOiByZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGEuZmlsbChjYW1sX3BhY2tGbG9hdDE2KHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZShiLCB0b3RhbCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9PSBiLmtpbmQpIHtcbiAgICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICAgIHZhciBrMiA9IGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICAgIHJldHVybiBrMiAtIGsxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYi5kaW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICh0aGlzLmRpbXNbaV0gIT09IGIuZGltc1tpXSkgcmV0dXJuIHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSA/IC0xIDogMTtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICB2YXIgeCwgeTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICAgICAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoeCAhPT0geSkge1xuICAgICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE51bWJlci5OYU47XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih5KSkgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA8IGIuZGF0YVtpICsgMV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA+IGIuZGF0YVtpICsgMV0pIHJldHVybiAxO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPj4+IDAgPCBiLmRhdGFbaV0gPj4+IDApIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4+PiAwID4gYi5kYXRhW2ldID4+PiAwKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGFhID0gY2FtbF91bnBhY2tGbG9hdDE2KHRoaXMuZGF0YVtpXSk7XG4gICAgICAgICAgdmFyIGJiID0gY2FtbF91bnBhY2tGbG9hdDE2KGIuZGF0YVtpXSk7XG4gICAgICAgICAgaWYgKGFhIDwgYmIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYWEgPiBiYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEyOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmNsYXNzIE1sX0JpZ2FycmF5X2NfMV8xIGV4dGVuZHMgTWxfQmlnYXJyYXkge1xuICBvZmZzZXQoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA9PT0gMSkgYXJnID0gYXJnWzBdO1xuICAgICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gICAgfVxuICAgIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgZ2V0KG9mcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbiAgfVxuXG4gIHNldChvZnMsIHYpIHtcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLCBiLCB0b3RhbCkge1xuICByZXR1cm4gYS5jb21wYXJlKGIsIHRvdGFsKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSkge1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmIChjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmIChcbiAgICBsYXlvdXQgPT09IDAgJiYgLy8gY19sYXlvdXRcbiAgICBkaW1zLmxlbmd0aCA9PT0gMSAmJiAvLyBBcnJheTFcbiAgICBzaXplX3Blcl9lbGVtZW50ID09PSAxICYmXG4gICAga2luZCAhPT0gMTMgLy8gZmxvYXQxNlxuICApXG4gICAgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmIChiYS5sYXlvdXQgPT09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiBiMSB8IChiMiA8PCA4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMgKyAwKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzICsgMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMgKyAzKTtcbiAgcmV0dXJuIChiMSA8PCAwKSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQgPDwgMjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyArIDApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMgKyAyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyArIDMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzICsgNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMgKyA1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcyArIDYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzICsgNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCwgYjcsIGI2LCBiNSwgYjQsIGIzLCBiMiwgYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMgKyAwLCB2ICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZiAob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzICsgMCwgdiAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzICsgMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAzLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcyArIGksIHZbNyAtIGldKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9PSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gMTsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBiYS5kaW1zW2NoYW5nZWRfZGltXSkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShcbiAgICBvZnMgKiBzaXplX3Blcl9lbGVtZW50LFxuICAgIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQsXG4gICk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpO1xuICBpZiAoYmEuY2FtbF9jdXN0b20gPT09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYmEuZGltc1tpXSA8IDB4ZmZmZikgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgY2FzZSA1OiAvLyBVaW50MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6IC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OiAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOiAvLyBGbG9hdDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlKDgsIGJbal0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKSB7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmO1xuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW107XG4gIGlmIChuYW1lID09PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmIChzaXplX2RpbSA9PT0gMHhmZmZmKSB7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmIChzaXplX2RpbV9oaSAhPT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OiAvLyBJbnQzMkFycmF5IChpbnQpXG4gICAgY2FzZSA5OiAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICBpZiAoc2l4dHkpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiLFxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICAgIGJhLnNldChpLCBpbnQ2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6IC8vIEZsb2F0MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDA6IC8vIEZsb2F0MzJBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBbMjU0LCByZSwgaW1dKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBiYS5zZXQoaSwgWzI1NCwgcmUsIGltXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfYmFfY3JlYXRlX3Vuc2FmZV0gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIF9qc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKSB7XG4gIGlmIChkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09PSAyKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF91bnBhY2tGbG9hdDE2LCBjYW1sX2hhc2hfbWl4X2Zsb2F0MTYsIGNhbWxfaGFzaF9taXhfZmxvYXQzMlxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKSB7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgICAgdmFyIHcgPSAwLFxuICAgICAgICBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9lbHRzOyBpICs9IDQpIHtcbiAgICAgICAgdyA9XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDBdICYgMHhmZikgfFxuICAgICAgICAgICgoYmEuZGF0YVtpICsgMV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChiYS5kYXRhW2kgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDNdIDw8IDI0KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgICAgfVxuICAgICAgdyA9IDA7XG4gICAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICAgIHcgPSBiYS5kYXRhW2kgKyAyXSA8PCAxNjtcbiAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDFdIDw8IDg7XG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDogLy8gSW50MTZBcnJheVxuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGlmIChudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgICB2YXIgdyA9IDAsXG4gICAgICAgIGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gbnVtX2VsdHM7IGkgKz0gMikge1xuICAgICAgICB3ID0gKGJhLmRhdGFbaSArIDBdICYgMHhmZmZmKSB8IChiYS5kYXRhW2kgKyAxXSA8PCAxNik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPT0gMCkgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgICBudW1fZWx0cyAqPSAyO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMDogLy8gRmxvYXQzMkFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKylcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQzMihoLCBiYS5kYXRhW2ldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMTogLy8gRmxvYXQ2NEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgaWYgKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdDE2KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQxNlxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQxNihoYXNoLCBkKSB7XG4gIC8qIE5vcm1hbGl6ZSBOYU5zICovXG4gIGlmICgoZCAmIDB4N2MwMCkgPT09IDB4N2MwMCAmJiAoZCAmIDB4MDNmZikgIT09IDApIHtcbiAgICBkID0gMHg3YzAxO1xuICB9IGVsc2UgaWYgKGQgPT09IDB4ODAwMCkge1xuICAgIC8qIE5vcm1hbGl6ZSAtMCBpbnRvICswICovXG4gICAgZCA9IDA7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQzMihoYXNoLCB2KSB7XG4gIHZhciBpID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KHYpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGkgJiAweDdmODAwMDAwKSA9PT0gMHg3ZjgwMDAwMCAmJiAoaSAmIDB4N2ZmZmZmKSAhPT0gMCkge1xuICAgIGkgPSAweDdmODAwMDAxO1xuICB9IGVsc2UgaWYgKGkgPT09ICgweDgwMDAwMDAwIHwgMCkpIHtcbiAgICAvKiBOb3JtYWxpemUgLTAgaW50byArMCAqL1xuICAgIC8vIFRoaXMgY29kZSBwYXRoIGlzIG5vdCB1c2VkIGJ5IGNhbWxfaGFzaCBiZWNhdXNlIDAgYW5kIC0wIGxvb2tcbiAgICAvLyBsaWtlIGludGVnZXJzXG4gICAgaSA9IDA7XG4gIH1cbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGkpO1xuICByZXR1cm4gaGFzaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKSB7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpIHtcbiAgdmFyIGtpbmQ7XG4gIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKSB7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICAgID8gbmV3IEludDMyQXJyYXkodGEuYnVmZmVyLCB0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpXG4gICAgICA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShcbiAgICBiYS5idWZmZXIsXG4gICAgYmEuYnl0ZU9mZnNldCxcbiAgICBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSwgcG9zMSArIGkpO1xuICAgIHZhciBiID0gY2FtbF9iYV9nZXRfMShzMiwgcG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGJhMS5kYXRhLnN1YmFycmF5KG9mczEsIG9mczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2UsIHBvczIpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pIHtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYgKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyMSkuc3ViYXJyYXkocG9zMSwgcG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSwgb2ZzMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhKHN0cjEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChwb3MxICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zdWJhcnJheShwb3MxLCBwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLCBvZnMyKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChwb3MyICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoYnl0ZXMyKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLCBvZnMxICsgbGVuKTtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoc2xpY2UpLCAwLCBieXRlczIsIHBvczIsIGxlbik7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogYmxha2UyYlxuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBibGFrZTJiID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQmxha2UyQiBpbiBwdXJlIEphdmFzY3JpcHRcbiAgLy8gQWRhcHRlZCBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gUkZDNzY5M1xuICAvLyBQb3J0ZWQgdG8gSmF2YXNjcmlwdCBieSBEQyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kY3Bvc2NoXG5cbiAgLy8gNjQtYml0IHVuc2lnbmVkIGFkZGl0aW9uXG4gIC8vIFNldHMgdlthLGErMV0gKz0gdltiLGIrMV1cbiAgLy8gdiBzaG91bGQgYmUgYSBVaW50MzJBcnJheVxuICBmdW5jdGlvbiBBREQ2NEFBKHYsIGEsIGIpIHtcbiAgICBjb25zdCBvMCA9IHZbYV0gKyB2W2JdO1xuICAgIGxldCBvMSA9IHZbYSArIDFdICsgdltiICsgMV07XG4gICAgaWYgKG8wID49IDB4MTAwMDAwMDAwKSB7XG4gICAgICBvMSsrO1xuICAgIH1cbiAgICB2W2FdID0gbzA7XG4gICAgdlthICsgMV0gPSBvMTtcbiAgfVxuXG4gIC8vIDY0LWJpdCB1bnNpZ25lZCBhZGRpdGlvblxuICAvLyBTZXRzIHZbYSxhKzFdICs9IGJcbiAgLy8gYjAgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGIsIGIxIHJlcHJlc2VudHMgdGhlIGhpZ2ggMzIgYml0c1xuICBmdW5jdGlvbiBBREQ2NEFDKHYsIGEsIGIwLCBiMSkge1xuICAgIGxldCBvMCA9IHZbYV0gKyBiMDtcbiAgICBpZiAoYjAgPCAwKSB7XG4gICAgICBvMCArPSAweDEwMDAwMDAwMDtcbiAgICB9XG4gICAgbGV0IG8xID0gdlthICsgMV0gKyBiMTtcbiAgICBpZiAobzAgPj0gMHgxMDAwMDAwMDApIHtcbiAgICAgIG8xKys7XG4gICAgfVxuICAgIHZbYV0gPSBvMDtcbiAgICB2W2EgKyAxXSA9IG8xO1xuICB9XG5cbiAgLy8gTGl0dGxlLWVuZGlhbiBieXRlIGFjY2Vzc1xuICBmdW5jdGlvbiBCMkJfR0VUMzIoYXJyLCBpKSB7XG4gICAgcmV0dXJuIGFycltpXSBeIChhcnJbaSArIDFdIDw8IDgpIF4gKGFycltpICsgMl0gPDwgMTYpIF4gKGFycltpICsgM10gPDwgMjQpO1xuICB9XG5cbiAgLy8gRyBNaXhpbmcgZnVuY3Rpb25cbiAgLy8gVGhlIFJPVFJzIGFyZSBpbmxpbmVkIGZvciBzcGVlZFxuICBmdW5jdGlvbiBCMkJfRyhhLCBiLCBjLCBkLCBpeCwgaXkpIHtcbiAgICBjb25zdCB4MCA9IG1baXhdO1xuICAgIGNvbnN0IHgxID0gbVtpeCArIDFdO1xuICAgIGNvbnN0IHkwID0gbVtpeV07XG4gICAgY29uc3QgeTEgPSBtW2l5ICsgMV07XG5cbiAgICBBREQ2NEFBKHYsIGEsIGIpOyAvLyB2W2EsYSsxXSArPSB2W2IsYisxXSAuLi4gaW4gSlMgd2UgbXVzdCBzdG9yZSBhIHVpbnQ2NCBhcyB0d28gdWludDMyc1xuICAgIEFERDY0QUModiwgYSwgeDAsIHgxKTsgLy8gdlthLCBhKzFdICs9IHggLi4uIHgwIGlzIHRoZSBsb3cgMzIgYml0cyBvZiB4LCB4MSBpcyB0aGUgaGlnaCAzMiBiaXRzXG5cbiAgICAvLyB2W2QsZCsxXSA9ICh2W2QsZCsxXSB4b3IgdlthLGErMV0pIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IDMyIGJpdHNcbiAgICBsZXQgeG9yMCA9IHZbZF0gXiB2W2FdO1xuICAgIGxldCB4b3IxID0gdltkICsgMV0gXiB2W2EgKyAxXTtcbiAgICB2W2RdID0geG9yMTtcbiAgICB2W2QgKyAxXSA9IHhvcjA7XG5cbiAgICBBREQ2NEFBKHYsIGMsIGQpO1xuXG4gICAgLy8gdltiLGIrMV0gPSAodltiLGIrMV0geG9yIHZbYyxjKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDI0IGJpdHNcbiAgICB4b3IwID0gdltiXSBeIHZbY107XG4gICAgeG9yMSA9IHZbYiArIDFdIF4gdltjICsgMV07XG4gICAgdltiXSA9ICh4b3IwID4+PiAyNCkgXiAoeG9yMSA8PCA4KTtcbiAgICB2W2IgKyAxXSA9ICh4b3IxID4+PiAyNCkgXiAoeG9yMCA8PCA4KTtcblxuICAgIEFERDY0QUEodiwgYSwgYik7XG4gICAgQURENjRBQyh2LCBhLCB5MCwgeTEpO1xuXG4gICAgLy8gdltkLGQrMV0gPSAodltkLGQrMV0geG9yIHZbYSxhKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDE2IGJpdHNcbiAgICB4b3IwID0gdltkXSBeIHZbYV07XG4gICAgeG9yMSA9IHZbZCArIDFdIF4gdlthICsgMV07XG4gICAgdltkXSA9ICh4b3IwID4+PiAxNikgXiAoeG9yMSA8PCAxNik7XG4gICAgdltkICsgMV0gPSAoeG9yMSA+Pj4gMTYpIF4gKHhvcjAgPDwgMTYpO1xuXG4gICAgQURENjRBQSh2LCBjLCBkKTtcblxuICAgIC8vIHZbYixiKzFdID0gKHZbYixiKzFdIHhvciB2W2MsYysxXSkgcm90YXRlZCByaWdodCBieSA2MyBiaXRzXG4gICAgeG9yMCA9IHZbYl0gXiB2W2NdO1xuICAgIHhvcjEgPSB2W2IgKyAxXSBeIHZbYyArIDFdO1xuICAgIHZbYl0gPSAoeG9yMSA+Pj4gMzEpIF4gKHhvcjAgPDwgMSk7XG4gICAgdltiICsgMV0gPSAoeG9yMCA+Pj4gMzEpIF4gKHhvcjEgPDwgMSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3JcbiAgY29uc3QgQkxBS0UyQl9JVjMyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLFxuICAgIDB4NWYxZDM2ZjEsIDB4YTU0ZmY1M2EsIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsXG4gICAgMHhmYjQxYmQ2YiwgMHgxZjgzZDlhYiwgMHgxMzdlMjE3OSwgMHg1YmUwY2QxOSxcbiAgXSk7XG5cbiAgY29uc3QgU0lHTUE4ID0gW1xuICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE0LCAxMCwgNCwgOCwgOSwgMTUsXG4gICAgMTMsIDYsIDEsIDEyLCAwLCAyLCAxMSwgNywgNSwgMywgMTEsIDgsIDEyLCAwLCA1LCAyLCAxNSwgMTMsIDEwLCAxNCwgMywgNixcbiAgICA3LCAxLCA5LCA0LCA3LCA5LCAzLCAxLCAxMywgMTIsIDExLCAxNCwgMiwgNiwgNSwgMTAsIDQsIDAsIDE1LCA4LCA5LCAwLCA1LFxuICAgIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMsIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsXG4gICAgMTMsIDcsIDUsIDE1LCAxNCwgMSwgOSwgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LFxuICAgIDExLCAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLCA2LCAxNSwgMTQsIDksIDExLFxuICAgIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsIDEwLCAyLCA4LCA0LCA3LCA2LCAxLCA1LCAxNSwgMTEsIDksIDE0LFxuICAgIDMsIDEyLCAxMywgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDEwLFxuICAgIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICBdO1xuXG4gIC8vIFRoZXNlIGFyZSBvZmZzZXRzIGludG8gYSB1aW50NjQgYnVmZmVyLlxuICAvLyBNdWx0aXBseSB0aGVtIGFsbCBieSAyIHRvIG1ha2UgdGhlbSBvZmZzZXRzIGludG8gYSB1aW50MzIgYnVmZmVyLFxuICAvLyBiZWNhdXNlIHRoaXMgaXMgSmF2YXNjcmlwdCBhbmQgd2UgZG9uJ3QgaGF2ZSB1aW50NjRzXG4gIGNvbnN0IFNJR01BODIgPSBuZXcgVWludDhBcnJheShcbiAgICBTSUdNQTgubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDI7XG4gICAgfSksXG4gICk7XG5cbiAgLy8gQ29tcHJlc3Npb24gZnVuY3Rpb24uICdsYXN0JyBmbGFnIGluZGljYXRlcyBsYXN0IGJsb2NrLlxuICAvLyBOb3RlIHdlJ3JlIHJlcHJlc2VudGluZyAxNiB1aW50NjRzIGFzIDMyIHVpbnQzMnNcbiAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheSgzMik7XG4gIGNvbnN0IG0gPSBuZXcgVWludDMyQXJyYXkoMzIpO1xuICBmdW5jdGlvbiBibGFrZTJiQ29tcHJlc3MoY3R4LCBsYXN0KSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gaW5pdCB3b3JrIHZhcmlhYmxlc1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB2W2ldID0gY3R4LmhbaV07XG4gICAgICB2W2kgKyAxNl0gPSBCTEFLRTJCX0lWMzJbaV07XG4gICAgfVxuXG4gICAgLy8gbG93IDY0IGJpdHMgb2Ygb2Zmc2V0XG4gICAgdlsyNF0gPSB2WzI0XSBeIGN0eC50O1xuICAgIHZbMjVdID0gdlsyNV0gXiAoY3R4LnQgLyAweDEwMDAwMDAwMCk7XG4gICAgLy8gaGlnaCA2NCBiaXRzIG5vdCBzdXBwb3J0ZWQsIG9mZnNldCBtYXkgbm90IGJlIGhpZ2hlciB0aGFuIDIqKjUzLTFcblxuICAgIC8vIGxhc3QgYmxvY2sgZmxhZyBzZXQgP1xuICAgIGlmIChsYXN0KSB7XG4gICAgICB2WzI4XSA9IH52WzI4XTtcbiAgICAgIHZbMjldID0gfnZbMjldO1xuICAgIH1cblxuICAgIC8vIGdldCBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIG1baV0gPSBCMkJfR0VUMzIoY3R4LmIsIDQgKiBpKTtcbiAgICB9XG5cbiAgICAvLyB0d2VsdmUgcm91bmRzIG9mIG1peGluZ1xuICAgIC8vIHVuY29tbWVudCB0aGUgRGVidWdQcmludCBjYWxscyB0byBsb2cgdGhlIGNvbXB1dGF0aW9uXG4gICAgLy8gYW5kIG1hdGNoIHRoZSBSRkMgc2FtcGxlIGRvY3VtZW50YXRpb25cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgQjJCX0coMCwgOCwgMTYsIDI0LCBTSUdNQTgyW2kgKiAxNiArIDBdLCBTSUdNQTgyW2kgKiAxNiArIDFdKTtcbiAgICAgIEIyQl9HKDIsIDEwLCAxOCwgMjYsIFNJR01BODJbaSAqIDE2ICsgMl0sIFNJR01BODJbaSAqIDE2ICsgM10pO1xuICAgICAgQjJCX0coNCwgMTIsIDIwLCAyOCwgU0lHTUE4MltpICogMTYgKyA0XSwgU0lHTUE4MltpICogMTYgKyA1XSk7XG4gICAgICBCMkJfRyg2LCAxNCwgMjIsIDMwLCBTSUdNQTgyW2kgKiAxNiArIDZdLCBTSUdNQTgyW2kgKiAxNiArIDddKTtcbiAgICAgIEIyQl9HKDAsIDEwLCAyMCwgMzAsIFNJR01BODJbaSAqIDE2ICsgOF0sIFNJR01BODJbaSAqIDE2ICsgOV0pO1xuICAgICAgQjJCX0coMiwgMTIsIDIyLCAyNCwgU0lHTUE4MltpICogMTYgKyAxMF0sIFNJR01BODJbaSAqIDE2ICsgMTFdKTtcbiAgICAgIEIyQl9HKDQsIDE0LCAxNiwgMjYsIFNJR01BODJbaSAqIDE2ICsgMTJdLCBTSUdNQTgyW2kgKiAxNiArIDEzXSk7XG4gICAgICBCMkJfRyg2LCA4LCAxOCwgMjgsIFNJR01BODJbaSAqIDE2ICsgMTRdLCBTSUdNQTgyW2kgKiAxNiArIDE1XSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGN0eC5oW2ldID0gY3R4LmhbaV0gXiB2W2ldIF4gdltpICsgMTZdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldXNhYmxlIHBhcmFtZXRlckJsb2NrXG4gIGNvbnN0IHBhcmFtZXRlckJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICAwOiBvdXRsZW4sIGtleWxlbiwgZmFub3V0LCBkZXB0aFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICA0OiBsZWFmIGxlbmd0aCwgc2VxdWVudGlhbCBtb2RlXG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gIDg6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTI6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTY6IG5vZGUgZGVwdGgsIGlubmVyIGxlbmd0aCwgcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMjA6IHJmdVxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDI0OiByZnVcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAyODogcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMzI6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAzNjogc2FsdFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDQwOiBzYWx0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gNDQ6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA0ODogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1MjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1NjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA2MDogcGVyc29uYWxcbiAgXSk7XG5cbiAgLy8gQ3JlYXRlcyBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0XG4gIC8vIFJlcXVpcmVzIGFuIG91dHB1dCBsZW5ndGggYmV0d2VlbiAxIGFuZCA2NCBieXRlc1xuICAvLyBUYWtlcyBhbiBvcHRpb25hbCBVaW50OEFycmF5IGtleVxuICBmdW5jdGlvbiBibGFrZTJiSW5pdChvdXRsZW4sIGtleSkge1xuICAgIGlmIChvdXRsZW4gPT09IDAgfHwgb3V0bGVuID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NFwiKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0XCIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRlLCAncGFyYW0gYmxvY2snXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYjogbmV3IFVpbnQ4QXJyYXkoMTI4KSxcbiAgICAgIGg6IG5ldyBVaW50MzJBcnJheSgxNiksXG4gICAgICB0OiAwLCAvLyBpbnB1dCBjb3VudFxuICAgICAgYzogMCwgLy8gcG9pbnRlciB3aXRoaW4gYnVmZmVyXG4gICAgICBvdXRsZW46IG91dGxlbiwgLy8gb3V0cHV0IGxlbmd0aCBpbiBieXRlc1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmFtZXRlckJsb2NrIGJlZm9yZSB1c2FnZVxuICAgIHBhcmFtZXRlckJsb2NrLmZpbGwoMCk7XG4gICAgcGFyYW1ldGVyQmxvY2tbMF0gPSBvdXRsZW47XG4gICAgcGFyYW1ldGVyQmxvY2tbMV0gPSBrZXkubGVuZ3RoO1xuICAgIHBhcmFtZXRlckJsb2NrWzJdID0gMTsgLy8gZmFub3V0XG4gICAgcGFyYW1ldGVyQmxvY2tbM10gPSAxOyAvLyBkZXB0aFxuXG4gICAgLy8gaW5pdGlhbGl6ZSBoYXNoIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBjdHguaFtpXSA9IEJMQUtFMkJfSVYzMltpXSBeIEIyQl9HRVQzMihwYXJhbWV0ZXJCbG9jaywgaSAqIDQpO1xuICAgIH1cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMCkge1xuICAgICAgYmxha2UyYlVwZGF0ZShjdHgsIGtleSk7XG4gICAgICAvLyBhdCB0aGUgZW5kXG4gICAgICBjdHguYyA9IDEyODtcbiAgICB9XG5cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmVxdWlyZXMgaGFzaCBjb250ZXh0IGFuZCBVaW50OEFycmF5IChieXRlIGFycmF5KVxuICBmdW5jdGlvbiBibGFrZTJiVXBkYXRlKGN0eCwgaW5wdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3R4LmMgPT09IDEyOCkge1xuICAgICAgICAvLyBidWZmZXIgZnVsbCA/XG4gICAgICAgIGN0eC50ICs9IGN0eC5jOyAvLyBhZGQgY291bnRlcnNcbiAgICAgICAgYmxha2UyYkNvbXByZXNzKGN0eCwgZmFsc2UpOyAvLyBjb21wcmVzcyAobm90IGxhc3QpXG4gICAgICAgIGN0eC5jID0gMDsgLy8gY291bnRlciB0byB6ZXJvXG4gICAgICB9XG4gICAgICBjdHguYltjdHguYysrXSA9IGlucHV0W2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgbWVzc2FnZSBkaWdlc3RcbiAgZnVuY3Rpb24gYmxha2UyYkZpbmFsKGN0eCkge1xuICAgIGN0eC50ICs9IGN0eC5jOyAvLyBtYXJrIGxhc3QgYmxvY2sgb2Zmc2V0XG5cbiAgICB3aGlsZSAoY3R4LmMgPCAxMjgpIHtcbiAgICAgIC8vIGZpbGwgdXAgd2l0aCB6ZXJvc1xuICAgICAgY3R4LmJbY3R4LmMrK10gPSAwO1xuICAgIH1cbiAgICBibGFrZTJiQ29tcHJlc3MoY3R4LCB0cnVlKTsgLy8gZmluYWwgYmxvY2sgZmxhZyA9IDFcblxuICAgIC8vIGxpdHRsZSBlbmRpYW4gY29udmVydCBhbmQgc3RvcmVcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjdHgub3V0bGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5vdXRsZW47IGkrKykge1xuICAgICAgb3V0W2ldID0gY3R4LmhbaSA+PiAyXSA+PiAoOCAqIChpICYgMykpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHJldHVybiB7IEluaXQ6IGJsYWtlMmJJbml0LCBVcGRhdGU6IGJsYWtlMmJVcGRhdGUsIEZpbmFsOiBibGFrZTJiRmluYWwgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl9jcmVhdGUoaGFzaGxlbiwga2V5KSB7XG4gIGtleSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKGtleSk7XG4gIGlmIChrZXkubGVuZ3RoID4gNjQpIHtcbiAgICBrZXkuc3ViYXJyYXkoMCwgNjQpO1xuICB9XG4gIHJldHVybiBibGFrZTJiLkluaXQoaGFzaGxlbiwga2V5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBibGFrZTJiXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBfaGFzaGxlbikge1xuICAvLyBjdHgub3V0bGVuID09PSBoYXNobGVuXG4gIHZhciByID0gYmxha2UyYi5GaW5hbChjdHgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkocik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogYmxha2UyYlxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgaW5wdXQgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpbnB1dCA9IGlucHV0LnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKTtcbiAgYmxha2UyYi5VcGRhdGUoY3R4LCBpbnB1dCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsYWtlMl91cGRhdGVcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWYsIG9mcywgbGVuKSB7XG4gIHZhciBpbnB1dCA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgaW5wdXQgPSBpbnB1dC5zdWJhcnJheShvZnMsIG9mcyArIGxlbik7XG4gIGJsYWtlMmIuVXBkYXRlKGN0eCwgaW5wdXQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmX3N0ciwgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfYmxha2UyX2NyZWF0ZShoYXNobGVuLCBrZXkpO1xuICB2YXIgYnVmID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmX3N0cik7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9maW5hbFxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfYmxha2UyX2J5dGVzKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfY3JlYXRlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZShoYXNobGVuLCBrZXkpIHtcbiAgY29uc3Qga2V5X2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhrZXkpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleV9qc29vX3N0cmluZyk7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWwsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBibGFrZTJfanNfZm9yX3dhc21fZmluYWwoY3R4LCBoYXNobGVuKSB7XG4gIHJldHVybiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfYmxha2UyX2ZpbmFsKGN0eCwgaGFzaGxlbikpO1xufVxuXG4vL1Byb3ZpZGVzOiBibGFrZTJfanNfZm9yX3dhc21fdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl91cGRhdGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWYpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmX2pzb29fc3RyaW5nLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV91cGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZSwgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGJ1Zik7XG4gIHJldHVybiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWZfanNvb19zdHJpbmcsIG9mcywgbGVuKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsIHRvcmVhZCkge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYgKHRvcmVhZCA8IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCwgYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhcbiAgICAgICAgY2hhbmlkLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIDAsXG4gICAgICAgIHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkLFxuICAgICAgKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsIGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHJldHVybiAoeCArIHkpIHwgMDtcbiAgfVxuICBmdW5jdGlvbiB4eChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLFxuICAgICAgYiA9IHdbMV0sXG4gICAgICBjID0gd1syXSxcbiAgICAgIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclswXSwgNywgMHhkNzZhYTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxXSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMl0sIDE3LCAweDI0MjA3MGRiKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzNdLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls0XSwgNywgMHhmNTdjMGZhZik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls1XSwgMTIsIDB4NDc4N2M2MmEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzddLCAyMiwgMHhmZDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls4XSwgNywgMHg2OTgwOThkOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls5XSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhmZmZmNWJiMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NWNkN2JlKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweGZkOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4YTY3OTQzOGUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OWI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA1LCAweGY2MWUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzZdLCA5LCAweGMwNDBiMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1ZTVhNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMF0sIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzVdLCA1LCAweGQ2MmYxMDVkKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweGQ4YTFlNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzRdLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcls5XSwgNSwgMHgyMWUxY2RlNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbM10sIDE0LCAweGY0ZDUwZDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzhdLCAyMCwgMHg0NTVhMTRlZCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4YTllM2U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMl0sIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbN10sIDE0LCAweDY3NmYwMmQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OGQyYTRjOGEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcls1XSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcls4XSwgMTEsIDB4ODc3MWY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweGZkZTUzODBjKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA0LCAweGE0YmVlYTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzRdLCAxMSwgMHg0YmRlY2ZhOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcls3XSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhiZWJmYmM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5YjdlYzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMF0sIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzNdLCAxNiwgMHhkNGVmMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcls2XSwgMjMsIDB4MDQ4ODFkMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbOV0sIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhlNmRiOTllNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFmYTI3Y2Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzJdLCAyMywgMHhjNGFjNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzBdLCA2LCAweGY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzddLCAxMCwgMHg0MzJhZmY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweGFiOTQyM2E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzVdLCAyMSwgMHhmYzkzYTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1YjU5YzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbM10sIDEwLCAweDhmMGNjYzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4ZmZlZmY0N2QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMV0sIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzhdLCA2LCAweDZmYTg3ZTRmKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE1LCAweGEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbNF0sIDYsIDB4Zjc1MzdlODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsyXSwgMTUsIDB4MmFkN2QyYmIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbOV0sIDIxLCAweGViODZkMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH07XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtcbiAgICBsZW46IDAsXG4gICAgdzogbmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSksXG4gICAgYjMyOiBiMzIsXG4gICAgYjg6IGI4LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbikge1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYgKGluX2J1Zikge1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYgKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCwgaW5wdXRfbGVuKSwgaW5fYnVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLCBtaXNzaW5nKSwgaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUgKGlucHV0X2xlbiA+PSA2NCkge1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLCBpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmIChpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsIGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpIHtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZisrO1xuICBpZiAoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IgKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNTY7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspIHtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MWZmZmZmZmY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweGZmO1xuICByZXR1cm4gdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LCBhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19kYXRhdmlld1xudmFyIGpzb29fZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuLy9SZXF1aXJlczoganNvb19kYXRhdmlld1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpIHtcbiAganNvb19kYXRhdmlldy5zZXRGbG9hdDY0KDAsIHgsIHRydWUpO1xuICB2YXIgbG8zMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICB2YXIgaGkzMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDQsIHRydWUpO1xuICB2YXIgbG8gPSBsbzMyICYgMHhmZmZmZmY7XG4gIHZhciBtaSA9IChsbzMyID4+PiAyNCkgfCAoKGhpMzIgPDwgOCkgJiAweGZmZmZmZik7XG4gIHZhciBoaSA9IChoaTMyID4+PiAxNikgJiAweGZmZmY7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCh4KSB7XG4gIGpzb29fZGF0YXZpZXcuc2V0RmxvYXQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHggPiAwID8gXCJpbmZpbml0eVwiIDogXCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSB4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPyAxIDogeCA+PSAwID8gMCA6IDE7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PT0gMCkge1xuICB9IGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSB7XG4gICAgICB4ICo9IDI7XG4gICAgICBleHAtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikge1xuICAgICAgeCAvPSAyO1xuICAgICAgZXhwKys7XG4gICAgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyBcIlwiIDogXCIrXCI7XG4gIHZhciBzaWduX3N0ciA9IFwiXCI7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9IFwiLVwiO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIDQzIC8qICcrJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIitcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyIC8qICcgJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIiBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLCBwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmIChwcmVjID49IDApIHtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHhfc3RyICs9IFwiLlwiICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsIFwiMFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHggKyAxICsgcHJlYztcbiAgICAgIGlmICh4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgXCIwXCIpO1xuICAgICAgZWxzZSB4X3N0ciA9IHhfc3RyLnNsaWNlKDAsIHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXG4gICAgc2lnbl9zdHIgKyBcIjB4XCIgKyB4X3N0ciArIFwicFwiICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoMCwgbG8gfCAobWkgPDwgMjQpLCB0cnVlKTtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoNCwgKG1pID4+PiA4KSB8IChoaSA8PCAxNiksIHRydWUpO1xuICByZXR1cm4ganNvb19kYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCh4LCB5KSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gTnVtYmVyLk5hTjtcbiAgaWYgKHggPT09IHkpIHJldHVybiB5O1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGlmICh5IDwgMCkgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NCk7XG4gICAgZWxzZSByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpO1xuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKHggPCB5ID09PSB4ID4gMCkgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSk7XG4gIGVsc2UgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSk7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2RhdGF2aWV3XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMoeCkge1xuICBqc29vX2RhdGF2aWV3LnNldFVpbnQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpID8gNCA6IDM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB2YXIgbmVnID0gMSAvIHggPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7XG4gICAgICBpID0gLWk7XG4gICAgICBmID0gLWY7XG4gICAgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKE51bWJlci5pc05hTih4KSkgcmV0dXJuIFswLCBOdW1iZXIuTmFOLCBOdW1iZXIuTmFOXTtcbiAgcmV0dXJuIFswLCAxIC8geCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0KHgsIGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7XG4gICAgICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0KHgpIHtcbiAgaWYgKHggPT09IDAgfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLXg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywgTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwgLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLXg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gIGlmICghTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0KHgsIHkpIHtcbiAgaWYgKHkgPT09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4geSA8IDAgPyAteCA6IHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuLy9BbGlhczogY2FtbF9zaWduYml0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4geCA8IDAgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cG0xKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC5wb3coMiwgeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMXAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZzIoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMTAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0KHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4geCAtIHkgPj0gMC41ID8geSArIDEgOiB5O1xuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiB5IC0geCA+PSAwLjUgPyB5IC0gMSA6IHk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguY2JydCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9XG4gICAgMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5KGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSBhaGkgKiBiaGkgLSBwICsgYWhpICogYmxvICsgYWxvICogYmhpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSBhIC0gKHMgLSB2KSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGp1c3QoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4XG4gICAgICA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKVxuICAgICAgOiB4O1xuICB9XG5cbiAgaWYgKHggPT09IDAgfHwgeSA9PT0gMCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiAoTWF0aC5hYnMoeHMgKiB5cykgKiA0KSAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgKCgoTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OKSAvIDQpICogRVBTSUxPTikgLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LCBkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gTnVtYmVyLnBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdChcIitcIilbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLCBlKTtcbiAgICAgICAgeCArPSBjYW1sX3N0cl9yZXBlYXQoZSwgXCIwXCIpO1xuICAgICAgICBpZiAoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyBcIi5cIiArIGNhbWxfc3RyX3JlcGVhdChkcCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH1cbiAgfVxuICB2YXIgcyxcbiAgICBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSBmLnByZWMgPCAwID8gNiA6IGYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IC14O1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkpIHtcbiAgICBzID0gXCJuYW5cIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBzID0gXCJpbmZcIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT09IFwiZVwiKVxuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgLSAxKSArIFwiMFwiICsgcy5zbGljZShpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcHJlYyA9IHByZWMgPyBwcmVjIDogMTtcbiAgICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICAgIHZhciBqID0gcy5pbmRleE9mKFwiZVwiKTtcbiAgICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IGogLSAxO1xuICAgICAgICAgIHdoaWxlIChzLmNoYXJBdChpKSA9PT0gXCIwXCIpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT09IFwiLlwiKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PT0gXCJlXCIpXG4gICAgICAgICAgICBzID0gcy5zbGljZSgwLCBpIC0gMSkgKyBcIjBcIiArIHMuc2xpY2UoaSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgICBpZiAoZXhwIDwgMCkge1xuICAgICAgICAgICAgcCAtPSBleHAgKyAxO1xuICAgICAgICAgICAgcyA9IHgudG9GaXhlZChwKTtcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKCgocyA9IHgudG9GaXhlZChwKSksIHMubGVuZ3RoID4gcHJlYyArIDEpKSBwLS07XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHMuY2hhckF0KGkpID09PSBcIjBcIikgaS0tO1xuICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09PSBcIi5cIikgaS0tO1xuICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHZhciByX2Zsb2F0ID0gL14gKlstK10/KD86XFxkKlxcLj9cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWy0rXT9cXGQrKT8kLztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHJlcyA9ICtzO1xuICAvL0Zhc3QgcGF0aFxuICBpZiAoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLCBcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKVxuICAgIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8kL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmIChtKSB7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCBcIlwiKTtcbiAgICB2YXIgbWFudGlzc2EgPSBOdW1iZXIucGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9ICgrbVs1XSB8fCAwKSAtIDQgKiBtMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkoeCwgeSkge1xuICBpZiAoeS5mdW4pIHtcbiAgICB4LmZ1biA9IHkuZnVuO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgeC5mdW4gPSB5O1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpID0geS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9WZXJzaW9uOiA8IDUuNFxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYoeCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pO1xuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2xhenlcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2xhenkoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlfbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15X2xhenkoZHVtbXksIG5ld3ZhbCkge1xuICBzd2l0Y2ggKGNhbWxfb2JqX3RhZyhuZXd2YWwpKSB7XG4gICAgY2FzZSAyNDY6IC8vIExhenlcbiAgICBjYXNlIDI0NDogLy8gRm9yY2luZ1xuICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkXG4gICAgICBjYW1sX3VwZGF0ZV9kdW1teShkdW1teSwgbmV3dmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkdW1teVsxXSA9IG5ld3ZhbDtcbiAgICAgIGR1bW15WzBdID0gMjUwO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHhbMF0gPT09IHhbMF0gPj4+IDApIHJldHVybiB4WzBdO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKSByZXR1cm4gMjUyO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSkgcmV0dXJuIDI1MjtcbiAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiAyNDc7XG4gIGVsc2UgaWYgKHg/LmNhbWxfY3VzdG9tKSByZXR1cm4gMjU1O1xuICBlbHNlIHJldHVybiAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcoeCwgdGFnKSB7XG4gIHhbMF0gPSB0YWc7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sodGFnLCBzaXplKSB7XG4gIC8vIFRPRE86IGZhaWwgZm9yIHZhbHVlIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBhcyBhbiBhcnJheVxuICB2YXIgbyA9IG5ldyBBcnJheShzaXplICsgMSk7XG4gIG9bMF0gPSB0YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLCB4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIiA/IHggOiB4LnNsaWNlKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUoeCwgcykge1xuICBpZiAocyA8PSAwIHx8IHMgKyAxID4geC5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9PSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkKGIsIHYpIHtcbiAgYlswXSA9IDI1MDtcbiAgYlsxXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LCBpLCBvbGQsIG4pIHtcbiAgaWYgKHhbaSArIDFdID09PSBvbGQpIHtcbiAgICB4W2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZChfeCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQodikge1xuICByZXR1cm4gWzI1MCwgdl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcblxuLy9Qcm92aWRlczogY2FtbF9vb19jYWNoZV9pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tZXRob2RfY2FjaGVcbmZ1bmN0aW9uIGNhbWxfb29fY2FjaGVfaWQoKSB7XG4gIHZhciBjYWNoZWlkID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoO1xuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IDA7XG4gIGNhY2hlaWQ7XG59XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NhY2hlZF9tZXRob2QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG5mdW5jdGlvbiBjYW1sX2dldF9jYWNoZWRfbWV0aG9kKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAobWV0aHNbb2ZzICsgNF0gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgKyAzXTtcbiAgfVxuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSAtIDM7XG4gIHJldHVybiBtZXRoc1tsaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2Qob2JqLCB0YWcpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gdGFnID09PSBtZXRoc1tsaSArIDFdID8gbWV0aHNbbGldIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQoYikge1xuICBiWzJdID0gY2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobywgaSkge1xuICByZXR1cm4gb1tpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobywgaSwgdikge1xuICByZXR1cm4gKG9baSArIDFdID0gdik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKF9vKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KF92LCBfb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLCBvLCBuKSB7XG4gIGlmIChiWzBdID09PSBvKSB7XG4gICAgYlswXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG8pICYmXG4gICAgb1swXSA9PT0gb1swXSA+Pj4gMCAmJlxuICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ0LCAyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDQsIDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiBjYW1sX29ial90YWcobykgPT09IDI1MCA/IG9bMV0gOiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gdCA9PT0gMjQ1ID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2lkZW50aWZpZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2N1c3RvbV9pZGVudGlmaWVyKG8pIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG8uY2FtbF9jdXN0b20gfHwgXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZ2NfcmFtcF91cFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF91cChmKSB7XG4gIHZhciBhID0gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xuICB2YXIgc3VzcGVuZGVkID0gMDtcbiAgcmV0dXJuIFswLCBhLCBzdXNwZW5kZWRdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2djX3JhbXBfZG93blxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF9kb3duKF9zdXNwZW5kZWRfY29sbGVjdGlvbl93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuIiwiLypcblRvIGRlYWwgd2l0aCBlZmZlY3RzLCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMgaW50dWl0aXZlbHkgY29tcG9zZWQgb2ZcbmEgc3RhY2sgb2YgZmliZXJzLiBFYWNoIGZpYmVyIGhhcyBhIGN1cnJlbnQgbG93LWxldmVsIGNvbnRpbnVhdGlvblxuKG9uZS1hcmd1bWVudCBKYXZhU2NyaXB0IGZ1bmN0aW9uKSwgYSBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kXG5hIHRyaXBsZSBvZiBoYW5kbGVycywgd2hpY2ggYXJlIGludm9rZWQgd2hlbiB0aGUgZmliZXIgdGVybWluYXRlc1xuKGVpdGhlciB3aXRoIGEgdmFsdWUgb3IgYW4gZXhjZXB0aW9uKSBvciB3aGVuIGFuIGVmZmVjdCBpcyBwZXJmb3JtZWQuXG5UaGUgbG93LWxldmVsIGNvbnRpbnVhdGlvbiBvZiB0aGUgdG9wbW9zdCBmaWJlciAod2hpY2ggaXMgY3VycmVudGx5XG5leGVjdXRpbmcpIGlzIHBhc3NlZCBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGFzIGFuIGFkZGl0aW9uYWxcbmFyZ3VtZW50LiBJdHMgc3RhY2sgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIGlzIHN0b3JlZCBpblxuW2NhbWxfY3VycmVudF9zdGFjay54XS5cbkV4Y2VwdGlvbiBoYW5kbGVycyBhcmUgcHVzaGVkIGludG8gdGhpcyBzdGFja1xud2hlbiBlbnRlcmluZyBhIFt0cnkgLi4uIHdpdGggLi4uXSBhbmQgcG9wcGVkIG9uIGV4aXQuXG5IYW5kbGVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suaF1cbmFuZCB0aGUgcmVtYWluaW5nIGZpYmVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suZV0uXG5UbyBpbnN0YWxsIGFuIGVmZmVjdCBoYW5kbGVyLCB3ZSBwdXNoIGEgbmV3IGZpYmVyIGludG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LlxuXG5XZSBoYXZlIGJhc2ljYWxseSB0aGUgZm9sbG93aW5nIHR5cGUgZm9yIHJlaWZpZWQgY29udGludWF0aW9ucyAodHlwZVxuW2NvbnRpbnVhdGlvbl0gaW4gbW9kdWxlIFtFZmZlY3RdIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTpcblxuICB0eXBlICgnYSwgJ2IpIGNvbnRpbnVhdGlvbiA9ICgnYSwgJ2IpIHN0YWNrIHJlZlxuXG4gIGFuZCAoXywgXykgc3RhY2sgPVxuICAgICAgQ29ucyA6ICgnYiAtPiB1bml0KSAqICAgICAgICAgICAgICgqIGxvdy1sZXZlbCBjb250aW51YXRpb24gKilcbiAgICAgICAgICAgICAoZXhuIC0+IHVuaXQpIGxpc3QgKiAgICAgICAoKiBleGNlcHRpb24gaGFuZGxlcnMgKilcbiAgICAgICAgICAgICAoJ2IsICdjKSBoYW5kbGVyICpcbiAgICAgICAgICAgICAoJ2EsICdiKSBzdGFja1xuICAgICAgICAgICAgIC0+ICgnYSwgJ2MpIHN0YWNrXG4gICAgfCBFbXB0eSA6ICgnYSwgJ2EpIHN0YWNrXG5cbiAgYW5kICgnYSwnYikgaGFuZGxlciA9ICAgKCogQXMgaW4gbW9kdWxlIEVmZmVjdCBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG4gICAgeyByZXRjOiAnYSAtPiAnYjtcbiAgICAgIGV4bmM6IGV4biAtPiAnYjtcbiAgICAgIGVmZmM6ICdjLidjIEVmZmVjdC50IC0+ICgoJ2MsJ2IpIGNvbnRpbnVhdGlvbiAtPiAnYikgb3B0aW9uIH1cblxuQ29udGludWF0aW9ucyBhcmUgb25lLXNob3QuIEEgY29udGludWF0aW9uIFtyZWYgRW1wdHldIGhhcyBhbHJlYWR5XG5iZWVuIHJlc3VtZWQuXG5cbkEgY29udGludWF0aW9uIGlzIGJhc2ljYWxseSBjb21wb3NlZCBvZiBhIGxpc3Qgb2YgZmliZXJzLCB3aGljaCBlYWNoXG5oYXMgaXRzIGxvdy1sZXZlbCBjb250aW51YXRpb24sIGl0cyBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kIGFcbnRyaXBsZSBvZiBoYW5kbGVycyB0byBkZWFsIHdpdGggd2hlbiB0aGUgZmliZXIgdGVybWluYXRlcyBvciBhblxuZWZmZWN0IGlzIHBlcmZvcm1lZC4gV2hlbiByZXN1bWluZyBhIGNvbnRpbnVhdGlvbiwgdGhlIGlubmVybW9zdCBmaWJlclxuaXMgcmVzdW1lZCBmaXJzdC5cblxuVGhlIGhhbmRsZXJzIGFyZSBDUFMtdHJhbnNmb3JtZWQgZnVuY3Rpb25zOiB0aGV5IGFjdHVhbGx5IHRha2UgYW5cbmFkZGl0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjdXJyZW50IGxvdy1sZXZlbCBjb250aW51YXRpb24uXG4qL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vIFRoaXMgaGFzIHRoZSBzaGFwZSB7aywgeCwgaCwgZX0gd2hlcmVcbi8vIC0gaCBpcyBhIHRyaXBsZSBvZiBoYW5kbGVycyAoc2VlIGVmZmVjdC5tbClcbi8vIC0gayBpcyB0aGUgbG93IGxldmVsIGNvbnRpbnVhdGlvblxuLy8gLSB4IGlzIHRoZSBleGNlcHRpb24gc3RhY2tcbi8vIC0gZSBpcyB0aGUgZmliZXIgc3RhY2sgb2YgdGhlIHBhcmVudCBmaWJlci5cbnZhciBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9wdXNoX3RyYXBcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9zdGFja1xuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9wdXNoX3RyYXAoaGFuZGxlcikge1xuICBjYW1sX2N1cnJlbnRfc3RhY2sueCA9IHsgaDogaGFuZGxlciwgdDogY2FtbF9jdXJyZW50X3N0YWNrLnggfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3BfdHJhcFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X3N0YWNrXG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX3BvcF90cmFwKCkge1xuICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KVxuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgdGhyb3cgeDtcbiAgICB9O1xuICB2YXIgaCA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfdW5oYW5kbGVkXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3VuaGFuZGxlZChlZmYpIHtcbiAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICB0aHJvdyBleG47XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9yZXN1bWVfc3RhY2tcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2VfY29uc3RhbnRcbi8vUmVxdWlyZXM6IGNhbWxfcG9wX2ZpYmVyLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgaykge1xuICBpZiAoIXN0YWNrKVxuICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoXG4gICAgICBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LkNvbnRpbnVhdGlvbl9hbHJlYWR5X3Jlc3VtZWRcIiksXG4gICAgKTtcbiAgaWYgKGxhc3QgPT09IDApIHtcbiAgICBsYXN0ID0gc3RhY2s7XG4gICAgLy8gUHJlIE9DYW1sIDUuMiwgbGFzdCB3YXMgbm90IHBvcHVsYXRlZC5cbiAgICB3aGlsZSAobGFzdC5lICE9PSAwKSBsYXN0ID0gbGFzdC5lO1xuICB9XG4gIGNhbWxfY3VycmVudF9zdGFjay5rID0gaztcbiAgbGFzdC5lID0gY2FtbF9jdXJyZW50X3N0YWNrO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIHN0YWNrLms7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9wX2ZpYmVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3BvcF9maWJlcigpIHtcbiAgLy8gTW92ZSB0byB0aGUgcGFyZW50IGZpYmVyLCByZXR1cm5pbmcgdGhlIHBhcmVudCdzIGxvdy1sZXZlbCBjb250aW51YXRpb25cbiAgdmFyIGMgPSBjYW1sX2N1cnJlbnRfc3RhY2suZTtcbiAgY2FtbF9jdXJyZW50X3N0YWNrLmUgPSAwO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBjO1xuICByZXR1cm4gYy5rO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfZnJlc2hfb29faWRcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKSB7XG4gIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgaWYgKGV4bikgZXhuID0gWzAsIGV4biwgZWZmXTtcbiAgZWxzZSB7XG4gICAgZXhuID0gW1xuICAgICAgMjQ4LFxuICAgICAgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksXG4gICAgICBjYW1sX2ZyZXNoX29vX2lkKDApLFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9wZXJmb3JtX2VmZmVjdChlZmYsIGswKSB7XG4gIGlmIChjYW1sX2N1cnJlbnRfc3RhY2suZSA9PT0gMCkge1xuICAgIHZhciBleG4gPSBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKTtcbiAgICB0aHJvdyBleG47XG4gIH1cbiAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0IGhhbmRsZXJcbiAgdmFyIGhhbmRsZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFszXTtcbiAgdmFyIGxhc3RfZmliZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2s7XG4gIGxhc3RfZmliZXIuayA9IGswO1xuICB2YXIgY29udCA9IFsyNDUgLypjb250aW51YXRpb24qLywgbGFzdF9maWJlciwgbGFzdF9maWJlcl07XG4gIC8vIE1vdmUgdG8gcGFyZW50IGZpYmVyIGFuZCBleGVjdXRlIHRoZSBlZmZlY3QgaGFuZGxlciB0aGVyZVxuICAvLyBUaGUgaGFuZGxlciBpcyBkZWZpbmVkIGluIFN0ZGxpYi5FZmZlY3QsIHNvIHdlIGtub3cgdGhhdCB0aGUgYXJpdHkgbWF0Y2hlc1xuICB2YXIgazEgPSBjYW1sX3BvcF9maWJlcigpO1xuICByZXR1cm4gY2FtbF9zdGFja19jaGVja19kZXB0aCgpXG4gICAgPyBjYW1sX2dldF9jcHNfZnVuKGhhbmRsZXIpKGVmZiwgY29udCwgbGFzdF9maWJlciwgazEpXG4gICAgOiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGhhbmRsZXIsIFtlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVwZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXBlcmZvcm1fZWZmZWN0KGVmZiwgY29udCwgbGFzdCwgazApIHtcbiAgaWYgKGNhbWxfY3VycmVudF9zdGFjay5lID09PSAwKSB7XG4gICAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICAgIHZhciBzdGFjayA9IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KTtcbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgazApO1xuICAgIHRocm93IGV4bjtcbiAgfVxuICAvLyBHZXQgY3VycmVudCBlZmZlY3QgaGFuZGxlclxuICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay5oWzNdO1xuICB2YXIgbGFzdF9maWJlciA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgbGFzdF9maWJlci5rID0gazA7XG4gIGxhc3QuZSA9IGxhc3RfZmliZXI7XG4gIGNvbnRbMl0gPSBsYXN0X2ZpYmVyO1xuICAvLyBNb3ZlIHRvIHBhcmVudCBmaWJlciBhbmQgZXhlY3V0ZSB0aGUgZWZmZWN0IGhhbmRsZXIgdGhlcmVcbiAgLy8gVGhlIGhhbmRsZXIgaXMgZGVmaW5lZCBpbiBTdGRsaWIuRWZmZWN0LCBzbyB3ZSBrbm93IHRoYXQgdGhlIGFyaXR5IG1hdGNoZXNcbiAgdmFyIGsxID0gY2FtbF9wb3BfZmliZXIoKTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9nZXRfY3BzX2Z1bihoYW5kbGVyKShlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxKVxuICAgIDogY2FtbF90cmFtcG9saW5lX3JldHVybihoYW5kbGVyLCBbZWZmLCBjb250LCBsYXN0X2ZpYmVyLCBrMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2dldF9jcHNfZnVuKGYpIHtcbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2Nwc19mdW5cbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfY3BzX2Z1bihmKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGdldCB0aGUgZWZmZWN0IGhhbmRsZXIuIElmIHRoZVxuICAvLyBlZmZlY3QgaGFuZGxlciBoYXMgbm8gQ1BTIGZ1bmN0aW9uLCB3ZSBrbm93IHRoYXQgd2UgY2FuIGRpcmVjdGx5XG4gIC8vIGNhbGwgdGhlIGRpcmVjdCB2ZXJzaW9uIGluc3RlYWQuXG4gIHJldHVybiBmLmNwcyA/IGYuY3BzIDogZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfY2FsbF9nZW4sIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5fY3BzLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2NhbGwoZiwgeCkge1xuICB2YXIgYXJncyA9IFt4LCBjYW1sX3BvcF9maWJlcigpXTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9jYWxsX2dlbl9jcHMoZiwgYXJncylcbiAgICA6IGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZiwgYXJncywgMCk7XG59XG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2h2YWwoeCkge1xuICAvLyBDYWxsIFtodl0gaW4gdGhlIHBhcmVudCBmaWJlclxuICB2YXIgZiA9IGNhbWxfY3VycmVudF9zdGFjay5oWzFdO1xuICByZXR1cm4gY2FtbF9hbGxvY19zdGFja19jYWxsKGYsIHgpO1xufVxuZnVuY3Rpb24gY2FtbF9hbGxvY19zdGFja19oZXhuKGUpIHtcbiAgLy8gQ2FsbCBbaHhdIGluIHRoZSBwYXJlbnQgZmliZXJcbiAgdmFyIGYgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFsyXTtcbiAgcmV0dXJuIGNhbWxfYWxsb2Nfc3RhY2tfY2FsbChmLCBlKTtcbn1cbmZ1bmN0aW9uIGNhbWxfYWxsb2Nfc3RhY2soaHYsIGh4LCBoZikge1xuICB2YXIgaGFuZGxlcnMgPSBbMCwgaHYsIGh4LCBoZl07XG4gIHJldHVybiB7XG4gICAgazogY2FtbF9hbGxvY19zdGFja19odmFsLFxuICAgIHg6IHsgaDogY2FtbF9hbGxvY19zdGFja19oZXhuLCB0OiAwIH0sXG4gICAgaDogaGFuZGxlcnMsXG4gICAgZTogMCxcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9JZjogIWVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrKF9odiwgX2h4LCBfaGYpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KSB7XG4gIHZhciBzdGFjayA9IGNvbnRbMV07XG4gIGNvbnRbMV0gPSAwO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGNcbi8vUmVxdWlyZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGMoXG4gIGNvbnQsXG4gIGh2YWwsXG4gIGhleG4sXG4gIGhlZmYsXG4pIHtcbiAgdmFyIHN0YWNrID0gY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjKGNvbnQpO1xuICBpZiAoc3RhY2sgPT09IDApIHJldHVybiBzdGFjaztcbiAgdmFyIGxhc3QgPSBjb250WzJdO1xuICBsYXN0LmhbMV0gPSBodmFsO1xuICBsYXN0LmhbMl0gPSBoZXhuO1xuICBsYXN0LmhbM10gPSBoZWZmO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NvbnRpbnVhdGlvbl9jYWxsc3RhY2tcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9jb250aW51YXRpb25fY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9uZXdcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIHsgY29uZGl0aW9uOiAxIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3dhaXRcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl93YWl0KF90LCBfbXV0ZXh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3Rcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3QoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbChfdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19lZmZlY3Rfbm90X3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy8hSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBqc29vX2VmZmVjdF9ub3Rfc3VwcG9ydGVkKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiRWZmZWN0IGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3VtZVxuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuX2NwcywgY2FtbF9jdXJyZW50X3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFja1xuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXN1bWUoZiwgYXJnLCBzdGFjaywgbGFzdCkge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgayA9IGNhbWxfcmVzdW1lX3N0YWNrKHN0YWNrLCBsYXN0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLyogTm90ZTogZiBpcyBub3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24gYnV0IGEgKGRpcmVjdC1zdHlsZSwgQ1BTKSBjbG9zdXJlIHBhaXIgKi9cbiAgICB2YXIgcmVzID0geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBbYXJnLCBrXSwgam9vX2RpcmVjdDogMCB9O1xuICAgIGRvIHtcbiAgICAgIC8qIEF2b2lkcyB0cmFtcG9saW5pbmcgdG9vIG9mdGVuIHdoaWxlIHN0aWxsIGF2b2lkaW5nIHN0YWNrIG92ZXJmbG93LiBTZWVcbiAgICAgICAgIFtjYW1sX2NhbGxiYWNrXS4gKi9cbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb29fZGlyZWN0XG4gICAgICAgICAgPyByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncylcbiAgICAgICAgICA6IGNhbWxfY2FsbF9nZW5fY3BzKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgIGpvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldLFxuICAgICAgICAgIGpvb19kaXJlY3Q6IDEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVzPy5qb29fYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Nwc19jbG9zdXJlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfY3BzX2Nsb3N1cmUoZGlyZWN0X2YsIGNwc19mKSB7XG4gIGRpcmVjdF9mLmNwcyA9IGNwc19mO1xuICByZXR1cm4gZGlyZWN0X2Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXNzdW1lX25vX3BlcmZvcm1cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vSWY6ICFkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfYXNzdW1lX25vX3BlcmZvcm0oZikge1xuICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICBhMlswXSA9IDA7XG4gIGZvciAodmFyIGkyID0gMSwgaTEgPSBpICsgMTsgaTIgPD0gbGVuOyBpMisrLCBpMSsrKSB7XG4gICAgYTJbaTJdID0gYVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfc3ViIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfc3ViXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfc3ViKGEsIGksIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9zdWIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9zdWJcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfc3ViKGEsIGksIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9zdWIoYSwgaSwgbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCxcbiAgICBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMSArIGwyIC0gMTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsXG4gICAgaiA9IDE7XG4gIGZvciAoOyBpIDwgbDE7IGkrKykgYVtpXSA9IGExW2ldO1xuICBmb3IgKDsgaSA8IGw7IGkrKywgaisrKSBhW2ldID0gYTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYXBwZW5kIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYXBwZW5kXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9hcHBlbmQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9hcHBlbmRcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICByZXR1cm4gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ibGl0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9BbGlhczogY2FtbF9hcnJheV9zZXRfZmxvYXRcbi8vQWxpYXM6IGNhbWxfZmxvYXRhcnJheV9zZXRcbi8vQWxpYXM6IGNhbWxfYXJyYXlfc2V0X2FkZHJcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0KGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCArIDFdID0gbmV3dmFsO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2FycmF5X2dldF9mbG9hdFxuLy9BbGlhczogY2FtbF9mbG9hdGFycmF5X2dldFxuLy9BbGlhczogY2FtbF9hcnJheV9nZXRfYWRkclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXggKyAxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnJheVtvZnMgKyBpICsgMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZChhcnJheSwgb2ZzLCBsZW4sIHYpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2NoZWNrX2JvdW5kX2dlblxuLy9BbGlhczogY2FtbF9jaGVja19ib3VuZF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X21ha2UgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDQpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfbWFrZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X21ha2UobGVuLCBpbml0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NyZWF0ZV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9hcnJheV9jcmVhdGVfZmxvYXQobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbikge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2UgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2VfdW5ib3hlZCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0YXJyYXlfbWFrZVxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlX3VuYm94ZWQobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2Zsb2F0YXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X21ha2Vcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZShsZW4sIGluaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDVcbnZhciBjYW1sX2RvbWFpbl9kbHMgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfc2V0KGEpIHtcbiAgY2FtbF9kb21haW5fZGxzID0gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldFxuLy9SZXF1aXJlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldChvbGQsIG4pIHtcbiAgaWYgKGNhbWxfZG9tYWluX2RscyAhPT0gb2xkKSByZXR1cm4gMDtcbiAgY2FtbF9kb21haW5fZGxzID0gbjtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfZ2V0KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9kbHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2xvYWRcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9hdG9taWNfbG9hZChyZWYpIHtcbiAgcmV0dXJuIHJlZlsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hdG9taWNfbG9hZF9maWVsZFxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2xvYWRfZmllbGQoYiwgaSkge1xuICByZXR1cm4gYltpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2Nhc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXMocmVmLCBvLCBuKSB7XG4gIGlmIChyZWZbMV0gPT09IG8pIHtcbiAgICByZWZbMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19jYXNfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXNfZmllbGQoYiwgaSwgbywgbikge1xuICBpZiAoYltpICsgMV0gPT09IG8pIHtcbiAgICBiW2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2ZldGNoX2FkZFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGQocmVmLCBpKSB7XG4gIHZhciBvbGQgPSByZWZbMV07XG4gIHJlZlsxXSArPSBpO1xuICByZXR1cm4gb2xkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGQoYiwgaSwgbikge1xuICB2YXIgb2xkID0gYltpICsgMV07XG4gIGJbaSArIDFdICs9IG47XG4gIHJldHVybiBvbGQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2V4Y2hhbmdlKHJlZiwgdikge1xuICB2YXIgciA9IHJlZlsxXTtcbiAgcmVmWzFdID0gdjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlX2ZpZWxkXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9hdG9taWNfZXhjaGFuZ2VfZmllbGQoYiwgaSwgdikge1xuICB2YXIgciA9IGJbaSArIDFdO1xuICBiW2kgKyAxXSA9IHY7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19tYWtlX2NvbnRlbmRlZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX21ha2VfY29udGVuZGVkKGEpIHtcbiAgcmV0dXJuIFswLCBhXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuXG4vL1ZlcnNpb246ID49IDUuMCwgPCA1LjJcbnZhciBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fID0gWzBdO1xuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuKF91bml0KSB7XG4gIHJldHVybiBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudChfdW5pdCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faW5kZXhcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMDNcbmZ1bmN0aW9uIGNhbWxfbWxfZG9tYWluX2luZGV4KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9pZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5faWRcbi8vVmVyc2lvbjogPj0gNVxudmFyIGNhbWxfZG9tYWluX2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4ID0gMTtcbmZ1bmN0aW9uIGNhbWxfZG9tYWluX3NwYXduKGYsIHRlcm1fc3luYykge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbiAgY2FtbF9kb21haW5faWQgPSBvbGQ7XG4gIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHRlcm1fc3luY1syXSk7XG4gIC8vVE9ETzogZml4IGV4biBjYXNlXG4gIHRlcm1fc3luY1sxXSA9IFswLCBbMCwgcmVzXV07XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG52YXIgY2FtbF9kb21haW5fbGF0ZXN0X2lkeCA9IDE7XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9zcGF3bihmLCBtdXRleCkge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIF9yZXMgPSBjYW1sX2NhbGxiYWNrKGYsIFswXSk7XG4gIGNhbWxfZG9tYWluX2lkID0gb2xkO1xuICBjYW1sX21sX211dGV4X3VubG9jayhtdXRleCk7XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faWRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5faWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfZG9tYWluX2lkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fY3B1X3JlbGF4KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX2ludDMyX2Zvcm1hdFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZm9ybWF0XG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT09IFwiJWRcIilcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiICsgaSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgaWYgKGYuc2lnbmVkY29udikge1xuICAgICAgZi5zaWduID0gLTE7XG4gICAgICBpID0gLWk7XG4gICAgfSBlbHNlIGkgPj4+PSAwO1xuICB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0KG4sIFwiMFwiKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Uocykge1xuICB2YXIgaSA9IDAsXG4gICAgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLFxuICAgIGJhc2UgPSAxMCxcbiAgICBzaWduID0gMSxcbiAgICBzaWduZWRuZXNzID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkpIHtcbiAgICAgIGNhc2UgNDU6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgICAgY2FzZSAxMjA6XG4gICAgICBjYXNlIDg4OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTE6XG4gICAgICBjYXNlIDc5OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDk4OlxuICAgICAgY2FzZSA2NjpcbiAgICAgICAgc2lnbmVkbmVzcyA9IDA7XG4gICAgICAgIGJhc2UgPSAyO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTc6XG4gICAgICBjYXNlIDg1OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZSwgc2lnbmVkbmVzc107XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IGNhbWxfaW50MzJfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlKHMpO1xuICB2YXIgaSA9IHJbMF0sXG4gICAgc2lnbiA9IHJbMV0sXG4gICAgYmFzZSA9IHJbMl0sXG4gICAgc2lnbmVkbmVzcyA9IHJbM107XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSBpIDwgbGVuID8gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA6IDA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmIChzaWduZWRuZXNzICYmIChyZXMgfCAwKSAhPT0gcmVzKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfbXVsXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9tdWxcbi8vQWxpYXM6ICVpbnRfbXVsXG5mdW5jdGlvbiBjYW1sX211bChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX2RpdlxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZGl2XG4vL0FsaWFzOiAlaW50X2RpdlxuZnVuY3Rpb24gY2FtbF9kaXYoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4gKHggLyB5KSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX21vZFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfbW9kXG4vL0FsaWFzOiAlaW50X21vZFxuZnVuY3Rpb24gY2FtbF9tb2QoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4geCAlIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNiBjb25zdFxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoeCAmIDB4MDBmZikgPDwgOCkgfCAoKHggJiAweGZmMDApID4+IDgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwIGNvbnN0XG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoXG4gICAgKCh4ICYgMHgwMDAwMDBmZikgPDwgMjQpIHxcbiAgICAoKHggJiAweDAwMDBmZjAwKSA8PCA4KSB8XG4gICAgKCh4ICYgMHgwMGZmMDAwMCkgPj4+IDgpIHxcbiAgICAoKHggJiAweGZmMDAwMDAwKSA+Pj4gMjQpXG4gICk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsIGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTEgfCAwKTtcbiAgZCA9IChkIDw8IDE1KSB8IChkID4+PiAoMzIgLSAxNSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9IChoIDw8IDEzKSB8IChoID4+PiAoMzIgLSAxMykpOyAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpIHwgMCkgKyAoMHhlNjU0NmI2NCB8IDApKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsKGgsIDB4ODVlYmNhNmIgfCAwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsKGgsIDB4YzJiMmFlMzUgfCAwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0KGhhc2gsIHYwKSB7XG4gIHZhciBpNjQgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodjApO1xuICB2YXIgbCA9IGNhbWxfaW50NjRfbG8zMihpNjQpO1xuICB2YXIgaCA9IGNhbWxfaW50NjRfaGkzMihpNjQpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGggJiAweDdmZjAwMDAwKSA9PT0gMHg3ZmYwMDAwMCAmJiAobCB8IChoICYgMHhmZmZmZikpICE9PSAwKSB7XG4gICAgaCA9IDB4N2ZmMDAwMDA7XG4gICAgbCA9IDB4MDAwMDAwMDE7XG4gIH0gZWxzZSBpZiAoaCA9PT0gKDB4ODAwMDAwMDAgfCAwKSAmJiBsID09PSAwKSB7XG4gICAgLyogTm9ybWFsaXplIC0wIGludG8gKzAgKi9cbiAgICAvLyBUaGlzIGNvZGUgcGF0aCBpcyBub3QgdXNlZCBieSBjYW1sX2hhc2ggYmVjYXVzZSAwIGFuZCAtMCBsb29rXG4gICAgLy8gbGlrZSBpbnRlZ2Vyc1xuICAgIGggPSAwO1xuICB9XG4gIGhhc2ggPSBjYW1sX2hhc2hfbWl4X2ludChoYXNoLCBsKTtcbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGgpO1xuICByZXR1cm4gaGFzaDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCxcbiAgICBpLFxuICAgIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9XG4gICAgICBzLmNoYXJDb2RlQXQoaSkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICAgIGNhc2UgMzpcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2O1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgY2FzZSAyOlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgdyB8PSBzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsXG4gICAgaSxcbiAgICB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldIHwgKHNbaSArIDFdIDw8IDgpIHwgKHNbaSArIDJdIDw8IDE2KSB8IChzW2kgKyAzXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgICBjYXNlIDM6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3ID0gc1tpICsgMl0gPDwgMTY7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDI6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3IHw9IHNbaSArIDFdIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHNbaV07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpO1xuICAvKiBBUlJBWSAqLyBlbHNlIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07XG4gIHJkID0gMDtcbiAgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2Py5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYgKFxuICAgICAgICBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiZcbiAgICAgICAgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2hcbiAgICAgICkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGhoKTtcbiAgICAgICAgbnVtLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHZbMF0gPT09ICh2WzBdIHwgMCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgICBjYXNlIDI0ODpcbiAgICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgICAgbnVtLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUwOlxuICAgICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHYpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodiB8IDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdiArIHYgKyAxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCB2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNmZmZmZmZmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdikge1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzZmZmZmZmZjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSkge1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpXG4gICAgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSlcbiAgICByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhWzBdID09PSBhWzBdID4+PiAwICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuIHRhZyA9PT0gMjU0ID8gMCA6IHRhZztcbiAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcilcbiAgICByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYT8uY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhPy5jb21wYXJlKVxuICAgIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpIHtcbiAgcmV0dXJuIChcbiAgICBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmVcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYgKGNvbXApIHtcbiAgICB2YXIgeCA9IHN3YXAgPiAwID8gY29tcChjdXN0b20sIG51bSwgdG90YWwpIDogY29tcChudW0sIGN1c3RvbSwgdG90YWwpO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNOYU4oeCkpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt4KSkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZiAoKHggfCAwKSAhPT0gMCkgcmV0dXJuIHggfCAwOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvciAoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZiAodGFnX2EgPT09IDI1MCkge1xuICAgICAgICBhID0gYVsxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYgKHRhZ19iID09PSAyNTApIHtcbiAgICAgICAgYiA9IGJbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmICh0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYgKHRhZ19hID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19iID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ19iID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19hID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWdfYSA8IHRhZ19iID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgLy8gdGFnX2EgPSB0YWdfYlxuICAgICAgc3dpdGNoICh0YWdfYSkge1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pIHwgMDtcbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYikgfCAwO1xuICAgICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGluIGNhbWxfY29tcGFyZV92YWxfdGFnXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgICAgICAgXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgICBpZiAoY29tcCAhPT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jYW1sX2N1c3RvbSA8IGIuY2FtbF9jdXN0b20gPyAtMSA6IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgICAgdmFyIHggPSBjb21wKGEsIGIsIHRvdGFsKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCA/IC0xIDogeDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09ICh4IHwgMCkpIHtcbiAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHggfCAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLCB0b3RhbCk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSkge1xuICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAtMSA6IHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4ICE9PSAoeCB8IDApKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4IHwgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgICBhID0gK2E7XG4gICAgICAgICAgYiA9ICtiO1xuICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYSkpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYikpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBMYXp5X3RhZyBvciBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfY29tcGFyZVxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZShhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiAxO1xufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA9PT0gMCk7XG59XG5cbi8vIE1heSByYWlzZVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCh4LCB5KSB7XG4gIHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCwgeSwgZmFsc2UpICE9PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA+PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPiAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA8PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPCAwKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4XG4vL1ZlcnNpb246ID49IDUuMVxudmFyIGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4ID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3JlZ2lzdGVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9ldmVudF9pbmRleFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZWdpc3RlcihldmVudF9uYW1lLCBldmVudF90YWcsIGV2ZW50X3R5cGUpIHtcbiAgY2FtbF9jdXN0b21fZXZlbnRfaW5kZXggKz0gMTtcbiAgcmV0dXJuIFswLCBjYW1sX2N1c3RvbV9ldmVudF9pbmRleCwgZXZlbnRfbmFtZSwgZXZlbnRfdHlwZSwgZXZlbnRfdGFnXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlKF9ldmVudCwgX2V2ZW50X2NvbnRlbnQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZXNvbHZlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3Jlc29sdmUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3N0YXJ0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfc3RhcnRcbi8vVmVyc2lvbjogPj0gNS4wLCA8IDUuMlxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcGF1c2Vcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19wYXVzZVxuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19yZXN1bWVcbi8vVmVyc2lvbjogPj01LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3Jlc3VtZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcmVzdW1lXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19yZXN1bWUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3IoX3RhcmdldCkge1xuICByZXR1cm4ge307XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfZnJlZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2ZyZWVfY3Vyc29yKF9jdXJzb3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfcmVhZF9wb2xsXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19yZWFkX3BvbGwoX2N1cnNvciwgX2NhbGxiYWNrcywgX251bSkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoIGNvbnN0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogenN0ZF9kZWNvbXByZXNzXG4vL1ZlcnNpb246ID49IDUuMVxudmFyIHpzdGRfZGVjb21wcmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG4gIHZhciBhYiA9IEFycmF5QnVmZmVyLFxuICAgIHU4ID0gVWludDhBcnJheSxcbiAgICB1MTYgPSBVaW50MTZBcnJheSxcbiAgICBpMTYgPSBJbnQxNkFycmF5LFxuICAgIGkzMiA9IEludDMyQXJyYXk7XG4gIHZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuc2xpY2UpIHJldHVybiB1OC5wcm90b3R5cGUuc2xpY2UuY2FsbCh2LCBzLCBlKTtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKSBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aCkgZSA9IHYubGVuZ3RoO1xuICAgIHZhciBuID0gbmV3IHU4KGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbiAgfTtcbiAgdmFyIGZpbGwgPSBmdW5jdGlvbiAodiwgbiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuZmlsbCkgcmV0dXJuIHU4LnByb3RvdHlwZS5maWxsLmNhbGwodiwgbiwgcywgZSk7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMCkgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpIGUgPSB2Lmxlbmd0aDtcbiAgICBmb3IgKDsgcyA8IGU7ICsrcykgdltzXSA9IG47XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHZhciBjcHcgPSBmdW5jdGlvbiAodiwgdCwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuY29weVdpdGhpbilcbiAgICAgIHJldHVybiB1OC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKHYsIHQsIHMsIGUpO1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKSBlID0gdi5sZW5ndGg7XG4gICAgd2hpbGUgKHMgPCBlKSB7XG4gICAgICB2W3QrK10gPSB2W3MrK107XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICAgKi9cbiAgLy8gZXJyb3IgY29kZXNcbiAgdmFyIGVjID0gW1xuICAgIFwiaW52YWxpZCB6c3RkIGRhdGFcIixcbiAgICBcIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQilcIixcbiAgICBcImludmFsaWQgYmxvY2sgdHlwZVwiLFxuICAgIFwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoXCIsXG4gICAgXCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixcbiAgICBcInVuZXhwZWN0ZWQgRU9GXCIsXG4gIF07XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoIW50KSB0aHJvdyBlO1xuICAgIHJldHVybiBlO1xuICB9O1xuICB2YXIgcmIgPSBmdW5jdGlvbiAoZCwgYiwgbikge1xuICAgIHZhciBpID0gMCxcbiAgICAgIG8gPSAwO1xuICAgIGZvciAoOyBpIDwgbjsgKytpKSBvIHw9IGRbYisrXSA8PCAoaSA8PCAzKTtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgdmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7XG4gIH07XG4gIC8vIHJlYWQgWnN0YW5kYXJkIGZyYW1lIGhlYWRlclxuICB2YXIgcnpmaCA9IGZ1bmN0aW9uIChkYXQsIHcpIHtcbiAgICB2YXIgbjMgPSBkYXRbMF0gfCAoZGF0WzFdIDw8IDgpIHwgKGRhdFsyXSA8PCAxNik7XG4gICAgaWYgKG4zID09PSAweDJmYjUyOCAmJiBkYXRbM10gPT09IDI1Mykge1xuICAgICAgLy8gWnN0YW5kYXJkXG4gICAgICB2YXIgZmxnID0gZGF0WzRdO1xuICAgICAgLy8gICAgc2luZ2xlIHNlZ21lbnQgICAgICAgY2hlY2tzdW0gICAgICAgICAgICAgZGljdCBmbGFnICAgICBmcmFtZSBjb250ZW50IGZsYWdcbiAgICAgIHZhciBzcyA9IChmbGcgPj4gNSkgJiAxLFxuICAgICAgICBjYyA9IChmbGcgPj4gMikgJiAxLFxuICAgICAgICBkZiA9IGZsZyAmIDMsXG4gICAgICAgIGZjZiA9IGZsZyA+PiA2O1xuICAgICAgaWYgKGZsZyAmIDgpIGVycigwKTtcbiAgICAgIC8vIGJ5dGVcbiAgICAgIHZhciBidCA9IDYgLSBzcztcbiAgICAgIC8vIGRpY3QgYnl0ZXNcbiAgICAgIHZhciBkYiA9IGRmID09PSAzID8gNCA6IGRmO1xuICAgICAgLy8gZGljdGlvbmFyeSBpZFxuICAgICAgdmFyIGRpID0gcmIoZGF0LCBidCwgZGIpO1xuICAgICAgYnQgKz0gZGI7XG4gICAgICAvLyBmcmFtZSBzaXplIGJ5dGVzXG4gICAgICB2YXIgZnNiID0gZmNmID8gMSA8PCBmY2YgOiBzcztcbiAgICAgIC8vIGZyYW1lIHNvdXJjZSBzaXplXG4gICAgICB2YXIgZnNzID0gcmIoZGF0LCBidCwgZnNiKSArIChmY2YgPT09IDEgJiYgMjU2KTtcbiAgICAgIC8vIHdpbmRvdyBzaXplXG4gICAgICB2YXIgd3MgPSBmc3M7XG4gICAgICBpZiAoIXNzKSB7XG4gICAgICAgIC8vIHdpbmRvdyBkZXNjcmlwdG9yXG4gICAgICAgIHZhciB3YiA9IDEgPDwgKDEwICsgKGRhdFs1XSA+PiAzKSk7XG4gICAgICAgIHdzID0gd2IgKyAod2IgPj4gMykgKiAoZGF0WzVdICYgNyk7XG4gICAgICB9XG4gICAgICBpZiAod3MgPiAyMTQ1Mzg2NDk2KSBlcnIoMSk7XG4gICAgICB2YXIgYnVmID0gbmV3IHU4KCh3ID09PSAxID8gZnNzIHx8IHdzIDogdyA/IDAgOiB3cykgKyAxMik7XG4gICAgICAoYnVmWzBdID0gMSksIChidWZbNF0gPSA0KSwgKGJ1Zls4XSA9IDgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYjogYnQgKyBmc2IsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGQ6IGRpLFxuICAgICAgICB3OiB3ICYmIHcgIT09IDEgPyB3IDogYnVmLnN1YmFycmF5KDEyKSxcbiAgICAgICAgZTogd3MsXG4gICAgICAgIG86IG5ldyBpMzIoYnVmLmJ1ZmZlciwgMCwgMyksXG4gICAgICAgIHU6IGZzcyxcbiAgICAgICAgYzogY2MsXG4gICAgICAgIG06IE1hdGgubWluKDEzMTA3Miwgd3MpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCgobjMgPj4gNCkgfCAoZGF0WzNdIDw8IDIwKSkgPT09IDB4MTg0ZDJhNSkge1xuICAgICAgLy8gc2tpcHBhYmxlXG4gICAgICByZXR1cm4gYjQoZGF0LCA0KSArIDg7XG4gICAgfVxuICAgIGVycigwKTtcbiAgfTtcbiAgLy8gbW9zdCBzaWduaWZpY2FudCBiaXQgZm9yIG5vbnplcm9cbiAgdmFyIG1zYiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgYml0cyA9IDA7XG4gICAgZm9yICg7IDEgPDwgYml0cyA8PSB2YWw7ICsrYml0cyk7XG4gICAgcmV0dXJuIGJpdHMgLSAxO1xuICB9O1xuICAvLyByZWFkIGZpbml0ZSBzdGF0ZSBlbnRyb3B5XG4gIHZhciByZnNlID0gZnVuY3Rpb24gKGRhdCwgYnQsIG1hbCkge1xuICAgIC8vIHRhYmxlIHBvc1xuICAgIHZhciB0cG9zID0gKGJ0IDw8IDMpICsgNDtcbiAgICAvLyBhY2N1cmFjeSBsb2dcbiAgICB2YXIgYWwgPSAoZGF0W2J0XSAmIDE1KSArIDU7XG4gICAgaWYgKGFsID4gbWFsKSBlcnIoMyk7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzeiA9IDEgPDwgYWw7XG4gICAgLy8gcHJvYmFiaWxpdGllcyBzeW1ib2xzICByZXBlYXQgICBpbmRleCAgIGhpZ2ggdGhyZXNob2xkXG4gICAgdmFyIHByb2JzID0gc3osXG4gICAgICBzeW0gPSAtMSxcbiAgICAgIHJlID0gLTEsXG4gICAgICBpID0gLTEsXG4gICAgICBodCA9IHN6O1xuICAgIC8vIG9wdGltaXphdGlvbjogc2luZ2xlIGFsbG9jYXRpb24gaXMgbXVjaCBmYXN0ZXJcbiAgICB2YXIgYnVmID0gbmV3IGFiKDUxMiArIChzeiA8PCAyKSk7XG4gICAgdmFyIGZyZXEgPSBuZXcgaTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICAvLyBzYW1lIHZpZXcgYXMgZnJlcVxuICAgIHZhciBkc3RhdGUgPSBuZXcgdTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICB2YXIgbnN0YXRlID0gbmV3IHUxNihidWYsIDUxMiwgc3opO1xuICAgIHZhciBiYjEgPSA1MTIgKyAoc3ogPDwgMSk7XG4gICAgdmFyIHN5bXMgPSBuZXcgdTgoYnVmLCBiYjEsIHN6KTtcbiAgICB2YXIgbmJpdHMgPSBuZXcgdTgoYnVmLCBiYjEgKyBzeik7XG4gICAgd2hpbGUgKHN5bSA8IDI1NSAmJiBwcm9icyA+IDApIHtcbiAgICAgIHZhciBiaXRzID0gbXNiKHByb2JzICsgMSk7XG4gICAgICB2YXIgY2J0ID0gdHBvcyA+PiAzO1xuICAgICAgLy8gbWFza1xuICAgICAgdmFyIG1zayA9ICgxIDw8IChiaXRzICsgMSkpIC0gMTtcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICh0cG9zICYgNykpICZcbiAgICAgICAgbXNrO1xuICAgICAgLy8gbWFzayAoMSBmZXdlciBiaXQpXG4gICAgICB2YXIgbXNrMWZiID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgLy8gbWF4IHNtYWxsIHZhbHVlXG4gICAgICB2YXIgbXN2ID0gbXNrIC0gcHJvYnMgLSAxO1xuICAgICAgLy8gc21hbGwgdmFsdWVcbiAgICAgIHZhciBzdmFsID0gdmFsICYgbXNrMWZiO1xuICAgICAgaWYgKHN2YWwgPCBtc3YpICh0cG9zICs9IGJpdHMpLCAodmFsID0gc3ZhbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHBvcyArPSBiaXRzICsgMTtcbiAgICAgICAgaWYgKHZhbCA+IG1zazFmYikgdmFsIC09IG1zdjtcbiAgICAgIH1cbiAgICAgIGZyZXFbKytzeW1dID0gLS12YWw7XG4gICAgICBpZiAodmFsID09PSAtMSkge1xuICAgICAgICBwcm9icyArPSB2YWw7XG4gICAgICAgIHN5bXNbLS1odF0gPSBzeW07XG4gICAgICB9IGVsc2UgcHJvYnMgLT0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIHJlcGVhdCBieXRlXG4gICAgICAgICAgdmFyIHJidCA9IHRwb3MgPj4gMztcbiAgICAgICAgICByZSA9ICgoZGF0W3JidF0gfCAoZGF0W3JidCArIDFdIDw8IDgpKSA+PiAodHBvcyAmIDcpKSAmIDM7XG4gICAgICAgICAgdHBvcyArPSAyO1xuICAgICAgICAgIHN5bSArPSByZTtcbiAgICAgICAgfSB3aGlsZSAocmUgPT09IDMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3ltID4gMjU1IHx8IHByb2JzKSBlcnIoMCk7XG4gICAgdmFyIHN5bXBvcyA9IDA7XG4gICAgLy8gc3ltIHN0ZXAgKGNvcHJpbWUgd2l0aCBzeiAtIGZvcm11bGEgZnJvbSB6c3RkIHNvdXJjZSlcbiAgICB2YXIgc3N0ZXAgPSAoc3ogPj4gMSkgKyAoc3ogPj4gMykgKyAzO1xuICAgIC8vIHN5bSBtYXNrXG4gICAgdmFyIHNtYXNrID0gc3ogLSAxO1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDw9IHN5bTsgKytzKSB7XG4gICAgICB2YXIgc2YgPSBmcmVxW3NdO1xuICAgICAgaWYgKHNmIDwgMSkge1xuICAgICAgICBkc3RhdGVbc10gPSAtc2Y7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIHR3byBsb29wcyBpbiB6c3RkIHRvIGF2b2lkIGJyYW5jaGluZywgYnV0IGFzIEpTIGlzIGhpZ2hlci1sZXZlbCB0aGF0IGlzIHVubmVjZXNzYXJ5XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2Y7ICsraSkge1xuICAgICAgICBzeW1zW3N5bXBvc10gPSBzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgc3ltcG9zID0gKHN5bXBvcyArIHNzdGVwKSAmIHNtYXNrO1xuICAgICAgICB9IHdoaWxlIChzeW1wb3MgPj0gaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBzcHJlYWRpbmcgc3ltYm9scywgc2hvdWxkIGJlIHplcm8gYWdhaW5cbiAgICBpZiAoc3ltcG9zKSBlcnIoMCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN6OyArK2kpIHtcbiAgICAgIC8vIG5leHQgc3RhdGVcbiAgICAgIHZhciBucyA9IGRzdGF0ZVtzeW1zW2ldXSsrO1xuICAgICAgLy8gbnVtIGJpdHNcbiAgICAgIHZhciBuYiA9IChuYml0c1tpXSA9IGFsIC0gbXNiKG5zKSk7XG4gICAgICBuc3RhdGVbaV0gPSAobnMgPDwgbmIpIC0gc3o7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAodHBvcyArIDcpID4+IDMsXG4gICAgICB7XG4gICAgICAgIGI6IGFsLFxuICAgICAgICBzOiBzeW1zLFxuICAgICAgICBuOiBuYml0cyxcbiAgICAgICAgdDogbnN0YXRlLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICAvLyByZWFkIGh1ZmZtYW5cbiAgdmFyIHJodSA9IGZ1bmN0aW9uIChkYXQsIGJ0KSB7XG4gICAgLy8gIGluZGV4ICB3ZWlnaHQgY291bnRcbiAgICB2YXIgaSA9IDAsXG4gICAgICB3YyA9IC0xO1xuICAgIC8vICAgIGJ1ZmZlciAgICAgICAgICAgICBoZWFkZXIgYnl0ZVxuICAgIHZhciBidWYgPSBuZXcgdTgoMjkyKSxcbiAgICAgIGhiID0gZGF0W2J0XTtcbiAgICAvLyBodWZmbWFuIHdlaWdodHNcbiAgICB2YXIgaHcgPSBidWYuc3ViYXJyYXkoMCwgMjU2KTtcbiAgICAvLyByYW5rIGNvdW50XG4gICAgdmFyIHJjID0gYnVmLnN1YmFycmF5KDI1NiwgMjY4KTtcbiAgICAvLyByYW5rIGluZGV4XG4gICAgdmFyIHJpID0gbmV3IHUxNihidWYuYnVmZmVyLCAyNjgpO1xuICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgYnQgaXMgMSBsZXNzIHRoYW4gZXhwZWN0ZWRcbiAgICBpZiAoaGIgPCAxMjgpIHtcbiAgICAgIC8vIGVuZCBieXRlLCBmc2UgZGVjb2RlIHRhYmxlXG4gICAgICB2YXIgX2EgPSByZnNlKGRhdCwgYnQgKyAxLCA2KSxcbiAgICAgICAgZWJ0ID0gX2FbMF0sXG4gICAgICAgIGZkdCA9IF9hWzFdO1xuICAgICAgYnQgKz0gaGI7XG4gICAgICB2YXIgZXBvcyA9IGVidCA8PCAzO1xuICAgICAgLy8gbGFzdCBieXRlXG4gICAgICB2YXIgbGIgPSBkYXRbYnRdO1xuICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgLy8gIHN0YXRlMSAgIHN0YXRlMiAgIHN0YXRlMSBiaXRzICAgc3RhdGUyIGJpdHNcbiAgICAgIHZhciBzdDEgPSAwLFxuICAgICAgICBzdDIgPSAwLFxuICAgICAgICBidHIxID0gZmR0LmIsXG4gICAgICAgIGJ0cjIgPSBidHIxO1xuICAgICAgLy8gZnNlIHBvc1xuICAgICAgLy8gcHJlLWluY3JlbWVudCB0byBhY2NvdW50IGZvciBvcmlnaW5hbCBkZWZpY2l0IG9mIDFcbiAgICAgIHZhciBmcG9zID0gKCsrYnQgPDwgMykgLSA4ICsgbXNiKGxiKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgZnBvcyAtPSBidHIxO1xuICAgICAgICBpZiAoZnBvcyA8IGVwb3MpIGJyZWFrO1xuICAgICAgICB2YXIgY2J0ID0gZnBvcyA+PiAzO1xuICAgICAgICBzdDEgKz1cbiAgICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKGZwb3MgJiA3KSkgJiAoKDEgPDwgYnRyMSkgLSAxKTtcbiAgICAgICAgaHdbKyt3Y10gPSBmZHQuc1tzdDFdO1xuICAgICAgICBmcG9zIC09IGJ0cjI7XG4gICAgICAgIGlmIChmcG9zIDwgZXBvcykgYnJlYWs7XG4gICAgICAgIGNidCA9IGZwb3MgPj4gMztcbiAgICAgICAgc3QyICs9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChmcG9zICYgNykpICYgKCgxIDw8IGJ0cjIpIC0gMSk7XG4gICAgICAgIGh3Wysrd2NdID0gZmR0LnNbc3QyXTtcbiAgICAgICAgYnRyMSA9IGZkdC5uW3N0MV07XG4gICAgICAgIHN0MSA9IGZkdC50W3N0MV07XG4gICAgICAgIGJ0cjIgPSBmZHQubltzdDJdO1xuICAgICAgICBzdDIgPSBmZHQudFtzdDJdO1xuICAgICAgfVxuICAgICAgaWYgKCsrd2MgPiAyNTUpIGVycigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2MgPSBoYiAtIDEyNztcbiAgICAgIGZvciAoOyBpIDwgd2M7IGkgKz0gMikge1xuICAgICAgICB2YXIgYnl0ZSA9IGRhdFsrK2J0XTtcbiAgICAgICAgaHdbaV0gPSBieXRlID4+IDQ7XG4gICAgICAgIGh3W2kgKyAxXSA9IGJ5dGUgJiAxNTtcbiAgICAgIH1cbiAgICAgICsrYnQ7XG4gICAgfVxuICAgIC8vIHdlaWdodCBleHBvbmVudGlhbCBzdW1cbiAgICB2YXIgd2VzID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIHd0ID0gaHdbaV07XG4gICAgICAvLyBiaXRzIG11c3QgYmUgYXQgbW9zdCAxMSwgc2FtZSBhcyB3ZWlnaHRcbiAgICAgIGlmICh3dCA+IDExKSBlcnIoMCk7XG4gICAgICB3ZXMgKz0gd3QgJiYgMSA8PCAod3QgLSAxKTtcbiAgICB9XG4gICAgLy8gbWF4IGJpdHNcbiAgICB2YXIgbWIgPSBtc2Iod2VzKSArIDE7XG4gICAgLy8gdGFibGUgc2l6ZVxuICAgIHZhciB0cyA9IDEgPDwgbWI7XG4gICAgLy8gcmVtYWluaW5nIHN1bVxuICAgIHZhciByZW0gPSB0cyAtIHdlcztcbiAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBpZiAocmVtICYgKHJlbSAtIDEpKSBlcnIoMCk7XG4gICAgaHdbd2MrK10gPSBtc2IocmVtKSArIDE7XG4gICAgZm9yIChpID0gMDsgaSA8IHdjOyArK2kpIHtcbiAgICAgIHZhciB3dCA9IGh3W2ldO1xuICAgICAgKytyY1soaHdbaV0gPSB3dCAmJiBtYiArIDEgLSB3dCldO1xuICAgIH1cbiAgICAvLyBodWYgYnVmXG4gICAgdmFyIGhidWYgPSBuZXcgdTgodHMgPDwgMSk7XG4gICAgLy8gICAgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICBudW0gYml0c1xuICAgIHZhciBzeW1zID0gaGJ1Zi5zdWJhcnJheSgwLCB0cyksXG4gICAgICBuYiA9IGhidWYuc3ViYXJyYXkodHMpO1xuICAgIHJpW21iXSA9IDA7XG4gICAgZm9yIChpID0gbWI7IGkgPiAwOyAtLWkpIHtcbiAgICAgIHZhciBwdiA9IHJpW2ldO1xuICAgICAgZmlsbChuYiwgaSwgcHYsIChyaVtpIC0gMV0gPSBwdiArIHJjW2ldICogKDEgPDwgKG1iIC0gaSkpKSk7XG4gICAgfVxuICAgIGlmIChyaVswXSAhPT0gdHMpIGVycigwKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIGJpdHMgPSBod1tpXTtcbiAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgIHZhciBjb2RlID0gcmlbYml0c107XG4gICAgICAgIGZpbGwoc3ltcywgaSwgY29kZSwgKHJpW2JpdHNdID0gY29kZSArICgxIDw8IChtYiAtIGJpdHMpKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgYnQsXG4gICAgICB7XG4gICAgICAgIG46IG5iLFxuICAgICAgICBiOiBtYixcbiAgICAgICAgczogc3ltcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgLy8gVGFibGVzIGdlbmVyYXRlZCB1c2luZyB0aGlzOlxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovYTk3OTQ1MmQ0MzU1OTkyY2JmOGYyNTdjYmZmYzllZGRcbiAgLy8gZGVmYXVsdCBsaXRlcmFsIGxlbmd0aCB0YWJsZVxuICB2YXIgZGxsdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICA4MSwgMTYsIDk5LCAxNDAsIDQ5LCAxOTgsIDI0LCA5OSwgMTIsIDMzLCAxOTYsIDI0LCA5OSwgMTAyLCAxMDIsIDEzNCwgNzAsXG4gICAgICAxNDYsIDQsXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG1hdGNoIGxlbmd0aCB0YWJsZVxuICB2YXIgZG1sdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICAzMywgMjAsIDE5NiwgMjQsIDk5LCAxNDAsIDMzLCAxMzIsIDE2LCA2NiwgOCwgMzMsIDEzMiwgMTYsIDY2LCA4LCAzMywgNjgsXG4gICAgICA2OCwgNjgsIDY4LCA2OCwgNjgsIDY4LCA2OCwgMzYsIDksXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG9mZnNldCBjb2RlIHRhYmxlXG4gIHZhciBkb2N0ID0gLyojX19QVVJFX18gKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbMzIsIDEzMiwgMTYsIDY2LCAxMDIsIDcwLCA2OCwgNjgsIDY4LCA2OCwgMzYsIDczLCAyXSksXG4gICAgMCxcbiAgICA1LFxuICApWzFdO1xuICAvLyBiaXRzIHRvIGJhc2VsaW5lXG4gIHZhciBiMmJsID0gZnVuY3Rpb24gKGIsIHMpIHtcbiAgICB2YXIgbGVuID0gYi5sZW5ndGgsXG4gICAgICBibCA9IG5ldyBpMzIobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBibFtpXSA9IHM7XG4gICAgICBzICs9IDEgPDwgYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJsO1xuICB9O1xuICAvLyBsaXRlcmFsIGxlbmd0aCBiaXRzXG4gIHZhciBsbGIgPSAvKiNfX1BVUkVfXyAqLyBuZXcgdTgoXG4gICAgLyojX19QVVJFX18gKi8gbmV3IGkzMihbXG4gICAgICAwLCAwLCAwLCAwLCAxNjg0MzAwOSwgNTA1Mjg3NzAsIDEzNDY3ODAyMCwgMjAyMDUwMDU3LCAyNjk0MjIwOTMsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgMzYsXG4gICk7XG4gIC8vIGxpdGVyYWwgbGVuZ3RoIGJhc2VsaW5lXG4gIHZhciBsbGJsID0gLyojX19QVVJFX18gKi8gYjJibChsbGIsIDApO1xuICAvLyBtYXRjaCBsZW5ndGggYml0c1xuICB2YXIgbWxiID0gLyojX19QVVJFX18gKi8gbmV3IHU4KFxuICAgIC8qI19fUFVSRV9fICovIG5ldyBpMzIoW1xuICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NDMwMDksIDUwNTI4NzcwLCAxMTc3NjkyMjAsIDE4NTIwNzA0OCxcbiAgICAgIDI1MjU3OTA4NCwgMTYsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgNTMsXG4gICk7XG4gIC8vIG1hdGNoIGxlbmd0aCBiYXNlbGluZVxuICB2YXIgbWxibCA9IC8qI19fUFVSRV9fICovIGIyYmwobWxiLCAzKTtcbiAgLy8gZGVjb2RlIGh1ZmZtYW4gc3RyZWFtXG4gIHZhciBkaHUgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGxlbiA9IGRhdC5sZW5ndGgsXG4gICAgICBzcyA9IG91dC5sZW5ndGgsXG4gICAgICBsYiA9IGRhdFtsZW4gLSAxXSxcbiAgICAgIG1zayA9ICgxIDw8IGh1LmIpIC0gMSxcbiAgICAgIGViID0gLWh1LmI7XG4gICAgaWYgKCFsYikgZXJyKDApO1xuICAgIHZhciBzdCA9IDAsXG4gICAgICBidHIgPSBodS5iLFxuICAgICAgcG9zID0gKGxlbiA8PCAzKSAtIDggKyBtc2IobGIpIC0gYnRyLFxuICAgICAgaSA9IC0xO1xuICAgIHdoaWxlIChwb3MgPiBlYiAmJiBpIDwgc3MpIHtcbiAgICAgIHZhciBjYnQgPSBwb3MgPj4gMztcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpIHwgKGRhdFtjYnQgKyAyXSA8PCAxNikpID4+IChwb3MgJiA3KTtcbiAgICAgIHN0ID0gKChzdCA8PCBidHIpIHwgdmFsKSAmIG1zaztcbiAgICAgIG91dFsrK2ldID0gaHUuc1tzdF07XG4gICAgICBwb3MgLT0gYnRyID0gaHUubltzdF07XG4gICAgfVxuICAgIGlmIChwb3MgIT09IGViIHx8IGkgKyAxICE9PSBzcykgZXJyKDApO1xuICB9O1xuICAvLyBkZWNvZGUgaHVmZm1hbiBzdHJlYW0gNHhcbiAgLy8gVE9ETzogdXNlIHdvcmtlcnMgdG8gcGFyYWxsZWxpemVcbiAgdmFyIGRodTQgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGJ0ID0gNjtcbiAgICB2YXIgc3MgPSBvdXQubGVuZ3RoLFxuICAgICAgc3oxID0gKHNzICsgMykgPj4gMixcbiAgICAgIHN6MiA9IHN6MSA8PCAxLFxuICAgICAgc3ozID0gc3oxICsgc3oyO1xuICAgIGRodShcbiAgICAgIGRhdC5zdWJhcnJheShidCwgKGJ0ICs9IGRhdFswXSB8IChkYXRbMV0gPDwgOCkpKSxcbiAgICAgIG91dC5zdWJhcnJheSgwLCBzejEpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbMl0gfCAoZGF0WzNdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oxLCBzejIpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbNF0gfCAoZGF0WzVdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oyLCBzejMpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoZGF0LnN1YmFycmF5KGJ0KSwgb3V0LnN1YmFycmF5KHN6MyksIGh1KTtcbiAgfTtcbiAgLy8gcmVhZCBac3RhbmRhcmQgYmxvY2tcbiAgdmFyIHJ6YiA9IGZ1bmN0aW9uIChkYXQsIHN0LCBvdXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJ0ID0gc3QuYjtcbiAgICAvLyAgICBieXRlIDAgICAgICAgIGJsb2NrIHR5cGVcbiAgICB2YXIgYjAgPSBkYXRbYnRdLFxuICAgICAgYnR5cGUgPSAoYjAgPj4gMSkgJiAzO1xuICAgIHN0LmwgPSBiMCAmIDE7XG4gICAgdmFyIHN6ID0gKGIwID4+IDMpIHwgKGRhdFtidCArIDFdIDw8IDUpIHwgKGRhdFtidCArIDJdIDw8IDEzKTtcbiAgICAvLyBlbmQgYnl0ZSBmb3IgYmxvY2tcbiAgICB2YXIgZWJ0ID0gKGJ0ICs9IDMpICsgc3o7XG4gICAgaWYgKGJ0eXBlID09PSAxKSB7XG4gICAgICBpZiAoYnQgPj0gZGF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3QuYiA9IGJ0ICsgMTtcbiAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgZmlsbChvdXQsIGRhdFtidF0sIHN0LnksIChzdC55ICs9IHN6KSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsbChuZXcgdTgoc3opLCBkYXRbYnRdKTtcbiAgICB9XG4gICAgaWYgKGVidCA+IGRhdC5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoYnR5cGUgPT09IDApIHtcbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICBpZiAob3V0KSB7XG4gICAgICAgIG91dC5zZXQoZGF0LnN1YmFycmF5KGJ0LCBlYnQpLCBzdC55KTtcbiAgICAgICAgc3QueSArPSBzejtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGMoZGF0LCBidCwgZWJ0KTtcbiAgICB9XG4gICAgaWYgKGJ0eXBlID09PSAyKSB7XG4gICAgICAvLyAgICBieXRlIDMgICAgICAgIGxpdCBidHlwZSAgICAgc2l6ZSBmb3JtYXRcbiAgICAgIHZhciBiMyA9IGRhdFtidF0sXG4gICAgICAgIGxidCA9IGIzICYgMyxcbiAgICAgICAgc2YgPSAoYjMgPj4gMikgJiAzO1xuICAgICAgLy8gbGl0IHNyYyBzaXplICBsaXQgY21wIHN6IDQgc3RyZWFtc1xuICAgICAgdmFyIGxzcyA9IGIzID4+IDQsXG4gICAgICAgIGxjcyA9IDAsXG4gICAgICAgIHM0ID0gMDtcbiAgICAgIGlmIChsYnQgPCAyKSB7XG4gICAgICAgIGlmIChzZiAmIDEpIGxzcyB8PSAoZGF0WysrYnRdIDw8IDQpIHwgKHNmICYgMiAmJiBkYXRbKytidF0gPDwgMTIpO1xuICAgICAgICBlbHNlIGxzcyA9IGIzID4+IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHNmO1xuICAgICAgICBpZiAoc2YgPCAyKVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSAmIDYzKSA8PCA0KSxcbiAgICAgICAgICAgIChsY3MgPSAoZGF0W2J0XSA+PiA2KSB8IChkYXRbKytidF0gPDwgMikpO1xuICAgICAgICBlbHNlIGlmIChzZiA9PT0gMilcbiAgICAgICAgICAobHNzIHw9IChkYXRbKytidF0gPDwgNCkgfCAoKGRhdFsrK2J0XSAmIDMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gMikgfCAoZGF0WysrYnRdIDw8IDYpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSA8PCA0KSB8ICgoZGF0WysrYnRdICYgNjMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gNikgfCAoZGF0WysrYnRdIDw8IDIpIHwgKGRhdFsrK2J0XSA8PCAxMCkpO1xuICAgICAgfVxuICAgICAgKytidDtcbiAgICAgIC8vIGFkZCBsaXRlcmFscyB0byBlbmQgLSBjYW4gbmV2ZXIgb3ZlcmxhcCB3aXRoIGJhY2tyZWZlcmVuY2VzIGJlY2F1c2UgdW51c2VkIGxpdGVyYWxzIGFsd2F5cyBhcHBlbmRlZFxuICAgICAgdmFyIGJ1ZiA9IG91dCA/IG91dC5zdWJhcnJheShzdC55LCBzdC55ICsgc3QubSkgOiBuZXcgdTgoc3QubSk7XG4gICAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgbGl0ZXJhbHNcbiAgICAgIHZhciBzcGwgPSBidWYubGVuZ3RoIC0gbHNzO1xuICAgICAgaWYgKGxidCA9PT0gMCkgYnVmLnNldChkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsc3MpKSwgc3BsKTtcbiAgICAgIGVsc2UgaWYgKGxidCA9PT0gMSkgZmlsbChidWYsIGRhdFtidCsrXSwgc3BsKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBodWZmbWFuIHRhYmxlXG4gICAgICAgIHZhciBodSA9IHN0Lmg7XG4gICAgICAgIGlmIChsYnQgPT09IDIpIHtcbiAgICAgICAgICB2YXIgaHVkID0gcmh1KGRhdCwgYnQpO1xuICAgICAgICAgIC8vIHN1YnRyYWN0IGRlc2NyaXB0aW9uIGxlbmd0aFxuICAgICAgICAgIGxjcyArPSBidCAtIChidCA9IGh1ZFswXSk7XG4gICAgICAgICAgc3QuaCA9IGh1ID0gaHVkWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCFodSkgZXJyKDApO1xuICAgICAgICAoczQgPyBkaHU0IDogZGh1KShkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsY3MpKSwgYnVmLnN1YmFycmF5KHNwbCksIGh1KTtcbiAgICAgIH1cbiAgICAgIC8vIG51bSBzZXF1ZW5jZXNcbiAgICAgIHZhciBucyA9IGRhdFtidCsrXTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBpZiAobnMgPT09IDI1NSkgbnMgPSAoZGF0W2J0KytdIHwgKGRhdFtidCsrXSA8PCA4KSkgKyAweDdmMDA7XG4gICAgICAgIGVsc2UgaWYgKG5zID4gMTI3KSBucyA9ICgobnMgLSAxMjgpIDw8IDgpIHwgZGF0W2J0KytdO1xuICAgICAgICAvLyBzeW1ib2wgY29tcHJlc3Npb24gbW9kZXNcbiAgICAgICAgdmFyIHNjbSA9IGRhdFtidCsrXTtcbiAgICAgICAgaWYgKHNjbSAmIDMpIGVycigwKTtcbiAgICAgICAgdmFyIGR0cyA9IFtkbWx0LCBkb2N0LCBkbGx0XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPiAtMTsgLS1pKSB7XG4gICAgICAgICAgdmFyIG1kID0gKHNjbSA+PiAoKGkgPDwgMSkgKyAyKSkgJiAzO1xuICAgICAgICAgIGlmIChtZCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmxlIGJ1ZlxuICAgICAgICAgICAgdmFyIHJidWYgPSBuZXcgdTgoWzAsIDAsIGRhdFtidCsrXV0pO1xuICAgICAgICAgICAgZHRzW2ldID0ge1xuICAgICAgICAgICAgICBzOiByYnVmLnN1YmFycmF5KDIsIDMpLFxuICAgICAgICAgICAgICBuOiByYnVmLnN1YmFycmF5KDAsIDEpLFxuICAgICAgICAgICAgICB0OiBuZXcgdTE2KHJidWYuYnVmZmVyLCAwLCAxKSxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMikge1xuICAgICAgICAgICAgLy8gYWNjdXJhY3kgbG9nIDggZm9yIG9mZnNldHMsIDkgZm9yIG90aGVyc1xuICAgICAgICAgICAgKF9hID0gcmZzZShkYXQsIGJ0LCA5IC0gKGkgJiAxKSkpLCAoYnQgPSBfYVswXSksIChkdHNbaV0gPSBfYVsxXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKCFzdC50KSBlcnIoMCk7XG4gICAgICAgICAgICBkdHNbaV0gPSBzdC50W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX2IgPSAoc3QudCA9IGR0cyksXG4gICAgICAgICAgbWx0ID0gX2JbMF0sXG4gICAgICAgICAgb2N0ID0gX2JbMV0sXG4gICAgICAgICAgbGx0ID0gX2JbMl07XG4gICAgICAgIHZhciBsYiA9IGRhdFtlYnQgLSAxXTtcbiAgICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgICB2YXIgc3BvcyA9IChlYnQgPDwgMykgLSA4ICsgbXNiKGxiKSAtIGxsdC5iLFxuICAgICAgICAgIGNidCA9IHNwb3MgPj4gMyxcbiAgICAgICAgICBvdWJ0ID0gMDtcbiAgICAgICAgdmFyIGxzdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IGxsdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBvY3QuYikgPj4gMztcbiAgICAgICAgdmFyIG9zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG9jdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbHQuYikgPj4gMztcbiAgICAgICAgdmFyIG1zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG1sdC5iKSAtIDEpO1xuICAgICAgICBmb3IgKCsrbnM7IC0tbnM7ICkge1xuICAgICAgICAgIHZhciBsbGMgPSBsbHQuc1tsc3RdO1xuICAgICAgICAgIHZhciBsYnRyID0gbGx0Lm5bbHN0XTtcbiAgICAgICAgICB2YXIgbWxjID0gbWx0LnNbbXN0XTtcbiAgICAgICAgICB2YXIgbWJ0ciA9IG1sdC5uW21zdF07XG4gICAgICAgICAgdmFyIG9mYyA9IG9jdC5zW29zdF07XG4gICAgICAgICAgdmFyIG9idHIgPSBvY3Qubltvc3RdO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IG9mYykgPj4gMztcbiAgICAgICAgICB2YXIgb2ZwID0gMSA8PCBvZmM7XG4gICAgICAgICAgdmFyIG9mZiA9XG4gICAgICAgICAgICBvZnAgK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICAgKGRhdFtjYnQgKyAyXSA8PCAxNikgfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDNdIDw8IDI0KSkgPj4+XG4gICAgICAgICAgICAgIChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKG9mcCAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbGJbbWxjXSkgPj4gMztcbiAgICAgICAgICB2YXIgbWwgPVxuICAgICAgICAgICAgbWxibFttbGNdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICAgICAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBtbGJbbWxjXSkgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gbGxiW2xsY10pID4+IDM7XG4gICAgICAgICAgdmFyIGxsID1cbiAgICAgICAgICAgIGxsYmxbbGxjXSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkgfCAoZGF0W2NidCArIDJdIDw8IDE2KSkgPj5cbiAgICAgICAgICAgICAgKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbGxiW2xsY10pIC0gMSkpO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IGxidHIpID4+IDM7XG4gICAgICAgICAgbHN0ID1cbiAgICAgICAgICAgIGxsdC50W2xzdF0gK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpKSA+PiAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBsYnRyKSAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtYnRyKSA+PiAzO1xuICAgICAgICAgIG1zdCA9XG4gICAgICAgICAgICBtbHQudFttc3RdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbWJ0cikgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gb2J0cikgPj4gMztcbiAgICAgICAgICBvc3QgPVxuICAgICAgICAgICAgb2N0LnRbb3N0XSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKCgxIDw8IG9idHIpIC0gMSkpO1xuICAgICAgICAgIGlmIChvZmYgPiAzKSB7XG4gICAgICAgICAgICBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgIHN0Lm9bMV0gPSBzdC5vWzBdO1xuICAgICAgICAgICAgc3Qub1swXSA9IG9mZiAtPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gb2ZmIC0gKGxsICE9PSAwKTtcbiAgICAgICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgICAgb2ZmID0gaWR4ID09PSAzID8gc3Qub1swXSAtIDEgOiBzdC5vW2lkeF07XG4gICAgICAgICAgICAgIGlmIChpZHggPiAxKSBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgICAgc3Qub1sxXSA9IHN0Lm9bMF07XG4gICAgICAgICAgICAgIHN0Lm9bMF0gPSBvZmY7XG4gICAgICAgICAgICB9IGVsc2Ugb2ZmID0gc3Qub1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbDsgKytpKSB7XG4gICAgICAgICAgICBidWZbb3VidCArIGldID0gYnVmW3NwbCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICAob3VidCArPSBsbCksIChzcGwgKz0gbGwpO1xuICAgICAgICAgIHZhciBzdGluID0gb3VidCAtIG9mZjtcbiAgICAgICAgICBpZiAoc3RpbiA8IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAtc3RpbjtcbiAgICAgICAgICAgIHZhciBicyA9IHN0LmUgKyBzdGluO1xuICAgICAgICAgICAgaWYgKGxlbiA+IG1sKSBsZW4gPSBtbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgYnVmW291YnQgKyBpXSA9IHN0LndbYnMgKyBpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvdWJ0ICs9IGxlbiksIChtbCAtPSBsZW4pLCAoc3RpbiA9IDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvdWJ0ICsgaV0gPSBidWZbc3RpbiArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdWJ0ICs9IG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdWJ0ICE9PSBzcGwpIHtcbiAgICAgICAgICB3aGlsZSAoc3BsIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmW291YnQrK10gPSBidWZbc3BsKytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIG91YnQgPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAob3V0KSBzdC55ICs9IG91YnQ7XG4gICAgICAgIGVsc2UgYnVmID0gc2xjKGJ1ZiwgMCwgb3VidCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgc3QueSArPSBsc3M7XG4gICAgICAgICAgaWYgKHNwbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsc3M7ICsraSkge1xuICAgICAgICAgICAgICBidWZbaV0gPSBidWZbc3BsICsgaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwbCkgYnVmID0gc2xjKGJ1Ziwgc3BsKTtcbiAgICAgIH1cbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBlcnIoMik7XG4gIH07XG4gIC8vIGNvbmNhdFxuICB2YXIgY2N0ID0gZnVuY3Rpb24gKGJ1ZnMsIG9sKSB7XG4gICAgaWYgKGJ1ZnMubGVuZ3RoID09PSAxKSByZXR1cm4gYnVmc1swXTtcbiAgICB2YXIgYnVmID0gbmV3IHU4KG9sKTtcbiAgICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBidWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2hrID0gYnVmc1tpXTtcbiAgICAgIGJ1Zi5zZXQoY2hrLCBiKTtcbiAgICAgIGIgKz0gY2hrLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBac3RhbmRhcmQgZGF0YVxuICAgKiBAcGFyYW0gZGF0IFRoZSBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSBidWYgVGhlIG91dHB1dCBidWZmZXIuIElmIHVuc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZVxuICAgKiAgICAgICAgICAgIGV4YWN0bHkgZW5vdWdoIG1lbW9yeSB0byBmaXQgdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB5b3VyXG4gICAqICAgICAgICAgICAgZGF0YSBoYXMgbXVsdGlwbGUgZnJhbWVzIGFuZCB5b3Uga25vdyB0aGUgb3V0cHV0IHNpemUsIHNwZWNpZnlpbmdcbiAgICogICAgICAgICAgICBpdCB3aWxsIHlpZWxkIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBkYXRhXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb21wcmVzcyhkYXQsIGJ1Zikge1xuICAgIHZhciBidCA9IDAsXG4gICAgICBidWZzID0gW10sXG4gICAgICBuYiA9ICshYnVmLFxuICAgICAgb2wgPSAwO1xuICAgIHdoaWxlIChkYXQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3QgPSByemZoKGRhdCwgbmIgfHwgYnVmKTtcbiAgICAgIGlmICh0eXBlb2Ygc3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG5iKSB7XG4gICAgICAgICAgYnVmID0gbnVsbDtcbiAgICAgICAgICBpZiAoc3Qudy5sZW5ndGggPT09IHN0LnUpIHtcbiAgICAgICAgICAgIGJ1ZnMucHVzaCgoYnVmID0gc3QudykpO1xuICAgICAgICAgICAgb2wgKz0gc3QudTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgICAgc3QuZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCFzdC5sKSB7XG4gICAgICAgICAgdmFyIGJsayA9IHJ6YihkYXQsIHN0LCBidWYpO1xuICAgICAgICAgIGlmICghYmxrKSBlcnIoNSk7XG4gICAgICAgICAgaWYgKGJ1Zikgc3QuZSA9IHN0Lnk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWZzLnB1c2goYmxrKTtcbiAgICAgICAgICAgIG9sICs9IGJsay5sZW5ndGg7XG4gICAgICAgICAgICBjcHcoc3QudywgMCwgYmxrLmxlbmd0aCk7XG4gICAgICAgICAgICBzdC53LnNldChibGssIHN0LncubGVuZ3RoIC0gYmxrLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ0ID0gc3QuYiArIHN0LmMgKiA0O1xuICAgICAgfSBlbHNlIGJ0ID0gc3Q7XG4gICAgICBkYXQgPSBkYXQuc3ViYXJyYXkoYnQpO1xuICAgIH1cbiAgICByZXR1cm4gY2N0KGJ1ZnMsIG9sKTtcbiAgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0gbnVsbDtcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4wXG4vL1ZlcnNpb246IDwgNS4xLjFcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xudmFyIGNhbWxfZGVjb21wcmVzc19pbnB1dCA9IHpzdGRfZGVjb21wcmVzcztcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4xXG4vL1ZlcnNpb246IDwgNS4yLjBcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSBudWxsO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vVmVyc2lvbjogPj0gNS4yXG4vL1JlcXVpcmVzOiB6c3RkX2RlY29tcHJlc3NcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSB6c3RkX2RlY29tcHJlc3M7XG5cbi8vUHJvdmlkZXM6IGNhbWxfenN0ZF9pbml0aWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xuLy9WZXJzaW9uOiA+PSA1LjEuMVxuZnVuY3Rpb24gY2FtbF96c3RkX2luaXRpYWxpemUoX3VuaXQpIHtcbiAgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0genN0ZF9kZWNvbXByZXNzO1xuICByZXR1cm4gMTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMztcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMjtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX25vbmVcbnZhciBjYW1sX2VwaGVfbm9uZSA9IHsgY2FtbF9lcGhlX25vbmU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfZGF0YV9vcHRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgdmFyIG9sZCA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB2IGluc3RhbmNlb2YgT2JqZWN0KSB2ID0gbmV3IGdsb2JhbFRoaXMuV2Vha1JlZih2KTtcbiAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gdjtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHgpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NyZWF0ZShuKSB7XG4gIHJldHVybiBjYW1sX3dlYWtfY3JlYXRlKG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfd2Vha19jcmVhdGUobikge1xuICB2YXIgYWxlbiA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgdmFyIHggPSBuZXcgQXJyYXkoYWxlbik7XG4gIHhbMF0gPSAyNTE7XG4gIHhbMV0gPSBcImNhbWxfZXBoZV9saXN0X2hlYWRcIjtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhbGVuOyBpKyspIHtcbiAgICB4W2ldID0gY2FtbF9lcGhlX25vbmU7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfa2V5LCBjYW1sX2VwaGVfdW5zZXRfa2V5XG5mdW5jdGlvbiBjYW1sX3dlYWtfc2V0KHgsIGksIHYpIHtcbiAgaWYgKHYgPT09IDApIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9rZXkoeCwgaSwgdlsxXSk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfZ2V0XG5cbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfa2V5KHgsIGkpIHtcbiAgdmFyIHdlYWsgPSB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV07XG4gIGlmICh3ZWFrID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGlmIChnbG9iYWxUaGlzLldlYWtSZWYgJiYgd2VhayBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuV2Vha1JlZikge1xuICAgIHdlYWsgPSB3ZWFrLmRlcmVmKCk7XG4gICAgaWYgKHdlYWsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gY2FtbF9lcGhlX25vbmU7XG4gICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWzAsIHdlYWtdO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2dldF9rZXksY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuLy9BbGlhczogY2FtbF93ZWFrX2dldF9jb3B5XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5KHgsIGkpIHtcbiAgdmFyIHkgPSBjYW1sX2VwaGVfZ2V0X2tleSh4LCBpKTtcbiAgaWYgKHkgPT09IDApIHJldHVybiB5O1xuICB2YXIgeiA9IHlbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfa2V5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfY2hlY2tcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19rZXkoeCwgaSkge1xuICB2YXIgd2VhayA9IHhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbiAgaWYgKHdlYWsgPT09IGNhbWxfZXBoZV9ub25lKSByZXR1cm4gMDtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB3ZWFrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgd2VhayA9IHdlYWsuZGVyZWYoKTtcbiAgICBpZiAod2VhayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfYmxpdF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9BbGlhczogY2FtbF93ZWFrX2JsaXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2tleShhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIHZhciBvbGQgPSBjYW1sX2VwaGVfZ2V0X2RhdGEoYTEpO1xuICAvLyBtaW51cyBvbmUgYmVjYXVzZSBjYW1sX2FycmF5X2JsaXQgd29ya3Mgb24gb2NhbWwgYXJyYXlcbiAgY2FtbF9hcnJheV9ibGl0KFxuICAgIGExLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTEgLSAxLFxuICAgIGEyLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTIgLSAxLFxuICAgIGxlbixcbiAgKTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdChhMiwgb2xkKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YSwgY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuZnVuY3Rpb24gY2FtbF9lcGhlX2JsaXRfZGF0YShzcmMsIGRzdCkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHNyYyk7XG4gIGNhbWxfZXBoZV9zZXRfZGF0YV9vcHQoZHN0LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXQsIGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfbm9uZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpIHtcbiAgdmFyIGRhdGEgPSB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF07XG4gIGlmIChkYXRhID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGZvciAodmFyIGkgPSBjYW1sX2VwaGVfa2V5X29mZnNldDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoZ2xvYmFsVGhpcy5XZWFrTWFwKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLmdldChrKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbMCwgZGF0YV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkoeCkge1xuICB2YXIgciA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKHIgPT09IDApIHJldHVybiAwO1xuICB2YXIgeiA9IHJbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldCwgY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0geC5sZW5ndGggLSAxOyBpID49IGNhbWxfZXBoZV9rZXlfb2Zmc2V0OyBpLS0pIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnbG9iYWxUaGlzLldlYWtNYXApIHtcbiAgICAgICAgZGF0YSA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKS5zZXQoaywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0KHgsIGRhdGFfb3B0KSB7XG4gIGlmIChkYXRhX29wdCA9PT0gMCkgY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGFfb3B0WzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfZGF0YSh4KSB7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NoZWNrX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NoZWNrX2RhdGEoeCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGRhdGEgPT09IDApIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcihfdW5pdCkge1xuICAvL2F2YWlsYWJsZSB3aXRoIFtub2RlIC0tZXhwb3NlLWdjXVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZ2MgPT09IFwiZnVuY3Rpb25cIikgZ2xvYmFsVGhpcy5nYyh0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKF91bml0KSB7XG4gIC8vYXZhaWxhYmxlIHdpdGggW25vZGUgLS1leHBvc2UtZ2NdXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5nYyA9PT0gXCJmdW5jdGlvblwiKSBnbG9iYWxUaGlzLmdjKCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoX3VuaXQpIHtcbiAgLy9hdmFpbGFibGUgd2l0aCBbbm9kZSAtLWV4cG9zZS1nY11cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmdjID09PSBcImZ1bmN0aW9uXCIpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbihfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIFsyNTQsIDAsIDAsIDBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19xdWlja19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3F1aWNrX3N0YXQoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG4vL1JlcXVpcmVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc3RhdCh1bml0KSB7XG4gIHJldHVybiBjYW1sX2djX3F1aWNrX3N0YXQodW5pdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc2V0XG5mdW5jdGlvbiBjYW1sX2djX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19nZXRcbmZ1bmN0aW9uIGNhbWxfZ2NfZ2V0KF91bml0KSB7XG4gIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXIoX2YsIF94KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlXG52YXIgYWxsX2ZpbmFsaXplcnMgPSBuZXcgZ2xvYmFsVGhpcy5TZXQoKTtcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUoY2IsIGEpIHtcbiAgaWYgKGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHZhciB4ID0gbmV3IGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkoZnVuY3Rpb24gKHgpIHtcbiAgICAgIGFsbF9maW5hbGl6ZXJzLmRlbGV0ZSh4KTtcbiAgICAgIGNiKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHgucmVnaXN0ZXIoYSwgeCk7XG4gICAgYWxsX2ZpbmFsaXplcnMuYWRkKHgpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlbGVhc2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVsZWFzZShfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQoX3JhdGUsIF9zdGFja19zaXplLCBfdHJhY2tlcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2ZfZGlzY2FyZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9kaXNjYXJkKF90KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V2ZW50bG9nX3Jlc3VtZVxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19yZXN1bWUoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2Vcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yX3NsaWNlXG5mdW5jdGlvbiBjYW1sX2djX21ham9yX3NsaWNlKF93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9idWNrZXRcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2J1Y2tldChfbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG4vL1ZlcnNpb246IDwgNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQoX24pIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID0ge1xuICAgIGp1c3RpZnk6IFwiK1wiLFxuICAgIHNpZ25zdHlsZTogXCItXCIsXG4gICAgZmlsbGVyOiBcIiBcIixcbiAgICBhbHRlcm5hdGU6IGZhbHNlLFxuICAgIGJhc2U6IDAsXG4gICAgc2lnbmVkY29udjogZmFsc2UsXG4gICAgd2lkdGg6IDAsXG4gICAgdXBwZXJjYXNlOiBmYWxzZSxcbiAgICBzaWduOiAxLFxuICAgIHByZWM6IC0xLFxuICAgIGNvbnY6IFwiZlwiLFxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgZi5qdXN0aWZ5ID0gXCItXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIitcIjpcbiAgICAgIGNhc2UgXCIgXCI6XG4gICAgICAgIGYuc2lnbnN0eWxlID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOlxuICAgICAgICBmLmZpbGxlciA9IFwiMFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMVwiOlxuICAgICAgY2FzZSBcIjJcIjpcbiAgICAgIGNhc2UgXCIzXCI6XG4gICAgICBjYXNlIFwiNFwiOlxuICAgICAgY2FzZSBcIjVcIjpcbiAgICAgIGNhc2UgXCI2XCI6XG4gICAgICBjYXNlIFwiN1wiOlxuICAgICAgY2FzZSBcIjhcIjpcbiAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgIGYud2lkdGggPSAwO1xuICAgICAgICB3aGlsZSAoKChjID0gZm10LmNoYXJDb2RlQXQoaSkgLSA0OCksIGMgPj0gMCAmJiBjIDw9IDkpKSB7XG4gICAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBmLnByZWMgPSAwO1xuICAgICAgICBpKys7XG4gICAgICAgIHdoaWxlICgoKGMgPSBmbXQuY2hhckNvZGVBdChpKSAtIDQ4KSwgYyA+PSAwICYmIGMgPD0gOSkpIHtcbiAgICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICBmLmJhc2UgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9PSBcIi1cIikpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT09IFwiK1wiICYmIGYuZmlsbGVyID09PSBcIiBcIilcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gXCIgXCI7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9IFwiLVwiO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9PSBcIi1cIikgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT09IDgpIGJ1ZmZlciArPSBcIjBcIjtcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZSA/IFwiMFhcIiA6IFwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCIrXCIgJiYgZi5maWxsZXIgPT09IFwiMFwiKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIjBcIjtcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCItXCIpIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIiBcIjtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBIdWdvIEhldXphcmRcblxuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVcbnZhciBjYW1sX2dyX3N0YXRlO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYgKGNhbWxfZ3Jfc3RhdGUpIHtcbiAgICByZXR1cm4gY2FtbF9ncl9zdGF0ZTtcbiAgfVxuICB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoW1xuICAgIDAsXG4gICAgY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiTm90IGluaXRpYWxpemVkXCIpLFxuICBdKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGUgPSBjdHg7XG4gIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbykge1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiICsgbmFtZSArIFwiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmICghKGluZm8gPT09IFwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gXCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYgKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKTtcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdyA/IE51bWJlci5wYXJzZUludCh3KSA6IDIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiICsgdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoID8gTnVtYmVyLnBhcnNlSW50KGgpIDogMjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiICsgaCk7XG5cbiAgdmFyIHdpbiA9IGdsb2JhbFRoaXMub3BlbihcImFib3V0OmJsYW5rXCIsIHRhcmdldCwgc3BlY3Muam9pbihcIixcIikpO1xuICBpZiAoIXdpbikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpO1xuICB9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsIHcsIGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCkge1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsIGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLCBjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJib3R0b21cIjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcywgdywgaCkge1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGxpbmVfd2lkdGg6IDEsXG4gICAgZm9udDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZTogMjYsXG4gICAgY29sb3I6IDB4MDAwMDAwLFxuICAgIHRpdGxlOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpLFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KSByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmIChzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgaWYgKHcgIT09IHMuY2FudmFzLndpZHRoKSBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIGlmIChoICE9PSBzLmNhbnZhcy5oZWlnaHQpIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHMuY2FudmFzLndpZHRoLCBzLmNhbnZhcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gXCJcIiArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSBcIjBcIiArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gICAgZyA9IChjb2xvciA+PiA4KSAmIDB4ZmYsXG4gICAgYiA9IChjb2xvciA+PiAwKSAmIDB4ZmY7XG4gIHMuY29sb3IgPSBjb2xvcjtcbiAgdmFyIGNfc3RyID0gXCIjXCIgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgsIHkpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsIDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIChkWzFdID1cbiAgICAoY29sb3IgPj4gOCkgJlxuICAgIDB4ZmYpLCAvL2dcbiAgICAoZFsyXSA9IChjb2xvciA+PiAwKSAmIDB4ZmYpOyAvL2JcbiAgZFszXSA9IDB4ZmY7IC8vYVxuICBzLnggPSB4O1xuICBzLnkgPSB5O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLCB4LCBzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbSA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgcy5oZWlnaHQgLSB5LCAxLCAxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54ID0geDtcbiAgcy55ID0geTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngsIHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LCBzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueCA9IHg7XG4gIHMueSA9IHk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LCB5LCB3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCwgcy5oZWlnaHQgLSB5LCB3LCAtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsIGN4LCBjeSwgcnksIHJ4LCBhMSwgYTIpIHtcbiAgd2hpbGUgKGExID4gYTIpIGEyICs9IDM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLFxuICAgIHhQb3MsXG4gICAgeVBvcyxcbiAgICB4UG9zX3ByZXYsXG4gICAgeVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCArIHJ5KSAvIDIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9ICgoYTIgLSBhMSkgKiBNYXRoLlBJKSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IG51bTsgaisrKSB7XG4gICAgeFBvcyA9XG4gICAgICBjeCAtXG4gICAgICByeCAqIE1hdGguc2luKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnkgKiBNYXRoLmNvcyhpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9XG4gICAgICBjeSArXG4gICAgICByeSAqIE1hdGguY29zKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnggKiBNYXRoLnNpbihpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYgIT09IHhQb3MgfHwgeVBvc19wcmV2ICE9PSB5UG9zKSB7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXYgPSB4UG9zO1xuICAgIHlQb3NfcHJldiA9IHlQb3M7XG4gICAgaSAtPSBkZWx0YTsgLy9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LCB5LCByeCwgcnksIGExLCBhMikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCwgeCwgcy5oZWlnaHQgLSB5LCByeCwgcnksIGExLCBhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gdztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCwgeSwgdywgaCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LCBzLmhlaWdodCAtIHksIHcsIC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLCBzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLCBzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSwgcy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgsIHksIHJ4LCByeSwgYTEsIGEyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LCB4LCBzLmhlaWdodCAtIHksIHJ4LCByeSwgYTEsIGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIsIHMueCwgcy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpIHtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cikge1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsIHcsIHMudGV4dF9zaXplXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodywgaCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgIHZhciBjID0gYXJyW2kgKyAxXVtqICsgMV07XG4gICAgICB2YXIgbyA9IGkgKiAodyAqIDQpICsgaiAqIDQ7XG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAoYyA+PiAxNikgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IChjID4+IDgpICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAoYyA+PiAwKSAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKSB7XG4gIHZhciBkYXRhID0gWzBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltLmhlaWdodDsgaSsrKSB7XG4gICAgZGF0YVtpICsgMV0gPSBbMF07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbS53aWR0aDsgaisrKSB7XG4gICAgICB2YXIgbyA9IGkgKiAoaW0ud2lkdGggKiA0KSArIGogKiA0LFxuICAgICAgICByID0gaW0uZGF0YVtvICsgMF0sXG4gICAgICAgIGcgPSBpbS5kYXRhW28gKyAxXSxcbiAgICAgICAgYiA9IGltLmRhdGFbbyArIDJdO1xuICAgICAgZGF0YVtpICsgMV1baiArIDFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSwgeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmICghaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwgMCwgMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGdsb2JhbFRoaXMuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCB4LCBzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICAgICAgaW0uaW1hZ2UgPSBpbWFnZTtcbiAgICB9O1xuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSwgeCwgcy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3JlYXRlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jcmVhdGVfaW1hZ2UoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgsIHkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9ibGl0X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9ibGl0X2ltYWdlKGltLCB4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltMiA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoXG4gICAgeCxcbiAgICBzLmhlaWdodCAtIGltLmhlaWdodCAtIHksXG4gICAgaW0ud2lkdGgsXG4gICAgaW0uaGVpZ2h0LFxuICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSArIDFdID0gaW0yLmRhdGFbaSArIDFdO1xuICAgIGltLmRhdGFbaSArIDJdID0gaW0yLmRhdGFbaSArIDJdO1xuICAgIGltLmRhdGFbaSArIDNdID0gaW0yLmRhdGFbaSArIDNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2FpdF9ldmVudFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl93YWl0X2V2ZW50KF9ldmwpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9zeW5jaHJvbml6ZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3JlbWVtYmVyX21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVtZW1iZXJfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChfYSkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl93aW5kb3dfaWQgbm90IEltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX29wZW5fc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fc3Vid2luZG93KF9hLCBfYiwgX2MsIF9kKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KF9hKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VzY2FwZSBjb25zdCAoY29uc3QpXG52YXIgY2FtbF9qc19yZWdleHBzID0geyBhbXA6IC8mL2csIGx0OiAvPC9nLCBxdW90OiAvXCIvZywgYWxsOiAvWyY8XCJdLyB9O1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VzY2FwZShzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvO1xuICBpZiAocy5tYXRjaChlbnRpdHkpKSB7XG4gICAgdmFyIHN0cixcbiAgICAgIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICB0ZW1wLmlubmVySFRNTCA9IHM7XG4gICAgc3RyID0gdGVtcC50ZXh0Q29udGVudCB8fCB0ZW1wLmlubmVyVGV4dDtcbiAgICB0ZW1wID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUoKSB7XG4gIHZhciBjID0gY29uc29sZTtcbiAgdmFyIG0gPSBbXG4gICAgXCJsb2dcIixcbiAgICBcImRlYnVnXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJ3YXJuXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcnhtbFwiLFxuICAgIFwidHJhY2VcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cENvbGxhcHNlZFwiLFxuICAgIFwiZ3JvdXBFbmRcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVFbmRcIixcbiAgXTtcbiAgZnVuY3Rpb24gZigpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dID0gZjtcbiAgcmV0dXJuIGM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlKF91bml0KSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiWE1MSHR0cFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfSBjYXRjaCB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkZhaWxlZCB0byBjcmVhdGUgWE1MSHR0cFJlcXVlc3RcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZiAoZXhuLmpzX2Vycm9yKSB7XG4gICAgcmV0dXJuIGV4bi5qc19lcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNikgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYyxcbiAgICBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBsZXhidWZbbGV4X2J1ZmZlcl07XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlIC0gMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKSB7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT09IDApIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZSBjID0gMjU2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChidWZmZXIsIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09PSBzdGF0ZSkgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PT0gLTEpIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChkc3QgPT09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGkrKztcbiAgICBpZiAoc3JjID09PSAweGZmKSBtZW1bZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlIG1lbVtkc3QgKyAxXSA9IG1lbVtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpKys7XG4gICAgaWYgKGRzdCA9PT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChzcmMgPT09IDB4ZmYpIG1lbVtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2UgbWVtW2RzdCArIDFdID0gbWVtW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5KHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbClcbiAgICB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLFxuICAgIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGxleGJ1ZltsZXhfYnVmZmVyXTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvciAoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZSAtIDE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSkge1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09PSAwKSByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2UgYyA9IDI1NjtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQoYnVmZmVyLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT09IHN0YXRlKSBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2Ugc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09PSAtMSkgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSxcbiAgICAgICAgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbShcbiAgICAgICAgICB0YmwubGV4X2NvZGUsXG4gICAgICAgICAgcGNfb2ZmLFxuICAgICAgICAgIGxleGJ1ZltsZXhfbWVtXSxcbiAgICAgICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSxcbiAgICAgICAgKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfbHhtX01cbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fTSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZDEzNDI1NDNkZTgyZWY5NVwiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX2RhYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fZGFiYSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZGFiYTBiNmViMDkzMjJlM1wiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX25leHQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3hvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbXVsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9NXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9kYWJhXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfbHhtX25leHQodikge1xuICBmdW5jdGlvbiBzaGlmdF9sKHgsIGspIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0KHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIHNoaWZ0X3IoeCwgaykge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIG9yKGEsIGIpIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9vcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3hvcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X2FkZChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X211bChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiByb3RsKHgsIGspIHtcbiAgICByZXR1cm4gb3Ioc2hpZnRfbCh4LCBrKSwgc2hpZnRfcih4LCA2NCAtIGspKTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoYSwgaSkge1xuICAgIHJldHVybiBjYW1sX2JhX2dldF8xKGEsIGkpO1xuICB9XG4gIGZ1bmN0aW9uIHNldChhLCBpLCB4KSB7XG4gICAgcmV0dXJuIGNhbWxfYmFfc2V0XzEoYSwgaSwgeCk7XG4gIH1cbiAgdmFyIE0gPSBjYW1sX2x4bV9NO1xuICB2YXIgZGFiYSA9IGNhbWxfbHhtX2RhYmE7XG4gIHZhciB6LCBxMCwgcTE7XG4gIHZhciBzdCA9IHY7XG4gIHZhciBhID0gZ2V0KHN0LCAwKTtcbiAgdmFyIHMgPSBnZXQoc3QsIDEpO1xuICB2YXIgeDAgPSBnZXQoc3QsIDIpO1xuICB2YXIgeDEgPSBnZXQoc3QsIDMpO1xuICAvKiBDb21iaW5pbmcgb3BlcmF0aW9uICovXG4gIHogPSBhZGQocywgeDApO1xuICAvKiBNaXhpbmcgZnVuY3Rpb24gKi9cbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IHhvcih6LCBzaGlmdF9yKHosIDMyKSk7XG4gIC8qIExDRyB1cGRhdGUgKi9cbiAgc2V0KHN0LCAxLCBhZGQobXVsKHMsIE0pLCBhKSk7XG4gIC8qIFhCRyB1cGRhdGUgKi9cbiAgdmFyIHEwID0geDA7XG4gIHZhciBxMSA9IHgxO1xuICBxMSA9IHhvcihxMSwgcTApO1xuICBxMCA9IHJvdGwocTAsIDI0KTtcbiAgcTAgPSB4b3IoeG9yKHEwLCBxMSksIHNoaWZ0X2wocTEsIDE2KSk7XG4gIHExID0gcm90bChxMSwgMzcpO1xuICBzZXQoc3QsIDIsIHEwKTtcbiAgc2V0KHN0LCAzLCBxMSk7XG4gIC8qIFJldHVybiByZXN1bHQgKi9cbiAgcmV0dXJuIHo7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlcl90cmFjZVxudmFyIGNhbWxfcGFyc2VyX3RyYWNlID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5LCBjYW1sX3BhcnNlcl90cmFjZSxjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpIHtcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICB2YXIgdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIHZhciB0YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBmdW5jdGlvbiBsb2coeCkge1xuICAgIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4ICsgXCJcXG5cIik7XG4gICAgY2FtbF9tbF9vdXRwdXQoY2FtbF9zeXNfZmRzWzJdLmNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuX25hbWUobmFtZXMsIG51bWJlcikge1xuICAgIHZhciBzdHIgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lcyk7XG4gICAgaWYgKHN0clswXSA9PT0gXCJcXHgwMFwiKSByZXR1cm4gXCI8dW5rbm93biB0b2tlbj5cIjtcbiAgICByZXR1cm4gc3RyLnNwbGl0KFwiXFx4MDBcIilbbnVtYmVyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByaW50X3Rva2VuKHN0YXRlLCB0b2spIHtcbiAgICB2YXIgdG9rZW4sIGtpbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbl9uYW1lKHRhYmxlc1t0YmxfbmFtZXNfYmxvY2tdLCB0b2tbMF0pO1xuICAgICAgaWYgKHR5cGVvZiB0b2tbMV0gPT09IFwibnVtYmVyXCIpIGtpbmQgPSBcIlwiICsgdG9rWzFdO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHRva1sxXSA9PT0gXCJzdHJpbmdcIikga2luZCA9IHRva1sxXTtcbiAgICAgIGVsc2UgaWYgKHRva1sxXSBpbnN0YW5jZW9mIE1sQnl0ZXMpIGtpbmQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRva1sxXSk7XG4gICAgICBlbHNlIGtpbmQgPSBcIl9cIjtcbiAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogcmVhZCB0b2tlbiBcIiArIHRva2VuICsgXCIoXCIgKyBraW5kICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHRva2VuX25hbWUodGFibGVzW3RibF9uYW1lc19jb25zdF0sIHRvayk7XG4gICAgICBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlYWQgdG9rZW4gXCIgKyB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLFxuICAgIG4sXG4gICAgbjEsXG4gICAgbjIsXG4gICAgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgdGhlX2xvb3A6IGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAwOiAvL1NUQVJUOlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDY6IC8vbG9vcDpcbiAgICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgICBpZiAobiAhPT0gMCkge1xuICAgICAgICAgIGNtZCA9IHJlZHVjZTtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHtcbiAgICAgICAgICBjbWQgPSB0ZXN0c2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgICBjYXNlIDE6IC8vVE9LRU5fUkVBRDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgcHJpbnRfdG9rZW4oc3RhdGUsIGFyZyk7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDc6IC8vdGVzdHNoaWZ0OlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuMSAhPT0gMCAmJlxuICAgICAgICAgIG4yID49IDAgJiZcbiAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09PSBlbnZbZW52X2N1cnJfY2hhcl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kID0gc2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG4xICE9PSAwICYmXG4gICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT09IGVudltlbnZfY3Vycl9jaGFyXVxuICAgICAgICApIHtcbiAgICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgICBjbWQgPSByZWR1Y2U7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICAgIGNhc2UgNTogLy9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gRVJSQ09ERVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiUmVjb3ZlcmluZyBpbiBzdGF0ZSBcIiArIHN0YXRlMSk7XG4gICAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHRoZV9sb29wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJEaXNjYXJkaW5nIHN0YXRlIFwiICsgc3RhdGUxKTtcbiAgICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiTm8gbW9yZSBzdGF0ZXMgdG8gZGlzY2FyZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7IC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiRGlzY2FyZGluZyBsYXN0IHRva2VuIHJlYWRcIik7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgICAgY21kID0gbG9vcDtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gVW5yZWFjaGFibGVcbiAgICAgIGNhc2UgODogLy9zaGlmdDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgY2FzZSA5OiAvL3NoaWZ0X3JlY292ZXI6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKVxuICAgICAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogc2hpZnQgdG8gc3RhdGUgXCIgKyB0YWJsZXMudGFibGVbbjJdKTtcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBzcCsrO1xuICAgICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgICAgY2FzZSAyOiAvL1NUQUNLU19HUk9XTl8xOlxuICAgICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcblxuICAgICAgY2FzZSAxMDogLy9yZWR1Y2U6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlZHVjZSBieSBydWxlIFwiICsgbik7XG4gICAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICBuMiA+PSAwICYmXG4gICAgICAgICAgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gc3RhdGUxXG4gICAgICAgIClcbiAgICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGVsc2Ugc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICAgIGJyZWFrIHRoZV9sb29wO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgICBjYXNlIDM6IC8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICAgIGNhc2UgNDogLy9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZXJfdHJhY2VcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZShib29sKSB7XG4gIHZhciBvbGRmbGFnID0gY2FtbF9wYXJzZXJfdHJhY2U7XG4gIGNhbWxfcGFyc2VyX3RyYWNlID0gYm9vbDtcbiAgcmV0dXJuIG9sZGZsYWc7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBIdWdvIEhldXphcmRcbi8vIENvcHlyaWdodCAoQykgMjAyMCAtIFNoYWNoYXIgSXR6aGFreVxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2Jsb2IvNC4wNy9vdGhlcmxpYnMvc3RyL3N0cnN0dWJzLmNcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2NvcS9qc2NvcS9ibG9iL3Y4LjExL2NvcS1qcy9qc19zdHViL3N0ci5qc1xuXG4vL1Byb3ZpZGVzOiByZV9tYXRjaFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZ2V0XG5cbnZhciByZV9tYXRjaCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZV93b3JkX2xldHRlcnMgPSBbXG4gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiAweDAwLTB4MUY6IG5vbmUgKi8sIDB4MDAsIDB4MDAsIDB4ZmYsXG4gICAgMHgwMyAvKiAweDIwLTB4M0Y6IGRpZ2l0cyAwLTkgKi8sIDB4ZmUsIDB4ZmYsIDB4ZmYsXG4gICAgMHg4NyAvKiAweDQwLTB4NUY6IEEgdG8gWiwgXyAqLywgMHhmZSwgMHhmZiwgMHhmZixcbiAgICAweDA3IC8qIDB4NjAtMHg3RjogYSB0byB6ICovLCAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4ODAtMHg5Rjogbm9uZSAqLyxcbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4QTAtMHhCRjogbm9uZSAqLywgMHhmZiwgMHhmZiwgMHg3ZixcbiAgICAweGZmIC8qIDB4QzAtMHhERjogTGF0aW4tMSBhY2NlbnRlZCB1cHBlcmNhc2UgKi8sIDB4ZmYsIDB4ZmYsIDB4N2YsXG4gICAgMHhmZiAvKiAweEUwLTB4RkY6IExhdGluLTEgYWNjZW50ZWQgbG93ZXJjYXNlICovLFxuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsXG4gICAgQ0hBUk5PUk06IDEsXG4gICAgU1RSSU5HOiAyLFxuICAgIFNUUklOR05PUk06IDMsXG4gICAgQ0hBUkNMQVNTOiA0LFxuICAgIEJPTDogNSxcbiAgICBFT0w6IDYsXG4gICAgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LFxuICAgIEVOREdST1VQOiA5LFxuICAgIFJFRkdST1VQOiAxMCxcbiAgICBBQ0NFUFQ6IDExLFxuICAgIFNJTVBMRU9QVDogMTIsXG4gICAgU0lNUExFU1RBUjogMTMsXG4gICAgU0lNUExFUExVUzogMTQsXG4gICAgR09UTzogMTUsXG4gICAgUFVTSEJBQ0s6IDE2LFxuICAgIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzX3dvcmRfbGV0dGVyKGMpIHtcbiAgICByZXR1cm4gKHJlX3dvcmRfbGV0dGVyc1tjID4+IDNdID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLCBpKSB7XG4gICAgcmV0dXJuIChjYW1sX3N0cmluZ19nZXQocywgaSA+PiAzKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcbiAgICB2YXIgcHJvZyA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsxXSksXG4gICAgICBjcG9vbCA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICBub3JtdGFibGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgIG51bWdyb3VwcyA9IHJlWzRdIHwgMCxcbiAgICAgIG51bXJlZ2lzdGVycyA9IHJlWzVdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgcXVpdCA9IGZhbHNlLFxuICAgICAgc3RhY2sgPSBbXSxcbiAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgcmVfcmVnaXN0ZXIgPSBuZXcgQXJyYXkobnVtcmVnaXN0ZXJzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBncm91cHNbaV0gPSB7IHN0YXJ0OiAtMSwgZW5kOiAtMSB9O1xuICAgIH1cbiAgICBncm91cHNbMF0uc3RhcnQgPSBwb3M7XG5cbiAgICB2YXIgYmFja3RyYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS51bmRvKSB7XG4gICAgICAgICAgaXRlbS51bmRvLm9ialtpdGVtLnVuZG8ucHJvcF0gPSBpdGVtLnVuZG8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3MpIHtcbiAgICAgICAgICBwYyA9IGl0ZW0ucG9zLnBjO1xuICAgICAgICAgIHBvcyA9IGl0ZW0ucG9zLnR4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1aXQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzdGFjay5wdXNoKGl0ZW0pO1xuICAgIH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGggKiAyKTtcbiAgICAgIHJlc3VsdFswXSA9IDA7IC8vIHRhZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGcgPSBncm91cHNbaV07XG4gICAgICAgIGlmIChnLnN0YXJ0IDwgMCB8fCBnLmVuZCA8IDApIHtcbiAgICAgICAgICBnLnN0YXJ0ID0gZy5lbmQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbMiAqIGkgKyAxXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyICogaSArIDEgKyAxXSA9IGcuZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdmFyIHByZWZpeF9tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwYXJ0aWFsKSByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgIH07XG5cbiAgICAvKiBNYWluIERGQSBpbnRlcnByZXRlciBsb29wICovXG4gICAgd2hpbGUgKCFxdWl0KSB7XG4gICAgICB2YXIgb3AgPSBwcm9nW3BjXSAmIDB4ZmYsXG4gICAgICAgIHNhcmcgPSBwcm9nW3BjXSA+PiA4LFxuICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgIGMgPSBzW3Bvc10sXG4gICAgICAgIGdyb3VwO1xuXG4gICAgICBwYysrO1xuXG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gdWFyZykgcG9zKys7XG4gICAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIQVJOT1JNOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09IGFyZy5jaGFyQ29kZUF0KGkpKSBjID0gc1srK3Bvc107XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm10YWJsZS5jaGFyQ29kZUF0KGMpID09PSBhcmcuY2hhckNvZGVBdChpKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICAgIGlmIChwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICAgIGlmIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuV09SREJPVU5EQVJZOlxuICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzWzBdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9PSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkJFR0dST1VQOlxuICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICAgIHB1c2goeyB1bmRvOiB7IG9iajogZ3JvdXAsIHByb3A6IFwic3RhcnRcIiwgdmFsdWU6IGdyb3VwLnN0YXJ0IH0gfSk7XG4gICAgICAgICAgZ3JvdXAuc3RhcnQgPSBwb3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgICBwdXNoKHsgdW5kbzogeyBvYmo6IGdyb3VwLCBwcm9wOiBcImVuZFwiLCB2YWx1ZTogZ3JvdXAuZW5kIH0gfSk7XG4gICAgICAgICAgZ3JvdXAuZW5kID0gcG9zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgICAgaWYgKGdyb3VwLnN0YXJ0IDwgMCB8fCBncm91cC5lbmQgPCAwKSB7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNbaV0gIT09IHNbcG9zXSkge1xuICAgICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFUExVUzpcbiAgICAgICAgICBpZiAocG9zID09PSBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgICAgfSBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICAgIHJldHVybiBhY2NlcHQoKTtcbiAgICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgICBwdXNoKHsgcG9zOiB7IHBjOiBwYyArIHNhcmcsIHR4dDogcG9zIH0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TRVRNQVJLOlxuICAgICAgICAgIHB1c2goe1xuICAgICAgICAgICAgdW5kbzogeyBvYmo6IHJlX3JlZ2lzdGVyLCBwcm9wOiB1YXJnLCB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ10gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIRUNLUFJPR1JFU1M6XG4gICAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19nZXRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9mb3J3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKTtcbiAgdmFyIHN0YXJ0Y2hhcnMgPSByZVs2XSB8IDA7XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIGlmIChzdGFydGNoYXJzID49IDApIHtcbiAgICBzdGFydGNoYXJzID0gcmVbMl1bc3RhcnRjaGFycyArIDFdO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zIDwgbGVuICYmXG4gICAgICAgIGNhbWxfc3RyaW5nX2dldChzdGFydGNoYXJzLCBjYW1sX3N0cmluZ19nZXQocywgcG9zKSkgPT09IDBcbiAgICAgIClcbiAgICAgICAgcG9zKys7XG4gICAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgcG9zKys7XG4gICAgfSB3aGlsZSAocG9zIDw9IGxlbik7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcysrO1xuICAgIH0gd2hpbGUgKHBvcyA8PSBsZW4pO1xuICB9XG4gIHJldHVybiBbMF07IC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuZnVuY3Rpb24gcmVfc2VhcmNoX2JhY2t3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIik7XG4gIHZhciBzdGFydGNoYXJzID0gcmVbNl0gfCAwO1xuICBpZiAoc3RhcnRjaGFycyA+PSAwKSB7XG4gICAgc3RhcnRjaGFycyA9IHJlWzJdW3N0YXJ0Y2hhcnMgKyAxXTtcbiAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zID4gMCAmJlxuICAgICAgICBwb3MgPCBsZW4gJiZcbiAgICAgICAgY2FtbF9zdHJpbmdfZ2V0KHN0YXJ0Y2hhcnMsIGNhbWxfc3RyaW5nX2dldChzLCBwb3MpKSA9PT0gMFxuICAgICAgKVxuICAgICAgICBwb3MtLTtcbiAgICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBwb3MtLTtcbiAgICB9IHdoaWxlIChwb3MgPj0gMCk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcy0tO1xuICAgIH0gd2hpbGUgKHBvcyA+PSAwKTtcbiAgfVxuICByZXR1cm4gWzBdOyAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUsIHMsIHBvcykge1xuICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3BhcnRpYWxfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfcGFydGlhbF9tYXRjaChyZSwgcywgcG9zKSB7XG4gIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCwgZ3JvdXBzLCBvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlIChuIDwgbGVuKSB7XG4gICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICBpZiAoY3VyICE9PSBcIlxcXFxcIikge1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG4gPT09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2ggKGN1cikge1xuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgIGNhc2UgXCI2XCI6XG4gICAgICAgIGNhc2UgXCI3XCI6XG4gICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgICAgaWYgKGMgKiAyID49IGdyb3Vwcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMik7XG4gICAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMiArIDEpO1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IHJlZmVyZW5jZSB0byB1bm1hdGNoZWQgZ3JvdXBcIik7XG4gICAgICAgICAgcmVzICs9IG9yaWcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzICs9IFwiXFxcXFwiICsgY3VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpO1xufVxuIl0sIm5hbWVzIjpbImNzdF9PdXRfb2ZfbWVtb3J5IiwiY3N0X1N5c19lcnJvciIsImNzdF9GYWlsdXJlIiwiY3N0X0ludmFsaWRfYXJndW1lbnQiLCJjc3RfRW5kX29mX2ZpbGUiLCJjc3RfRGl2aXNpb25fYnlfemVybyIsImNzdF9Ob3RfZm91bmQiLCJjc3RfTWF0Y2hfZmFpbHVyZSIsImNzdF9TdGFja19vdmVyZmxvdyIsImNzdF9TeXNfYmxvY2tlZF9pbyIsImNzdF9Bc3NlcnRfZmFpbHVyZSIsImNzdF9VbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7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O0FBQUE7QUFBQTtBQUFBLFdBR3FCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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Q0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTyxhQTdFRixDQThFTjtBQUFBLE9BbkdzQjtBQUFBLE9BQUQ7QUFB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0p6YUE7QUFBQSxPQUFBQSxvQkFBQTtBQUFBO0FBQUEsT0FBQUMsZ0JBQUE7QUFBQTtBQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBLE9BQUFDLHVCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLGtCQUFBO0FBQUE7QUFBQSxPQUFBQyx1QkFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxnQkFBQTtBQUFBO0FBQUEsT0FBQUMsb0JBQUE7QUFBQTtBQUFBLE9BQUFDLHFCQUFBO0FBQUE7QUFBQSxPQUFBQyxxQkFBQTtBQUFBO0FBQUEsT0FBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsaUNBQUEiLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOF19fSx7Im9mZnNldCI6eyJsaW5lIjo5MzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJlcmFzZV9yZWwiLCJwYXJhbSIsInJlc3QiLCJ0eSIsInR5MSIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInByZWMiLCJpY29udiIsImZjb252Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwiY291bnRlciIsImlnbiIsImYiLCJhcml0eSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxJQytnQlEsOEJBa0NZO0FBQUEsSUFsQ1o7QUFBQTtBQUFBLFdBQUFDLE9BQUEsVUFLSSwyQkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBTHBCLFVBT00sNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQVB0QixVQVNHLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FUbkIsVUFXSyw2QkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBWHJCLFVBZVMsNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWZ6QixVQWFLLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FickIsVUFpQkssNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWpCckIsVUFtQkksNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQW5CcEIsVUFBQUMsS0FBQTtBQUFBLE9BcUJlLGlDQUFjO0FBQUE7QUFBQSxXQUFBRCxTQXJCN0IsVUFBQUUsTUFBQTtBQUFBLE9BdUJ1Qix1Q0FBYztBQUFBO0FBQUEsV0FBQUYsU0F2QnJDLFVBeUJLLDhCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUF6QnJCLFVBMkJLLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUEzQnJCLFVBNkJHLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUE3Qm5CLFVBK0JNLCtCQUFnQjtBQUFBLG1CQUFBQSxVQS9CdEIsVUFpQ2Ms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QUEsT0F3RGUsa0RBQW9CO0FBQUE7QUFBQSxXQUFBbEIsVUF4RG5DLFNBOEJOLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUE5QmhCLFNBQUFtQixXQUFBLFNBQUFDLFlBQUE7QUFBQSxPQTZDdUIsMkRBQW9CO0FBQUE7QUFBQSxXQUFBcEIsVUE3QzNDLFNBQUFxQixVQUFBO0FBQUEsT0ErQ2MsK0NBQW9CO0FBQUE7QUFBQSxXQUFBckIsVUEvQ2xDLFNBaURFLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUFqRHhCLFNBQUFzQixNQUFBO0FBQUEsT0FtRE8sMkNBQW9CO0FBQUE7QUFBQSxXQUFBdEIsVUFuRDNCLFNBQUF1QixJQUFBLFNBQUFDLFFBQUE7QUFBQSxPQTRCSyxnREFBb0I7QUFBQTtBQUFBLEdBK0JsQztBQUFBLEdEanJCUiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjk0ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkbGliLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GOF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgaDEgOjogW10gLT4gaDEgOjogbDJcbiAgfCBoMSA6OiBoMiA6OiBbXSAtPiBoMSA6OiBoMiA6OiBsMlxuICB8IGgxIDo6IGgyIDo6IGgzIDo6IHRsIC0+IGgxIDo6IGgyIDo6IGgzIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxuKCogZm9yIGF0X2V4aXQgKilcbnR5cGUgJ2EgYXRvbWljX3RcbmV4dGVybmFsIGF0b21pY19tYWtlIDogJ2EgLT4gJ2EgYXRvbWljX3QgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCBhdG9taWNfZ2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgPSBcIiVhdG9taWNfbG9hZFwiXG5leHRlcm5hbCBhdG9taWNfY29tcGFyZV9hbmRfc2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgLT4gJ2EgLT4gYm9vbFxuICA9IFwiJWF0b21pY19jYXNcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IGF0b21pY19tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gYXRvbWljX21ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2RvbWFpbl9sb2NhbF9hdF9leGl0ID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgKCFkb19kb21haW5fbG9jYWxfYXRfZXhpdCkgKCk7XG4gIChhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICAgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICAgID0gQ29tcGxleFxubW9kdWxlIENvbmRpdGlvbiAgICAgID0gQ29uZGl0aW9uXG5tb2R1bGUgRGlnZXN0ICAgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBEb21haW4gICAgICAgICA9IERvbWFpblxubW9kdWxlIER5bmFycmF5ICAgICAgID0gRHluYXJyYXlcbm1vZHVsZSBFZmZlY3QgICAgICAgICA9IEVmZmVjdFxubW9kdWxlIEVpdGhlciAgICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgICA9IEdjXG5tb2R1bGUgSGFzaHRibCAgICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBNdXRleCAgICAgICAgICA9IE11dGV4XG5tb2R1bGUgTmF0aXZlaW50ICAgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICAgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQcmludGV4YyAgICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZW1hcGhvcmUgICAgICA9IFNlbWFwaG9yZVxubW9kdWxlIFNlcSAgICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJpbmcgICAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyAgID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgICAgPSBTeXNcbm1vZHVsZSBUeXBlICAgICAgICAgICA9IFR5cGVcbm1vZHVsZSBVY2hhciAgICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgICAgPSBXZWFrXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2NhcyIsImNhbWxfYXRvbWljX2xvYWQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9mbHVzaCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb25jYXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX29wZW4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiSW52YWxpZF9hcmd1bWVudCIsIkZhaWx1cmUiLCJNYXRjaF9mYWlsdXJlIiwiQXNzZXJ0X2ZhaWx1cmUiLCJOb3RfZm91bmQiLCJPdXRfb2ZfbWVtb3J5IiwiU3RhY2tfb3ZlcmZsb3ciLCJTeXNfZXJyb3IiLCJFbmRfb2ZfZmlsZSIsIkRpdmlzaW9uX2J5X3plcm8iLCJTeXNfYmxvY2tlZF9pbyIsIlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJFeGl0IiwibWluIiwieCIsInkiLCJtYXgiLCJhYnMiLCJsbm90IiwiY2hhcl9vZl9pbnQiLCJuIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsInBhcmFtIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwiZXhuIiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJzMSIsImwiLCJpIiwibWF0Y2giLCJzdHJpbmdfb2ZfZmxvYXQiLCJmbG9hdF9vZl9zdHJpbmdfb3B0Iiwic3ltYm9sIiwibDEiLCJsMiIsImgxIiwiaDIiLCJ0bCIsImgzIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsIm1vZGUiLCJwZXJtIiwibmFtZSIsImMiLCJvcGVuX291dCIsIm9wZW5fb3V0X2JpbiIsImZsdXNoX2FsbCIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsInYiLCJjbG9zZV9vdXQiLCJjbG9zZV9vdXRfbm9lcnIiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJvcGVuX2luX2JpbiIsImlucHV0IiwiaWMiLCJ1bnNhZmVfcmVhbGx5X2lucHV0IiwiciIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwicG9zIiwiaGQiLCJhY2N1IiwiYmVnIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN0ciIsInN0cjIiLCJmbXQyIiwic3RyMSIsImZtdDEiLCJzMiIsImV4aXRfZnVuY3Rpb24iLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4iLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19kb21haW5fbG9jYWxfYXRfZXhpdCIsImRvX2F0X2V4aXQiLCJleGl0IiwicmV0Y29kZSIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHFCQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJrQi9EIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6OTk1NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zeXMubWwuaW4iXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBAY29uZmlndXJlX2lucHV0QCAqKVxuIzMgXCJzeXMubWwuaW5cIlxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGJhY2tlbmRfdHlwZSA9XG4gIHwgTmF0aXZlXG4gIHwgQnl0ZWNvZGVcbiAgfCBPdGhlciBvZiBzdHJpbmdcbigqIFN5c3RlbSBpbnRlcmZhY2UgKilcblxuZXh0ZXJuYWwgZ2V0X2NvbmZpZzogdW5pdCAtPiBzdHJpbmcgKiBpbnQgKiBib29sID0gXCJjYW1sX3N5c19nZXRfY29uZmlnXCJcbmV4dGVybmFsIGdldF9leGVjdXRhYmxlX25hbWUgOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lXCJcbmV4dGVybmFsIGFyZ3YgOiBzdHJpbmcgYXJyYXkgPSBcIiVzeXNfYXJndlwiXG5leHRlcm5hbCBiaWdfZW5kaWFuIDogdW5pdCAtPiBib29sID0gXCIlYmlnX2VuZGlhblwiXG5leHRlcm5hbCB3b3JkX3NpemUgOiB1bml0IC0+IGludCA9IFwiJXdvcmRfc2l6ZVwiXG5leHRlcm5hbCBpbnRfc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlaW50X3NpemVcIlxuZXh0ZXJuYWwgbWF4X3dvc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlbWF4X3dvc2l6ZVwiXG5leHRlcm5hbCB1bml4IDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX3VuaXhcIlxuZXh0ZXJuYWwgd2luMzIgOiB1bml0IC0+IGJvb2wgPSBcIiVvc3R5cGVfd2luMzJcIlxuZXh0ZXJuYWwgY3lnd2luIDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX2N5Z3dpblwiXG5leHRlcm5hbCBnZXRfYmFja2VuZF90eXBlIDogdW5pdCAtPiBiYWNrZW5kX3R5cGUgPSBcIiViYWNrZW5kX3R5cGVcIlxuXG5sZXQgZXhlY3V0YWJsZV9uYW1lID0gZ2V0X2V4ZWN1dGFibGVfbmFtZSgpXG5sZXQgKG9zX3R5cGUsIF8sIF8pID0gZ2V0X2NvbmZpZygpXG5sZXQgYmFja2VuZF90eXBlID0gZ2V0X2JhY2tlbmRfdHlwZSAoKVxubGV0IGJpZ19lbmRpYW4gPSBiaWdfZW5kaWFuICgpXG5sZXQgd29yZF9zaXplID0gd29yZF9zaXplICgpXG5sZXQgaW50X3NpemUgPSBpbnRfc2l6ZSAoKVxubGV0IHVuaXggPSB1bml4ICgpXG5sZXQgd2luMzIgPSB3aW4zMiAoKVxubGV0IGN5Z3dpbiA9IGN5Z3dpbiAoKVxubGV0IG1heF9hcnJheV9sZW5ndGggPSBtYXhfd29zaXplICgpXG5sZXQgbWF4X2Zsb2F0YXJyYXlfbGVuZ3RoID0gbWF4X2FycmF5X2xlbmd0aCAvICg2NCAvIHdvcmRfc2l6ZSlcbmxldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMVxuZXh0ZXJuYWwgcnVudGltZV92YXJpYW50IDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfcnVudGltZV92YXJpYW50XCJcbmV4dGVybmFsIHJ1bnRpbWVfcGFyYW1ldGVycyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1wiXG5cbmV4dGVybmFsIGZpbGVfZXhpc3RzOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfZmlsZV9leGlzdHNcIlxuZXh0ZXJuYWwgaXNfZGlyZWN0b3J5IDogc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3lzX2lzX2RpcmVjdG9yeVwiXG5leHRlcm5hbCBpc19yZWd1bGFyX2ZpbGUgOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXCJcbmV4dGVybmFsIHJlbW92ZTogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbW92ZVwiXG5leHRlcm5hbCByZW5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbmFtZVwiXG5leHRlcm5hbCBnZXRlbnY6IHN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfc3lzX2dldGVudlwiXG5cbmxldCBnZXRlbnZfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChnZXRlbnYgcylcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5leHRlcm5hbCBjb21tYW5kOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFwiXG5leHRlcm5hbCB0aW1lOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9zeXNfdGltZVwiIFwiY2FtbF9zeXNfdGltZV91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGNoZGlyOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2hkaXJcIlxuZXh0ZXJuYWwgbWtkaXI6IHN0cmluZyAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfbWtkaXJcIlxuZXh0ZXJuYWwgcm1kaXI6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3N5c19ybWRpclwiXG5leHRlcm5hbCBnZXRjd2Q6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3N5c19nZXRjd2RcIlxuZXh0ZXJuYWwgcmVhZGRpciA6IHN0cmluZyAtPiBzdHJpbmcgYXJyYXkgPSBcImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XCJcblxubGV0IGludGVyYWN0aXZlID0gcmVmIGZhbHNlXG5cbnR5cGUgc2lnbmFsX2JlaGF2aW9yID1cbiAgICBTaWduYWxfZGVmYXVsdFxuICB8IFNpZ25hbF9pZ25vcmVcbiAgfCBTaWduYWxfaGFuZGxlIG9mIChpbnQgLT4gdW5pdClcblxuZXh0ZXJuYWwgc2lnbmFsIDogaW50IC0+IHNpZ25hbF9iZWhhdmlvciAtPiBzaWduYWxfYmVoYXZpb3JcbiAgICAgICAgICAgICAgICA9IFwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyXCJcblxubGV0IHNldF9zaWduYWwgc2lnX251bSBzaWdfYmVoID0gaWdub3JlKHNpZ25hbCBzaWdfbnVtIHNpZ19iZWgpXG5cbmxldCBzaWdhYnJ0ID0gLTFcbmxldCBzaWdhbHJtID0gLTJcbmxldCBzaWdmcGUgPSAtM1xubGV0IHNpZ2h1cCA9IC00XG5sZXQgc2lnaWxsID0gLTVcbmxldCBzaWdpbnQgPSAtNlxubGV0IHNpZ2tpbGwgPSAtN1xubGV0IHNpZ3BpcGUgPSAtOFxubGV0IHNpZ3F1aXQgPSAtOVxubGV0IHNpZ3NlZ3YgPSAtMTBcbmxldCBzaWd0ZXJtID0gLTExXG5sZXQgc2lndXNyMSA9IC0xMlxubGV0IHNpZ3VzcjIgPSAtMTNcbmxldCBzaWdjaGxkID0gLTE0XG5sZXQgc2lnY29udCA9IC0xNVxubGV0IHNpZ3N0b3AgPSAtMTZcbmxldCBzaWd0c3RwID0gLTE3XG5sZXQgc2lndHRpbiA9IC0xOFxubGV0IHNpZ3R0b3UgPSAtMTlcbmxldCBzaWd2dGFscm0gPSAtMjBcbmxldCBzaWdwcm9mID0gLTIxXG5sZXQgc2lnYnVzID0gLTIyXG5sZXQgc2lncG9sbCA9IC0yM1xubGV0IHNpZ3N5cyA9IC0yNFxubGV0IHNpZ3RyYXAgPSAtMjVcbmxldCBzaWd1cmcgPSAtMjZcbmxldCBzaWd4Y3B1ID0gLTI3XG5sZXQgc2lneGZzeiA9IC0yOFxuXG5leGNlcHRpb24gQnJlYWtcblxubGV0IGNhdGNoX2JyZWFrIG9uID1cbiAgaWYgb24gdGhlblxuICAgIHNldF9zaWduYWwgc2lnaW50IChTaWduYWxfaGFuZGxlKGZ1biBfIC0+IHJhaXNlIEJyZWFrKSlcbiAgZWxzZVxuICAgIHNldF9zaWduYWwgc2lnaW50IFNpZ25hbF9kZWZhdWx0XG5cblxuZXh0ZXJuYWwgZW5hYmxlX3J1bnRpbWVfd2FybmluZ3M6IGJvb2wgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1wiXG5leHRlcm5hbCBydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQ6IHVuaXQgLT4gYm9vbCA9XG4gIFwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcIlxuXG4oKiBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgZm91bmQgaW4gZmlsZSAuLi9WRVJTSU9OICopXG5cbmxldCBvY2FtbF92ZXJzaW9uID0gXCJAVkVSU0lPTkBcIlxuXG5sZXQgZGV2ZWxvcG1lbnRfdmVyc2lvbiA9IEBPQ0FNTF9ERVZFTE9QTUVOVF9WRVJTSU9OQFxuXG50eXBlIGV4dHJhX3ByZWZpeCA9IFBsdXMgfCBUaWxkZVxuXG50eXBlIGV4dHJhX2luZm8gPSBleHRyYV9wcmVmaXggKiBzdHJpbmdcblxudHlwZSBvY2FtbF9yZWxlYXNlX2luZm8gPSB7XG4gIG1ham9yIDogaW50O1xuICBtaW5vciA6IGludDtcbiAgcGF0Y2hsZXZlbCA6IGludDtcbiAgZXh0cmEgOiBleHRyYV9pbmZvIG9wdGlvblxufVxuXG5sZXQgb2NhbWxfcmVsZWFzZSA9IHtcbiAgbWFqb3IgPSBAT0NBTUxfVkVSU0lPTl9NQUpPUkA7XG4gIG1pbm9yID0gQE9DQU1MX1ZFUlNJT05fTUlOT1JAO1xuICBwYXRjaGxldmVsID0gQE9DQU1MX1ZFUlNJT05fUEFUQ0hMRVZFTEA7XG4gIGV4dHJhID0gQE9DQU1MX1JFTEVBU0VfRVhUUkFAXG59XG5cbigqIE9wdGltaXphdGlvbiAqKVxuXG5leHRlcm5hbCBvcGFxdWVfaWRlbnRpdHkgOiAnYSAtPiAnYSA9IFwiJW9wYXF1ZVwiXG5cbm1vZHVsZSBJbW1lZGlhdGU2NCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBOb25faW1tZWRpYXRlID0gc2lnXG4gICAgdHlwZSB0XG4gIGVuZFxuICBtb2R1bGUgdHlwZSBJbW1lZGlhdGUgPSBzaWdcbiAgICB0eXBlIHQgW0BAaW1tZWRpYXRlXVxuICBlbmRcblxuICBtb2R1bGUgTWFrZShJbW1lZGlhdGUgOiBJbW1lZGlhdGUpKE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlKSA9IHN0cnVjdFxuICAgIHR5cGUgdCBbQEBpbW1lZGlhdGU2NF1cbiAgICB0eXBlICdhIHJlcHIgPVxuICAgICAgfCBJbW1lZGlhdGUgOiBJbW1lZGlhdGUudCByZXByXG4gICAgICB8IE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlLnQgcmVwclxuICAgIGV4dGVybmFsIG1hZ2ljIDogXyByZXByIC0+IHQgcmVwciA9IFwiJWlkZW50aXR5XCJcbiAgICBsZXQgcmVwciA9XG4gICAgICBpZiB3b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIG1hZ2ljIEltbWVkaWF0ZVxuICAgICAgZWxzZVxuICAgICAgICBtYWdpYyBOb25faW1tZWRpYXRlXG4gIGVuZFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJTdGRsaWIiLCJleGVjdXRhYmxlX25hbWUiLCJvc190eXBlIiwidW5peCIsIndpbjMyIiwiY3lnd2luIiwibWF4X2FycmF5X2xlbmd0aCIsIm1heF9mbG9hdGFycmF5X2xlbmd0aCIsIm1heF9zdHJpbmdfbGVuZ3RoIiwiZ2V0ZW52X29wdCIsInMiLCJleG4iLCJzZXRfc2lnbmFsIiwic2lnX251bSIsInNpZ19iZWgiLCJCcmVhayIsImNhdGNoX2JyZWFrIiwib24iLCJNYWtlIiwiSW1tZWRpYXRlIiwiTm9uX2ltbWVkaWF0ZSIsIlN0ZGxpYl9TeXMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkNtQ3NCO0FBQUEsSUFBQUMsVUFDQTtBQUFBLElBQUFDLE9BQVk7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElBdUJoQyxZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQzRFg7QUFBQSwyQkM0RG9CO0FBQUEsS0Q1RHBCO0FBQUE7QUFBQSxHQzREd0I7QUFBQSxZQUFBQyxXQUFBQyxTQUFBQyxTQXFCdUM7QUFBQSxPQUFBQyxRQTdDN0I7QUFBQSxZQUFBQyxZQUFBQyxJQStFaEMsaUJBR2tDO0FBQUEsWUFBQUMsS0FBQUMsV0FBQUMsZUFzRDVCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQXhJMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwQ2xDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAwNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb2JqLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQzXG5cbmxldCBmb3JjaW5nX3RhZyA9IDI0NFxubGV0IGNvbnRfdGFnID0gMjQ1XG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCJcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX29ial90YWciLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TeXMiLCJpc19ibG9jayIsImEiLCJkb3VibGVfZmllbGQiLCJ4IiwiaSIsInNldF9kb3VibGVfZmllbGQiLCJ2Iiwib2ZfdmFsIiwic2xvdCIsImNzdF9PYmpfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwibmFtZSIsImlkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibCIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwiZSIsIm8iLCJtc2ciLCJnZXRfa2V5IiwiZ2V0X2tleV9jb3B5Iiwic2V0X2tleSIsInVuc2V0X2tleSIsImNoZWNrX2tleSIsImJsaXRfa2V5IiwiZTEiLCJvMSIsImUyIiwibzIiLCJTdGRsaWJfT2JqIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLFNBQUFDLEdDeUJrQyxtQ0FBYztBQUFBLFlBQUFDLGFBQUFDLEdBQUFDLEdBU1Isb0NBQXFDO0FBQUEsWUFBQUMsaUJBQUFGLEdBQUFDLEdBQUFFO0FBQUFBLElBRTNFO0FBQUEsSUFBdUM7QUFBQTtBQUFBLFlBQUFDLE9BQUFKO0FBQUFBO0FBQUFBLEtBQUFLO0FBQUFBLE9Bd0NoQztBQUFBLFVBQWdCO0FBQUE7QUFBQSxLQUFBQyxnQ0Q1RXpCO0FBQUE7QUFBQTtBQUFBLEtDZ0ZTLHFCQUFtQixnQ0FBQUMsT0FBeUM7QUFBQSxTQUFBQSxPQUMxRDtBQUFBO0FBQUEsSUFFRjtBQUFBO0FBQUEsY0FDRSxtREFBdUM7QUFBQTtBQUFBLFlBQUFBLEtBQUFGLE1BR3BCO0FBQUEsWUFBQUcsR0FBQUgsTUFHQTtBQUFBLE9BQUFJLGtCRDFGOUI7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBLElDd0dJO0FBQUEsY0FDRTtBQUFBLElBQ0Ysa0NBQVE7QUFBQTtBQUFBLFlBQUFDLE9BQUFaLEdBRUssd0JBQWdDO0FBQUEsWUFBQWEsd0JBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFHN0Msb0JBQXNCLG1CQUF0QjtBQUFBLGVBQ0UsNkJBQWU7QUFBQTtBQUFBLFlBQUFDLFFBQUFILEdBQUFDO0FBQUFBLElBSWpCO0FBQUEsSUFDQSxzQ0FBVztBQUFBO0FBQUEsWUFBQUcsYUFBQUosR0FBQUM7QUFBQUEsSUFJWDtBQUFBLElBQ0EsMkNBQWdCO0FBQUE7QUFBQSxZQUFBSSxRQUFBTCxHQUFBQyxHQUFBZjtBQUFBQSxJQUloQjtBQUFBLElBQ0EseUNBQWE7QUFBQTtBQUFBLFlBQUFvQixVQUFBTixHQUFBQztBQUFBQSxJQUliO0FBQUEsSUFDQSx3Q0FBYTtBQUFBO0FBQUEsWUFBQU0sVUFBQVAsR0FBQUM7QUFBQUEsSUFJYjtBQUFBLElBQ0Esd0NBQWE7QUFBQTtBQUFBLFlBQUFPLFNBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFmO0FBQUFBLElBTWI7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQix5Q0FDTjtBQUFBO0FBQUEsVUFFaEI7QUFBQSxjQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsSUFEQSxxREFDcUM7QUFBQTtBQUFBO0FBQUEsSUFBQWdCO0FBQUFBLE1EbEo5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMTcyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2F0b21pYy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICBTdGVwaGVuIERvbGFuLCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTctMjAxOCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBtYWtlIDogJ2EgLT4gJ2EgdCA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsIG1ha2VfY29udGVuZGVkIDogJ2EgLT4gJ2EgdCA9IFwiY2FtbF9hdG9taWNfbWFrZV9jb250ZW5kZWRcIlxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiAnYSA9IFwiJWF0b21pY19sb2FkXCJcbmV4dGVybmFsIGV4Y2hhbmdlIDogJ2EgdCAtPiAnYSAtPiAnYSA9IFwiJWF0b21pY19leGNoYW5nZVwiXG5leHRlcm5hbCBjb21wYXJlX2FuZF9zZXQgOiAnYSB0IC0+ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVhdG9taWNfY2FzXCJcbmV4dGVybmFsIGZldGNoX2FuZF9hZGQgOiBpbnQgdCAtPiBpbnQgLT4gaW50ID0gXCIlYXRvbWljX2ZldGNoX2FkZFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxubGV0IHNldCByIHggPSBpZ25vcmUgKGV4Y2hhbmdlIHIgeClcbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2V4Y2hhbmdlIiwiY2FtbF9hdG9taWNfZmV0Y2hfYWRkIiwic2V0IiwiciIsIngiLCJpbmNyIiwiZGVjciIsIlN0ZGxpYl9BdG9taWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDd0JjLHFDQUFxQjtBQUFBLFlBQUFDLEtBQUFGLEdBQ3RCLHNDQUEwQjtBQUFBLFlBQUFHLEtBQUFILEdBQzFCLHVDQUE2QjtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUQxQjFDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAyMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbigqIFt1cGRhdGVfdG9fZm9yY2luZyBibGtdIHRyaWVzIHRvIHVwZGF0ZSBhIFtibGtdIHdpdGggW2xhenlfdGFnXSB0b1xuICAgW2ZvcmNpbmdfdGFnXSB1c2luZyBjb21wYXJlLWFuZC1zd2FwIChDQVMpLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGUgaGVhZGVyIHdvcmQgYnkgYSBjb25jdXJyZW50IEdDIHRocmVhZC4gUmV0dXJucyBbMF0gaWYgdGhlXG4gICBDQVMgaXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIENBUyBmYWlscywgdGhlbiB0aGUgdGFnIHdhcyBvYnNlcnZlZCB0byBiZVxuICAgc29tZXRoaW5nIG90aGVyIHRoYW4gW2xhenlfdGFnXSBkdWUgdG8gYSBjb25jdXJyZW50IG11dGF0b3IuIEluIHRoaXMgY2FzZSxcbiAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIFsxXS4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3JjaW5nIDogT2JqLnQgLT4gaW50ID1cbiAgXCJjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcIiBbQEBub2FsbG9jXVxuXG4oKiBbcmVzZXRfdG9fbGF6eSBibGtdIGV4cGVjdHMgW2Jsa10gdG8gYmUgYSBsYXp5IG9iamVjdCB3aXRoIFtPYmouZm9yY2luZ190YWddXG4gICBhbmQgdXBkYXRlcyB0aGUgdGFnIHRvIFtPYmoubGF6eV90YWddLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGlzIG9iamVjdCdzIGhlYWRlciBieSBhIGNvbmN1cnJlbnQgR0MgdGhyZWFkLiAqKVxuZXh0ZXJuYWwgcmVzZXRfdG9fbGF6eSA6IE9iai50IC0+IHVuaXQgPSBcImNhbWxfbGF6eV9yZXNldF90b19sYXp5XCIgW0BAbm9hbGxvY11cblxuKCogW3VwZGF0ZV90b19mb3J3YXJkIGJsa10gZXhwZWN0cyBbYmxrXSB0byBiZSBhIGxhenkgb2JqZWN0IHdpdGhcbiAgIFtPYmouZm9yY2luZ190YWddIGFuZCB1cGRhdGVzIHRoZSB0YWcgdG8gW09iai5mb3J3YXJkX3RhZ10sIHRha2luZyBjYXJlIHRvXG4gICBoYW5kbGUgY29uY3VycmVudCBtYXJraW5nIG9mIHRoaXMgb2JqZWN0J3MgaGVhZGVyIGJ5IGEgY29uY3VycmVudCBHQyB0aHJlYWQuXG4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3J3YXJkIDogT2JqLnQgLT4gdW5pdCA9XG4gIFwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXCIgW0BAbm9hbGxvY11cblxuKCogQXNzdW1lcyBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGZvcmNpbmcgKilcbmxldCBkb19mb3JjZV9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciByZXN1bHQpO1xuICAgIHVwZGF0ZV90b19mb3J3YXJkIGI7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByZXNldF90b19sYXp5IGI7XG4gICAgcmFpc2UgZVxuXG4oKiBBc3N1bWVzIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgZm9yY2luZyAqKVxubGV0IGRvX2ZvcmNlX3ZhbF9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBPYmouc2V0X2ZpZWxkIGIgMCAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgdXBkYXRlX3RvX2ZvcndhcmQgYjtcbiAgcmVzdWx0XG5cbigqIENhbGxlZCBieSBbZm9yY2VfZ2VuXSAqKVxubGV0IGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgKCogV2UgZXhwZWN0IHRoZSB0YWcgdG8gYmUgW2xhenlfdGFnXSwgYnV0IG1heSBiZSBvdGhlciB0YWdzIGR1ZSB0b1xuICAgICBjb25jdXJyZW50IGZvcmNpbmcgb2YgbGF6eSB2YWx1ZXMuICopXG4gIG1hdGNoIHVwZGF0ZV90b19mb3JjaW5nIChPYmoucmVwciBibGspIHdpdGhcbiAgfCAwIHdoZW4gb25seV92YWwgLT4gZG9fZm9yY2VfdmFsX2Jsb2NrIGJsa1xuICB8IDAgLT4gZG9fZm9yY2VfYmxvY2sgYmxrXG4gIHwgXyAtPiByYWlzZSBVbmRlZmluZWRcblxuKCogdXNlZCBpbiB0aGUgJWxhenlfZm9yY2UgcHJpbWl0aXZlICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayBibGsgPSBmb3JjZV9nZW5fbGF6eV9ibG9jayB+b25seV92YWw6ZmFsc2UgYmxrXG5cbigqIFtmb3JjZV9nZW4gfm9ubHlfdmFsOmZhbHNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzXG4gICBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZSB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHNcbiAgIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmwgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcbmxldCBmb3JjZV9nZW4gfm9ubHlfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdCBjb3VsZCBoYXZlIGJlZW5cbiAgICAgICBzaG9ydGN1dCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgaGVyZSBhdCB0aGUgbW9tZW50IHNpbmNlXG4gICAgICAgW09iai50YWddIGlzIG5vdCBzaW1wbGlmaWVkIGJ5IHRoZSBjb21waWxlciwgYW5kIEdQUiM3MTMgYWxzb1xuICAgICAgIGVuc3VyZXMgdGhhdCBubyB2YWx1ZSB3aWxsIGJlIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcuXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICAoKiBTVEFSVCBubyBzYWZlIHBvaW50cy4gSWYgYSBHQyBvY2N1cnMgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IFt4XSBtYXkgYmVcbiAgICAgc2hvcnQtY2lyY3VpdGVkLCBhbmQgZ2V0dGluZyB0aGUgZmlyc3QgZmllbGQgb2YgW3hdIHdvdWxkIGdldCB1cyB0aGUgd3JvbmdcbiAgICAgdmFsdWUuIEx1Y2tpbHksIHRoZSBjb21waWxlciBkb2VzIG5vdCBpbnNlcnQgR0Mgc2FmZSBwb2ludHMgYXQgdGhpcyBwbGFjZSxcbiAgICAgc28gaXQgaXMgb2suICopXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlblxuICAgIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpXG4gICgqIEVORCBubyBzYWZlIHBvaW50cyAqKVxuICBlbHNlIGlmIHQgPSBPYmouZm9yY2luZ190YWcgdGhlbiByYWlzZSBVbmRlZmluZWRcbiAgZWxzZSBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCBsenZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWJfT2JqIiwiVW5kZWZpbmVkIiwiZm9yY2VfZ2VuX2xhenlfYmxvY2siLCJvbmx5X3ZhbCIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJlIiwicGFyYW0iLCJmb3JjZV9sYXp5X2Jsb2NrIiwiZm9yY2VfZ2VuIiwibHp2IiwidCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxVQUFBQztBQUFBQSxJQ3VFUTtBQUFBLEtBR0M7QUFBQSxJQUZFO0FBQUEsU0FBQUMsWUFaYztBQUFBLEtBQ3ZCO0FBQUEsU0FBQUMsV0FDYTtBQUFBLEtBQ2I7QUFBQSxLQUNBO0FBQUEsS0FBbUI7QUFBQTtBQUFBLFFBQUFELFVBbkJJO0FBQUEsSUFDdkI7QUFBQSxJQUErQjtBQUFBLFNBQUFDLFNBRWhCO0FBQUEsS0FDYjtBQUFBLEtBQ0E7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSURsREo7QUFBQSxLQ3FESSxrQkFBQUMsT0FBdUMsd0NBQU87QUFBQSxLQUM5QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBb0JLO0FBQUEsWUFBQUMsaUJBQUFMLEtBR0csbUNBQXdDO0FBQUEsWUFBQU0sVUFBQVAsVUFBQVE7QUFBQUEsUUFBQUMsSUFxQnpEO0FBQUEsSUFDUix5QkFDMEI7QUFBQSxJQUVyQix3QkFBNEI7QUFBQSxJQUM1QixtQ0FDQSxtQ0FBa0M7QUFBQTtBQUFBLEdEeEd6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMjU4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2xhenkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5sZXQgZm9yY2VfdmFsIGwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX2dlbiB+b25seV92YWw6dHJ1ZSBsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8XG4gICAgIHQgPSBPYmouZm9yY2luZ190YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX29ial90YWciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJDYW1saW50ZXJuYWxMYXp5IiwiU3RkbGliX09iaiIsIlVuZGVmaW5lZCIsImZvcmNlX3ZhbCIsImwiLCJmcm9tX2Z1biIsIngiLCJmcm9tX3ZhbCIsInYiLCJ0IiwiaXNfdmFsIiwibWFwIiwicGFyYW0iLCJtYXBfdmFsIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSx5QkFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsVUFBQUMsR0N1RGtCLDJDQUEyQztBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFTLElBR25EO0FBQUEsSUFDUjtBQUFBLElBQThCO0FBQUEsR0FDVjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLElBR1o7QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBLEtBSUc7QUFBQSxJQUgrQyx3Q0FJL0M7QUFBQTtBQUFBLFlBQUFDLE9BQUFOO0FBQUFBLFFBQUEsSUFFcUI7QUFBQSx3Q0FBb0I7QUFBQSxHQUFnQjtBQUFBLFlBQUFPLElBQUFkLEdBQUFTO0FBQUFBLElBRzVEO0FBQUEscUJBQUFNO0FBQUFBLGlCQUFBLElEMUVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNDMEVFO0FBQUEsR0FBa0I7QUFBQSxZQUFBQyxRQUFBaEIsR0FBQVM7QUFBQUEsSUFHZjtBQUFBLEtBRUU7QUFBQSxzQkFBQU07QUFBQUEsa0JBQUEsSUQvRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUMrRU87QUFBQSxZQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFTLE9BQWEsU0FBYixpQkFDUztBQUFBO0FBQUEsR0QvRXpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAzMzksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc2VxLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgZmluZF9pbmRleCBwIHhzID1cbiAgbGV0IHJlYyBhdXggaSB4cyA9IG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5vbmVcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBpZiBwIHggdGhlbiBTb21lIGkgZWxzZSBhdXggKGkrMSkgeHMgaW5cbiAgYXV4IDAgeHNcblxubGV0IHJlYyBmaW5kX21hcCBmIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOb25lXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgZmluZF9tYXAgZiB4c1xuICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+XG4gICAgICAgICAgcmVzdWx0XG5cbmxldCBmaW5kX21hcGkgZiB4cyA9XG4gIGxldCByZWMgYXV4IGkgeHMgPSBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGF1eCAoaSsxKSB4c1xuICAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICAgIHJlc3VsdCBpblxuICBhdXggMCB4c1xuXG4oKiBbaXRlcjJdLCBbZm9sZF9sZWZ0Ml0sIFtmb3JfYWxsMl0sIFtleGlzdHMyXSwgW21hcDJdLCBbemlwXSB3b3JrIGFsc28gaW5cbiAgIHRoZSBjYXNlIHdoZXJlIHRoZSB0d28gc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMuIFRoZXkgc3RvcCBhcyBzb29uXG4gICBhcyBvbmUgc2VxdWVuY2UgaXMgZXhoYXVzdGVkLiBUaGVpciBiZWhhdmlvciBpcyBzbGlnaHRseSBhc3ltbWV0cmljOiB3aGVuXG4gICBbeHNdIGlzIGVtcHR5LCB0aGV5IGRvIG5vdCBmb3JjZSBbeXNdOyBob3dldmVyLCB3aGVuIFt5c10gaXMgZW1wdHksIFt4c10gaXNcbiAgIGZvcmNlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gYXBwbGljYXRpb24gW3hzKCldIHR1cm5zIG91dFxuICAgdG8gYmUgdXNlbGVzcy4gKilcblxubGV0IHJlYyBpdGVyMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICAoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgpXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5O1xuICAgICAgICAgIGl0ZXIyIGYgeHMgeXNcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgYWNjdVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGFjY3VcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgeCB5IGluXG4gICAgICAgICAgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXNcblxubGV0IHJlYyBmb3JfYWxsMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSAmJiBmb3JfYWxsMiBmIHhzIHlzXG5cbmxldCByZWMgZXhpc3RzMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBmYWxzZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5IHx8IGV4aXN0czIgZiB4cyB5c1xuXG5sZXQgcmVjIGVxdWFsIGVxIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgZXEgeCB5ICYmIGVxdWFsIGVxIHhzIHlzXG4gIHwgTmlsLCBDb25zIChfLCBfKVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgIGZhbHNlXG5cbmxldCByZWMgY29tcGFyZSBjbXAgeHMgeXMgPVxuICBtYXRjaCB4cygpLCB5cygpIHdpdGhcbiAgfCBOaWwsIE5pbCAtPlxuICAgICAgMFxuICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4IHkgaW5cbiAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZSBjb21wYXJlIGNtcCB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXykgLT5cbiAgICAgIC0xXG4gIHwgQ29ucyAoXywgXyksIE5pbCAtPlxuICAgICAgKzFcblxuXG5cbigqIFtpbml0X2F1eCBmIGkgal0gaXMgdGhlIHNlcXVlbmNlIFtmIGksIC4uLiwgZiAoai0xKV0uICopXG5cbmxldCByZWMgaW5pdF9hdXggZiBpIGogKCkgPVxuICBpZiBpIDwgaiB0aGVuIGJlZ2luXG4gICAgQ29ucyAoZiBpLCBpbml0X2F1eCBmIChpICsgMSkgailcbiAgZW5kXG4gIGVsc2VcbiAgICBOaWxcblxubGV0IGluaXQgbiBmID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU2VxLmluaXRcIlxuICBlbHNlXG4gICAgaW5pdF9hdXggZiAwIG5cblxubGV0IHJlYyByZXBlYXQgeCAoKSA9XG4gIENvbnMgKHgsIHJlcGVhdCB4KVxuXG5sZXQgcmVjIGZvcmV2ZXIgZiAoKSA9XG4gIENvbnMgKGYoKSwgZm9yZXZlciBmKVxuXG4oKiBUaGlzIHByZWxpbWluYXJ5IGRlZmluaXRpb24gb2YgW2N5Y2xlXSByZXF1aXJlcyB0aGUgc2VxdWVuY2UgW3hzXVxuICAgdG8gYmUgbm9uZW1wdHkuIEFwcGx5aW5nIGl0IHRvIGFuIGVtcHR5IHNlcXVlbmNlIHdvdWxkIHByb2R1Y2UgYVxuICAgc2VxdWVuY2UgdGhhdCBkaXZlcmdlcyB3aGVuIGl0IGlzIGZvcmNlZC4gKilcblxubGV0IHJlYyBjeWNsZV9ub25lbXB0eSB4cyAoKSA9XG4gIGFwcGVuZCB4cyAoY3ljbGVfbm9uZW1wdHkgeHMpICgpXG5cbigqIFtjeWNsZSB4c10gY2hlY2tzIHdoZXRoZXIgW3hzXSBpcyBlbXB0eSBhbmQsIGlmIHNvLCByZXR1cm5zIGFuIGVtcHR5XG4gICBzZXF1ZW5jZS4gT3RoZXJ3aXNlLCBbY3ljbGUgeHNdIHByb2R1Y2VzIG9uZSBjb3B5IG9mIFt4c10gZm9sbG93ZWRcbiAgIHdpdGggdGhlIGluZmluaXRlIHNlcXVlbmNlIFtjeWNsZV9ub25lbXB0eSB4c10uIFRodXMsIHRoZSBub25lbXB0aW5lc3NcbiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBqdXN0IG9uY2UuICopXG5cbmxldCBjeWNsZSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMnKSAtPlxuICAgICAgQ29ucyAoeCwgYXBwZW5kIHhzJyAoY3ljbGVfbm9uZW1wdHkgeHMpKVxuXG4oKiBbaXRlcmF0ZTEgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW2YgeCwgZiAoZiB4KSwgLi4uXS5cbiAgIEl0IGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKGl0ZXJhdGUgZiB4KV0uXG4gICBbaXRlcmF0ZTFdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0uICopXG5cbmxldCByZWMgaXRlcmF0ZTEgZiB4ICgpID1cbiAgbGV0IHkgPSBmIHggaW5cbiAgQ29ucyAoeSwgaXRlcmF0ZTEgZiB5KVxuXG4oKiBbaXRlcmF0ZSBmIHhdIGlzIHRoZSBzZXF1ZW5jZSBbeCwgZiB4LCAuLi5dLiAqKVxuXG4oKiBUaGUgcmVhc29uIHdoeSB3ZSBnaXZlIHRoaXMgc2xpZ2h0bHkgaW5kaXJlY3QgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0sXG4gICBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIG5haXZlIGRlZmluaXRpb24gdGhhdCBtYXkgY29tZSB0byBtaW5kLCBpcyB0aGF0XG4gICB3ZSBhcmUgY2FyZWZ1bCB0byBhdm9pZCBldmFsdWF0aW5nIFtmIHhdIHVudGlsIHRoaXMgZnVuY3Rpb24gY2FsbCBpc1xuICAgYWN0dWFsbHkgbmVjZXNzYXJ5LiBUaGUgbmFpdmUgZGVmaW5pdGlvbiAobm90IHNob3duIGhlcmUpIGNvbXB1dGVzIHRoZVxuICAgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBzZXF1ZW5jZSwgW2YgeF0sIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzXG4gICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICopXG5cbmxldCBpdGVyYXRlIGYgeCA9XG4gIGNvbnMgeCAoaXRlcmF0ZTEgZiB4KVxuXG5cblxubGV0IHJlYyBtYXBpX2F1eCBmIGkgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoZiBpIHgsIG1hcGlfYXV4IGYgKGkrMSkgeHMpXG5cbmxldFtAaW5saW5lXSBtYXBpIGYgeHMgPVxuICBtYXBpX2F1eCBmIDAgeHNcblxuKCogW3RhaWxfc2NhbiBmIHMgeHNdIGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKHNjYW4gZiBzIHhzKV0uXG4gICBbdGFpbF9zY2FuXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW3NjYW5dLiAqKVxuXG4oKiBUaGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW3NjYW5dIGlzIG1lYW50IHRvIGF2b2lkIGNvbXB1dGluZ1xuICAgZWxlbWVudHMgdG9vIGVhcmx5OyBzZWUgdGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgW2l0ZXJhdGUxXSBhbmQgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIHRhaWxfc2NhbiBmIHMgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbGV0IHMgPSBmIHMgeCBpblxuICAgICAgQ29ucyAocywgdGFpbF9zY2FuIGYgcyB4cylcblxubGV0IHNjYW4gZiBzIHhzID1cbiAgY29ucyBzICh0YWlsX3NjYW4gZiBzIHhzKVxuXG4oKiBbdGFrZV0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW3Rha2UgMCB4c10gcmV0dXJucyBbZW1wdHldXG4gICBpbW1lZGlhdGVseSwgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCByZWMgdGFrZV9hdXggbiB4cyA9XG4gIGlmIG4gPSAwIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgIENvbnMgKHgsIHRha2VfYXV4IChuLTEpIHhzKVxuXG5sZXQgdGFrZSBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS50YWtlXCI7XG4gIHRha2VfYXV4IG4geHNcblxuKCogW2ZvcmNlX2Ryb3AgbiB4c10gaXMgZXF1aXZhbGVudCB0byBbZHJvcCBuIHhzICgpXS5cbiAgIFtmb3JjZV9kcm9wIG4geHNdIHJlcXVpcmVzIFtuID4gMF0uXG4gICBbZm9yY2VfZHJvcF0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtkcm9wXS4gKilcblxubGV0IHJlYyBmb3JjZV9kcm9wIG4geHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKF8sIHhzKSAtPlxuICAgICAgbGV0IG4gPSBuIC0gMSBpblxuICAgICAgaWYgbiA9IDAgdGhlblxuICAgICAgICB4cygpXG4gICAgICBlbHNlXG4gICAgICAgIGZvcmNlX2Ryb3AgbiB4c1xuXG4oKiBbZHJvcF0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW2Ryb3AgMCB4c10gcmV0dXJucyBbeHNdIGltbWVkaWF0ZWx5LFxuICAgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCBkcm9wIG4geHMgPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiU2VxLmRyb3BcIlxuICBlbHNlIGlmIG4gPSAwIHRoZW5cbiAgICB4c1xuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBmb3JjZV9kcm9wIG4geHNcblxubGV0IHJlYyB0YWtlX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgaWYgcCB4IHRoZW4gQ29ucyAoeCwgdGFrZV93aGlsZSBwIHhzKSBlbHNlIE5pbFxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIGFzIG5vZGUgLT5cbiAgICAgIGlmIHAgeCB0aGVuIGRyb3Bfd2hpbGUgcCB4cyAoKSBlbHNlIG5vZGVcblxubGV0IHJlYyBncm91cCBlcSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBDb25zIChjb25zIHggKHRha2Vfd2hpbGUgKGVxIHgpIHhzKSwgZ3JvdXAgZXEgKGRyb3Bfd2hpbGUgKGVxIHgpIHhzKSlcblxuZXhjZXB0aW9uIEZvcmNlZF90d2ljZVxuXG5tb2R1bGUgU3VzcGVuc2lvbiA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egc3VzcGVuc2lvbiA9XG4gICAgdW5pdCAtPiAnYVxuXG4gICgqIENvbnZlcnNpb25zLiAqKVxuXG4gIGxldCB0b19sYXp5IDogJ2Egc3VzcGVuc2lvbiAtPiAnYSBMYXp5LnQgPVxuICAgIExhenkuZnJvbV9mdW5cbiAgICAoKiBmdW4gcyAtPiBsYXp5IChzKCkpICopXG5cbiAgbGV0IGZyb21fbGF6eSAocyA6ICdhIExhenkudCkgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmdW4gKCkgLT4gTGF6eS5mb3JjZSBzXG5cbiAgKCogW21lbW9pemVdIHR1cm5zIGFuIGFyYml0cmFyeSBzdXNwZW5zaW9uIGludG8gYSBwZXJzaXN0ZW50IHN1c3BlbnNpb24uICopXG5cbiAgbGV0IG1lbW9pemUgKHMgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGZyb21fbGF6eSAodG9fbGF6eSBzKVxuXG4gICgqIFtmYWlsdXJlXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBmYWlscyB3aGVuIGZvcmNlZC4gKilcblxuICBsZXQgZmFpbHVyZSA6IF8gc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBBIHN1c3BlbnNpb24gY3JlYXRlZCBieSBbb25jZV0gaGFzIGJlZW4gZm9yY2VkIHR3aWNlLiAqKVxuICAgICAgcmFpc2UgRm9yY2VkX3R3aWNlXG5cbiAgKCogSWYgW2ZdIGlzIGEgc3VzcGVuc2lvbiwgdGhlbiBbb25jZSBmXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBjYW4gYmUgZm9yY2VkXG4gICAgIGF0IG1vc3Qgb25jZS4gSWYgaXQgaXMgZm9yY2VkIG1vcmUgdGhhbiBvbmNlLCB0aGVuIFtGb3JjZWRfdHdpY2VdIGlzXG4gICAgIHJhaXNlZC4gKilcblxuICBsZXQgb25jZSAoZiA6ICdhIHN1c3BlbnNpb24pIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgbGV0IGFjdGlvbiA9IEF0b21pYy5tYWtlIGYgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgICgqIEdldCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IHN0b3JlZCBpbiBbYWN0aW9uXSwgYW5kIHdyaXRlIHRoZVxuICAgICAgICAgZnVuY3Rpb24gW2ZhaWx1cmVdIGluIGl0cyBwbGFjZSwgc28gdGhlIG5leHQgYWNjZXNzIHdpbGwgcmVzdWx0XG4gICAgICAgICBpbiBhIGNhbGwgdG8gW2ZhaWx1cmUoKV0uICopXG4gICAgICBsZXQgZiA9IEF0b21pYy5leGNoYW5nZSBhY3Rpb24gZmFpbHVyZSBpblxuICAgICAgZigpXG5cbmVuZCAoKiBTdXNwZW5zaW9uICopXG5cbmxldCByZWMgbWVtb2l6ZSB4cyA9XG4gIFN1c3BlbnNpb24ubWVtb2l6ZSAoZnVuICgpIC0+XG4gICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgQ29ucyAoeCwgbWVtb2l6ZSB4cylcbiAgKVxuXG5sZXQgcmVjIG9uY2UgeHMgPVxuICBTdXNwZW5zaW9uLm9uY2UgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG9uY2UgeHMpXG4gIClcblxuXG5sZXQgcmVjIHppcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKCh4LCB5KSwgemlwIHhzIHlzKVxuXG5sZXQgcmVjIG1hcDIgZiB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKGYgeCB5LCBtYXAyIGYgeHMgeXMpXG5cbmxldCByZWMgaW50ZXJsZWF2ZSB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgeXMoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoeCwgaW50ZXJsZWF2ZSB5cyB4cylcblxuKCogW3NvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIChjb25zIHggeHMpIHlzXS5cblxuICAgW3NvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIHhzIChjb25zIHkgeXMpXS5cblxuICAgW3NvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSAoY29ucyB5IHlzKV0uXG5cbiAgIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBidWlsZGluZyBibG9ja3MgaW4gdGhlIGRlZmluaXRpb25cbiAgIG9mIFtzb3J0ZWRfbWVyZ2VdLiAqKVxuXG5sZXQgcmVjIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzICgpID1cbiAgbWF0Y2ggeXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh4LCB4cylcbiAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMXIgY21wIHhzIHkgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIENvbnMgKHksIHlzKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzXG5cbmFuZCBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXMgPVxuICBpZiBjbXAgeCB5IDw9IDAgdGhlblxuICAgIENvbnMgKHgsIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzKVxuICBlbHNlXG4gICAgQ29ucyAoeSwgc29ydGVkX21lcmdlMWwgY21wIHggeHMgeXMpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgY21wIHhzIHlzICgpID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IE5pbCwgY1xuICAgIHwgYywgTmlsIC0+XG4gICAgICAgIGNcbiAgICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5cbmxldCByZWMgbWFwX2ZzdCB4eXMgKCkgPVxuICBtYXRjaCB4eXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICgoeCwgXyksIHh5cykgLT5cbiAgICAgIENvbnMgKHgsIG1hcF9mc3QgeHlzKVxuXG5sZXQgcmVjIG1hcF9zbmQgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKF8sIHkpLCB4eXMpIC0+XG4gICAgICBDb25zICh5LCBtYXBfc25kIHh5cylcblxubGV0IHVuemlwIHh5cyA9XG4gIG1hcF9mc3QgeHlzLCBtYXBfc25kIHh5c1xuXG5sZXQgc3BsaXQgPVxuICB1bnppcFxuXG4oKiBbZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgIFtmaWx0ZXJfbWFwIEVpdGhlci5maW5kX2xlZnQgKG1hcCBmIHhzKV0uICopXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRWl0aGVyLkxlZnQgeSAtPlxuICAgICAgICAgIENvbnMgKHksIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzKVxuICAgICAgfCBFaXRoZXIuUmlnaHQgXyAtPlxuICAgICAgICAgIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMgKClcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IHogLT5cbiAgICAgICAgICBDb25zICh6LCBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMpXG5cbmxldCBwYXJ0aXRpb25fbWFwIGYgeHMgPVxuICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyxcbiAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzXG5cbmxldCBwYXJ0aXRpb24gcCB4cyA9XG4gIGZpbHRlciBwIHhzLCBmaWx0ZXIgKGZ1biB4IC0+IG5vdCAocCB4KSkgeHNcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW3BlZWwgeHNzXSBpcyBhIHBhaXIgb2ZcbiAgIHRoZSBmaXJzdCBjb2x1bW4gKGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMpIGFuZCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZVxuICAgbWF0cml4IChhIHNlcXVlbmNlIG9mIHNob3J0ZXIgcm93cykuIFRoZXNlIHR3byBzZXF1ZW5jZXMgaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBUaGUgcm93cyBvZiB0aGUgbWF0cml4IFt4c3NdIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBBbiBlbXB0eSByb3cgaXMgaWdub3JlZC4gKilcblxuKCogQmVjYXVzZSBbcGVlbF0gdXNlcyBbdW56aXBdLCBpdHMgYXJndW1lbnQgbXVzdCBiZSBwZXJzaXN0ZW50LiBUaGUgc2FtZVxuICAgcmVtYXJrIGFwcGxpZXMgdG8gW3RyYW5zcG9zZV0sIFtkaWFnb25hbHNdLCBbcHJvZHVjdF0sIGV0Yy4gKilcblxubGV0IHBlZWwgeHNzID1cbiAgdW56aXAgKGZpbHRlcl9tYXAgdW5jb25zIHhzcylcblxubGV0IHJlYyB0cmFuc3Bvc2UgeHNzICgpID1cbiAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgeHNzIGluXG4gIGlmIGlzX2VtcHR5IGhlYWRzIHRoZW4gYmVnaW5cbiAgICBhc3NlcnQgKGlzX2VtcHR5IHRhaWxzKTtcbiAgICBOaWxcbiAgZW5kXG4gIGVsc2VcbiAgICBDb25zIChoZWFkcywgdHJhbnNwb3NlIHRhaWxzKVxuXG4oKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gW2RpYWdvbmFsc10gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsIFtyZW1haW5kZXJzXSxcbiAgIHdoaWNoIGNvbnRhaW5zIHRoZSByZW1haW5kZXJzIG9mIHRoZSByb3dzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAgIGRpc2NvdmVyZWQuICopXG5cbmxldCByZWMgZGlhZ29uYWxzIHJlbWFpbmRlcnMgeHNzICgpID1cbiAgbWF0Y2ggeHNzKCkgd2l0aFxuICB8IENvbnMgKHhzLCB4c3MpIC0+XG4gICAgICBiZWdpbiBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgbm9uZW1wdHkgcm93IFt4IDo6IHhzXS4gVGh1cywgdGhlIG5leHQgZGlhZ29uYWxcbiAgICAgICAgICAgICBpcyBbeCA6OiBoZWFkc106IHRoaXMgZGlhZ29uYWwgYmVnaW5zIHdpdGggW3hdIGFuZCBjb250aW51ZXMgd2l0aFxuICAgICAgICAgICAgIHRoZSBmaXJzdCBlbGVtZW50IG9mIGV2ZXJ5IHJvdyBpbiBbcmVtYWluZGVyc10uIEluIHRoZSByZWN1cnNpdmVcbiAgICAgICAgICAgICBjYWxsLCB0aGUgYXJndW1lbnQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIFt4cyA6OlxuICAgICAgICAgICAgIHRhaWxzXSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3csIFt4c10sXG4gICAgICAgICAgICAgYW5kIHRoYXQgd2Uga2VlcCB0aGUgdGFpbHMgb2YgdGhlIHByZS1leGlzdGluZyByZW1haW5pbmcgcm93cy4gKilcbiAgICAgICAgICBsZXQgaGVhZHMsIHRhaWxzID0gcGVlbCByZW1haW5kZXJzIGluXG4gICAgICAgICAgQ29ucyAoY29ucyB4IGhlYWRzLCBkaWFnb25hbHMgKGNvbnMgeHMgdGFpbHMpIHhzcylcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgZW1wdHkgcm93LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlhZ29uYWwgaXNcbiAgICAgICAgICAgICBqdXN0IFtoZWFkc10sIGFuZCBbcmVtYWluZGVyc10gaXMgaW5zdGFudGlhdGVkIHdpdGgganVzdCBbdGFpbHNdLFxuICAgICAgICAgICAgIGFzIHdlIGRvIG5vdCBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3cuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGhlYWRzLCBkaWFnb25hbHMgdGFpbHMgeHNzKVxuICAgICAgZW5kXG4gIHwgTmlsIC0+XG4gICAgICAoKiBUaGVyZSBhcmUgbm8gbW9yZSByb3dzIHRvIGJlIGRpc2NvdmVyZWQuIFRoZXJlIHJlbWFpbnMgdG8gZXhoYXVzdFxuICAgICAgICAgdGhlIHJlbWFpbmluZyByb3dzLiAqKVxuICAgICAgdHJhbnNwb3NlIHJlbWFpbmRlcnMgKClcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW2RpYWdvbmFscyB4c3NdIGlzXG4gICB0aGUgc2VxdWVuY2Ugb2YgaXRzIGRpYWdvbmFscy5cblxuICAgVGhlIGZpcnN0IGRpYWdvbmFsIGNvbnRhaW5zIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBmaXJzdCByb3cuIFRoZSBzZWNvbmQgZGlhZ29uYWwgY29udGFpbnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBzZWNvbmQgcm93IGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHJvdzsgYW5kIHNvIG9uLlxuICAgVGhpcyBraW5kIG9mIGRpYWdvbmFsIGlzIGluIGZhY3Qgc29tZXRpbWVzIGtub3duIGFzIGFuIGFudGlkaWFnb25hbC5cblxuICAgLSBFdmVyeSBkaWFnb25hbCBpcyBhIGZpbml0ZSBzZXF1ZW5jZS5cbiAgIC0gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaW5pdGUgKGluIGVpdGhlciBkaXJlY3Rpb24pLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIG11c3QgYmUgcGVyc2lzdGVudC4gKilcblxubGV0IGRpYWdvbmFscyB4c3MgPVxuICBkaWFnb25hbHMgZW1wdHkgeHNzXG5cbmxldCBtYXBfcHJvZHVjdCBmIHhzIHlzID1cbiAgY29uY2F0IChkaWFnb25hbHMgKFxuICAgIG1hcCAoZnVuIHggLT5cbiAgICAgIG1hcCAoZnVuIHkgLT5cbiAgICAgICAgZiB4IHlcbiAgICAgICkgeXNcbiAgICApIHhzXG4gICkpXG5cbmxldCBwcm9kdWN0IHhzIHlzID1cbiAgbWFwX3Byb2R1Y3QgKGZ1biB4IHkgLT4gKHgsIHkpKSB4cyB5c1xuXG5sZXQgb2ZfZGlzcGVuc2VyIGl0ID1cbiAgbGV0IHJlYyBjICgpID1cbiAgICBtYXRjaCBpdCgpIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgTmlsXG4gICAgfCBTb21lIHggLT5cbiAgICAgICAgQ29ucyAoeCwgYylcbiAgaW5cbiAgY1xuXG5sZXQgdG9fZGlzcGVuc2VyIHhzID1cbiAgbGV0IHMgPSByZWYgeHMgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggKCFzKSgpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgcyA6PSB4cztcbiAgICAgICAgU29tZSB4XG5cblxuXG5sZXQgcmVjIGludHMgaSAoKSA9XG4gIENvbnMgKGksIGludHMgKGkgKyAxKSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQXRvbWljIiwiQ2FtbGludGVybmFsTGF6eSIsIlN0ZGxpYiIsIlN0ZGxpYl9MYXp5IiwiZW1wdHkiLCJwYXJhbSIsInJldHVybiQiLCJ4IiwiY29ucyIsIm5leHQiLCJhcHBlbmQiLCJzZXExIiwic2VxMiIsIm1hdGNoIiwibWFwIiwic2VxIiwiZmlsdGVyX21hcCIsInkiLCJmaWx0ZXIiLCJjb25jYXQiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsIml0ZXIiLCJ1bmZvbGQiLCJ1IiwiaXNfZW1wdHkiLCJ4cyIsInVuY29ucyIsImxlbmd0aCIsImFjY3UiLCJpdGVyaSIsImkiLCJmb2xkX2xlZnRpIiwiZm9yX2FsbCIsInAiLCJleGlzdHMiLCJmaW5kIiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwicmVzdWx0IiwiZmluZF9tYXBpIiwiaXRlcjIiLCJ5cyIsImZvbGRfbGVmdDIiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJlcXVhbCIsImVxIiwiY29tcGFyZSIsImNtcCIsImMiLCJpbml0X2F1eCIsImoiLCJpbml0IiwibiIsInJlcGVhdCIsImZvcmV2ZXIiLCJjeWNsZV9ub25lbXB0eSIsImN5Y2xlIiwiaXRlcmF0ZTEiLCJpdGVyYXRlIiwibWFwaV9hdXgiLCJtYXBpIiwidGFpbF9zY2FuIiwicyIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJGb3JjZWRfdHdpY2UiLCJ0b19sYXp5IiwiZmFpbHVyZSIsIm1lbW9pemUiLCJvbmNlIiwiYWN0aW9uIiwiemlwIiwibWFwMiIsImludGVybGVhdmUiLCJzb3J0ZWRfbWVyZ2UxIiwic29ydGVkX21lcmdlIiwibWFwX2ZzdCIsInh5cyIsIm1hcF9zbmQiLCJ1bnppcCIsImZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCIsImZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAiLCJ6IiwicGFydGl0aW9uX21hcCIsInBhcnRpdGlvbiIsInBlZWwiLCJ4c3MiLCJ0cmFuc3Bvc2UiLCJ0YWlscyIsImhlYWRzIiwicmVtYWluZGVycyIsIm1hcF9wcm9kdWN0IiwicHJvZHVjdCIsIm9mX2Rpc3BlbnNlciIsIml0IiwidG9fZGlzcGVuc2VyIiwiaW50cyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFB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LFNBQUFOLElBRk07QUFBQSxLQUlOO0FBQUEsSUFBVztBQUFBLElBRWpCO0FBQUEsR0FBQztBQUFBLFlBQUFpRyxhQUFBN0U7QUFBQUEsUUFBQXNDLElBR0Q7QUFBQSxJQUNBLGdCQUFBNUQ7QUFBQUEsU0FBQVEsUUFDUTtBQUFBLEtBQU0sWUFFUjtBQUFBLFNBQUFjLEtBRlEsVUFBQXBCLElBQUE7QUFBQSxLQUlSO0FBQUEsS0FDQSxjQUFNLENBTlo7QUFBQSxHQU1ZO0FBQUEsWUFBQWtHLEtBQUF6RSxHQUFBM0I7QUFBQUEsUUFBQSxJQUtIO0FBQUEsSUFBWSwwQkFBWixvQkFBWTtBQUFBLEdBQUM7QUFBQSxHRDdyQnhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEwMzIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb3B0aW9uLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsInNvbWUiLCJ2IiwidmFsdWUiLCJvIiwiZGVmYXVsdCQiLCJnZXQiLCJwYXJhbSIsImJpbmQiLCJqb2luIiwibWFwIiwiZm9sZCIsIm5vbmUiLCJpdGVyIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0NrQmEsY0FBTTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLElBQ0ksUUFBbUM7QUFBQSxRQUFBSCxJQUFuQztBQUFBLElBQXVCO0FBQUEsR0FBbUI7QUFBQSxZQUFBSSxJQUFBQztBQUFBQSxJQUN2RCxZQUErQiw2Q0FBNEI7QUFBQSxRQUFBTCxJQUEzRDtBQUFBLElBQW1CO0FBQUEsR0FBd0M7QUFBQSxZQUFBTSxLQUFBSixHQUFBVjtBQUFBQSxJQUN0RCxRQUFxQjtBQUFBLFFBQUFRLElBQXJCO0FBQUEsSUFBc0MsdUJBQUc7QUFBQTtBQUFBLFlBQUFPLEtBQUFGLE9BQzdDLFlBQStCLGNBQUFILElBQS9CLFVBQW1CLFNBQWdCO0FBQUEsWUFBQU0sSUFBQWhCLEdBQUFVO0FBQUFBLElBQ2hDLFFBQXFCO0FBQUEsUUFBQUYsSUFBckI7QUFBQSxJQUEyQyw0QkFBSztBQUFBO0FBQUEsWUFBQVMsS0FBQUMsTUFBQVgsTUFBQU07QUFBQUEsSUFDckQsWUFBa0Q7QUFBQSxRQUFBTCxJQUFsRDtBQUFBLElBQWlDLDBCQUFxQjtBQUFBO0FBQUEsWUFBQVcsS0FBQW5CLEdBQUFhO0FBQUFBLElBQ3RELFlBQXFDO0FBQUEsUUFBQUwsSUFBckM7QUFBQSxJQUF1Qix1QkFBZ0I7QUFBQTtBQUFBLFlBQUFZLFFBQUFQLE9BQ2xDLG9CQUF1QztBQUFBLFlBQUFRLFFBQUFSLE9BQ3ZDLG9CQUF1QztBQUFBLFlBQUFTLE1BQUFDLElBQUFDLElBQUFDO0FBQUFBLElBRWhDO0FBQUEsZ0JBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUNDLDZCQUVWO0FBQUE7QUFBQSxrQkFESTtBQUFBLElBQ1Q7QUFBQSxHQUFLO0FBQUEsWUFBQUMsUUFBQUMsS0FBQUwsSUFBQUM7QUFBQUEsSUFFWSwyQkFJTDtBQUFBLFFBQUFFLEtBSks7QUFBQSxhQUlOO0FBQUEsUUFBQUQsS0FKTTtBQUFBLElBQ0YsOEJBR0g7QUFBQTtBQUFBLFlBQUFJLFVBQUFaLE1BQUFMO0FBQUFBLElBRUwsWUFBeUI7QUFBQSxRQUFBTCxJQUF6QjtBQUFBLElBQWdEO0FBQUEsR0FBSTtBQUFBLFlBQUF1QixRQUFBbEI7QUFBQUEsSUFDcEQsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQjtBQUFBLElBQWdDO0FBQUEsR0FBRztBQUFBLFlBQUF3QixPQUFBbkI7QUFBQUEsSUFDcEMsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQixjQUF1QztBQUFBLHVCRDFDcEQsZ0JDMENvRDtBQUFBLEdBQVk7QUFBQSxHRDFDaEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTE0MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jaGFyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfaGFzaCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiU3RkbGliIiwiY2hyIiwibiIsImVzY2FwZWQiLCJjIiwicyIsImxvd2VyY2FzZV9hc2NpaSIsInVwcGVyY2FzZV9hc2NpaSIsImNvbXBhcmUiLCJjMSIsImMyIiwiZXF1YWwiLCJzZWVkZWRfaGFzaCIsInNlZWQiLCJ4IiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLElBQUFDO0FBQUFBLElDcUJFLHVCQUFxRDtBQUFBLElBQTVCLHVDQUF3QztBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0FPckQ7QUFBQSxtQkFFRjtBQUFBLE1BRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1GO0FBQUE7QUFBQSxVQUZBO0FBQUE7QUFBQSxVQURBO0FBQUE7QUFBQSxVQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFMRSxZQUNGO0FBQUE7QUFBQSxTQUFBQyxNQU9FO0FBQUEsS0FDUjtBQUFBLEtBQ0EsZ0NBUWtCO0FBQUE7QUFBQSxRQUFBQSxJQUxWO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQWtCO0FBQUE7QUFBQSxZQUFBQyxnQkFBQUYsR0FFRix5Q0FFWjtBQUFBLFlBQUFHLGdCQUFBSCxHQUVZLHlDQUVaO0FBQUEsWUFBQUksUUFBQUMsSUFBQUMsSUFJVSxtQkFBaUI7QUFBQSxZQUFBQyxNQUFBRixJQUFBQyxJQUNJLG1DQUFJO0FBQUEsWUFBQUUsWUFBQUMsTUFBQUMsR0FJcEIsa0NBQStCO0FBQUEsWUFBQUMsS0FBQUQsR0FDM0MsK0JBQTRCO0FBQUEsR0RoRXpDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEyMTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvdWNoYXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJpIiwib2ZfaW50IiwiaXNfY2hhciIsIm9mX2NoYXIiLCJjIiwidG9fY2hhciIsInVuc2FmZV90b19jaGFyIiwiZXF1YWwiLCJjb21wYXJlIiwiaGFzaCIsInV0Zl9kZWNvZGVfaXNfdmFsaWQiLCJkIiwidXRmX2RlY29kZV9sZW5ndGgiLCJ1dGZfZGVjb2RlX3VjaGFyIiwidXRmX2RlY29kZSIsIm4iLCJ1dGZfZGVjb2RlX2ludmFsaWQiLCJjc3RfdWNoYXJfbWwiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsIlN0ZGxpYl9VY2hhciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBLElDaUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2dCO0FBQUEseUJBQ1g7QUFBQTtBQUFBLFlBQUFDLEtBQUFEO0FBQUFBLElBR0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDZ0I7QUFBQSx5QkFDWDtBQUFBO0FBQUEsWUFBQUUsU0FBQUM7QUFBQUEsUUFBQSxJQUVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQTBEO0FBQUEsWUFBQUMsT0FBQUQ7QUFBQUEsSUFDekQsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE9BeEJFO0FBQUEsZUFBakI7QUFBQSxJQXdCZ0Q7QUFBQTtBQUFBLFlBQUFFLFFBQUFMLEdBSW5ELHVCQUFPO0FBQUEsWUFBQU0sUUFBQUMsR0FDUCxTQUFXO0FBQUEsWUFBQUMsUUFBQVI7QUFBQUEsSUFFekIsYUFDQTtBQUFBO0FBQUE7QUFBQSxPQS9CNEI7QUFBQTtBQUFBLFNBQWtEO0FBQUEsSUE4QmhDLDhCQUM3QjtBQUFBO0FBQUEsWUFBQVMsZUFBQSxHRG5EbkI7QUFBQSxZQUFBQyxNQUFBO0FBQUEsT0FBQUMsVUFBQTtBQUFBLFlBQUFDLEtBQUE7QUFBQSxZQUFBQyxvQkFBQUMsR0N3RXFDLG9DQUFxQjtBQUFBLFlBQUFDLGtCQUFBRCxHQUN2QiwwQkFBOEI7QUFBQSxZQUFBRSxpQkFBQUYsR0FDL0Isb0JBQStCO0FBQUEsWUFBQUcsV0FBQUMsR0FBQWxCLEdBQ25DLHlCQUEwQztBQUFBLFlBQUFtQixtQkFBQUQsR0FDcEMsdUJBQTJCO0FBQUE7QUFBQSxJQUFBRSxlRDVFL0Q7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUFyQjtBQUFBQSxJQytFUyxVQUFTO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixjQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQSxXRHBGbkI7QUFBQSxZQUFBc0IsbUJBQUF0QjtBQUFBQSxJQ3VGUyxVQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUF1QjtBQUFBQSxNRDFGbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTMzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9saXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdCBpIGxhc3QgZiA9XG4gIGlmIGkgPiBsYXN0IHRoZW4gW11cbiAgZWxzZSBpZiBpID0gbGFzdCB0aGVuIFtmIGldXG4gIGVsc2VcbiAgICBsZXQgcjEgPSBmIGkgaW5cbiAgICBsZXQgcjIgPSBmIChpKzEpIGluXG4gICAgcjEgOjogcjIgOjogaW5pdCAoaSsyKSBsYXN0IGZcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGluaXQgMCAobGVuIC0gMSkgZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IFthMV0gLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIGxldCByMiA9IGYgYTIgaW5cbiAgICAgIHIxOjpyMjo6bWFwIGYgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBbYTFdIC0+XG4gICAgICBsZXQgcjEgPSBmIGkgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgaSBhMSBpblxuICAgICAgbGV0IHIyID0gZiAoaSsxKSBhMiBpblxuICAgICAgcjE6OnIyOjptYXBpIChpKzIpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChbYTFdLCBbYjFdKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgW3IxXVxuICB8IChhMTo6YTI6OmwxLCBiMTo6YjI6OmwyKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgbGV0IHIyID0gZiBhMiBiMiBpblxuICAgICAgcjE6OnIyOjptYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IGZpbmRfaW5kZXggcCA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgcCBhIHRoZW4gU29tZSBpIGVsc2UgYXV4IChpKzEpIGwgaW5cbiAgYXV4IDBcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX21hcGkgZiA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gYXV4IChpKzEpIGxcbiAgICAgZW5kIGluXG4gIGF1eCAwXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfYWxsIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggOjogZmluZF9hbGwgcCBsIGVsc2UgZmluZF9hbGwgcCBsXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJpIHAgaSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4OjpsIC0+XG4gICAgICBsZXQgaScgPSBpICsgMSBpblxuICAgICAgaWYgcCBpIHggdGhlbiB4IDo6IGZpbHRlcmkgcCBpJyBsIGVsc2UgZmlsdGVyaSBwIGknIGxcblxubGV0IGZpbHRlcmkgcCBsID0gZmlsdGVyaSBwIDAgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBsXG4gICAgICB8IFNvbWUgdiAtPiB2IDo6IGZpbHRlcl9tYXAgZiBsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbmNhdF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4Ojp4cyAtPiBwcmVwZW5kX2NvbmNhdF9tYXAgKGYgeCkgZiB4c1xuYW5kW0B0YWlsX21vZF9jb25zXSBwcmVwZW5kX2NvbmNhdF9tYXAgeXMgZiB4cyA9XG4gIG1hdGNoIHlzIHdpdGhcbiAgfCBbXSAtPiBjb25jYXRfbWFwIGYgeHNcbiAgfCB5IDo6IHlzIC0+IHkgOjogcHJlcGVuZF9jb25jYXRfbWFwIHlzIGYgeHNcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSB2ZXJ5IGxvbmcgbGlzdCAobGVuZ3RoIG92ZXIgYWJvdXQgMTAwMDAwKSwgaXQgdXNlZCB0byBiZVxuICAgZmFzdGVyIHRvIGNvbnZlcnQgdGhlIGxpc3QgdG8gYW4gYXJyYXksIHNvcnQgdGhlIGFycmF5LCBhbmQgY29udmVydFxuICAgYmFjaywgdHJ1bmNhdGluZyB0aGUgYXJyYXkgb2JqZWN0IGFmdGVyIHByZXBlbmRpbmcgZWFjaCB0aG91c2FuZFxuICAgZW50cmllcyB0byB0aGUgcmVzdWx0aW5nIGxpc3QuIEltcG9zc2libGUgbm93IHRoYXQgT2JqLnRydW5jYXRlIGhhc1xuICAgYmVlbiByZW1vdmVkLiAqKVxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9zZXEgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IFtdXG4gIHwgU2VxLkNvbnMgKHgxLCBzZXEpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFt4MV1cbiAgICAgIHwgU2VxLkNvbnMgKHgyLCBzZXEpIC0+IHgxIDo6IHgyIDo6IG9mX3NlcSBzZXFcbiAgICAgIGVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiU3RkbGliIiwibGVuZ3RoIiwibCIsImxlbiIsInBhcmFtIiwiY29ucyIsImEiLCJoZCIsInRsIiwiY3N0X0xpc3RfbnRoIiwibnRoIiwibiIsIm50aF9vcHQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwibDEiLCJsMiIsInJldiIsImluaXQiLCJsYXN0IiwiaSIsInIxIiwicjIiLCJibG9jayIsImRzdCIsIm9mZnNldCIsImZsYXR0ZW4iLCJyIiwibWFwIiwibWF0Y2giLCJtYXBpIiwicmV2X21hcCIsImFjY3UiLCJpdGVyIiwiaXRlcmkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwibWFwMiIsImNzdF9MaXN0X21hcDIiLCJiMiIsImIxIiwicmV2X21hcDIiLCJpdGVyMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZm9yX2FsbDIiLCJleGlzdHMyIiwibWVtIiwieCIsIm1lbXEiLCJhc3NvYyIsImIiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInBhaXIiLCJyZW1vdmVfYXNzcSIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsInJlc3VsdCIsImZpbmRfbWFwaSIsImZpbmRfYWxsIiwiZmlsdGVyaSIsImZpbHRlcl9tYXAiLCJ2IiwiY29uY2F0X21hcCIsInhzIiwieXMiLCJ5IiwiZm9sZF9sZWZ0X21hcCIsImxfYWNjdSIsInBhcnRpdGlvbiIsInllcyIsIm5vIiwicGFydGl0aW9uX21hcCIsImxlZnQiLCJyaWdodCIsInNwbGl0IiwicnkiLCJyeCIsImNvbWJpbmUiLCJtZXJnZSIsImNtcCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic3RhYmxlX3NvcnQiLCJzb3J0IiwieDIiLCJ4MSIsInMiLCJ4MyIsIm4xIiwibjIiLCJzMSIsInMyIiwicmV2X3NvcnQiLCJzb3J0X3VuaXEiLCJjIiwiY29tcGFyZV9sZW5ndGhzIiwiY29tcGFyZV9sZW5ndGhfd2l0aCIsImlzX2VtcHR5IiwiZXF1YWwiLCJlcSIsImNvbXBhcmUiLCJ0b19zZXEiLCJhdXgiLCJ0YWlsIiwib2Zfc2VxIiwic2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdB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LEtBQWY7QUFBQTtBQUFBO0FBQUEsR0FDc0I7QUFBQSxZQUFBTyxPQUFBaEg7QUFBQUEsYUFBQWlILElBQUFqSCxHQUFBRTtBQUFBQSxLQUtMLFFBQ1Q7QUFBQSxTQUFBZ0gsT0FEUyxNQUFBakUsSUFBQTtBQUFBLEtBRW1CLDBCQUFSLHNCQUFRO0FBQUEsSUFBQztBQUFBLElBRXZDO0FBQUEsR0FBSztBQUFBLFlBQUFrRSxPQUFBQztBQUFBQSxRQUFBekYsUUFHQztBQUFBLElBQU0sWUFDQztBQUFBLFFBQUF5RixRQURELFVBQUFwQixLQUFBLFVBQUFyRSxVQUdJO0FBQUEsSUFBTSxjQUNMO0FBQUE7QUFBQSxLQUFBeUYsUUFESztBQUFBLEtBQUFyQixLQUFBO0FBQUEsS0FBQTFFLFFBRU07QUFBQSxLQUFBQyxNQUFZO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUE2RixRQUFBO0FBQUE7QUFBQSxTQUFBekYsVUFMbEM7QUFBQSxLQUFNO0FBQUE7QUFBQSxPQUFBeUYsUUFBQTtBQUFBLE9BQUFwQixPQUFBO0FBQUEsT0FBQXJFLFVBR0k7QUFBQSxNQUFNO0FBQUEsV0FBQXlGLFFBQUEsWUFBQXJCLE9BQUEsWUFBQXpFLFFBRU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURYO0FBQUE7QUFBQTtBQUFBLE1BSEo7QUFBQSxLQUlxQztBQUFBO0FBQUEsR0FDM0M7QUFBQSxHRHprQlQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMjY3NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaGFzaCIsImFicyIsIngiLCJsb2dub3QiLCJlcXVhbCIsImNvbXBhcmUiLCJtaW4iLCJ5IiwibWF4IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEseUJBQUFDLFlBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQzRCWSwyQkFBd0I7QUFBQSxZQUFBQyxPQUFBRCxHQU1yQixjQUFhO0FBQUEsWUFBQUUsTUFBQSxNRGxDNUI7QUFBQSxPQUFBQyxVQUFBO0FBQUEsWUFBQUMsSUFBQUosR0FBQUssR0N3Q2tCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFOLEdBQUFLLEdBQ3ZCLHFCQUF1QjtBQUFBLFlBQUFFLFVBQUFQLEdBVU47QUFBQSxZQUFBUSxZQUFBQyxNQUFBVCxHQUlWLGtDQUErQjtBQUFBLFlBQUFVLEtBQUFWLEdBQzNDLCtCQUE0QjtBQUFBLEdEeER6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEyNzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J5dGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCB1bnNhZmVfZXNjYXBlIHMgPVxuICAoKiBXZSBwZXJmb3JtIHR3byBwYXNzZXMgb24gdGhlIGlucHV0IHNlcXVlbmNlLCBvbmUgdG8gY29tcHV0ZSB0aGVcbiAgICAgcmVzdWx0IHNpemUgYW5kIG9uZSB0byB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgICMxMTUwOCwgIzExNTA5OiBUaGlzIGxvZ2ljIHdvdWxkIGJlIGluY29ycmVjdCBpbiBwcmVzZW5jZSBvZlxuICAgICBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgaW5wdXQsIG1ha2luZyB0aGUgdXNlIG9mXG4gICAgIFt1bnNhZmVfc2V0XSBiZWxvdyBtZW1vcnktdW5zYWZlLlxuXG4gICAgIFByZWNvbmRpdGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbjpcbiAgICAgLSBhbiBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZVxuICAgICAtIGEgdW5pcXVlbHktb3duZWQgYnl0ZSBzZXF1ZW5jZSAodGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcClcblxuICAgICBJbiBlaXRoZXIgY2FzZSB3ZSByZXR1cm4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlLlxuICAqKVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIHNcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBlc2NhcGVkIGIgPVxuICBsZXQgYiA9IGNvcHkgYiBpblxuICAoKiBXZSBjb3B5IG91ciBpbnB1dCB0byBvYnRhaW4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlIFtiXVxuICAgICB0byBzYXRpc2Z5IFt1bnNhZmVfZXNjYXBlXSdzIHByZWNvbmRpdGlvbiAqKVxuICB1bnNhZmVfZXNjYXBlIGJcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9ieXRlcyIsImNhbWxfYnN3YXAxNiIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfYnl0ZXNfZ2V0MzIiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1VjaGFyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfU3lzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfQ2hhciIsIm1ha2UiLCJuIiwiYyIsInMiLCJpbml0IiwiaSIsImVtcHR5IiwiY29weSIsImxlbiIsInIiLCJ0b19zdHJpbmciLCJiIiwib2Zfc3RyaW5nIiwic3ViIiwib2ZzIiwic3ViX3N0cmluZyIsInN5bWJvbCIsImEiLCJtYXRjaCIsImV4dGVuZCIsImxlZnQiLCJyaWdodCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsImZpbGwiLCJibGl0IiwiczEiLCJvZnMxIiwiczIiLCJvZnMyIiwiYmxpdF9zdHJpbmciLCJpdGVyIiwiaXRlcmkiLCJjb25jYXQiLCJzZXAiLCJsIiwic2VwbGVuIiwiYWNjIiwicGFyYW0iLCJwb3MiLCJoZCIsInRsIiwieCIsImRzdCIsImNhdCIsImwxIiwibDIiLCJpc19zcGFjZSIsInRyaW0iLCJqIiwidW5zYWZlX2VzY2FwZSIsImVzY2FwZWQiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiYXBwbHkxIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpbmRleCIsImluZGV4X3JlY19vcHQiLCJpbmRleF9vcHQiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfcmVjIiwicmluZGV4IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfcmVjX29wdCIsInJpbmRleF9vcHQiLCJyaW5kZXhfZnJvbV9vcHQiLCJjb250YWluc19mcm9tIiwiZXhuIiwiY29udGFpbnMiLCJyY29udGFpbnNfZnJvbSIsImNvbXBhcmUiLCJzcGxpdF9vbl9jaGFyIiwidG9fc2VxIiwiYXV4IiwidG9fc2VxaSIsIm9mX3NlcSIsImJ1ZiIsIm5ld19sZW4iLCJuZXdfYnVmIiwidW5zYWZlX2dldF91aW50MTZfbGUiLCJ1bnNhZmVfZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9sZSIsImdldF91aW50MTZfYmUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50NjRfbGUiLCJnZXRfaW50NjRfYmUiLCJ1bnNhZmVfc2V0X3VpbnQxNl9sZSIsInVuc2FmZV9zZXRfdWludDE2X2JlIiwic2V0X2ludDE2X2xlIiwic2V0X2ludDE2X2JlIiwic2V0X2ludDMyX2xlIiwic2V0X2ludDMyX2JlIiwic2V0X2ludDY0X2xlIiwic2V0X2ludDY0X2JlIiwiZGVjX2ludmFsaWQiLCJkZWNfcmV0IiwidSIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiZ2V0X3V0Zl84X3VjaGFyIiwibWF4IiwiY3N0X2J5dGVzX21sIiwic2V0X3V0Zl84X3VjaGFyIiwic2V0IiwibGFzdCIsImlzX3ZhbGlkX3V0Zl84IiwiY3N0X2luZGV4X291dF9vZl9ib3VuZHMiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJoaSIsImxvIiwic2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJzZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsIlN0ZGxpYl9CeXRlcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEs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cCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RyaW5nLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBiID0gYm9zIHMgaW5cbiAgKCogV2Ugc2F0aXNmeSBbdW5zYWZlX2VzY2FwZV0ncyBwcmVjb25kaXRpb24gYnkgcGFzc2luZyBhblxuICAgICBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZSBbYl0uICopXG4gIGJ0cyAoQi51bnNhZmVfZXNjYXBlIGIpXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2ggOiBpbnQgLT4gc3RyaW5nIC0+IGludCA9IFwiY2FtbF9zdHJpbmdfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2ggMCB4XG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfaGFzaCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiYnRzIiwiYm9zIiwibWFrZSIsIm4iLCJjIiwiaW5pdCIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJzdWIiLCJzIiwib2ZzIiwibGVuIiwiYmxpdCIsImNzdCIsImNvbmNhdCIsInNlcCIsImwiLCJzZXBsZW4iLCJhY2MiLCJwYXJhbSIsInBvcyIsImhkIiwidGwiLCJ4IiwiZHN0IiwiY2F0IiwiaXRlciIsImkiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJmb2xkX3JpZ2h0IiwiYSIsImZvbGRfbGVmdCIsImV4aXN0cyIsImZvcl9hbGwiLCJpc19zcGFjZSIsInRyaW0iLCJlc2NhcGVkIiwiYiIsImluZGV4X3JlYyIsImxpbSIsImluZGV4IiwiaW5kZXhfcmVjX29wdCIsImluZGV4X29wdCIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9yZWMiLCJyaW5kZXgiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9yZWNfb3B0IiwicmluZGV4X29wdCIsInJpbmRleF9mcm9tX29wdCIsImNvbnRhaW5zX2Zyb20iLCJleG4iLCJjb250YWlucyIsInJjb250YWluc19mcm9tIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJoYXNoIiwic3BsaXRfb25fY2hhciIsImoiLCJyIiwiY29tcGFyZSIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X2xlIiwiZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQzMl9iZSIsImdldF9pbnQ2NF9sZSIsImdldF9pbnQ2NF9iZSIsIlN0ZGxpYl9TdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQyxHQ21DRSxPQUFVLElBQVYsaUNBQWlCO0FBQUEsWUFBQUMsS0FBQUYsR0FBQVYsR0FFakIsT0FBVSxJQUFWLGlDQUFpQjtBQUFBLE9BQUFhLFdEckNuQixpQkFBQUMs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O0FBQUFBLFFBQUEsSUFDQztBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUEyRCxjQUFBN0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE0RCxhQUFBOUUsR0FBQWtCO0FBQUFBLFFBQUEsSUFDWDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE2RCxhQUFBL0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE4RCxhQUFBaEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUErRCxhQUFBakYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFnRSxhQUFBbEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFpRSxhQUFBbkYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFrRSxhQUFBcEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBO0FBQUEsSUFBQW1FO0FBQUFBLE1EblIvQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE0MzY5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2FycmF5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBtdXN0IG5vdCBldmFsdWF0ZSBbZiAwXSB3aGVuIFtsIDw9IDBdLlxuICAgICBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkubWFrZV9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICAgIGRvbmU7XG4gIGVuZDtcbiAgcmVzXG5cbmxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdF9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gICgqIFdlIG11c3Qgbm90IGV2YWx1YXRlIFtmIHggMF0gd2hlbiBbc3kgPD0gMF06ICopXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgKGYgeCAwKSBpblxuICAgICAgZm9yIHkgPSAxIHRvIHByZWQgc3kgZG9cbiAgICAgICAgdW5zYWZlX3NldCByb3cgeSAoZiB4IHkpXG4gICAgICBkb25lO1xuICAgICAgdW5zYWZlX3NldCByZXMgeCByb3dcbiAgICBkb25lO1xuICBlbmQ7XG4gIHJlc1xuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gIGRvbmVcblxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICBkb25lXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX2luZGV4IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gU29tZSBpXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcGkgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiBpICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbmxldCBzaHVmZmxlIH5yYW5kIGEgPSAoKiBGaXNoZXItWWF0ZXMgKilcbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICBsZXQgaiA9IHJhbmQgKGkgKyAxKSBpblxuICAgIGxldCB2ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgdW5zYWZlX3NldCBhIGogdlxuICBkb25lXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9hcnJheV9zdWIiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiaW5pdCIsImwiLCJyZXMiLCJpIiwibWFrZV9tYXRyaXgiLCJzeCIsInN5IiwieCIsImluaXRfbWF0cml4Iiwicm93IiwieSIsImNvcHkiLCJhIiwiYXBwZW5kIiwiYTIiLCJsMSIsInN1YiIsIm9mcyIsImxlbiIsImZpbGwiLCJ2IiwiYmxpdCIsIm9mczEiLCJvZnMyIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcGlfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwidG9fbGlzdCIsImxpc3RfbGVuZ3RoIiwiYWNjdSIsInBhcmFtIiwidCIsIm9mX2xpc3QiLCJ0bCIsImhkIiwiZm9sZF9sZWZ0IiwiZm9sZF9sZWZ0X21hcCIsImFjYyIsImlucHV0X2FycmF5IiwibWF0Y2giLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJmb2xkX3JpZ2h0IiwiZXhpc3RzIiwicCIsIm4iLCJmb3JfYWxsIiwiZm9yX2FsbDIiLCJsMiIsIm4xIiwibjIiLCJleGlzdHMyIiwibWVtIiwibWVtcSIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwic3BsaXQiLCJiMCIsImJpIiwiYWkiLCJjb21iaW5lIiwibmEiLCJuYiIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdCIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwiU3RkbGliX0FycmF5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBVDtBQUFBQSxJQytDRSxZQUFjO0FBQUEsSUFDZCxVQUFjLHlDQVNWO0FBQUEsUUFBQVUsTUFKTyxrQkFBUyx1QkFDbkI7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLE1BQ21CO0FBQUEsY0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFeEI7QUFBQSxHQUFHO0FBQUEsWUFBQUMsWUFBQUMsSUFBQUMsSUFBQU47QUFBQUEsSUFJSixXQUFlO0FBQUEsUUFBQUUsTUFDTDtBQUFBLElBQ1Y7QUFBQSxhQUFlO0FBQUE7QUFBQSxVQUFBSyxJQUFBO0FBQUE7QUFBQSxPQUVNO0FBQUEsZUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsSUFBQXlHO0FBQUFBLE1EcGVmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTUxMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmxvYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgT2plZGEgQmFyLCBMZXhpRmkgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIG5lZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgYWRkIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCBzdWIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsIG11bCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgZGl2IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCByZW0gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZtYSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2ZtYV9mbG9hdFwiIFwiY2FtbF9mbWFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5cbmxldCB6ZXJvID0gMC5cbmxldCBvbmUgPSAxLlxubGV0IG1pbnVzX29uZSA9IC0xLlxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBxdWlldF9uYW4gPSBuYW5cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgc2lnbmFsaW5nX25hbiA9IGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBpc19maW5pdGUgKHg6IGZsb2F0KSA9IHggLS4geCA9IDAuXG5sZXQgaXNfaW5maW5pdGUgKHg6IGZsb2F0KSA9IDEuIC8uIHggPSAwLlxubGV0IGlzX25hbiAoeDogZmxvYXQpID0geCA8PiB4XG5cbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgbWF4X2Zsb2F0ID0gU3RkbGliLm1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IFN0ZGxpYi5taW5fZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmdfb3B0ID0gU3RkbGliLmZsb2F0X29mX3N0cmluZ19vcHRcbmxldCB0b19zdHJpbmcgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0XG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcG93IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjYnJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2JydF9mbG9hdFwiIFwiY2FtbF9jYnJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cDIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHAyX2Zsb2F0XCIgXCJjYW1sX2V4cDJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzJfZmxvYXRcIiBcImNhbWxfbG9nMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmX2Zsb2F0XCIgXCJjYW1sX2VyZlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmZjIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmY19mbG9hdFwiIFwiY2FtbF9lcmZjXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRydW5jIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdHJ1bmNfZmxvYXRcIiBcImNhbWxfdHJ1bmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcm91bmQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9yb3VuZF9mbG9hdFwiIFwiY2FtbF9yb3VuZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG5bQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgaXNfaW50ZWdlciB4ID0geCA9IHRydW5jIHggJiYgaXNfZmluaXRlIHhcblxuZXh0ZXJuYWwgbmV4dF9hZnRlciA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gID0gXCJjYW1sX25leHRhZnRlcl9mbG9hdFwiIFwiY2FtbF9uZXh0YWZ0ZXJcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgc3VjYyB4ID0gbmV4dF9hZnRlciB4IGluZmluaXR5XG5sZXQgcHJlZCB4ID0gbmV4dF9hZnRlciB4IG5lZ19pbmZpbml0eVxuXG5leHRlcm5hbCBjb3B5X3NpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpZ25fYml0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGJvb2xcbiAgPSBcImNhbWxfc2lnbmJpdF9mbG9hdFwiIFwiY2FtbF9zaWduYml0XCIgW0BAbm9hbGxvY11cblxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbnR5cGUgdCA9IGZsb2F0XG5leHRlcm5hbCBjb21wYXJlIDogZmxvYXQgLT4gZmxvYXQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgZXF1YWwgeCB5ID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldFtAaW5saW5lXSBtaW4gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB8fCBpc19uYW4geSB0aGVuIChuYW4sIG5hbilcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgsIHkpIGVsc2UgKHksIHgpXG5cbmxldFtAaW5saW5lXSBtaW5fbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB0aGVuICh5LHkpXG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiAoeCx4KVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCx5KSBlbHNlICh5LHgpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IGZsb2F0YXJyYXlcblxuICBleHRlcm5hbCBsZW5ndGggOiB0IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcblxuICBsZXQgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGZvciBpID0gb2ZzIHRvIG9mcyArIGxlbiAtIDEgZG8gdW5zYWZlX3NldCBhIGkgdiBkb25lXG5cbiAgZXh0ZXJuYWwgdW5zYWZlX2JsaXQ6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0ID1cbiAgICBcImNhbWxfZmxvYXRhcnJheV9ibGl0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBtYWtlX21hdHJpeCBzeCBzeSB2ID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1ha2VfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgcmVzIHggKG1ha2Ugc3kgdilcbiAgICAgIGRvbmU7XG4gICAgZW5kO1xuICAgIHJlc1xuXG4gIGxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgaW5cbiAgICAgICAgZm9yIHkgPSAwIHRvIHN5IC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgcm93IHkgKGYgeCB5KVxuICAgICAgICBkb25lO1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHJlcyB4IHJvd1xuICAgICAgZG9uZTtcbiAgICBlbmQ7XG4gICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtYXBfaW5wbGFjZSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZVxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWFwaV9pbnBsYWNlIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZmluZF9vcHQgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfaW5kZXggcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIFNvbWUgaVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfbWFwIGYgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmaW5kX21hcGkgZiBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGYgaSAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgc2h1ZmZsZSB+cmFuZCBhID0gKCogRmlzaGVyLVlhdGVzICopXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBqID0gcmFuZCAoaSArIDEpIGluXG4gICAgICBsZXQgdiA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB1bnNhZmVfc2V0IGEgaiB2XG4gICAgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwiaXNfZmluaXRlIiwieCIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm9mX3N0cmluZ19vcHQiLCJ0b19zdHJpbmciLCJpc19pbnRlZ2VyIiwic3VjYyIsInByZWQiLCJlcXVhbCIsInkiLCJtaW4iLCJtYXgiLCJtaW5fbWF4IiwibWluX251bSIsIm1heF9udW0iLCJtaW5fbWF4X251bSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJ1bnNhZmVfZmlsbCIsImEiLCJvZnMiLCJsZW4iLCJ2IiwiaSIsImNoZWNrIiwibXNnIiwibWFrZSIsIm4iLCJyZXN1bHQiLCJpbml0IiwibCIsInJlcyIsIm1ha2VfbWF0cml4Iiwic3giLCJzeSIsImluaXRfbWF0cml4Iiwicm93IiwiYXBwZW5kIiwiYTIiLCJsMSIsImwyIiwiY3N0X2Zsb2F0X21sIiwiY29uY2F0IiwiYWNjIiwicGFyYW0iLCJ0bCIsImhkIiwiaGxlbiIsInN1YiIsImNvcHkiLCJmaWxsIiwiYmxpdCIsInNyYyIsInNvZnMiLCJkc3QiLCJkb2ZzIiwiY3N0X0Zsb2F0X2FycmF5X2JsaXQiLCJ0b19saXN0Iiwib2ZfbGlzdCIsInQiLCJoIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwibWFwaV9pbnBsYWNlIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwibWVtIiwibWVtX2llZWUiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsImZpbmRfbWFwaSIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJTdGRsaWJfRmxvYXQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7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QUFBQTtBQUFBLFNBQUExQyxJQUFBO0FBQUE7QUFBQSxNQUNpQjtBQUFBLGNBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUUzQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFnRztBQUFBQSxNQXJrQnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkRyQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDcUM0RDtBQUFBO0FBQUEsRURyQzVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTU5OTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaW50MzIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50MzJdOiAzMi1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50MzIgLT4gaW50ID0gXCIlaW50MzJfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX3RvX2Zsb2F0XCIgXCJjYW1sX2ludDMyX3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDMyXG4gID0gXCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQzMiAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCB6ZXJvID0gMGxcbmxldCBvbmUgPSAxbFxubGV0IG1pbnVzX29uZSA9IC0xbFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFsXG5sZXQgcHJlZCBuID0gc3ViIG4gMWxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMGwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMGxcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRmxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMWwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBtYXRjaCBTeXMud29yZF9zaXplIHdpdGhcbiAgfCAzMiAtPlxuICAgICAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgICAgIGZ1biBuIC0+XG4gICAgICAgIGlmIG4gPj0gMGwgJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBpbnQzMlxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IHggPSB5XG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgdW5zaWduZWRfbHQgbiBtID1cbiAgc3ViIG4gbWluX2ludCA8IHN1YiBtIG1pbl9pbnRcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lIGJpdG5lc3MuXG4gICBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfbHQgbiBkIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9sdCByIGQgdGhlbiBxIGVsc2Ugc3VjYyBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2giLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tdWwiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfU3lzIiwiQXNzZXJ0X2ZhaWx1cmUiLCJzdWNjIiwibiIsInByZWQiLCJhYnMiLCJsb2dub3QiLCJtYXRjaCIsIm1heF9pbnQiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmciLCJvZl9zdHJpbmdfb3B0IiwicyIsImV4biIsImVxdWFsIiwidW5zaWduZWRfY29tcGFyZSIsIm0iLCJ5IiwieCIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsInVuc2lnbmVkX2RpdiIsImQiLCJxIiwiciIsInVuc2lnbmVkX3JlbSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJTdGRsaWJfSW50MzIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDK0NxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBLFlBQUFHLE9BQUFILEdBR1g7QUFBQSxPQUFBSSxRRHBEN0I7QUFBQTtBQUFBO0FBQUEsS0FBQUMsVUN5RG9CO0FBQUEsS0FBQUM7QUFBQUEsT0FDZCxTQUFBTjtBQUFBQSxRQUNLLDhCQUFXO0FBQUEsU0FDWjtBQUFBLFFBRUE7QUFBQSxPQUFJO0FBQUE7QUFBQSxJRDlEZDtBQUFBLEtDb0VNO0FBQUE7QUFBQSxRQUFBTSxrQkFGQSxTQUFBTixHQUFTLG1CQUF5QjtBQUFBO0FBQUEsWUFBQU8sVUFBQVAsR0FLdEIsdUNBQWE7QUFBQSxZQUFBUSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQ1RVg7QUFBQSw4QkM2RW9CO0FBQUEsS0Q3RXBCO0FBQUE7QUFBQSxHQzZFd0I7QUFBQSxPQUFBQyxRRDdFeEI7QUFBQSxZQUFBQyxpQkFBQVosR0FBQWE7QUFBQUEsUUFBQUMsSUNxRjBCLG9CQUFBQyxJQUFoQjtBQUFBLElBSmtCLDZCQUlhO0FBQUE7QUFBQSxZQUFBQyxZQUFBaEIsR0FBQWE7QUFBQUEsSUFHdkMsNERBQTZCO0FBQUE7QUFBQSxZQUFBSSxJQUFBRixHQUFBRCxHQUVWLG1DQUFvQjtBQUFBLFlBQUFJLElBQUFILEdBQUFELEdBQ3BCLHNDQUFvQjtBQUFBLE9BQUFLLE9EM0Z6QyxHQUFBQyxNQUFBO0FBQUEsWUFBQUMsYUFBQXJCLEdBQUFzQjtBQUFBQSxJQ2lHSyx3QkFDRSxxQ0FJa0M7QUFBQSxRQUFBQyxJQUZsQix1Q0FBQUMsSUFDTDtBQUFBLElBQ1gsd0NBQWtDO0FBQUE7QUFBQSxZQUFBQyxhQUFBekIsR0FBQXNCO0FBQUFBLElBRzVCLFdBQUwsU0FBSywwQkFBcUI7QUFBQTtBQUFBLFlBQUFJLFlBQUFDLE1BQUFaLEdBSVQsa0NBQStCO0FBQUEsWUFBQWEsS0FBQWIsR0FDM0MsK0JBQTRCO0FBQUE7QUFBQSxJQUFBYztBQUFBQSxNRDlHekMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjA5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQ2NC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQ2NF06IDY0LWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQ2NCAtPiBpbnQgPSBcIiVpbnQ2NF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQ2NFxuICA9IFwiY2FtbF9pbnQ2NF9vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfdG9fZmxvYXRcIiBcImNhbWxfaW50NjRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMiA6IGludDMyIC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzIgOiBpbnQ2NCAtPiBpbnQzMiA9IFwiJWludDY0X3RvX2ludDMyXCJcbmV4dGVybmFsIG9mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX25hdGl2ZWludFwiXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBpbnQ2NCAtPiBuYXRpdmVpbnQgPSBcIiVpbnQ2NF90b19uYXRpdmVpbnRcIlxuXG5sZXQgemVybyA9IDBMXG5sZXQgb25lID0gMUxcbmxldCBtaW51c19vbmUgPSAtMUxcbmxldCBzdWNjIG4gPSBhZGQgbiAxTFxubGV0IHByZWQgbiA9IHN1YiBuIDFMXG5sZXQgYWJzIG4gPSBpZiBuID49IDBMIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgbWluX2ludCA9IDB4ODAwMDAwMDAwMDAwMDAwMExcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRkZGRkZGRkZGTFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xTClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgbiA+PSAwTCAmJiBuIDw9IG1heF9pbnQgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0geCA9IHlcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCB1bnNpZ25lZF9sdCBuIG0gPVxuICBzdWIgbiBtaW5faW50IDwgc3ViIG0gbWluX2ludFxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWUgYml0bmVzcy5cbiAgIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9sdCBuIGQgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2x0IHIgZCB0aGVuIHEgZWxzZSBzdWNjIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfc3ViIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJtaW5faW50IiwibWF4X2ludCIsIlN0ZGxpYiIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiY29tcGFyZSIsIngiLCJ5IiwiZXF1YWwiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDNkNhLDJCQUFRO0FBQUEsWUFBQUMsS0FBQUQsR0FDUiwyQkFBUTtBQUFBLFlBQUFFLElBQUFGO0FBQUFBLElBQ04scUNBQW9CLHlCQUFLO0FBQUE7QUFBQSxZQUFBRyxPQUFBSCxHQUd6QixtQ0FBYztBQUFBO0FBQUEsSUFBQUgsWUFHYjtBQUFBLFFBQ2Q7QUFBQSxZQUFBTyxnQkFBQUo7QUFBQUEsSUFDSyw4QkFBVztBQUFBLEtBQ1o7QUFBQSxJQUVBO0FBQUEsR0FBSTtBQUFBLFlBQUFLLFVBQUFMLEdBR1EseUNBQWE7QUFBQSxZQUFBTSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTURsRVg7QUFBQSw4QkNtRW9CO0FBQUEsS0RuRXBCO0FBQUE7QUFBQSxHQ21Fd0I7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQyxHQVdJLCtCQUFrQjtBQUFBLE9BQUFDLFFBeEI1QztBQUFBLFlBQUFDLGlCQUFBYixHQUFBYztBQUFBQSxRQUFBSCxJQTRCd0IsNEJBQUFELElBQWhCO0FBQUEsSUFKa0IsK0JBSWE7QUFBQTtBQUFBLFlBQUFLLFlBQUFmLEdBQUFjO0FBQUFBLElBR3ZDO0FBQUEseUNBQWdCLDJCQUFhO0FBQUE7QUFBQSxZQUFBRSxJQUFBTixHQUFBQyxHQUVWLG1DQUFvQjtBQUFBLFlBQUFNLElBQUFQLEdBQUFDLEdBQ3BCLHNDQUFvQjtBQUFBLFlBQUFPLGFBQUFsQixHQUFBbUI7QUFBQUEsSUFNcEMsMkJBQ0UscUNBSWtDO0FBQUE7QUFBQSxLQUFBQztBQUFBQSxPQUY3QjtBQUFBLFNBQVc7QUFBQSxXQUFLO0FBQUE7QUFBQSxLQUFBQyxJQUNoQixrQkFBTTtBQUFBLElBQ1gsK0JBdERNLG9CQXNENEI7QUFBQTtBQUFBLFlBQUFDLGFBQUF0QixHQUFBbUI7QUFBQUEsSUFHNUIsT0FBWCxrQkFBTSxlQUFLLHVCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWQsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZSxLQUFBZixHQUMzQywrQkFBNEI7QUFBQSxHQXJEdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEdERGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTYxOTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIG4gPj0gMG4gJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IHVuc2lnbmVkX2x0IG4gbSA9XG4gIHN1YiBuIG1pbl9pbnQgPCBzdWIgbSBtaW5faW50XG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZSBiaXRuZXNzLlxuICAgU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2x0IG4gZCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfbHQgciBkIHRoZW4gcSBlbHNlIHN1Y2MgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9oYXNoIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1N5cyIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsInNpemUiLCJtaW5faW50IiwibWF4X2ludCIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiZXF1YWwiLCJ4IiwieSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfbHQiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDMkNxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBO0FBQUEsSUFBQUcsT0Q3Q3hDO0FBQUEsSUFBQUMsVUMrQ2M7QUFBQSxJQUFBQyxVQUNBO0FBQUEsWUFBQUMsT0FBQU4sR0FDZTtBQUFBLE9BQUFLLFlBR2I7QUFBQSxZQUFBRSxnQkFBQVA7QUFBQUEsSUFFVCw4QkFBVyw4QkFDWjtBQUFBLElBRUE7QUFBQSxHQUFJO0FBQUEsWUFBQVEsVUFBQVIsR0FHUSx1Q0FBYTtBQUFBLFlBQUFTLGNBQUFDO0FBQUFBLElBSzdCLFlBQVM7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRGpFWDtBQUFBLDhCQ2tFb0I7QUFBQSxLRGxFcEI7QUFBQTtBQUFBLEdDa0V3QjtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdBSUksMkNBQ1MsQ0FBSTtBQUFBLFlBQUFDLGlCQUFBZixHQUFBZ0I7QUFBQUEsUUFBQUYsSUFHZixpQkFBQUQsSUFBaEI7QUFBQSxJQUprQiw2QkFJYTtBQUFBO0FBQUEsWUFBQUksWUFBQWpCLEdBQUFnQjtBQUFBQSxJQUd2QyxzREFBNkI7QUFBQTtBQUFBLFlBQUFFLElBQUFMLEdBQUFDLEdBRVYsbUNBQW9CO0FBQUEsWUFBQUssSUFBQU4sR0FBQUMsR0FDcEIsc0NBQW9CO0FBQUEsT0FBQU0sT0RoRnpDLEdBQUFDLE1BQUE7QUFBQSxZQUFBQyxhQUFBdEIsR0FBQXVCO0FBQUFBLElDc0ZLLHdCQUNFLHFDQUlrQztBQUFBLFFBQUFDLElBRmxCLHVDQUFBQyxJQUNMO0FBQUEsSUFDWCx3Q0FBa0M7QUFBQTtBQUFBLFlBQUFDLGFBQUExQixHQUFBdUI7QUFBQUEsSUFHNUIsV0FBTCxTQUFLLDBCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWYsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZ0IsS0FBQWhCLEdBQzNDLCtCQUE0QjtBQUFBLEdBOUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJERiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE2MjkwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3NldC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCB0b19saXN0IDogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCB0cnlfY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gdHJ5X2pvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIHYnIHdpdGhcbiAgICAgICAgICAgfCBTb21lIHYnIC0+XG4gICAgICAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnlfY29uY2F0IGwnIHInXG4gICAgICAgICBlbmRcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IHRvX2xpc3QgPSBlbGVtZW50c1xuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliX1NldCIsIk9yZCIsImhlaWdodCIsInBhcmFtIiwiaCIsImNyZWF0ZSIsImwiLCJ2IiwiciIsImhsIiwiaHIiLCJiYWwiLCJjc3RfU2V0X2JhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImFkZCIsIngiLCJ0IiwiYyIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsIm1pbl9lbHRfb3B0IiwibWF4X2VsdCIsIm1heF9lbHRfb3B0IiwicmVtb3ZlX21pbl9lbHQiLCJjb25jYXQiLCJ0MSIsInQyIiwic3BsaXQiLCJtYXRjaCIsInByZXMiLCJpc19lbXB0eSIsIm1lbSIsInJlbW92ZSIsInVuaW9uIiwiczEiLCJzMiIsImgyIiwicjIiLCJ2MiIsImwyIiwiaDEiLCJyMSIsInYxIiwibDEiLCJpbnRlciIsInNwbGl0X2JpcyIsImRpc2pvaW50IiwiZGlmZiIsImNvbnNfZW51bSIsInMiLCJlIiwiY29tcGFyZSIsImUyIiwiZTEiLCJlcXVhbCIsInN1YnNldCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZmlsdGVyIiwicHYiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kIiwiZmluZF9maXJzdCIsInYwIiwiZmluZF9maXJzdF9vcHQiLCJmaW5kX2xhc3QiLCJmaW5kX2xhc3Rfb3B0IiwiZmluZF9vcHQiLCJ0cnlfam9pbiIsIm1hcCIsImZpbHRlcl9tYXAiLCJlbXB0eSIsIm9mX2xpc3QiLCJ4MCIsIngxIiwieDIiLCJ4MyIsInN1YiIsIm4iLCJubCIsImxlZnQiLCJtaWQiLCJyaWdodCIsIng0IiwiYWRkX3NlcSIsImkiLCJtIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidG9fc2VxIiwic25vY19lbnVtIiwicmV2X3NlcV9vZl9lbnVtIiwidG9fcmV2X3NlcSIsInRvX3NlcV9mcm9tIiwibG93Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxnQkFBQUM7QUFBQUEsaUJBQUFDLE9BQUFDO0FBQUFBLFNDZ0ZpQixZQUNBO0FBQUEsYUFBQUMsSUFEQTtBQUFBLFNBRUc7QUFBQSxRQUFDO0FBQUEsaUJBQUFDLE9BQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFNBUWYsVUFBQUosSUFBQSxNQUFBSyxLQUErQyxZQUFBQSxLQUFoQjtBQUFBLFNBQy9CLFVBQUFMLE1BQUEs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QUYsR0FFekIsd0JBQWU7QUFBQSxpQkFBQUcsWUFBQXZGLEdBQUF6QjtBQUFBQSxTQUVGLFFBQ2pCO0FBQUEsYUFBQWlILE9BRGlCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBL0IsMkJBQStCO0FBQUEsUUFBQztBQUFBLGlCQUFBMkYsT0FBQXpGO0FBQUFBLGFBQUEsSUFFMUM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUEwRixVQUFBckQsS0FBQUM7QUFBQUEsYUFBQUQsSUFHM0MsS0FBQUMsSUFBQTtBQUFBO0FBQUEsa0JBQ1c7QUFBQSxjQUFBMUQsSUFEWCxNQUFBRCxJQUFBLE1BQUFELElBQUEsTUFBQTRELE1BRW1CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBMkI7QUFBQSxpQkFBQXFELGdCQUFBM0YsR0FBQXpCO0FBQUFBLFNBRWhCLFFBQ3JCO0FBQUEsYUFBQWlILE9BRHFCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBOEYsV0FBQTVGO0FBQUFBLGFBQUEsSUFFdEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUE2RixZQUFBQyxLQUFBekQ7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZdEMsR0FBQXJDLElBQUE7QUFBQTtBQUFBLFdBVFM7QUFBQTtBQUFBLFlBQUFwQixJQUFBO0FBQUEsWUFBQUQsSUFBQTtBQUFBLFlBQUFELElBQUE7QUFBQSxZQUFBbUcsSUFHSjtBQUFBLFdBQWlCO0FBQUEsV0FFbEIsZUFBQTdFLE1BQ0Ysc0NBREU7QUFBQTtBQUFBLGtCQURGO0FBQUE7QUFBQSxTQUthO0FBQUE7QUFBQSxRRDdtQmxDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTcwNTEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbWFwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBhZGQ6IGtleSAtPiAnYSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkX3RvX2xpc3Q6IGtleSAtPiAnYSAtPiAnYSBsaXN0IHQgLT4gJ2EgbGlzdCB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAoa2V5IC0+ICdhIG9wdGlvbiAtPiAnYiBvcHRpb24gLT4gJ2Mgb3B0aW9uKSAtPlxuICAgICAgJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBtYXA6ICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIG1hcGk6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChrZXkgLT4gJ2EgLT4gJ2Igb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgcGFydGl0aW9uOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHRcbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGlzX2VtcHR5OiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIHRvX2xpc3QgOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAgIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBrZXkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG5cbiAgICB0eXBlIGtleSA9IE9yZC50XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIG9mIHtsOidhIHQ7IHY6a2V5OyBkOidhOyByOidhIHQ7IGg6aW50fVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgbGV0IGNyZWF0ZSBsIHggZCByID1cbiAgICAgIGxldCBobCA9IGhlaWdodCBsIGFuZCBociA9IGhlaWdodCByIGluXG4gICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IHNpbmdsZXRvbiB4IGQgPSBOb2Rle2w9RW1wdHk7IHY9eDsgZDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgbGV0IGJhbCBsIHggZCByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiBsZCAoY3JlYXRlIGxyIHggZCByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgZD1scmQ7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBsZCBscmwpIGxydiBscmQgKGNyZWF0ZSBscnIgeCBkIHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmwpIHJ2IHJkIHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyBkPXJsZDsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybGwpIHJsdiBybGQgKGNyZWF0ZSBybHIgcnYgcmQgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgYWRkIHggZGF0YSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGRhdGEgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCBkYXRhIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGRcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIGRcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfSAtPiBtaW5fYmluZGluZyBsXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0tPiBtaW5fYmluZGluZ19vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmcgclxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nX29wdCByXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiYWwgKHJlbW92ZV9taW5fYmluZGluZyBsKSB2IGQgclxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBiYWwgdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCAoTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpbiBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyB1cGRhdGUgeCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmIE5vbmUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBFbXB0eVxuICAgICAgICAgIHwgU29tZSBkYXRhIC0+IE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgICAgICBlbmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBiZWdpblxuICAgICAgICAgICAgbWF0Y2ggZiAoU29tZSBkKSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gbWVyZ2UgbCByXG4gICAgICAgICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVuZCBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHVwZGF0ZSB4IGYgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSB1cGRhdGUgeCBmIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgYWRkX3RvX2xpc3QgeCBkYXRhIG0gPVxuICAgICAgbGV0IGFkZCA9IGZ1bmN0aW9uIE5vbmUgLT4gU29tZSBbZGF0YV0gfCBTb21lIGwgLT4gU29tZSAoZGF0YSA6OiBsKSBpblxuICAgICAgdXBkYXRlIHggYWRkIG1cblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpdGVyIGYgbDsgZiB2IGQ7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBtYXBpIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwaSBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcGkgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBmb2xkIGYgbSBhY2N1ID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgZm9sZCBmIHIgKGYgdiBkIChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkIHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCBrIGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGtleXMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkga2V5LlxuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fYmluZGluZyBrIHggbCkgdiBkIHJcblxuICAgIGxldCByZWMgYWRkX21heF9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiBkIChhZGRfbWF4X2JpbmRpbmcgayB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiBkIHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2JpbmRpbmcgdiBkIHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2JpbmRpbmcgdiBkIGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scjsgaD1saH0sXG4gICAgICAgICBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IGxkIChqb2luIGxyIHYgZCByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IGQgcmwpIHJ2IHJkIHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IGQgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGpvaW4gdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgY29uY2F0X29yX2pvaW4gdDEgdiBkIHQyID1cbiAgICAgIG1hdGNoIGQgd2l0aFxuICAgICAgfCBTb21lIGQgLT4gam9pbiB0MSB2IGQgdDJcbiAgICAgIHwgTm9uZSAtPiBjb25jYXQgdDEgdDJcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBOb25lLCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIFNvbWUgZCwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiBkIHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBkIGxyLCBwcmVzLCBycilcblxuICAgIGxldCByZWMgbWVyZ2UgZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSwgXykgd2hlbiBoMSA+PSBoZWlnaHQgczIgLT5cbiAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjEgKGYgdjEgKFNvbWUgZDEpIGQyKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgKF8sIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjJ9KSAtPlxuICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MiAoZiB2MiBkMSAoU29tZSBkMikpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcmVjIHVuaW9uIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgfCAoRW1wdHksIHMpIHwgKHMsIEVtcHR5KSAtPiBzXG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSxcbiAgICAgICAgIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDIgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MSBkMSByXG4gICAgICAgICAgICB8IFNvbWUgZDIgLT4gY29uY2F0X29yX2pvaW4gbCB2MSAoZiB2MSBkMSBkMikgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDEgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MiBkMiByXG4gICAgICAgICAgICB8IFNvbWUgZDEgLT4gY29uY2F0X29yX2pvaW4gbCB2MiAoZiB2MiBkMSBkMikgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHZkIHRoZW4gaWYgbD09bCcgJiYgcj09cicgdGhlbiBtIGVsc2Ugam9pbiBsJyB2IGQgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW2ZdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZnZkID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgIGJlZ2luIG1hdGNoIGZ2ZCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZCcgLT4gam9pbiBsJyB2IGQnIHInXG4gICAgICAgICAgICB8IE5vbmUgLT4gY29uY2F0IGwnIHInXG4gICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IHRvX2xpc3QgPSBiaW5kaW5nc1xuICAgIGxldCBvZl9saXN0IGJzID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBtIChrLCB2KSAtPiBhZGQgayB2IG0pIGVtcHR5IGJzXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9NYXAiLCJPcmQiLCJoZWlnaHQiLCJwYXJhbSIsImgiLCJjcmVhdGUiLCJsIiwieCIsImQiLCJyIiwiaGwiLCJociIsInNpbmdsZXRvbiIsImJhbCIsImNzdF9NYXBfYmFsIiwibHIiLCJsZCIsImx2IiwibGwiLCJscnIiLCJscmQiLCJscnYiLCJscmwiLCJyciIsInJkIiwicnYiLCJybCIsInJsciIsInJsZCIsInJsdiIsInJsbCIsImlzX2VtcHR5IiwiYWRkIiwiZGF0YSIsIm0iLCJ2IiwiYyIsImZpbmQiLCJmaW5kX2ZpcnN0IiwiZDAiLCJ2MCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJtaW5fYmluZGluZ19vcHQiLCJtYXhfYmluZGluZyIsIm1heF9iaW5kaW5nX29wdCIsInJlbW92ZV9taW5fYmluZGluZyIsInQxIiwidDIiLCJtYXRjaCIsInJlbW92ZSIsInVwZGF0ZSIsImFkZF90b19saXN0IiwiaXRlciIsIm1hcCIsIm1hcGkiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiYWRkX21pbl9iaW5kaW5nIiwiayIsImFkZF9tYXhfYmluZGluZyIsImpvaW4iLCJyaCIsImxoIiwiY29uY2F0IiwiY29uY2F0X29yX2pvaW4iLCJzcGxpdCIsInByZXMiLCJtZXJnZSIsInMxIiwiczIiLCJoMSIsInIxIiwiZDEiLCJ2MSIsImwxIiwicjIiLCJkMiIsImwyIiwidjIiLCJ1bmlvbiIsImgyIiwicyIsImZpbHRlciIsInB2ZCIsImZpbHRlcl9tYXAiLCJmdmQiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNvbnNfZW51bSIsImUiLCJjb21wYXJlIiwiY21wIiwibTEiLCJtMiIsImUyIiwiZTEiLCJlcXVhbCIsImNhcmRpbmFsIiwiYmluZGluZ3NfYXV4IiwiYmluZGluZ3MiLCJlbXB0eSIsIm9mX2xpc3QiLCJicyIsImFkZF9zZXEiLCJpIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidCIsInRvX3NlcSIsInNub2NfZW51bSIsInJldl9zZXFfb2ZfZW51bSIsInRvX3Jldl9zZXEiLCJ0b19zZXFfZnJvbSIsImxvdyIsIm4iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FB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QSxjQUUyQjtBQUFBLFNBQWtCLGtDQUEvQiwyQkFBK0I7QUFBQSxRQUFDO0FBQUEsaUJBQUFzRCxPQUFBdEY7QUFBQUEsYUFBQSxJQUczRDtBQUFBLFNBQWlCO0FBQUE7QUFBQSxpQkFBQXVGLFVBQUFoQyxLQUFBVztBQUFBQSxhQUFBWCxJQUc5QixLQUFBVyxJQUFBO0FBQUE7QUFBQSxrQkFDVztBQUFBLGNBQUEzRixJQURYLE1BQUFELElBQUEsTUFBQTJCLElBQUEsTUFBQTdCLElBQUEsTUFBQThGLE1BRXNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBOEI7QUFBQSxpQkFBQXNCLGdCQUFBdEYsR0FBQWpDO0FBQUFBLFNBRXRCLFFBQ3JCO0FBQUE7QUFBQSxVQUFBbUgsT0FEcUI7QUFBQSxVQUFBQyxJQUFBO0FBQUEsVUFBQXBGLElBQUE7QUFBQSxVQUFBK0IsSUFBQTtBQUFBLGNBR1E7QUFBQSxTQUFrQixrQ0FBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBeUQsV0FBQXZGO0FBQUFBLGFBQUEsSUFHeEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUF3RixZQUFBQyxLQUFBM0Y7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZckIsR0FBQUUsSUFBQTtBQUFBO0FBQUEsV0FUUztBQUFBO0FBQUEsWUFBQTNCLElBQUE7QUFBQSxZQUFBRCxJQUFBO0FBQUEsWUFBQTJCLElBQUE7QUFBQSxZQUFBN0IsSUFBQTtBQUFBLFlBQUF3SCxJQUdKO0FBQUEsV0FBaUI7QUFBQSxXQUVsQjtBQUFBLGdCQUFBMUYsTUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERTtBQUFBO0FBQUEsa0JBREY7QUFBQTtBQUFBLFNBS2E7QUFBQTtBQUFBLFFEamlCbEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNzkwMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zdGFjay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgZHJvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBfaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxXG4gIHwgW10gLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJFbXB0eSIsImNyZWF0ZSIsInBhcmFtIiwiY2xlYXIiLCJzIiwiY29weSIsInB1c2giLCJ4IiwicG9wIiwibWF0Y2giLCJ0bCIsImhkIiwicG9wX29wdCIsImRyb3AiLCJ0b3AiLCJ0b3Bfb3B0IiwiaXNfZW1wdHkiLCJsZW5ndGgiLCJpdGVyIiwiZiIsImZvbGQiLCJhY2MiLCJ0b19zZXEiLCJhZGRfc2VxIiwicSIsImkiLCJvZl9zZXEiLCJnIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFDLE9BQUFDLE9DbUJnQixpQkFBb0I7QUFBQSxZQUFBQyxNQUFBQyxHQUV0QixVQUFXLG1CQUFVO0FBQUEsWUFBQUMsS0FBQUQsR0FFdEIsdUJBQXlCO0FBQUEsWUFBQUUsS0FBQUMsR0FBQUgsR0FFdkIscUJBQWlCLDhCQUFrQjtBQUFBLFlBQUFJLElBQUFKO0FBQUFBLFFBQUFLLFFBR2hEO0FBQUEsZ0JBRVk7QUFBQSxRQUFBQyxLQUZaLFVBQUFDLEtBQUE7QUFBQSxJQUNZO0FBQUEsSUFBVztBQUFBLElBQW9CO0FBQUEsR0FDcEI7QUFBQSxZQUFBQyxRQUFBUjtBQUFBQSxRQUFBSyxRQUd2QjtBQUFBLGdCQUVZO0FBQUEsUUFBQUMsS0FGWixVQUFBQyxLQUFBO0FBQUEsSUFDWTtBQUFBLElBQVc7QUFBQSxJQUFvQjtBQUFBLEdBQzNCO0FBQUEsWUFBQUUsS0FBQVQ7QUFBQUEsUUFBQUssUUFHaEI7QUFBQSxnQkFFUTtBQUFBLFFBQUFDLEtBRlI7QUFBQSxJQUNhO0FBQUEsSUFBVztBQUFBO0FBQUEsR0FDTDtBQUFBLFlBQUFJLElBQUFWO0FBQUFBLFFBQUFLLFFBR25CO0FBQUEsZ0JBRVc7QUFBQSxRQUFBRSxLQUZYO0FBQUEsSUFDVztBQUFBLEdBQ1c7QUFBQSxZQUFBSSxRQUFBWDtBQUFBQSxRQUFBSyxRQUd0QjtBQUFBLGdCQUVXO0FBQUEsUUFBQUUsS0FGWDtBQUFBLElBQ1c7QUFBQSxHQUNJO0FBQUEsWUFBQUssU0FBQVosR0FFQSwwQkFBVTtBQUFBLFlBQUFhLE9BQUFiLEdBRVosWUFBSztBQUFBLFlBQUFjLEtBQUFDLEdBQUFmLEdBRUwsMENBQWU7QUFBQSxZQUFBZ0IsS0FBQUQsR0FBQUUsS0FBQWpCLEdBRVgsK0NBQXdCO0FBQUEsWUFBQWtCLE9BQUFsQixHQUk1Qix1Q0FBZTtBQUFBLFlBQUFtQixRQUFBQyxHQUFBQztBQUFBQSxJQUVaLHlDQUFBbEIsR0FBbUIsaUJBQVEsTUFBRztBQUFBO0FBQUEsWUFBQW1CLE9BQUFDLE9BQUF2QixJQUd0QyxXQUNSLGVBQVcsU0FDVjtBQUFBLEdEckVIIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTc5ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcXVldWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJTdGRsaWJfU2VxIiwiRW1wdHkiLCJjcmVhdGUiLCJwYXJhbSIsImNsZWFyIiwicSIsImFkZCIsIngiLCJjZWxsIiwibWF0Y2giLCJwZWVrIiwiY29udGVudCIsInBlZWtfb3B0IiwidGFrZSIsIm5leHQiLCJ0YWtlX29wdCIsImNvcHkiLCJxX3JlcyIsInByZXYiLCJpc19lbXB0eSIsImxlbmd0aCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSIsImF1eCIsImMiLCJhZGRfc2VxIiwiaSIsIm9mX3NlcSIsImciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEcklGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTgxNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvYnVmZmVyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxuKCogVGhlIFtpbm5lcl9idWZmZXJdIHR5cGUgZW5zdXJlcyB0aGF0IHRoZSBbbGVuZ3RoXSBhbmQgW2J1ZmZlcl0gZmllbGRzIGFyZVxuICAgYWx3YXlzIHN5bmNocm9uaXplZCwgW2xlbmd0aCA9IEJ5dGVzLmxlbmd0aCBidWZmZXJdLCBldmVuIGluIHByZXNlbmNlXG4gICBvZiBkYXRhIHJhY2VzLlxuKilcbnR5cGUgaW5uZXJfYnVmZmVyID0ge1xuICBidWZmZXI6IGJ5dGVzO1xuICBsZW5ndGg6IGludDtcbn1cblxudHlwZSB0ID1cbiB7bXV0YWJsZSBpbm5lciA6IGlubmVyX2J1ZmZlcjtcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbaW5uZXIubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGlubmVyLmJ1ZmZlcl1cbiAgIEluIGFic2VuY2Ugb2YgZGF0YSByYWNlcywgd2UgYWxzbyBoYXZlXG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5pbm5lci5sZW5ndGhdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5pbm5lci5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4geyBpbm5lciA9IHsgYnVmZmVyID0gczsgbGVuZ3RoID0gbn07IHBvc2l0aW9uID0gMDsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmlubmVyLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMuYmxpdCBzcmMuaW5uZXIuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IHBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGVuZ3RoIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBidWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgbGV0IGlubmVyID1cbiAgICB7IGJ1ZmZlciA9IGIuaW5pdGlhbF9idWZmZXI7IGxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmluaXRpYWxfYnVmZmVyIH1cbiAgaW5cbiAgYi5pbm5lciA8LSBpbm5lclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmlubmVyLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5pbm5lcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmlubmVyLmxlbmd0aF0uXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmlubmVyLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5pbm5lci5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5pbm5lciA8LSB7IGJ1ZmZlciA9IG5ld19idWZmZXI7IGxlbmd0aCA9ICFuZXdfbGVuIH1cblxuKCogTm90ZTpcbiAgICBTb21lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgaGF2ZSBhIGZhc3QgcGF0aCB3aGVuIHRoZSBpbm5lclxuICBidWZmZXIgZG9lc24ndCBuZWVkIHRvIGJlIGV4dGVuZGVkLlxuICAgIEluIHRoaXMgY2FzZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHVuc2FmZSBhY2Nlc3NlcyBvbiB0aGVcbiAgY29udGVudHMgb2YgdGhlIFtpbm5lcl0gZmllbGQgc2luY2UgaXRzIGZpZWxkcyBhcmUgaW1tdXRhYmxlLlxuICBJbiBwcmVzZW5jZSBvZiBkYXRhIHJhY2VzLCB3ZSBtYXkgYWNjZXNzIHRoZSB3cm9uZyBpbm5lciBidWZmZXIsIGJ1dCB3ZVxuICB3aWxsIHVzZSB0aGlzIGJ1ZmZlciBzYWZlbHkuXG4gIEFzIHNvb24gYXMgd2UgbmVlZCB0byByZXNpemUgdGhlIGJ1ZmZlciwgd2UgZmFsbCBiYWNrIHRvIHNhZmUgYWNjZXNzZXMuXG4qKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtidWZmZXI7bGVuZ3RofSA9IGIuaW5uZXIgaW5cbiAgaWYgcG9zID49IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAxO1xuICAgIEJ5dGVzLnNldCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGNcbiAgKSBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX3NldCBidWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIuaW5uZXIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgbGVuO1xuICAgIEJ5dGVzLmJsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuXG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBidWZmZXIgcG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyOyBsZW5ndGh9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIGxlbjtcbiAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYnVmZmVyIHBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmlubmVyLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0IGluXG4gICAgIGlmIHN0b3AgPSBzdGFydCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggZmluZF9pZGVudCBzIGogbGltIHdpdGhcbiAgICAgICAgIHwgaWRlbnQsIG5leHRfaSAtPlxuICAgICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgYWRkX2NoYXIgYiAnJCc7XG4gICAgICAgICAgIHN1YnN0ICcgJyBqXG4gICAgICAgICBlbmRcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzO1xuICAgICAgICAgaWYgY3VycmVudCA8PiAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5cbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBwb3NpdGlvbiA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtsZW5ndGg7IGJ1ZmZlcn0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIDE7XG4gICAgc2V0X2ludDggYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50OCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAyO1xuICAgIHNldF9pbnQxNiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQxNiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA0O1xuICAgIHNldF9pbnQzMiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQzMiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA4O1xuICAgIHNldF9pbnQ2NCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQ2NCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9zdHJpbmciLCJjYW1sX2Jzd2FwMTYiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc19zZXQxNiIsImNhbWxfYnl0ZXNfc2V0MzIiLCJjYW1sX2J5dGVzX3NldDY0IiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ludDMyX2Jzd2FwIiwiY2FtbF9pbnQ2NF9ic3dhcCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfU2VxIiwiU3RkbGliIiwiU3RkbGliX1N0cmluZyIsIkFzc2VydF9mYWlsdXJlIiwiZHVtbXkiLCJjcmVhdGUiLCJuIiwicyIsImNvbnRlbnRzIiwiYiIsInRvX2J5dGVzIiwic3ViIiwib2ZzIiwibGVuIiwiYmxpdCIsInNyYyIsInNyY29mZiIsImRzdCIsImRzdG9mZiIsIm50aCIsInBvc2l0aW9uIiwibWF0Y2giLCJsZW5ndGgiLCJidWZmZXIiLCJjbGVhciIsInJlc2V0IiwiaW5uZXIiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYyIsInBvcyIsImFkZF91dGZfOF91Y2hhciIsInUiLCJ1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXgiLCJ1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4IiwiYWRkX3V0Zl8xNmJlX3VjaGFyIiwiYWRkX3V0Zl8xNmxlX3VjaGFyIiwiYWRkX3N1YnN0cmluZyIsIm9mZnNldCIsIm5ld19wb3NpdGlvbiIsImFkZF9zdWJieXRlcyIsImFkZF9zdHJpbmciLCJhZGRfYnl0ZXMiLCJhZGRfYnVmZmVyIiwiYnMiLCJhZGRfY2hhbm5lbCIsImljIiwidG9fcmVhZCIsImJ1ZiIsImFscmVhZHlfcmVhZCIsInIiLCJvdXRwdXRfYnVmZmVyIiwib2MiLCJhZGRfc3Vic3RpdHV0ZSIsImxpbSIsInByZXZpb3VzIiwiaSIsInN0YXJ0Iiwib3BlbmluZyIsInN0b3AiLCJ2YWwiLCJuZXdfc3RhcnQiLCJjbG9zaW5nIiwiayIsImV4biIsIm5leHRfaSIsImlkZW50IiwidHJ1bmNhdGUiLCJ0b19zZXEiLCJhdXgiLCJwYXJhbSIsIngiLCJ0b19zZXFpIiwiYWRkX3NlcSIsInNlcSIsIm9mX3NlcSIsImFkZF9pbnQ4IiwiYWRkX2ludDE2X25lIiwiYWRkX2ludDMyX25lIiwiYWRkX2ludDY0X25lIiwiYWRkX2ludDE2X2xlIiwiYWRkX2ludDE2X2JlIiwiYWRkX2ludDMyX2xlIiwiYWRkX2ludDMyX2JlIiwiYWRkX2ludDY0X2xlIiwiYWRkX2ludDY0X2JlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMs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LHFCQUE4QztBQUFBLElBQTlDLDJCQUF1RDtBQUFBO0FBQUEsWUFBQVcsYUFBQTlFLEdBQUFtRTtBQUFBQSxRQUFBLElBR3ZELGlCQUF1QztBQUFBLElBQXZDLHlCQUF1RDtBQUFBO0FBQUEsWUFBQVksYUFBQS9FLEdBQUFtRTtBQUFBQSxRQUFBQSxNQUd2RCxxQkFBOEM7QUFBQSxJQUE5QywyQkFBdUQ7QUFBQTtBQUFBLFlBQUFhLGFBQUFoRixHQUFBbUU7QUFBQUEsUUFBQSxJQUd2RCxpQkFBdUM7QUFBQSxJQUF2Qyx5QkFBdUQ7QUFBQTtBQUFBLFlBQUFjLGFBQUFqRixHQUFBbUU7QUFBQUEsUUFBQUEsTUFHdkQscUJBQThDO0FBQUEsSUFBOUMsMkJBQXVEO0FBQUE7QUFBQSxHRDVZekQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODYzMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9tdXRleC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIFBhc2NhbCBDdW9xLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTUgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0XG5leHRlcm5hbCBjcmVhdGU6IHVuaXQgLT4gdCA9IFwiY2FtbF9tbF9tdXRleF9uZXdcIlxuZXh0ZXJuYWwgbG9jazogdCAtPiB1bml0ID0gXCJjYW1sX21sX211dGV4X2xvY2tcIlxuZXh0ZXJuYWwgdHJ5X2xvY2s6IHQgLT4gYm9vbCA9IFwiY2FtbF9tbF9tdXRleF90cnlfbG9ja1wiXG5leHRlcm5hbCB1bmxvY2s6IHQgLT4gdW5pdCA9IFwiY2FtbF9tbF9tdXRleF91bmxvY2tcIlxuXG4oKiBwcml2YXRlIHJlLWV4cG9ydCAqKVxuZXh0ZXJuYWwgcmVyYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJlcmFpc2VcIlxuXG4oKiBjYW5ub3QgaW5saW5lLCBvdGhlcndpc2UgZmxhbWJkYSBtaWdodCBtb3ZlIGNvZGUgYXJvdW5kLiAqKVxubGV0W0BpbmxpbmUgbmV2ZXJdIHByb3RlY3QgbSBmID1cbiAgbG9jayBtO1xuICBtYXRjaCBmKCkgd2l0aFxuICB8IHggLT5cbiAgICB1bmxvY2sgbTsgeFxuICB8IGV4Y2VwdGlvbiBlIC0+XG4gICAgKCogTk9URTogW3VubG9ja10gZG9lcyBub3QgcG9sbCBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMgKilcbiAgICB1bmxvY2sgbTtcbiAgICByZXJhaXNlIGVcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9tdXRleF9sb2NrIiwiY2FtbF9tbF9tdXRleF91bmxvY2siLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsInByb3RlY3QiLCJtIiwieCIsImUiLCJTdGRsaWJfTXV0ZXgiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUMsR0FBQUg7QUFBQUEsSUMwQkU7QUFBQSxJQUFNLFFBQUFJLElBQ0E7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxJRDNCUjtBQUFBLEtDZ0NJO0FBQUEsS0FBUTtBQUFBO0FBQUEsSUFIUjtBQUFBLElBQVE7QUFBQSxHQUlDO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRGpDYiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE4NjczLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfQ29uZGl0aW9uIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODY5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9kb21haW4ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgIEtDIFNpdmFyYW1ha3Jpc2huYW4sIEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgU3RlcGhlbiBEb2xhbiwgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICBUb20gS2VsbHksIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE5IEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgTHRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSBSYXcgPSBzdHJ1Y3RcbiAgKCogTG93LWxldmVsIHByaW1pdGl2ZXMgcHJvdmlkZWQgYnkgdGhlIHJ1bnRpbWUgKilcbiAgdHlwZSB0ID0gcHJpdmF0ZSBpbnRcblxuICAoKiBUaGUgbGF5b3V0cyBvZiBbc3RhdGVdIGFuZCBbdGVybV9zeW5jXSBhcmUgaGFyZC1jb2RlZCBpblxuICAgICBbcnVudGltZS9kb21haW4uY10gKilcblxuICB0eXBlICdhIHN0YXRlID1cbiAgICB8IFJ1bm5pbmdcbiAgICB8IEZpbmlzaGVkIG9mICgnYSwgZXhuKSByZXN1bHQgW0B3YXJuaW5nIFwiLXVudXNlZC1jb25zdHJ1Y3RvclwiXVxuXG4gIHR5cGUgJ2EgdGVybV9zeW5jID0ge1xuICAgICgqIHByb3RlY3RlZCBieSBbbXV0XSAqKVxuICAgIG11dGFibGUgc3RhdGUgOiAnYSBzdGF0ZSBbQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdIDtcbiAgICBtdXQgOiBNdXRleC50IDtcbiAgICBjb25kIDogQ29uZGl0aW9uLnQgO1xuICB9XG5cbiAgZXh0ZXJuYWwgc3Bhd24gOiAodW5pdCAtPiAnYSkgLT4gJ2EgdGVybV9zeW5jIC0+IHRcbiAgICA9IFwiY2FtbF9kb21haW5fc3Bhd25cIlxuICBleHRlcm5hbCBzZWxmIDogdW5pdCAtPiB0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2lkXCIgW0BAbm9hbGxvY11cbiAgZXh0ZXJuYWwgY3B1X3JlbGF4IDogdW5pdCAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2NwdV9yZWxheFwiXG4gIGV4dGVybmFsIGdldF9yZWNvbW1lbmRlZF9kb21haW5fY291bnQ6IHVuaXQgLT4gaW50XG4gICAgPSBcImNhbWxfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XCIgW0BAbm9hbGxvY11cbmVuZFxuXG5sZXQgY3B1X3JlbGF4ICgpID0gUmF3LmNwdV9yZWxheCAoKVxuXG50eXBlIGlkID0gUmF3LnRcblxudHlwZSAnYSB0ID0ge1xuICBkb21haW4gOiBSYXcudDtcbiAgdGVybV9zeW5jIDogJ2EgUmF3LnRlcm1fc3luYztcbn1cblxubW9kdWxlIERMUyA9IHN0cnVjdFxuXG4gIG1vZHVsZSBPYmpfb3B0IDogc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIG5vbmUgOiB0XG4gICAgdmFsIHNvbWUgOiAnYSAtPiB0XG4gICAgdmFsIGlzX3NvbWUgOiB0IC0+IGJvb2xcblxuICAgICgqKiBbdW5zYWZlX2dldCBvYmpdIG1heSBvbmx5IGJlIGNhbGxlZCBzYWZlbHlcbiAgICAgICAgaWYgW2lzX3NvbWVdIGlzIHRydWUuXG5cbiAgICAgICAgW3Vuc2FmZV9nZXQgKHNvbWUgdildIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgW09iai5vYmogKE9iai5yZXByIHYpXS4gKilcbiAgICB2YWwgdW5zYWZlX2dldCA6IHQgLT4gJ2FcbiAgZW5kID0gc3RydWN0XG4gICAgdHlwZSB0ID0gT2JqLnRcbiAgICBsZXQgbm9uZSA9IE9iai5yZXByIChyZWYgMClcbiAgICBsZXQgc29tZSB2ID0gT2JqLnJlcHIgdlxuICAgIGxldCBpc19zb21lIG9iaiA9IChvYmogIT0gbm9uZSlcbiAgICBsZXQgdW5zYWZlX2dldCBvYmogPSBPYmoub2JqIG9ialxuICBlbmRcblxuICB0eXBlIGRsc19zdGF0ZSA9IE9ial9vcHQudCBhcnJheVxuXG4gIGV4dGVybmFsIGdldF9kbHNfc3RhdGUgOiB1bml0IC0+IGRsc19zdGF0ZSA9IFwiJWRsc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldF9kbHNfc3RhdGUgOiBkbHNfc3RhdGUgLT4gdW5pdCA9XG4gICAgXCJjYW1sX2RvbWFpbl9kbHNfc2V0XCIgW0BAbm9hbGxvY11cblxuICBleHRlcm5hbCBjb21wYXJlX2FuZF9zZXRfZGxzX3N0YXRlIDogZGxzX3N0YXRlIC0+IGRsc19zdGF0ZSAtPiBib29sID1cbiAgICBcImNhbWxfZG9tYWluX2Rsc19jb21wYXJlX2FuZF9zZXRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGVfZGxzICgpID1cbiAgICBsZXQgc3QgPSBBcnJheS5tYWtlIDggT2JqX29wdC5ub25lIGluXG4gICAgc2V0X2Rsc19zdGF0ZSBzdFxuXG4gIGxldCBfID0gY3JlYXRlX2RscyAoKVxuXG4gIHR5cGUgJ2Ega2V5ID0gaW50ICogKHVuaXQgLT4gJ2EpXG5cbiAgbGV0IGtleV9jb3VudGVyID0gQXRvbWljLm1ha2UgMFxuXG4gIHR5cGUga2V5X2luaXRpYWxpemVyID1cbiAgICBLSTogJ2Ega2V5ICogKCdhIC0+ICdhKSAtPiBrZXlfaW5pdGlhbGl6ZXJcblxuICBsZXQgcGFyZW50X2tleXMgPSBBdG9taWMubWFrZSAoW10gOiBrZXlfaW5pdGlhbGl6ZXIgbGlzdClcblxuICBsZXQgcmVjIGFkZF9wYXJlbnRfa2V5IGtpID1cbiAgICBsZXQgbCA9IEF0b21pYy5nZXQgcGFyZW50X2tleXMgaW5cbiAgICBpZiBub3QgKEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcGFyZW50X2tleXMgbCAoa2kgOjogbCkpXG4gICAgdGhlbiBhZGRfcGFyZW50X2tleSBraVxuXG4gIGxldCBuZXdfa2V5ID9zcGxpdF9mcm9tX3BhcmVudCBpbml0X29ycGhhbiA9XG4gICAgbGV0IGlkeCA9IEF0b21pYy5mZXRjaF9hbmRfYWRkIGtleV9jb3VudGVyIDEgaW5cbiAgICBsZXQgayA9IChpZHgsIGluaXRfb3JwaGFuKSBpblxuICAgIGJlZ2luIG1hdGNoIHNwbGl0X2Zyb21fcGFyZW50IHdpdGhcbiAgICB8IE5vbmUgLT4gKClcbiAgICB8IFNvbWUgc3BsaXQgLT4gYWRkX3BhcmVudF9rZXkgKEtJKGssIHNwbGl0KSlcbiAgICBlbmQ7XG4gICAga1xuXG4gICgqIElmIG5lY2Vzc2FyeSwgZ3JvdyB0aGUgY3VycmVudCBkb21haW4ncyBsb2NhbCBzdGF0ZSBhcnJheSBzdWNoIHRoYXQgW2lkeF1cbiAgICogaXMgYSB2YWxpZCBpbmRleCBpbiB0aGUgYXJyYXkuICopXG4gIGxldCByZWMgbWF5YmVfZ3JvdyBpZHggPVxuICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICBsZXQgc3ogPSBBcnJheS5sZW5ndGggc3QgaW5cbiAgICBpZiBpZHggPCBzeiB0aGVuIHN0XG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBjb21wdXRlX25ld19zaXplIHMgPVxuICAgICAgICBpZiBpZHggPCBzIHRoZW4gcyBlbHNlIGNvbXB1dGVfbmV3X3NpemUgKDIgKiBzKVxuICAgICAgaW5cbiAgICAgIGxldCBuZXdfc3ogPSBjb21wdXRlX25ld19zaXplIHN6IGluXG4gICAgICBsZXQgbmV3X3N0ID0gQXJyYXkubWFrZSBuZXdfc3ogT2JqX29wdC5ub25lIGluXG4gICAgICBBcnJheS5ibGl0IHN0IDAgbmV3X3N0IDAgc3o7XG4gICAgICAoKiBXZSB3YW50IGEgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBzYWZlIHdpdGggcmVzcGVjdCB0b1xuICAgICAgICAgc2luZ2xlLWRvbWFpbiBtdWx0aS10aHJlYWRpbmc6IHJldHJ5IGlmIHRoZSBETFMgc3RhdGUgaGFzXG4gICAgICAgICBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LlxuICAgICAgICAgTm90ZSB0aGF0IHRoZSBudW1iZXIgb2YgcmV0cmllcyB3aWxsIGJlIHZlcnkgc21hbGwgaW5cbiAgICAgICAgIGNvbnRlbmRlZCBzY2VuYXJpb3MsIGFzIHRoZSBhcnJheSBvbmx5IGdyb3dzLCB3aXRoXG4gICAgICAgICBleHBvbmVudGlhbCByZXNpemluZy4gKilcbiAgICAgIGlmIGNvbXBhcmVfYW5kX3NldF9kbHNfc3RhdGUgc3QgbmV3X3N0XG4gICAgICB0aGVuIG5ld19zdFxuICAgICAgZWxzZSBtYXliZV9ncm93IGlkeFxuICAgIGVuZFxuXG4gIGxldCBzZXQgKHR5cGUgYSkgKGlkeCwgX2luaXQpICh4IDogYSkgPVxuICAgIGxldCBzdCA9IG1heWJlX2dyb3cgaWR4IGluXG4gICAgKCogW1N5cy5vcGFxdWVfaWRlbnRpdHldIGVuc3VyZXMgdGhhdCBmbGFtYmRhIGRvZXMgbm90IGxvb2sgYXQgdGhlIHR5cGUgb2ZcbiAgICAgKiBbeF0sIHdoaWNoIG1heSBiZSBhIFtmbG9hdF0gYW5kIGNvbmNsdWRlIHRoYXQgdGhlIFtzdF0gaXMgYSBmbG9hdCBhcnJheS5cbiAgICAgKiBXZSBkbyBub3Qgd2FudCBPQ2FtbCdzIGZsb2F0IGFycmF5IG9wdGltaXNhdGlvbiBraWNraW5nIGluIGhlcmUuICopXG4gICAgc3QuKGlkeCkgPC0gT2JqX29wdC5zb21lIChTeXMub3BhcXVlX2lkZW50aXR5IHgpXG5cblxuICBsZXRbQGlubGluZSBuZXZlcl0gYXJyYXlfY29tcGFyZV9hbmRfc2V0IGEgaSBvbGR2YWwgbmV3dmFsID1cbiAgICAoKiBOb3RlOiB3ZSBjYW5ub3QgdXNlIFtAcG9sbCBlcnJvcl0gZHVlIHRvIHRoZVxuICAgICAgIGFsbG9jYXRpb25zIG9uIGEuKGkpIGluIHRoZSBEb3VibGVfYXJyYXkgY2FzZS4gKilcbiAgICBsZXQgY3VydmFsID0gYS4oaSkgaW5cbiAgICBpZiBjdXJ2YWwgPT0gb2xkdmFsIHRoZW4gKFxuICAgICAgQXJyYXkudW5zYWZlX3NldCBhIGkgbmV3dmFsO1xuICAgICAgdHJ1ZVxuICAgICkgZWxzZSBmYWxzZVxuXG4gIGxldCBnZXQgKHR5cGUgYSkgKChpZHgsIGluaXQpIDogYSBrZXkpIDogYSA9XG4gICAgbGV0IHN0ID0gbWF5YmVfZ3JvdyBpZHggaW5cbiAgICBsZXQgb2JqID0gc3QuKGlkeCkgaW5cbiAgICBpZiBPYmpfb3B0LmlzX3NvbWUgb2JqXG4gICAgdGhlbiAoT2JqX29wdC51bnNhZmVfZ2V0IG9iaiA6IGEpXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHYgOiBhID0gaW5pdCAoKSBpblxuICAgICAgbGV0IG5ld19vYmogPSBPYmpfb3B0LnNvbWUgKFN5cy5vcGFxdWVfaWRlbnRpdHkgdikgaW5cbiAgICAgICgqIEF0IHRoaXMgcG9pbnQsIFtzdF0gb3IgW3N0LihpZHgpXSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgIGJ5IGFub3RoZXIgdGhyZWFkIG9uIHRoZSBzYW1lIGRvbWFpbi5cblxuICAgICAgICAgSWYgW3N0XSBjaGFuZ2VkLCBpdCB3YXMgcmVzaXplZCBpbnRvIGEgbGFyZ2VyIHZhbHVlLFxuICAgICAgICAgd2UgY2FuIGp1c3QgcmV1c2UgdGhlIG5ldyB2YWx1ZS5cblxuICAgICAgICAgSWYgW3N0LihpZHgpXSBjaGFuZ2VkLCB3ZSBkcm9wIHRoZSBjdXJyZW50IHZhbHVlIHRvIGF2b2lkXG4gICAgICAgICBsZXR0aW5nIG90aGVyIHRocmVhZHMgb2JzZXJ2ZSBhICdyZXZlcnQnIHRoYXQgZm9yZ2V0c1xuICAgICAgICAgcHJldmlvdXMgbW9kaWZpY2F0aW9ucy4gKilcbiAgICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICAgIGlmIGFycmF5X2NvbXBhcmVfYW5kX3NldCBzdCBpZHggb2JqIG5ld19vYmpcbiAgICAgIHRoZW4gdlxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICAoKiBpZiBzdC4oaWR4KSBjaGFuZ2VkLCBzb21lb25lIG11c3QgaGF2ZSBpbml0aWFsaXplZFxuICAgICAgICAgICB0aGUga2V5IGluIHRoZSBtZWFudGltZS4gKilcbiAgICAgICAgbGV0IHVwZGF0ZWRfb2JqID0gc3QuKGlkeCkgaW5cbiAgICAgICAgaWYgT2JqX29wdC5pc19zb21lIHVwZGF0ZWRfb2JqXG4gICAgICAgIHRoZW4gKE9ial9vcHQudW5zYWZlX2dldCB1cGRhdGVkX29iaiA6IGEpXG4gICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICBlbmRcbiAgICBlbmRcblxuICB0eXBlIGtleV92YWx1ZSA9IEtWIDogJ2Ega2V5ICogJ2EgLT4ga2V5X3ZhbHVlXG5cbiAgbGV0IGdldF9pbml0aWFsX2tleXMgKCkgOiBrZXlfdmFsdWUgbGlzdCA9XG4gICAgTGlzdC5tYXBcbiAgICAgIChmdW4gKEtJIChrLCBzcGxpdCkpIC0+IEtWIChrLCAoc3BsaXQgKGdldCBrKSkpKVxuICAgICAgKEF0b21pYy5nZXQgcGFyZW50X2tleXMpXG5cbiAgbGV0IHNldF9pbml0aWFsX2tleXMgKGw6IGtleV92YWx1ZSBsaXN0KSA9XG4gICAgTGlzdC5pdGVyIChmdW4gKEtWIChrLCB2KSkgLT4gc2V0IGsgdikgbFxuZW5kXG5cbigqKioqKioqKiBJZGVudGl0eSAqKioqKioqKioqKVxuXG5sZXQgZ2V0X2lkIHsgZG9tYWluOyBfIH0gPSBkb21haW5cblxubGV0IHNlbGYgKCkgPSBSYXcuc2VsZiAoKVxuXG5sZXQgaXNfbWFpbl9kb21haW4gKCkgPSAoc2VsZiAoKSA6PiBpbnQpID0gMFxuXG4oKioqKioqKiogQ2FsbGJhY2tzICoqKioqKioqKiopXG5cbigqIGZpcnN0IHNwYXduLCBkb21haW4gc3RhcnR1cCBhbmQgYXQgZXhpdCBmdW5jdGlvbmFsaXR5ICopXG5sZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgPSBBdG9taWMubWFrZSBmYWxzZVxuXG5sZXQgZmlyc3Rfc3Bhd25fZnVuY3Rpb24gPSByZWYgKGZ1biAoKSAtPiAoKSlcblxubGV0IGJlZm9yZV9maXJzdF9zcGF3biBmID1cbiAgaWYgQXRvbWljLmdldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJmaXJzdCBkb21haW4gYWxyZWFkeSBzcGF3bmVkXCIpXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgb2xkX2YgPSAhZmlyc3Rfc3Bhd25fZnVuY3Rpb24gaW5cbiAgICBsZXQgbmV3X2YgKCkgPSBvbGRfZiAoKTsgZiAoKSBpblxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IG5ld19mXG4gIGVuZFxuXG5sZXQgZG9fYmVmb3JlX2ZpcnN0X3NwYXduICgpID1cbiAgaWYgbm90IChBdG9taWMuZ2V0IGZpcnN0X2RvbWFpbl9zcGF3bmVkKSB0aGVuIGJlZ2luXG4gICAgQXRvbWljLnNldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0cnVlO1xuICAgICFmaXJzdF9zcGF3bl9mdW5jdGlvbigpO1xuICAgICgqIFJlbGVhc2UgdGhlIG9sZCBmdW5jdGlvbiAqKVxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IChmdW4gKCkgLT4gKCkpXG4gIGVuZFxuXG5sZXQgYXRfZXhpdF9rZXkgPSBETFMubmV3X2tleSAoZnVuICgpIC0+IChmdW4gKCkgLT4gKCkpKVxuXG5sZXQgYXRfZXhpdCBmID1cbiAgbGV0IG9sZF9leGl0IDogdW5pdCAtPiB1bml0ID0gRExTLmdldCBhdF9leGl0X2tleSBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGYgKCk7IG9sZF9leGl0ICgpXG4gIGluXG4gIERMUy5zZXQgYXRfZXhpdF9rZXkgbmV3X2V4aXRcblxubGV0IGRvX2F0X2V4aXQgKCkgPVxuICBsZXQgZiA6IHVuaXQgLT4gdW5pdCA9IERMUy5nZXQgYXRfZXhpdF9rZXkgaW5cbiAgZiAoKVxuXG5sZXQgXyA9IFN0ZGxpYi5kb19kb21haW5fbG9jYWxfYXRfZXhpdCA6PSBkb19hdF9leGl0XG5cbigqKioqKioqIENyZWF0aW9uIGFuZCBUZXJtaW5hdGlvbiAqKioqKioqKilcblxubGV0IHNwYXduIGYgPVxuICBkb19iZWZvcmVfZmlyc3Rfc3Bhd24gKCk7XG4gIGxldCBwayA9IERMUy5nZXRfaW5pdGlhbF9rZXlzICgpIGluXG5cbiAgKCogW3Rlcm1fc3luY10gaXMgdXNlZCB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBqb2luaW5nIGRvbWFpbnMgKilcbiAgbGV0IHRlcm1fc3luYyA9XG4gICAgUmF3Lnsgc3RhdGUgPSBSdW5uaW5nIDtcbiAgICAgICAgICBtdXQgPSBNdXRleC5jcmVhdGUgKCkgO1xuICAgICAgICAgIGNvbmQgPSBDb25kaXRpb24uY3JlYXRlICgpIH1cbiAgaW5cblxuICBsZXQgYm9keSAoKSA9XG4gICAgbWF0Y2hcbiAgICAgIERMUy5jcmVhdGVfZGxzICgpO1xuICAgICAgRExTLnNldF9pbml0aWFsX2tleXMgcGs7XG4gICAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgICAgcmVzXG4gICAgd2l0aFxuICAgICgqIFJ1biB0aGUgW2F0X2V4aXRdIGNhbGxiYWNrcyB3aGVuIHRoZSBkb21haW4gY29tcHV0YXRpb24gZWl0aGVyXG4gICAgICAgdGVybWluYXRlcyBub3JtYWxseSBvciBleGNlcHRpb25hbGx5LiAqKVxuICAgIHwgcmVzIC0+XG4gICAgICAgICgqIElmIHRoZSBkb21haW4gY29tcHV0YXRpb24gdGVybWluYXRlZCBub3JtYWxseSwgYnV0IHRoZVxuICAgICAgICAgICBbYXRfZXhpdF0gY2FsbGJhY2tzIHJhaXNlZCBhbiBleGNlcHRpb24sIHRoZW4gcmV0dXJuIHRoZVxuICAgICAgICAgICBleGNlcHRpb24uICopXG4gICAgICAgIGRvX2F0X2V4aXQgKCk7XG4gICAgICAgIHJlc1xuICAgIHwgZXhjZXB0aW9uIGV4biAtPlxuICAgICAgICAoKiBJZiBib3RoIHRoZSBkb21haW4gY29tcHV0YXRpb24gYW5kIHRoZSBbYXRfZXhpdF0gY2FsbGJhY2tzXG4gICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMsIHRoZW4gaWdub3JlIHRoZSBleGNlcHRpb24gZnJvbSB0aGVcbiAgICAgICAgICAgW2F0X2V4aXRdIGNhbGxiYWNrcyBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uICopXG4gICAgICAgICh0cnkgZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgICAgICByYWlzZSBleG5cbiAgaW5cbiAgbGV0IGRvbWFpbiA9IFJhdy5zcGF3biBib2R5IHRlcm1fc3luYyBpblxuICB7IGRvbWFpbiA7IHRlcm1fc3luYyB9XG5cbmxldCBqb2luIHsgdGVybV9zeW5jIDsgXyB9ID1cbiAgbGV0IG9wZW4gUmF3IGluXG4gIGxldCByZWMgbG9vcCAoKSA9XG4gICAgbWF0Y2ggdGVybV9zeW5jLnN0YXRlIHdpdGhcbiAgICB8IFJ1bm5pbmcgLT5cbiAgICAgICAgQ29uZGl0aW9uLndhaXQgdGVybV9zeW5jLmNvbmQgdGVybV9zeW5jLm11dDtcbiAgICAgICAgbG9vcCAoKVxuICAgIHwgRmluaXNoZWQgcmVzIC0+XG4gICAgICAgIHJlc1xuICBpblxuICBtYXRjaCBNdXRleC5wcm90ZWN0IHRlcm1fc3luYy5tdXQgbG9vcCB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZXggLT4gcmFpc2UgZXhcblxubGV0IHJlY29tbWVuZGVkX2RvbWFpbl9jb3VudCA9IFJhdy5nZXRfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2RvbWFpbl9kbHNfZ2V0IiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2RvbWFpbl9pZCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Db25kaXRpb24iLCJTdGRsaWJfTXV0ZXgiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsImNwdV9yZWxheCIsInBhcmFtIiwibm9uZSIsImNyZWF0ZV9kbHMiLCJzdCIsImtleV9jb3VudGVyIiwicGFyZW50X2tleXMiLCJuZXdfa2V5Iiwic3BsaXRfZnJvbV9wYXJlbnQiLCJpbml0X29ycGhhbiIsImlkeCIsImsiLCJzcGxpdCIsImtpIiwibCIsIm1heWJlX2dyb3ciLCJzeiIsIm5ld19zeiIsIm5ld19zdCIsInMiLCJzZXQiLCJ4IiwiZ2V0IiwiaW5pdCIsIm9sZHZhbCIsIm5ld19vYmoiLCJjdXJ2YWwiLCJ1cGRhdGVkX29iaiIsInNldF9pbml0aWFsX2tleXMiLCJ2IiwiZ2V0X2lkIiwiZG9tYWluIiwic2VsZiIsImlzX21haW5fZG9tYWluIiwiZmlyc3RfZG9tYWluX3NwYXduZWQiLCJmaXJzdF9zcGF3bl9mdW5jdGlvbiIsImJlZm9yZV9maXJzdF9zcGF3biIsIm9sZF9mIiwibmV3X2YiLCJhdF9leGl0X2tleSIsImF0X2V4aXQiLCJvbGRfZXhpdCIsIm5ld19leGl0IiwiZG9fYXRfZXhpdCIsInNwYXduIiwicGsiLCJ0ZXJtX3N5bmMiLCJib2R5IiwicmVzIiwiZXhuIiwiam9pbiIsImxvb3AiLCJtYXRjaCIsImV4IiwicmVjb21tZW5kZWRfZG9tYWluX2NvdW50Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLFVBQUFDLE9DOENtQiwwQ0FBZ0I7QUFBQSxPQUFBQyxPRDlDbkM7QUFBQSxZQUFBQyxXQUFBRjtBQUFBQSxRQUFBRyxLQ3dGYTtBQUFBLElBQ1Q7QUFBQSxHQUFnQjtBQUFBLEdBRVY7QUFBQTtBQUFBLElBQUFDLGNBSVU7QUFBQSxJQUFBQyxjQUtBO0FBQUEsWUFBQUMsUUFBQUMsbUJBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLE1BUU47QUFBQSxLQUFBQyxJQUNWO0FBQUEsSUFDQTtBQUFBLFNBQUFDLFFBQUEsc0JBQUFDLEtBRWdCO0FBQUEsS0FUaEI7QUFBQSxVQUFBQyxJQUFRO0FBQUEsTUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVVA7QUFBQSxHQUFDO0FBQUEsWUFBQUMsV0FBQUw7QUFBQUEsSUFLRDtBQUFBLFNBQUFOLEtBQUEsd0JBQUFZLEtBQ0E7QUFBQSxLQUNBLGFBQWlCO0FBQUEsU0FBQUMsU0FBakI7QUFBQTtBQUFBLE1BR0k7QUFBQSxXQUFBQyxTQUdXO0FB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QUFBQSxFRHRPeEQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODg4NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pZ25cbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdHMuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsImNhbWxfZm9ybWF0X2ludCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ191bnNhZmVfZ2V0IiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfU3lzIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiY3JlYXRlX2NoYXJfc2V0IiwicGFyYW0iLCJhZGRfaW5fY2hhcl9zZXQiLCJjaGFyX3NldCIsImMiLCJzdHJfaW5kIiwibWFzayIsImZyZWV6ZV9jaGFyX3NldCIsInJldl9jaGFyX3NldCIsImkiLCJpc19pbl9jaGFyX3NldCIsInBhZF9vZl9wYWRfb3B0IiwicGFkX29wdCIsIndpZHRoIiwicGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IiwiaWduIiwiZm10IiwiaWNvbnYiLCJwcmVjX29wdCIsIm5kZWMiLCJmbXR0eSIsIndpZHRoX29wdCIsImNvdW50ZXIiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImZjb252IiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwiYnVmIiwib3ZlcmhlYWQiLCJsZW4iLCJtaW5fbGVuIiwibmV3X2xlbiIsIm5ld19zdHIiLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInMiLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9pY29udiIsImNoYXJfb2ZfZmNvbnYiLCJvcHQiLCJjRiIsImJwcmludF9jaGFyX3NldCIsInByaW50X2NoYXIiLCJzZXQiLCJpc19hbG9uZSIsImFmdGVyIiwiYmVmb3JlIiwic3dpdGNoZXIiLCJqIiwiYnByaW50X3BhZHR5IiwicGFkdHkiLCJicHJpbnRfaWdub3JlZF9mbGFnIiwiaWduX2ZsYWciLCJicHJpbnRfcGFkX29wdCIsImJwcmludF9wYWRkaW5nIiwicGFkIiwibiIsImJwcmludF9wcmVjaXNpb24iLCJwcmVjIiwiYnByaW50X2ljb252X2ZsYWciLCJicHJpbnRfYWx0aW50X2ZtdCIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIiLCJicHJpbnRfY2hhcl9saXRlcmFsIiwiY2hyIiwiYnByaW50X3N0cmluZ19saXRlcmFsIiwiY3N0X0xpIiwiY3N0X2kiLCJjc3RfbGkiLCJjc3RfbmkiLCJicHJpbnRfZm10dHkiLCJzdWJfZm10dHkiLCJpbnRfb2ZfY3VzdG9tX2FyaXR5IiwieCIsImNzdCIsInN0cmluZ19vZl9mbXQiLCJmbXRpdGVyIiwicmVzdCIsImZtdGluZ19saXQiLCJmbXRpbmdfZ2VuIiwiYXJpdHkiLCJzeW1tIiwidHkiLCJ0eTIiLCJ0eTEiLCJmbXR0eV9yZWxfZGV0IiwibWF0Y2giLCJkZSIsImFmIiwiamQiLCJnYSIsImNzdF9jYW1saW50ZXJuYWxGb3JtYXRfbWwiLCJ0cmFucyIsInJlc3QxIiwicmVzdDIiLCJ0eTEyIiwidHkxMSIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsImZtdHR5X29mX2ZtdCIsInR5X3Jlc3QiLCJwcmVjX3R5IiwiZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9vZl9jdXN0b20iLCJmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IiwiZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IiwiVHlwZV9taXNtYXRjaCIsInR5cGVfcGFkZGluZyIsInciLCJ0eXBlX3BhZHByZWMiLCJwIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXR0eTAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJzdWJfZm10dHkxIiwiZm10MSIsImZtdHR5MiIsImZtdDIiLCJmbXR0eTMiLCJmbXQzIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViMl9mbXR0eSIsInN1YjFfZm10dHkiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsInJlcyIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwibCIsImZvcm1hdF9vZl9mY29udiIsInN5bWIiLCJ0cmFuc2Zvcm1faW50X2FsdCIsInBvcyIsInB1dCIsImxlZnQiLCJjc3RfdSIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJzaWduIiwiY2FtbF9zcGVjaWFsX3ZhbCIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmIiwiayIsImFjYyIsImthY2MiLCJuZXdfYWNjIiwibyIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfY3VzdG9tIiwibWFrZV9pcHJpbnRmIiwia29jIiwiZm5fb2ZfY3VzdG9tX2FyaXR5Iiwib3V0cHV0X2FjYyIsIm1zZyIsImJ1ZnB1dF9hY2MiLCJiIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleG4iLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiY3N0X2F0X2NoYXJhY3Rlcl9udW1iZXIiLCJjc3RfaW52YWxpZF9mb3JtYXQiLCJzdWJfZm9ybWF0IiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwiaW52YWxpZF9mb3JtYXRfbWVzc2FnZSIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsInJlYWQiLCJjc3RfdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwicGFyc2UiLCJsaXRfc3RhcnQiLCJlbmRfaW5kIiwiY3N0XzAiLCJwYXJzZV9mbGFncyIsInBjdF9pbmQiLCJzZXRfZmxhZyIsInplcm8iLCJtaW51cyIsInBsdXMiLCJzcGFjZSIsImhhc2giLCJuZXdfaW5kIiwiY3N0X3ByZWNpc2lvbiIsInBhcnNlX2FmdGVyX3BhZGRpbmciLCJwYXJzZV9saXRlcmFsIiwicGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIiwicGFyc2VfY29udiIsInBhZHByZWMiLCJwYXJzZV9jb252ZXJzaW9uIiwicGx1c191c2VkIiwiZ2V0X3BsdXMiLCJoYXNoX3VzZWQiLCJnZXRfaGFzaCIsInNwYWNlX3VzZWQiLCJnZXRfc3BhY2UiLCJpZ25fdXNlZCIsImdldF9pZ24iLCJwYWRfdXNlZCIsImdldF9wYWQiLCJwcmVjX3VzZWQiLCJnZXRfcHJlYyIsImdldF9wYWRwcmVjIiwiZ2V0X2ludF9wYWQiLCJjaGVja19ub18wIiwib3B0X29mX3BhZCIsImdldF9wYWRfb3B0IiwiZ2V0X3BhZHByZWNfb3B0IiwiZm10X3Jlc3VsdCIsInN1Yl9lbmQiLCJzdWJfZm10IiwiaWdub3JlZCIsIm5leHRfaW5kIiwiY2hhcl9mb3JtYXQiLCJraW5kIiwicGFyc2VfYWZ0ZXJfYXQiLCJzdHJfaW5kXzEiLCJzdHJfaW5kXzIiLCJzdHJfaW5kXzMiLCJvZmZzZXQiLCJzdHJfaW5kXzQiLCJzdHJfaW5kXzUiLCJzaXplIiwicGFyc2VfdGFnIiwiaXNfb3Blbl90YWciLCJpbmQiLCJzdWJfc3RyIiwiZm9ybWF0dGluZyIsInBhcnNlX2NoYXJfc2V0IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsInBhcnNlX3Bvc2l0aXZlIiwicGFyc2VfaW50ZWdlciIsImFkZF9saXRlcmFsIiwic2VhcmNoX3N1YmZvcm1hdF9lbmQiLCJjb21wdXRlX2ludF9jb252IiwiaW5jb21wYXRpYmxlX2ZsYWciLCJvcHRpb24iLCJzdWJmbXQiLCJjc3RfYW5kIiwiY3N0X2JhZF9pbnB1dF9mb3JtYXRfdHlwZV9taXNtIiwiZm9ybWF0X29mX3N0cmluZ19mbXR0eSIsImZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQU4sR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFSLEdBQUFDLElBQUFFLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQywyQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLGdCQUFBQyxPQ3VCeUIsd0NBQW9C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QWxOLEtBQUE5QztBQUFBQSxRQUFBSixNQ2c2Rm9CO0FBQUEsSUFDbEIsWUFBWTtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRGo2RmQ7QUFBQTtBQUFBLGFDcTZGVTtBQUFBLEtBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNRHI2RmpDO0FBQUE7QUFBQTtBQUFBLFlBQUE0Rix3QkFBQW5OLEtBQUFqRTtBQUFBQTtBQUFBQSxLQUFBaUUsUUN5NkY0QjtBQUFBLEtBQUFsRCxNQUFBO0FBQUEsS0FBQUEsUUFDUjtBQUFBLElBQ2xCLFlBQTRCLElBQWhCLG1CQUFnQjtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRDM2RjlCO0FBQUE7QUFBQSxNQzY2Rkksa0RBQzhEO0FBQUEsS0Q5NkZsRTtBQUFBO0FBQUEsR0M4NkZrRTtBQUFBLEdEOTZGbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMzc0MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9wcmludGYubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CdWZmZXIiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJrZnByaW50ZiIsImsiLCJvIiwicGFyYW0iLCJmbXQiLCJhY2MiLCJrYnByaW50ZiIsImIiLCJpa2ZwcmludGYiLCJvYyIsImZwcmludGYiLCJicHJpbnRmIiwiaWZwcmludGYiLCJpYnByaW50ZiIsInByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsImJ1ZiIsInNwcmludGYiLCJzIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLFNBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUFDLE1Da0JhO0FBQUEsSUFDWDtBQUFBO0FBQUEsc0JBQUFDO0FBQUFBLGNBQXdCO0FBQUEsY0FBZ0IsdUJBQUs7QUFBQTtBQUFBO0FBQUEsaUJBQWdCO0FBQUE7QUFBQSxZQUFBQyxTQUFBTCxHQUFBTSxHQUFBSjtBQUFBQSxRQUFBQyxNQUNsRDtBQUFBLElBQ1g7QUFBQTtBQUFBLHNCQUFBQztBQUFBQSxjQUF3QjtBQUFBLGNBQWdCLHVCQUFLO0FBQUE7QUFBQTtBQUFBLGlCQUFnQjtBQUFBO0FBQUEsWUFBQUcsVUFBQVAsR0FBQVEsSUFBQU47QUFBQUEsUUFBQUMsTUFDakQ7QUFBQSxJQUNaLG1EQUFxQjtBQUFBO0FBQUEsWUFBQU0sUUFBQUQsSUFBQUw7QUFBQUEsSUFHRiw0QkQxQnJCLG9CQzBCMkM7QUFBQTtBQUFBLFlBQUFPLFFBQUFKLEdBQUFILEtBQ3ZCLDRCRDNCcEIsbUJDMkJ5QztBQUFBLFlBQUFRLFNBQUFILElBQUFMO0FBQUFBLElBQ25CLDZCRDVCdEIsb0JDNEI2QztBQUFBO0FBQUEsWUFBQVMsU0FBQU4sR0FBQUg7QUFBQUEsSUFDeEIsNkJEN0JyQixtQkM2QjJDO0FBQUE7QUFBQSxZQUFBVSxPQUFBVixLQUMxQiwrQkFBa0I7QUFBQSxZQUFBVyxRQUFBWCxLQUNqQiwrQkFBa0I7QUFBQSxZQUFBWSxTQUFBZixHQUFBRTtBQUFBQSxRQUFBQyxNQUV2QjtBQUFBLGFBQUFILElBQUFJO0FBQUFBLFNBQUFZLE1BRUM7QUFBQSxLQUNWO0FBQUEsS0FDRSxPQUFxQixjQUFyQixpQ0FBcUI7QUFBQTtBQUFBLElBQ3pCLG9EQUE2QjtBQUFBO0FBQUEsWUFBQUMsUUFBQWQsS0FFYix5QkFBQWUsR0FBbUIsU0FBQyxPQUFLO0FBQUEsR0R4QzNDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjM4MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcHJpbnRleGMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB4ID1cbiAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICgoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZyksIE5vbmUpXG4gIGVsc2VcbiAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAoY29uc3RydWN0b3IsIFNvbWUgKGZpZWxkcyB4KSlcblxubGV0IHN0cmluZ19vZl9leHRlbnNpb25fY29uc3RydWN0b3IgdCA9XG4gIGxldCBjb25zdHJ1Y3RvciwgZmllbGRzX29wdCA9IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB0IGluXG4gIG1hdGNoIGZpZWxkc19vcHQgd2l0aFxuICB8IE5vbmUgLT4gY29uc3RydWN0b3JcbiAgfCBTb21lIGYgLT4gY29uc3RydWN0b3IgXiBmXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBzdHJpbmdfb2ZfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIChPYmoucmVwciB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxuKCogRGlzYWJsZSB3YXJuaW5nIDM3OiB2YWx1ZXMgYXJlIGNvbnN0cnVjdGVkIGluIHRoZSBydW50aW1lICopXG50eXBlW0B3YXJuaW5nIFwiLTM3XCJdIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgOiBzdHJpbmc7XG4gICAgICBzdGFydF9sbnVtIDogaW50O1xuICAgICAgc3RhcnRfY2hhciA6IGludDtcbiAgICAgIGVuZF9vZmZzZXQgOiBpbnQ7ICgqIFJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBzdGFydF9sbnVtICopXG4gICAgICBlbmRfbG51bSAgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICA6IGludDsgKCogUmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIGVuZF9sbnVtIGxpbmUgKilcbiAgICAgIGlzX2lubGluZSAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgbGV0IGxpbmVzID1cbiAgICAgICAgaWYgbC5zdGFydF9sbnVtID0gbC5lbmRfbG51bSB0aGVuXG4gICAgICAgICAgUHJpbnRmLnNwcmludGYgXCIgJWRcIiBsLnN0YXJ0X2xudW1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwicyAlZC0lZFwiIGwuc3RhcnRfbG51bSBsLmVuZF9sbnVtXG4gICAgICBpblxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lJXMsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGxpbmVzIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xuICBlbmRfbGluZSA6IGludDtcbiAgZW5kX2NvbCA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5zdGFydF9sbnVtO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX29mZnNldDtcbiAgICAgIGVuZF9saW5lICAgID0gbC5lbmRfbG51bTtcbiAgICAgIGVuZF9jb2wgICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9vYmpfdGFnIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw1IiwiYTIiLCJhMyIsImE0IiwiY2FtbF9jYWxsNyIsImE1IiwiYTYiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9PYmoiLCJwcmludGVycyIsImZpZWxkIiwieCIsImkiLCJjc3QiLCJvdGhlcl9maWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJwYXJhbSIsInRsIiwiaGQiLCJ2YWwiLCJzIiwic3RyaW5nX29mX2V4dGVuc2lvbl9jb25zdHJ1Y3RvIiwidCIsImNvbnN0cnVjdG9yIiwibWF0Y2giLCJmaWVsZHNfb3B0IiwiY3N0X2NoYXJhY3RlcnMiLCJsb2NmbXQiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIiLCJsaW5lIiwiZmlsZSIsInRvX3N0cmluZyIsImUiLCJjc3RfVW5jYXVnaHRfZXhjZXB0aW9uIiwiY3N0X1VuY2F1Z2h0X2V4Y2VwdGlvbl9zIiwicHJpbnQiLCJmY3QiLCJhcmciLCJjYXRjaCQiLCJyYXdfYmFja3RyYWNlX2VudHJpZXMiLCJidCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInBvcyIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJsaW5lcyIsImNzdF9zIiwiY3N0X1Byb2dyYW1fbm90X2xpbmtlZF93aXRoX2dfIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsIm91dGNoYW4iLCJyYXdfYmFja3RyYWNlIiwiYmFja3RyYWNlIiwiYSIsInN0ciIsInByaW50X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIiwiYiIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lIiwiYmFja3RyYWNlX3Nsb3RzIiwiYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSIsImVudHJ5IiwicmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwic3VjY2VzcyIsImV4bl9zbG90IiwiZXhuX3Nsb3RfaWQiLCJleG5fc2xvdF9uYW1lIiwiZXJyb3JzIiwiY3N0X0ZhdGFsX2Vycm9yX2V4Y2VwdGlvbiIsImNzdF9GYXRhbF9lcnJvcl9leGNlcHRpb25fcyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsImV4biIsInN0YXR1cyIsInVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwic2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwiZW1wdHlfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsIlN0ZGxpYl9QcmludGV4YyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxXQ21CZTtBQUFBLFFBQWM7QUFBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLFFBQUFwQixJQUtuQjtBQUFBLElBQ0Q7QUFBQSxLQUNMLG9EQU1HO0FBQUEsWUFMRztBQUFBO0FBQUEsS0FDTixvREFJRztBQUFBLFlBSEc7QUFBQSxtQ0FDTiw4QkFFRztBQUFBO0FBQUEsT0FBQXFCLE1EaENQLFFDbUI2QjtBQUFBLFlBQUFDLGFBQUFILEdBQUFDO0FBQUFBLElBZ0IzQixzQkFBd0I7QUFBQSxZQUNVLGdDQUFaO0FBQUEsSUFBVyx1REFBdUI7QUFBQTtBQUFBLFlBQUFHLGFBQUFKO0FBQUFBLFFBQUFLLFFBZ0JuRDtBQUFBLElBQXFCO0FBQUEsS0FOWCxZQUtMO0FBQUEsU0FBQUMsS0FMSyxVQUFBQyxLQUFBO0FBQUEsS0FFVCxRQUFBQyxNQUFPLDRCRGhEZjtBQUFBLEtDZ0RRLFlBQUFDLElBQUEsUUFFYTtBQUFBLEtBRmI7QUFBQTtBQUFBLEdBSW9CO0FBQUE7QUFBQSxRQWpDQztBQUFBO0FBQUEsWUFBQUMsK0JBQUFDO0FBQUFBLElBb0N4QjtBQUFBLFNBQUFDLGNBSVksU0FBQUMsUUFwQmY7QUFBQTtBQUFBO0FBQUEsV0FJb0M7QUFBQSxXQUFaO0FBQUEsV0FBVztBQUFBO0FBQUEsTUFKbkM7QUFBQTtBQUFBO0FBQUEsY0FHc0I7QUFBQSxjQUFXO0FBQUE7QUFBQTtBQUFBLGlCQUhqQztBQUFBO0FBQUE7QUFBQSxTQUFBQSxVQXFCK0I7QUFBQTtBQUFBO0FBQUEsU0FBQUEsVUFKRjtBQUFBLFFBQUFDLGFBTzJCLFlBQUFGLGdCQUFBO0FBQUEsSUFDeEQsaUJBQ1U7QUFBQSxRQUFBL0IsSUFEVjtBQUFBLElBRVksOENBQWU7QUFBQTtBQUFBO0FBQUEsSUFBQWtDLGlCRGxFN0I7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGtCQUFBakI7QUFBQUEsSUNvRXdCLG9CQUNIO0FBQUEsSUFERyxxQkFFRjtBQUFBLElBRkU7QUFBQSxTQUFBYSxRQUFBLE1BQUFLLE9BQUEsVUFBQUMsT0FBQSxVQUFBQyxPQUFBO0FBQUEsS0FJbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0NBTTRDO0FBQUE7QUFBQSxJQVYxQjtBQUFBO0FBQUEsTUFBQVAsVUFBQTtBQUFBLE1BQUFLLFNBQUE7QUFBQSxNQUFBQyxTQUFBO0FBQUEsTUFBQUMsU0FBQTtBQUFBLEtBTWxCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlDQUk0QztBQUFBO0FBQUEsSUFWMUIsd0JBVWxCLHdDQUE0QztBQUFBO0FBQUEsS0FBQVAsVUFWMUI7QUFBQSxLQUFBSyxTQUFBO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUFDLFNBQUE7QUFBQSxJQVFsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQ0FFNEM7QUFBQTtBQUFBLFlBQUFDLFVBQUFDO0FBQUFBLFFBQUFULFFBRzFDO0FBQUEsSUFBYyxZQUVWLDJCQUFtQjtBQUFBLFFBQUFKLElBRlQ7QUFBQSxJQUNSO0FBQUEsR0FDaUI7QUFBQTtBQUFBLElBQUFjLHlCRG5GL0I7QUFBQSxJQUFBQywyQkFBQTtBQUFBO0FBQUEsTUNtQjZCO0FBQUE7QUFBQTtBQUFBLFlBQUFDLE1BQUFDLEtBQUFDO0FBQUFBLElBbUUzQixZQUNFO0FBQUEsVUFBQTNCO0FBQUFBLFNBQUFBLElEdkZKLDhCQ3lGdUM7QUFBQSxLQUFuQztBQUFBLEtBQ0E7QUFBQSxLQUFZO0FBQUE7QUFBQSxHQUNMO0FBQUE7QUFBQTtBQUFBLE1BeEVrQjtBQUFBO0FBQUE7QUFBQSxZQUFBNEIsT0FBQUYsS0FBQUM7QUFBQUEsSUEyRTNCLFlBQ0U7QUFBQSxVQUFBM0I7QUFBQUEsU0FBQUEsSUQvRko7QUFBQSxLQ2lHSTtBQUFBLGFBQ21DO0FBQUEsS0FBbkM7QUFBQSxLQUFnRCwrQkFDMUM7QUFBQTtBQUFBO0FBQUEsWUFBQTZCLHNCQUFBQyxJQU1xQixVQUFFO0FBQUEsWUFBQUMsc0JBQUFEO0FBQUFBLElBZ0N0QixrREFBMEI7QUFBQSxHQUNiO0FBQUE7QUFBQSxRQXZISztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFFLHNCQUFBQyxLQUFBQztBQUFBQSxhQUFBQyxLQUFBQztBQUFBQSxLQTJIekI7QUFBQTtBQUFBLDZFQUd1RTtBQUFBO0FBQUEsSUFFekU7QUFBQSxLQUVJLFlBQzRDO0FBQUEsYUFFTjtBQUFBLEtBQS9CLHlEQUE0QztBQUFBO0FBQUEsSUFFbkQ7QUFBQSxhQUVJLFNBQUFDLFFBQUE7QUFBQTtBQUFBO0FBQUEsVUFFQTtBQUFBO0FBQUEsTUFBQUEsUUFBQTtBQUFBO0FBQUEsU0FFSjtBQUFBO0FBQUE7QUFBQSxTQUNRO0FBQUE7QUFBQTtBQUFBLElBREg7QUFBQTtBQUFBLHVFQUdpQztBQUFBO0FBQUE7QUFBQSxJQUFBQyxRRG5LNUM7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUEsUUNtQjZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxvQkFBQUMsU0FBQUM7QUFBQUEsUUFBQUMsWUErSk87QUFBQSxJQVpsQyxnQkFFSSw4Q0FVbUU7QUFBQSxRQUFBQyxJQVp2RSxrQkFLSTtBQUFBO0FBQUEsU0FBQTNDLElBQUE7QUFBQTtBQUFBLFVBQUFZLFFBQ1EseUJBQXdCO0FBQUEsTUFBSztBQUFBLFdBQUFnQyxNQUFBO0FBQUEsT0FFbkI7QUFBQTtBQUFBLGNBRm1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURyQztBQUFBLEdBT21FO0FBQUEsWUFBQUMsZ0JBQUFMO0FBQUFBLElBSTNDLE9BQXNCLDZCQUF0QixrQ0FBc0I7QUFBQTtBQUFBLFdBbkt2QjtBQUFBLFlBQUFNLHdCQUFBTDtBQUFBQSxRQUFBQyxZQW1MUDtBQUFBLElBYnBCLGdCQUVHO0FBQUE7QUFBQSxLQUFBQyxJQUZIO0FBQUEsS0FBQUksSUFJWTtBQUFBLFNBQ1I7QUFBQTtBQUFBLFNBQUEvQyxJQUFBO0FBQUE7QUFBQSxVQUFBWSxRQUNRLHlCQUF3QjtBQUFBLE1BQUs7QUFBQSxXQUFBZ0MsTUFBQTtBQUFBLE9BRW5CO0FBQUE7QUFBQSxjQUZtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJckMscUNBR3FEO0FBQUE7QUFBQSxZQUFBSSx3QkFBQTVDO0FBQUFBLElBRTdCLDJDQUVNO0FBQUE7QUFBQSxZQUFBNkMseUJBQUE3QyxPQUVMLG9DQUVBO0FBQUE7QUFBQSxZQUFBOEMsd0JBQUE5QztBQUFBQSxJQVdEO0FBQUE7QUFBQTtBQUFBLGVBVXpCO0FBQUE7QUFBQSxZQUFBK0MsdUJBQUEvQztBQUFBQSxJQUV3Qix1Q0FHTDtBQUFBLElBRGU7QUFBQSxHQUNEO0FBQUEsWUFBQWdELGdCQUFBWDtBQUFBQSxRQUFBN0IsUUFTOUI7QUFBQSxJQUFtQyxZQUM3QjtBQUFBLFFBQUE4QixZQUQ2QixVQUFBMUMsTUFTckMsMEJBQUFBLElBQUc7QUFBQTtBQUFBLEtBSHFCO0FBQUEsY0FDWjtBQUFBO0FBQUEsY0FDUztBQUFBLE1BQWEsWUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNXLDZCQUVwQztBQUFBO0FBQUE7QUFBQSxZQUFBcUQsNkJBQUFDLE9BR2Isa0NBQTJCO0FBQUE7QUFBQSxZQUFBQyxxQkFBQTFCLElBV0MscUJBQWU7QUFBQSxZQUFBMkIsY0FBQXBEO0FBQUFBLElBV0UsT0FBc0Isd0JBQXRCLGtDQUFzQjtBQUFBO0FBQUEsWUFBQXFELGlCQUFBQztBQUFBQSxJQU1uRTtBQUFBO0FBQUEsTUFBQUMsZUFBbUI7QUFBQSxNQUFBQyxlQUNuQjtBQUFBLE1BQUFDO0FBQUFBLFFBQ2M7QUFBQSxVQUNkO0FBQUE7QUFBQTtBQUFBLEdBQXVDO0FBQUEsWUFBQUMsU0FBQS9ELEdBTXBDLHVDQUF1QztBQUFBLFlBQUFnRSxZQUFBaEUsT0FBQWtDLE9BRy9CLGFBQ2dCLGVBQU87QUFBQSxZQUFBK0IsY0FBQWpFLE9BQUFrQyxPQUd2QixhQUNnQixlQUFVO0FBQUE7QUFBQSxJQUFBZ0M7QUFBQUEsTUF6UlY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyw0QkRuQjdCO0FBQUEsSUFBQUMsOEJBQUE7QUFBQTtBQUFBLE1DbUI2QjtBQUFBO0FBQUE7QUFBQSxZQUFBQywrQkFBQUMsS0FBQTVCO0FBQUFBLFFBQUEsSUErU1c7QUFBQSxJQUF0QztBQUFBLElBQ0E7QUFBQSxRQUFBNkIsU0FDYTtBQUFBLElBQ2I7QUFBQTtBQUFBLFVBQ3dCO0FBQUEsVUFBUjtBQUFBLEtBQWQ7QUFBQTtBQUFBLElBQ0Ysd0NBQVk7QUFBQTtBQUFBLE9BQUFDLDZCQXBUZTtBQUFBLFlBQUFDLCtCQUFBZDtBQUFBQSxJQXdUVztBQUFBO0FBQUEsR0FBZ0M7QUFBQTtBQUFBLElBQUFlLGtCQXhUM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLDBCQUFBTCxPQUFBTTtBQUFBQSxJQStWM0I7QUFBQSxLQTVCQTtBQUFBO0FBQUEsT0FBQWxDO0FBQUFBLFNBQUEsb0NBTEU7QUFBQSxNQWNBLElBQUssaUNBQUE0QjtBQUFBQSxNQUNMO0FBQUE7QUFBQSxZQUNFO0FBQUE7QUFBQTtBQUFBLFlBQUFBO0FBQUFBO0FBQUFBLFFBQUFBLFFEaldOO0FBQUEsUUFBQTVCLGtCQ2lWSTtBQUFBLFlBbUJ3QztBQUFBLE9BQXRDO0FBQUEsT0FDQTtBQUFBLGVBRUU7QUFBQSxPQURGO0FBQUEsT0FFQTtBQUFBLGVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBNEI7QUFBQUEsVUFBQUEsTUR6V047QUFBQTtBQUFBO0FBQUE7QUFBQSxTQzRXUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBQUEsS0FVSjtBQUFBLEdBQUU7QUFBQSxHQU1KO0FBQUE7QUFBQTtBQUFBLElBQUFPO0FBQUFBLE1BQzJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ3WDdCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjQzMDksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZnVuLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBjb21wb3NlIGYgZyB4ID0gZiAoZyB4KVxubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGV4YyIsIlN0ZGxpYiIsImNvbnN0JCIsImMiLCJwYXJhbSIsImNvbXBvc2UiLCJnIiwieCIsImZsaXAiLCJ5IiwibmVnYXRlIiwicCIsInYiLCJGaW5hbGx5X3JhaXNlZCIsImV4biIsImR1bW15IiwicHJvdGVjdCIsImZpbmFsbHkkIiwid29yayIsImZpbmFsbHlfbm9fZXhuIiwiZSIsImJ0IiwicmVzdWx0Iiwid29ya19leG4iLCJ3b3JrX2J0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsT0FBQUMsR0FBQUMsT0NnQmdCLFNBQUM7QUFBQSxZQUFBQyxRQUFBVixHQUFBVyxHQUFBQyxHQUNLLE9BQUssY0FBTCxpQkFBSztBQUFBLFlBQUFDLEtBQUFiLEdBQUFZLEdBQUFFLEdBQ1YsMEJBQUs7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQyxHQUNELDJCQUFLO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRG5CMUI7QUFBQSxHQ3VCUztBQUFBO0FBQUEsY0FBQVQ7QUFBQUEsTUFBNkIsZ0NBRS9CO0FBQUEsVUFBQVUsTUFGK0IsY0FDaUI7QUFBQSxNQUExQiw0REFBaUQ7QUFBQSxLQUNuRTtBQUFBLE9BQUFDLFFBQUE7QUFBQSxZQUFBQyxRQUFBQyxVQUFBQztBQUFBQSxhQUFBQyxlQUFBZjtBQUFBQSxLQUlQLElBQUk7QUFBQSxXQUFBZ0I7QUFBQUE7QUFBQUEsT0FBQUEsSUQ3QlI7QUFBQSxPQUFBQyxLQzhCZTtBQUFBLE9BQUFQLE1BQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFtRDtBQUFBLElBRXZELFFBQUFRLFNBQU07QUFBQSxVQUFBQztBQUFBQTtBQUFBQSxNQUFBQSxXRGpDUjtBQUFBLE1BQUFDLFVDb0NvQjtBQUFBLEtBQ2Q7QUFBQSxLQUFpQjtBQUFBO0FBQUE7QUFBQSxJQUhUO0FBQUEsSUFBaUI7QUFBQSxHQUlxQjtBQUFBLEdBYnpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpCWCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0MzgwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2luX2NoYW5uZWwubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGluX2NoYW5uZWxcblxudHlwZSBvcGVuX2ZsYWcgPSBTdGRsaWIub3Blbl9mbGFnID1cbiAgfCBPcGVuX3Jkb25seVxuICB8IE9wZW5fd3Jvbmx5XG4gIHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0XG4gIHwgT3Blbl90cnVuY1xuICB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5XG4gIHwgT3Blbl90ZXh0XG4gIHwgT3Blbl9ub25ibG9ja1xuXG5sZXQgc3RkaW4gPSBTdGRsaWIuc3RkaW5cbmxldCBvcGVuX2JpbiA9IFN0ZGxpYi5vcGVuX2luX2JpblxubGV0IG9wZW5fdGV4dCA9IFN0ZGxpYi5vcGVuX2luXG5sZXQgb3Blbl9nZW4gPSBTdGRsaWIub3Blbl9pbl9nZW5cblxubGV0IHdpdGhfb3BlbiBvcGVuZnVuIHMgZiA9XG4gIGxldCBpYyA9IG9wZW5mdW4gcyBpblxuICBGdW4ucHJvdGVjdCB+ZmluYWxseTooZnVuICgpIC0+IFN0ZGxpYi5jbG9zZV9pbl9ub2VyciBpYylcbiAgICAoZnVuICgpIC0+IGYgaWMpXG5cbmxldCB3aXRoX29wZW5fYmluIHMgZiA9XG4gIHdpdGhfb3BlbiBTdGRsaWIub3Blbl9pbl9iaW4gcyBmXG5cbmxldCB3aXRoX29wZW5fdGV4dCBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW4gcyBmXG5cbmxldCB3aXRoX29wZW5fZ2VuIGZsYWdzIHBlcm0gcyBmID1cbiAgd2l0aF9vcGVuIChTdGRsaWIub3Blbl9pbl9nZW4gZmxhZ3MgcGVybSkgcyBmXG5cbmxldCBzZWVrID0gU3RkbGliLkxhcmdlRmlsZS5zZWVrX2luXG5sZXQgcG9zID0gU3RkbGliLkxhcmdlRmlsZS5wb3NfaW5cbmxldCBsZW5ndGggPSBTdGRsaWIuTGFyZ2VGaWxlLmluX2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2UgPSBTdGRsaWIuY2xvc2VfaW5cbmxldCBjbG9zZV9ub2VyciA9IFN0ZGxpYi5jbG9zZV9pbl9ub2VyclxuXG5sZXQgaW5wdXRfY2hhciBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9jaGFyIGljIHdpdGhcbiAgfCBjIC0+IFNvbWUgY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9ieXRlIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2J5dGUgaWMgd2l0aFxuICB8IG4gLT4gU29tZSBuXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0X2xpbmUgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgcyAtPiBTb21lIHNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXQgPSBTdGRsaWIuaW5wdXRcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0X2JpZ2FycmF5IDpcbiAgdCAtPiBfIEJpZ2FycmF5LkFycmF5MS50IC0+IGludCAtPiBpbnQgLT4gaW50XG4gID0gXCJjYW1sX21sX2lucHV0X2JpZ2FycmF5XCJcblxubGV0IGlucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dF9iaWdhcnJheVwiXG4gIGVsc2UgdW5zYWZlX2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgYnVmIHBvcyBsZW4gPVxuICBtYXRjaCBTdGRsaWIucmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuIHdpdGhcbiAgfCAoKSAtPiBTb21lICgpXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiBTb21lICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRfYmlnYXJyYXlcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXRfYmlnYXJyYXkgaWMgYnVmIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuIHdpdGhcbiAgfCBzIC0+IFNvbWUgc1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbigqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgaW50byBbYnVmXSwgc3RhcnRpbmcgYXQgW29mc10uIFJldHVybiB0b3RhbCBieXRlc1xuICAgcmVhZC4gKilcbmxldCByZWFkX3VwdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3Agb2ZzIGxlbiA9XG4gICAgaWYgbGVuID0gMCB0aGVuIG9mc1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gU3RkbGliLmlucHV0IGljIGJ1ZiBvZnMgbGVuIGluXG4gICAgICBpZiByID0gMCB0aGVuXG4gICAgICAgIG9mc1xuICAgICAgZWxzZVxuICAgICAgICBsb29wIChvZnMgKyByKSAobGVuIC0gcilcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBvZnMgbGVuIC0gb2ZzXG5cbigqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gcmV0dXJuIGEgYnVmZmVyIHdpdGggPj0gKG9mcyArIG4pIGJ5dGVzIG9mIHN0b3JhZ2UsXG4gICBhbmQgc3VjaCB0aGF0IGl0IGNvaW5jaWRlcyB3aXRoIFtidWZdIGF0IGluZGljZXMgPCBbb2ZzXS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBlcXVhbCB0byBbYnVmXSBpdHNlbGYgaWYgaXQgYWxyZWFkeSBoYXMgc3VmZmljaWVudFxuICAgZnJlZSBzcGFjZS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgaGF2ZSAqZmV3ZXIqIHRoYW4gW29mcyArIG5dIGJ5dGVzIG9mIHN0b3JhZ2UgaWYgdGhpc1xuICAgbnVtYmVyIGlzID4gW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0uIEhvd2V2ZXIgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsXG4gICAqYWx3YXlzKiBoYXZlID4gW29mc10gYnl0ZXMgb2Ygc3RvcmFnZS4gSW4gdGhlIGxpbWl0aW5nIGNhc2Ugd2hlbiBbb2ZzID0gbGVuXG4gICA9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIGF0XG4gICBhbGwpLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxuXG5sZXQgZW5zdXJlIGJ1ZiBvZnMgbiA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA+PSBvZnMgKyBuIHRoZW4gYnVmXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbmV3X2xlbiA9IHJlZiBsZW4gaW5cbiAgICB3aGlsZSAhbmV3X2xlbiA8IG9mcyArIG4gZG9cbiAgICAgIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuICsgMVxuICAgIGRvbmU7XG4gICAgbGV0IG5ld19sZW4gPSAhbmV3X2xlbiBpblxuICAgIGxldCBuZXdfbGVuID1cbiAgICAgIGlmIG5ld19sZW4gPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgbmV3X2xlblxuICAgICAgZWxzZSBpZiBvZnMgPCBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgZmFpbHdpdGggXCJJbl9jaGFubmVsLmlucHV0X2FsbDogY2hhbm5lbCBjb250ZW50IFxcXG4gICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN0cmluZyBsZW5ndGhcIlxuICAgIGluXG4gICAgbGV0IG5ld19idWYgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmIDAgbmV3X2J1ZiAwIG9mcztcbiAgICBuZXdfYnVmXG4gIGVuZFxuXG5sZXQgaW5wdXRfYWxsIGljID1cbiAgbGV0IGNodW5rX3NpemUgPSA2NTUzNiBpbiAoKiBJT19CVUZGRVJfU0laRSAqKVxuICBsZXQgaW5pdGlhbF9zaXplID1cbiAgICB0cnlcbiAgICAgIFN0ZGxpYi5pbl9jaGFubmVsX2xlbmd0aCBpYyAtIFN0ZGxpYi5wb3NfaW4gaWNcbiAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAtMVxuICBpblxuICBsZXQgaW5pdGlhbF9zaXplID0gaWYgaW5pdGlhbF9zaXplIDwgMCB0aGVuIGNodW5rX3NpemUgZWxzZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgaWYgaW5pdGlhbF9zaXplIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICBpbml0aWFsX3NpemVcbiAgICBlbHNlXG4gICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IG5yZWFkID0gcmVhZF91cHRvIGljIGJ1ZiAwIGluaXRpYWxfc2l6ZSBpblxuICBpZiBucmVhZCA8IGluaXRpYWxfc2l6ZSB0aGVuICgqIEVPRiByZWFjaGVkLCBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCAqKVxuICAgIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmIDAgbnJlYWRcbiAgZWxzZSBiZWdpbiAoKiBucmVhZCA9IGluaXRpYWxfc2l6ZSwgbWF5YmUgRU9GIHJlYWNoZWQgKilcbiAgICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gICAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT5cbiAgICAgICAgKCogRU9GIHJlYWNoZWQsIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZpbGxlZCAqKVxuICAgICAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICAgIHwgYyAtPlxuICAgICAgICAoKiBFT0Ygbm90IHJlYWNoZWQgKilcbiAgICAgICAgbGV0IHJlYyBsb29wIGJ1ZiBvZnMgPVxuICAgICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG9mcyBjaHVua19zaXplIGluXG4gICAgICAgICAgbGV0IHJlbSA9IEJ5dGVzLmxlbmd0aCBidWYgLSBvZnMgaW5cbiAgICAgICAgICAoKiBbcmVtXSBjYW4gYmUgPCBbY2h1bmtfc2l6ZV0gaWYgYnVmZmVyIHNpemUgY2xvc2UgdG9cbiAgICAgICAgICAgICBbU3lzLm1heF9zdHJpbmdfbGVuZ3RoXSAqKVxuICAgICAgICAgIGxldCByID0gcmVhZF91cHRvIGljIGJ1ZiBvZnMgcmVtIGluXG4gICAgICAgICAgaWYgciA8IHJlbSB0aGVuICgqIEVPRiByZWFjaGVkICopXG4gICAgICAgICAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIChvZnMgKyByKVxuICAgICAgICAgIGVsc2UgKCogciA9IHJlbSAqKVxuICAgICAgICAgICAgbG9vcCBidWYgKG9mcyArIHJlbSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IGVuc3VyZSBidWYgbnJlYWQgKGNodW5rX3NpemUgKyAxKSBpblxuICAgICAgICBCeXRlcy5zZXQgYnVmIG5yZWFkIGM7XG4gICAgICAgIGxvb3AgYnVmIChucmVhZCArIDEpXG4gIGVuZFxuXG5sZXQgW0B0YWlsX21vZF9jb25zXSByZWMgaW5wdXRfbGluZXMgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBsaW5lIDo6IGlucHV0X2xpbmVzIGljXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IFtdXG5cbmxldCByZWMgZm9sZF9saW5lcyBmIGFjY3UgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBmb2xkX2xpbmVzIGYgKGYgYWNjdSBsaW5lKSBpY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBhY2N1XG5cbmxldCBzZXRfYmluYXJ5X21vZGUgPSBTdGRsaWIuc2V0X2JpbmFyeV9tb2RlX2luXG5cbmV4dGVybmFsIGlzX2JpbmFyeV9tb2RlIDogaW5fY2hhbm5lbCAtPiBib29sID0gXCJjYW1sX21sX2lzX2JpbmFyeV9tb2RlXCJcblxuZXh0ZXJuYWwgaXNhdHR5IDogdCAtPiBib29sID0gXCJjYW1sX3N5c19pc2F0dHlcIlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2RpbV8xIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfaW5wdXRfYmlnYXJyYXkiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9GdW4iLCJzdGRpbiIsIm9wZW5fYmluIiwib3Blbl90ZXh0Iiwib3Blbl9nZW4iLCJ3aXRoX29wZW4iLCJvcGVuZnVuIiwicyIsImljIiwicGFyYW0iLCJ3aXRoX29wZW5fYmluIiwid2l0aF9vcGVuX3RleHQiLCJ3aXRoX29wZW5fZ2VuIiwiZmxhZ3MiLCJwZXJtIiwic2VlayIsInBvcyIsImxlbmd0aCIsImNsb3NlIiwiY2xvc2Vfbm9lcnIiLCJpbnB1dF9jaGFyIiwiYyIsImV4biIsImlucHV0X2J5dGUiLCJuIiwiaW5wdXRfbGluZSIsImlucHV0IiwiaW5wdXRfYmlnYXJyYXkiLCJidWYiLCJvZnMiLCJsZW4iLCJyZWFsbHlfaW5wdXQiLCJyZWFsbHlfaW5wdXRfYmlnYXJyYXkiLCJyIiwicmVhbGx5X2lucHV0X3N0cmluZyIsInJlYWRfdXB0byIsImVuc3VyZSIsIm5ld19sZW4iLCJuZXdfYnVmIiwiaW5wdXRfYWxsIiwiaW5pdGlhbF9zaXplIiwiY2h1bmtfc2l6ZSIsIm5yZWFkIiwicmVtIiwiaW5wdXRfbGluZXMiLCJsaW5lIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJmb2xkX2xpbmVzIiwiYWNjdSIsInNldF9iaW5hcnlfbW9kZSIsIlN0ZGxpYl9Jbl9jaGFubmVsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxZQUFBQyxVQUFBQyxTQUFBQyxHQUFBZjtBQUFBQSxRQUFBZ0IsS0NrQ1c7QUFBQSxJQUNUO0FBQUE7QUFBQSxzQkFBQUMsT0FBZ0MsZ0NBQXdCO0FBQUEsc0JBQUFBLE9BQzNDLHdCQUFJLEdBQUM7QUFBQTtBQUFBLFlBQUFDLGNBQUFILEdBQUFmLEdBR2xCLGtDQUFnQztBQUFBLFlBQUFtQixlQUFBSixH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QUFBQSxJQUNaO0FBQUEsS0FDRSxnREFzQkM7QUFBQSxJQXZCSCxRQUFBckIsSUFHUTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLFFENUtWO0FBQUEsOEJDK0tRLHVDQWlCSDtBQUFBLEtEaE1MO0FBQUE7QUFBQSxRQUFBTSxRQzZMa0I7QUFBQSxJQUNWO0FBQUEsUUFBQUMsUUFBcUIsZUFBQUQsUUFBQSxPQUFBQyxNQUFBO0FBQUE7QUFBQTtBQUFBLE1BQUFELFFBWFQ7QUFBQSxNQUFBZSxNQUNWO0FBQUEsTUFBQVYsSUFHUTtBQUFBLEtBQ1IsWUFDRSx3REFPUDtBQUFBLFNBQUFKLFFBTE87QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtQO0FBQUEsWUFBQWUsWUFBQXBDO0FBQUFBLElBR0gsUUFBQXFDLE9BQU07QUFBQSxVQUFBdkI7QUFBQUEsU0FBQUEsTURuTVI7QUFBQSw0QkNxTTZCO0FBQUEsS0RyTTdCO0FBQUE7QUFBQSxRQUFBd0IsUUNvTVksa0JBQUFDLE1BQVEsT0FBQUMsU0FBQTtBQUFBO0FBQUEsS0FEbEIsUUFBQUgsU0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxRRG5NUjtBQUFBO0FBQUEsTUNxTTZCO0FBQUEsTUFESztBQUFBO0FBQUEsU0FBQXlCLFFBQXRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUNtQjtBQUFBLFlBQUFFLFdBQUF6RCxHQUFBMEQsUUFBQTFDO0FBQUFBLFFBQUEwQyxPQUc3QjtBQUFBO0FBQUEsYUFBQUwsT0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxNRHhNUjtBQUFBLDZCQzBNNkI7QUFBQSxNRDFNN0I7QUFBQTtBQUFBLFNBQUE0QixTQ3lNeUI7QUFBQSxLQUFhO0FBQUE7QUFBQSxHQUNMO0FBQUE7QUFBQSxJQUFBQyxrQkQxTWpDO0FBQUEsSUFBQUM7QUFBQUEsTUFBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0NjQ3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2RpZ2VzdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVXRpbGl0eSBmdW5jdGlvbnMgKilcblxubGV0IGhleF9vZl9zdHJpbmcgZCA9XG4gIGxldCBjaGFyX2hleCBuID1cbiAgICBDaGFyLmNociAoaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyArIG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgQ2hhci5jb2RlICdhJyArIG4gLSAxMCkgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggZCBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIChsZW4gKiAyKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBzdHJpbmdfb2ZfaGV4IHMgPVxuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5vZl9oZXhcIiBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIFN0cmluZy5pbml0IChTdHJpbmcubGVuZ3RoIHMgLyAyKSAoZnVuIGkgLT4gQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpXG5cbigqIEdlbmVyaWMgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSB0ID0gc3RyaW5nXG4gIHZhbCBoYXNoX2xlbmd0aCA6IGludFxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHN0cmluZyA6IHN0cmluZyAtPiB0XG4gIHZhbCBieXRlcyA6IGJ5dGVzIC0+IHRcbiAgdmFsIHN1YnN0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgdmFsIHN1YmJ5dGVzIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB0XG4gIHZhbCBjaGFubmVsIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdFxuICB2YWwgZmlsZSA6IHN0cmluZyAtPiB0XG4gIHZhbCBvdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiB0IC0+IHVuaXRcbiAgdmFsIGlucHV0IDogaW5fY2hhbm5lbCAtPiB0XG4gIHZhbCB0b19oZXggOiB0IC0+IHN0cmluZ1xuICB2YWwgb2ZfaGV4IDogc3RyaW5nIC0+IHRcbmVuZFxuXG4oKiBCTEFLRTIgaGFzaGluZywgcGFyYW1ldGVyaXplZCBieSBoYXNoIHNpemUgKilcblxubW9kdWxlIEJMQUtFMiAoWDogc2lnIHZhbCBoYXNoX2xlbmd0aCA6IGludCBlbmQpIDogUyA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBoYXNoX2xlbmd0aCA9XG4gICAgaWYgWC5oYXNoX2xlbmd0aCA8IDEgfHwgWC5oYXNoX2xlbmd0aCA+IDY0XG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5CTEFLRTI6IHdyb25nIGhhc2ggc2l6ZVwiO1xuICAgIFguaGFzaF9sZW5ndGhcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIHR5cGUgc3RhdGVcblxuICBleHRlcm5hbCBjcmVhdGVfZ2VuOiBpbnQgLT4gc3RyaW5nIC0+IHN0YXRlID0gXCJjYW1sX2JsYWtlMl9jcmVhdGVcIlxuICBleHRlcm5hbCB1cGRhdGU6IHN0YXRlIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYmxha2UyX3VwZGF0ZVwiXG4gIGV4dGVybmFsIGZpbmFsOiBzdGF0ZSAtPiBpbnQgLT4gdCA9IFwiY2FtbF9ibGFrZTJfZmluYWxcIlxuICBleHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBpbnQgLT4gc3RyaW5nIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsYWtlMl9zdHJpbmdcIlxuXG4gIGxldCBjcmVhdGUgKCkgPSBjcmVhdGVfZ2VuIGhhc2hfbGVuZ3RoIFwiXCJcblxuICBsZXQgc3RyaW5nIHN0ciA9XG4gICAgdW5zYWZlX3N0cmluZyBoYXNoX2xlbmd0aCBcIlwiIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9XG4gICAgc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbiAgbGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIjtcbiAgICB1bnNhZmVfc3RyaW5nIGhhc2hfbGVuZ3RoIFwiXCIgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID1cbiAgICBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG4gIGxldCBjaGFubmVsIGljIHRvcmVhZCA9XG4gICAgbGV0IGJ1Zl9zaXplID0gNDA5NiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgYnVmX3NpemUgaW5cbiAgICBsZXQgY3R4ID0gY3JlYXRlICgpIGluXG4gICAgaWYgdG9yZWFkIDwgMCB0aGVuIGJlZ2luXG4gICAgICBsZXQgcmVjIGRvX3JlYWQgKCkgPVxuICAgICAgICBsZXQgbiA9IEluX2NoYW5uZWwuaW5wdXQgaWMgYnVmIDAgYnVmX3NpemUgaW5cbiAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGhcbiAgICAgICAgZWxzZSAodXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjsgZG9fcmVhZCAoKSlcbiAgICAgIGluIGRvX3JlYWQgKClcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBkb19yZWFkIHRvcmVhZCA9XG4gICAgICAgIGlmIHRvcmVhZCA9IDAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGggZWxzZSBiZWdpblxuICAgICAgICAgIGxldCBuID0gSW5fY2hhbm5lbC5pbnB1dCBpYyBidWYgMCAoSW50Lm1pbiBidWZfc2l6ZSB0b3JlYWQpIGluXG4gICAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgdXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjtcbiAgICAgICAgICAgIGRvX3JlYWQgKHRvcmVhZCAtIG4pXG4gICAgICAgICAgZW5kXG4gICAgICAgIGVuZFxuICAgICAgaW4gZG9fcmVhZCB0b3JlYWRcbiAgICBlbmRcblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gaGFzaF9sZW5ndGhcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiBoYXNoX2xlbmd0aCB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IGhhc2hfbGVuZ3RoICogMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0Lm9mX2hleFwiO1xuICAgIHN0cmluZ19vZl9oZXggc1xuXG5lbmRcblxubW9kdWxlIEJMQUtFMTI4ID0gQkxBS0UyKHN0cnVjdCBsZXQgaGFzaF9sZW5ndGggPSAxNiBlbmQpXG5tb2R1bGUgQkxBS0UyNTYgPSBCTEFLRTIoc3RydWN0IGxldCBoYXNoX2xlbmd0aCA9IDMyIGVuZClcbm1vZHVsZSBCTEFLRTUxMiA9IEJMQUtFMihzdHJ1Y3QgbGV0IGhhc2hfbGVuZ3RoID0gNjQgZW5kKVxuXG4oKiBNRDUgaGFzaGluZyAqKVxuXG5tb2R1bGUgTUQ1ID0gc3RydWN0XG5cbiAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgbGV0IGhhc2hfbGVuZ3RoID0gMTZcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIGV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG4gIGV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG4gIGxldCBzdHJpbmcgc3RyID1cbiAgICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG4gIGxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgICBzdHJpbmdfb2ZfaGV4IHNcblxuZW5kXG5cbigqIERlZmF1bHQgZXhwb3J0ZWQgaW1wbGVtZW50YXRpb24gaXMgTUQ1ICopXG5cbmluY2x1ZGUgTUQ1XG5cbmxldCBmcm9tX2hleCA9IG9mX2hleFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JsYWtlMl9maW5hbCIsImNhbWxfYmxha2UyX3N0cmluZyIsImNhbWxfYmxha2UyX3VwZGF0ZSIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tZDVfY2hhbiIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0luX2NoYW5uZWwiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiaGV4X29mX3N0cmluZyIsImQiLCJjaGFyX2hleCIsIm4iLCJsZW4iLCJyZXN1bHQiLCJpIiwieCIsImNzdF9EaWdlc3Rfb2ZfaGV4Iiwic3RyaW5nX29mX2hleCIsInMiLCJkaWdpdCIsImMiLCJjc3RfRGlnZXN0X3N1YnN0cmluZyIsImNzdF9EaWdlc3RfdG9faGV4IiwiQkxBS0UyIiwiWCIsImhhc2hfbGVuZ3RoIiwiY29tcGFyZSIsImVxdWFsIiwiY3N0Iiwic3RyaW5nIiwic3RyIiwiYnl0ZXMiLCJiIiwic3Vic3RyaW5nIiwib2ZzIiwic3ViYnl0ZXMiLCJjaGFubmVsIiwiaWMiLCJ0b3JlYWQiLCJidWYiLCJjdHgiLCJidWZfc2l6ZSIsImZpbGUiLCJmaWxlbmFtZSIsIm91dHB1dCIsImNoYW4iLCJkaWdlc3QiLCJpbnB1dCIsInRvX2hleCIsIm9mX2hleCIsIkJMQUtFMTI4IiwiQkxBS0UyNTYiLCJCTEFLRTUxMiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLFlBQUFDLGNBQUFDO0FBQUFBLGFBQUFDLFNBQUFDO0FBQUFBLFNBQUEsSUNtQkk7QUFBQSx3Q0FDZ0Q7QUFBQTtBQUFBO0FBQUEsS0FBQUMsTUFDbEQ7QUFBQSxLQUFBQyxTQUNhO0FBQUEsU0FDYjtBQUFBO0FBQUEsU0FBQUMsSUFBQTtBQUFBO0FBQUEsVUFBQUMsSUFDb0I7QUFBQSxNQUNnQyx5Q0FBcEI7QUFBQSxNQUMwQixtREFBeEI7QUFBQSxjQUF3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFMUQsMENBQTZCO0FBQUE7QUFBQSxPQUFBQyxvQkQ1Qi9CO0FBQUEsWUFBQUMsY0FBQUM7QUFBQUEsYUFBQUMsTUFBQUM7QUFBQUEsS0NnQ0k7QUFBQTtBQUFBLG1CQUdjO0FBQUE7QUFBQSxzQkFEQTtBQUFBO0FBQUEsZ0NBREE7QUFBQSxLQUdQLDhDQUEyQjtBQUFBO0FBQUEsSUFFcEM7QUFBQTtBQUFBO0FBQUEsc0JBQUFOO0FBQUFBO0FBQUFBLGVBQUFBLE1BQTRDO0FBQUEsbUJBRFgsTUFBTTtBQUFBLG1CQUFwQixDQUFOLE1BQU07QUFBQSxjQUNnRDtBQUFBLGVBQUM7QUFBQTtBQUFBO0FBQUEsSUFBQU8sdUJEdEN0RTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsWUFBQUMsT0FBQUM7QUFBQUEsUUFBQTtBQUFBLFVDbUVTO0FBQUE7QUFBQSxLQUFBQyxjQUNMO0FBQUEsS0FBQUMsVUFBQTtBQUFBLEtBQUFDLFFBQUE7QUFBQSxLQUFBQyxNRHBFSjtBQUFBLGFBQUFDLE9BQUFDO0FBQUFBLEtDb0ZJO0FBQUEsbUVBQXNEO0FBQUE7QUFBQSxhQUFBQyxNQUFBQyxHQUcvQyxPQUEwQixPQUExQiwrQkFBMEI7QUFBQSxhQUFBQyxVQUFBSCxLQUFBSSxLQUFBdEI7QUFBQUEsU0FBQSxJQUdqQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FDSztBQUFBLEtBQ0wsMERBQXdDO0FBQUE7QUFBQSxhQUFBdUIsU0FBQUgsR0FBQUUsS0FBQXRCO0FBQUFBLEtBRzlCLE9BQTBCLFVBQTFCLHlDQUFrQztBQUFBO0FBQUEsYUFBQXdCLFFBQUFDLElBQUFDO0FBQUFBO0FBQUFBLE1BQUFDLE1BSWxDO0FBQUEsTUFBQUMsTUFsQkk7QUFBQSxNQUFBQyxXQWlCZDtBQUFBLEtBR0E7QUFBQSxVQUFBSCxXQUFBO0FBQUE7QUFBQSxPQVNJLG1CQUFtQiwwQ0FVcEI7QUFBQTtBQUFBLFlBVHFDO0FBQUEsUUFBQTNCLElBQTFCO0FBQUEsT0FDUixZQUNLO0FBQUEsT0FFSCx3QkFBVztBQUFBLFdBQUEyQixXQUFnQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFkbkQ7QUFBQSxXQUFBM0IsTUFFWTtBQUFBLE9BQ1IsY0FDSywwQ0FlTjtBQUFBLE9BZE8sd0JBQVc7QUFBQTtBQUFBLElBY2xCO0FBQUEsYUFBQStCLEtBQUFDO0FBQUFBLEtBR0g7QUFBQSx1Q0FBQU4sSUFBNkMsc0JBQWUsR0FBQztBQUFBO0FBQUEsYUFBQU8sT0FBQUMsTUFBQUMsUUFFdEMsMENBQXlCO0FBQUEsYUFBQUMsTUFBQUYsTUFFakMsK0NBQW9DO0FBQUEsYUFBQUcsT0FBQXZDO0FBQUFBLEtBR25EO0FBQUEsTUFBdUM7QUFBQSxLQUN2Qyx1QkFBZTtBQUFBO0FBQUEsYUFBQXdDLE9BQUEvQjtBQUFBQSxLQUdmO0FBQUEsTUFBMkM7QUFBQSxLQUMzQyx1QkFBZTtBQUFBO0FBQUEsSUFuRWY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBZ0MsV0RwRUo7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUExQixVQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFFLE9BQUFDO0FBQUFBLElDOEpJLDBEQUF1QztBQUFBO0FBQUEsWUFBQUMsTUFBQUMsR0FFcEIsT0FBMEIsT0FBMUIsK0JBQTBCO0FBQUEsWUFBQUMsVUFBQUgsS0FBQUksS0FBQXRCO0FBQUFBLElBRzdDO0FBQUEsS0FFSyxxQ0FBeUI7QUFBQSxJQUR6QixpREFDeUI7QUFBQTtBQUFBLFlBQUF1QixTQUFBSCxHQUFBRSxLQUFBdEI7QUFBQUEsSUFFRyxPQUEwQixVQUExQix5Q0FBa0M7QUFBQTtBQUFBLFlBQUE4QixLQUFBQztBQUFBQSxJQUduRTtBQUFBLHNDQUFBTixJQUE2Qyw0QkFBZSxHQUFDO0FBQUE7QUFBQSxZQUFBTyxPQUFBQyxNQUFBQyxRQUV0QywwQ0FBeUI7QUFBQSxZQUFBQyxNQUFBRixNQUVqQyxzQ0FBMkI7QUFBQSxZQUFBRyxPQUFBdkM7QUFBQUEsSUFHMUM7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxZQUFBd0MsT0FBQS9CO0FBQUFBLElBR2Y7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxHRHRMbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNDg3MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9iaWdhcnJheS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBNYW51ZWwgU2VycmFubyBldCBYYXZpZXIgTGVyb3ksIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtCaWdhcnJheV06IGxhcmdlLCBtdWx0aS1kaW1lbnNpb25hbCwgbnVtZXJpY2FsIGFycmF5cyAqKVxuXG4oKiBUaGVzZSB0eXBlcyBpbiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0YWJsZXMgaW5cbiAgIC4uL3R5cGluZy90eXBlb3B0Lm1sICopXG5cbnR5cGUgZmxvYXQxNl9lbHQgPSBGbG9hdDE2X2VsdFxudHlwZSBmbG9hdDMyX2VsdCA9IEZsb2F0MzJfZWx0XG50eXBlIGZsb2F0NjRfZWx0ID0gRmxvYXQ2NF9lbHRcbnR5cGUgaW50OF9zaWduZWRfZWx0ID0gSW50OF9zaWduZWRfZWx0XG50eXBlIGludDhfdW5zaWduZWRfZWx0ID0gSW50OF91bnNpZ25lZF9lbHRcbnR5cGUgaW50MTZfc2lnbmVkX2VsdCA9IEludDE2X3NpZ25lZF9lbHRcbnR5cGUgaW50MTZfdW5zaWduZWRfZWx0ID0gSW50MTZfdW5zaWduZWRfZWx0XG50eXBlIGludDMyX2VsdCA9IEludDMyX2VsdFxudHlwZSBpbnQ2NF9lbHQgPSBJbnQ2NF9lbHRcbnR5cGUgaW50X2VsdCA9IEludF9lbHRcbnR5cGUgbmF0aXZlaW50X2VsdCA9IE5hdGl2ZWludF9lbHRcbnR5cGUgY29tcGxleDMyX2VsdCA9IENvbXBsZXgzMl9lbHRcbnR5cGUgY29tcGxleDY0X2VsdCA9IENvbXBsZXg2NF9lbHRcblxuKCogS2VlcCB0aGUgb3JkZXIgb2YgdGhlc2UgY29uc3RydWN0b3JzIGluIHN5bmMgd2l0aCB0aGUgY2FtbF9iYV9raW5kXG4gICBlbnVtZXJhdGlvbiBpbiBiaWdhcnJheS5oICopXG5cbnR5cGUgKCdhLCAnYikga2luZCA9XG4gIHwgRmxvYXQzMiA6IChmbG9hdCwgZmxvYXQzMl9lbHQpIGtpbmRcbiAgfCBGbG9hdDY0IDogKGZsb2F0LCBmbG9hdDY0X2VsdCkga2luZFxuICB8IEludDhfc2lnbmVkIDogKGludCwgaW50OF9zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50OF91bnNpZ25lZCA6IChpbnQsIGludDhfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MTZfc2lnbmVkIDogKGludCwgaW50MTZfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3Vuc2lnbmVkIDogKGludCwgaW50MTZfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MzIgOiAoaW50MzIsIGludDMyX2VsdCkga2luZFxuICB8IEludDY0IDogKGludDY0LCBpbnQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQgOiAoaW50LCBpbnRfZWx0KSBraW5kXG4gIHwgTmF0aXZlaW50IDogKG5hdGl2ZWludCwgbmF0aXZlaW50X2VsdCkga2luZFxuICB8IENvbXBsZXgzMiA6IChDb21wbGV4LnQsIGNvbXBsZXgzMl9lbHQpIGtpbmRcbiAgfCBDb21wbGV4NjQgOiAoQ29tcGxleC50LCBjb21wbGV4NjRfZWx0KSBraW5kXG4gIHwgQ2hhciA6IChjaGFyLCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEZsb2F0MTYgOiAoZmxvYXQsIGZsb2F0MTZfZWx0KSBraW5kXG5cbnR5cGUgY19sYXlvdXQgPSBDX2xheW91dF90eXBcbnR5cGUgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dF90eXAgKCoqKVxuXG50eXBlICdhIGxheW91dCA9XG4gICAgQ19sYXlvdXQ6IGNfbGF5b3V0IGxheW91dFxuICB8IEZvcnRyYW5fbGF5b3V0OiBmb3J0cmFuX2xheW91dCBsYXlvdXRcblxubGV0IGZsb2F0MTYgPSBGbG9hdDE2XG5sZXQgZmxvYXQzMiA9IEZsb2F0MzJcbmxldCBmbG9hdDY0ID0gRmxvYXQ2NFxubGV0IGludDhfc2lnbmVkID0gSW50OF9zaWduZWRcbmxldCBpbnQ4X3Vuc2lnbmVkID0gSW50OF91bnNpZ25lZFxubGV0IGludDE2X3NpZ25lZCA9IEludDE2X3NpZ25lZFxubGV0IGludDE2X3Vuc2lnbmVkID0gSW50MTZfdW5zaWduZWRcbmxldCBpbnQzMiA9IEludDMyXG5sZXQgaW50NjQgPSBJbnQ2NFxubGV0IGludCA9IEludFxubGV0IG5hdGl2ZWludCA9IE5hdGl2ZWludFxubGV0IGNvbXBsZXgzMiA9IENvbXBsZXgzMlxubGV0IGNvbXBsZXg2NCA9IENvbXBsZXg2NFxubGV0IGNoYXIgPSBDaGFyXG5cbmxldCBraW5kX3NpemVfaW5fYnl0ZXMgOiB0eXBlIGEgYi4gKGEsIGIpIGtpbmQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBGbG9hdDE2IC0+IDJcbiAgfCBGbG9hdDMyIC0+IDRcbiAgfCBGbG9hdDY0IC0+IDhcbiAgfCBJbnQ4X3NpZ25lZCAtPiAxXG4gIHwgSW50OF91bnNpZ25lZCAtPiAxXG4gIHwgSW50MTZfc2lnbmVkIC0+IDJcbiAgfCBJbnQxNl91bnNpZ25lZCAtPiAyXG4gIHwgSW50MzIgLT4gNFxuICB8IEludDY0IC0+IDhcbiAgfCBJbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBOYXRpdmVpbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBDb21wbGV4MzIgLT4gOFxuICB8IENvbXBsZXg2NCAtPiAxNlxuICB8IENoYXIgLT4gMVxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfbGF5b3V0IGVudW1lcmF0aW9uXG4gICBpbiBiaWdhcnJheS5oICopXG5cbmxldCBjX2xheW91dCA9IENfbGF5b3V0XG5sZXQgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dFxuXG5tb2R1bGUgR2VuYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdFxuICBleHRlcm5hbCBjcmVhdGU6ICgnYSwgJ2IpIGtpbmQgLT4gJ2MgbGF5b3V0IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgdFxuICAgICA9IFwiY2FtbF9iYV9jcmVhdGVcIlxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYVxuICAgICA9IFwiY2FtbF9iYV9nZXRfZ2VuZXJpY1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IGFycmF5IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfc2V0X2dlbmVyaWNcIlxuXG4gIGxldCByZWMgY2xvb3AgYXJyIGlkeCBmIGNvbCBtYXggPVxuICAgIGlmIGNvbCA9IEFycmF5Lmxlbmd0aCBpZHggdGhlbiBzZXQgYXJyIGlkeCAoZiBpZHgpXG4gICAgZWxzZSBmb3IgaiA9IDAgdG8gcHJlZCBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGNsb29wIGFyciBpZHggZiAoc3VjYyBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgcmVjIGZsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPCAwIHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAxIHRvIG1heC4oY29sKSBkb1xuICAgICAgICAgICBpZHguKGNvbCkgPC0gajtcbiAgICAgICAgICAgZmxvb3AgYXJyIGlkeCBmIChwcmVkIGNvbCkgbWF4XG4gICAgICAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW1zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltcyBpblxuICAgIGxldCBkbGVuID0gQXJyYXkubGVuZ3RoIGRpbXMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY2xvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMCkgZiAwIGRpbXM7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZmxvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMSkgZiAocHJlZCBkbGVuKSBkaW1zOyBhcnJcblxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuICBsZXQgaW5pdCA9IG9mX3ZhbHVlXG5lbmRcblxubW9kdWxlIEFycmF5MSA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbXxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMVwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzFcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8xXCJcbiAgZXh0ZXJuYWwgZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltIGFycilcblxuICBleHRlcm5hbCBzdWI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgJ2MpIHQgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlICh0eXBlIHQpIChhIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpIG4gPVxuICAgIG1hdGNoIGxheW91dCBhIHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF0gOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMSB0byBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0gZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0gZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCAoQXJyYXkubGVuZ3RoIGRhdGEpIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZGF0YSAtIDEgZG8gdW5zYWZlX3NldCBiYSAoaSArIG9mcykgZGF0YS4oaSkgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTIgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMlwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8yXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnQgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodCBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5Mi5vZl9hcnJheTogbm9uLXJlY3Rhbmd1bGFyIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIHJvdy4oailcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MyA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMjsgZGltM3xdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8zXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV9zZXRfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzNcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzNcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGRpbTM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzNcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpICogKGRpbTMgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9yaWdodF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfbGVmdF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgZm9yIGsgPSAwIHRvIHByZWQgZGltMyBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgayA9IDEgdG8gZGltMyBkb1xuICAgICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgZGltMyA9IGlmIGRpbTIgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICBsZXQgY29sID0gcm93LihqKSBpblxuICAgICAgICBpZiBBcnJheS5sZW5ndGggY29sIDw+IGRpbTMgdGhlblxuICAgICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgICAgZm9yIGsgPSAwIHRvIGRpbTMgLSAxIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIChrICsgb2ZzKSBjb2wuKGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkwOiAoJ2EsICdiLCAnYykgQXJyYXkwLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkxOiAoJ2EsICdiLCAnYykgQXJyYXkxLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkyOiAoJ2EsICdiLCAnYykgQXJyYXkyLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkzOiAoJ2EsICdiLCAnYykgQXJyYXkzLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxubGV0IGFycmF5MF9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDAgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTBfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5MV9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDEgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTFfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5Ml9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDIgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTJfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5M19vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDMgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTNfb2ZfZ2VuYXJyYXlcIlxuXG5leHRlcm5hbCByZXNoYXBlOlxuICAgKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnQgLT4gaW50IGFycmF5IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiY2FtbF9iYV9yZXNoYXBlXCJcbmxldCByZXNoYXBlXzAgYSA9IHJlc2hhcGUgYSBbfHxdXG5sZXQgcmVzaGFwZV8xIGEgZGltMSA9IHJlc2hhcGUgYSBbfGRpbTF8XVxubGV0IHJlc2hhcGVfMiBhIGRpbTEgZGltMiA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMnxdXG5sZXQgcmVzaGFwZV8zIGEgZGltMSBkaW0yIGRpbTMgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTI7ZGltM3xdXG5cbigqIEZvcmNlIGNhbWxfYmFfZ2V0X3sxLDIsMyxOfSB0byBiZSBsaW5rZWQgaW4sIHNpbmNlIHdlIGRvbid0IHJlZmVyXG4gICB0byB0aG9zZSBwcmltaXRpdmVzIGRpcmVjdGx5IGluIHRoaXMgZmlsZSAqKVxuXG5sZXQgXyA9XG4gIGxldCBfID0gR2VuYXJyYXkuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkxLmdldCBpblxuICBsZXQgXyA9IEFycmF5Mi5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTMuZ2V0IGluXG4gICgpXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5leHRlcm5hbCBnZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzFcIlxuZXh0ZXJuYWwgZ2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8yXCJcbmV4dGVybmFsIGdldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfM1wiXG5leHRlcm5hbCBzZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzFcIlxuZXh0ZXJuYWwgc2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8yXCJcbmV4dGVybmFsIHNldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfM1wiXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmFfY2hhbmdlX2xheW91dCIsImNhbWxfYmFfY3JlYXRlIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfYmFfZGltXzIiLCJjYW1sX2JhX2tpbmQiLCJjYW1sX2JhX251bV9kaW1zIiwiY2FtbF9iYV9yZXNoYXBlIiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYmFfc2V0XzIiLCJjYW1sX2JhX3NldF8zIiwiY2FtbF9iYV9zZXRfZ2VuZXJpYyIsImNhbWxfYmFfc2xpY2UiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX211bCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N5cyIsImtpbmRfc2l6ZV9pbl9ieXRlcyIsInBhcmFtIiwiY2xvb3AiLCJhcnIiLCJpZHgiLCJjb2wiLCJtYXgiLCJqIiwiZmxvb3AiLCJpbml0Iiwia2luZCIsImxheW91dCIsImRpbXMiLCJkbGVuIiwiYSIsIm4iLCJkIiwiaSIsInNpemVfaW5fYnl0ZXMiLCJjcmVhdGUiLCJnZXQiLCJzZXQiLCJvZl92YWx1ZSIsInYiLCJkaW0iLCJzbGljZSIsIm9mX2FycmF5IiwiZGF0YSIsImJhIiwib2ZzIiwiZGltMSIsImRpbTIiLCJzbGljZV9sZWZ0Iiwic2xpY2VfcmlnaHQiLCJyb3ciLCJkaW0zIiwic2xpY2VfbGVmdF8xIiwibSIsInNsaWNlX3JpZ2h0XzEiLCJzbGljZV9sZWZ0XzIiLCJzbGljZV9yaWdodF8yIiwiayIsImNzdF9CaWdhcnJheV9BcnJheTNfb2ZfYXJyYXlfbiIsImFycmF5MF9vZl9nZW5hcnJheSIsImFycmF5MV9vZl9nZW5hcnJheSIsImFycmF5Ml9vZl9nZW5hcnJheSIsImFycmF5M19vZl9nZW5hcnJheSIsInJlc2hhcGVfMCIsInJlc2hhcGVfMSIsInJlc2hhcGVfMiIsInJlc2hhcGVfMyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxtQkFB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QUE7QUFBQSxJQVNGO0FBQUEsR0FBRTtBQUFBLFlBQUFFLG1CQUFBN0I7QUFBQUEsSUFZRDtBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUE4QixtQkFBQTlCO0FBQUFBLElBRTNDO0FBQUE7QUFBQSxjQUNFLG1EQUF5QztBQUFBO0FBQUEsWUFBQStCLG1CQUFBL0I7QUFBQUEsSUFFM0M7QUFBQTtBQUFBLGNBQ0UsbURBQXlDO0FBQUE7QUFBQSxZQUFBZ0MsbUJBQUFoQztBQUFBQSxJQUUzQztBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUFpQyxVQUFBakMsR0FLOUIsOEJBQWM7QUFBQSxZQUFBa0MsVUFBQWxDLEdBQUFnQixNQUNULG9DQUFrQjtBQUFBLFlBQUFtQixVQUFBbkMsR0FBQWdCLE1BQUFDO0FBQUFBLElBQ2IsMENBQXVCO0FBQUE7QUFBQSxZQUFBbUIsVUFBQXBDLEdBQUFnQixNQUFBQyxNQUFBSTtBQUFBQSxJQUNsQixnREFBNEI7QUFBQTtBQUFBLEdBVTNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDVaRiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI1MzcwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3JhbmRvbS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENhbWJpdW0sIENvbGxlZ2UgZGUgRnJhbmNlIGFuZCBJbnJpYSAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICBvcGVuIEJpZ2FycmF5XG5cbiAgdHlwZSB0ID0gKGludDY0LCBpbnQ2NF9lbHQsIGNfbGF5b3V0KSBBcnJheTEudFxuXG4gIGV4dGVybmFsIG5leHQ6IHQgLT4gKGludDY0W0B1bmJveGVkXSlcbiAgICAgID0gXCJjYW1sX2x4bV9uZXh0XCIgXCJjYW1sX2x4bV9uZXh0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGUgKCkgOiB0ID1cbiAgICBBcnJheTEuY3JlYXRlIEludDY0IENfbGF5b3V0IDRcblxuICBsZXQgc2V0IHMgaTEgaTIgaTMgaTQgPVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMCAoSW50NjQubG9nb3IgaTEgMUwpOyAoKiBtdXN0IGJlIG9kZCAqKVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMSBpMjtcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDIgKGlmIGkzIDw+IDBMIHRoZW4gaTMgZWxzZSAxTCk7ICgqIG11c3Qgbm90IGJlIDAgKilcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDMgKGlmIGk0IDw+IDBMIHRoZW4gaTQgZWxzZSAyTCkgKCogbXVzdCBub3QgYmUgMCAqKVxuXG4gIGxldCBtayBpMSBpMiBpMyBpNCA9XG4gICAgbGV0IHMgPSBjcmVhdGUgKCkgaW5cbiAgICBzZXQgcyBpMSBpMiBpMyBpNDsgc1xuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeCA9XG4gICAgXCJseG0xOlwiXG4gICAgKCogXCJseG1cIiBkZW5vdGVzIHRoZSBhbGdvcml0aG0gY3VycmVudGx5IGluIHVzZSwgYW5kICcxJyBpc1xuICAgICAgIGEgdmVyc2lvbiBudW1iZXIuIFdlIHNob3VsZCB1cGRhdGUgdGhpcyBwcmVmaXggaWYgd2UgY2hhbmdlXG4gICAgICAgdGhlIFJhbmRvbSBhbGdvcml0aG0gb3IgdGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0LCBzbyB0aGF0IHVzZXJzXG4gICAgICAgZ2V0IGEgY2xlYW4gZXJyb3IgaW5zdGVhZCBvZiBiZWxpZXZpbmcgdGhhdCB0aGV5IGZhaXRoZnVsbHlcbiAgICAgICByZXByb2R1Y2UgdGhlaXIgcHJldmlvdXMgc3RhdGUgYW5kIGluIGZhY3QgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAgc3RyZWFtLlxuXG4gICAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNvbnN0cmFpbnQgdG8ga2VlcCB0aGUgc2FtZVxuICAgICAgIFwiPG5hbWU+PHZlcj46PGRhdGE+XCIgZm9ybWF0IG9yIG1lc3NhZ2Ugc2l6ZSBpbiBmdXR1cmUgdmVyc2lvbnMsXG4gICAgICAgd2UgY291bGQgY2hhbmdlIHRoZSBmb3JtYXQgY29tcGxldGVseSBpZiB3ZSB3YW50ZWQgYXMgbG9uZ1xuICAgICAgIGFzIHRoZXJlIGlzIG5vIGNvbmZ1c2lvbiBwb3NzaWJsZSB3aXRoIHRoZSBwcmV2aW91cyBmb3JtYXRzLiAqKVxuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gPVxuICAgIFN0cmluZy5sZW5ndGggc2VyaWFsaXphdGlvbl9wcmVmaXhcblxuICBsZXQgdG9fYmluYXJ5X3N0cmluZyBzID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKHByZWZsZW4gKyA0ICogOCkgaW5cbiAgICBCeXRlcy5ibGl0X3N0cmluZyBwcmVmaXggMCBidWYgMCBwcmVmbGVuO1xuICAgIGZvciBpID0gMCB0byAzIGRvXG4gICAgICBCeXRlcy5zZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgaSAqIDgpIChBcnJheTEuZ2V0IHMgaSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG5cbiAgbGV0IG9mX2JpbmFyeV9zdHJpbmcgYnVmID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggYnVmIDw+IHByZWZsZW4gKyA0ICogOFxuICAgICAgIHx8IG5vdCAoU3RyaW5nLnN0YXJ0c193aXRoIH5wcmVmaXggYnVmKVxuICAgIHRoZW5cbiAgICAgIGZhaWx3aXRoXG4gICAgICAgIChcIlJhbmRvbS5TdGF0ZS5vZl9iaW5hcnlfc3RyaW5nOiBleHBlY3RlZCBhIGZvcm1hdCBcXFxuICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCBPQ2FtbCBcIiBeIFN5cy5vY2FtbF92ZXJzaW9uKTtcbiAgICBsZXQgaTEgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDAgKiA4KSBpblxuICAgIGxldCBpMiA9IFN0cmluZy5nZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgMSAqIDgpIGluXG4gICAgbGV0IGkzID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAyICogOCkgaW5cbiAgICBsZXQgaTQgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDMgKiA4KSBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5cbiAgbGV0IGFzc2lnbiAoZHN0OiB0KSAoc3JjOiB0KSA9XG4gICAgQXJyYXkxLmJsaXQgc3JjIGRzdFxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCBzJyA9IGNyZWF0ZSgpIGluIGFzc2lnbiBzJyBzOyBzJ1xuXG4gICgqIFRoZSBzZWVkIGlzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSXQgY2FuIGJlIGp1c3Qgb25lIGludGVnZXIsXG4gICAgIGJ1dCBpdCBjYW4gYWxzbyBiZSAxMiBvciBtb3JlIGJ5dGVzLiAgVG8gaGlkZSB0aGUgZGlmZmVyZW5jZSxcbiAgICAgd2Ugc2VyaWFsaXplIHRoZSBhcnJheSBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLCB0aGVuIGhhc2ggdGhlXG4gICAgIHNlcXVlbmNlIHdpdGggTUQ1IChEaWdlc3QuYnl0ZXMpLiAgTUQ1IGdpdmVzIG9ubHkgMTI4IGJpdHMgd2hpbGVcbiAgICAgd2UgbmVlZCAyNTYgYml0cywgc28gd2UgaGFzaCB0d2ljZSB3aXRoIGRpZmZlcmVudCBzdWZmaXhlcy4gKilcbiAgbGV0IHJlaW5pdCBzIHNlZWQgPVxuICAgIGxldCBuID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBsZXQgYiA9IEJ5dGVzLmNyZWF0ZSAobiAqIDggKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBuLTEgZG9cbiAgICAgIEJ5dGVzLnNldF9pbnQ2NF9sZSBiIChpICogOCkgKEludDY0Lm9mX2ludCBzZWVkLihpKSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAxJztcbiAgICBsZXQgZDEgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAyJztcbiAgICBsZXQgZDIgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIHNldCBzIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQxIDApXG4gICAgICAgICAgKFN0cmluZy5nZXRfaW50NjRfbGUgZDEgOClcbiAgICAgICAgICAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMiAwKVxuICAgICAgICAgIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQyIDgpXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHMgPSBjcmVhdGUoKSBpbiByZWluaXQgcyBzZWVkOyBzXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID1cbiAgICBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgbWluX2ludDMxID0gLTB4NDAwMF8wMDAwXG4gICAgICAoKiA9IC0ye14zMH0sIHdoaWNoIGlzIFttaW5faW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gIGxldCBtYXhfaW50MzEgPSAweDNGRkZfRkZGRlxuICAgICAgKCogPSAgMnteMzB9LTEsIHdoaWNoIGlzIFttYXhfaW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gICgqIGF2b2lkIGludGVnZXIgbGl0ZXJhbHMgZm9yIHRoZXNlLCAzMi1iaXQgT0NhbWwgd291bGQgcmVqZWN0IHRoZW06ICopXG4gIGxldCBtaW5faW50MzIgPSAtKDEgbHNsIDMxKVxuICAgICAgKCogPSAtMHg4MDAwXzAwMDAgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG4gIGxldCBtYXhfaW50MzIgPSAoMSBsc2wgMzEpIC0gMVxuICAgICAgKCogPSAgMHg3RkZGX0ZGRkYgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG5cbiAgKCogUmV0dXJuIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMl4zMCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW25dIChleGNsdWRlZCkuXG4gICAgIFtib3VuZF0gbWF5IGJlIGFueSBwb3NpdGl2ZSBbaW50XS4gIFttYXNrXSBtdXN0IGJlIG9mIHRoZSBmb3JtIFsye15pfS0xXVxuICAgICBhbmQgZ3JlYXRlciBvciBlcXVhbCB0byBbbl0uICBMYXJnZXIgdmFsdWVzIG9mIFttYXNrXSBtYWtlIHRoZSBmdW5jdGlvblxuICAgICBydW4gZmFzdGVyIChmZXdlciBzYW1wbGVzIGFyZSByZWplY3RlZCkuICBTbWFsbGVyIHZhbHVlcyBvZiBbbWFza11cbiAgICAgYXJlIHVzYWJsZSBvbiBhIHdpZGVyIHJhbmdlIG9mIE9DYW1sIGltcGxlbWVudGF0aW9ucy4gICopXG4gIGxldCByZWMgaW50X2F1eCBzIG4gbWFzayA9XG4gICAgKCogV2Ugc3RhcnQgYnkgZHJhd2luZyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGluIHRoZSBbIFswLCBtYXNrXSBdIHJhbmdlICopXG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXNrIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgKCogRm9yIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHQgYmV0d2VlbiAwIGluY2x1ZGVkIGFuZCBbbl1cbiAgICAgKiBleGNsdWRlZCwgdGhlIHJhbmRvbSBudW1iZXIgW3JdIG11c3QgaGF2ZSBiZWVuIGRyYXduIHVuaWZvcm1seSBpblxuICAgICAqIGFuIGludGVydmFsIHdob3NlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIFtuXS4gVG8gYWNoaWV2ZSB0aGlzLFxuICAgICAqIHdlIHVzZSByZWplY3Rpb24gc2FtcGxpbmcgb24gdGhlIGdyZWF0ZXN0IGludGVydmFsIFsgWzAsIGsqbi0xXSBdXG4gICAgICogdGhhdCBmaXRzIGluIFsgWzAsIG1hc2tdIF0uICBUaGF0IGlzLCB3ZSByZWplY3QgdGhlXG4gICAgICogc2FtcGxlIGlmIGl0IGZhbGxzIG91dHNpZGUgb2YgdGhpcyBpbnRlcnZhbCwgYW5kIGRyYXcgYWdhaW4uXG4gICAgICogVGhpcyBpcyB3aGF0IHRoZSB0ZXN0IGJlbG93IGRvZXMsIHdoaWxlIGNhcmVmdWx5IGF2b2lkaW5nXG4gICAgICogb3ZlcmZsb3dzIGFuZCBzcGFyaW5nIGEgZGl2aXNpb24gW21hc2sgLyBuXS4gKilcbiAgICBpZiByIC0gdiA+IG1hc2sgLSBuICsgMSB0aGVuIGludF9hdXggcyBuIG1hc2sgZWxzZSB2XG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtib3VuZF0gKGV4Y2x1ZGVkKS5cbiAgICAgVGhlIGJvdW5kIG11c3QgZml0IGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMuXG4gICAgIFRoaXMgZnVuY3Rpb24geWllbGRzIHRoZSBzYW1lIG91dHB1dCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlZ2VyIHNpemUuICopXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiBtYXhfaW50MzEgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludF9hdXggcyBib3VuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLlxuICAgICBbYm91bmRdIG1heSBiZSBhbnkgcG9zaXRpdmUgW2ludF0uICopXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICAoKiBXaGVuIHRoZSBib3VuZCBmaXRzIGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMsIHdlIHVzZSB0aGUgc2FtZSBtYXNrXG4gICAgICAgYXMgaW4gZnVuY3Rpb24gW2ludF0gc28gYXMgdG8geWllbGQgdGhlIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICBzdXBwb3J0ZWQgYnkgT0NhbWwgKDMyLWJpdCBPQ2FtbCwgNjQtYml0IE9DYW1sLCBhbmQgSmF2YVNjcmlwdCkuXG4gICAgICAgV2hlbiB0aGUgYm91bmQgZml0cyBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgW21heF9pbnQzMl1cbiAgICAgICBhcyB0aGUgbWFzayBzbyBhcyB0byB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gYWxsIHBsYXRmb3JtcyB3aGVyZVxuICAgICAgIFtTeXMuaW50X3NpemUgPj0gMzJdIChpLmUuIEphdmFTY3JpcHQgYW5kIDY0LWJpdCBPQ2FtbCkuICopXG4gICAgZWxzZVxuICAgICAgaW50X2F1eCBzIGJvdW5kXG4gICAgICAgIChpZiBib3VuZCA8PSBtYXhfaW50MzEgdGhlbiBtYXhfaW50MzFcbiAgICAgICAgIGVsc2UgaWYgYm91bmQgPD0gbWF4X2ludDMyIHRoZW4gbWF4X2ludDMyXG4gICAgICAgICBlbHNlIG1heF9pbnQpXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBUaGUgW25iaXRzXSBwYXJhbWV0ZXIgaXMgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgc2lnbmVkIGludGVnZXJzXG4gICAgIHdlIGRyYXcgZnJvbSBbc10uXG4gICAgIFdlIG11c3QgaGF2ZSBbLTJ7Xm5iaXRzIC0gMX0gPD0gbWluIDw9IG1heCA8IDJ7Xm5iaXRzIC0gMX1dLlxuICAgICBNb3Jlb3ZlciwgZm9yIHRoZSBpdGVyYXRpb24gdG8gY29udmVyZ2UgcXVpY2tseSwgdGhlIGludGVydmFsXG4gICAgIFtbbWluLCBtYXhdXSBzaG91bGQgaGF2ZSB3aWR0aCBhdCBsZWFzdCBbMntebmJpdHMgLSAxfV0uXG4gICAgIEFzIHRoZSB3aWR0aCBhcHByb2FjaGVzIHRoaXMgbG93ZXIgbGltaXQsIHRoZSBhdmVyYWdlIG51bWJlciBvZlxuICAgICBkcmF3cyBhcHByb2FjaGVzIDIsIHdpdGggYSBxdWl0ZSBoaWdoIHN0YW5kYXJkIGRldmlhdGlvbiAoMiArIGVwc2lsb24pLiAqKVxuICBsZXQgcmVjIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHMgPVxuICAgIGxldCBkcm9wID0gU3lzLmludF9zaXplIC0gbmJpdHMgaW5cbiAgICAoKiBUaGUgYml0c2hpZnRzIHJlcGxpY2F0ZSB0aGUgW25iaXRzXS10aCBiaXQgKHNpZ24gYml0KSB0byBoaWdoZXIgYml0czogKilcbiAgICBsZXQgciA9ICgoSW50NjQudG9faW50IChuZXh0IHMpKSBsc2wgZHJvcCkgYXNyIGRyb3AgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzIGVsc2UgclxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgW21hc2tdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9hdXhdLlxuICAgICBbbmJpdHNdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9pbl9sYXJnZV9yYW5nZV0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrIH5uYml0cyA9XG4gICAgbGV0IHNwYW4gPSBtYXggLSBtaW4gKyAxIGluXG4gICAgaWYgc3BhbiA8PSBtYXNrICgqIFtzcGFuXSBpcyBzbWFsbCBlbm91Z2ggKilcbiAgICAmJiBzcGFuID4gMCAgICAgKCogbm8gb3ZlcmZsb3cgb2NjdXJyZWQgd2hlbiBjb21wdXRpbmcgW3NwYW5dICopXG4gICAgdGhlblxuICAgICAgKCogSnVzdCBkcmF3IGEgbnVtYmVyIGluIFtbMCwgc3BhbildIGFuZCBzaGlmdCBpdCBieSBbbWluXS4gKilcbiAgICAgIG1pbiArIGludF9hdXggcyBzcGFuIG1hc2tcbiAgICBlbHNlXG4gICAgICAoKiBTcGFuIHRvbyBsYXJnZSwgdXNlIHRoZSBhbHRlcm5hdGl2ZSBkcmF3aW5nIG1ldGhvZC4gKilcbiAgICAgIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHNcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuXG4gICAgIFdlIG11c3QgaGF2ZSBbbWluIDw9IG1heF0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRfaW5fcmFuZ2VcIjtcbiAgICAoKiBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzEtYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zIHN1cHBvcnRlZCBieSBPQ2FtbC5cbiAgICAgICBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzItYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBKYXZhU2NyaXB0IGFuZCBvbiA2NC1iaXQgT0NhbWwuICopXG4gICAgaWYgbWluID49IG1pbl9pbnQzMSAmJiBtYXggPD0gbWF4X2ludDMxIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMxIH5uYml0czozMVxuICAgIGVsc2UgaWYgbWluID49IG1pbl9pbnQzMiAmJiBtYXggPD0gbWF4X2ludDMyIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMyIH5uYml0czozMlxuICAgIGVsc2VcbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludCB+bmJpdHM6U3lzLmludF9zaXplXG5cbiAgKCogUmV0dXJuIDMyIHJhbmRvbSBiaXRzIGFzIGFuIFtpbnQzMl0gKilcbiAgbGV0IGJpdHMzMiBzID1cbiAgICBJbnQ2NC50b19pbnQzMiAobmV4dCBzKVxuXG4gICgqIFJldHVybiBhbiBbaW50MzJdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgciA9IEludDMyLnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHMzMiBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50MzIuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFsKVxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQzMl0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQzMiAobmV4dCBzKSBpblxuICAgIGlmIHIgPCBtaW4gfHwgciA+IG1heCB0aGVuIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCBlbHNlIHJcblxuICBsZXQgaW50MzJfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMl9pbl9yYW5nZVwiXG4gICAgZWxzZVxuICAgICAgbGV0IHNwYW4gPSBJbnQzMi5zdWNjIChJbnQzMi5zdWIgbWF4IG1pbikgaW5cbiAgICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9pbl9yYW5nZV9hdXhdLiAqKVxuICAgICAgaWYgc3BhbiA8PSBJbnQzMi56ZXJvIHRoZW5cbiAgICAgICAgaW50MzJfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4XG4gICAgICBlbHNlXG4gICAgICAgIEludDMyLmFkZCBtaW4gKGludDMyYXV4IHMgc3BhbilcblxuICAoKiBSZXR1cm4gNjQgcmFuZG9tIGJpdHMgYXMgYW4gW2ludDY0XSAqKVxuICBsZXQgYml0czY0IHMgPVxuICAgIG5leHQgc1xuXG4gICgqIFJldHVybiBhbiBbaW50NjRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgciA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHM2NCBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50NjQuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFMKVxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQ2NF0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBuZXh0IHMgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggZWxzZSByXG5cbiAgbGV0IGludDY0X2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRfaW5fcmFuZ2VcIlxuICAgIGVsc2VcbiAgICAgIGxldCBzcGFuID0gSW50NjQuc3VjYyAoSW50NjQuc3ViIG1heCBtaW4pIGluXG4gICAgICAoKiBFeHBsYW5hdGlvbiBvZiB0aGlzIHRlc3Q6IHNlZSBjb21tZW50IGluIFtpbnRfaW5fcmFuZ2VfYXV4XS4gKilcbiAgICAgIGlmIHNwYW4gPD0gSW50NjQuemVybyB0aGVuXG4gICAgICAgIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heFxuICAgICAgZWxzZVxuICAgICAgICBJbnQ2NC5hZGQgbWluIChpbnQ2NGF1eCBzIHNwYW4pXG5cbiAgKCogUmV0dXJuIDMyIG9yIDY0IHJhbmRvbSBiaXRzIGFzIGEgW25hdGl2ZWludF0gKilcbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG4gICgqIFJldHVybiBhIFtuYXRpdmVpbnRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuICAoKiBSZXR1cm4gYSBbbmF0aXZlaW50XSBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnRfaW5fcmFuZ2UgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIH5taW4gfm1heCAtPlxuICAgICAgTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMl9pbl9yYW5nZSBzXG4gICAgICAgIH5taW46KE5hdGl2ZWludC50b19pbnQzMiBtaW4pIH5tYXg6KE5hdGl2ZWludC50b19pbnQzMiBtYXgpKVxuICAgIGVsc2UgZnVuIHMgfm1pbiB+bWF4IC0+XG4gICAgICBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0X2luX3JhbmdlIHNcbiAgICAgICAgfm1pbjooSW50NjQub2ZfbmF0aXZlaW50IG1pbikgfm1heDooSW50NjQub2ZfbmF0aXZlaW50IG1heCkpXG5cbiAgKCogUmV0dXJuIGEgZmxvYXQgMCA8IHggPCAxIHVuaWZvcm1seSBkaXN0cmlidXRlZCBhbW9uZyB0aGVcbiAgICAgbXVsdGlwbGVzIG9mIDJeLTUzICopXG4gIGxldCByZWMgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IGIgPSBuZXh0IHMgaW5cbiAgICBsZXQgbiA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxMSBpblxuICAgIGlmIG4gPD4gMEwgdGhlbiBJbnQ2NC50b19mbG9hdCBuICouIDB4MS5wLTUzIGVsc2UgcmF3ZmxvYXQgc1xuXG4gICgqIFJldHVybiBhIGZsb2F0IGJldHdlZW4gMCBhbmQgW2JvdW5kXSAqKVxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICAoKiBSZXR1cm4gYSByYW5kb20gQm9vbGVhbiAqKVxuICBsZXQgYm9vbCBzID0gbmV4dCBzIDwgMExcblxuICAoKiBTcGxpdCBhIG5ldyBQUk5HIG9mZiB0aGUgZ2l2ZW4gUFJORyAqKVxuICBsZXQgc3BsaXQgcyA9XG4gICAgbGV0IGkxID0gYml0czY0IHMgaW4gbGV0IGkyID0gYml0czY0IHMgaW5cbiAgICBsZXQgaTMgPSBiaXRzNjQgcyBpbiBsZXQgaTQgPSBiaXRzNjQgcyBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5lbmRcblxubGV0IG1rX2RlZmF1bHQgKCkgPVxuICAoKiBUaGlzIGlzIHRoZSBzdGF0ZSBvYnRhaW5lZCB3aXRoIFtTdGF0ZS5tYWtlIFt8IDMxNDE1OTI2NSB8XV0uICopXG4gIFN0YXRlLm1rICgtNjE5Njg3NDI4OTU2NzcwNTA5N0wpXG4gICAgICAgICAgIDU4NjU3MzI0OTgzMzcxMzE4OUxcbiAgICAgICAgICAgKC04NTkxMjY4ODAzODY1MDQzNDA3TClcbiAgICAgICAgICAgNjM4ODYxMzU5NTg0OTc3MjA0NExcblxubGV0IHJhbmRvbV9rZXkgPVxuICBEb21haW4uRExTLm5ld19rZXkgfnNwbGl0X2Zyb21fcGFyZW50OlN0YXRlLnNwbGl0IG1rX2RlZmF1bHRcblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludF9pbl9yYW5nZSB+bWluIH5tYXggPVxuICBTdGF0ZS5pbnRfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgaW50MzJfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUuaW50MzJfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBuYXRpdmVpbnRfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUubmF0aXZlaW50X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludDY0X2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLmludDY0X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLnJlaW5pdCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgc2VlZFxubGV0IGluaXQgc2VlZCA9IGZ1bGxfaW5pdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBTcGxpdHRpbmcgKilcblxubGV0IHNwbGl0ICgpID0gU3RhdGUuc3BsaXQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9ibGl0IiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2dyZWF0ZXJ0aGFuIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmUiLCJjYW1sX2ludDY0X3N1YiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfbGVzc3RoYW4iLCJjYW1sX2x4bV9uZXh0IiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9JbnQzMiIsIlN0ZGxpYl9JbnQ2NCIsIlN0ZGxpYiIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9EaWdlc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0JpZ2FycmF5IiwiU3RkbGliX05hdGl2ZWludCIsImNyZWF0ZSIsInBhcmFtIiwic2V0IiwicyIsImkxIiwiaTIiLCJpMyIsImk0IiwibWsiLCJzZXJpYWxpemF0aW9uX3ByZWZpeCIsInRvX2JpbmFyeV9zdHJpbmciLCJidWYiLCJpIiwib2ZfYmluYXJ5X3N0cmluZyIsImNvcHkiLCJzcmMiLCJkc3QiLCJyZWluaXQiLCJzZWVkIiwibiIsImIiLCJkMSIsImQyIiwibWFrZSIsIm1ha2Vfc2VsZl9pbml0IiwiYml0cyIsImludF9hdXgiLCJtYXNrIiwiciIsInYiLCJtYXhfaW50MzEiLCJpbnQiLCJib3VuZCIsIm1heF9pbnQzMiIsImZ1bGxfaW50IiwiaW50X2luX3JhbmdlX2F1eCIsIm1pbiIsIm1heCIsIm5iaXRzIiwic3BhbiIsImRyb3AiLCJpbnRfaW5fcmFuZ2UiLCJiaXRzMzIiLCJpbnQzMmF1eCIsImludDMyIiwiaW50MzJfaW5fcmFuZ2UiLCJpbnQ2NGF1eCIsImludDY0IiwiaW50NjRfaW5fcmFuZ2UiLCJuYXRpdmViaXRzIiwibmF0aXZlaW50IiwibmF0aXZlaW50X2luX3JhbmdlIiwiZmxvYXQiLCJib29sIiwic3BsaXQiLCJta19kZWZhdWx0IiwicmFuZG9tX2tleSIsInNjYWxlIiwiYml0czY0IiwiZnVsbF9pbml0IiwiaW5pdCIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyx1QkFB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LFVBQUF6QztBQUFBQSxJQUU5QixPQUEyQixPQUEzQixtREFBZ0M7QUFBQTtBQUFBLFlBQUEwQyxLQUFBMUMsTUFDbEQsMkJBQW9CO0FBQUEsWUFBQTJDLFVBQUE1RCxPQUNQLE9BQWUsVUFBZix3QkFBZTtBQUFBLFlBQUFxRCxRQUFBckQ7QUFBQUEsSUFJakIsT0FBMkIsTUFBM0IsNkNBQTJCO0FBQUE7QUFBQSxZQUFBNkQsVUFBQTdEO0FBQUFBLElBSXhCLE9BQTJCLEtBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQThELFVBQUFoRDtBQUFBQSxRQUFBQyxNQUMxQjtBQUFBLElBaFMzQiw2QkFnU3dEO0FBQUE7QUFBQSxHQWpDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHBWOUQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNTc2NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9oYXNodGJsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIHRoZSBsb2FkIGZhY3RvciBiZWNvbWVzIHRvbyBoaWdoLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSBBdG9taWMubWFrZSByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IEF0b21pYy5zZXQgcmFuZG9taXplZCB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9IEF0b21pYy5nZXQgcmFuZG9taXplZFxuXG5sZXQgcHJuZ19rZXkgPSBEb21haW4uRExTLm5ld19rZXkgUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0XG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCBwcm5nX2tleSkgZWxzZSAwXG4gIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzZWVkZWRfaGFzaDogaW50IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZTogaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weTogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmU6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGUgOiA/cmFuZG9tOmJvb2wgLT4gaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZSA6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILnNlZWRlZF9oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IGtleSBuZXh0XG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIG1lbV9pbl9idWNrZXQga2V5IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IHNlZWRlZF9oYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgcmVjIG1lbV9pbl9idWNrZXQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBrZXkgbmV4dFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbWVtX2luX2J1Y2tldCBrZXkgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9jb21wYXJlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3N5c19nZXRlbnYiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N5cyIsIlN0ZGxpYiIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1JhbmRvbSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfSW50IiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N0cmluZyIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiaCIsImZsaXBfb25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJleG4iLCJyYW5kb21pemVkX2RlZmF1bHQiLCJyYW5kb21pemVkIiwicmFuZG9taXplIiwicGFyYW0iLCJpc19yYW5kb21pemVkIiwicHJuZ19rZXkiLCJwb3dlcl8yX2Fib3ZlIiwieCIsIm4iLCJjcmVhdGUiLCJvcHQiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJzIiwic2VlZCIsImNsZWFyIiwicmVzZXQiLCJsZW4iLCJjb3B5X2J1Y2tldGxpc3QiLCJrZXkiLCJkYXRhIiwibmV4dCIsInByZWMiLCJjb3B5IiwibGVuZ3RoIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImkiLCJjZWxsIiwibmlkeCIsIm1hdGNoIiwicmVzaXplIiwib3NpemUiLCJpdGVyIiwib2xkX3RyYXYiLCJkIiwiZmlsdGVyX21hcF9pbnBsYWNlIiwic2xvdCIsImZvbGQiLCJpbml0IiwiYWNjdSIsImIiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJtIiwiaGlzdG8iLCJsIiwidG9fc2VxIiwidGJsIiwidGJsX2RhdGEiLCJhdXgiLCJidWNrIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwiTWFrZVNlZWRlZCIsIkgiLCJrZXlfaW5kZXgiLCJhZGQiLCJidWNrZXQiLCJyZW1vdmUiLCJrIiwiZmluZCIsImsxIiwiZDEiLCJuZXh0MSIsImsyIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfb3B0IiwiZmluZF9hbGwiLCJibG9jayIsImRzdCIsIm9mZnNldCIsInJlcGxhY2UiLCJtZW0iLCJhZGRfc2VxIiwidiIsInJlcGxhY2Vfc2VxIiwib2Zfc2VxIiwiTWFrZSIsImVxdWFsIiwic2VlZGVkX2hhc2giLCJpbmNsdWRlIiwic3oiLCJoYXNoIiwiaGFzaF9wYXJhbSIsIm4xIiwibjIiLCJyZWJ1aWxkIl0sIm1hcHBpbmdzIjoiSUFB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LHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyxxQkFBWTtBQUFBO0FBQUEsZUFBRTtBQUFBO0FBQUEsWUFBQW9CLFlBQUFoQyxLQUFBdEI7QUFBQUEsSUFHckM7QUFBQTtBQUFBLHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyx5QkFBZ0I7QUFBQTtBQUFBLGVBQUU7QUFBQTtBQUFBLFlBQUFxQixPQUFBdkQ7QUFBQUEsUUFBQXNCLE1BRy9CO0FBQUEsSUFDVjtBQUFBLElBQWlCO0FBQUEsR0FDZDtBQUFBLFlBQUEyQyxRQUFBdkYsS0FBQWQ7QUFBQUE7QUFBQUEsS0FBQWdCLFNBRU8sZUFBVztBQUFBLEtBQUFDLElBQ2I7QUFBQSxJQUNSO0FBQUE7QUFBQSxVQUNtQztBQUFBLE1BQUFDLE9BQWxCO0FBQUE7QUFBQSxTQUFBQSxPQUNWO0FBQUE7QUFBQSxTQUVQO0FBQUEsS0FBQWxCLE1BRVM7QUFBQSxJQUlUO0FBQUEsa0JBQW1CO0FBQUEsSUFBbUM7QUFBQSxHQUNwRDtBQUFBLEdBOWpCeUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzRDdEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjY1NzgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZm9ybWF0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBlbmRfd2l0aF9uZXdsaW5lIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5sZXQgcHBfcHJpbnRfbm90aGluZyBfc3RhdGUgKCkgPSAoKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB+ZW5kX3dpdGhfbmV3bGluZTp0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lOmZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgaWYgbWFyZ2luID49IHBwX2luZmluaXR5IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA+PSBwcF9pbmZpbml0eVwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtTdGRsaWIub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbU3RkbGliLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cbigqIEluaXRpYWxpc2UgZG9tYWluIGxvY2FsIHN0YXRlICopXG5tb2R1bGUgRExTID0gRG9tYWluLkRMU1xuXG5sZXQgc3RkYnVmX2tleSA9IERMUy5uZXdfa2V5IHBwX21ha2VfYnVmZmVyXG5sZXQgXyA9IERMUy5zZXQgc3RkYnVmX2tleSBzdGRidWZcblxubGV0IHN0cl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBmb3JtYXR0ZXJfb2ZfYnVmZmVyIChETFMuZ2V0IHN0ZGJ1Zl9rZXkpKVxubGV0IF8gPSBETFMuc2V0IHN0cl9mb3JtYXR0ZXJfa2V5IHN0cl9mb3JtYXR0ZXJcblxubGV0IGJ1ZmZlcmVkX291dF9zdHJpbmcga2V5IHN0ciBvZnMgbGVuID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgKERvbWFpbi5ETFMuZ2V0IGtleSkgc3RyIG9mcyBsZW5cblxubGV0IGJ1ZmZlcmVkX291dF9mbHVzaCBvYyBrZXkgKCkgPVxuICBsZXQgYnVmID0gRG9tYWluLkRMUy5nZXQga2V5IGluXG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBsZXQgc3RyID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBvdXRwdXRfc3Vic3RyaW5nIG9jIHN0ciAwIGxlbiA7XG4gIFN0ZGxpYi5mbHVzaCBvYztcbiAgQnVmZmVyLmNsZWFyIGJ1ZlxuXG5sZXQgc3RkX2J1Zl9rZXkgPSBEb21haW4uRExTLm5ld19rZXkgKGZ1biAoKSAtPiBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplKVxubGV0IGVycl9idWZfa2V5ID0gRG9tYWluLkRMUy5uZXdfa2V5IChmdW4gKCkgLT4gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZSlcblxubGV0IHN0ZF9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBzdGRfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZG91dCBzdGRfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IHN0ZF9mb3JtYXR0ZXJfa2V5IHN0ZF9mb3JtYXR0ZXJcblxubGV0IGVycl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBlcnJfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZGVyciBlcnJfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IGVycl9mb3JtYXR0ZXJfa2V5IGVycl9mb3JtYXR0ZXJcblxubGV0IGdldF9zdGRfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleVxubGV0IGdldF9lcnJfZm9ybWF0dGVyICgpID0gRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdHJfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdGRidWYgKCkgPSBETFMuZ2V0IHN0ZGJ1Zl9rZXlcblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiB+ZW5kX3dpdGhfbmV3bGluZTpmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPVxuICBsZXQgc3RkYnVmID0gRExTLmdldCBzdGRidWZfa2V5IGluXG4gIGxldCBzdHJfZm9ybWF0dGVyID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleSBpblxuICBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbmxldCBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplIGluXG4gICAgbGV0IG91dHB1dCcgPSBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgaW5cbiAgICBsZXQgZmx1c2gnICgpID1cbiAgICAgIG91dHB1dCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgMCAoQnVmZmVyLmxlbmd0aCBidWYpO1xuICAgICAgQnVmZmVyLmNsZWFyIGJ1ZjtcbiAgICAgIGZsdXNoICgpXG4gICAgaW5cbiAgICBtYWtlX2Zvcm1hdHRlciBvdXRwdXQnIGZsdXNoJylcblxubGV0IHN5bmNocm9uaXplZF9mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCB2ID0gcHBfb3Blbl9oYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl92Ym94IHYgPSBwcF9vcGVuX3Zib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX2h2Ym94IHYgPSBwcF9vcGVuX2h2Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ob3Zib3ggdiA9IHBwX29wZW5faG92Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ib3ggdiA9IHBwX29wZW5fYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgY2xvc2VfYm94IHYgPSBwcF9jbG9zZV9ib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX3N0YWcgdiA9IHBwX29wZW5fc3RhZyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3N0YWcgdiA9IHBwX2Nsb3NlX3N0YWcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9hcyB2IHcgPSBwcF9wcmludF9hcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdiB3XG5hbmQgcHJpbnRfc3RyaW5nIHYgPSBwcF9wcmludF9zdHJpbmcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ieXRlcyB2ID0gcHBfcHJpbnRfYnl0ZXMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pbnQgdiA9IHBwX3ByaW50X2ludCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2Zsb2F0IHYgPSBwcF9wcmludF9mbG9hdCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2NoYXIgdiA9IHBwX3ByaW50X2NoYXIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ib29sIHYgPSBwcF9wcmludF9ib29sIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfYnJlYWsgdiB3ID0gcHBfcHJpbnRfYnJlYWsgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHYgd1xuYW5kIHByaW50X2N1dCB2ID0gcHBfcHJpbnRfY3V0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfc3BhY2UgdiA9IHBwX3ByaW50X3NwYWNlIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZm9yY2VfbmV3bGluZSB2ID0gcHBfZm9yY2VfbmV3bGluZSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2ZsdXNoIHYgPSBwcF9wcmludF9mbHVzaCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X25ld2xpbmUgdiA9IHBwX3ByaW50X25ld2xpbmUgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pZl9uZXdsaW5lIHYgPSBwcF9wcmludF9pZl9uZXdsaW5lIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBvcGVuX3Rib3ggdiA9IHBwX29wZW5fdGJveCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3Rib3ggdiA9IHBwX2Nsb3NlX3Rib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YnJlYWsgdiB3ID0gcHBfcHJpbnRfdGJyZWFrIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcblxuYW5kIHNldF90YWIgdiA9IHBwX3NldF90YWIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YWIgdiA9IHBwX3ByaW50X3RhYiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X21hcmdpbiB2ID0gcHBfc2V0X21hcmdpbiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXJnaW4gdiA9IHBwX2dldF9tYXJnaW4gKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcblxuYW5kIHNldF9tYXhfaW5kZW50IHYgPSBwcF9zZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXhfaW5kZW50IHYgPSBwcF9nZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2dlb21ldHJ5IH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBwcF9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBzYWZlX3NldF9nZW9tZXRyeSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBnZXRfZ2VvbWV0cnkgdiA9IHBwX2dldF9nZW9tZXRyeSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHVwZGF0ZV9nZW9tZXRyeSB2ID0gcHBfdXBkYXRlX2dlb21ldHJ5IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfbWF4X2JveGVzIHYgPSBwcF9zZXRfbWF4X2JveGVzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21heF9ib3hlcyB2ID0gcHBfZ2V0X21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIG92ZXJfbWF4X2JveGVzIHYgPSBwcF9vdmVyX21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX3NldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX2dldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHYgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgdiA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyB2ID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiB3ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyB2ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfc2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBnZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfbWFya190YWdzIHYgPVxuICBwcF9zZXRfbWFya190YWdzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21hcmtfdGFncyB2ID1cbiAgcHBfZ2V0X21hcmtfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHNldF90YWdzIHYgPVxuICBwcF9zZXRfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG5sZXQgcHBfcHJpbnRfaXRlciA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgaXRlciBwcF92IHBwZiB2ID1cbiAgbGV0IGlzX2ZpcnN0ID0gcmVmIHRydWUgaW5cbiAgbGV0IHBwX3YgdiA9XG4gICAgaWYgIWlzX2ZpcnN0IHRoZW4gaXNfZmlyc3QgOj0gZmFsc2UgZWxzZSBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHZcbiAgaW5cbiAgaXRlciBwcF92IHZcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgTGlzdC5pdGVyIHBwX3YgcHBmIHZcblxuKCogVG8gZm9ybWF0IGFuIGFycmF5ICopXG5sZXQgcHBfcHJpbnRfYXJyYXkgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgQXJyYXkuaXRlciBwcF92IHBwZiB2XG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgU2VxLml0ZXIgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9zdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcblxubGV0IHByaW50ZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgYWNjKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBlcHJpbnRmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIChETFMuZ2V0IGVycl9mb3JtYXR0ZXJfa2V5KSBhY2MpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpICgpO1xuICBwcF9wcmludF9mbHVzaCAoRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleSkgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbmxldCAoKSA9IERvbWFpbi5iZWZvcmVfZmlyc3Rfc3Bhd24gKGZ1biAoKSAtPlxuICBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpO1xuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIHN0ZF9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3Rkb3V0IHN0ZF9idWZfa2V5fTtcblxuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIGVycl9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3RkZXJyIGVycl9idWZfa2V5fTtcbilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUXVldWUiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RhY2siLCJTdGRsaWJfSW50IiwiU3RkbGliX0J5dGVzIiwiaWQiLCJ4IiwiU3RyaW5nX3RhZyIsInBwX2VucXVldWUiLCJzdGF0ZSIsInRva2VuIiwicHBfb3V0cHV0X3N0cmluZyIsInMiLCJwcF9vdXRwdXRfbmV3bGluZSIsImZvcm1hdF9wcF90ZXh0Iiwic2l6ZSIsInRleHQiLCJjc3QiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJwYXJhbSIsIndpZHRoIiwiYWZ0ZXIiLCJvZmZzZXQiLCJiZWZvcmUiLCJpbmRlbnQiLCJyZWFsX2luZGVudCIsIm4iLCJicmVha19zYW1lX2xpbmUiLCJmb3JtYXRfcHBfdG9rZW4iLCJtYXRjaCIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJsIiwibGVuZ3RoIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwiYm94X3R5cGUiLCJpbnNlcnRpb25fcG9pbnQiLCJmaXJzdCIsInRhYiIsInRhaWwiLCJoZWFkIiwidHkiLCJ0Ym94IiwicHBfaW5maW5pdHkiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50IiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJ1bmtub3duIiwiaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIiwic3RhY2siLCJzZXRfc2l6ZSIsInF1ZXVlX2VsZW0iLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiYiIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInplcm8iLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfc2V0X3ByaW50X3RhZ3MiLCJwcF9zZXRfbWFya190YWdzIiwicHBfZ2V0X3ByaW50X3RhZ3MiLCJwcF9nZXRfbWFya190YWdzIiwicHBfc2V0X3RhZ3MiLCJwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwY3QiLCJwb3QiLCJtY3QiLCJtb3QiLCJwcF9yaW5pdCIsInBwX2ZsdXNoX3F1ZXVlIiwiZW5kX3dpdGhfbmV3bGluZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJpIiwicHBfcHJpbnRfZmxvYXQiLCJwcF9wcmludF9ib29sIiwicHBfcHJpbnRfY2hhciIsImMiLCJwcF9wcmludF9ub3RoaW5nIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsIm1zZyIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwidXBkYXRlIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiaiIsImgiLCJnIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsIm9jIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsImZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIiwib3V0X2Z1bnMiLCJtYWtlX2Zvcm1hdHRlciIsIm91dHB1dCIsImZsdXNoIiwicHBmIiwiZm9ybWF0dGVyX29mX291dF9jaGFubmVsIiwiZm9ybWF0dGVyX29mX2J1ZmZlciIsInBwX2J1ZmZlcl9zaXplIiwicHBfbWFrZV9idWZmZXIiLCJzdGRidWYiLCJzdGRfZm9ybWF0dGVyIiwiZXJyX2Zvcm1hdHRlciIsInN0cl9mb3JtYXR0ZXIiLCJzdGRidWZfa2V5Iiwic3RyX2Zvcm1hdHRlcl9rZXkiLCJidWZmZXJlZF9vdXRfc3RyaW5nIiwia2V5Iiwic3RyIiwib2ZzIiwibGVuIiwiYnVmZmVyZWRfb3V0X2ZsdXNoIiwiYnVmIiwic3RkX2J1Zl9rZXkiLCJlcnJfYnVmX2tleSIsInN0ZF9mb3JtYXR0ZXJfa2V5IiwiZXJyX2Zvcm1hdHRlcl9rZXkiLCJnZXRfc3RkX2Zvcm1hdHRlciIsImdldF9lcnJfZm9ybWF0dGVyIiwiZ2V0X3N0cl9mb3JtYXR0ZXIiLCJnZXRfc3RkYnVmIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsImZsdXNoX3N0cl9mb3JtYXR0ZXIiLCJtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIiLCJzeW5jaHJvbml6ZWRfZm9ybWF0dGVyX29mX291dF8iLCJtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwic29iIiwiZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiaXRlbXMiLCJhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0iLCJpdGVtIiwiZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9iIiwib3Blbl9oYm94IiwidiIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl9zdGFnIiwiY2xvc2Vfc3RhZyIsInByaW50X2FzIiwidyIsInByaW50X3N0cmluZyIsInByaW50X2J5dGVzIiwicHJpbnRfaW50IiwicHJpbnRfZmxvYXQiLCJwcmludF9jaGFyIiwicHJpbnRfYm9vbCIsInByaW50X2JyZWFrIiwicHJpbnRfY3V0IiwicHJpbnRfc3BhY2UiLCJmb3JjZV9uZXdsaW5lIiwicHJpbnRfZmx1c2giLCJwcmludF9uZXdsaW5lIiwicHJpbnRfaWZfbmV3bGluZSIsIm9wZW5fdGJveCIsImNsb3NlX3Rib3giLCJwcmludF90YnJlYWsiLCJzZXRfdGFiIiwicHJpbnRfdGFiIiwic2V0X21hcmdpbiIsImdldF9tYXJnaW4iLCJzZXRfbWF4X2luZGVudCIsImdldF9tYXhfaW5kZW50Iiwic2V0X2dlb21ldHJ5Iiwic2FmZV9zZXRfZ2VvbWV0cnkiLCJnZXRfZ2VvbWV0cnkiLCJ1cGRhdGVfZ2VvbWV0cnkiLCJzZXRfbWF4X2JveGVzIiwiZ2V0X21heF9ib3hlcyIsIm92ZXJfbWF4X2JveGVzIiwic2V0X2VsbGlwc2lzX3RleHQiLCJnZXRfZWxsaXBzaXNfdGV4dCIsInNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwiLCJzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsInNldF9wcmludF90YWdzIiwiZ2V0X3ByaW50X3RhZ3MiLCJzZXRfbWFya190YWdzIiwiZ2V0X21hcmtfdGFncyIsInNldF90YWdzIiwicHBfcHJpbnRfaXRlciIsIm9wdCIsIml0ZXIiLCJwcF92IiwicHBfc2VwIiwiaXNfZmlyc3QiLCJwcF9wcmludF9saXN0IiwicHBfcHJpbnRfYXJyYXkiLCJwcF9wcmludF9zZXEiLCJzZXEiLCJwcF9wcmludF90ZXh0IiwibGVmdCIsInJpZ2h0IiwicHBfcHJpbnRfb3B0aW9uIiwibm9uZSIsInBwX3ByaW50X3Jlc3VsdCIsIm9rIiwiZXJyb3IiLCJlIiwicHBfcHJpbnRfZWl0aGVyIiwiciIsImNvbXB1dGVfdGFnIiwidGFnX2FjYyIsIm91dHB1dF9mb3JtYXR0aW5nX2xpdCIsImZtdGluZ19saXQiLCJvdXRwdXRfYWNjIiwiYWNjIiwicCIsImJ0eSIsInN0cnB1dF9hY2MiLCJrZnByaW50ZiIsImsiLCJmbXQiLCJpa2ZwcmludGYiLCJpZnByaW50ZiIsImZwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia2RwcmludGYiLCJkcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwiZnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRGg5Q0QiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyODIyMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zY2FuZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIGFsaWFzIHRvIGF2b2lkIHdhcm5pbmcgZm9yIGFtYmlndWl0eSBiZXR3ZWVuXG4gICBTdGRsaWIuZm9ybWF0NlxuICAgYW5kIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG5cbiAgICh0aGUgZm9ybWVyIGlzIGluIGZhY3QgYW4gYWxpYXMgZm9yIHRoZSBsYXR0ZXIsXG4gICAgYnV0IHRoZSBhbWJpZ3VpdHkgd2FybmluZyBkb2Vzbid0IGNhcmUpXG4qKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBTdGRsaWIuZm9ybWF0NlxuXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FubmVycy4gKilcblxuKCogU2Nhbm5pbmcgYnVmZmVycy4gKilcbm1vZHVsZSB0eXBlIFNDQU5OSU5HID0gc2lnXG5cbiAgdHlwZSBpbl9jaGFubmVsXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdmFsIHN0ZGluIDogaW5fY2hhbm5lbFxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgbmV4dF9jaGFyIDogc2NhbmJ1ZiAtPiBjaGFyXG4gICgqIFtTY2FubmluZy5uZXh0X2NoYXIgaWJdIGFkdmFuY2UgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3Rlci5cbiAgICAgSWYgbm8gbW9yZSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQsIHNldHMgYSBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliXSBtYXJrIHRoZSBjdXJyZW50X2NoYXIgYXMgYWxyZWFkeVxuICAgICBzY2FubmVkLiAqKVxuXG4gIHZhbCBwZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLnBlZWtfY2hhciBpYl0gcmV0dXJucyB0aGUgY3VycmVudCBjaGFyIGF2YWlsYWJsZSBpblxuICAgICB0aGUgYnVmZmVyIG9yIHJlYWRzIG9uZSBpZiBuZWNlc3NhcnkgKHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzXG4gICAgIGFscmVhZHkgc2Nhbm5lZCkuXG4gICAgIElmIG5vIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhbiBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgY2hlY2tlZF9wZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogU2FtZSBhcyBbU2Nhbm5pbmcucGVla19jaGFyXSBhYm92ZSBidXQgYWx3YXlzIHJldHVybnMgYSB2YWxpZCBjaGFyIG9yXG4gICAgIGZhaWxzOiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG51bGwgY2hhciB3aGVuIHRoZSByZWFkaW5nIG1ldGhvZCBvZiB0aGVcbiAgICAgaW5wdXQgYnVmZmVyIGhhcyByZWFjaGVkIGFuIGVuZCBvZiBmaWxlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGV4Y2VwdGlvblxuICAgICBbRW5kX29mX2ZpbGVdLiAqKVxuXG4gIHZhbCBzdG9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gY2hhciAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnN0b3JlX2NoYXIgbGltIGliIGNdIGFkZHMgW2NdIHRvIHRoZSB0b2tlbiBidWZmZXJcbiAgICAgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlciBbaWJdLiBJdCBhbHNvIGFkdmFuY2VzIHRoZSBzY2FubmluZyBidWZmZXIgZm9yXG4gICAgIG9uZSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgW2xpbSAtIDFdLCBpbmRpY2F0aW5nIHRoZSBuZXcgbGltaXQgZm9yIHRoZVxuICAgICBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uICopXG5cbiAgdmFsIHNraXBfY2hhciA6IGludCAtPiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc2tpcF9jaGFyIGxpbSBpYl0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuICopXG5cbiAgdmFsIGlnbm9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5pZ25vcmVfY2hhciBpYiBsaW1dIGlnbm9yZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZFxuICAgICBkZWNyZW1lbnRzIHRoZSBsaW1pdC4gKilcblxuICB2YWwgdG9rZW4gOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcudG9rZW4gaWJdIHJldHVybnMgdGhlIHN0cmluZyBzdG9yZWQgaW50byB0aGUgdG9rZW5cbiAgICAgYnVmZmVyIG9mIHRoZSBzY2FubmluZyBidWZmZXI6IGl0IHJldHVybnMgdGhlIHRva2VuIG1hdGNoZWQgYnkgdGhlXG4gICAgIGZvcm1hdC4gKilcblxuICB2YWwgcmVzZXRfdG9rZW4gOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLnJlc2V0X3Rva2VuIGliXSByZXNldHMgdGhlIHRva2VuIGJ1ZmZlciBvZlxuICAgICB0aGUgZ2l2ZW4gc2Nhbm5pbmcgYnVmZmVyLiAqKVxuXG4gIHZhbCBjaGFyX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmNoYXJfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAgIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgbGluZV9jb3VudCA6IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5saW5lX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmV3IGxpbmVcbiAgICAgY2hhcmFjdGVycyByZWFkIHNvIGZhciBmcm9tIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIHRva2VuX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnRva2VuX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIHJlYWRcbiAgICAgc28gZmFyIGZyb20gW2liXS4gKilcblxuICB2YWwgZW9mIDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lb2YgaWJdIHJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgZW5kX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBlbmQgb2YgaW5wdXQgY29uZGl0aW9uXG4gICAgIG9mIHRoZSBnaXZlbiBidWZmZXIgKGlmIG5vIGNoYXIgaGFzIGV2ZXIgYmVlbiByZWFkLCBhbiBhdHRlbXB0IHRvXG4gICAgIHJlYWQgb25lIGlzIHBlcmZvcm1lZCkuICopXG5cbiAgdmFsIGJlZ2lubmluZ19vZl9pbnB1dCA6IHNjYW5idWYgLT4gYm9vbFxuICAoKiBbU2Nhbm5pbmcuYmVnaW5uaW5nX29mX2lucHV0IGliXSB0ZXN0cyB0aGUgYmVnaW5uaW5nIG9mIGlucHV0XG4gICAgIGNvbmRpdGlvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBuYW1lX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBzdHJpbmdcbiAgKCogW1NjYW5uaW5nLm5hbWVfb2ZfaW5wdXQgaWJdIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlclxuICAgICBzb3VyY2UgZm9yIGlucHV0IGJ1ZmZlciBbaWJdLiAqKVxuXG4gIHZhbCBvcGVuX2luIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIG9wZW5faW5fYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZSA6IGZpbGVfbmFtZSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2ZpbGVfYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fc3RyaW5nIDogc3RyaW5nIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZnVuY3Rpb24gOiAodW5pdCAtPiBjaGFyKSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG5cbiAgdmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0XG5cbmVuZFxuXG5cbm1vZHVsZSBTY2FubmluZyA6IFNDQU5OSU5HID0gc3RydWN0XG5cbiAgKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIHNjYW5mLiAqKVxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdHlwZSBpbl9jaGFubmVsX25hbWUgPVxuICAgIHwgRnJvbV9jaGFubmVsIG9mIFN0ZGxpYi5pbl9jaGFubmVsXG4gICAgfCBGcm9tX2ZpbGUgb2YgZmlsZV9uYW1lICogU3RkbGliLmluX2NoYW5uZWxcbiAgICB8IEZyb21fZnVuY3Rpb25cbiAgICB8IEZyb21fc3RyaW5nXG5cblxuICB0eXBlIGluX2NoYW5uZWwgPSB7XG4gICAgbXV0YWJsZSBpY19lb2YgOiBib29sO1xuICAgIG11dGFibGUgaWNfY3VycmVudF9jaGFyIDogY2hhcjtcbiAgICBtdXRhYmxlIGljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBpY19jaGFyX2NvdW50IDogaW50O1xuICAgIG11dGFibGUgaWNfbGluZV9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGljX3Rva2VuX2NvdW50IDogaW50O1xuICAgIGljX2dldF9uZXh0X2NoYXIgOiB1bml0IC0+IGNoYXI7XG4gICAgaWNfdG9rZW5fYnVmZmVyIDogQnVmZmVyLnQ7XG4gICAgaWNfaW5wdXRfbmFtZSA6IGluX2NoYW5uZWxfbmFtZTtcbiAgfVxuXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIGxldCBudWxsX2NoYXIgPSAnXFwwMDAnXG5cbiAgKCogUmVhZHMgYSBuZXcgY2hhcmFjdGVyIGZyb20gaW5wdXQgYnVmZmVyLlxuICAgICBOZXh0X2NoYXIgbmV2ZXIgZmFpbHMsIGV2ZW4gaW4gY2FzZSBvZiBlbmQgb2YgaW5wdXQ6XG4gICAgIGl0IHRoZW4gc2ltcGx5IHNldHMgdGhlIGVuZCBvZiBmaWxlIGNvbmRpdGlvbi4gKilcbiAgbGV0IG5leHRfY2hhciBpYiA9XG4gICAgdHJ5XG4gICAgICBsZXQgYyA9IGliLmljX2dldF9uZXh0X2NoYXIgKCkgaW5cbiAgICAgIGliLmljX2N1cnJlbnRfY2hhciA8LSBjO1xuICAgICAgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDwtIHRydWU7XG4gICAgICBpYi5pY19jaGFyX2NvdW50IDwtIHN1Y2MgaWIuaWNfY2hhcl9jb3VudDtcbiAgICAgIGlmIGMgPSAnXFxuJyB0aGVuIGliLmljX2xpbmVfY291bnQgPC0gc3VjYyBpYi5pY19saW5lX2NvdW50O1xuICAgICAgYyB3aXRoXG4gICAgfCBFbmRfb2ZfZmlsZSAtPlxuICAgICAgbGV0IGMgPSBudWxsX2NoYXIgaW5cbiAgICAgIGliLmljX2N1cnJlbnRfY2hhciA8LSBjO1xuICAgICAgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDwtIGZhbHNlO1xuICAgICAgaWIuaWNfZW9mIDwtIHRydWU7XG4gICAgICBjXG5cblxuICBsZXQgcGVla19jaGFyIGliID1cbiAgICBpZiBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWRcbiAgICB0aGVuIGliLmljX2N1cnJlbnRfY2hhclxuICAgIGVsc2UgbmV4dF9jaGFyIGliXG5cblxuICAoKiBSZXR1cm5zIGEgdmFsaWQgY3VycmVudCBjaGFyIGZvciB0aGUgaW5wdXQgYnVmZmVyLiBJbiBwYXJ0aWN1bGFyXG4gICAgIG5vIGlycmVsZXZhbnQgbnVsbCBjaGFyYWN0ZXIgKGFzIHNldCBieSBbbmV4dF9jaGFyXSBpbiBjYXNlIG9mIGVuZFxuICAgICBvZiBpbnB1dCkgaXMgcmV0dXJuZWQsIHNpbmNlIFtFbmRfb2ZfZmlsZV0gaXMgcmFpc2VkIHdoZW5cbiAgICAgW25leHRfY2hhcl0gc2V0cyB0aGUgZW5kIG9mIGZpbGUgY29uZGl0aW9uIHdoaWxlIHRyeWluZyB0byByZWFkIGFcbiAgICAgbmV3IGNoYXJhY3Rlci4gKilcbiAgbGV0IGNoZWNrZWRfcGVla19jaGFyIGliID1cbiAgICBsZXQgYyA9IHBlZWtfY2hhciBpYiBpblxuICAgIGlmIGliLmljX2VvZiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAgIGNcblxuXG4gIGxldCBlbmRfb2ZfaW5wdXQgaWIgPVxuICAgIGlnbm9yZSAocGVla19jaGFyIGliKTtcbiAgICBpYi5pY19lb2ZcblxuXG4gIGxldCBlb2YgaWIgPSBpYi5pY19lb2ZcblxuICBsZXQgYmVnaW5uaW5nX29mX2lucHV0IGliID0gaWIuaWNfY2hhcl9jb3VudCA9IDBcblxuICBsZXQgbmFtZV9vZl9pbnB1dCBpYiA9XG4gICAgbWF0Y2ggaWIuaWNfaW5wdXRfbmFtZSB3aXRoXG4gICAgfCBGcm9tX2NoYW5uZWwgX2ljIC0+IFwidW5uYW1lZCBTdGRsaWIgaW5wdXQgY2hhbm5lbFwiXG4gICAgfCBGcm9tX2ZpbGUgKGZuYW1lLCBfaWMpIC0+IGZuYW1lXG4gICAgfCBGcm9tX2Z1bmN0aW9uIC0+IFwidW5uYW1lZCBmdW5jdGlvblwiXG4gICAgfCBGcm9tX3N0cmluZyAtPiBcInVubmFtZWQgY2hhcmFjdGVyIHN0cmluZ1wiXG5cblxuICBsZXQgY2hhcl9jb3VudCBpYiA9XG4gICAgaWYgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkXG4gICAgdGhlbiBpYi5pY19jaGFyX2NvdW50IC0gMVxuICAgIGVsc2UgaWIuaWNfY2hhcl9jb3VudFxuXG5cbiAgbGV0IGxpbmVfY291bnQgaWIgPSBpYi5pY19saW5lX2NvdW50XG5cbiAgbGV0IHJlc2V0X3Rva2VuIGliID0gQnVmZmVyLnJlc2V0IGliLmljX3Rva2VuX2J1ZmZlclxuXG4gIGxldCBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYiA9IGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSBmYWxzZVxuXG4gIGxldCB0b2tlbiBpYiA9XG4gICAgbGV0IHRva2VuX2J1ZmZlciA9IGliLmljX3Rva2VuX2J1ZmZlciBpblxuICAgIGxldCB0b2sgPSBCdWZmZXIuY29udGVudHMgdG9rZW5fYnVmZmVyIGluXG4gICAgQnVmZmVyLmNsZWFyIHRva2VuX2J1ZmZlcjtcbiAgICBpYi5pY190b2tlbl9jb3VudCA8LSBzdWNjIGliLmljX3Rva2VuX2NvdW50O1xuICAgIHRva1xuXG5cbiAgbGV0IHRva2VuX2NvdW50IGliID0gaWIuaWNfdG9rZW5fY291bnRcblxuICBsZXQgc2tpcF9jaGFyIHdpZHRoIGliID1cbiAgICBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYjtcbiAgICB3aWR0aFxuXG5cbiAgbGV0IGlnbm9yZV9jaGFyIHdpZHRoIGliID0gc2tpcF9jaGFyICh3aWR0aCAtIDEpIGliXG5cbiAgbGV0IHN0b3JlX2NoYXIgd2lkdGggaWIgYyA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGliLmljX3Rva2VuX2J1ZmZlciBjO1xuICAgIGlnbm9yZV9jaGFyIHdpZHRoIGliXG5cblxuICBsZXQgZGVmYXVsdF90b2tlbl9idWZmZXJfc2l6ZSA9IDEwMjRcblxuICBsZXQgY3JlYXRlIGluYW1lIG5leHQgPSB7XG4gICAgaWNfZW9mID0gZmFsc2U7XG4gICAgaWNfY3VycmVudF9jaGFyID0gbnVsbF9jaGFyO1xuICAgIGljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA9IGZhbHNlO1xuICAgIGljX2NoYXJfY291bnQgPSAwO1xuICAgIGljX2xpbmVfY291bnQgPSAwO1xuICAgIGljX3Rva2VuX2NvdW50ID0gMDtcbiAgICBpY19nZXRfbmV4dF9jaGFyID0gbmV4dDtcbiAgICBpY190b2tlbl9idWZmZXIgPSBCdWZmZXIuY3JlYXRlIGRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemU7XG4gICAgaWNfaW5wdXRfbmFtZSA9IGluYW1lO1xuICB9XG5cblxuICBsZXQgZnJvbV9zdHJpbmcgcyA9XG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA+PSBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZSBlbHNlXG4gICAgICBsZXQgYyA9IHMuWyFpXSBpblxuICAgICAgaW5jciBpO1xuICAgICAgYyBpblxuICAgIGNyZWF0ZSBGcm9tX3N0cmluZyBuZXh0XG5cblxuICBsZXQgZnJvbV9mdW5jdGlvbiA9IGNyZWF0ZSBGcm9tX2Z1bmN0aW9uXG5cbiAgKCogU2Nhbm5pbmcgZnJvbSBhbiBpbnB1dCBjaGFubmVsLiAqKVxuXG4gICgqIFBvc2l0aW9uIG9mIHRoZSBwcm9ibGVtOlxuXG4gICAgIFdlIGNhbm5vdCBwcmV2ZW50IHRoZSBzY2FubmluZyBtZWNoYW5pc20gdG8gdXNlIG9uZSBsb29rYWhlYWQgY2hhcmFjdGVyLFxuICAgICBpZiBuZWVkZWQgYnkgdGhlIHNlbWFudGljcyBvZiB0aGUgZm9ybWF0IHN0cmluZyBzcGVjaWZpY2F0aW9ucyAoZS5nLiBhXG4gICAgIHRyYWlsaW5nICdza2lwIHNwYWNlJyBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtYXQgc3RyaW5nKTsgaW4gdGhpcyBjYXNlLFxuICAgICB0aGUgbWFuZGF0b3J5IGxvb2thaGVhZCBjaGFyYWN0ZXIgaXMgaW5kZWVkIHJlYWQgZnJvbSB0aGUgaW5wdXQgYW5kIG5vdFxuICAgICB1c2VkIHRvIHJldHVybiB0aGUgdG9rZW4gcmVhZC4gSXQgaXMgdGh1cyBtYW5kYXRvcnkgdG8gYmUgYWJsZSB0byBzdG9yZVxuICAgICBhbiB1bnVzZWQgbG9va2FoZWFkIGNoYXJhY3RlciBzb21ld2hlcmUgdG8gZ2V0IGl0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgb2YgdGhlIG5leHQgc2Nhbi5cblxuICAgICBUbyBjaXJjdW12ZW50IHRoaXMgcHJvYmxlbSwgYWxsIHRoZSBzY2FubmluZyBmdW5jdGlvbnMgZ2V0IGEgbG93IGxldmVsXG4gICAgIGlucHV0IGJ1ZmZlciBhcmd1bWVudCB3aGVyZSB0aGV5IHN0b3JlIHRoZSBsb29rYWhlYWQgY2hhcmFjdGVyIHdoZW5cbiAgICAgbmVlZGVkOyBhZGRpdGlvbmFsbHksIHRoZSBpbnB1dCBidWZmZXIgaXMgdGhlIG9ubHkgc291cmNlIG9mIGNoYXJhY3RlciBvZlxuICAgICBhIHNjYW5uZXIuIFRoZSBbc2NhbmJ1Zl0gaW5wdXQgYnVmZmVycyBhcmUgZGVmaW5lZCBpbiBtb2R1bGUgeyFTY2FubmluZ30uXG5cbiAgICAgTm93IHdlIHVuZGVyc3RhbmQgdGhhdCBpdCBpcyBleHRyZW1lbHkgaW1wb3J0YW50IHRoYXQgcmVsYXRlZCBhbmRcbiAgICAgc3VjY2Vzc2l2ZSBjYWxscyB0byBzY2FubmVycyBpbmRlZWQgcmVhZCBmcm9tIHRoZSBzYW1lIGlucHV0IGJ1ZmZlci5cbiAgICAgSW4gZWZmZWN0LCBpZiBhIHNjYW5uZXIgW3NjYW4xXSBpcyByZWFkaW5nIGZyb20gW2liMV0gYW5kIHN0b3JlcyBhblxuICAgICB1bnVzZWQgbG9va2FoZWFkIGNoYXJhY3RlciBbYzFdIGludG8gaXRzIGlucHV0IGJ1ZmZlciBbaWIxXSwgdGhlblxuICAgICBhbm90aGVyIHNjYW5uZXIgW3NjYW4yXSBub3QgcmVhZGluZyBmcm9tIHRoZSBzYW1lIGJ1ZmZlciBbaWIxXSB3aWxsIG1pc3NcbiAgICAgdGhlIGNoYXJhY3RlciBbYzFdLCBzZWVtaW5nbHkgdmFuaXNoZWQgaW4gdGhlIGFpciBmcm9tIHRoZSBwb2ludCBvZiB2aWV3XG4gICAgIG9mIFtzY2FuMl0uXG5cbiAgICAgVGhpcyBtZWNoYW5pc20gd29ya3MgcGVyZmVjdGx5IHRvIHJlYWQgZnJvbSBzdHJpbmdzLCBmcm9tIGZpbGVzLCBhbmQgZnJvbVxuICAgICBmdW5jdGlvbnMsIHNpbmNlIGluIHRob3NlIGNhc2VzLCBhbGxvY2F0aW5nIHR3byBidWZmZXJzIHJlYWRpbmcgZnJvbSB0aGVcbiAgICAgc2FtZSBzb3VyY2UgaXMgdW5uYXR1cmFsLlxuXG4gICAgIFN0aWxsLCB0aGVyZSBpcyBhIGRpZmZpY3VsdHkgaW4gdGhlIGNhc2Ugb2Ygc2Nhbm5pbmcgZnJvbSBhbiBpbnB1dFxuICAgICBjaGFubmVsLiBJbiBlZmZlY3QsIHdoZW4gc2Nhbm5pbmcgZnJvbSBhbiBpbnB1dCBjaGFubmVsIFtpY10sIHRoaXMgY2hhbm5lbFxuICAgICBtYXkgbm90IGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB3aXRoaW4gdGhpcyBsaWJyYXJ5LiBIZW5jZSwgaXQgbWF5IGJlXG4gICAgIHNoYXJlZCAodHdvIGZ1bmN0aW9ucyBvZiB0aGUgdXNlcidzIHByb2dyYW0gbWF5IHN1Y2Nlc3NpdmVseSByZWFkIGZyb21cbiAgICAgW2ljXSkuIFRoaXMgaXMgaGlnaGx5IGVycm9yIHByb25lIHNpbmNlLCBvbmUgb2YgdGhlIGZ1bmN0aW9uIG1heSBzZWVrIHRoZVxuICAgICBpbnB1dCBjaGFubmVsLCB3aGlsZSB0aGUgb3RoZXIgZnVuY3Rpb24gaGFzIHN0aWxsIGFuIHVudXNlZCBsb29rYWhlYWRcbiAgICAgY2hhcmFjdGVyIGluIGl0cyBpbnB1dCBidWZmZXIuIEluIGNvbmNsdXNpb24sIHlvdSBzaG91bGQgbmV2ZXIgbWl4IGRpcmVjdFxuICAgICBsb3cgbGV2ZWwgcmVhZGluZyBhbmQgaGlnaCBsZXZlbCBzY2FubmluZyBmcm9tIHRoZSBzYW1lIGlucHV0IGNoYW5uZWwuXG5cbiAgKilcblxuICAoKiBQZXJmb3JtIGJ1ZmZlcml6ZWQgaW5wdXQgdG8gaW1wcm92ZSBlZmZpY2llbmN5LiAqKVxuICBsZXQgZmlsZV9idWZmZXJfc2l6ZSA9IHJlZiAxMDI0XG5cbiAgKCogVGhlIHNjYW5uZXIgY2xvc2VzIHRoZSBpbnB1dCBjaGFubmVsIGF0IGVuZCBvZiBpbnB1dC4gKilcbiAgbGV0IHNjYW5fY2xvc2VfYXRfZW5kIGljID0gU3RkbGliLmNsb3NlX2luIGljOyByYWlzZSBFbmRfb2ZfZmlsZVxuXG4gICgqIFRoZSBzY2FubmVyIGRvZXMgbm90IGNsb3NlIHRoZSBpbnB1dCBjaGFubmVsIGF0IGVuZCBvZiBpbnB1dDpcbiAgICAgaXQganVzdCByYWlzZXMgW0VuZF9vZl9maWxlXS4gKilcbiAgbGV0IHNjYW5fcmFpc2VfYXRfZW5kIF9pYyA9IHJhaXNlIEVuZF9vZl9maWxlXG5cbiAgbGV0IGZyb21faWMgc2Nhbl9jbG9zZV9pYyBpbmFtZSBpYyA9XG4gICAgbGV0IGxlbiA9ICFmaWxlX2J1ZmZlcl9zaXplIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGxpbSA9IHJlZiAwIGluXG4gICAgbGV0IGVvZiA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBuZXh0ICgpID1cbiAgICAgIGlmICFpIDwgIWxpbSB0aGVuIGJlZ2luIGxldCBjID0gQnl0ZXMuZ2V0IGJ1ZiAhaSBpbiBpbmNyIGk7IGMgZW5kIGVsc2VcbiAgICAgIGlmICFlb2YgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZSBlbHNlIGJlZ2luXG4gICAgICAgIGxpbSA6PSBpbnB1dCBpYyBidWYgMCBsZW47XG4gICAgICAgIGlmICFsaW0gPSAwIHRoZW4gYmVnaW4gZW9mIDo9IHRydWU7IHNjYW5fY2xvc2VfaWMgaWMgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBpIDo9IDE7XG4gICAgICAgICAgQnl0ZXMuZ2V0IGJ1ZiAwXG4gICAgICAgIGVuZFxuICAgICAgZW5kIGluXG4gICAgY3JlYXRlIGluYW1lIG5leHRcblxuXG4gIGxldCBmcm9tX2ljX2Nsb3NlX2F0X2VuZCA9IGZyb21faWMgc2Nhbl9jbG9zZV9hdF9lbmRcbiAgbGV0IGZyb21faWNfcmFpc2VfYXRfZW5kID0gZnJvbV9pYyBzY2FuX3JhaXNlX2F0X2VuZFxuXG4gICgqIFRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLlxuICAgICBPbmUgY291bGQgdHJ5IHRvIGRlZmluZSBbc3RkaW5dIGFzIGEgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgYSBjaGFyYWN0ZXJcbiAgICAgYXQgYSB0aW1lIChubyBidWZmZXJpemF0aW9uIGF0IGFsbCksIGJ1dCB1bmZvcnR1bmF0ZWx5IHRoZSB0b3AtbGV2ZWxcbiAgICAgaW50ZXJhY3Rpb24gd291bGQgYmUgd3JvbmcuIFRoaXMgaXMgZHVlIHRvIHNvbWUga2luZCBvZlxuICAgICAncmFjZSBjb25kaXRpb24nIHdoZW4gcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLFxuICAgICBzaW5jZSB0aGUgaW50ZXJhY3RpdmUgY29tcGlsZXIgYW5kIFtTY2FuZi5zY2FuZl0gd2lsbCBzaW11bHRhbmVvdXNseVxuICAgICByZWFkIHRoZSBtYXRlcmlhbCB0aGV5IG5lZWQgZnJvbSBbU3RkbGliLnN0ZGluXTsgdGhlbiwgY29uZnVzaW9uXG4gICAgIHdpbGwgcmVzdWx0IGZyb20gd2hhdCBzaG91bGQgYmUgcmVhZCBieSB0aGUgdG9wLWxldmVsIGFuZCB3aGF0IHNob3VsZCBiZVxuICAgICByZWFkIGJ5IFtTY2FuZi5zY2FuZl0uXG4gICAgIFRoaXMgaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIGJ5IHRoZSBvbmUgY2hhcmFjdGVyIGxvb2thaGVhZCB0aGF0XG4gICAgIFtTY2FuZi5zY2FuZl0gaXMgc29tZXRpbWVzIG9ibGlnZWQgdG8gbWFpbnRhaW46IHRoZSBsb29rYWhlYWQgY2hhcmFjdGVyXG4gICAgIHdpbGwgYmUgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBbU2NhbmYuc2NhbmZdIGVudHJ5LCBzZWVtaW5nbHkgY29taW5nIGZyb21cbiAgICAgbm93aGVyZS5cbiAgICAgQWxzbyBubyBbRW5kX29mX2ZpbGVdIGlzIHJhaXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBzdGRpbjogaWYgbm90IGVub3VnaFxuICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiByZWFkLCB3ZSBzaW1wbHkgYXNrIHRvIHJlYWQgbW9yZS4gKilcbiAgbGV0IHN0ZGluID1cbiAgICBmcm9tX2ljIHNjYW5fcmFpc2VfYXRfZW5kXG4gICAgICAoRnJvbV9maWxlIChcIi1cIiwgU3RkbGliLnN0ZGluKSkgU3RkbGliLnN0ZGluXG5cbiAgbGV0IG9wZW5faW5fZmlsZSBvcGVuX2luIGZuYW1lID1cbiAgICBtYXRjaCBmbmFtZSB3aXRoXG4gICAgfCBcIi1cIiAtPiBzdGRpblxuICAgIHwgZm5hbWUgLT5cbiAgICAgIGxldCBpYyA9IG9wZW5faW4gZm5hbWUgaW5cbiAgICAgIGZyb21faWNfY2xvc2VfYXRfZW5kIChGcm9tX2ZpbGUgKGZuYW1lLCBpYykpIGljXG5cblxuICBsZXQgb3Blbl9pbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pblxuICBsZXQgb3Blbl9pbl9iaW4gPSBvcGVuX2luX2ZpbGUgU3RkbGliLm9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fZmlsZSA9IG9wZW5faW5cbiAgbGV0IGZyb21fZmlsZV9iaW4gPSBvcGVuX2luX2JpblxuXG4gIGxldCBmcm9tX2NoYW5uZWwgaWMgPVxuICAgIGZyb21faWNfcmFpc2VfYXRfZW5kIChGcm9tX2NoYW5uZWwgaWMpIGljXG5cblxuICBsZXQgY2xvc2VfaW4gaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIGljIC0+XG4gICAgICBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZmlsZSAoX2ZuYW1lLCBpYykgLT4gU3RkbGliLmNsb3NlX2luIGljXG4gICAgfCBGcm9tX2Z1bmN0aW9uIHwgRnJvbV9zdHJpbmcgLT4gKClcblxuZW5kXG5cblxuKCogRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIHNjYW5uZXIgPVxuICAgICAoJ2EsIFNjYW5uaW5nLmluX2NoYW5uZWwsICdiLCAnYywgJ2EgLT4gJ2QsICdkKSBmb3JtYXQ2IC0+ICdjXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBzY2FubmVyX29wdCA9XG4gICAgICgnYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgJ2IsICdjLCAnYSAtPiAnZCBvcHRpb24sICdkKSBmb3JtYXQ2IC0+ICdjXG5cbigqIFJlcG9ydGluZyBlcnJvcnMuICopXG5leGNlcHRpb24gU2Nhbl9mYWlsdXJlIG9mIHN0cmluZ1xuXG5sZXQgYmFkX2lucHV0IHMgPSByYWlzZSAoU2Nhbl9mYWlsdXJlIHMpXG5cbmxldCBiYWRfaW5wdXRfZXNjYXBlIGMgPVxuICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyICVDXCIgYylcblxuXG5sZXQgYmFkX3Rva2VuX2xlbmd0aCBtZXNzYWdlID1cbiAgYmFkX2lucHV0XG4gICAgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgXCJzY2FubmluZyBvZiAlcyBmYWlsZWQ6IFxcXG4gICAgICAgIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIHdhcyB0b28gc2hvcnQgZm9yIHRva2VuXCJcbiAgICAgICBtZXNzYWdlKVxuXG5cbmxldCBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgcHJlbWF0dXJlIGVuZCBvZiBmaWxlIG9jY3VycmVkIGJlZm9yZSBlbmQgb2YgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vIGRvdCBvciBleHBvbmVudCBwYXJ0IGZvdW5kIGluIGZsb2F0IHRva2VuXCJcblxuXG5sZXQgYmFkX2hleF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vdCBhIHZhbGlkIGZsb2F0IGluIGhleGFkZWNpbWFsIG5vdGF0aW9uXCJcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoX2VyciBjIGNpID1cbiAgUHJpbnRmLnNwcmludGYgXCJsb29raW5nIGZvciAlQywgZm91bmQgJUNcIiBjIGNpXG5cblxubGV0IGNoYXJhY3Rlcl9taXNtYXRjaCBjIGNpID1cbiAgYmFkX2lucHV0IChjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kpXG5cblxubGV0IHJlYyBza2lwX3doaXRlcyBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSB0aGVuIGJlZ2luXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT5cbiAgICAgIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBza2lwX3doaXRlcyBpYlxuICAgIHwgXyAtPiAoKVxuICBlbmRcblxuXG4oKiBDaGVja2luZyB0aGF0IFtjXSBpcyBpbmRlZWQgaW4gdGhlIGlucHV0LCB0aGVuIHNraXBzIGl0LlxuICAgSW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyIFtjXSBoYXMgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0aGVcbiAgIGZvcm1hdCBhcyBiZWluZyBtYW5kYXRvcnkgaW4gdGhlIGlucHV0OyBoZW5jZSB3ZSBzaG91bGQgZmFpbCB3aXRoXG4gICBbRW5kX29mX2ZpbGVdIGluIGNhc2Ugb2YgZW5kX29mX2lucHV0LlxuICAgKFJlbWVtYmVyIHRoYXQgW1NjYW5fZmFpbHVyZV0gaXMgcmFpc2VkIG9ubHkgd2hlbiAod2UgY2FuIHByb3ZlIGJ5XG4gICBldmlkZW5jZSkgdGhhdCB0aGUgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGZvcm1hdCBzdHJpbmcgZ2l2ZW4uIFdlIG11c3RcbiAgIHRodXMgZGlmZmVyZW50aWF0ZSBbRW5kX29mX2ZpbGVdIGFzIGFuIGVycm9yIGR1ZSB0byBsYWNrIG9mIGlucHV0LCBhbmRcbiAgIFtTY2FuX2ZhaWx1cmVdIHdoaWNoIGlzIGR1ZSB0byBwcm92YWJseSB3cm9uZyBpbnB1dC4gSSBhbSBub3Qgc3VyZSB0aGlzIGlzXG4gICB3b3J0aCB0aGUgYnVyZGVuOiBpdCBpcyBjb21wbGV4IGFuZCBzb21laG93IHN1YmxpbWluYWw7IHNob3VsZCBiZSBjbGVhcmVyXG4gICB0byBmYWlsIHdpdGggU2Nhbl9mYWlsdXJlIFwiTm90IGVub3VnaCBpbnB1dCB0byBjb21wbGV0ZSBzY2FubmluZ1wiISlcblxuICAgVGhhdCdzIHdoeSwgd2FpdGluZyBmb3IgYSBiZXR0ZXIgc29sdXRpb24sIHdlIHVzZSBjaGVja2VkX3BlZWtfY2hhciBoZXJlLlxuICAgV2UgYXJlIGFsc28gY2FyZWZ1bCB0byB0cmVhdCBcIlxcclxcblwiIGluIHRoZSBpbnB1dCBhcyBhbiBlbmQgb2YgbGluZSBtYXJrZXI6XG4gICBpdCBhbHdheXMgbWF0Y2hlcyBhICdcXG4nIHNwZWNpZmljYXRpb24gaW4gdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcuICopXG5sZXQgcmVjIGNoZWNrX2NoYXIgaWIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcgJyAtPiBza2lwX3doaXRlcyBpYlxuICB8ICdcXG4nIC0+IGNoZWNrX25ld2xpbmUgaWJcbiAgfCBjIC0+IGNoZWNrX3RoaXNfY2hhciBpYiBjXG5cbmFuZCBjaGVja190aGlzX2NoYXIgaWIgYyA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGNpID0gYyB0aGVuIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliIGVsc2VcbiAgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuYW5kIGNoZWNrX25ld2xpbmUgaWIgPVxuICBsZXQgY2kgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBtYXRjaCBjaSB3aXRoXG4gIHwgJ1xcbicgLT4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgfCAnXFxyJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYjsgY2hlY2tfdGhpc19jaGFyIGliICdcXG4nXG4gIHwgXyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcbicgY2lcblxuXG4oKiBFeHRyYWN0aW5nIHRva2VucyBmcm9tIHRoZSBvdXRwdXQgdG9rZW4gYnVmZmVyLiAqKVxuXG5sZXQgdG9rZW5fY2hhciBpYiA9IChTY2FubmluZy50b2tlbiBpYikuWzBdXG5cbmxldCB0b2tlbl9zdHJpbmcgPSBTY2FubmluZy50b2tlblxuXG5sZXQgdG9rZW5fYm9vbCBpYiA9XG4gIG1hdGNoIFNjYW5uaW5nLnRva2VuIGliIHdpdGhcbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgcyAtPiBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaW52YWxpZCBib29sZWFuICclcydcIiBzKVxuXG5cbigqIFRoZSB0eXBlIG9mIGludGVnZXIgY29udmVyc2lvbnMuICopXG50eXBlIGludGVnZXJfY29udmVyc2lvbiA9XG4gIHwgQl9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGJpbmFyeSBjb252ZXJzaW9uICopXG4gIHwgRF9jb252ZXJzaW9uICgqIFNpZ25lZCBkZWNpbWFsIGNvbnZlcnNpb24gKilcbiAgfCBJX2NvbnZlcnNpb24gKCogU2lnbmVkIGludGVnZXIgY29udmVyc2lvbiAqKVxuICB8IE9fY29udmVyc2lvbiAoKiBVbnNpZ25lZCBvY3RhbCBjb252ZXJzaW9uICopXG4gIHwgVV9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IFhfY29udmVyc2lvbiAoKiBVbnNpZ25lZCBoZXhhZGVjaW1hbCBjb252ZXJzaW9uICopXG5cblxubGV0IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyID0gZnVuY3Rpb25cbiAgfCAnYicgLT4gQl9jb252ZXJzaW9uXG4gIHwgJ2QnIC0+IERfY29udmVyc2lvblxuICB8ICdpJyAtPiBJX2NvbnZlcnNpb25cbiAgfCAnbycgLT4gT19jb252ZXJzaW9uXG4gIHwgJ3UnIC0+IFVfY29udmVyc2lvblxuICB8ICd4JyB8ICdYJyAtPiBYX2NvbnZlcnNpb25cbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5cbigqIEV4dHJhY3QgYW4gaW50ZWdlciBsaXRlcmFsIHRva2VuLlxuICAgU2luY2UgdGhlIGZ1bmN0aW9ucyBTdGRsaWIuKmludCpfb2Zfc3RyaW5nIGRvIG5vdCBhY2NlcHQgYSBsZWFkaW5nICssXG4gICB3ZSBza2lwIGl0IGlmIG5lY2Vzc2FyeS4gKilcbmxldCB0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliID1cbiAgbGV0IHRvayA9XG4gICAgbWF0Y2ggY29udiB3aXRoXG4gICAgfCBEX2NvbnZlcnNpb24gfCBJX2NvbnZlcnNpb24gLT4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFVfY29udmVyc2lvbiAtPiBcIjB1XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgT19jb252ZXJzaW9uIC0+IFwiMG9cIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBYX2NvbnZlcnNpb24gLT4gXCIweFwiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IEJfY29udmVyc2lvbiAtPiBcIjBiXCIgXiBTY2FubmluZy50b2tlbiBpYiBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggdG9rIGluXG4gIGlmIGwgPSAwIHx8IHRvay5bMF0gPD4gJysnIHRoZW4gdG9rIGVsc2UgU3RyaW5nLnN1YiB0b2sgMSAobCAtIDEpXG5cblxuKCogQWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbnVtYmVyIHJhaXNlIHRoZSBleGNlcHRpb25cbiAgIEZhaWx1cmUgd2hlbiB0aGUgY29udmVyc2lvbiBpcyBub3QgcG9zc2libGUuXG4gICBUaGlzIGV4Y2VwdGlvbiBpcyB0aGVuIHRyYXBwZWQgaW4gW2tzY2FuZl0uICopXG5sZXQgdG9rZW5faW50IGNvbnYgaWIgPSBpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxuXG5sZXQgdG9rZW5fZmxvYXQgaWIgPSBmbG9hdF9vZl9zdHJpbmcgKFNjYW5uaW5nLnRva2VuIGliKVxuXG4oKiBUbyBzY2FuIG5hdGl2ZSBpbnRzLCBpbnQzMiBhbmQgaW50NjQgaW50ZWdlcnMuXG4gICBXZSBjYW5ub3QgYWNjZXNzIHRvIGNvbnZlcnNpb25zIHRvL2Zyb20gc3RyaW5ncyBmb3IgdGhvc2UgdHlwZXMsXG4gICBOYXRpdmVpbnQub2Zfc3RyaW5nLCBJbnQzMi5vZl9zdHJpbmcsIGFuZCBJbnQ2NC5vZl9zdHJpbmcsXG4gICBzaW5jZSB0aG9zZSBtb2R1bGVzIGFyZSBub3QgYXZhaWxhYmxlIHRvIFtTY2FuZl0uXG4gICBIb3dldmVyLCB3ZSBjYW4gYmluZCBhbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHByaW1pdGl2ZXMgdGhhdCBhcmVcbiAgIGF2YWlsYWJsZSBpbiB0aGUgcnVudGltZS4gKilcbmV4dGVybmFsIG5hdGl2ZWludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gbmF0aXZlaW50XG4gID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQzMl9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgaW50NjRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cblxubGV0IHRva2VuX25hdGl2ZWludCBjb252IGliID0gbmF0aXZlaW50X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcbmxldCB0b2tlbl9pbnQzMiBjb252IGliID0gaW50MzJfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDY0IGNvbnYgaWIgPSBpbnQ2NF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbigqIFNjYW5uaW5nIG51bWJlcnMuICopXG5cbigqIERpZ2l0cyBzY2FubmluZyBmdW5jdGlvbnMgc3VwcG9zZSB0aGF0IG9uZSBjaGFyYWN0ZXIgaGFzIGJlZW4gY2hlY2tlZCBhbmRcbiAgIGlzIGF2YWlsYWJsZSwgc2luY2UgdGhleSByZXR1cm4gYXQgZW5kIG9mIGZpbGUgd2l0aCB0aGUgY3VycmVudGx5IGZvdW5kXG4gICB0b2tlbiBzZWxlY3RlZC5cblxuICAgUHV0IGl0IGluIGFub3RoZXIgd2F5LCB0aGUgZGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzY2FuIGZvciBhIHBvc3NpYmx5XG4gICBlbXB0eSBzZXF1ZW5jZSBvZiBkaWdpdHMsIChoZW5jZSwgYSBzdWNjZXNzZnVsIHNjYW5uaW5nIGZyb20gb25lIG9mIHRob3NlXG4gICBmdW5jdGlvbnMgZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgdG9rZW4gaXMgYSB3ZWxsLWZvcm1lZCBudW1iZXI6IHRvIGdldCBhXG4gICB0cnVlIG51bWJlciwgaXQgaXMgbWFuZGF0b3J5IHRvIGNoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIHZhbGlkIGRpZ2l0IGlzXG4gICBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBkaWdpdCBzY2FubmluZyBmdW5jdGlvbnMpLiAqKVxuXG4oKiBUaGUgZGVjaW1hbCBjYXNlIGlzIHRyZWF0ZWQgZXNwZWNpYWxseSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzLiAqKVxubGV0IHJlYyBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8ICdfJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliIGluXG4gICAgc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWJcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRlY2ltYWwgZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IGMgLT5cbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIGRlY2ltYWwgZGlnaXRcIiBjKVxuXG5cbigqIFRvIHNjYW4gbnVtYmVycyBmcm9tIG90aGVyIGJhc2VzLCB3ZSB1c2UgYSBwcmVkaWNhdGUgYXJndW1lbnQgdG9cbiAgIHNjYW4gZGlnaXRzLiAqKVxubGV0IHNjYW5fZGlnaXRfc3RhciBkaWdpdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIHNjYW5fZGlnaXRzIHdpZHRoIGliID1cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBjIHdoZW4gZGlnaXRwIGMgLT5cbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8ICdfJyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICAgIHNjYW5fZGlnaXRzIHdpZHRoIGliXG4gICAgfCBfIC0+IHdpZHRoIGluXG4gIHNjYW5fZGlnaXRzIHdpZHRoIGliXG5cblxubGV0IHNjYW5fZGlnaXRfcGx1cyBiYXNpcyBkaWdpdHAgd2lkdGggaWIgPVxuICAoKiBFbnN1cmUgd2UgaGF2ZSBnb3QgZW5vdWdoIHdpZHRoIGxlZnQsXG4gICAgIGFuZCByZWFkIGF0IGxlYXN0IG9uZSBkaWdpdC4gKilcbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRpZ2l0c1wiIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBpZiBkaWdpdHAgYyB0aGVuXG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYlxuICBlbHNlXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcImNoYXJhY3RlciAlQyBpcyBub3QgYSB2YWxpZCAlcyBkaWdpdFwiIGMgYmFzaXMpXG5cblxubGV0IGlzX2JpbmFyeV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICcxJyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5cbmxldCBzY2FuX2JpbmFyeV9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJiaW5hcnlcIiBpc19iaW5hcnlfZGlnaXRcblxubGV0IGlzX29jdGFsX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzcnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fb2N0YWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwib2N0YWxcIiBpc19vY3RhbF9kaWdpdFxuXG5sZXQgaXNfaGV4YV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5faGV4YWRlY2ltYWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwiaGV4YWRlY2ltYWxcIiBpc19oZXhhX2RpZ2l0XG5cbigqIFNjYW4gYSBkZWNpbWFsIGludGVnZXIuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCA9IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzXG5cbmxldCBzY2FuX3NpZ24gd2lkdGggaWIgPVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcrJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCAnLScgLT4gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjXG4gIHwgXyAtPiB3aWR0aFxuXG5cbmxldCBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FuIGFuIHVuc2lnbmVkIGludGVnZXIgdGhhdCBjb3VsZCBiZSBnaXZlbiBpbiBhbnkgKGNvbW1vbikgYmFzaXMuXG4gICBJZiBkaWdpdHMgYXJlIHByZWZpeGVkIGJ5IG9uZSBvZiAweCwgMFgsIDBvLCBvciAwYiwgdGhlIG51bWJlciBpc1xuICAgYXNzdW1lZCB0byBiZSB3cml0dGVuIHJlc3BlY3RpdmVseSBpbiBoZXhhZGVjaW1hbCwgaGV4YWRlY2ltYWwsXG4gICBvY3RhbCwgb3IgYmluYXJ5LiAqKVxubGV0IHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICAgIGJlZ2luIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3gnIHwgJ1gnIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gICAgfCAnbycgLT4gc2Nhbl9vY3RhbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdiJyAtPiBzY2FuX2JpbmFyeV9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8IF8gLT4gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgZW5kXG4gIHwgXyAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5faW50X2NvbnZlcnNpb24gY29udiB3aWR0aCBpYiA9XG4gIG1hdGNoIGNvbnYgd2l0aFxuICB8IEJfY29udmVyc2lvbiAtPiBzY2FuX2JpbmFyeV9pbnQgd2lkdGggaWJcbiAgfCBEX2NvbnZlcnNpb24gLT4gc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICB8IElfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2ludCB3aWR0aCBpYlxuICB8IE9fY29udmVyc2lvbiAtPiBzY2FuX29jdGFsX2ludCB3aWR0aCBpYlxuICB8IFVfY29udmVyc2lvbiAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgWF9jb252ZXJzaW9uIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliXG5cblxuKCogU2Nhbm5pbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKilcblxuKCogRnJhY3Rpb25hbCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2ZyYWN0aW9uYWxfcGFydCB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBFeHAgcGFydCBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlZHVjZWQgdG8gMCBkaWdpdHMuICopXG5sZXQgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICdlJyB8ICdFJyBhcyBjIC0+XG4gICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBTY2FuIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIChub3QgdXNpbmcgdGhlXG4gICBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24gc2luY2UgdGhlIGludGVnZXIgcGFydCBjYW4gYmUgZW1wdHkpOlxuICAgYW4gb3B0aW9uYWwgc2lnbiwgZm9sbG93ZWQgYnkgYSBwb3NzaWJseSBlbXB0eSBzZXF1ZW5jZSBvZiBkZWNpbWFsXG4gICBkaWdpdHMgKGUuZy4gLS4xKS4gKilcbmxldCBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuXG5cbigqXG4gICBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgaGF2ZSAoYXMgZm91bmQgaW4gc2NhbmYubWxpKTpcbiAgIHRoZSBmaWVsZCB3aWR0aCBpcyBjb21wb3NlZCBvZiBhbiBvcHRpb25hbCBpbnRlZ2VyIGxpdGVyYWxcbiAgIGluZGljYXRpbmcgdGhlIG1heGltYWwgd2lkdGggb2YgdGhlIHRva2VuIHRvIHJlYWQuXG4gICBVbmZvcnR1bmF0ZWx5LCB0aGUgdHlwZS1jaGVja2VyIGxldCB0aGUgdXNlciB3cml0ZSBhbiBvcHRpb25hbCBwcmVjaXNpb24sXG4gICBzaW5jZSB0aGlzIGlzIHZhbGlkIGZvciBwcmludGYgZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRodXMsIHRoZSBuZXh0IHN0ZXAgZm9yIFNjYW5mIGlzIHRvIHN1cHBvcnQgYSBmdWxsIHdpZHRoIGFuZCBwcmVjaXNpb25cbiAgIGluZGljYXRpb24sIG1vcmUgb3IgbGVzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZm9yIHByaW50ZiwgcG9zc2libHkgZXh0ZW5kZWRcbiAgIHRvIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgW21heCwgbWluXSByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkXG4gICBmb3Igc3RyaW5ncy4gU29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBzcGVjIGZvciBzY2FuZi5tbGk6XG5cbiAgIFRoZSBvcHRpb25hbCBbd2lkdGhdIGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbWF4aW1hbFxuICAgd2lkdGggb2YgdGhlIHRva2VuIHJlYWQuIEZvciBpbnN0YW5jZSwgWyU2ZF0gcmVhZHMgYW4gaW50ZWdlcixcbiAgIGhhdmluZyBhdCBtb3N0IDYgY2hhcmFjdGVycy5cblxuICAgVGhlIG9wdGlvbmFsIFtwcmVjaXNpb25dIGlzIGEgZG90IFsuXSBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyOlxuXG4gICAtIGluIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgY29udmVyc2lvbnMgKFslZl0sIFslZV0sIFslZ10sIFslRl0sIFslRV0sXG4gICBhbmQgWyVGXSBjb252ZXJzaW9ucywgdGhlIFtwcmVjaXNpb25dIGluZGljYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2ZcbiAgIGRpZ2l0cyB0aGF0IG1heSBmb2xsb3cgdGhlIGRlY2ltYWwgcG9pbnQuIEZvciBpbnN0YW5jZSwgWyUuNGZdIHJlYWRzIGFcbiAgIFtmbG9hdF0gd2l0aCBhdCBtb3N0IDQgZnJhY3Rpb25hbCBkaWdpdHMsXG5cbiAgIC0gaW4gdGhlIHN0cmluZyBjb252ZXJzaW9ucyAoWyVzXSwgWyVTXSwgWyVcXFsgcmFuZ2UgXFxdXSksIGFuZCBpbiB0aGVcbiAgIGludGVnZXIgbnVtYmVyIGNvbnZlcnNpb25zIChbJWldLCBbJWRdLCBbJXVdLCBbJXhdLCBbJW9dLCBhbmQgdGhlaXJcbiAgIFtpbnQzMl0sIFtpbnQ2NF0sIGFuZCBbbmF0aXZlX2ludF0gY29ycmVzcG9uZGVudCksIHRoZSBbcHJlY2lzaW9uXVxuICAgaW5kaWNhdGVzIHRoZSByZXF1aXJlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLFxuXG4gICAtIG9uIGFsbCBvdGhlciBjb252ZXJzaW9ucywgdGhlIHdpZHRoIGFuZCBwcmVjaXNpb24gc3BlY2lmeSB0aGUgW21heCwgbWluXVxuICAgcmFuZ2UgZm9yIHRoZSB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC5cbiopXG5sZXQgc2Nhbl9mbG9hdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGgsIHByZWNpc2lvbiBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcuJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgIGxldCB3aWR0aCA9IHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYikgaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuICB8IF8gLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuXG5cbmxldCBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBlcnJvciBzdHIgPVxuICBsZXQgbG93ZXJjYXNlIGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ0EnIC4uICdaJyAtPlxuICAgICAgY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyBpbnRfb2ZfY2hhciAnYScpXG4gICAgfCBfIC0+IGMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCA9IHJlZiB3aWR0aCBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgbG93ZXJjYXNlIGMgPD4gbG93ZXJjYXNlIHN0ci5baV0gdGhlbiBlcnJvciAoKTtcbiAgICBpZiAhd2lkdGggPSAwIHRoZW4gZXJyb3IgKCk7XG4gICAgd2lkdGggOj0gU2Nhbm5pbmcuc3RvcmVfY2hhciAhd2lkdGggaWIgYztcbiAgZG9uZTtcbiAgIXdpZHRoXG5cblxubGV0IHNjYW5faGV4X2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGxldCB3aWR0aCA9IGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJ4XCIgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICBsZXQgd2lkdGggPSBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgICAgKVxuICAgICAgICAgIHwgXyAtPiB3aWR0aCBpblxuICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgICB8IF8gLT4gd2lkdGhcbiAgKVxuICB8ICduJyB8ICdOJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcImFuXCJcbiAgfCAnaScgfCAnSScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJuZmluaXR5XCJcbiAgfCBfIC0+IGJhZF9oZXhfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgKCogVGhlIGVmZmVjdGl2ZSB3aWR0aCBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXNcbiAgICAgICB0aGUgbWluaW11bSBvZiBkZWNsYXJlZCBwcmVjaXNpb24gYW5kIHdpZHRoIGxlZnQuICopXG4gICAgbGV0IHByZWNpc2lvbiA9IEludC5taW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgKCogQWZ0ZXIgc2Nhbm5pbmcgdGhlIGZyYWN0aW9uYWwgcGFydCB3aXRoIFtwcmVjaXNpb25dIHByb3Zpc2lvbmFsIHdpZHRoLFxuICAgICAgIFt3aWR0aF9wcmVjaXNpb25dIGlzIGxlZnQuICopXG4gICAgbGV0IHdpZHRoX3ByZWNpc2lvbiA9IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYiBpblxuICAgICgqIEhlbmNlLCBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHRvb2sgZXhhY3RseVxuICAgICAgIFtwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb25dIGNoYXJzLiAqKVxuICAgIGxldCBmcmFjX3dpZHRoID0gcHJlY2lzaW9uIC0gd2lkdGhfcHJlY2lzaW9uIGluXG4gICAgKCogQW5kIG5ldyBwcm92aXNpb25hbCB3aWR0aCBpcyBbd2lkdGggLSB3aWR0aF9wcmVjaXNpb24uICopXG4gICAgbGV0IHdpZHRoID0gd2lkdGggLSBmcmFjX3dpZHRoIGluXG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgJ2UnIHwgJ0UnIC0+XG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgXyAtPiBiYWRfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+IChcbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAneCcgfCAnWCcgYXMgYyAtPiAoXG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgICBsZXQgd2lkdGggPSBzY2FuX2hleGFkZWNpbWFsX2ludCB3aWR0aCBpYiBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgd2lkdGggLSAocHJlY2lzaW9uIC0gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgcHJlY2lzaW9uIGliKVxuICAgICAgICApXG4gICAgICAgIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBiYWRfZmxvYXQgKCkgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJ3AnIHwgJ1AnIGFzIGMgLT5cbiAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gICAgICAgIHwgXyAtPiB3aWR0aFxuICAgIClcbiAgICB8IF8gLT5cbiAgICAgIHNjYW5fY2FtbF9mbG9hdF9yZXN0IHdpZHRoIHByZWNpc2lvbiBpYlxuICApXG4gIHwgJzEnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWJcbigqIFNwZWNpYWwgY2FzZSBvZiBuYW4gYW5kIGluZmluaXR5OlxuICB8ICdpJyAtPlxuICB8ICduJyAtPlxuKilcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbigqIFNjYW4gYSByZWd1bGFyIHN0cmluZzpcbiAgIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIGEgc3BhY2UsIGlmIG5vIHNjYW5uaW5nIGluZGljYXRpb24gaGFzIGJlZW4gZ2l2ZW47XG4gICBvdGhlcndpc2UsIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzY2FubmluZ1xuICAgaW5kaWNhdGlvbiBbc3RwXS5cbiAgIEl0IGFsc28gc3RvcHMgYXQgZW5kIG9mIGZpbGUgb3Igd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBoYXNcbiAgIGJlZW4gcmVhZC4gKilcbmxldCBzY2FuX3N0cmluZyBzdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIGxvb3Agd2lkdGggPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgIG1hdGNoIHN0cCB3aXRoXG4gICAgICB8IFNvbWUgYycgd2hlbiBjID0gYycgLT4gU2Nhbm5pbmcuc2tpcF9jaGFyIHdpZHRoIGliXG4gICAgICB8IFNvbWUgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGluXG4gIGxvb3Agd2lkdGhcblxuXG4oKiBTY2FuIGEgY2hhcjogcGVlayBzdHJpY3RseSBvbmUgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCwgd2hhdHNvZXZlci4gKilcbmxldCBzY2FuX2NoYXIgd2lkdGggaWIgPVxuICAoKiBUaGUgY2FzZSB3aWR0aCA9IDAgY291bGQgbm90IGhhcHBlbiBoZXJlLCBzaW5jZSBpdCBpcyB0ZXN0ZWQgYmVmb3JlXG4gICAgIGNhbGxpbmcgc2Nhbl9jaGFyLCBpbiB0aGUgbWFpbiBzY2FubmluZyBmdW5jdGlvbi5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiYSBjaGFyYWN0ZXJcIiBlbHNlICopXG4gIFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgKFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliKVxuXG5cbmxldCBjaGFyX2Zvcl9iYWNrc2xhc2ggPSBmdW5jdGlvblxuICB8ICduJyAtPiAnXFwwMTAnXG4gIHwgJ3InIC0+ICdcXDAxMydcbiAgfCAnYicgLT4gJ1xcMDA4J1xuICB8ICd0JyAtPiAnXFwwMDknXG4gIHwgYyAtPiBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyLiAqKVxubGV0IGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjID0gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJ1xuXG5sZXQgY2hhcl9mb3JfZGVjaW1hbF9jb2RlIGMwIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDEwMCAqIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMCArXG4gICAgIDEwICogZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMxICtcbiAgICAgICAgICBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzIgaW5cbiAgaWYgYyA8IDAgfHwgYyA+IDI1NSB0aGVuXG4gICAgYmFkX2lucHV0XG4gICAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgIFwiYmFkIGNoYXJhY3RlciBkZWNpbWFsIGVuY29kaW5nIFxcXFwlYyVjJWNcIiBjMCBjMSBjMikgZWxzZVxuICBjaGFyX29mX2ludCBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGhleGFkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rlci4gKilcbmxldCBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMgPVxuICBsZXQgZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgKCogQ291bGQgYWxzbyBiZTpcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICc5JyB0aGVuIGQgLSBpbnRfb2ZfY2hhciAnMCcgZWxzZVxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJ0YnIHRoZW4gMTAgKyBkIC0gaW50X29mX2NoYXIgJ0EnIGVsc2VcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICdmJyB0aGVuIDEwICsgZCAtIGludF9vZl9jaGFyICdhJyBlbHNlIGFzc2VydCBmYWxzZVxuICAqKVxuICBpZiBkID49IGludF9vZl9jaGFyICdhJyB0aGVuXG4gICAgZCAtIDg3ICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyAqKSBlbHNlXG4gIGlmIGQgPj0gaW50X29mX2NoYXIgJ0EnIHRoZW5cbiAgICBkIC0gNTUgICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyAqKSBlbHNlXG4gICAgZCAtIGludF9vZl9jaGFyICcwJ1xuXG5cbmxldCBjaGFyX2Zvcl9oZXhhZGVjaW1hbF9jb2RlIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDE2ICogaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMSArXG4gICAgICAgICBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMyIGluXG4gIGlmIGMgPCAwIHx8IGMgPiAyNTUgdGhlblxuICAgIGJhZF9pbnB1dFxuICAgICAgKFByaW50Zi5zcHJpbnRmIFwiYmFkIGNoYXJhY3RlciBoZXhhZGVjaW1hbCBlbmNvZGluZyBcXFxcJWMlY1wiIGMxIGMyKSBlbHNlXG4gIGNoYXJfb2ZfaW50IGNcblxuXG4oKiBDYWxsZWQgaW4gcGFydGljdWxhciB3aGVuIGVuY291bnRlcmluZyAnXFxcXCcgYXMgc3RhcnRlciBvZiBhIGNoYXIuXG4gICBTdG9wcyBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgJ1xcJycuICopXG5sZXQgY2hlY2tfbmV4dF9jaGFyIG1lc3NhZ2Ugd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgZWxzZVxuICBjXG5cblxubGV0IGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciA9IGNoZWNrX25leHRfY2hhciBcImEgQ2hhclwiXG5sZXQgY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgPSBjaGVja19uZXh0X2NoYXIgXCJhIFN0cmluZ1wiXG5cbmxldCBzY2FuX2JhY2tzbGFzaF9jaGFyIHdpZHRoIGliID1cbiAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgfCAnXFxcXCcgfCAnXFwnJyB8ICdcXFwiJyB8ICduJyB8ICd0JyB8ICdiJyB8ICdyJyBhcyBjIC0+XG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAoY2hhcl9mb3JfYmFja3NsYXNoIGMpXG4gIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IGdldF9kaWdpdCAoKSA9XG4gICAgICBsZXQgYyA9IFNjYW5uaW5nLm5leHRfY2hhciBpYiBpblxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBjXG4gICAgICB8IGMgLT4gYmFkX2lucHV0X2VzY2FwZSBjIGluXG4gICAgbGV0IGMwID0gYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2RlY2ltYWxfY29kZSBjMCBjMSBjMilcbiAgfCAneCcgLT5cbiAgICBsZXQgZ2V0X2RpZ2l0ICgpID1cbiAgICAgIGxldCBjID0gU2Nhbm5pbmcubmV4dF9jaGFyIGliIGluXG4gICAgICBtYXRjaCBjIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyB8ICdBJyAuLiAnRicgfCAnYScgLi4gJ2YnIGFzIGMgLT4gY1xuICAgICAgfCBjIC0+IGJhZF9pbnB1dF9lc2NhcGUgYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2hleGFkZWNpbWFsX2NvZGUgYzEgYzIpXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dF9lc2NhcGUgY1xuXG5cbigqIFNjYW4gYSBjaGFyYWN0ZXIgKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2NhbWxfY2hhciB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFwnJyAtPiBmaW5kX2NoYXIgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcJycgY1xuXG4gIGFuZCBmaW5kX2NoYXIgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxcXCcgLT5cbiAgICAgIGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpIGliKVxuICAgIHwgYyAtPlxuICAgICAgZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXCcnIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFwnJyBjIGluXG5cbiAgZmluZF9zdGFydCB3aWR0aFxuXG5cbigqIFNjYW4gYSBkZWxpbWl0ZWQgc3RyaW5nIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFxcIicgLT4gZmluZF9zdG9wIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXFwiJyBjXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcXCInIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCAnXFxcXCcgLT4gc2Nhbl9iYWNrc2xhc2ggKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcblxuICBhbmQgc2Nhbl9iYWNrc2xhc2ggd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXHInIC0+IHNraXBfbmV3bGluZSAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciB3aWR0aCBpYilcblxuICBhbmQgc2tpcF9uZXdsaW5lIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAnXFxyJylcblxuICBhbmQgc2tpcF9zcGFjZXMgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICcgJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCB3aWR0aCBpblxuXG4gIGZpbmRfc3RhcnQgd2lkdGhcblxuXG4oKiBTY2FuIGEgYm9vbGVhbiAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fYm9vbCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbGV0IG0gPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3QnIC0+IDRcbiAgICB8ICdmJyAtPiA1XG4gICAgfCBjIC0+XG4gICAgICBiYWRfaW5wdXRcbiAgICAgICAgKFByaW50Zi5zcHJpbnRmIFwidGhlIGNoYXJhY3RlciAlQyBjYW5ub3Qgc3RhcnQgYSBib29sZWFuXCIgYykgaW5cbiAgc2Nhbl9zdHJpbmcgTm9uZSBtIGliXG5cblxuKCogU2NhbiBhIHN0cmluZyBjb250YWluaW5nIGVsZW1lbnRzIGluIGNoYXJfc2V0IGFuZCB0ZXJtaW5hdGVkIGJ5IHNjYW5faW5kaWNcbiAgIGlmIHByb3ZpZGVkLiAqKVxubGV0IHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgc2Nhbl9pbmRpYyB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9jaGFycyBpIHN0cCA9XG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpID4gMCAmJiBub3QgKFNjYW5uaW5nLmVvZiBpYikgJiZcbiAgICAgICBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjICYmXG4gICAgICAgaW50X29mX2NoYXIgYyA8PiBzdHAgdGhlblxuICAgICAgbGV0IF8gPSBTY2FubmluZy5zdG9yZV9jaGFyIG1heF9pbnQgaWIgYyBpblxuICAgICAgc2Nhbl9jaGFycyAoaSAtIDEpIHN0cCBpblxuICBtYXRjaCBzY2FuX2luZGljIHdpdGhcbiAgfCBOb25lIC0+IHNjYW5fY2hhcnMgd2lkdGggKC0xKTtcbiAgfCBTb21lIGMgLT5cbiAgICBzY2FuX2NoYXJzIHdpZHRoIChpbnRfb2ZfY2hhciBjKTtcbiAgICBpZiBub3QgKFNjYW5uaW5nLmVvZiBpYikgdGhlblxuICAgICAgbGV0IGNpID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgICBpZiBjID0gY2lcbiAgICAgIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgICAgIGVsc2UgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuXG4oKiBUaGUgZ2xvYmFsIGVycm9yIHJlcG9ydCBmdW5jdGlvbiBmb3IgW1NjYW5mXS4gKilcbmxldCBzY2FuZl9iYWRfaW5wdXQgaWIgPSBmdW5jdGlvblxuICB8IFNjYW5fZmFpbHVyZSBzIHwgRmFpbHVyZSBzIC0+XG4gICAgbGV0IGkgPSBTY2FubmluZy5jaGFyX2NvdW50IGliIGluXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcInNjYW5mOiBiYWQgaW5wdXQgYXQgY2hhciBudW1iZXIgJWk6ICVzXCIgaSBzKVxuICB8IHggLT4gcmFpc2UgeFxuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiBhIGNvdW50ZXIgZnJvbSBhbiBpbnB1dCBidWZmZXIuICopXG5sZXQgZ2V0X2NvdW50ZXIgaWIgY291bnRlciA9XG4gIG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAtPiBTY2FubmluZy5saW5lX2NvdW50IGliXG4gIHwgQ2hhcl9jb3VudGVyIC0+IFNjYW5uaW5nLmNoYXJfY291bnQgaWJcbiAgfCBUb2tlbl9jb3VudGVyIC0+IFNjYW5uaW5nLnRva2VuX2NvdW50IGliXG5cblxuKCogQ29tcHV0ZSB0aGUgd2lkdGggb2YgYSBwYWRkaW5nIG9wdGlvbiAoc2VlIFwiJTQye1wiIGFuZCBcIiUxMjMoXCIpLiAqKVxubGV0IHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gbWF4X2ludFxuICB8IFNvbWUgd2lkdGggLT4gd2lkdGhcblxuXG5sZXQgc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmcgPVxuICBpZiBmbXRpbmcgPSBFc2NhcGVkX3BlcmNlbnQgdGhlbiAnJScsIFwiXCIgZWxzZVxuICAgIGxldCBzdHIgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nIGluXG4gICAgbGV0IHN0cCA9IHN0ci5bMV0gaW5cbiAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIDIgKFN0cmluZy5sZW5ndGggc3RyIC0gMikgaW5cbiAgICBzdHAsIHN1Yl9zdHJcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUmVhZGVyIG1hbmFnZW1lbnQgKilcblxuKCogQSBjYWxsIHRvIHRha2VfZm9ybWF0X3JlYWRlcnMgb24gYSBmb3JtYXQgaXMgZXZhbHVhdGVkIGludG8gZnVuY3Rpb25zXG4gICB0YWtpbmcgcmVhZGVycyBhcyBhcmd1bWVudHMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIGludG8gYW4gaGV0ZXJvZ2VuZW91cyBsaXN0ICopXG4oKiBXaGVuIGFsbCByZWFkZXJzIGFyZSB0YWtlbiwgZmluYWxseSBwYXNzIHRoZSBsaXN0IG9mIHRoZSByZWFkZXJzIHRvIHRoZVxuICAgY29udGludWF0aW9uIGsuICopXG5sZXQgcmVjIHRha2VfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICBkID1cbmZ1biBrIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IFJlYWRlciBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0XG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFN0cmluZyAoXywgcmVzdCkgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2FtbF9zdHJpbmcgKF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludDMyIChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgTmF0aXZlaW50IChfLCBfLCBfLCByZXN0KSAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQ2NCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZsb2F0IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQm9vbCAoXywgcmVzdCkgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ3VzdG9tIChfLCBfLCByZXN0KSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSksIHJlc3QpIC0+XG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXQgZm10IHJlc3QpXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpLCByZXN0KSAtPlxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBrIChjb25jYXRfZm10IGZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAgICAtPlxuICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAgICAgICAtPiB0YWtlX2lnbm9yZWRfZm9ybWF0X3JlYWRlcnMgayBpZ24gcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgLT4gayBOaWxcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gZm10dHkgY29taW5nIGZyb20gYSBGb3JtYXRfc3Vic3QgXCIlKC4uLiUpXCIuICopXG5hbmQgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyA6IHR5cGUgeCB5IGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCB4LCB5KSBmbXR0eSAtPlxuICAgICAgKHksIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIHgsIGUsIGYpIGZtdCAtPiBkID1cbmZ1biBrIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgUmVhZGVyX3R5IGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3QgZm10XG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdCBmbXRcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gaWdub3JlZCBwYXJhbWV0ZXIuICopXG5hbmQgdGFrZV9pZ25vcmVkX2Zvcm1hdF9yZWFkZXJzIDogdHlwZSB4IHkgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIHgsIHkpIGlnbm9yZWQgLT5cbiAgICAgICh5LCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCB4LCBlLCBmKSBmbXQgLT4gZCA9XG5mdW4gayBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBzY2FubmluZyAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBzY2FubmluZyBmdW5jdGlvbi4gKilcbigqIFNjYW4gYSBzdHJlYW0gYWNjb3JkaW5nIHRvIGEgZm9ybWF0IGFuZCByZWFkZXJzIG9idGFpbmVkIGJ5XG4gICB0YWtlX2Zvcm1hdF9yZWFkZXJzLCBhbmQgYWdncmVnYXRlIHNjYW5uZWQgdmFsdWVzIGludG8gYW5cbiAgIGhldGVyb2dlbmVvdXMgbGlzdC4gKilcbigqIFJldHVybiB0aGUgaGV0ZXJvZ2VuZW91cyBsaXN0IG9mIHNjYW5uZWQgdmFsdWVzLiAqKVxubGV0IHJlYyBtYWtlX3NjYW5mIDogdHlwZSBhIGMgZCBlIGYuXG4gICAgU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoZCwgZSkgaGV0ZXJfbGlzdCAtPiAoYSwgZikgaGV0ZXJfbGlzdCA9XG5mdW4gaWIgZm10IHJlYWRlcnMgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2hhciAwIGliIGluXG4gICAgbGV0IGMgPSB0b2tlbl9jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9jaGFyIDAgaWIgaW5cbiAgICBsZXQgYyA9IHRva2VuX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcblxuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lIHN0cCkgd2lkdGggaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHN0cl9yZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgJ3snKSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW5cbiAgICAgICAgICAgICAgICAgICB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lICdbJykgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuXG4gICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIE5vbmUgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQgYylcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5faW50MzIgYylcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX25hdGl2ZWludCBjKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQ2NCBjKVxuICB8IEZsb2F0ICgoXywgKEZsb2F0X0YgfCBGbG9hdF9DRikpLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW5fY2FtbF9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HKSksXG4gICAgICAgICAgIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2ggfCBGbG9hdF9IKSksIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9oZXhfZmxvYXQgdG9rZW5fZmxvYXRcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gXyBfIGliID0gc2Nhbl9ib29sIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9ib29sXG4gIHwgQWxwaGEgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlYVxcXCJcIlxuICB8IFRoZXRhIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJXRcXFwiXCJcbiAgfCBDdXN0b20gXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlP1xcXCIgKGN1c3RvbSBjb252ZXJ0ZXIpXCJcbiAgfCBSZWFkZXIgZm10X3Jlc3QgLT5cbiAgICBiZWdpbiBtYXRjaCByZWFkZXJzIHdpdGhcbiAgICB8IENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSAtPlxuICAgICAgICBsZXQgeCA9IHJlYWRlciBpYiBpblxuICAgICAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdF9yZXN0IHJlYWRlcnNfcmVzdClcbiAgICB8IE5pbCAtPlxuICAgICAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBtaXNzaW5nIHJlYWRlclwiXG4gICAgZW5kXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIGlmIFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gICAgZWxzZSBiYWRfaW5wdXQgXCJlbmQgb2YgaW5wdXQgbm90IGZvdW5kXCJcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIHN0cjtcbiAgICBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgY2hyO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgKHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCkgaWIgaW5cbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQgPVxuICAgICAgdHJ5IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgcyBmbXR0eVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChmbXQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfc3RyaW5nICh3aWR0aF9vZl9wYWRfb3B0IHBhZF9vcHQpIGliIGluXG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10LCBmbXQnID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdCcgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgICgqIFRPRE86IGZpbmQgYSB3YXkgdG8gYXZvaWQgcmVwYXJzaW5nIHR3aWNlICopXG5cbiAgICAgICAgKCogVE9ETzogdGhlc2UgdHlwZS1jaGVja3MgYmVsb3cgKmNhbiogZmFpbCBiZWNhdXNlIG9mIHR5cGVcbiAgICAgICAgICAgYW1iaWd1aXR5IGluIHByZXNlbmNlIG9mIGlnbm9yZWQtcmVhZGVyczogXCIlX3IlZFwiIGFuZCBcIiVkJV9yXCJcbiAgICAgICAgICAgYXJlIHR5cGVkIGluIHRoZSBzYW1lIHdheS5cblxuICAgICAgICAgICAjIFNjYW5mLnNzY2FuZiBcIlxcXCIlX3IlZFxcXCIzXCIgXCIlKCVkJV9yJSlcIiBpZ25vcmVcbiAgICAgICAgICAgICAoZnVuIGZtdCBuIC0+IHN0cmluZ19vZl9mb3JtYXQgZm10LCBuKVxuICAgICAgICAgICBFeGNlcHRpb246IENhbWxpbnRlcm5hbEZvcm1hdC5UeXBlX21pc21hdGNoLlxuXG4gICAgICAgICAgIFdlIHNob3VsZCBwcm9wZXJseSBjYXRjaCB0aGlzIGV4Y2VwdGlvbi5cbiAgICAgICAgKilcbiAgICAgICAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgZm10dHkpLFxuICAgICAgICB0eXBlX2Zvcm1hdCBmbXQnIChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChGb3JtYXQgKGZtdCwgcyksXG4gICAgICAgICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHdpZHRoID0gd2lkdGhfb2ZfcGFkX29wdCB3aWR0aF9vcHQgaW5cbiAgICBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IChTb21lIHN0cCkgd2lkdGggaWI7XG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIENvbnMgKHMsIG1ha2Vfc2NhbmYgaWIgc3RyX3Jlc3QgcmVhZGVycylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIGxldCB3aWR0aCA9IHdpZHRoX29mX3BhZF9vcHQgd2lkdGhfb3B0IGluXG4gICAgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCBOb25lIHdpZHRoIGliO1xuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgQ29ucyAocywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBsZXQgY291bnQgPSBnZXRfY291bnRlciBpYiBjb3VudGVyIGluXG4gICAgQ29ucyAoY291bnQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQpO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBjaGVja19jaGFyIGliICdAJzsgY2hlY2tfY2hhciBpYiAneyc7XG4gICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnNcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgJ0AnOyBjaGVja19jaGFyIGliICdbJztcbiAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVyc1xuXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICBiZWdpbiBtYXRjaCBtYWtlX3NjYW5mIGliIGZtdCcgcmVhZGVycyB3aXRoXG4gICAgfCBDb25zIChfLCBhcmdfcmVzdCkgLT4gYXJnX3Jlc3RcbiAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICBlbmRcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBOaWxcblxuKCogQ2FzZSBhbmFseXNpcyBvbiBwYWRkaW5nIGFuZCBwcmVjaXNpb24uICopXG4oKiBSZWplY3QgZm9ybWF0cyBjb250YWluaW5nIFwiJSpcIiBvciBcIiUuKlwiLiAqKVxuKCogUGFzcyBwYWRkaW5nIGFuZCBwcmVjaXNpb24gdG8gdGhlIGdlbmVyaWMgc2Nhbm5lciBgc2NhbicuICopXG5hbmQgcGFkX3ByZWNfc2NhbmYgOiB0eXBlIGEgYyBkIGUgZiB4IHkgeiB0IC5cbiAgICBTY2FubmluZy5pbl9jaGFubmVsIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChkLCBlKSBoZXRlcl9saXN0IC0+ICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPlxuICAgICAgKGludCAtPiBpbnQgLT4gU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiB0KSAtPlxuICAgICAgKFNjYW5uaW5nLmluX2NoYW5uZWwgLT4geikgLT5cbiAgICAgICh4LCBmKSBoZXRlcl9saXN0ID1cbmZ1biBpYiBmbXQgcmVhZGVycyBwYWQgcHJlYyBzY2FuIHRva2VuIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIG1heF9pbnQgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGxldCBfID0gc2NhbiBtYXhfaW50IHAgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIHcgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBsZXQgXyA9IHNjYW4gdyBwIGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKExlZnQsIF8pLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUtXFxcIlwiXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgXyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcbiAgfCBBcmdfcGFkZGluZyBfLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgKCogRGVmaW5pbmcgW3NjYW5mXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtzY2FuZl0gKilcblxubGV0IGtzY2FuZl9nZW4gaWIgZWYgYWYgKEZvcm1hdCAoZm10LCBzdHIpKSA9XG4gIGxldCByZWMgYXBwbHkgOiB0eXBlIGEgYiAuIGEgLT4gKGEsIGIpIGhldGVyX2xpc3QgLT4gYiA9XG4gICAgZnVuIGYgYXJncyAtPiBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IENvbnMgKHgsIHIpIC0+IGFwcGx5IChmIHgpIHJcbiAgICB8IE5pbCAtPiBmXG4gIGluXG4gIGxldCBrIHJlYWRlcnMgZiA9XG4gICAgU2Nhbm5pbmcucmVzZXRfdG9rZW4gaWI7XG4gICAgbWF0Y2ggbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycyB3aXRoXG4gICAgfCBleGNlcHRpb24gKFNjYW5fZmFpbHVyZSBfIHwgRmFpbHVyZSBfIHwgRW5kX29mX2ZpbGUgYXMgZXhjKSAtPlxuICAgICAgICBlZiBpYiBleGNcbiAgICB8IGV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICBpbnZhbGlkX2FyZyAobXNnIF4gXCIgaW4gZm9ybWF0IFxcXCJcIiBeIFN0cmluZy5lc2NhcGVkIHN0ciBeIFwiXFxcIlwiKVxuICAgIHwgYXJncyAtPlxuICAgICAgICBhZiAoYXBwbHkgZiBhcmdzKVxuICBpblxuICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG5cbmxldCBrc2NhbmYgaWIgZWYgZm10ID1cbiAga3NjYW5mX2dlbiBpYiBlZiAoZnVuIHggLT4geCkgZm10XG5cbmxldCBrc2NhbmZfb3B0IGliIGZtdCA9XG4gIGtzY2FuZl9nZW4gaWIgKGZ1biBfIF8gLT4gTm9uZSkgKGZ1biB4IC0+IFNvbWUgeCkgZm10XG5cbigqKiopXG5cbmxldCBrYnNjYW5mID0ga3NjYW5mXG5sZXQgYnNjYW5mIGliIGZtdCA9IGtic2NhbmYgaWIgc2NhbmZfYmFkX2lucHV0IGZtdFxubGV0IGJzY2FuZl9vcHQgaWIgZm10ID0ga3NjYW5mX29wdCBpYiBmbXRcblxubGV0IGtzc2NhbmYgcyBlZiBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBlZiBmbXRcbmxldCBzc2NhbmYgcyBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBzY2FuZl9iYWRfaW5wdXQgZm10XG5sZXQgc3NjYW5mX29wdCBzIGZtdCA9IGtzY2FuZl9vcHQgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGZtdFxuXG5sZXQgc2NhbmYgZm10ID0ga3NjYW5mIFNjYW5uaW5nLnN0ZGluIHNjYW5mX2JhZF9pbnB1dCBmbXRcbmxldCBzY2FuZl9vcHQgZm10ID0ga3NjYW5mX29wdCBTY2FubmluZy5zdGRpbiBmbXRcblxuKCoqKilcblxuKCogU2Nhbm5pbmcgZm9ybWF0IHN0cmluZ3MuICopXG5sZXQgYnNjYW5mX2Zvcm1hdCA6XG4gIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICdnKSAtPiAnZyA9XG4gIGZ1biBpYiBmb3JtYXQgZiAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyBtYXhfaW50IGliIGluXG4gICAgbGV0IHN0ciA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQnID1cbiAgICAgIHRyeSBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgZm9ybWF0XG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2cgaW5cbiAgICBmIGZtdCdcblxuXG5sZXQgc3NjYW5mX2Zvcm1hdCA6XG4gIHN0cmluZyAtPiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICAoKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gJ2cpIC0+ICdnID1cbiAgZnVuIHMgZm9ybWF0IGYgLT4gYnNjYW5mX2Zvcm1hdCAoU2Nhbm5pbmcuZnJvbV9zdHJpbmcgcykgZm9ybWF0IGZcblxuXG5sZXQgZm9ybWF0X2Zyb21fc3RyaW5nIHMgZm10ID1cbiAgc3NjYW5mX2Zvcm1hdCAoXCJcXFwiXCIgXiBTdHJpbmcuZXNjYXBlZCBzIF4gXCJcXFwiXCIpIGZtdCAoZnVuIHggLT4geClcblxuXG5sZXQgdW5lc2NhcGVkIHMgPVxuICBzc2NhbmYgKFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiKSBcIiVTJSFcIiAoZnVuIHggLT4geClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIkNhbWxpbnRlcm5hbEZvcm1hdCIsIkNhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcyIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfSW50IiwiU3RkbGliX0J1ZmZlciIsIm51bGxfY2hhciIsIm5leHRfY2hhciIsImliIiwiYyIsImV4biIsInBlZWtfY2hhciIsImNoZWNrZWRfcGVla19jaGFyIiwiZW5kX29mX2lucHV0IiwiYmVnaW5uaW5nX29mX2lucHV0IiwibmFtZV9vZl9pbnB1dCIsIm1hdGNoIiwiZm5hbWUiLCJjaGFyX2NvdW50IiwiaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIiLCJ0b2tlbl9zdHJpbmciLCJ0b2tlbl9idWZmZXIiLCJ0b2siLCJpZ25vcmVfY2hhciIsIndpZHRoIiwic3RvcmVfY2hhciIsImNyZWF0ZSIsImluYW1lIiwibmV4dCIsImZyb21fc3RyaW5nIiwicyIsImxlbiIsImkiLCJwYXJhbSIsImZyb21fZnVuY3Rpb24iLCJzY2FuX2Nsb3NlX2F0X2VuZCIsImljIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImJ1ZiIsImxpbSIsImVvZiIsImNzdCIsInN0ZGluIiwib3Blbl9pbl9maWxlIiwib3Blbl9pbiIsIm9wZW5faW5fYmluIiwiZnJvbV9jaGFubmVsIiwiY2xvc2VfaW4iLCJTY2FuX2ZhaWx1cmUiLCJiYWRfaW5wdXQiLCJiYWRfaW5wdXRfZXNjYXBlIiwiY3N0X3NjYW5uaW5nX29mIiwiYmFkX3Rva2VuX2xlbmd0aCIsIm1lc3NhZ2UiLCJjc3Rfbm90X2FfdmFsaWRfZmxvYXRfaW5faGV4YWQiLCJiYWRfaGV4X2Zsb2F0IiwiY2hhcmFjdGVyX21pc21hdGNoIiwiY2kiLCJjaGVja19jaGFyIiwiY2hlY2tfdGhpc19jaGFyIiwidG9rZW5fY2hhciIsInRva2VuX2Jvb2wiLCJjc3Rfc2NhbmZfbWwiLCJpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciIsInN3aXRjaGVyIiwidG9rZW5faW50X2xpdGVyYWwiLCJjb252IiwibCIsInRva2VuX2Zsb2F0Iiwic2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIiLCJjc3RfY2hhcmFjdGVyIiwic2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXMiLCJzY2FuX2RpZ2l0X3BsdXMiLCJiYXNpcyIsImRpZ2l0cCIsImlzX2JpbmFyeV9kaWdpdCIsImlzX29jdGFsX2RpZ2l0IiwiaXNfaGV4YV9kaWdpdCIsInNjYW5fc2lnbiIsInNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbCIsImNzdF9oZXhhZGVjaW1hbCIsInNjYW5faW50X2NvbnZlcnNpb24iLCJjc3RfYmluYXJ5IiwiY3N0X29jdGFsIiwic2Nhbl9mcmFjdGlvbmFsX3BhcnQiLCJzY2FuX2V4cG9uZW50X3BhcnQiLCJzY2FuX2Zsb2F0IiwicHJlY2lzaW9uIiwiY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmciLCJlcnJvciIsInN0ciIsImxvd2VyY2FzZSIsInNjYW5faGV4X2Zsb2F0IiwiY3N0X25vX2RvdF9vcl9leHBvbmVudF9wYXJ0X2ZvIiwic2Nhbl9jYW1sX2Zsb2F0X3Jlc3QiLCJ3aWR0aF9wcmVjaXNpb24iLCJmcmFjX3dpZHRoIiwic2Nhbl9jYW1sX2Zsb2F0Iiwic2Nhbl9zdHJpbmciLCJzdHAiLCJoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIiwiY2hlY2tfbmV4dF9jaGFyIiwiY3N0X2FfQ2hhciIsInNjYW5fYmFja3NsYXNoX2NoYXIiLCJjMCIsImdldF9kaWdpdCIsImMxIiwiYzIiLCJzY2FuX2NhbWxfc3RyaW5nIiwiY3N0X2FfU3RyaW5nIiwiZmluZF9zdG9wIiwiY291bnRlciIsInNraXBfc3BhY2VzIiwic2Nhbl9jaGFyc19pbl9jaGFyX3NldCIsImNoYXJfc2V0Iiwic2Nhbl9pbmRpYyIsInNjYW5fY2hhcnMiLCJzY2FuZl9iYWRfaW5wdXQiLCJ4Iiwid2lkdGhfb2ZfcGFkX29wdCIsInBhZF9vcHQiLCJzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm10aW5nIiwic3ViX3N0ciIsInRha2VfZm9ybWF0X3JlYWRlcnMiLCJrIiwiZm10IiwicmVzdCIsImZtdHR5IiwiaWduIiwicmVhZGVyIiwibmV3X2siLCJyZWFkZXJzX3Jlc3QiLCJmbXRfcmVzdCIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMiLCJ0eTIiLCJ0eTEiLCJ0eSIsIm1ha2Vfc2NhbmYiLCJyZWFkZXJzIiwicHJlYyIsInBhZCIsImNociIsIm1zZyIsImZvcm1hdHRpbmdfbGl0IiwiY291bnQiLCJhcmdfcmVzdCIsIndpZHRoX29wdCIsImZtdGluZ19saXQiLCJzY2FuIiwibSIsImljb252IiwicGFkX3ByZWNfc2NhbmYiLCJ0b2tlbiIsImNzdF9zY2FuZl9iYWRfY29udmVyc2lvbiIsInAiLCJ3Iiwia3NjYW5mX2dlbiIsImVmIiwiYWYiLCJhcmdzIiwiZXhjIiwia3NjYW5mIiwia3NjYW5mX29wdCIsImJzY2FuZiIsImJzY2FuZl9vcHQiLCJrc3NjYW5mIiwic3NjYW5mIiwic3NjYW5mX29wdCIsInNjYW5mIiwic2NhbmZfb3B0IiwiYnNjYW5mX2Zvcm1hdCIsImZvcm1hdCIsInNzY2FuZl9mb3JtYXQiLCJmb3JtYXRfZnJvbV9zdHJpbmciLCJ1bmVzY2FwZWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsMkJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLFlBQUFDLFVBQUFDO0FBQUFBLElDb0tJO0FBQUEsU0FBQUMsSUFDVTtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBLEtBQ0EsYUFBaUI7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUR6S3ZCO0FBQUE7QUFBQSxLQzZLTTtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsR0FBQztBQUFBLFlBQUFDLFVBQUFILElBSUgsdUJBRUssYUFBWTtBQUFBLFlBQUFJLGtCQUFBSjtBQUFB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QyxVQUFBNUMsS0FDckMsNkJBQTZCO0FBQUEsWUFBQTZDLGNBQUFySyxJQUFBc0ssUUFBQXZMO0FBQUFBLElBU3JDO0FBQUEsUUFBQXFHLE1BQ0U7QUFBQSxJQUNWLFlBQ00sZ0RBQUFvQyxNQUFBO0FBQUEsVUFBQXRIO0FBQUFBLFNBQUFBLE1EaCtDVjtBQUFBO0FBQUEsU0FBQXVJLE1BQUEsUUFBQWpCLE1DaStDMEI7QUFBQTtBQUFBLElBQ3RCLHlCQUFNO0FBQUE7QUFBQSxZQUFBK0MsY0FBQWpKLEdBQUFnSixRQUFBdkw7QUFBQUEsSUFNd0IsT0FBd0IsY0FBeEIsMEJBQWlDO0FBQUE7QUFBQSxZQUFBeUwsbUJBQUFsSixHQUFBa0c7QUFBQUE7QUFBQUEsS0FBQSxJQUkzQztBQUFBO0FBQUEsSUFBUixPQUFnQztBQUFBLGFBQWhDLDZDQUFBUixHQUErQyxTQUFDLEVBQUM7QUFBQTtBQUFBLFdBbmdCTjtBQUFBLFlBQUF5RCxVQUFBbko7QUFBQUEsUUFBQSxJQXVnQjFDO0FBQUEsSUFBUixPQUFpQjtBQUFBLG9CQUFqQiw0Q0FBQTBGLEdBQW1DLFNBQUMsRUFBQztBQUFBO0FBQUEsR0F2Z0JhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6K0IzRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI5ODg2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbGxiYWNrLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJTdGRsaWJfT2JqIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwibmFtZSIsImV4biIsInNsb3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsNEJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsWUFBQUMsbUJBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUN5QmdCO0FBQUEsS0FBQUMsT0FBQTtBQUFBLElBQ2QsNENBQThCO0FBQUE7QUFBQSxHRDFCaEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTkwOSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9maWxlbmFtZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIERhbWllbiBEb2xpZ2V6LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGdlbmVyaWNfcXVvdGUgcXVvdGVxdW90ZSBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBiICdcXCcnO1xuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBpZiBzLltpXSA9ICdcXCcnXG4gICAgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHF1b3RlcXVvdGVcbiAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBiICBzLltpXVxuICBkb25lO1xuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1sxXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Jhc2VuYW1lLmh0bWxcbiAgSW4gc3RlcCAxIG9mIFtbMV1dLCB3ZSBjaG9vc2UgdG8gcmV0dXJuIFwiLlwiIGZvciBlbXB0eSBpbnB1dC5cbiAgICAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBPQ2FtbClcbiAgSW4gc3RlcCAyLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4gIFN0ZXAgNiBpcyBub3QgaW1wbGVtZW50ZWQ6IHdlIGNvbnNpZGVyIHRoYXQgdGhlIFtzdWZmaXhdIG9wZXJhbmQgaXNcbiAgICBhbHdheXMgYWJzZW50LiAgU3VmZml4ZXMgYXJlIGhhbmRsZWQgYnkgW2Nob3Bfc3VmZml4XSBhbmQgW2Nob3BfZXh0ZW5zaW9uXS5cbiopXG5sZXQgZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgZmluZF9lbmQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGZpbmRfZW5kIChuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIG4gKG4gKyAxKVxuICBhbmQgZmluZF9iZWcgbiBwID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIHBcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gU3RyaW5nLnN1YiBuYW1lIChuICsgMSkgKHAgLSBuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIChuIC0gMSkgcFxuICBpblxuICBpZiBuYW1lID0gXCJcIlxuICB0aGVuIGN1cnJlbnRfZGlyX25hbWVcbiAgZWxzZSBmaW5kX2VuZCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1syXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Rpcm5hbWUuaHRtbFxuICBJbiBzdGVwIDYgb2YgW1syXV0sIHdlIGNob29zZSB0byBwcm9jZXNzIFwiLy9cIiBub3JtYWxseS5cbiopXG5sZXQgZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBuYW1lID1cbiAgbGV0IHJlYyB0cmFpbGluZ19zZXAgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIHRyYWlsaW5nX3NlcCAobiAtIDEpXG4gICAgZWxzZSBiYXNlIG5cbiAgYW5kIGJhc2UgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGludGVybWVkaWF0ZV9zZXAgblxuICAgIGVsc2UgYmFzZSAobiAtIDEpXG4gIGFuZCBpbnRlcm1lZGlhdGVfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIChuIC0gMSlcbiAgICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChuICsgMSlcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgdHJhaWxpbmdfc2VwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5tb2R1bGUgdHlwZSBTWVNERVBTID0gc2lnXG4gIHZhbCBudWxsIDogc3RyaW5nXG4gIHZhbCBjdXJyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBwYXJlbnRfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIGRpcl9zZXAgOiBzdHJpbmdcbiAgdmFsIGlzX2Rpcl9zZXAgOiBzdHJpbmcgLT4gaW50IC0+IGJvb2xcbiAgdmFsIGlzX3JlbGF0aXZlIDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGlzX2ltcGxpY2l0IDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNoZWNrX3N1ZmZpeCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbFxuICB2YWwgY2hvcF9zdWZmaXhfb3B0IDogc3VmZml4OnN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvblxuICB2YWwgdGVtcF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcXVvdGUgOiBzdHJpbmcgLT4gc3RyaW5nXG4gIHZhbCBxdW90ZV9jb21tYW5kIDpcbiAgICBzdHJpbmcgLT4gP3N0ZGluOiBzdHJpbmcgLT4gP3N0ZG91dDogc3RyaW5nIC0+ID9zdGRlcnI6IHN0cmluZ1xuICAgICAgICAgICAtPiBzdHJpbmcgbGlzdCAtPiBzdHJpbmdcbiAgdmFsIGJhc2VuYW1lIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgZGlybmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgVW5peCA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwIHMgaSA9IHMuW2ldID0gJy8nXG4gIGxldCBpc19yZWxhdGl2ZSBuID0gU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLydcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gIGxldCBjaGVja19zdWZmaXggbmFtZSBzdWZmID1cbiAgICBTdHJpbmcuZW5kc193aXRoIH5zdWZmaXg6c3VmZiBuYW1lXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgciA9IHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVE1QRElSXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIvdG1wXCJcbiAgbGV0IHF1b3RlID0gZ2VuZXJpY19xdW90ZSBcIidcXFxcJydcIlxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSAoY21kIDo6IGFyZ3MpKVxuICAgIF4gKG1hdGNoIHN0ZGluICB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA8XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBpZiBzdGRlcnIgPSBzdGRvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZSBmKVxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgV2luMzIgOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCJOVUxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIlxcXFxcIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBsZXQgYyA9IHMuW2ldIGluIGMgPSAnLycgfHwgYyA9ICdcXFxcJyB8fCBjID0gJzonXG4gIGxldCBpc19yZWxhdGl2ZSBuID1cbiAgICAoU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLycpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJ1xcXFwnKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAyIHx8IG4uWzFdIDw+ICc6JylcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLlxcXFxcIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uXFxcXFwiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICBTdHJpbmcubGVuZ3RoIG5hbWUgPj0gU3RyaW5nLmxlbmd0aCBzdWZmICYmXG4gICAobGV0IHMgPSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nLmxlbmd0aCBzdWZmKSBpblxuICAgIFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgcyA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3VmZilcblxuICBsZXQgY2hvcF9zdWZmaXhfb3B0IH5zdWZmaXggZmlsZW5hbWUgPVxuICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggc3VmZml4IGFuZCBsZW5fZiA9IFN0cmluZy5sZW5ndGggZmlsZW5hbWUgaW5cbiAgICBpZiBsZW5fZiA+PSBsZW5fcyB0aGVuXG4gICAgICBsZXQgciA9IFN0cmluZy5zdWIgZmlsZW5hbWUgKGxlbl9mIC0gbGVuX3MpIGxlbl9zIGluXG4gICAgICBpZiBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHIgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cblxuICBsZXQgdGVtcF9kaXJfbmFtZSA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJURU1QXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIuXCJcbiAgbGV0IHF1b3RlIHMgPVxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInIGVsc2VcbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1xcXCInIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAwIGk7XG4gICAgICB8IGMgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGIgYzsgbG9vcCAoaSsxKTtcbiAgICBhbmQgbG9vcF9icyBuIGkgPVxuICAgICAgaWYgaSA9IGwgdGhlbiBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIic7XG4gICAgICAgIGFkZF9icyBuO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICB8ICdcXFwiJyAtPiBhZGRfYnMgKDIqbisxKTsgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInOyBsb29wIChpKzEpO1xuICAgICAgICB8ICdcXFxcJyAtPiBsb29wX2JzIChuKzEpIChpKzEpO1xuICAgICAgICB8IF8gICAgLT4gYWRkX2JzIG47IGxvb3AgaVxuICAgICAgZW5kXG4gICAgYW5kIGFkZF9icyBuID0gZm9yIF9qID0gMSB0byBuIGRvIEJ1ZmZlci5hZGRfY2hhciBiICdcXFxcJzsgZG9uZVxuICAgIGluXG4gICAgbG9vcCAwO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4oKlxuUXVvdGluZyBjb21tYW5kcyBmb3IgZXhlY3V0aW9uIGJ5IGNtZC5leGUgaXMgZGlmZmljdWx0LlxuMS0gRWFjaCBhcmd1bWVudCBpcyBmaXJzdCBxdW90ZWQgdXNpbmcgdGhlIFwicXVvdGVcIiBmdW5jdGlvbiBhYm92ZSwgdG9cbiAgIHByb3RlY3QgaXQgYWdhaW5zdCB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sXG4gICB0aGVuIGNtZC5leGUncyBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgd2l0aCAnXicsIHVzaW5nXG4gICB0aGUgXCJxdW90ZV9jbWRcIiBmdW5jdGlvbiBiZWxvdy4gIEZvciBtb3JlIGRldGFpbHMsIHNlZVxuICAgaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vdHdpc3R5bGl0dGxlcGFzc2FnZXNhbGxhbGlrZS8yMDExLzA0LzIzXG4yLSBUaGUgY29tbWFuZCBhbmQgdGhlIHJlZGlyZWN0aW9uIGZpbGVzLCBpZiBhbnksIG11c3QgYmUgZG91YmxlLXF1b3RlZFxuICAgaW4gY2FzZSB0aGV5IGNvbnRhaW4gc3BhY2VzLiAgVGhpcyBxdW90aW5nIGlzIGludGVycHJldGVkIGJ5IGNtZC5leGUsXG4gICBub3QgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sIGhlbmNlIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmVcbiAgIGNhbm5vdCBiZSB1c2VkLiAgVGhlIHR3byBjaGFyYWN0ZXJzIHdlIGRvbid0IGtub3cgaG93IHRvIHF1b3RlXG4gICBpbnNpZGUgYSBkb3VibGUtcXVvdGVkIGNtZC5leGUgc3RyaW5nIGFyZSBkb3VibGUtcXVvdGUgYW5kIHBlcmNlbnQuXG4gICBXZSBqdXN0IGZhaWwgaWYgdGhlIGNvbW1hbmQgbmFtZSBvciB0aGUgcmVkaXJlY3Rpb24gZmlsZSBuYW1lc1xuICAgY29udGFpbiBhIGRvdWJsZSBxdW90ZSAobm90IGFsbG93ZWQgaW4gV2luZG93cyBmaWxlIG5hbWVzLCBhbnl3YXkpXG4gICBvciBhIHBlcmNlbnQuICBTZWUgZnVuY3Rpb24gXCJxdW90ZV9jbWRfZmlsZW5hbWVcIiBiZWxvdy5cbjMtIFRoZSB3aG9sZSBzdHJpbmcgcGFzc2VkIHRvIFN5cy5jb21tYW5kIGlzIHRoZW4gZW5jbG9zZWQgaW4gZG91YmxlXG4gICBxdW90ZXMsIHdoaWNoIGFyZSBpbW1lZGlhdGVseSBzdHJpcHBlZCBieSBjbWQuZXhlLiAgT3RoZXJ3aXNlLFxuICAgc29tZSBvZiB0aGUgZG91YmxlIHF1b3RlcyBmcm9tIHN0ZXAgMiBhYm92ZSBjYW4gYmUgbWlzcGFyc2VkLlxuICAgU2VlIGUuZy4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk5NjUxNDFcbiopXG4gIGxldCBxdW90ZV9jbWQgcyA9XG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyMCkgaW5cbiAgICBTdHJpbmcuaXRlclxuICAgICAgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8ICcoJyB8ICcpJyB8ICchJyB8ICdeJyB8ICclJyB8ICdcXFwiJyB8ICc8JyB8ICc+JyB8ICcmJyB8ICd8JyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ14nOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYylcbiAgICAgIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcbiAgbGV0IHF1b3RlX2NtZF9maWxlbmFtZSBmID1cbiAgICBpZiBTdHJpbmcuZXhpc3RzIChmdW5jdGlvbiAnXFxcIicgfCAnJScgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIGYgdGhlblxuICAgICAgZmFpbHdpdGggKFwiRmlsZW5hbWUucXVvdGVfY29tbWFuZDogYmFkIGZpbGUgbmFtZSBcIiBeIGYpXG4gICAgZWxzZSBpZiBTdHJpbmcuY29udGFpbnMgZiAnICcgdGhlblxuICAgICAgU3RyaW5nLmNvbmNhdCBcIlwiIFtcIlxcXCJcIjsgZjsgXCJcXFwiXCJdXG4gICAgZWxzZVxuICAgICAgZlxuICAoKiBSZWRpcmVjdGlvbnMgaW4gY21kLmV4ZTogc2VlIGh0dHBzOi8vc3M2NC5jb20vbnQvc3ludGF4LXJlZGlyZWN0aW9uLmh0bWxcbiAgICAgYW5kIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3dpbmRvd3MvaXQtcHJvL3dpbmRvd3MteHAvYmI0OTA5ODIodj10ZWNobmV0LjEwKVxuICAqKVxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiXCIgW1xuICAgICAgXCJcXFwiXCI7XG4gICAgICBxdW90ZV9jbWRfZmlsZW5hbWUgY21kO1xuICAgICAgXCIgXCI7XG4gICAgICBxdW90ZV9jbWQgKFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIHF1b3RlIGFyZ3MpKTtcbiAgICAgIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICAobWF0Y2ggc3RkZXJyIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBcIiAyPiYxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICBcIlxcXCJcIlxuICAgIF1cbiAgbGV0IGhhc19kcml2ZSBzID1cbiAgICBsZXQgaXNfbGV0dGVyID0gZnVuY3Rpb25cbiAgICAgIHwgJ0EnIC4uICdaJyB8ICdhJyAuLiAneicgLT4gdHJ1ZVxuICAgICAgfCBfIC0+IGZhbHNlXG4gICAgaW5cbiAgICBTdHJpbmcubGVuZ3RoIHMgPj0gMiAmJiBpc19sZXR0ZXIgcy5bMF0gJiYgcy5bMV0gPSAnOidcbiAgbGV0IGRyaXZlX2FuZF9wYXRoIHMgPVxuICAgIGlmIGhhc19kcml2ZSBzXG4gICAgdGhlbiAoU3RyaW5nLnN1YiBzIDAgMiwgU3RyaW5nLnN1YiBzIDIgKFN0cmluZy5sZW5ndGggcyAtIDIpKVxuICAgIGVsc2UgKFwiXCIsIHMpXG4gIGxldCBkaXJuYW1lIHMgPVxuICAgIGxldCAoZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGxldCBkaXIgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGggaW5cbiAgICBkcml2ZSBeIGRpclxuICBsZXQgYmFzZW5hbWUgcyA9XG4gICAgbGV0IChfZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGhcbmVuZFxuXG5tb2R1bGUgQ3lnd2luIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiL2Rldi9udWxsXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCIvXCJcbiAgbGV0IGlzX2Rpcl9zZXAgPSBXaW4zMi5pc19kaXJfc2VwXG4gIGxldCBpc19yZWxhdGl2ZSA9IFdpbjMyLmlzX3JlbGF0aXZlXG4gIGxldCBpc19pbXBsaWNpdCA9IFdpbjMyLmlzX2ltcGxpY2l0XG4gIGxldCBjaGVja19zdWZmaXggPSBXaW4zMi5jaGVja19zdWZmaXhcbiAgbGV0IGNob3Bfc3VmZml4X29wdCA9IFdpbjMyLmNob3Bfc3VmZml4X29wdFxuICBsZXQgdGVtcF9kaXJfbmFtZSA9IFVuaXgudGVtcF9kaXJfbmFtZVxuICBsZXQgcXVvdGUgPSBVbml4LnF1b3RlXG4gIGxldCBxdW90ZV9jb21tYW5kID0gVW5peC5xdW90ZV9jb21tYW5kXG4gIGxldCBiYXNlbmFtZSA9IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG4gIGxldCBkaXJuYW1lID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuZW5kXG5cbm1vZHVsZSBTeXNkZXBzID1cbiAgKHZhbCAobWF0Y2ggU3lzLm9zX3R5cGUgd2l0aFxuICAgICAgIHwgXCJXaW4zMlwiIC0+IChtb2R1bGUgV2luMzI6IFNZU0RFUFMpXG4gICAgICAgfCBcIkN5Z3dpblwiIC0+IChtb2R1bGUgQ3lnd2luOiBTWVNERVBTKVxuICAgICAgIHwgXyAtPiAobW9kdWxlIFVuaXg6IFNZU0RFUFMpKSlcblxuaW5jbHVkZSBTeXNkZXBzXG5cbmxldCBjb25jYXQgZGlybmFtZSBmaWxlbmFtZSA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBkaXJuYW1lIGluXG4gIGlmIGwgPSAwIHx8IGlzX2Rpcl9zZXAgZGlybmFtZSAobC0xKVxuICB0aGVuIGRpcm5hbWUgXiBmaWxlbmFtZVxuICBlbHNlIGRpcm5hbWUgXiBkaXJfc2VwIF4gZmlsZW5hbWVcblxubGV0IGNob3Bfc3VmZml4IG5hbWUgc3VmZiA9XG4gIGlmIGNoZWNrX3N1ZmZpeCBuYW1lIHN1ZmZcbiAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gU3RyaW5nLmxlbmd0aCBzdWZmKVxuICBlbHNlIGludmFsaWRfYXJnIFwiRmlsZW5hbWUuY2hvcF9zdWZmaXhcIlxuXG5sZXQgZXh0ZW5zaW9uX2xlbiBuYW1lID1cbiAgbGV0IHJlYyBjaGVjayBpMCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaTAgKGkgLSAxKVxuICAgIGVsc2UgU3RyaW5nLmxlbmd0aCBuYW1lIC0gaTBcbiAgaW5cbiAgbGV0IHJlYyBzZWFyY2hfZG90IGkgPVxuICAgIGlmIGkgPCAwIHx8IGlzX2Rpcl9zZXAgbmFtZSBpIHRoZW4gMFxuICAgIGVsc2UgaWYgbmFtZS5baV0gPSAnLicgdGhlbiBjaGVjayBpIChpIC0gMSlcbiAgICBlbHNlIHNlYXJjaF9kb3QgKGkgLSAxKVxuICBpblxuICBzZWFyY2hfZG90IChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5sZXQgZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIFwiXCIgZWxzZSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpIGxcblxubGV0IGNob3BfZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIGludmFsaWRfYXJnIFwiRmlsZW5hbWUuY2hvcF9leHRlbnNpb25cIlxuICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5sZXQgcmVtb3ZlX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBuYW1lIGVsc2UgU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpXG5cbmV4dGVybmFsIG9wZW5fZGVzYzogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuZXh0ZXJuYWwgY2xvc2VfZGVzYzogaW50IC0+IHVuaXQgPSBcImNhbWxfc3lzX2Nsb3NlXCJcblxubGV0IHBybmdfa2V5ID1cbiAgRG9tYWluLkRMUy5uZXdfa2V5IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdFxuXG5sZXQgdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByYW5kb21fc3RhdGUgPSBEb21haW4uRExTLmdldCBwcm5nX2tleSBpblxuICBsZXQgcm5kID0gKFJhbmRvbS5TdGF0ZS5iaXRzIHJhbmRvbV9zdGF0ZSkgbGFuZCAweEZGRkZGRiBpblxuICBjb25jYXQgdGVtcF9kaXIgKFByaW50Zi5zcHJpbnRmIFwiJXMlMDZ4JXNcIiBwcmVmaXggcm5kIHN1ZmZpeClcblxubGV0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSA9XG4gIERvbWFpbi5ETFMubmV3X2tleSB+c3BsaXRfZnJvbV9wYXJlbnQ6RnVuLmlkIChmdW4gKCkgLT4gdGVtcF9kaXJfbmFtZSlcblxubGV0IHNldF90ZW1wX2Rpcl9uYW1lIHMgPSBEb21haW4uRExTLnNldCBjdXJyZW50X3RlbXBfZGlyX25hbWUgc1xubGV0IGdldF90ZW1wX2Rpcl9uYW1lICgpID0gRG9tYWluLkRMUy5nZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lXG5cbmxldCB0ZW1wX2ZpbGUgPyh0ZW1wX2RpciA9IERvbWFpbi5ETFMuZ2V0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSkgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByZWMgdHJ5X25hbWUgY291bnRlciA9XG4gICAgbGV0IG5hbWUgPSB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4IGluXG4gICAgdHJ5XG4gICAgICBjbG9zZV9kZXNjKG9wZW5fZGVzYyBuYW1lIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl9leGNsXSAwbzYwMCk7XG4gICAgICBuYW1lXG4gICAgd2l0aCBTeXNfZXJyb3IgXyBhcyBlIC0+XG4gICAgICBpZiBjb3VudGVyID49IDIwIHRoZW4gcmFpc2UgZSBlbHNlIHRyeV9uYW1lIChjb3VudGVyICsgMSlcbiAgaW4gdHJ5X25hbWUgMFxuXG5sZXQgb3Blbl90ZW1wX2ZpbGUgPyhtb2RlID0gW09wZW5fdGV4dF0pID8ocGVybXMgPSAwbzYwMClcbiAgICA/KHRlbXBfZGlyID0gRG9tYWluLkRMUy5nZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lKVxuICAgIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgKG5hbWUsXG4gICAgICAgb3Blbl9vdXRfZ2VuIChPcGVuX3dyb25seTo6T3Blbl9jcmVhdDo6T3Blbl9leGNsOjptb2RlKSBwZXJtcyBuYW1lKVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAyMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcblxubGV0IHRlbXBfZGlyID8odGVtcF9kaXIgPSBEb21haW4uRExTLmdldCBjdXJyZW50X3RlbXBfZGlyX25hbWUpXG4gICAgPyhwZXJtcyA9IDBvNzAwKSBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIFN5cy5ta2RpciBuYW1lIHBlcm1zO1xuICAgICAgbmFtZVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAyMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9lcXVhbCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9SYW5kb20iLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TeXMiLCJjc3QiLCJnZW5lcmljX2Jhc2VuYW1lIiwiaXNfZGlyX3NlcCIsImN1cnJlbnRfZGlyX25hbWUiLCJuYW1lIiwibiIsInAiLCJnZW5lcmljX2Rpcm5hbWUiLCJzIiwiaSIsImlzX3JlbGF0aXZlIiwiaXNfaW1wbGljaXQiLCJjaGVja19zdWZmaXgiLCJzdWZmIiwiY2hvcF9zdWZmaXhfb3B0Iiwic3VmZml4IiwiZmlsZW5hbWUiLCJsZW5fcyIsImxlbl9mIiwiciIsImR1bW15IiwidGVtcF9kaXJfbmFtZSIsImV4biIsInF1b3RlIiwibCIsImIiLCJjc3RfMiIsImNzdF8yXzEiLCJxdW90ZV9jb21tYW5kIiwiY21kIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJhcmdzIiwiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY3N0X2Rldl9udWxsIiwiVW5peCIsImMiLCJsb29wIiwiY291bnRlciIsImxvb3BfYnMiLCJtYXRjaCIsImFkZF9icyIsImoiLCJxdW90ZV9jbWRfZmlsZW5hbWUiLCJwYXJhbSIsImRyaXZlX2FuZF9wYXRoIiwicGF0aCIsImRyaXZlIiwiZGlyIiwiV2luMzIiLCJDeWd3aW4iLCJTeXNkZXBzIiwibnVsbCQiLCJwYXJlbnRfZGlyX25hbWUiLCJkaXJfc2VwIiwiY29uY2F0IiwiY2hvcF9zdWZmaXgiLCJleHRlbnNpb25fbGVuIiwiaTAiLCJleHRlbnNpb24iLCJjaG9wX2V4dGVuc2lvbiIsInJlbW92ZV9leHRlbnNpb24iLCJwcm5nX2tleSIsInRlbXBfZmlsZV9uYW1lIiwidGVtcF9kaXIiLCJwcmVmaXgiLCJyYW5kb21fc3RhdGUiLCJybmQiLCJjdXJyZW50X3RlbXBfZGlyX25hbWUiLCJzZXRfdGVtcF9kaXJfbmFtZSIsImdldF90ZW1wX2Rpcl9uYW1lIiwidGVtcF9maWxlIiwib3B0IiwiZSIsIm9wZW5fdGVtcF9maWxlIiwibW9kZSIsInBlcm1zIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMs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O0FBQUFBO0FBQUFBLEtBQUFtRDtBQUFBQSxPQUVGLFdBQWE7QUFBQSxLQUFBWSxRQUFiO0FBQUEsS0FBQXRDLFVBU1I7QUFBQTtBQUFBLFNBQUFwQyxPQU5VO0FBQUEsS0FDWCxJQUNFO0FBQUEsV0FBQXVFO0FBQUFBLFVBQUFBLElEalhOO0FBQUE7QUFBQSxNQ29YTSxrQkFBc0I7QUFBQSxVQUFBbkMsWUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQzFCO0FBQUEsR0FwQ3lEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEalZ4RSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwNjMxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfTGlzdCIsImxlbmd0aCIsImNvbXBhcmVfbGVuZ3RocyIsImNvbXBhcmVfbGVuZ3RoX3dpdGgiLCJpc19lbXB0eSIsImNvbnMiLCJoZCIsInRsIiwibnRoIiwibnRoX29wdCIsInJldiIsImluaXQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwiY29uY2F0IiwiZmxhdHRlbiIsImVxdWFsIiwiY29tcGFyZSIsIml0ZXIiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJyZXZfbWFwIiwiZmlsdGVyX21hcCIsImNvbmNhdF9tYXAiLCJmb2xkX2xlZnRfbWFwIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsIml0ZXIyIiwibWFwMiIsInJldl9tYXAyIiwiZm9sZF9sZWZ0MiIsImZvbGRfcmlnaHQyIiwiZm9yX2FsbCIsImV4aXN0cyIsImZvcl9hbGwyIiwiZXhpc3RzMiIsIm1lbSIsIm1lbXEiLCJmaW5kIiwiZmluZF9vcHQiLCJmaW5kX2luZGV4IiwiZmluZF9tYXAiLCJmaW5kX21hcGkiLCJmaWx0ZXIiLCJmaW5kX2FsbCIsImZpbHRlcmkiLCJwYXJ0aXRpb24iLCJwYXJ0aXRpb25fbWFwIiwiYXNzb2MiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInJlbW92ZV9hc3NxIiwic3BsaXQiLCJjb21iaW5lIiwic29ydCIsInN0YWJsZV9zb3J0IiwiZmFzdF9zb3J0Iiwic29ydF91bmlxIiwibWVyZ2UiLCJ0b19zZXEiLCJvZl9zZXEiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxLQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwNzc2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvZm10Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIFZlcnkgc21hbGwgdG9vbGluZyBmb3IgZm9ybWF0IHByaW50ZXJzLiAqKVxuXG5pbmNsdWRlIEZvcm1hdFxuXG50eXBlICdhIHQgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxubGV0IGxpc3QgPSBwcF9wcmludF9saXN0XG5sZXQgYXJyYXkgP3BwX3NlcCBmIGZtdCBhcnIgPSBsaXN0ID9wcF9zZXAgZiBmbXQgKEFycmF5LnRvX2xpc3QgYXJyKVxubGV0IHN0ciA9IHBwX3ByaW50X3N0cmluZ1xubGV0IHNleHAgZm10IHMgcHAgeCA9IGZwcmludGYgZm10IFwiQFs8Mz4oJXNAICVhKUBdXCIgcyBwcCB4XG5sZXQgYnl0ZXMgZm10IHQgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlU1wiIChCeXRlcy50b19zdHJpbmcgdClcblxubGV0IHBhaXIgcHAxIHBwMiBmbXQgKHYxLCB2MikgPVxuICBwcDEgZm10IHYxO1xuICBwcF9wcmludF9zcGFjZSBmbXQgKCk7XG4gIHBwMiBmbXQgdjJcbjs7XG5cbmxldCB0cmlwbGUgcHAxIHBwMiBwcDMgZm10ICh2MSwgdjIsIHYzKSA9XG4gIHBwMSBmbXQgdjE7XG4gIHBwX3ByaW50X3NwYWNlIGZtdCAoKTtcbiAgcHAyIGZtdCB2MjtcbiAgcHBfcHJpbnRfc3BhY2UgZm10ICgpO1xuICBwcDMgZm10IHYzXG47O1xuXG5sZXQgb3B0IGYgZm10IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IHBwX3ByaW50X3N0cmluZyBmbXQgXCI8Tm9uZT5cIlxuICB8IFNvbWUgeCAtPiBmcHJpbnRmIGZtdCBcIiVhXCIgZiB4XG47O1xuXG5sZXQgaW50ID0gcHBfcHJpbnRfaW50XG5cbmxldCBvcHRpbnQgZm10ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBpIC0+IGZwcmludGYgZm10IFwiQCAlZFwiIGlcbjs7XG5cbmxldCBjaGFyIGZtdCBjID0gRm9ybWF0LmZwcmludGYgZm10IFwiJWNcIiBjXG5sZXQgYm9vbCA9IEZvcm1hdC5wcF9wcmludF9ib29sXG5sZXQgbGl0IHMgZm10ICgpID0gcHBfcHJpbnRfc3RyaW5nIGZtdCBzXG5cbmxldCB0b190b19zdHJpbmcgcHAgeCA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBwcCBmbXQgeDtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcbjs7XG5cbmxldCBxdW90ZWRfc3RyaW5nIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiBzXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Gb3JtYXQiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0FycmF5IiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfaW50IiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9saXN0IiwiZnByaW50ZiIsImFycmF5IiwicHBfc2VwIiwiZm10IiwiYXJyIiwiY3N0XzMiLCJjc3QiLCJzZXhwIiwicyIsInBwIiwieCIsImNzdF9TIiwiYnl0ZXMiLCJ0IiwicGFpciIsInBwMSIsInBwMiIsInBhcmFtIiwidjIiLCJ2MSIsInRyaXBsZSIsInBwMyIsInYzIiwib3B0Iiwib3B0aW50IiwiaSIsImNoYXIiLCJjIiwiYm9vbCIsImxpdCIsInRvX3RvX3N0cmluZyIsImIiLCJxdW90ZWRfc3RyaW5nIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsWUFBQUMsTUFBQUMsUUFBQWpCLEdBQUFrQixLQUFBQztBQUFBQSxJQ09pRCxPQUFtQiw4QkFBbkIsaUNBQW1CO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFEUHBFO0FBQUEsSUFBQUMsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFKLEtBQUFLLEdBQUFDLElBQUFDLEdDU3NCLDRDQUFvQztBQUFBLE9BQUFDLFFEVDFEO0FBQUEsWUFBQUMsTUFBQVQsS0FBQVU7QUFBQUEsUUFBQSxJQ1UwQztBQUFBLElBQW1CO0FBQUE7QUFBQSxZQUFBQyxLQUFBQyxLQUFBQyxLQUFBYixLQUFBYztBQUFBQSxRQUFBQyxLQUVwRCxVQUFBQyxLQUFBO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUFxQiwrQkFDWDtBQUFBO0FBQUEsWUFBQUMsT0FBQUwsS0FBQUMsS0FBQUssS0FBQWxCLEtBQUFjO0FBQUFBLFFBQUFLLEtBR0QsVUFBQUosS0FBQSxVQUFBQyxLQUFBO0FBQUEsSUFDVDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQXFCLCtCQUNYO0FBQUE7QUFBQSxXRHZCWjtBQUFBLFlBQUFJLElBQUF0QyxHQUFBa0IsS0FBQU87QUFBQUEsSUMyQkUsUUFDVSxxQ0FDc0I7QUFBQSxRQUFBQSxNQUZoQztBQUFBLElBRVksMENBQW9CO0FBQUE7QUFBQSxXRDdCbEM7QUFBQSxZQUFBYyxPQUFBckIsS0FBQWM7QUFBQUEsSUNrQ1csWUFDQztBQUFBLFFBQUFRLElBREQ7QUFBQSxJQUVHLHFDQUFvQjtBQUFBO0FBQUEsV0RwQ2xDO0FBQUEsWUFBQUMsS0FBQXZCLEtBQUF3QjtBQUFBQSxJQ3VDaUIsMkRBQXlCO0FBQUE7QUFBQSxPQUFBQyxPRHZDMUM7QUFBQSxZQUFBQyxJQUFBckIsR0FBQUwsS0FBQWMsT0N5Q21CLDhCQUFxQjtBQUFBLFlBQUFhLGFBQUFyQixJQUFBQztBQUFBQTtBQUFBQSxLQUFBcUIsSUFHOUI7QUFBQSxLQUFBNUIsTUFDRTtBQUFBLElBQ1Y7QUFBQSxJQUFRLHFDQUNTO0FBQUE7QUFBQSxXRC9DbkI7QUFBQSxZQUFBNkIsY0FBQTdCLEtBQUFLO0FBQUFBLElDa0QwQiwyREFBeUI7QUFBQTtBQUFBLEdEbERuRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwODkzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYml0X3ZlY3Rvci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsInR5cGUgdCA9XG4gIHsgbGVuIDogaW50XG4gIDsgYml0cyA6IEJ5dGVzLnRcbiAgfVxuXG5sZXQgYnl0ZSBzIGkgPSBDaGFyLmNvZGUgKEJ5dGVzLnVuc2FmZV9nZXQgcyBpKVxubGV0IHNldF9ieXRlIHMgaSB4ID0gQnl0ZXMudW5zYWZlX3NldCBzIGkgKENoYXIuY2hyIHgpXG5sZXQgbGVuZ3RoIHQgPSB0LmxlblxuXG5sZXQgdW5zYWZlX3NldCB2IG4gYiA9XG4gIGxldCBpID0gbiBsc3IgMyBpblxuICBsZXQgYyA9IGJ5dGUgdi5iaXRzIGkgaW5cbiAgbGV0IG1hc2sgPSAxIGxzbCAobiBsYW5kIDcpIGluXG4gIHNldF9ieXRlIHYuYml0cyBpIChpZiBiIHRoZW4gYyBsb3IgbWFzayBlbHNlIGMgbGFuZCBsbm90IG1hc2spXG47O1xuXG5sZXQgc2V0IHYgbiBiID1cbiAgaWYgbiA8IDAgfHwgbiA+PSB2LmxlbiB0aGVuIGludmFsaWRfYXJnIFwiQml0X3ZlY3Rvci5zZXRcIjtcbiAgdW5zYWZlX3NldCB2IG4gYlxuOztcblxubGV0IHVuc2FmZV9nZXQgdiBuID1cbiAgbGV0IGkgPSBuIGxzciAzIGluXG4gIGJ5dGUgdi5iaXRzIGkgbGFuZCAoMSBsc2wgKG4gbGFuZCA3KSkgPiAwXG47O1xuXG5sZXQgZ2V0IHYgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPj0gdi5sZW4gdGhlbiBpbnZhbGlkX2FyZyBcIkJpdF92ZWN0b3IuZ2V0XCI7XG4gIHVuc2FmZV9nZXQgdiBuXG47O1xuXG5sZXQgcmVzZXRfemVybyB0ID0gQnl0ZXMuZmlsbCB0LmJpdHMgMCAoQnl0ZXMubGVuZ3RoIHQuYml0cykgJ1xcMDAwJ1xuXG5sZXQgY3JlYXRlX3plcm8gbGVuID1cbiAgbGV0IGJpdHMgPVxuICAgIGxldCByID0gbGVuIGxhbmQgNyBpblxuICAgIGxldCBxID0gbGVuIGxzciAzIGluXG4gICAgbGV0IGxlbiA9IGlmIHIgPSAwIHRoZW4gcSBlbHNlIHEgKyAxIGluXG4gICAgQnl0ZXMubWFrZSBsZW4gJ1xcMDAwJ1xuICBpblxuICB7IGxlbjsgYml0cyB9XG47O1xuXG5sZXQgcHAgZm10IHsgbGVuOyBiaXRzIH0gPVxuICBsZXQgbGVuIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcImxlblwiIEZtdC5pbnQgbGVuIGluXG4gIGxldCBiaXRzIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcImJpdHNcIiBGbXQuYnl0ZXMgYml0cyBpblxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUAuJWFALlwiIGxlbiAoKSBiaXRzICgpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGw0IiwiZiIsImEwIiwiYTEiLCJhMiIsImEzIiwiZ2xvYmFsX2RhdGEiLCJSZV9GbXQiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX0J5dGVzIiwiU3RkbGliIiwiU3RkbGliX0NoYXIiLCJsZW5ndGgiLCJ0Iiwic2V0IiwidiIsIm4iLCJiIiwiaSIsInMiLCJjIiwibWFzayIsIngiLCJnZXQiLCJyZXNldF96ZXJvIiwiY3JlYXRlX3plcm8iLCJsZW4iLCJyIiwicSIsImJpdHMiLCJwcCIsImZtdCIsInBhcmFtIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUMsSUFBQUMsSUFBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLFlBQUFDLE9BQUFDLEdDT2UsWUFBSztBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFVbEI7QUFBQSxVQUE0QjtBQUFBO0FBQUEsS0FBQUMsSUFQNUI7QUFBQSxLQUFBQyxJQUNBO0FBQUEsS0FBQUMsSUFOYTtBQUFBLEtBQUFDLE9BT2I7QUFBQSxLQUFBQyxJQUNBLG1CQUFvRDtBQUFBLEtBQUFILE1BQXBEO0FBQUEsSUFQb0Qsc0NBQVo7QUFBQSxJQUFZO0FBQUEsR0FZcEM7QUFBQSxZQUFBSSxJQUFBUixHQUFBQztBQUFBQSxRQUFBLElBU2hCO0FBQUEsVUFBNEI7QUFBQSxRQUFBRSxJQUw1QixhQUFBQyxJQUNBO0FBQUEsSUFsQmEsK0RBa0JBO0FBQUEsR0FLQztBQUFBLFlBQUFLLFdBQUFYO0FBQUFBLElBR0c7QUFBQSxrRUFBZ0Q7QUFBQTtBQUFBLFlBQUFZLFlBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLElBR2pFO0FBQUEsS0FBQUMsSUFFRTtBQUFBLEtBQUFGLFFBQ0E7QUFBQSxLQUFBRyxPQUNBO0FBQUEsSUFFRjtBQUFBLEdBQWE7QUFBQSxXRHhDZjtBQUFBLFlBQUFDLEdBQUFDLEtBQUFDO0FBQUFBLFFBQUFILE9DMkNPLFVBQUFILE1BQUE7QUFBQSxhQUFBQSxNQUFBSyxLQUFBQztBQUFBQSxLQUNZLHVEQUE4QjtBQUFBO0FBQUEsYUFBQUgsT0FBQUUsS0FBQUM7QUFBQUEsS0FDN0IsMERBQWtDO0FBQUE7QUFBQSxJQUNwRDtBQUFBLHdFQUE0QztBQUFBO0FBQUEsR0Q5QzlDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzA5NjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9keW4ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPVxuICB8IEludCBvZiBpbnRcbiAgfCBUdXBsZSBvZiB0IGxpc3RcbiAgfCBFbnVtIG9mIHN0cmluZ1xuICB8IFN0cmluZyBvZiBzdHJpbmdcbiAgfCBMaXN0IG9mIHQgbGlzdFxuICB8IFZhcmlhbnQgb2Ygc3RyaW5nICogdCBsaXN0XG4gIHwgUmVjb3JkIG9mIChzdHJpbmcgKiB0KSBsaXN0XG5cbmxldCB2YXJpYW50IHggeSA9IFZhcmlhbnQgKHgsIHkpXG5sZXQgbGlzdCB4ID0gTGlzdCB4XG5sZXQgaW50IHggPSBJbnQgeFxubGV0IHBhaXIgeCB5ID0gVHVwbGUgWyB4OyB5IF1cbmxldCByZWNvcmQgZmllbGRzID0gUmVjb3JkIGZpZWxkc1xubGV0IGVudW0geCA9IEVudW0geFxubGV0IHN0cmluZyBzID0gU3RyaW5nIHNcblxubGV0IHJlc3VsdCBvayBlcnIgPSBmdW5jdGlvblxuICB8IE9rIHMgLT4gdmFyaWFudCBcIk9rXCIgWyBvayBzIF1cbiAgfCBFcnJvciBlIC0+IHZhcmlhbnQgXCJFcnJvclwiIFsgZXJyIGUgXVxuOztcblxubGV0IG9wdGlvbiBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGVudW0gXCJOb25lXCJcbiAgfCBTb21lIHMgLT4gdmFyaWFudCBcIlNvbWVcIiBbIGYgcyBdXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwidmFyaWFudCIsIngiLCJ5IiwibGlzdCIsImludCIsInBhaXIiLCJyZWNvcmQiLCJmaWVsZHMiLCJlbnVtJCIsInN0cmluZyIsInMiLCJyZXN1bHQiLCJvayIsImVyciIsInBhcmFtIiwiZSIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUMsR0FBQUMsR0NTa0IsaUJBQWM7QUFBQSxZQUFBQyxLQUFBRixHQUNuQixjQUFNO0FBQUEsWUFBQUcsSUFBQUgsR0FDUCxjQUFLO0FBQUEsWUFBQUksS0FBQUosR0FBQUMsR0FDRiw4QkFBYztBQUFBLFlBQUFJLE9BQUFDLFFBQ1QsbUJBQWE7QUFBQSxZQUFBQyxNQUFBUCxHQUNwQixjQUFNO0FBQUEsWUFBQVEsT0FBQUMsR0FDSixjQUFRO0FBQUEsWUFBQUMsT0FBQUMsSUFBQUMsS0FBQUM7QUFBQUEsSUFFWjtBQUFBLFNBQUFKLElBQUEsVUFBQVIsSUFDZ0I7QUFBQSxLQVRUO0FBQUE7QUFBQSxRQUFBYSxJQVFQLFVBQUFiLE1BRXNCO0FBQUEsSUFWZjtBQUFBLEdBVXNCO0FBQUEsWUFBQWMsT0FBQWxCLEdBQUFnQjtBQUFBQSxJQUc3QixZQVJFO0FBQUEsUUFBQUosSUFRRixVQUFBUixJQUVvQjtBQUFBLElBZmI7QUFBQSxHQWVrQjtBQUFBLEdEeEJwQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMxMDAyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvY2F0ZWdvcnkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPSBpbnRcblxubGV0IGVxdWFsICh4IDogaW50KSAoeSA6IGludCkgPSB4ID0geVxubGV0IGNvbXBhcmUgKHggOiBpbnQpICh5IDogaW50KSA9IGNvbXBhcmUgeCB5XG5sZXQgdG9faW50IHggPSB4XG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG5sZXQgaW50ZXJzZWN0IHggeSA9IHggbGFuZCB5IDw+IDBcbmxldCAoICsrICkgeCB5ID0geCBsb3IgeVxubGV0IGR1bW15ID0gLTFcbmxldCBpbmV4aXN0YW50ID0gMVxubGV0IGxldHRlciA9IDJcbmxldCBub3RfbGV0dGVyID0gNFxubGV0IG5ld2xpbmUgPSA4XG5sZXQgbGFzdG5ld2xpbmUgPSAxNlxubGV0IHNlYXJjaF9ib3VuZGFyeSA9IDMyXG5sZXQgdG9fZHluID0gRHluLmludFxuXG5sZXQgZnJvbV9jaGFyID0gZnVuY3Rpb25cbiAgKCogU2hvdWxkIG1hdGNoIFtjd29yZF0gZGVmaW5pdGlvbiAqKVxuICB8ICdhJyAuLiAneidcbiAgfCAnQScgLi4gJ1onXG4gIHwgJzAnIC4uICc5J1xuICB8ICdfJyB8ICdcXDE3MCcgfCAnXFwxODEnIHwgJ1xcMTg2J1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU1JyAtPiBsZXR0ZXJcbiAgfCAnXFxuJyAtPiBub3RfbGV0dGVyICsrIG5ld2xpbmVcbiAgfCBfIC0+IG5vdF9sZXR0ZXJcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0Zvcm1hdCIsIlJlX0R5biIsImVxdWFsIiwieCIsInkiLCJjb21wYXJlIiwidG9faW50IiwicHAiLCJpbnRlcnNlY3QiLCJzeW1ib2wiLCJ0b19keW4iLCJsZXR0ZXIiLCJub3RfbGV0dGVyIiwiZnJvbV9jaGFyIiwicGFyYW0iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdDRWdDLHVCQUFLO0FBQUEsT0FBQUMsVURGckM7QUFBQSxZQUFBQyxPQUFBSCxHQ0llLFNBQUM7QUFBQSxPQUFBSSxLREpoQjtBQUFBLFlBQUFDLFVBQUFMLEdBQUFDLEdDTW9CLDZCQUFhO0FBQUEsWUFBQUssT0FBQU4sR0FBQUMsR0FDaEIsYUFBTztBQUFBLE9BQUFNLFNEUHhCLFdBQUFDLFNBQUEsR0FBQUMsYUFBQTtBQUFBLFlBQUFDLFVBQUFDO0FBQUFBO0FBQUFBO0FBQUFBLEtDaUJnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0NBVkM7QUFBQSxNQVVEO0FBQUE7QUFBQSxLQVFRO0FBQUE7QUFBQSxJQUVmO0FBQUEsR0FBVTtBQUFBLEdEM0JuQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMxMDYzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvZGVuc2VfbWFwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibGV0IG1ha2UgfnNpemUgfmYgPVxuICBsZXQgY2FjaGUgPSBBcnJheS5pbml0IHNpemUgZiBpblxuICBmdW4gaSAtPiBjYWNoZS4oaSlcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsIlN0ZGxpYl9BcnJheSIsIm1ha2UiLCJzaXplIiwiZiIsImNhY2hlIiwiaSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsS0FBQUMsTUFBQUM7QUFBQUEsUUFBQUMsUUNDYztBQUFBLElBQ1osZ0JBQUFDLEdBQVMsZ0RBQVMsRUFBbEI7QUFBQSxHQUFrQjtBQUFBLEdERnBCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzEwODAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9pbXBvcnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJtb2R1bGUgTGlzdCA9IFN0ZGxpYi5MaXN0TGFiZWxzXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGxldCBlcXVhbCA9ICggPSApXG4gIGxldCBjb21wYXJlID0gY29tcGFyZVxuZW5kXG5cbm1vZHVsZSBQaHlzX2VxdWFsID0gc3RydWN0XG4gIGxldCBlcXVhbCA9ICggPT0gKVxuZW5kXG5cbmxldCAoID0gKSA9IEludC5lcXVhbFxubGV0ICggPT0gKSA9IFsgYFVzZV9waHlzX2VxdWFsIF1cbmxldCAoIDwgKSAoeCA6IGludCkgKHkgOiBpbnQpID0geCA8IHlcbmxldCAoID4gKSAoeCA6IGludCkgKHkgOiBpbnQpID0geCA+IHlcbmxldCBtaW4gPSBJbnQubWluXG5sZXQgbWF4ID0gSW50Lm1heFxubGV0IGNvbXBhcmUgPSBJbnQuY29tcGFyZVxuXG5tb2R1bGUgSW50ID0gc3RydWN0XG4gIGxldFtAd2FybmluZyBcIi0zMlwiXSBoYXNoICh4IDogaW50KSA9IEhhc2h0YmwuaGFzaCB4XG5cbiAgaW5jbHVkZSBTdGRsaWIuSW50XG5lbmRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSW50IiwiZXF1YWwiLCJjb21wYXJlIiwic3ltYm9sIiwieCIsInkiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwibWludXNfb25lIiwiYWJzIiwibWF4X2ludCIsIm1pbl9pbnQiLCJsb2dub3QiLCJ0b19zdHJpbmciLCJzZWVkZWRfaGFzaCIsImhhc2giXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxZQUFBRCxRQUFBO0FBQUEsT0FBQUUsU0FBQTtBQUFBLFlBQUFBLFNBQUFDLEdBQUFDLEdDYWdDLHFCQUFLO0FBQUEsWUFBQUYsU0FBQUMsR0FBQUMsR0FDTCxxQkFBSztBQUFBO0FBQUEsSUFBQUMsTURkckM7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUwsWUFBQTtBQUFBLElBQUFNLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBYixVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFJLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQVEsWUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzExNDcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jc2V0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIExpc3QgPSBzdHJ1Y3QgZW5kXG5vcGVuIEltcG9ydFxuXG4oKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG50eXBlIGMgPSBpbnRcblxubGV0IGVxdWFsX2MgPSBJbnQuZXF1YWxcbmxldCB0b19pbnQgeCA9IHhcbmxldCBvZl9pbnQgeCA9IHhcbmxldCB0b19jaGFyIHQgPSBDaGFyLmNociB0XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCBudWxsX2NoYXIgPSAtMVxuXG50eXBlIHQgPSAoYyAqIGMpIGxpc3RcblxubGV0IGNvbXBhcmVfcGFpciAoeCwgeSkgKHgnLCB5JykgPVxuICBtYXRjaCBJbnQuY29tcGFyZSB4IHgnIHdpdGhcbiAgfCAwIC0+IEludC5jb21wYXJlIHkgeSdcbiAgfCB4IC0+IHhcbjs7XG5cbmxldCBlcXVhbF9wYWlyICh4LCB5KSAoeCcsIHknKSA9IEludC5lcXVhbCB4IHgnICYmIEludC5lcXVhbCB5IHknXG5sZXQgZXF1YWwgeCB5ID0gTGlzdC5lcXVhbCB+ZXE6ZXF1YWxfcGFpciB4IHlcbmxldCBjb21wYXJlIHggeSA9IExpc3QuY29tcGFyZSB+Y21wOmNvbXBhcmVfcGFpciB4IHlcblxubGV0IHJlYyB1bmlvbiBsIGwnID1cbiAgbWF0Y2ggbCwgbCcgd2l0aFxuICB8IF8sIFtdIC0+IGxcbiAgfCBbXSwgXyAtPiBsJ1xuICB8IChjMSwgYzIpIDo6IHIsIChjMScsIGMyJykgOjogcicgLT5cbiAgICBpZiBjMiArIDEgPCBjMSdcbiAgICB0aGVuIChjMSwgYzIpIDo6IHVuaW9uIHIgbCdcbiAgICBlbHNlIGlmIGMyJyArIDEgPCBjMVxuICAgIHRoZW4gKGMxJywgYzInKSA6OiB1bmlvbiBsIHInXG4gICAgZWxzZSBpZiBjMiA8IGMyJ1xuICAgIHRoZW4gdW5pb24gciAoKG1pbiBjMSBjMScsIGMyJykgOjogcicpXG4gICAgZWxzZSB1bmlvbiAoKG1pbiBjMSBjMScsIGMyKSA6OiByKSByJ1xuOztcblxubGV0IHJlYyBpbnRlciBsIGwnID1cbiAgbWF0Y2ggbCwgbCcgd2l0aFxuICB8IF8sIFtdIC0+IFtdXG4gIHwgW10sIF8gLT4gW11cbiAgfCAoYzEsIGMyKSA6OiByLCAoYzEnLCBjMicpIDo6IHInIC0+XG4gICAgaWYgYzIgPCBjMSdcbiAgICB0aGVuIGludGVyIHIgbCdcbiAgICBlbHNlIGlmIGMyJyA8IGMxXG4gICAgdGhlbiBpbnRlciBsIHInXG4gICAgZWxzZSBpZiBjMiA8IGMyJ1xuICAgIHRoZW4gKG1heCBjMSBjMScsIGMyKSA6OiBpbnRlciByIGwnXG4gICAgZWxzZSAobWF4IGMxIGMxJywgYzInKSA6OiBpbnRlciBsIHInXG47O1xuXG5sZXQgcmVjIGRpZmYgbCBsJyA9XG4gIG1hdGNoIGwsIGwnIHdpdGhcbiAgfCBfLCBbXSAtPiBsXG4gIHwgW10sIF8gLT4gW11cbiAgfCAoYzEsIGMyKSA6OiByLCAoYzEnLCBjMicpIDo6IHInIC0+XG4gICAgaWYgYzIgPCBjMSdcbiAgICB0aGVuIChjMSwgYzIpIDo6IGRpZmYgciBsJ1xuICAgIGVsc2UgaWYgYzInIDwgYzFcbiAgICB0aGVuIGRpZmYgbCByJ1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHInJyA9IGlmIGMyJyA8IGMyIHRoZW4gKGMyJyArIDEsIGMyKSA6OiByIGVsc2UgciBpblxuICAgICAgaWYgYzEgPCBjMScgdGhlbiAoYzEsIGMxJyAtIDEpIDo6IGRpZmYgcicnIHInIGVsc2UgZGlmZiByJycgcicpXG47O1xuXG5sZXQgc2luZ2xlID1cbiAgbGV0IHNpbmdsZSBjID0gWyBjLCBjIF0gaW5cbiAgRGVuc2VfbWFwLm1ha2UgKCogYW4gZXh0cmEgY29sb3IgZm9yIGxubCAqKSB+c2l6ZToyNTcgfmY6c2luZ2xlXG47O1xuXG5sZXQgY3NpbmdsZSBpID0gc2luZ2xlIChDaGFyLmNvZGUgaSlcbmxldCBhZGQgYyBsID0gdW5pb24gKHNpbmdsZSBjKSBsXG5sZXQgc2VxIGMgYycgPSBpZiBjIDw9IGMnIHRoZW4gWyBjLCBjJyBdIGVsc2UgWyBjJywgYyBdXG5cbmxldCByZWMgb2Zmc2V0IG8gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgKGMxLCBjMikgOjogciAtPiAoYzEgKyBvLCBjMiArIG8pIDo6IG9mZnNldCBvIHJcbjs7XG5cbmxldCBlbXB0eSA6IHQgPSBbXVxubGV0IGNhbnkgPSBbIDAsIDI1NSBdXG5sZXQgdW5pb25fYWxsIHRzID0gTGlzdC5mb2xkX2xlZnQgfmluaXQ6ZW1wdHkgfmY6dW5pb24gdHNcbmxldCBpbnRlcnNlY3RfYWxsIHRzID0gTGlzdC5mb2xkX2xlZnQgfmluaXQ6Y2FueSB+ZjppbnRlciB0c1xuXG5sZXQgcmVjIG1lbSAoYyA6IGludCkgcyA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGMxLCBjMikgOjogcmVtIC0+IGlmIGMgPD0gYzIgdGhlbiBjID49IGMxIGVsc2UgbWVtIGMgcmVtXG47O1xuXG4oKioqKilcblxubGV0IHJlYyBoYXNoX3JlYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gMFxuICB8IChpLCBqKSA6OiByIC0+IGkgKyAoMTMgKiBqKSArICgyNTcgKiBoYXNoX3JlYyByKVxuOztcblxubGV0IGhhc2ggbCA9IGhhc2hfcmVjIGwgbGFuZCAweDNGRkZGRkZGXG5cbigqKioqKVxuXG5sZXQgcHJpbnRfb25lIGNoIChjMSwgYzIpID1cbiAgaWYgSW50LmVxdWFsIGMxIGMyIHRoZW4gRm9ybWF0LmZwcmludGYgY2ggXCIlZFwiIGMxIGVsc2UgRm9ybWF0LmZwcmludGYgY2ggXCIlZC0lZFwiIGMxIGMyXG47O1xuXG5sZXQgcHAgdHMgPSBGbXQubGlzdCB+cHBfc2VwOihGbXQubGl0IFwiLCBcIikgcHJpbnRfb25lIHRzXG5cbmxldCB0b19keW4gdCA9XG4gIGxldCBvcGVuIER5biBpblxuICBtYXRjaCB0IHdpdGhcbiAgfCBbICh4LCB5KSBdIHdoZW4gSW50LmVxdWFsIHggeSAtPiBpbnQgeFxuICB8IF8gLT4gTGlzdC5tYXAgdCB+ZjooZnVuICh4LCB5KSAtPiBwYWlyIChpbnQgeCkgKGludCB5KSkgfD4gbGlzdFxuOztcblxubGV0IHJlYyBpdGVyIHQgfmYgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBbXSAtPiAoKVxuICB8ICh4LCB5KSA6OiB4cyAtPlxuICAgIGYgeCB5O1xuICAgIGl0ZXIgeHMgfmZcbjs7XG5cbmxldCBvbmVfY2hhciA9IGZ1bmN0aW9uXG4gIHwgWyAoaSwgaikgXSB3aGVuIEludC5lcXVhbCBpIGogLT4gU29tZSBpXG4gIHwgXyAtPiBOb25lXG47O1xuXG5tb2R1bGUgQ1NldE1hcCA9IE1hcC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnQgKiAoaW50ICogaW50KSBsaXN0XG5cbiAgICBsZXQgY29tcGFyZSAoaSwgdSkgKGosIHYpID1cbiAgICAgIGxldCBjID0gSW50LmNvbXBhcmUgaSBqIGluXG4gICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2UgY29tcGFyZSB1IHZcbiAgICA7O1xuICBlbmQpXG5cbmxldCBmb2xkX3JpZ2h0IHQgfmluaXQgfmYgPSBMaXN0LmZvbGRfcmlnaHQgfmY6KGZ1biAoeCwgeSkgYWNjIC0+IGYgeCB5IGFjYykgdCB+aW5pdFxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFtdIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG47O1xuXG5sZXQgcmVjIHByZXBlbmQgcyB4IGwgPVxuICBtYXRjaCBzLCBsIHdpdGhcbiAgfCBbXSwgXyAtPiBsXG4gIHwgX3IsIFtdIC0+IFtdXG4gIHwgKF9jLCBjJykgOjogciwgKFsgKGQsIF9kJykgXSwgX3gnKSA6OiBfcicgd2hlbiBjJyA8IGQgLT4gcHJlcGVuZCByIHggbFxuICB8IChjLCBjJykgOjogciwgKFsgKGQsIGQnKSBdLCB4JykgOjogcicgLT5cbiAgICBpZiBjIDw9IGRcbiAgICB0aGVuXG4gICAgICBpZiBjJyA8IGQnXG4gICAgICB0aGVuIChbIGQsIGMnIF0sIHggQCB4JykgOjogcHJlcGVuZCByIHggKChbIGMnICsgMSwgZCcgXSwgeCcpIDo6IHInKVxuICAgICAgZWxzZSAoWyBkLCBkJyBdLCB4IEAgeCcpIDo6IHByZXBlbmQgcyB4IHInXG4gICAgZWxzZSBpZiBjID4gZCdcbiAgICB0aGVuIChbIGQsIGQnIF0sIHgnKSA6OiBwcmVwZW5kIHMgeCByJ1xuICAgIGVsc2UgKFsgZCwgYyAtIDEgXSwgeCcpIDo6IHByZXBlbmQgcyB4ICgoWyBjLCBkJyBdLCB4JykgOjogcicpXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2Vcbjs7XG5cbmxldCBwaWNrID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBpbnZhbGlkX2FyZyBcIlJlX2NzZXQucGlja1wiXG4gIHwgKHgsIF8pIDo6IF8gLT4geFxuOztcblxubGV0IGNzZXEgYyBjJyA9IHNlcSAob2ZfY2hhciBjKSAob2ZfY2hhciBjJylcbmxldCByZyA9IGNzZXFcbmxldCBjaGFyID0gY3NpbmdsZVxubGV0IHVwcGVyID0gdW5pb25fYWxsIFsgY3NlcSAnQScgJ1onOyBjc2VxICdcXDE5MicgJ1xcMjE0JzsgY3NlcSAnXFwyMTYnICdcXDIyMicgXVxubGV0IGNsb3dlciA9IG9mZnNldCAzMiB1cHBlclxubGV0IGNkaWdpdCA9IGNzZXEgJzAnICc5J1xubGV0IGFzY2lpID0gY3NlcSAnXFwwMDAnICdcXDEyNydcbmxldCBjYWRkIGMgcyA9IGFkZCAob2ZfY2hhciBjKSBzXG5sZXQgc3BhY2UgPSBhZGQgKG9mX2NoYXIgJyAnKSAoY3NlcSAnXFwwMDknICdcXDAxMycpXG5sZXQgeGRpZ2l0ID0gdW5pb25fYWxsIFsgY2RpZ2l0OyBjc2VxICdhJyAnZic7IGNzZXEgJ0EnICdGJyBdXG5cbmxldCBjYWxwaGEgPVxuICBMaXN0LmZvbGRfcmlnaHRcbiAgICB+ZjpjYWRkXG4gICAgWyAnXFwxNzAnOyAnXFwxODEnOyAnXFwxODYnOyAnXFwyMjMnOyAnXFwyNTUnIF1cbiAgICB+aW5pdDoodW5pb24gY2xvd2VyIHVwcGVyKVxuOztcblxubGV0IGNhbG51bSA9IHVuaW9uIGNhbHBoYSBjZGlnaXRcblxubGV0IGNhc2VfaW5zZW5zIHMgPVxuICB1bmlvbl9hbGwgWyBzOyBvZmZzZXQgMzIgKGludGVyIHMgdXBwZXIpOyBvZmZzZXQgKC0zMikgKGludGVyIHMgY2xvd2VyKSBdXG47O1xuXG5sZXQgY3dvcmQgPSBjYWRkICdfJyBjYWxudW1cbmxldCBub3RubCA9IGRpZmYgY2FueSAoY3NpbmdsZSAnXFxuJylcbmxldCBubCA9IGNzaW5nbGUgJ1xcbidcblxubGV0IHNldCBzdHIgPVxuICBsZXQgcyA9IHJlZiBlbXB0eSBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgcyA6PSB1bmlvbiAoY3NpbmdsZSBzdHIuW2ldKSAhc1xuICBkb25lO1xuICAhc1xuOztcblxubGV0IGJsYW5rID0gc2V0IFwiXFx0IFwiXG5cbigqIENSLXNvbWVkYXkgcmdyaW5iZXJnOiB0aGlzIFtsb3dlcl0gZG9lc24ndCBtYXRjaCBbY2xvd2VyXSAqKVxubGV0IGxvd2VyID0gdW5pb25fYWxsIFsgcmcgJ2EnICd6JzsgY2hhciAnXFwxODEnOyByZyAnXFwyMjMnICdcXDI0Nic7IHJnICdcXDI0OCcgJ1xcMjU1JyBdXG5sZXQgYWxwaGEgPSB1bmlvbl9hbGwgWyBsb3dlcjsgdXBwZXI7IGNoYXIgJ1xcMTcwJzsgY2hhciAnXFwxODYnIF1cbmxldCBhbG51bSA9IHVuaW9uX2FsbCBbIGFscGhhOyBjZGlnaXQgXVxubGV0IHdvcmRjID0gdW5pb25fYWxsIFsgYWxudW07IGNoYXIgJ18nIF1cbmxldCBjbnRybCA9IHVuaW9uX2FsbCBbIHJnICdcXDAwMCcgJ1xcMDMxJzsgcmcgJ1xcMTI3JyAnXFwxNTknIF1cbmxldCBncmFwaCA9IHVuaW9uX2FsbCBbIHJnICdcXDAzMycgJ1xcMTI2JzsgcmcgJ1xcMTYwJyAnXFwyNTUnIF1cbmxldCBwcmludCA9IHVuaW9uX2FsbCBbIHJnICdcXDAzMicgJ1xcMTI2JzsgcmcgJ1xcMTYwJyAnXFwyNTUnIF1cblxubGV0IHB1bmN0ID1cbiAgdW5pb25fYWxsXG4gICAgWyByZyAnXFwwMzMnICdcXDA0NydcbiAgICA7IHJnICdcXDA1OCcgJ1xcMDY0J1xuICAgIDsgcmcgJ1xcMDkxJyAnXFwwOTYnXG4gICAgOyByZyAnXFwxMjMnICdcXDEyNidcbiAgICA7IHJnICdcXDE2MCcgJ1xcMTY5J1xuICAgIDsgcmcgJ1xcMTcxJyAnXFwxODAnXG4gICAgOyByZyAnXFwxODInICdcXDE4NSdcbiAgICA7IHJnICdcXDE4NycgJ1xcMTkxJ1xuICAgIDsgY2hhciAnXFwyMTUnXG4gICAgOyBjaGFyICdcXDI0NydcbiAgICBdXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfRHluIiwiUmVfRm10IiwiU3RkbGliX0Zvcm1hdCIsIlN0ZGxpYl9DaGFyIiwiUmVfRGVuc2VfbWFwIiwiU3RkbGliX01hcCIsImVxdWFsX2MiLCJ0b19pbnQiLCJ4Iiwib2ZfaW50IiwidG9fY2hhciIsInQiLCJvZl9jaGFyIiwiYyIsImNvbXBhcmVfcGFpciIsInBhcmFtIiwieSIsImVxdWFsX3BhaXIiLCJlcXVhbCIsImNvbXBhcmUiLCJ1bmlvbiIsImwiLCJyIiwiYzIiLCJjMSIsIm1hdGNoIiwiaW50ZXIiLCJkaWZmIiwic2luZ2xlIiwiY3NpbmdsZSIsImkiLCJhZGQiLCJvZmZzZXQiLCJvIiwiZW1wdHkiLCJ1bmlvbl9hbGwiLCJ0cyIsImNhbnkiLCJpbnRlcnNlY3RfYWxsIiwibWVtIiwicyIsInJlbSIsImhhc2hfcmVjIiwiaiIsImhhc2giLCJwcmludF9vbmUiLCJjaCIsInBwIiwidG9fZHluIiwiaXRlciIsInhzIiwib25lX2NoYXIiLCJ2IiwidSIsIkNTZXRNYXAiLCJmb2xkX3JpZ2h0IiwiaW5pdCIsImFjYyIsImlzX2VtcHR5IiwicHJlcGVuZCIsImQiLCJwaWNrIiwiY3NlcSIsInVwcGVyIiwiY2xvd2VyIiwiY2RpZ2l0IiwiYXNjaWkiLCJjYWRkIiwic3BhY2UiLCJ4ZGlnaXQiLCJjYWxwaGEiLCJjYWxudW0iLCJjYXNlX2luc2VucyIsImN3b3JkIiwibm90bmwiLCJubCIsInNldCIsInN0ciIsImJsYW5rIiwibG93ZXIiLCJhbHBoYSIsImFsbnVtIiwid29yZGMiLCJjbnRybCIsImdyYXBoIiwicHJpbnQiLCJwdW5jdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJ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QUE7QUFBQSxJQUVqQztBQUFBLEdBQUU7QUFBQTtBQUFBLElBQUFzQyxRQUdRO0FBQUEsUUFHdUQ7QUFBQSxRQUFsQjtBQUFBLFFBdklqQztBQUFBLElBQUFDLFFBdUlKLGNBQVk7QUFBQSxRQXZJUjtBQUFBLElBQUFDO0FBQUFBLE1Bd0lKLG9DQXhJSTtBQUFBLElBQUFDLFFBeUlKO0FBQUEsSUFBQUMsUUFDQSx5QkExSUk7QUFBQSxRQTJJMEI7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUFDa0I7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUFDa0I7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUE3SVI7QUFBQTtBQUFBLFFBd0pWO0FBQUEsUUFEQTtBQUFBLFFBREE7QUFBQSxRQURBO0FBQUEsUUFEQTtBQUFBLFFBREE7QUFBQSxRQURBO0FBQUEsSUFBQUMsUUFGSixjQUNJO0FBQUEsR0FVRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR4UEwiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMTU4MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2hhc2hfc2V0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxubW9kdWxlIEFycmF5ID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIHQgPSBCeXRlcy50XG5cbiAgbGV0IHdvcmRzID0gOFxuICBsZXRbQGlubGluZV0gbGVuZ3RoIHQgPSBCeXRlcy5sZW5ndGggdCAvIHdvcmRzXG4gIGxldFtAaW5saW5lXSB1bnNhZmVfZ2V0IHQgaSA9IEludDY0LnRvX2ludCAoQnl0ZXMuZ2V0X2ludDY0X25lIHQgKGkgKiB3b3JkcykpXG4gIGxldFtAaW5saW5lXSB1bnNhZmVfc2V0IHQgaSB4ID0gQnl0ZXMuc2V0X2ludDY0X25lIHQgKGkgKiB3b3JkcykgKEludDY0Lm9mX2ludCB4KVxuXG4gIGxldFtAaW5saW5lXSBtYWtlIGxlbiB4ID1cbiAgICBsZXQgdCA9IEJ5dGVzLmNyZWF0ZSAobGVuICogd29yZHMpIGluXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCB0IC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCB0IGkgeFxuICAgIGRvbmU7XG4gICAgdFxuICA7O1xuXG4gIGxldFtAaW5saW5lXSBtYWtlX2Fic2VudCBsZW4gPSBCeXRlcy5tYWtlIChsZW4gKiB3b3JkcykgJ1xcMjU1J1xuICBsZXQgY2xlYXIgdCA9IEJ5dGVzLmZpbGwgdCAwIChCeXRlcy5sZW5ndGggdCkgJ1xcMjU1J1xuXG4gIGxldCBmb2xkX2xlZnQgdCB+aW5pdCB+ZiA9XG4gICAgbGV0IGluaXQgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggdCAtIDEgZG9cbiAgICAgIGluaXQgOj0gZiAhaW5pdCAodW5zYWZlX2dldCB0IGkpXG4gICAgZG9uZTtcbiAgICAhaW5pdFxuICA7O1xuZW5kXG5cbigqIEEgc3BlY2lhbGl6ZWQgaGFzaCB0YWJsZSB0aGF0IG1ha2VzIHRoZSBmb2xsb3dpbmcgdHJhZGUtb2ZmczpcbiAgIC0gT3BlbiBhZGRyZXNpbmcuIEJ1Y2tldGluZyBpcyBxdWl0ZSBtZW1vcnkgaW50ZW5zaXZlIGFuZCBkdW5lIGlzIGFscmVhZHlcbiAgICAgYSBtZW1vcnkgaG9nLlxuICAgLSBObyBib3hpbmcgZm9yIGVtcHR5IHNsb3RzLiBXZSBtYWtlIHVzZSBvZiB0aGUgZmFjdCB0aGF0IGlkJ3MgYXJlIG5ldmVyXG4gICAgIG5lZ2F0aXZlIHRvIGFjaGlldmUgdGhpcy5cbiAgIC0gTm8gc2F2aW5nIG9mIHRoZSBoYXNoLiBSZWNvbXB1dGluZyB0aGUgaGFzaCBmb3IgaWQncyBpcyBhIG5vLW9wLlxuKilcblxudHlwZSBub25yZWMgdGFibGUgPVxuICB7IG11dGFibGUgdGFibGUgOiBBcnJheS50XG4gIDsgbXV0YWJsZSBzaXplIDogaW50XG4gIH1cblxudHlwZSB0ID0gdGFibGUgT3B0aW9uLnQgcmVmXG5cbmxldCBpbml0IHQgPVxuICBpZiBPcHRpb24uaXNfbm9uZSAhdCB0aGVuIHQgOj0gT3B0aW9uLnNvbWUgeyBzaXplID0gMDsgdGFibGUgPSBBcnJheS5tYWtlIDAgKC0xKSB9O1xuICBPcHRpb24uZ2V0ICF0XG47O1xuXG5sZXRbQGlubGluZV0gc2hvdWxkX2dyb3cgdCA9XG4gIGxldCBzbG90cyA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gIHNsb3RzID0gMCB8fCAodC5zaXplID4gMCAmJiBzbG90cyAvIHQuc2l6ZSA8IDIpXG47O1xuXG5sZXQgYWJzZW50ID0gLTFcblxubGV0ICgpID1cbiAgbGV0IHggPSBBcnJheS5tYWtlX2Fic2VudCAxIGluXG4gIGFzc2VydCAoQXJyYXkudW5zYWZlX2dldCB4IDAgPSBhYnNlbnQpXG47O1xuXG5sZXQgY3JlYXRlICgpID0gcmVmIE5vbmVcblxubGV0W0BpbmxpbmVdIGluZGV4X29mX29mZnNldCBzbG90cyBpbmRleCBpID1cbiAgbGV0IGkgPSBpbmRleCArICFpIGluXG4gIGlmIGkgPj0gc2xvdHMgdGhlbiBpIC0gc2xvdHMgZWxzZSBpXG47O1xuXG5sZXQgY2xlYXIgdCA9XG4gIG1hdGNoICF0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB0IC0+XG4gICAgdC5zaXplIDwtIDA7XG4gICAgQXJyYXkuY2xlYXIgdC50YWJsZVxuOztcblxubGV0IGFkZCB0IHggPVxuICBsZXQgaGFzaCA9IEludC5oYXNoIHggaW5cbiAgbGV0IHNsb3RzID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgbGV0IGluZGV4ID0gaGFzaCBsYW5kIChzbG90cyAtIDEpIGluXG4gIGxldCBpbnNlcnRpbmcgPSByZWYgdHJ1ZSBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpbnNlcnRpbmcgZG9cbiAgICBsZXQgaWR4ID0gaW5kZXhfb2Zfb2Zmc2V0IHNsb3RzIGluZGV4IGkgaW5cbiAgICBsZXQgZWxlbSA9IEFycmF5LnVuc2FmZV9nZXQgdC50YWJsZSBpZHggaW5cbiAgICBpZiBlbGVtID0gYWJzZW50XG4gICAgdGhlbiAoXG4gICAgICBBcnJheS51bnNhZmVfc2V0IHQudGFibGUgaWR4IHg7XG4gICAgICBpbnNlcnRpbmcgOj0gZmFsc2UpXG4gICAgZWxzZSBpbmNyIGlcbiAgZG9uZTtcbiAgdC5zaXplIDwtIHQuc2l6ZSArIDFcbjs7XG5cbmxldCByZXNpemUgdCA9XG4gIGxldCBvbGRfdGFibGUgPSB0LnRhYmxlIGluXG4gIGxldCBzbG90cyA9IEFycmF5Lmxlbmd0aCBvbGRfdGFibGUgaW5cbiAgbGV0IHRhYmxlID0gQXJyYXkubWFrZV9hYnNlbnQgKGlmIHNsb3RzID0gMCB0aGVuIDEgZWxzZSBzbG90cyBsc2wgMSkgaW5cbiAgdC50YWJsZSA8LSB0YWJsZTtcbiAgZm9yIGkgPSAwIHRvIHNsb3RzIC0gMSBkb1xuICAgIGxldCBlbGVtID0gQXJyYXkudW5zYWZlX2dldCBvbGRfdGFibGUgaSBpblxuICAgIGlmIGVsZW0gPD4gYWJzZW50IHRoZW4gYWRkIHQgZWxlbVxuICBkb25lXG47O1xuXG5sZXQgYWRkIHQgeCA9XG4gIGxldCB0ID0gaW5pdCB0IGluXG4gIGlmIHNob3VsZF9ncm93IHQgdGhlbiByZXNpemUgdDtcbiAgYWRkIHQgeFxuOztcblxubGV0W0BpbmxpbmVdIGlzX2VtcHR5IHQgPVxuICBsZXQgdCA9ICF0IGluXG4gIGlmIE9wdGlvbi5pc19ub25lIHRcbiAgdGhlbiB0cnVlXG4gIGVsc2UgKFxuICAgIGxldCB0ID0gT3B0aW9uLmdldCB0IGluXG4gICAgdC5zaXplID0gMClcbjs7XG5cbmxldCBtZW0gdCB4ID1cbiAgbGV0IHQgPSAhdCBpblxuICBpZiBPcHRpb24uaXNfbm9uZSB0IHx8IChPcHRpb24uZ2V0IHQpLnNpemUgPSAwXG4gIHRoZW4gZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IHQgPSBPcHRpb24uZ2V0IHQgaW5cbiAgICBsZXQgaGFzaCA9IEludC5oYXNoIHggaW5cbiAgICBsZXQgc2xvdHMgPSBBcnJheS5sZW5ndGggdC50YWJsZSBpblxuICAgIGxldCBpbmRleCA9IGhhc2ggbGFuZCAoc2xvdHMgLSAxKSBpblxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgZm91bmQgPSByZWYgZmFsc2UgaW5cbiAgICB3aGlsZSAobm90ICFmb3VuZCkgJiYgIWkgPCBzbG90cyBkb1xuICAgICAgbGV0IGlkeCA9IGluZGV4X29mX29mZnNldCBzbG90cyBpbmRleCBpIGluXG4gICAgICBsZXQgZWxlbSA9IEFycmF5LnVuc2FmZV9nZXQgdC50YWJsZSBpZHggaW5cbiAgICAgIGlmIEludC5lcXVhbCBlbGVtIHhcbiAgICAgIHRoZW4gZm91bmQgOj0gdHJ1ZVxuICAgICAgZWxzZSBpZiBJbnQuZXF1YWwgZWxlbSBhYnNlbnRcbiAgICAgIHRoZW4gaSA6PSBzbG90c1xuICAgICAgZWxzZSBpbmNyIGlcbiAgICBkb25lO1xuICAgICFmb3VuZClcbjs7XG5cbmxldCBwcCBmbXQgdCA9XG4gIGxldCB7IHRhYmxlOyBzaXplIH0gPSBpbml0IHQgaW5cbiAgbGV0IHRhYmxlID1cbiAgICBBcnJheS5mb2xkX2xlZnQgdGFibGUgfmluaXQ6W10gfmY6KGZ1biBhY2MgaSAtPiBpZiBpID0gYWJzZW50IHRoZW4gYWNjIGVsc2UgaSA6OiBhY2MpXG4gICAgfD4gTGlzdC5yZXZcbiAgICB8PiBTdGRsaWIuQXJyYXkub2ZfbGlzdFxuICBpblxuICBsZXQgdGFibGUgZm10ICgpID0gRm10LnNleHAgZm10IFwidGFibGVcIiBGbXQuKGFycmF5IGludCkgdGFibGUgaW5cbiAgbGV0IHNpemUgZm10ICgpID0gRm10LnNleHAgZm10IFwic2l6ZVwiIEZtdC5pbnQgc2l6ZSBpblxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUAuJWFALlwiIHRhYmxlICgpIHNpemUgKClcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9jYWxsNCIsImYiLCJhMCIsImExIiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiUmVfRm10IiwiUmVfSW1wb3J0IiwiU3RkbGliX0xpc3RMYWJlbHMiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX09wdGlvbiIsIlN0ZGxpYl9CeXRlcyIsIkFzc2VydF9mYWlsdXJlIiwibGVuZ3RoIiwidCIsInVuc2FmZV9nZXQiLCJpIiwidW5zYWZlX3NldCIsIngiLCJtYWtlX2Fic2VudCIsImxlbiIsImluaXQiLCJhYnNlbnQiLCJjcmVhdGUiLCJwYXJhbSIsImluZGV4X29mX29mZnNldCIsInNsb3RzIiwiaW5kZXgiLCJjbGVhciIsIm1hdGNoIiwiaGFzaCIsImluc2VydGluZyIsImlkeCIsImVsZW0iLCJhZGQiLCJvbGRfdGFibGUiLCJ0YWJsZSIsImlzX2VtcHR5IiwibWVtIiwiZm91bmQiLCJwcCIsImZtdCIsInNpemUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxZQUFBQyxPQUFBQyxHQ00wQix1Q0FBc0I7QUFBQSxZQUFBQyxXQUFBRCxHQUFBRTtBQUFBQSxJQUNILE9BQWtDO0FBQUEsYUFBbEMsMENBQWtDO0FBQUE7QUFBQSxZQUFBQyxXQUFBSCxHQUFBRSxHQUFBRTtBQUFBQSxJQUNaLE9BQWdCO0FBQUEsaUNBQWhCLCtCQUFnQjtBQUFBO0FBQUEsWUFBQUMsWUFBQUM7QUFBQUEsSUFVbEQsbURBQStCO0FBQUE7QUFBQSxZQUFBQyxLQUFBUDtBQUFBQSxJQTRCM0Q7QUFBQSxTQUFBQSxJQW5DTyxrQ0FDSztBQUFBLEtBQVE7QUFBQSxVQUFBRSxJQUFBO0FBQUE7QUFBQSxPQUNuQjtBQUFBLGVBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQWlDVztBQUFBO0FBQUEsSUFDL0IsMENBQWE7QUFBQTtBQUFBLE9BQUFFLElBV0wsb0JBQ0Esa0JBQUFJLFNEM0RWO0FBQUEsR0MyRFM7QUFBQSxJQUErQjtBQUFBO0FBQUEsWUFBQUMsT0FBQUMsT0FHeEIsY0FBUTtBQUFBLFlBQUFDLGdCQUFBQyxPQUFBQyxPQUFBWDtBQUFBQSxRQUFBQSxNQUd0QjtBQUFBLElBQ0EsMkNBQW1DO0FBQUE7QUFBQSxZQUFBWSxNQUFBZDtBQUFBQSxRQUFBZSxRQUluQztBQUFBLGdCQUNVO0FBQUEsUUFBQWYsTUFEVjtBQUFBLElBR0U7QUFBQSxRQUFBQSxNQUNBO0FBQUEsSUF2RFksMEVBdURPO0FBQUE7QUFBQSxjQUFBQSxHQUFBSTtBQUFBQTtBQUFBQSxLQUFBWSxPQUlWO0FBQUEsS0FBQUosUUFDQztBQUFBLEtBQUFDLFFBQ1o7QUFBQSxLQUFBSSxZQUdBO0FBQUEsS0FBQWYsSUFEQTtBQUFBLElBQ0E7QUFBQSxxQkFTQTtBQUFBLFNBQUFnQixNQVJZLGtDQUFBQyxPQUNDO0FBQUEsS0FDUiwwQ0FFRCwwQkFBOEI7QUFBQTtBQUFBO0FBQUEsTUFFM0I7QUFBQTtBQUFBLEdBRWE7QUFBQSxZQUFBQyxJQUFBcEIsR0FBQUk7QUFBQUE7QUFBQUEsS0FBQUosTUFlWjtBQUFBLEtBQUFZLFFBeERJO0FBQUEsU0FDWjtBQUFBLElBQVM7QUFBQTtBQUFBO0FBQUEsYUFBSztBQUFBLEtBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQXdEUjtBQUFBO0FBQUEsTUFBQVMsWUFaaEI7QUFBQSxNQUFBVCxVQUNZO0FBQUEsVUFDc0I7QUFBQSxNQUFBVSxRQUF0QjtBQUFBLEtBQ1o7QUFBQSxhQUNBO0FBQUE7QUFBQSxVQUFBcEIsSUFBQTtBQUFBO0FBQUEsV0FBQWlCLE9BQ2E7QUFBQSxPQUNYLGdCQUF1QjtBQUFBLGVBQXZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0YsZ0JBQU87QUFBQTtBQUFBLFlBQUFJLFNBQUF2QjtBQUFBQSxRQUFBQSxNQUlQO0FBQUEsSUFDRyxzQ0FDRTtBQUFBLFFBQUFBLE1BRUs7QUFBQSxJQUNSLHlDQUFXO0FBQUE7QUFBQSxZQUFBd0IsSUFBQXhCLEdBQUFJO0FBQUFBLFFBQUFKLE1BSWI7QUFBQSxJQUNHO0FBQUEsYUFBb0I7QUFBQTtBQUFBO0FBQUEsT0FBQUEsTUFHYjtBQUFBLE9BQUFnQixPQUNHO0FBQUEsT0FBQUosUUFDQztBQUFBLE9BQUFDLFFBQ1o7QUFBQSxPQUFBWSxRQUdBO0FBQUEsT0FBQXZCLElBRkE7QUFBQSxNQUVBO0FBQUEscUJBQXNCO0FBQUE7QUFBQSxTQUFBZ0IsTUFDVjtBQUFBLFNBQUFDLE9BQ0M7QUFBQSxRQUNSLHlDQUNFO0FBQUEsUUFDRyw4Q0FDSDtBQUFBLFFBQ0E7QUFBQTtBQUFBO0FBQUEsT0FFUDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBakJHO0FBQUEsR0FpQkk7QUFBQSxXQWxGRjtBQUFBLFlBQUFPLEdBQUFDLEtBQUEzQjtBQUFBQTtBQUFBQSxLQUFBZSxRQXNGZTtBQUFBLEtBQUFPLFFBQU07QUFBQSxLQUFBTSxPQUFBO0FBQUEsU0ExSGI7QUFBQSxLQUFBckIsU0EySGY7QUFBQSxJQTNIdUI7QUFBQSxTQUFBQSxTQUFBO0FBQUE7QUFBQSxTQUFBQSxTQUFBLFFBQUFMLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUEsTUFDSDtBQUFBLFdBMkhpQztBQUFBLFdBM0hqQjtBQUFBLHNCQUFBSyxTQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBMkhsQztBQUFBLEtBQUFlLFVBQUE7QUFBQSxhQUFBQSxRQUFBSyxLQUFBakI7QUFBQUEsU0FBQSxJQUkyQztBQUFBLEtBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBVDtBQUFBLHNCQUFnQjtBQUFBO0FBQUEsYUFBQWtCLE9BQUFELEtBQUFqQjtBQUFBQSxLQUMzQyx5REFBZ0M7QUFBQTtBQUFBLElBQ2xEO0FBQUEsMEVBQThDO0FBQUE7QUFBQSxHQTlGUjtBQUFBO0FBQUE7QUFBQSxFRDNEeEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMTc4NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL21hcmtfaW5mb3MubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG50eXBlIHQgPSBpbnQgYXJyYXlcblxubGV0IG1ha2UgbWFya3MgPVxuICBsZXQgbGVuID0gMSArIExpc3QuZm9sZF9sZWZ0IH5mOihmdW4gbWEgKGksIF8pIC0+IG1heCBtYSBpKSB+aW5pdDooLTEpIG1hcmtzIGluXG4gIGxldCB0ID0gQXJyYXkubWFrZSBsZW4gKC0xKSBpblxuICBsZXQgc2V0IChpLCB2KSA9IHQuKGkpIDwtIHYgaW5cbiAgTGlzdC5pdGVyIH5mOnNldCBtYXJrcztcbiAgdFxuOztcblxubGV0IHRlc3QgdCBpID0gaWYgMiAqIGkgPj0gQXJyYXkubGVuZ3RoIHQgdGhlbiBmYWxzZSBlbHNlIHQuKDIgKiBpKSA8PiAtMVxuXG5tb2R1bGUgT2Zmc2V0ID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCBpc19wcmVzZW50IHQgPSB0ID49IDBcbiAgbGV0IGdldF9ub19jaGVjayB0ID0gdFxuZW5kXG5cbmxldCBzdGFydF9vZmZzZXQgdCBpID1cbiAgbGV0IHN0YXJ0X2kgPSAyICogaSBpblxuICBpZiBzdGFydF9pICsgMSA+PSBBcnJheS5sZW5ndGggdCB0aGVuIC0xIGVsc2UgdC4oc3RhcnRfaSlcbjs7XG5cbmxldCBzdG9wX29mZnNldCB0IGkgPVxuICBsZXQgc3RvcF9pID0gKDIgKiBpKSArIDEgaW5cbiAgaWYgc3RvcF9pID49IEFycmF5Lmxlbmd0aCB0IHRoZW4gLTEgZWxzZSB0LihzdG9wX2kpXG47O1xuXG5sZXQgb2Zmc2V0IHQgaSA9XG4gIGxldCBzdGFydF9pID0gMiAqIGkgaW5cbiAgbGV0IHN0b3BfaSA9IHN0YXJ0X2kgKyAxIGluXG4gIGlmIHN0b3BfaSA+PSBBcnJheS5sZW5ndGggdFxuICB0aGVuIE5vbmVcbiAgZWxzZSAoXG4gICAgbGV0IHN0YXJ0ID0gdC4oc3RhcnRfaSkgaW5cbiAgICBpZiBzdGFydCA9IC0xXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSAoXG4gICAgICBsZXQgc3RvcCA9IHQuKHN0b3BfaSkgaW5cbiAgICAgIFNvbWUgKHN0YXJ0LCBzdG9wKSkpXG47O1xuXG5sZXQgaXRlcmkgdCB+ZiA9XG4gIGZvciBpID0gMCB0byAoQXJyYXkubGVuZ3RoIHQgLyAyKSAtIDEgZG9cbiAgICBsZXQgaWR4ID0gMiAqIGkgaW5cbiAgICBsZXQgc3RhcnQgPSB0LihpZHgpIGluXG4gICAgaWYgc3RhcnQgPD4gLTFcbiAgICB0aGVuIChcbiAgICAgIGxldCBzdG9wID0gdC4oaWR4ICsgMSkgaW5cbiAgICAgIGYgaSBzdGFydCBzdG9wKVxuICBkb25lXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9jYWxsMyIsImYiLCJhMCIsImExIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwibWFrZSIsIm1hcmtzIiwibGVuIiwibWEiLCJwYXJhbSIsImkiLCJ0Iiwic2V0IiwidiIsInRlc3QiLCJpc19wcmVzZW50IiwiZ2V0X25vX2NoZWNrIiwic3RhcnRfb2Zmc2V0Iiwic3RhcnRfaSIsInN0b3Bfb2Zmc2V0Iiwic3RvcF9pIiwib2Zmc2V0Iiwic3RhcnQiLCJzdG9wIiwiaXRlcmkiLCJpZHgiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsWUFBQUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQUM7QUFBQUEsT0NLZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBQUMsSUFBQUM7QUFBQUEsZUFBQUMsSUFBa0I7QUFBQSxXQUFrQixxQ0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBQUMsSUFDbkQ7QUFBQSxhQUFBQyxJQUFBSDtBQUFBQSxTQUFBSSxJQUNBLFVBQUFILElBQUE7QUFBQSxLQUFTO0FBQUEsS0FBVTtBQUFBO0FBQUEsSUFDM0I7QUFBQSxJQUFzQjtBQUFBLEdBQ3JCO0FBQUEsWUFBQUksS0FBQUgsR0FBQUQ7QUFBQUEsSUFHWSxnQ0FBZ0M7QUFBQSxZQUFXO0FBQUEsdURBQVM7QUFBQSxHQUFNO0FBQUEsWUFBQUssV0FBQUosR0FLcEQsc0JBQU07QUFBQSxZQUFBSyxhQUFBTCxHQUNKLFNBQUM7QUFBQSxZQUFBTSxhQUFBTixHQUFBRDtBQUFBQSxRQUFBUSxVQUl0QjtBQUFBLElBQ0E7QUFBQTtBQUFBLGNBQThDLHlDQUFXO0FBQUE7QUFBQSxZQUFBQyxZQUFBUixHQUFBRDtBQUFBQSxRQUFBVSxTQUl6RDtBQUFBLElBQ0E7QUFBQTtBQUFBLGNBQXlDLHVDQUFVO0FBQUE7QUFBQSxZQUFBQyxPQUFBVixHQUFBRDtBQUFBQSxRQUFBUSxVQUluRCxXQUFBRSxTQUNBO0FBQUEsSUFDQSwyQkFDSztBQUFBLFFBQUFFLFFBRVM7QUFBQSxJQUNULHVDQUNFO0FBQUEsUUFBQUMsT0FFUTtBQUFBLElBQ1g7QUFBQSxHQUFvQjtBQUFBLFlBQUFDLE1BQUFiLEdBQUFiO0FBQUFBLFFBQUEsSUFJeEI7QUFBQTtBQUFBLFNBQUFZLElBQUE7QUFBQTtBQUFBLFVBQUFlLE1BQ0UsV0FBQUgsUUFDWTtBQUFBLE1BQ1o7QUFBQSxlQUNLLGFBQUFDLE9BQ1E7QUFBQSxPQUNYO0FBQUE7QUFBQSxjQUhGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUhGO0FBQUEsR0FPSTtBQUFBLEdEckROIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzE4ODMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wbWFyay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm1vZHVsZSBQbWFyayA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgZXF1YWwgKHggOiBpbnQpICh5IDogaW50KSA9IHggPSB5XG4gIGxldCBjb21wYXJlICh4IDogaW50KSAoeSA6IGludCkgPSBjb21wYXJlIHggeVxuICBsZXQgciA9IEF0b21pYy5tYWtlIDFcbiAgbGV0IGdlbiAoKSA9IEF0b21pYy5mZXRjaF9hbmRfYWRkIHIgMVxuICBsZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG5lbmRcblxuaW5jbHVkZSBQbWFya1xuXG5tb2R1bGUgU2V0ID0gc3RydWN0XG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoUG1hcmspXG5cbiAgbGV0W0B3YXJuaW5nIFwiLTMyXCJdIHRvX2xpc3QgeCA9XG4gICAgbGV0IG9wZW4gU2V0IGluXG4gICAgdG9fc2VxIHggfD4gTGlzdC5vZl9zZXFcbiAgOztcblxuICBpbmNsdWRlIFNldFxuZW5kXG5cbmxldCB0b19keW4gPSBEeW4uaW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYl9Gb3JtYXQiLCJTdGRsaWJfU2V0IiwiUmVfRHluIiwiZXF1YWwiLCJ4IiwieSIsImNvbXBhcmUiLCJyIiwiZ2VuIiwicGFyYW0iLCJwcCIsIlNldCIsImVtcHR5IiwiYWRkIiwic2luZ2xldG9uIiwicmVtb3ZlIiwidW5pb24iLCJpbnRlciIsImRpc2pvaW50IiwiZGlmZiIsImNhcmRpbmFsIiwiZWxlbWVudHMiLCJtaW5fZWx0IiwibWluX2VsdF9vcHQiLCJtYXhfZWx0IiwibWF4X2VsdF9vcHQiLCJjaG9vc2UiLCJjaG9vc2Vfb3B0IiwiZmluZCIsImZpbmRfb3B0IiwiZmluZF9maXJzdCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsIml0ZXIiLCJmb2xkIiwibWFwIiwiZmlsdGVyIiwiZmlsdGVyX21hcCIsInBhcnRpdGlvbiIsInNwbGl0IiwiaXNfZW1wdHkiLCJtZW0iLCJzdWJzZXQiLCJmb3JfYWxsIiwiZXhpc3RzIiwidG9fbGlzdCIsIm9mX2xpc3QiLCJ0b19zZXFfZnJvbSIsInRvX3NlcSIsInRvX3Jldl9zZXEiLCJhZGRfc2VxIiwib2Zfc2VxIiwidG9fZHluIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsTUFBQUMsR0FBQUMsR0NHa0MsdUJBQUs7QUFBQSxPQUFBQyxVREh2QywwQkFBQUMsSUNLVTtBQUFBLFlBQUFDLElBQUFDLE9BQ0ssd0NBQXdCO0FBQUE7QUFBQSxJQUFBQyxLQURoQjtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBdkMsVUFBQTtBQUFBLElBQUFHLFlBQUE7QUFBQSxJQUFBcUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFREx2QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMyMDA0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYXV0b21hdGEubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG4oKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG5sZXQgaGFzaF9jb21iaW5lIGggYWNjdSA9IChhY2N1ICogNjU1OTkpICsgaFxuXG5tb2R1bGUgSWRzIDogc2lnXG4gIG1vZHVsZSBJZCA6IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgemVybyA6IHRcbiAgICB2YWwgaGFzaCA6IHQgLT4gaW50XG4gICAgdmFsIHBwIDogdCBGbXQudFxuXG4gICAgbW9kdWxlIEhhc2hfc2V0IDogc2lnXG4gICAgICB0eXBlIGlkIDo9IHRcbiAgICAgIHR5cGUgdFxuXG4gICAgICB2YWwgY3JlYXRlIDogdW5pdCAtPiB0XG4gICAgICB2YWwgbWVtIDogdCAtPiBpZCAtPiBib29sXG4gICAgICB2YWwgYWRkIDogdCAtPiBpZCAtPiB1bml0XG4gICAgICB2YWwgY2xlYXIgOiB0IC0+IHVuaXRcbiAgICBlbmRcbiAgZW5kXG5cbiAgdHlwZSB0XG5cbiAgdmFsIGNyZWF0ZSA6IHVuaXQgLT4gdFxuICB2YWwgbmV4dCA6IHQgLT4gSWQudFxuZW5kID0gc3RydWN0XG4gIG1vZHVsZSBJZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbW9kdWxlIEhhc2hfc2V0ID0gSGFzaF9zZXRcblxuICAgIGxldCBlcXVhbCA9IEludC5lcXVhbFxuICAgIGxldCB6ZXJvID0gMFxuICAgIGxldCBoYXNoIHggPSB4XG4gICAgbGV0IHBwID0gRm10LmludFxuICBlbmRcblxuICB0eXBlIHQgPSBpbnQgcmVmXG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiAwXG5cbiAgbGV0IG5leHQgdCA9XG4gICAgaW5jciB0O1xuICAgICF0XG4gIDs7XG5lbmRcblxubW9kdWxlIElkID0gSWRzLklkXG5cbm1vZHVsZSBTZW0gPSBzdHJ1Y3RcbiAgdHlwZSB0ID1cbiAgICBbIGBMb25nZXN0XG4gICAgfCBgU2hvcnRlc3RcbiAgICB8IGBGaXJzdFxuICAgIF1cblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IGBTaG9ydGVzdCAtPiBcInNob3J0XCJcbiAgICB8IGBMb25nZXN0IC0+IFwibG9uZ1wiXG4gICAgfCBgRmlyc3QgLT4gXCJmaXJzdFwiXG4gIDs7XG5cbiAgbGV0IHRvX2R5biB0ID0gRHluLmVudW0gKHRvX3N0cmluZyB0KVxuICBsZXQgZXF1YWwgPSBQb2x5LmVxdWFsXG4gIGxldCBwcCBjaCBrID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBjaCAodG9fc3RyaW5nIGspXG5lbmRcblxubW9kdWxlIFJlcF9raW5kID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgWyBgR3JlZWR5XG4gICAgfCBgTm9uX2dyZWVkeVxuICAgIF1cblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IGBHcmVlZHkgLT4gXCJHcmVlZHlcIlxuICAgIHwgYE5vbl9ncmVlZHkgLT4gXCJOb25fZ3JlZWR5XCJcbiAgOztcblxuICBsZXQgdG9fZHluIHQgPSBEeW4uZW51bSAodG9fc3RyaW5nIHQpXG4gIGxldCBwcCBmbXQgdCA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10ICh0b19zdHJpbmcgdClcbmVuZFxuXG5tb2R1bGUgTWFyayA6IHNpZ1xuICB0eXBlIHQgPSBwcml2YXRlIGludFxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgcHAgOiB0IEZtdC50XG4gIHZhbCB0b19keW4gOiB0IC0+IER5bi50XG4gIHZhbCBzdGFydCA6IHRcbiAgdmFsIHByZXYgOiB0IC0+IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbiAgdmFsIG5leHQyIDogdCAtPiB0XG4gIHZhbCBncm91cF9jb3VudCA6IHQgLT4gaW50XG4gIHZhbCBvdXRzaWRlX3JhbmdlIDogdCAtPiBzdGFydF9pbmNsdXNpdmU6dCAtPiBzdG9wX2luY2x1c2l2ZTp0IC0+IGJvb2xcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgZXF1YWwgPSBJbnQuZXF1YWxcbiAgbGV0IGNvbXBhcmUgPSBJbnQuY29tcGFyZVxuICBsZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG4gIGxldCB0b19keW4gPSBEeW4uaW50XG4gIGxldCBzdGFydCA9IDBcbiAgbGV0IHByZXYgeCA9IHByZWQgeFxuICBsZXQgbmV4dCB4ID0gc3VjYyB4XG4gIGxldCBuZXh0MiB4ID0geCArIDJcbiAgbGV0IGdyb3VwX2NvdW50IHggPSB4IC8gMlxuXG4gIGxldCBvdXRzaWRlX3JhbmdlIHQgfnN0YXJ0X2luY2x1c2l2ZSB+c3RvcF9pbmNsdXNpdmUgPVxuICAgIHQgPCBzdGFydF9pbmNsdXNpdmUgfHwgdCA+IHN0b3BfaW5jbHVzaXZlXG4gIDs7XG5lbmRcblxubW9kdWxlIElkeCA6IHNpZ1xuICB0eXBlIHQgPSBwcml2YXRlIGludFxuXG4gIHZhbCBwcCA6IHQgRm10LnRcbiAgdmFsIHRvX2R5biA6IHQgLT4gRHluLnRcbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaW5pdGlhbCA6IHRcbiAgdmFsIHVzZWQgOiB0IC0+IGJvb2xcbiAgdmFsIG1ha2UgOiBpbnQgLT4gdFxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCB0b19keW4gPSBEeW4uaW50XG4gIGxldCB0b19pbnQgeCA9IHhcbiAgbGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2ludFxuICBsZXQgdXNlZCB0ID0gdCA+PSAwXG4gIGxldCBtYWtlIHggPSB4XG4gIGxldCBlcXVhbCA9IEludC5lcXVhbFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpbml0aWFsID0gMFxuZW5kXG5cbm1vZHVsZSBFeHByID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBpZCA6IElkLnRcbiAgICA7IGRlZiA6IGRlZlxuICAgIH1cblxuICBhbmQgZGVmID1cbiAgICB8IENzdCBvZiBDc2V0LnRcbiAgICB8IEFsdCBvZiB0IGxpc3RcbiAgICB8IFNlcSBvZiBTZW0udCAqIHQgKiB0XG4gICAgfCBFcHNcbiAgICB8IFJlcCBvZiBSZXBfa2luZC50ICogU2VtLnQgKiB0XG4gICAgfCBNYXJrIG9mIE1hcmsudFxuICAgIHwgRXJhc2Ugb2YgTWFyay50ICogTWFyay50XG4gICAgfCBCZWZvcmUgb2YgQ2F0ZWdvcnkudFxuICAgIHwgQWZ0ZXIgb2YgQ2F0ZWdvcnkudFxuICAgIHwgUG1hcmsgb2YgUG1hcmsudFxuXG4gIGxldCB3cmFwX3NlbSBzZW0gc2VtJyB2ID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBsZXQgbmFtZSA9IFNlbS50b19zdHJpbmcgc2VtJyBpblxuICAgIG1hdGNoIHNlbSB3aXRoXG4gICAgfCBTb21lIHNlbSB3aGVuIFNlbS5lcXVhbCBzZW0gc2VtJyAtPiB2XG4gICAgfCBOb25lIHwgU29tZSBfIC0+XG4gICAgICAobWF0Y2ggdiB3aXRoXG4gICAgICAgfCBMaXN0IHYgLT4gdmFyaWFudCBuYW1lIHZcbiAgICAgICB8IF8gLT4gdmFyaWFudCBuYW1lIFsgdiBdKVxuICA7O1xuXG4gIGxldCByZWMgc2VxX2FzX2xpc3Qgc2VtID0gZnVuY3Rpb25cbiAgICB8IEVwcyAtPiBbXVxuICAgIHwgQ3N0IGNzIC0+IFsgQ3N0IGNzIF1cbiAgICB8IFNlcSAoc2VtJywgeCwgeSkgLT5cbiAgICAgIGlmIFNlbS5lcXVhbCBzZW0gc2VtJ1xuICAgICAgdGhlbiB4LmRlZiA6OiBzZXFfYXNfbGlzdCBzZW0geS5kZWZcbiAgICAgIGVsc2UgcmFpc2Vfbm90cmFjZSBOb3RfZm91bmRcbiAgICB8IF8gLT4gcmFpc2Vfbm90cmFjZSBOb3RfZm91bmRcbiAgOztcblxuICBsZXQgc2VxX2FzX2xpc3Qgc2VtIHQgPVxuICAgIG1hdGNoIHNlcV9hc19saXN0IHNlbSB0IHdpdGhcbiAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gTm9uZVxuICAgIHwgcyAtPiBTb21lIHNcbiAgOztcblxuICBsZXQgcmVjIGR5bl9vZl9kZWYgc2VtID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBmdW5jdGlvblxuICAgIHwgQ3N0IGNzZXQgLT4gQ3NldC50b19keW4gY3NldFxuICAgIHwgQWx0IGFsdCAtPiB2YXJpYW50IFwiQWx0XCIgKExpc3QubWFwIH5mOih0b19keW4gc2VtKSBhbHQpXG4gICAgfCBTZXEgKHNlbScsIHgsIHkpIC0+XG4gICAgICBsZXQgdG9fZHluID0gdG9fZHluIChTb21lIHNlbScpIGluXG4gICAgICBsZXQgeCA9XG4gICAgICAgIG1hdGNoIHNlcV9hc19saXN0IHNlbScgeS5kZWYgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gdmFyaWFudCBcIlNlcVwiIFsgdG9fZHluIHg7IHRvX2R5biB5IF1cbiAgICAgICAgfCBTb21lIHkgLT4gdmFyaWFudCBcIlNlcVwiICh0b19keW4geCA6OiBMaXN0Lm1hcCB5IH5mOihkeW5fb2ZfZGVmIHNlbSkpXG4gICAgICBpblxuICAgICAgd3JhcF9zZW0gc2VtIHNlbScgeFxuICAgIHwgRXBzIC0+IEVudW0gXCJFcHNcIlxuICAgIHwgUmVwIChfLCBzZW0nLCB0KSAtPiB3cmFwX3NlbSBzZW0gc2VtJyAodmFyaWFudCBcIlJlcFwiIFsgdG9fZHluIChTb21lIHNlbScpIHQgXSlcbiAgICB8IE1hcmsgbSAtPiB2YXJpYW50IFwiTWFya1wiIFsgTWFyay50b19keW4gbSBdXG4gICAgfCBQbWFyayBtIC0+IHZhcmlhbnQgXCJQbWFya1wiIFsgUG1hcmsudG9fZHluIG0gXVxuICAgIHwgRXJhc2UgKHgsIHkpIC0+IHZhcmlhbnQgXCJFcmFzZVwiIFsgTWFyay50b19keW4geDsgTWFyay50b19keW4geSBdXG4gICAgfCBCZWZvcmUgYyAtPiB2YXJpYW50IFwiQmVmb3JlXCIgWyBDYXRlZ29yeS50b19keW4gYyBdXG4gICAgfCBBZnRlciBjIC0+IHZhcmlhbnQgXCJBZnRlclwiIFsgQ2F0ZWdvcnkudG9fZHluIGMgXVxuXG4gIGFuZCB0b19keW4gc2VtIHsgaWQgPSBfOyBkZWYgfSA9IGR5bl9vZl9kZWYgc2VtIGRlZlxuXG4gIGxldCByZWMgcHBfd2l0aF9zZW0gc2VtIGNoIGUgPVxuICAgIGxldCBvcGVuIEZtdCBpblxuICAgIG1hdGNoIGUuZGVmIHdpdGhcbiAgICB8IENzdCBsIC0+IHNleHAgY2ggXCJjc3RcIiBDc2V0LnBwIGxcbiAgICB8IEFsdCBsIC0+IHNleHAgY2ggXCJhbHRcIiAobGlzdCAocHBfd2l0aF9zZW0gc2VtKSkgbFxuICAgIHwgU2VxIChrLCBlLCBlJykgLT5cbiAgICAgIHNleHAgY2ggXCJzZXFcIiAodHJpcGxlIFNlbS5wcCAocHBfd2l0aF9zZW0gc2VtKSAocHBfd2l0aF9zZW0gc2VtKSkgKGssIGUsIGUnKVxuICAgIHwgRXBzIC0+IHN0ciBjaCBcImVwc1wiXG4gICAgfCBSZXAgKF9yaywgaywgZSkgLT4gc2V4cCBjaCBcInJlcFwiIChwYWlyIFNlbS5wcCAocHBfd2l0aF9zZW0gKFNvbWUgaykpKSAoaywgZSlcbiAgICB8IE1hcmsgaSAtPiBzZXhwIGNoIFwibWFya1wiIE1hcmsucHAgaVxuICAgIHwgUG1hcmsgaSAtPiBzZXhwIGNoIFwicG1hcmtcIiBQbWFyay5wcCBpXG4gICAgfCBFcmFzZSAoYiwgZSkgLT4gc2V4cCBjaCBcImVyYXNlXCIgKHBhaXIgTWFyay5wcCBNYXJrLnBwKSAoYiwgZSlcbiAgICB8IEJlZm9yZSBjIC0+IHNleHAgY2ggXCJiZWZvcmVcIiBDYXRlZ29yeS5wcCBjXG4gICAgfCBBZnRlciBjIC0+IHNleHAgY2ggXCJhZnRlclwiIENhdGVnb3J5LnBwIGNcbiAgOztcblxuICBsZXQgcHAgPSBwcF93aXRoX3NlbSBOb25lXG4gIGxldCBlcHNfZXhwciA9IHsgaWQgPSBJZC56ZXJvOyBkZWYgPSBFcHMgfVxuICBsZXQgbWsgaWRzIGRlZiA9IHsgaWQgPSBJZHMubmV4dCBpZHM7IGRlZiB9XG4gIGxldCBlbXB0eSBpZHMgPSBtayBpZHMgKEFsdCBbXSlcbiAgbGV0IGNzdCBpZHMgcyA9IGlmIENzZXQuaXNfZW1wdHkgcyB0aGVuIGVtcHR5IGlkcyBlbHNlIG1rIGlkcyAoQ3N0IHMpXG4gIGxldCBlcHMgaWRzID0gbWsgaWRzIEVwc1xuICBsZXQgcmVwIGlkcyBraW5kIHNlbSB4ID0gbWsgaWRzIChSZXAgKGtpbmQsIHNlbSwgeCkpXG4gIGxldCBtYXJrIGlkcyBtID0gbWsgaWRzIChNYXJrIG0pXG4gIGxldCBwbWFyayBpZHMgaSA9IG1rIGlkcyAoUG1hcmsgaSlcbiAgbGV0IGVyYXNlIGlkcyBtIG0nID0gbWsgaWRzIChFcmFzZSAobSwgbScpKVxuICBsZXQgYmVmb3JlIGlkcyBjID0gbWsgaWRzIChCZWZvcmUgYylcbiAgbGV0IGFmdGVyIGlkcyBjID0gbWsgaWRzIChBZnRlciBjKVxuXG4gIGxldCBhbHQgaWRzID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGVtcHR5IGlkc1xuICAgIHwgWyBjIF0gLT4gY1xuICAgIHwgbCAtPiBtayBpZHMgKEFsdCBsKVxuICA7O1xuXG4gIGxldCBzZXEgaWRzIChraW5kIDogU2VtLnQpIHggeSA9XG4gICAgbWF0Y2ggeC5kZWYsIHkuZGVmIHdpdGhcbiAgICB8IEFsdCBbXSwgXyAtPiB4XG4gICAgfCBfLCBBbHQgW10gLT4geVxuICAgIHwgRXBzLCBfIC0+IHlcbiAgICB8IF8sIEVwcyB3aGVuIFNlbS5lcXVhbCBraW5kIGBGaXJzdCAtPiB4XG4gICAgfCBfIC0+IG1rIGlkcyAoU2VxIChraW5kLCB4LCB5KSlcbiAgOztcblxuICBsZXQgaXNfZXBzIGV4cHIgPVxuICAgIG1hdGNoIGV4cHIuZGVmIHdpdGhcbiAgICB8IEVwcyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG4gIDs7XG5cbiAgbGV0IHJlYyByZW5hbWUgaWRzIHggPVxuICAgIG1hdGNoIHguZGVmIHdpdGhcbiAgICB8IENzdCBfIHwgRXBzIHwgTWFyayBfIHwgUG1hcmsgXyB8IEVyYXNlIF8gfCBCZWZvcmUgXyB8IEFmdGVyIF8gLT4gbWsgaWRzIHguZGVmXG4gICAgfCBBbHQgbCAtPiBtayBpZHMgKEFsdCAoTGlzdC5tYXAgfmY6KHJlbmFtZSBpZHMpIGwpKVxuICAgIHwgU2VxIChrLCB5LCB6KSAtPiBtayBpZHMgKFNlcSAoaywgcmVuYW1lIGlkcyB5LCByZW5hbWUgaWRzIHopKVxuICAgIHwgUmVwIChnLCBrLCB5KSAtPiBtayBpZHMgKFJlcCAoZywgaywgcmVuYW1lIGlkcyB5KSlcbiAgOztcbmVuZFxuXG50eXBlIGV4cHIgPSBFeHByLnRcblxuaW5jbHVkZSBFeHByXG5cbm1vZHVsZSBNYXJrcyA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHsgbWFya3MgOiAoTWFyay50ICogSWR4LnQpIGxpc3RcbiAgICA7IHBtYXJrcyA6IFBtYXJrLlNldC50XG4gICAgfVxuXG4gIGxldCB0b19keW4geyBtYXJrczsgcG1hcmtzIH0gOiBEeW4udCA9XG4gICAgbGV0IG9wZW4gRHluIGluXG4gICAgcmVjb3JkXG4gICAgICBbICggXCJtYXJrc1wiXG4gICAgICAgICwgTGlzdC5tYXAgbWFya3MgfmY6KGZ1biAobSwgaWR4KSAtPiBwYWlyIChNYXJrLnRvX2R5biBtKSAoSWR4LnRvX2R5biBpZHgpKVxuICAgICAgICAgIHw+IGxpc3QgKVxuICAgICAgOyBcInBtYXJrc1wiLCBQbWFyay5TZXQudG9fbGlzdCBwbWFya3MgfD4gTGlzdC5tYXAgfmY6UG1hcmsudG9fZHluIHw+IGxpc3RcbiAgICAgIF1cbiAgOztcblxuICBsZXQgZXF1YWwgeyBtYXJrczsgcG1hcmtzIH0gdCA9XG4gICAgTGlzdC5lcXVhbFxuICAgICAgfmVxOihmdW4gKHgsIHkpICh4JywgeScpIC0+IE1hcmsuZXF1YWwgeCB4JyAmJiBJZHguZXF1YWwgeSB5JylcbiAgICAgIG1hcmtzXG4gICAgICB0Lm1hcmtzXG4gICAgJiYgUG1hcmsuU2V0LmVxdWFsIHBtYXJrcyB0LnBtYXJrc1xuICA7O1xuXG4gIGxldCBlbXB0eSA9IHsgbWFya3MgPSBbXTsgcG1hcmtzID0gUG1hcmsuU2V0LmVtcHR5IH1cblxuICBsZXQgaGFzaF9tYXJrc19vZmZzZXQgPVxuICAgIGxldCBmIGFjYyAoKGEgOiBNYXJrLnQpLCAoaSA6IElkeC50KSkgPVxuICAgICAgaGFzaF9jb21iaW5lIChhIDo+IGludCkgKGhhc2hfY29tYmluZSAoaSA6PiBpbnQpIGFjYylcbiAgICBpblxuICAgIGZ1biBsIGluaXQgLT4gTGlzdC5mb2xkX2xlZnQgbCB+aW5pdCB+ZlxuICA7O1xuXG4gIGxldCBoYXNoIG0gYWNjdSA9IGhhc2hfbWFya3Nfb2Zmc2V0IG0ubWFya3MgKGhhc2hfY29tYmluZSAoSGFzaHRibC5oYXNoIG0ucG1hcmtzKSBhY2N1KVxuXG4gIGxldCBtYXJrc19zZXRfaWR4ID1cbiAgICBsZXQgcmVjIG1hcmtzX3NldF9pZHggaWR4IG1hcmtzID1cbiAgICAgIG1hdGNoIG1hcmtzIHdpdGhcbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKGEsIGlkeCcpIDo6IHJlbSAtPlxuICAgICAgICBpZiBJZHguZXF1YWwgaWR4JyBJZHgudW5rbm93biB0aGVuIChhLCBpZHgpIDo6IG1hcmtzX3NldF9pZHggaWR4IHJlbSBlbHNlIG1hcmtzXG4gICAgaW5cbiAgICBmdW4gbWFya3MgaWR4IC0+IHsgbWFya3Mgd2l0aCBtYXJrcyA9IG1hcmtzX3NldF9pZHggaWR4IG1hcmtzLm1hcmtzIH1cbiAgOztcblxuICBsZXQgZmlsdGVyIHQgKGIgOiBNYXJrLnQpIChlIDogTWFyay50KSA9XG4gICAgeyB0IHdpdGhcbiAgICAgIG1hcmtzID1cbiAgICAgICAgTGlzdC5maWx0ZXIgdC5tYXJrcyB+ZjooZnVuICgoaSA6IE1hcmsudCksIF8pIC0+XG4gICAgICAgICAgTWFyay5vdXRzaWRlX3JhbmdlIGkgfnN0YXJ0X2luY2x1c2l2ZTpiIH5zdG9wX2luY2x1c2l2ZTplKVxuICAgIH1cbiAgOztcblxuICBsZXQgc2V0X21hcmsgdCAoaSA6IE1hcmsudCkgPVxuICAgIHsgdCB3aXRoIG1hcmtzID0gKGksIElkeC51bmtub3duKSA6OiBMaXN0LnJlbW92ZV9hc3NxIGkgdC5tYXJrcyB9XG4gIDs7XG5cbiAgbGV0IHNldF9wbWFyayB0IGkgPSB7IHQgd2l0aCBwbWFya3MgPSBQbWFyay5TZXQuYWRkIGkgdC5wbWFya3MgfVxuXG4gIGxldCBwcCBmbXQgeyBtYXJrczsgcG1hcmtzIH0gPVxuICAgIEZvcm1hdC5wcF9vcGVuX2JveCBmbXQgMTtcbiAgICAobWF0Y2ggbWFya3Mgd2l0aFxuICAgICB8IFtdIC0+ICgpXG4gICAgIHwgXyA6OiBfIC0+XG4gICAgICAgRm9ybWF0LmZwcmludGZcbiAgICAgICAgIGZtdFxuICAgICAgICAgXCJAWzwyPm1hcmtzQCAlYUBdXCJcbiAgICAgICAgIChGb3JtYXQucHBfcHJpbnRfbGlzdCAoZnVuIGZtdCAoYSwgaSkgLT5cbiAgICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhLSVhXCIgTWFyay5wcCBhIElkeC5wcCBpKSlcbiAgICAgICAgIG1hcmtzKTtcbiAgICAobWF0Y2ggUG1hcmsuU2V0LnRvX2xpc3QgcG1hcmtzIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IHBtYXJrcyAtPlxuICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbPDI+cG1hcmtzICVhQF1cIiAoRm9ybWF0LnBwX3ByaW50X2xpc3QgUG1hcmsucHApIHBtYXJrcyk7XG4gICAgRm9ybWF0LnBwX2Nsb3NlX2JveCBmbXQgKClcbiAgOztcbmVuZFxuXG5tb2R1bGUgU3RhdHVzID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgfCBGYWlsZWRcbiAgICB8IE1hdGNoIG9mIE1hcmtfaW5mb3MudCAqIFBtYXJrLlNldC50XG4gICAgfCBSdW5uaW5nXG5lbmRcblxubW9kdWxlIERlc2MgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBwIDogdCBGbXQudFxuXG4gIG1vZHVsZSBFIDogc2lnXG4gICAgdHlwZSBub25yZWMgdCA9IHByaXZhdGVcbiAgICAgIHwgVFNlcSBvZiBTZW0udCAqIHQgKiBFeHByLnRcbiAgICAgIHwgVEV4cCBvZiBNYXJrcy50ICogRXhwci50XG4gICAgICB8IFRNYXRjaCBvZiBNYXJrcy50XG4gIGVuZFxuXG4gIHZhbCB0b19keW4gOiB0IC0+IER5bi50XG4gIHZhbCBmb2xkX3JpZ2h0IDogdCAtPiBpbml0OidhY2MgLT4gZjooRS50IC0+ICdhY2MgLT4gJ2FjYykgLT4gJ2FjY1xuICB2YWwgdHNlcSA6IFNlbS50IC0+IHQgLT4gRXhwci50IC0+IHQgLT4gdFxuICB2YWwgaW5pdGlhbCA6IEV4cHIudCAtPiB0XG4gIHZhbCBlbXB0eSA6IHRcbiAgdmFsIHNldF9pZHggOiBJZHgudCAtPiB0IC0+IHRcbiAgdmFsIGhhc2ggOiB0IC0+IGludCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHN0YXR1cyA6IHQgLT4gU3RhdHVzLnRcbiAgdmFsIGZpcnN0X21hdGNoIDogdCAtPiBNYXJrcy50IG9wdGlvblxuICB2YWwgcmVtb3ZlX21hdGNoZXMgOiB0IC0+IHRcbiAgdmFsIHNwbGl0X2F0X21hdGNoIDogdCAtPiB0ICogdFxuICB2YWwgYWRkX21hdGNoIDogdCAtPiBNYXJrcy50IC0+IHRcbiAgdmFsIGFkZF9lcHMgOiB0IC0+IE1hcmtzLnQgLT4gdFxuICB2YWwgYWRkX2V4cHIgOiB0IC0+IEUudCAtPiB0XG4gIHZhbCBpdGVyX21hcmtzIDogdCAtPiBmOihNYXJrcy50IC0+IHVuaXQpIC0+IHVuaXRcbiAgdmFsIHJlbW92ZV9kdXBsaWNhdGVzIDogSWQuSGFzaF9zZXQudCAtPiB0IC0+IEV4cHIudCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgbW9kdWxlIEUgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPVxuICAgICAgfCBUU2VxIG9mIFNlbS50ICogdCBsaXN0ICogRXhwci50XG4gICAgICB8IFRFeHAgb2YgTWFya3MudCAqIEV4cHIudFxuICAgICAgfCBUTWF0Y2ggb2YgTWFya3MudFxuXG4gICAgbGV0IHJlYyBlcXVhbF9saXN0IGwxIGwyID0gTGlzdC5lcXVhbCB+ZXE6ZXF1YWwgbDEgbDJcblxuICAgIGFuZCBlcXVhbCB4IHkgPVxuICAgICAgbWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IFRTZXEgKF8sIGwxLCBlMSksIFRTZXEgKF8sIGwyLCBlMikgLT4gSWQuZXF1YWwgZTEuaWQgZTIuaWQgJiYgZXF1YWxfbGlzdCBsMSBsMlxuICAgICAgfCBURXhwIChtYXJrczEsIGUxKSwgVEV4cCAobWFya3MyLCBlMikgLT5cbiAgICAgICAgSWQuZXF1YWwgZTEuaWQgZTIuaWQgJiYgTWFya3MuZXF1YWwgbWFya3MxIG1hcmtzMlxuICAgICAgfCBUTWF0Y2ggbWFya3MxLCBUTWF0Y2ggbWFya3MyIC0+IE1hcmtzLmVxdWFsIG1hcmtzMSBtYXJrczJcbiAgICAgIHwgXywgXyAtPiBmYWxzZVxuICAgIDs7XG5cbiAgICBsZXQgcmVjIGhhc2ggKHQgOiB0KSBhY2N1ID1cbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgfCBUU2VxIChfLCBsLCBlKSAtPlxuICAgICAgICBoYXNoX2NvbWJpbmUgMHgxNzJhMWJjZSAoaGFzaF9jb21iaW5lIChJZC5oYXNoIGUuaWQpIChoYXNoX2xpc3QgbCBhY2N1KSlcbiAgICAgIHwgVEV4cCAobWFya3MsIGUpIC0+XG4gICAgICAgIGhhc2hfY29tYmluZSAweDJiNGMwZDc3IChoYXNoX2NvbWJpbmUgKElkLmhhc2ggZS5pZCkgKE1hcmtzLmhhc2ggbWFya3MgYWNjdSkpXG4gICAgICB8IFRNYXRjaCBtYXJrcyAtPiBoYXNoX2NvbWJpbmUgMHgxYzIwNWFkNSAoTWFya3MuaGFzaCBtYXJrcyBhY2N1KVxuXG4gICAgYW5kIGhhc2hfbGlzdCA9XG4gICAgICBsZXQgZiBhY2MgeCA9IGhhc2ggeCBhY2MgaW5cbiAgICAgIGZ1biBsIGluaXQgLT4gTGlzdC5mb2xkX2xlZnQgbCB+aW5pdCB+ZlxuICAgIDs7XG4gIGVuZFxuXG4gIHR5cGUgdCA9IEUudCBsaXN0XG5cbiAgbGV0IHJlYyB0b19keW4gc2VtIHQgPSBEeW4ubGlzdCAoTGlzdC5tYXAgfmY6KGR5bl9vZl9lIHNlbSkgdClcblxuICBhbmQgZHluX29mX2Ugc2VtID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBmdW5jdGlvblxuICAgIHwgRS5UU2VxIChzZW0nLCB4LCB5KSAtPlxuICAgICAgd3JhcF9zZW1cbiAgICAgICAgc2VtXG4gICAgICAgIHNlbSdcbiAgICAgICAgKHZhcmlhbnQgXCJUU2VxXCIgWyB0b19keW4gKFNvbWUgc2VtJykgeDsgRXhwci50b19keW4gKFNvbWUgc2VtJykgeSBdKVxuICAgIHwgVEV4cCAobWFya3MsIGUpIC0+XG4gICAgICBsZXQgZSA9XG4gICAgICAgIGxldCBiYXNlID0gWyBFeHByLnRvX2R5biBzZW0gZSBdIGluXG4gICAgICAgIGlmIE1hcmtzLihlcXVhbCBlbXB0eSBtYXJrcykgdGhlbiBiYXNlIGVsc2UgTWFya3MudG9fZHluIG1hcmtzIDo6IGJhc2VcbiAgICAgIGluXG4gICAgICB2YXJpYW50IFwiVEV4cFwiIGVcbiAgICB8IFRNYXRjaCBtIC0+IHZhcmlhbnQgXCJUTWFya3NcIiBbIE1hcmtzLnRvX2R5biBtIF1cbiAgOztcblxuICBsZXQgdG9fZHluIHQgPSB0b19keW4gTm9uZSB0XG5cbiAgb3BlbiBFXG5cbiAgbGV0IGVxdWFsID0gRS5lcXVhbF9saXN0XG4gIGxldCBoYXNoID0gRS5oYXNoX2xpc3RcblxuICBsZXQgdHNlcScga2luZCB4IHkgPVxuICAgIG1hdGNoIHggd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgVEV4cCAobWFya3MsIHsgZGVmID0gRXBzOyBfIH0pIF0gLT4gWyBURXhwIChtYXJrcywgeSkgXVxuICAgIHwgXyAtPiBbIFRTZXEgKGtpbmQsIHgsIHkpIF1cbiAgOztcblxuICBsZXQgdHNlcSBraW5kIHggeSByZW0gPSB0c2VxJyBraW5kIHggeSBAIHJlbVxuXG4gIGxldCByZWMgZm9sZF9yaWdodCB0IH5pbml0IH5mID1cbiAgICBtYXRjaCB0IHdpdGhcbiAgICB8IFtdIC0+IGluaXRcbiAgICB8IHggOjogeHMgLT4gZiB4IChmb2xkX3JpZ2h0IHhzIH5pbml0IH5mKVxuICA7O1xuXG4gIGxldCByZWMgaXRlcl9tYXJrcyB0IH5mID1cbiAgICBMaXN0Lml0ZXIgdCB+ZjooZnVuIChlIDogRS50KSAtPlxuICAgICAgbWF0Y2ggZSB3aXRoXG4gICAgICB8IFRTZXEgKF8sIGwsIF8pIC0+IGl0ZXJfbWFya3MgbCB+ZlxuICAgICAgfCBURXhwIChtYXJrcywgXykgfCBUTWF0Y2ggbWFya3MgLT4gZiBtYXJrcylcbiAgOztcblxuICBsZXQgcmVjIHByaW50X3N0YXRlX3JlYyBjaCBlICh5IDogRXhwci50KSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBUTWF0Y2ggbWFya3MgLT4gRm9ybWF0LmZwcmludGYgY2ggXCJAWzwyPihUTWF0Y2hAICVhKUBdXCIgTWFya3MucHAgbWFya3NcbiAgICB8IFRTZXEgKHNlbSwgbCcsIHgpIC0+XG4gICAgICBGb3JtYXQuZnByaW50ZiBjaCBcIkBbPDI+KFRTZXFAICVhQCBcIiBTZW0ucHAgc2VtO1xuICAgICAgcHJpbnRfc3RhdGVfbHN0IGNoIGwnIHg7XG4gICAgICBGb3JtYXQuZnByaW50ZiBjaCBcIkAgJWEpQF1cIiBFeHByLnBwIHhcbiAgICB8IFRFeHAgKG1hcmtzLCB7IGRlZiA9IEVwczsgXyB9KSAtPlxuICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAWzwyPihURXhwQCAlYUAgKCVhKUAgKGVwcykpQF1cIiBJZC5wcCB5LmlkIE1hcmtzLnBwIG1hcmtzXG4gICAgfCBURXhwIChtYXJrcywgeCkgLT5cbiAgICAgIEZvcm1hdC5mcHJpbnRmIGNoIFwiQFs8Mj4oVEV4cEAgJWFAICglYSlAICVhKUBdXCIgSWQucHAgeC5pZCBNYXJrcy5wcCBtYXJrcyBFeHByLnBwIHhcblxuICBhbmQgcHJpbnRfc3RhdGVfbHN0IGNoIGwgeSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBGb3JtYXQuZnByaW50ZiBjaCBcIigpXCJcbiAgICB8IGUgOjogcmVtIC0+XG4gICAgICBwcmludF9zdGF0ZV9yZWMgY2ggZSB5O1xuICAgICAgTGlzdC5pdGVyIHJlbSB+ZjooZnVuIGUgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAIHwgXCI7XG4gICAgICAgIHByaW50X3N0YXRlX3JlYyBjaCBlIHkpXG4gIDs7XG5cbiAgbGV0IHBwIGNoIHQgPSBwcmludF9zdGF0ZV9sc3QgY2ggWyB0IF0geyBpZCA9IElkLnplcm87IGRlZiA9IEVwcyB9XG5cbiAgbGV0IHJlYyBmaXJzdF9tYXRjaCA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCBUTWF0Y2ggbWFya3MgOjogXyAtPiBTb21lIG1hcmtzXG4gICAgfCBfIDo6IHIgLT4gZmlyc3RfbWF0Y2ggclxuICA7O1xuXG4gIGxldCByZW1vdmVfbWF0Y2hlcyB0ID1cbiAgICBMaXN0LmZpbHRlciB0IH5mOihmdW5jdGlvblxuICAgICAgfCBUTWF0Y2ggXyAtPiBmYWxzZVxuICAgICAgfCBfIC0+IHRydWUpXG4gIDs7XG5cbiAgbGV0IHNwbGl0X2F0X21hdGNoID1cbiAgICBsZXQgcmVjIHNwbGl0X2F0X21hdGNoX3JlYyBsID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFRNYXRjaCBfIDo6IHIgLT4gTGlzdC5yZXYgbCwgcmVtb3ZlX21hdGNoZXMgclxuICAgICAgfCB4IDo6IHIgLT4gc3BsaXRfYXRfbWF0Y2hfcmVjICh4IDo6IGwpIHJcbiAgICBpblxuICAgIGZ1biBsIC0+IHNwbGl0X2F0X21hdGNoX3JlYyBbXSBsXG4gIDs7XG5cbiAgbGV0IHN0YXR1cyA6IF8gLT4gU3RhdHVzLnQgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gRmFpbGVkXG4gICAgfCBUTWF0Y2ggbSA6OiBfIC0+IE1hdGNoIChNYXJrX2luZm9zLm1ha2UgKG0ubWFya3MgOj4gKGludCAqIGludCkgbGlzdCksIG0ucG1hcmtzKVxuICAgIHwgXyAtPiBSdW5uaW5nXG4gIDs7XG5cbiAgbGV0IHNldF9pZHggPVxuICAgIGxldCByZWMgZiBpZHggPSBmdW5jdGlvblxuICAgICAgfCBUTWF0Y2ggbWFya3MgLT4gVE1hdGNoIChNYXJrcy5tYXJrc19zZXRfaWR4IG1hcmtzIGlkeClcbiAgICAgIHwgVFNlcSAoa2luZCwgbCwgeCkgLT4gVFNlcSAoa2luZCwgc2V0X2lkeCBpZHggbCwgeClcbiAgICAgIHwgVEV4cCAobWFya3MsIHgpIC0+IFRFeHAgKE1hcmtzLm1hcmtzX3NldF9pZHggbWFya3MgaWR4LCB4KVxuICAgIGFuZCBzZXRfaWR4IGlkeCB4cyA9IExpc3QubWFwIHhzIH5mOihmIGlkeCkgaW5cbiAgICBzZXRfaWR4XG4gIDs7XG5cbiAgbGV0W0BvY2FtbC53YXJuaW5nIFwiLTMyXCJdIHBwIGZtdCB0ID1cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJbJWFdXCIgKEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXA6KEZtdC5saXQgXCI7IFwiKSBwcCkgdFxuICA7O1xuXG4gIGxldCBlbXB0eSA9IFtdXG4gIGxldCBpbml0aWFsIGV4cHIgPSBbIFRFeHAgKE1hcmtzLmVtcHR5LCBleHByKSBdXG4gIGxldCBhZGRfbWF0Y2ggdCBtYXJrcyA9IFRNYXRjaCBtYXJrcyA6OiB0XG4gIGxldCBhZGRfZXBzIHQgbWFya3MgPSBURXhwIChtYXJrcywgZXBzX2V4cHIpIDo6IHRcbiAgbGV0IGFkZF9leHByIHQgZXhwciA9IGV4cHIgOjogdFxuXG4gIGxldCByZW1vdmVfZHVwbGljYXRlcyA9XG4gICAgbGV0IHJlYyBsb29wIHNlZW4gbCB5ID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoVE1hdGNoIF8gYXMgeCkgOjogXyAtPlxuICAgICAgICAoKiBUcnVuY2F0ZSBhZnRlciBmaXJzdCBtYXRjaCAqKVxuICAgICAgICBbIHggXVxuICAgICAgfCBUU2VxIChraW5kLCBsLCB4KSA6OiByIC0+XG4gICAgICAgIGxldCBsID0gbG9vcCBzZWVuIGwgeCBpblxuICAgICAgICBsZXQgciA9IGxvb3Agc2VlbiByIHkgaW5cbiAgICAgICAgdHNlcSBraW5kIGwgeCByXG4gICAgICB8IChURXhwIChfbWFya3MsIHsgZGVmID0gRXBzOyBfIH0pIGFzIGUpIDo6IHIgLT5cbiAgICAgICAgaWYgSWQuSGFzaF9zZXQubWVtIHNlZW4geS5pZFxuICAgICAgICB0aGVuIGxvb3Agc2VlbiByIHlcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgSWQuSGFzaF9zZXQuYWRkIHNlZW4geS5pZDtcbiAgICAgICAgICBlIDo6IGxvb3Agc2VlbiByIHkpXG4gICAgICB8IChURXhwIChfbWFya3MsIHgpIGFzIGUpIDo6IHIgLT5cbiAgICAgICAgaWYgSWQuSGFzaF9zZXQubWVtIHNlZW4geC5pZFxuICAgICAgICB0aGVuIGxvb3Agc2VlbiByIHlcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgSWQuSGFzaF9zZXQuYWRkIHNlZW4geC5pZDtcbiAgICAgICAgICBlIDo6IGxvb3Agc2VlbiByIHkpXG4gICAgaW5cbiAgICBmdW4gc2VlbiBsIHkgLT5cbiAgICAgIElkLkhhc2hfc2V0LmNsZWFyIHNlZW47XG4gICAgICBsb29wIHNlZW4gbCB5XG4gIDs7XG5lbmRcblxubW9kdWxlIEUgPSBEZXNjLkVcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBpZHggOiBJZHgudFxuICAgIDsgY2F0ZWdvcnkgOiBDYXRlZ29yeS50XG4gICAgOyBkZXNjIDogRGVzYy50XG4gICAgOyBtdXRhYmxlIHN0YXR1cyA6IFN0YXR1cy50IG9wdGlvblxuICAgIDsgaGFzaCA6IGludFxuICAgIH1cbiAgKCogVGhyZWFkLXNhZmV0eTogV2UgdXNlIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcgdG8gYWNjZXNzIGZpZWxkXG4gICAgIFtzdGF0dXNdIGluIGZ1bmN0aW9uIFtzdGF0dXNdIGJlbG93LiAqKVxuXG4gIGxldCBwcCBmbXQgdCA9IERlc2MucHAgZm10IHQuZGVzY1xuICBsZXRbQGlubGluZV0gaWR4IHQgPSB0LmlkeFxuICBsZXQgdG9fZHluIHQgPSBEZXNjLnRvX2R5biB0LmRlc2NcblxuICBsZXQgZHVtbXkgPVxuICAgIHsgaWR4ID0gSWR4LnVua25vd25cbiAgICA7IGNhdGVnb3J5ID0gQ2F0ZWdvcnkuZHVtbXlcbiAgICA7IGRlc2MgPSBEZXNjLmVtcHR5XG4gICAgOyBzdGF0dXMgPSBOb25lXG4gICAgOyBoYXNoID0gLTFcbiAgICB9XG4gIDs7XG5cbiAgbGV0IGhhc2ggaWR4IGNhdCBkZXNjID1cbiAgICBEZXNjLmhhc2ggZGVzYyAoaGFzaF9jb21iaW5lIGlkeCAoaGFzaF9jb21iaW5lIChDYXRlZ29yeS50b19pbnQgY2F0KSAwKSlcbiAgICBsYW5kIDB4M0ZGRkZGRkZcbiAgOztcblxuICBsZXQgbWsgaWR4IGNhdCBkZXNjID1cbiAgICB7IGlkeDsgY2F0ZWdvcnkgPSBjYXQ7IGRlc2M7IHN0YXR1cyA9IE5vbmU7IGhhc2ggPSBoYXNoIChpZHggOj4gaW50KSBjYXQgZGVzYyB9XG4gIDs7XG5cbiAgbGV0IGNyZWF0ZSBjYXQgZSA9IG1rIElkeC5pbml0aWFsIGNhdCAoRGVzYy5pbml0aWFsIGUpXG5cbiAgbGV0IGVxdWFsIHsgaWR4OyBjYXRlZ29yeTsgZGVzYzsgc3RhdHVzID0gXzsgaGFzaCB9IHQgPVxuICAgIEludC5lcXVhbCBoYXNoIHQuaGFzaFxuICAgICYmIElkeC5lcXVhbCBpZHggdC5pZHhcbiAgICAmJiBDYXRlZ29yeS5lcXVhbCBjYXRlZ29yeSB0LmNhdGVnb3J5XG4gICAgJiYgRGVzYy5lcXVhbCBkZXNjIHQuZGVzY1xuICA7O1xuXG4gICgqIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtdXRleCBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkICopXG4gIGxldCBzdGF0dXNfbm9fbXV0ZXggcyA9XG4gICAgbWF0Y2ggcy5zdGF0dXMgd2l0aFxuICAgIHwgU29tZSBzIC0+IHNcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBzdCA9IERlc2Muc3RhdHVzIHMuZGVzYyBpblxuICAgICAgcy5zdGF0dXMgPC0gU29tZSBzdDtcbiAgICAgIHN0XG4gIDs7XG5cbiAgbGV0IHN0YXR1cyBtIHMgPVxuICAgIG1hdGNoIHMuc3RhdHVzIHdpdGhcbiAgICB8IFNvbWUgcyAtPiBzXG4gICAgfCBOb25lIC0+XG4gICAgICBNdXRleC5sb2NrIG07XG4gICAgICBsZXQgc3QgPSBzdGF0dXNfbm9fbXV0ZXggcyBpblxuICAgICAgTXV0ZXgudW5sb2NrIG07XG4gICAgICBzdFxuICA7O1xuXG4gIG1vZHVsZSBUYWJsZSA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgICB0eXBlIG5vbnJlYyB0ID0gdFxuXG4gICAgICBsZXQgZXF1YWwgPSBlcXVhbFxuICAgICAgbGV0IGhhc2ggdCA9IHQuaGFzaFxuICAgIGVuZClcbmVuZFxuXG4oKioqKiBGaW5kIGEgZnJlZSBpbmRleCAqKioqKVxuXG5tb2R1bGUgV29ya2luZ19hcmVhID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBtdXRhYmxlIGlkcyA6IEJpdF92ZWN0b3IudFxuICAgIDsgc2VlbiA6IElkLkhhc2hfc2V0LnRcbiAgICA7IGluZGV4X2NvdW50IDogaW50IEF0b21pYy50XG4gICAgfVxuXG4gIGxldCBjcmVhdGUgKCkgPVxuICAgIHsgaWRzID0gQml0X3ZlY3Rvci5jcmVhdGVfemVybyAxXG4gICAgOyBzZWVuID0gSWQuSGFzaF9zZXQuY3JlYXRlICgpXG4gICAgOyBpbmRleF9jb3VudCA9IEF0b21pYy5tYWtlIDBcbiAgICB9XG4gIDs7XG5cbiAgbGV0IGluZGV4X2NvdW50IHcgPSBBdG9taWMuZ2V0IHcuaW5kZXhfY291bnRcblxuICBsZXQgbWFya191c2VkX2luZGljZXMgdGJsID1cbiAgICBEZXNjLml0ZXJfbWFya3MgfmY6KGZ1biBtYXJrcyAtPlxuICAgICAgTGlzdC5pdGVyIG1hcmtzLm1hcmtzIH5mOihmdW4gKF8sIGkpIC0+XG4gICAgICAgIGlmIElkeC51c2VkIGkgdGhlbiBCaXRfdmVjdG9yLnNldCB0YmwgKGkgOj4gaW50KSB0cnVlKSlcbiAgOztcblxuICBsZXQgcmVjIGZpbmRfZnJlZSB0YmwgaWR4IGxlbiA9XG4gICAgaWYgaWR4ID0gbGVuIHx8IG5vdCAoQml0X3ZlY3Rvci5nZXQgdGJsIGlkeCkgdGhlbiBpZHggZWxzZSBmaW5kX2ZyZWUgdGJsIChpZHggKyAxKSBsZW5cbiAgOztcblxuICBsZXQgZnJlZV9pbmRleCB0IGwgPVxuICAgIEJpdF92ZWN0b3IucmVzZXRfemVybyB0LmlkcztcbiAgICBtYXJrX3VzZWRfaW5kaWNlcyB0LmlkcyBsO1xuICAgIGxldCBsZW4gPSBCaXRfdmVjdG9yLmxlbmd0aCB0LmlkcyBpblxuICAgIGxldCBpZHggPSBmaW5kX2ZyZWUgdC5pZHMgMCBsZW4gaW5cbiAgICBpZiBpZHggPSBsZW5cbiAgICB0aGVuIChcbiAgICAgIHQuaWRzIDwtIEJpdF92ZWN0b3IuY3JlYXRlX3plcm8gKDIgKiBsZW4pO1xuICAgICAgKCogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBtdXRleCBpcyBsb2NrZWQuIFNvIHdlXG4gICAgICAgICBhcmUgc3VyZSB0aGF0IHRoaXMgaXMgYWx3YXlzIGNvaGVyZW50IHdpdGggdGhlIGxlbmd0aCBvZlxuICAgICAgICAgW3QuaWRzXS4gKilcbiAgICAgIEF0b21pYy5zZXQgdC5pbmRleF9jb3VudCAoMiAqIGxlbikpO1xuICAgIElkeC5tYWtlIGlkeFxuICA7O1xuZW5kXG5cbigqKioqIENvbXB1dGF0aW9uIG9mIHRoZSBuZXh0IHN0YXRlICoqKiopXG5cbnR5cGUgY3R4ID1cbiAgeyBjIDogQ3NldC5jXG4gIDsgcHJldl9jYXQgOiBDYXRlZ29yeS50XG4gIDsgbmV4dF9jYXQgOiBDYXRlZ29yeS50XG4gIH1cblxubGV0IHJlYyBkZWx0YV9leHByICh7IGM7IF8gfSBhcyBjdHgpIG1hcmtzICh4IDogRXhwci50KSByZW0gPVxuICAoKkZvcm1hdC5lcHJpbnRmIFwiJWRALlwiIHguaWQ7KilcbiAgbWF0Y2ggeC5kZWYgd2l0aFxuICB8IENzdCBzIC0+IGlmIENzZXQubWVtIGMgcyB0aGVuIERlc2MuYWRkX2VwcyByZW0gbWFya3MgZWxzZSByZW1cbiAgfCBBbHQgbCAtPiBkZWx0YV9hbHQgY3R4IG1hcmtzIGwgcmVtXG4gIHwgU2VxIChraW5kLCB5LCB6KSAtPlxuICAgIGxldCB5ID0gZGVsdGFfZXhwciBjdHggbWFya3MgeSBEZXNjLmVtcHR5IGluXG4gICAgZGVsdGFfc2VxIGN0eCBraW5kIHkgeiByZW1cbiAgfCBSZXAgKHJlcF9raW5kLCBraW5kLCB5KSAtPiBkZWx0YV9yZXAgY3R4IG1hcmtzIHggcmVwX2tpbmQga2luZCB5IHJlbVxuICB8IEVwcyAtPiBEZXNjLmFkZF9tYXRjaCByZW0gbWFya3NcbiAgfCBNYXJrIGkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5zZXRfbWFyayBtYXJrcyBpKVxuICB8IFBtYXJrIGkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5zZXRfcG1hcmsgbWFya3MgaSlcbiAgfCBFcmFzZSAoYiwgZSkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5maWx0ZXIgbWFya3MgYiBlKVxuICB8IEJlZm9yZSBjYXQgLT5cbiAgICBpZiBDYXRlZ29yeS5pbnRlcnNlY3QgY3R4Lm5leHRfY2F0IGNhdCB0aGVuIERlc2MuYWRkX21hdGNoIHJlbSBtYXJrcyBlbHNlIHJlbVxuICB8IEFmdGVyIGNhdCAtPlxuICAgIGlmIENhdGVnb3J5LmludGVyc2VjdCBjdHgucHJldl9jYXQgY2F0IHRoZW4gRGVzYy5hZGRfbWF0Y2ggcmVtIG1hcmtzIGVsc2UgcmVtXG5cbmFuZCBkZWx0YV9yZXAgY3R4IG1hcmtzIHggcmVwX2tpbmQga2luZCB5IHJlbSA9XG4gIGxldCB5LCBtYXJrcycgPVxuICAgIGxldCB5ID0gZGVsdGFfZXhwciBjdHggbWFya3MgeSBEZXNjLmVtcHR5IGluXG4gICAgbWF0Y2ggRGVzYy5maXJzdF9tYXRjaCB5IHdpdGhcbiAgICB8IE5vbmUgLT4geSwgbWFya3NcbiAgICB8IFNvbWUgbWFya3MgLT4gRGVzYy5yZW1vdmVfbWF0Y2hlcyB5LCBtYXJrc1xuICBpblxuICBtYXRjaCByZXBfa2luZCB3aXRoXG4gIHwgYEdyZWVkeSAtPiBEZXNjLnRzZXEga2luZCB5IHggKERlc2MuYWRkX21hdGNoIHJlbSBtYXJrcycpXG4gIHwgYE5vbl9ncmVlZHkgLT4gRGVzYy5hZGRfbWF0Y2ggKERlc2MudHNlcSBraW5kIHkgeCByZW0pIG1hcmtzXG5cbmFuZCBkZWx0YV9hbHQgY3R4IG1hcmtzIGwgcmVtID0gTGlzdC5mb2xkX3JpZ2h0IGwgfmluaXQ6cmVtIH5mOihkZWx0YV9leHByIGN0eCBtYXJrcylcblxuYW5kIGRlbHRhX3NlcSBjdHggKGtpbmQgOiBTZW0udCkgeSB6IHJlbSA9XG4gIG1hdGNoIERlc2MuZmlyc3RfbWF0Y2ggeSB3aXRoXG4gIHwgTm9uZSAtPiBEZXNjLnRzZXEga2luZCB5IHogcmVtXG4gIHwgU29tZSBtYXJrcyAtPlxuICAgIChtYXRjaCBraW5kIHdpdGhcbiAgICAgfCBgTG9uZ2VzdCAtPiBEZXNjLnRzZXEga2luZCAoRGVzYy5yZW1vdmVfbWF0Y2hlcyB5KSB6IChkZWx0YV9leHByIGN0eCBtYXJrcyB6IHJlbSlcbiAgICAgfCBgU2hvcnRlc3QgLT4gZGVsdGFfZXhwciBjdHggbWFya3MgeiAoRGVzYy50c2VxIGtpbmQgKERlc2MucmVtb3ZlX21hdGNoZXMgeSkgeiByZW0pXG4gICAgIHwgYEZpcnN0IC0+XG4gICAgICAgbGV0IHksIHknID0gRGVzYy5zcGxpdF9hdF9tYXRjaCB5IGluXG4gICAgICAgRGVzYy50c2VxIGtpbmQgeSB6IChkZWx0YV9leHByIGN0eCBtYXJrcyB6IChEZXNjLnRzZXEga2luZCB5JyB6IHJlbSkpKVxuOztcblxubGV0IHJlYyBkZWx0YV9lIGN0eCBtYXJrcyAoeCA6IEUudCkgcmVtID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgVFNlcSAoa2luZCwgeSwgeikgLT5cbiAgICBsZXQgeSA9IGRlbHRhX2Rlc2MgY3R4IG1hcmtzIHkgRGVzYy5lbXB0eSBpblxuICAgIGRlbHRhX3NlcSBjdHgga2luZCB5IHogcmVtXG4gIHwgVEV4cCAobWFya3MsIGUpIC0+IGRlbHRhX2V4cHIgY3R4IG1hcmtzIGUgcmVtXG4gIHwgVE1hdGNoIF8gLT4gRGVzYy5hZGRfZXhwciByZW0geFxuXG5hbmQgZGVsdGFfZGVzYyBjdHggbWFya3MgKGwgOiBEZXNjLnQpIHJlbSA9XG4gIERlc2MuZm9sZF9yaWdodCBsIH5pbml0OnJlbSB+ZjooZnVuIHkgYWNjIC0+IGRlbHRhX2UgY3R4IG1hcmtzIHkgYWNjKVxuOztcblxubGV0IGRlbHRhICh0YmxfcmVmIDogV29ya2luZ19hcmVhLnQpIG5leHRfY2F0IGNoYXIgKHN0IDogU3RhdGUudCkgPVxuICBsZXQgZXhwciA9XG4gICAgbGV0IHByZXZfY2F0ID0gc3QuY2F0ZWdvcnkgaW5cbiAgICBsZXQgY3R4ID0geyBjID0gY2hhcjsgbmV4dF9jYXQ7IHByZXZfY2F0IH0gaW5cbiAgICBEZXNjLnJlbW92ZV9kdXBsaWNhdGVzXG4gICAgICB0YmxfcmVmLnNlZW5cbiAgICAgIChkZWx0YV9kZXNjIGN0eCBNYXJrcy5lbXB0eSBzdC5kZXNjIERlc2MuZW1wdHkpXG4gICAgICBFeHByLmVwc19leHByXG4gIGluXG4gIGxldCBpZHggPSBXb3JraW5nX2FyZWEuZnJlZV9pbmRleCB0YmxfcmVmIGV4cHIgaW5cbiAgbGV0IGV4cHIgPSBEZXNjLnNldF9pZHggaWR4IGV4cHIgaW5cbiAgU3RhdGUubWsgaWR4IG5leHRfY2F0IGV4cHJcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDQiLCJhMiIsImEzIiwiY2FtbF9jYWxsNiIsImE0IiwiYTUiLCJnbG9iYWxfZGF0YSIsIlJlX0NzZXQiLCJSZV9DYXRlZ29yeSIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfSW1wb3J0IiwiUmVfQml0X3ZlY3RvciIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfTXV0ZXgiLCJSZV9EeW4iLCJTdGRsaWJfRm9ybWF0IiwiUmVfRm10IiwiUmVfTWFya19pbmZvcyIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiUmVfUG1hcmsiLCJTdGRsaWJfSGFzaHRibCIsIlJlX0hhc2hfc2V0IiwiaGFzaF9jb21iaW5lIiwiaCIsImFjY3UiLCJlcXVhbCIsInBwIiwiY3JlYXRlIiwicGFyYW0iLCJ0b19zdHJpbmciLCJ0b19keW4iLCJ0IiwiY2giLCJrIiwiZm10IiwiY29tcGFyZSIsInByZXYiLCJ4IiwibmV4dCIsIm5leHQyIiwiZ3JvdXBfY291bnQiLCJ0b19pbnQiLCJ3cmFwX3NlbSIsInNlbSIsInYiLCJuYW1lIiwiY3MiLCJ5IiwiZHluX29mX2RlZiIsImNzZXQiLCJhbHQiLCJzIiwiZXhuIiwibWF0Y2giLCJjc3RfU2VxIiwibSIsImMiLCJkZWYiLCJwcF93aXRoX3NlbSIsImUiLCJsIiwiaSIsImIiLCJtayIsImlkcyIsImVtcHR5IiwiY3N0IiwiZXBzIiwicmVwIiwia2luZCIsIm1hcmsiLCJwbWFyayIsImVyYXNlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJzZXEiLCJpc19lcHMiLCJleHByIiwicmVuYW1lIiwieiIsImciLCJjc3RfbWFya3MiLCJwbWFya3MiLCJtYXJrcyIsImlkeCIsImFjYyIsImEiLCJoYXNoIiwiaW5pdCIsInVua25vd24iLCJtYXJrc19zZXRfaWR4IiwicmVtIiwiY3N0XzIiLCJlcXVhbF9saXN0IiwibDEiLCJsMiIsImUxIiwiZTIiLCJtYXJrczEiLCJtYXJrczIiLCJsZXRyZWNfZnVuY3Rpb25fY29udGV4dCIsImhhc2hfbGlzdCIsImJhc2UiLCJ0c2VxIiwiZm9sZF9yaWdodCIsInhzIiwiaXRlcl9tYXJrcyIsImNzdF9URXhwIiwicHJpbnRfc3RhdGVfcmVjIiwicHJpbnRfc3RhdGVfbHN0IiwiemVybyIsImZpcnN0X21hdGNoIiwiciIsInJlbW92ZV9tYXRjaGVzIiwic2V0X2lkeCIsImFkZF9tYXRjaCIsImxvb3AiLCJzZWVuIiwiZHVtbXkiLCJjYXQiLCJkZXNjIiwiY2F0ZWdvcnkiLCJzdGF0dXNfbm9fbXV0ZXgiLCJzdCIsInN0YXR1cyIsIlRhYmxlIiwiaW5kZXhfY291bnQiLCJ3IiwiZXBzX2V4cHIiLCJkZWx0YV9leHByIiwiY291bnRlciIsImN0eCIsInJlcF9raW5kIiwic3RvcF9pbmNsdXNpdmUiLCJzdGFydF9pbmNsdXNpdmUiLCJkZWx0YV9zZXEiLCJkZWx0YV9kZXNjIiwiZGVsdGEiLCJ0YmxfcmVmIiwibmV4dF9jYXQiLCJjaGFyIiwicHJldl9jYXQiLCJ0YmwiLCJsZW4iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdB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QUE7QUFBQSxFRHZrQkoiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMjk4NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2NvbG9yX21hcC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEluIHJlYWxpdHksIHRoaXMgY2FuIHJlYWxseSBiZSByZXByZXNlbnRlZCBhcyBhIGJvb2wgYXJyYXkuXG5cbiAgIFRoZSByZXByZXNlbnRhdGlvbiBpcyBiZXN0IHRob3VnaHQgb2YgYXMgYSBsaXN0IG9mIGFsbCBjaGFycyBhbG9uZyB3aXRoIGFcbiAgIGZsYWc6XG5cbiAgIChhLCAwKSwgKGIsIDEpLCAoYywgMCksIChkLCAwKSwgLi4uXG5cbiAgIGNoYXJhY3RlcnMgYmVsb25naW5nIHRvIHRoZSBzYW1lIGNvbG9yIGFyZSByZXByZXNlbnRlZCBieSBzZXF1bmNlcyBvZlxuICAgY2hhcmFjdGVycyB3aXRoIHRoZSBmbGFnIHNldCB0byAwLlxuKilcblxudHlwZSB0ID0gQnl0ZXMudFxuXG5tb2R1bGUgUmVwciA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmdcblxuICBsZXQgcmVwciB0IGNvbG9yID0gdC5bQ3NldC50b19pbnQgY29sb3JdXG4gIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5lbmRcblxubW9kdWxlIFRhYmxlID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBnZXRfY2hhciB0IGMgPSB0LltDc2V0LnRvX2ludCBjXVxuICBsZXQgZ2V0IHQgYyA9IENzZXQub2ZfY2hhciAoU3RyaW5nLnVuc2FmZV9nZXQgdCAoQ2hhci5jb2RlIGMpKVxuXG4gIGxldCB0cmFuc2xhdGVfY29sb3JzIChjbSA6IHQpIGNzZXQgPVxuICAgIENzZXQuZm9sZF9yaWdodCBjc2V0IH5pbml0OkNzZXQuZW1wdHkgfmY6KGZ1biBpIGogbCAtPlxuICAgICAgbGV0IHN0YXJ0ID0gZ2V0X2NoYXIgY20gaSBpblxuICAgICAgbGV0IHN0b3AgPSBnZXRfY2hhciBjbSBqIGluXG4gICAgICBDc2V0LnVuaW9uIChDc2V0LmNzZXEgc3RhcnQgc3RvcCkgbClcbiAgOztcbmVuZFxuXG5sZXQgbWFrZSAoKSA9IEJ5dGVzLm1ha2UgMjU3ICdcXDAwMCdcblxubGV0IGZsYXR0ZW4gY20gPVxuICBsZXQgYyA9IEJ5dGVzLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGNvbG9yX3JlcHIgPSBCeXRlcy5jcmVhdGUgMjU2IGluXG4gIGxldCB2ID0gcmVmIDAgaW5cbiAgQnl0ZXMuc2V0IGMgMCAnXFwwMDAnO1xuICBCeXRlcy5zZXQgY29sb3JfcmVwciAwICdcXDAwMCc7XG4gIGZvciBpID0gMSB0byAyNTUgZG9cbiAgICBpZiBCeXRlcy5nZXQgY20gaSA8PiAnXFwwMDAnIHRoZW4gaW5jciB2O1xuICAgIEJ5dGVzLnNldCBjIGkgKENoYXIuY2hyICF2KTtcbiAgICBCeXRlcy5zZXQgY29sb3JfcmVwciAhdiAoQ2hhci5jaHIgaSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjLCBCeXRlcy5zdWJfc3RyaW5nIGNvbG9yX3JlcHIgMCAoIXYgKyAxKVxuOztcblxuKCogbWFyayBhbGwgdGhlIGVuZHBvaW50cyBvZiB0aGUgaW50ZXJ2YWxzIG9mIHRoZSBjaGFyIHNldCB3aXRoIHRoZSAxIGJ5dGUgKilcbmxldCBzcGxpdCB0IHNldCA9XG4gIENzZXQuaXRlciBzZXQgfmY6KGZ1biBpIGogLT5cbiAgICBCeXRlcy5zZXQgdCAoQ3NldC50b19pbnQgaSkgJ1xcMDAxJztcbiAgICBCeXRlcy5zZXQgdCAoQ3NldC50b19pbnQgaiArIDEpICdcXDAwMScpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9zdHJpbmdfZ2V0IiwiZ2xvYmFsX2RhdGEiLCJSZV9Dc2V0IiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJyZXByIiwidCIsImNvbG9yIiwibGVuZ3RoIiwiZ2V0X2NoYXIiLCJjIiwiZ2V0IiwidHJhbnNsYXRlX2NvbG9ycyIsImNtIiwiY3NldCIsImkiLCJqIiwibCIsInN0YXJ0Iiwic3RvcCIsIm1ha2UiLCJwYXJhbSIsImZsYXR0ZW4iLCJjb2xvcl9yZXByIiwidiIsInNwbGl0Iiwic2V0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQztBQUFBQSxJQ2dCd0IsT0FBSCxtQkFBRyw2QkFBa0I7QUFBQTtBQUFBLE9BQUFDLFNEaEIxQztBQUFBLFlBQUFDLFNBQUFILEdBQUFJO0FBQUFBLElDdUJ3QixPQUFILG1CQUFHLHlCQUFjO0FBQUE7QUFBQSxZQUFBQyxJQUFBTCxHQUFBSTtBQUFBQSxJQUN0QixrRUFBZ0Q7QUFBQTtBQUFBLFlBQUFFLGlCQUFBQyxJQUFBQztBQUFBQSxJQUc1RDtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFBQyxHQUFBQyxHQUFBQztBQUFBQTtBQUFBQSxlQUFBQyxRQUNjO0FBQUEsZUFBQUMsT0FDRDtBQUFBLG1CQUNBO0FBQUEsY0FBc0Isa0NBQUU7QUFBQSxlQUFDO0FBQUE7QUFBQSxZQUFBQyxLQUFBQyxPQUk1Qix5Q0FBcUI7QUFBQSxZQUFBQyxRQUFBVDtBQUFBQSxRQUFBSCxJQUd6Qix3QkFBQWEsYUFDUztBQUFBLElBRWpCO0FBQUEsSUFDQTtBQUFBLFFBQUFDLElBQTZCLEdBQUFULElBQUE7QUFBQTtBQUFBLEtBRXhCO0FBQUEsVUFBQVMsTUFBOEIsV0FBQUEsTUFDakM7QUFBQTtBQUFBLFVBQUFBLE1BRGlCO0FBQUEsS0FDakIscUJBQWM7QUFBQSxLQUNkLGdDQUF3QjtBQUFBLGFBQVk7QUFBQTtBQUFBLGNBRVo7QUFBQSxNQUExQiw2Q0FBd0I7QUFBQTtBQUFBLEtBRmM7QUFBQTtBQUFBO0FBQUEsR0FFMEI7QUFBQSxZQUFBQyxNQUFBbkIsR0FBQW9CO0FBQUFBLElBS2hFO0FBQUE7QUFBQTtBQUFBLHNCQUFBWCxHQUFBQztBQUFBQSxjQUNFLGtCQUFZO0FBQUEsY0FDQyxPQUFiLGtCQUFhLG9DQUF5QjtBQUFBLGVBQUM7QUFBQTtBQUFBLEdEdEQzQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMzMDY4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxudHlwZSAoJ2EsIF8pIGFzdCA9XG4gIHwgQWx0ZXJuYXRpdmUgOiAnYSBsaXN0IC0+ICgnYSwgWz4gYFVuY2FzZWQgXSkgYXN0XG4gIHwgTm9fY2FzZSA6ICdhIC0+ICgnYSwgWz4gYENhc2VkIF0pIGFzdFxuICB8IENhc2UgOiAnYSAtPiAoJ2EsIFs+IGBDYXNlZCBdKSBhc3RcblxubGV0IGR5bl9vZl9hc3QgZiA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IEFsdGVybmF0aXZlIHhzIC0+IHZhcmlhbnQgXCJBbHRlcm5hdGl2ZVwiIChMaXN0Lm1hcCB4cyB+ZilcbiAgfCBOb19jYXNlIGEgLT4gdmFyaWFudCBcIk5vX2Nhc2VcIiBbIGYgYSBdXG4gIHwgQ2FzZSBhIC0+IHZhcmlhbnQgXCJDYXNlXCIgWyBmIGEgXVxuOztcblxubGV0IGVtcHR5X2FsdGVybmF0aXZlIDogKCdhLCAnYikgYXN0ID0gQWx0ZXJuYXRpdmUgW11cblxubGV0IGVxdWFsX2FzdCAodHlwZSBhKSBlcSAoeCA6IChhLCBbIGBVbmNhc2VkIF0pIGFzdCkgKHkgOiAoYSwgWyBgVW5jYXNlZCBdKSBhc3QpID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgQWx0ZXJuYXRpdmUgYSwgQWx0ZXJuYXRpdmUgYiAtPiBMaXN0LmVxdWFsIH5lcSBhIGJcbjs7XG5cbmxldCBwcF9hc3QgKHR5cGUgYSBiKSBmIGZtdCAoYXN0IDogKGEsIGIpIGFzdCkgPVxuICBsZXQgb3BlbiBGbXQgaW5cbiAgbGV0IHZhciBzIHJlID0gc2V4cCBmbXQgcyBmIHJlIGluXG4gIG1hdGNoIGFzdCB3aXRoXG4gIHwgQWx0ZXJuYXRpdmUgYWx0IC0+IHNleHAgZm10IFwiQWx0ZXJuYXRpdmVcIiAobGlzdCBmKSBhbHRcbiAgfCBDYXNlIGMgLT4gdmFyIFwiQ2FzZVwiIGNcbiAgfCBOb19jYXNlIGMgLT4gdmFyIFwiTm9fY2FzZVwiIGNcbjs7XG5cbnR5cGUgY3NldCA9XG4gIHwgQ3NldCBvZiBDc2V0LnRcbiAgfCBJbnRlcnNlY3Rpb24gb2YgY3NldCBsaXN0XG4gIHwgQ29tcGxlbWVudCBvZiBjc2V0IGxpc3RcbiAgfCBEaWZmZXJlbmNlIG9mIGNzZXQgKiBjc2V0XG4gIHwgQ2FzdCBvZiAoY3NldCwgWyBgQ2FzZWQgfCBgVW5jYXNlZCBdKSBhc3RcblxubGV0IHJlYyBkeW5fb2ZfY3NldCA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IENzZXQgY3NldCAtPiB2YXJpYW50IFwiQ3NldFwiIFsgQ3NldC50b19keW4gY3NldCBdXG4gIHwgSW50ZXJzZWN0aW9uIHhzIC0+IHZhcmlhbnQgXCJJbnRlcnNlY3Rpb25cIiAoTGlzdC5tYXAgeHMgfmY6ZHluX29mX2NzZXQpXG4gIHwgQ29tcGxlbWVudCB4cyAtPiB2YXJpYW50IFwiQ29tcGxlbWVudFwiIChMaXN0Lm1hcCB4cyB+ZjpkeW5fb2ZfY3NldClcbiAgfCBEaWZmZXJlbmNlICh4LCB5KSAtPiB2YXJpYW50IFwiRGlmZmVyZW5jZVwiIFsgZHluX29mX2NzZXQgeDsgZHluX29mX2NzZXQgeSBdXG4gIHwgQ2FzdCBjIC0+IHZhcmlhbnQgXCJDYXN0XCIgWyBkeW5fb2ZfYXN0IGR5bl9vZl9jc2V0IGMgXVxuOztcblxudHlwZSAoJ2EsICdjYXNlKSBnZW4gPVxuICB8IFNldCBvZiAnYVxuICB8IEFzdCBvZiAoKCdhLCAnY2FzZSkgZ2VuLCAnY2FzZSkgYXN0XG4gIHwgU2VxdWVuY2Ugb2YgKCdhLCAnY2FzZSkgZ2VuIGxpc3RcbiAgfCBSZXBlYXQgb2YgKCdhLCAnY2FzZSkgZ2VuICogaW50ICogaW50IG9wdGlvblxuICB8IEJlZ19vZl9saW5lXG4gIHwgRW5kX29mX2xpbmVcbiAgfCBCZWdfb2Zfd29yZFxuICB8IEVuZF9vZl93b3JkXG4gIHwgTm90X2JvdW5kXG4gIHwgQmVnX29mX3N0clxuICB8IEVuZF9vZl9zdHJcbiAgfCBMYXN0X2VuZF9vZl9saW5lXG4gIHwgU3RhcnRcbiAgfCBTdG9wXG4gIHwgR3JvdXAgb2Ygc3RyaW5nIG9wdGlvbiAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IE5vX2dyb3VwIG9mICgnYSwgJ2Nhc2UpIGdlblxuICB8IE5lc3Qgb2YgKCdhLCAnY2FzZSkgZ2VuXG4gIHwgUG1hcmsgb2YgUG1hcmsudCAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IFNlbSBvZiBBdXRvbWF0YS5TZW0udCAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IFNlbV9ncmVlZHkgb2YgQXV0b21hdGEuUmVwX2tpbmQudCAqICgnYSwgJ2Nhc2UpIGdlblxuXG5sZXQgcmVjIGR5bl9vZl9nZW4gZiA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IFNldCBhIC0+IHZhcmlhbnQgXCJTZXRcIiBbIGYgYSBdXG4gIHwgQXN0IGFzdCAtPiB2YXJpYW50IFwiQXN0XCIgWyBkeW5fb2ZfYXN0IChkeW5fb2ZfZ2VuIGYpIGFzdCBdXG4gIHwgU2VxdWVuY2UgeHMgLT4gdmFyaWFudCBcIlNlcXVlbmNlXCIgKExpc3QubWFwIHhzIH5mOihkeW5fb2ZfZ2VuIGYpKVxuICB8IFJlcGVhdCAoZ2VuLCBtaW4sIG1heCkgLT5cbiAgICBsZXQgYmFzZSA9XG4gICAgICBtYXRjaCBtYXggd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgeCAtPiBbIGludCB4IF1cbiAgICBpblxuICAgIHZhcmlhbnQgXCJSZXBlYXRcIiAoZHluX29mX2dlbiBmIGdlbiA6OiBpbnQgbWluIDo6IGJhc2UpXG4gIHwgQmVnX29mX2xpbmUgLT4gZW51bSBcIkJlZ19vZl9saW5lXCJcbiAgfCBFbmRfb2ZfbGluZSAtPiBlbnVtIFwiRW5kX29mX2xpbmVcIlxuICB8IEJlZ19vZl93b3JkIC0+IGVudW0gXCJCZWdfb2Zfd29yZFwiXG4gIHwgRW5kX29mX3dvcmQgLT4gZW51bSBcIkVuZF9vZl93b3JkXCJcbiAgfCBOb3RfYm91bmQgLT4gZW51bSBcIk5vdF9ib3VuZFwiXG4gIHwgQmVnX29mX3N0ciAtPiBlbnVtIFwiQmVnX29mX3N0clwiXG4gIHwgRW5kX29mX3N0ciAtPiBlbnVtIFwiRW5kX29mX3N0clwiXG4gIHwgTGFzdF9lbmRfb2ZfbGluZSAtPiBlbnVtIFwiTGFzdF9lbmRfb2ZfbGluZVwiXG4gIHwgU3RhcnQgLT4gZW51bSBcIlN0YXJ0XCJcbiAgfCBTdG9wIC0+IGVudW0gXCJTdG9wXCJcbiAgfCBHcm91cCAobmFtZSwgdCkgLT5cbiAgICBsZXQgYXJncyA9XG4gICAgICBsZXQgYXJncyA9IFsgZHluX29mX2dlbiBmIHQgXSBpblxuICAgICAgbWF0Y2ggbmFtZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXJnc1xuICAgICAgfCBTb21lIG5hbWUgLT4gc3RyaW5nIG5hbWUgOjogYXJnc1xuICAgIGluXG4gICAgdmFyaWFudCBcIkdyb3VwXCIgYXJnc1xuICB8IE5vX2dyb3VwIHggLT4gdmFyaWFudCBcIk5vX2dyb3VwXCIgWyBkeW5fb2ZfZ2VuIGYgeCBdXG4gIHwgTmVzdCB4IC0+IHZhcmlhbnQgXCJOZXN0XCIgWyBkeW5fb2ZfZ2VuIGYgeCBdXG4gIHwgUG1hcmsgKHBtYXJrLCB0KSAtPiB2YXJpYW50IFwiUG1hcmtcIiBbIFBtYXJrLnRvX2R5biBwbWFyazsgZHluX29mX2dlbiBmIHQgXVxuICB8IFNlbSAoc2VtLCB0KSAtPiB2YXJpYW50IFwiU2VtXCIgWyBBdXRvbWF0YS5TZW0udG9fZHluIHNlbTsgZHluX29mX2dlbiBmIHQgXVxuICB8IFNlbV9ncmVlZHkgKHJlcCwgdCkgLT5cbiAgICB2YXJpYW50IFwiU2VtX2dyZWVkeVwiIFsgQXV0b21hdGEuUmVwX2tpbmQudG9fZHluIHJlcDsgZHluX29mX2dlbiBmIHQgXVxuOztcblxubGV0IHJlYyBwcF9nZW4gcHBfY3NldCBmbXQgdCA9XG4gIGxldCBvcGVuIEZvcm1hdCBpblxuICBsZXQgb3BlbiBGbXQgaW5cbiAgbGV0IHBwID0gcHBfZ2VuIHBwX2NzZXQgaW5cbiAgbGV0IHZhciBzIHJlID0gc2V4cCBmbXQgcyBwcCByZSBpblxuICBsZXQgc2VxIHMgcmVsID0gc2V4cCBmbXQgcyAobGlzdCBwcCkgcmVsIGluXG4gIG1hdGNoIHQgd2l0aFxuICB8IFNldCBjc2V0IC0+IHBwX2NzZXQgZm10IGNzZXRcbiAgfCBTZXF1ZW5jZSBzcSAtPiBzZXEgXCJTZXF1ZW5jZVwiIHNxXG4gIHwgUmVwZWF0IChyZSwgc3RhcnQsIHN0b3ApIC0+XG4gICAgbGV0IHBwJyBmbXQgKCkgPSBmcHJpbnRmIGZtdCBcIiVhQCAlZCVhXCIgcHAgcmUgc3RhcnQgb3B0aW50IHN0b3AgaW5cbiAgICBzZXhwIGZtdCBcIlJlcGVhdFwiIHBwJyAoKVxuICB8IEJlZ19vZl9saW5lIC0+IHN0ciBmbXQgXCJCZWdfb2ZfbGluZVwiXG4gIHwgRW5kX29mX2xpbmUgLT4gc3RyIGZtdCBcIkVuZF9vZl9saW5lXCJcbiAgfCBCZWdfb2Zfd29yZCAtPiBzdHIgZm10IFwiQmVnX29mX3dvcmRcIlxuICB8IEVuZF9vZl93b3JkIC0+IHN0ciBmbXQgXCJFbmRfb2Zfd29yZFwiXG4gIHwgTm90X2JvdW5kIC0+IHN0ciBmbXQgXCJOb3RfYm91bmRcIlxuICB8IEJlZ19vZl9zdHIgLT4gc3RyIGZtdCBcIkJlZ19vZl9zdHJcIlxuICB8IEVuZF9vZl9zdHIgLT4gc3RyIGZtdCBcIkVuZF9vZl9zdHJcIlxuICB8IExhc3RfZW5kX29mX2xpbmUgLT4gc3RyIGZtdCBcIkxhc3RfZW5kX29mX2xpbmVcIlxuICB8IFN0YXJ0IC0+IHN0ciBmbXQgXCJTdGFydFwiXG4gIHwgU3RvcCAtPiBzdHIgZm10IFwiU3RvcFwiXG4gIHwgR3JvdXAgKE5vbmUsIGMpIC0+IHZhciBcIkdyb3VwXCIgY1xuICB8IEdyb3VwIChTb21lIG4sIGMpIC0+IHNleHAgZm10IFwiTmFtZWRfZ3JvdXBcIiAocGFpciBzdHIgcHApIChuLCBjKVxuICB8IE5lc3QgYyAtPiB2YXIgXCJOZXN0XCIgY1xuICB8IFBtYXJrIChtLCByKSAtPiBzZXhwIGZtdCBcIlBtYXJrXCIgKHBhaXIgUG1hcmsucHAgcHApIChtLCByKVxuICB8IEFzdCBhIC0+IHBwX2FzdCBwcCBmbXQgYVxuICB8IFNlbSAoc2VtLCBhKSAtPiBzZXhwIGZtdCBcIlNlbVwiIChwYWlyIEF1dG9tYXRhLlNlbS5wcCBwcCkgKHNlbSwgYSlcbiAgfCBTZW1fZ3JlZWR5IChrLCByZSkgLT4gc2V4cCBmbXQgXCJTZW1fZ3JlZWR5XCIgKHBhaXIgQXV0b21hdGEuUmVwX2tpbmQucHAgcHApIChrLCByZSlcbiAgfCBOb19ncm91cCBjIC0+IHZhciBcIk5vX2dyb3VwXCIgY1xuOztcblxubGV0IHJlYyBwcF9jc2V0IGZtdCBjc2V0ID1cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCBzZXEgcyByZWwgPSBzZXhwIGZtdCBzIChsaXN0IHBwX2NzZXQpIHJlbCBpblxuICBtYXRjaCBjc2V0IHdpdGhcbiAgfCBDYXN0IHMgLT4gcHBfYXN0IHBwX2NzZXQgZm10IHNcbiAgfCBDc2V0IHMgLT4gc2V4cCBmbXQgXCJTZXRcIiBDc2V0LnBwIHNcbiAgfCBJbnRlcnNlY3Rpb24gYyAtPiBzZXEgXCJJbnRlcnNlY3Rpb25cIiBjXG4gIHwgQ29tcGxlbWVudCBjIC0+IHNlcSBcIkNvbXBsZW1lbnRcIiBjXG4gIHwgRGlmZmVyZW5jZSAoYSwgYikgLT4gc2V4cCBmbXQgXCJEaWZmZXJlbmNlXCIgKHBhaXIgcHBfY3NldCBwcF9jc2V0KSAoYSwgYilcbjs7XG5cbmxldCByZWMgZXF1YWwgY3NldCB4MSB4MiA9XG4gIG1hdGNoIHgxLCB4MiB3aXRoXG4gIHwgU2V0IHMxLCBTZXQgczIgLT4gY3NldCBzMSBzMlxuICB8IFNlcXVlbmNlIGwxLCBTZXF1ZW5jZSBsMiAtPiBMaXN0LmVxdWFsIH5lcTooZXF1YWwgY3NldCkgbDEgbDJcbiAgfCBSZXBlYXQgKHgxJywgaTEsIGoxKSwgUmVwZWF0ICh4MicsIGkyLCBqMikgLT5cbiAgICBJbnQuZXF1YWwgaTEgaTIgJiYgT3B0aW9uLmVxdWFsIEludC5lcXVhbCBqMSBqMiAmJiBlcXVhbCBjc2V0IHgxJyB4MidcbiAgfCBCZWdfb2ZfbGluZSwgQmVnX29mX2xpbmVcbiAgfCBFbmRfb2ZfbGluZSwgRW5kX29mX2xpbmVcbiAgfCBCZWdfb2Zfd29yZCwgQmVnX29mX3dvcmRcbiAgfCBFbmRfb2Zfd29yZCwgRW5kX29mX3dvcmRcbiAgfCBOb3RfYm91bmQsIE5vdF9ib3VuZFxuICB8IEJlZ19vZl9zdHIsIEJlZ19vZl9zdHJcbiAgfCBFbmRfb2Zfc3RyLCBFbmRfb2Zfc3RyXG4gIHwgTGFzdF9lbmRfb2ZfbGluZSwgTGFzdF9lbmRfb2ZfbGluZVxuICB8IFN0YXJ0LCBTdGFydFxuICB8IFN0b3AsIFN0b3AgLT4gdHJ1ZVxuICB8IEdyb3VwIF8sIEdyb3VwIF8gLT5cbiAgICAoKiBEbyBub3QgbWVyZ2UgZ3JvdXBzISAqKVxuICAgIGZhbHNlXG4gIHwgUG1hcmsgKG0xLCByMSksIFBtYXJrIChtMiwgcjIpIC0+IFBtYXJrLmVxdWFsIG0xIG0yICYmIGVxdWFsIGNzZXQgcjEgcjJcbiAgfCBOZXN0IHgsIE5lc3QgeSAtPiBlcXVhbCBjc2V0IHggeVxuICB8IEFzdCB4LCBBc3QgeSAtPiBlcXVhbF9hc3QgKGVxdWFsIGNzZXQpIHggeVxuICB8IFNlbSAoc2VtLCBhKSwgU2VtIChzZW0nLCBhJykgLT4gUG9seS5lcXVhbCBzZW0gc2VtJyAmJiBlcXVhbCBjc2V0IGEgYSdcbiAgfCBTZW1fZ3JlZWR5IChyZXAsIGEpLCBTZW1fZ3JlZWR5IChyZXAnLCBhJykgLT4gUG9seS5lcXVhbCByZXAgcmVwJyAmJiBlcXVhbCBjc2V0IGEgYSdcbiAgfCBfIC0+IGZhbHNlXG47O1xuXG50eXBlIHQgPSAoY3NldCwgWyBgQ2FzZWQgfCBgVW5jYXNlZCBdKSBnZW5cbnR5cGUgbm9fY2FzZSA9IChDc2V0LnQsIFsgYFVuY2FzZWQgXSkgZ2VuXG5cbmxldCB0b19keW4gPSBkeW5fb2ZfZ2VuIGR5bl9vZl9jc2V0XG5sZXQgcHAgPSBwcF9nZW4gcHBfY3NldFxubGV0IGNzZXQgY3NldCA9IFNldCAoQ3NldCBjc2V0KVxuXG5sZXQgcmVjIGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgPSBmdW5jdGlvblxuICB8IENzZXQgcyAtPiBpZiBpZ25fY2FzZSB0aGVuIENzZXQuY2FzZV9pbnNlbnMgcyBlbHNlIHNcbiAgfCBDYXN0IChBbHRlcm5hdGl2ZSBsKSAtPiBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSkgbCB8PiBDc2V0LnVuaW9uX2FsbFxuICB8IENvbXBsZW1lbnQgbCAtPlxuICAgIExpc3QubWFwIH5mOihoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlKSBsIHw+IENzZXQudW5pb25fYWxsIHw+IENzZXQuZGlmZiBDc2V0LmNhbnlcbiAgfCBEaWZmZXJlbmNlIChyLCByJykgLT5cbiAgICBDc2V0LmludGVyXG4gICAgICAoaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSByKVxuICAgICAgKENzZXQuZGlmZiBDc2V0LmNhbnkgKGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgcicpKVxuICB8IEludGVyc2VjdGlvbiBsIC0+IExpc3QubWFwIH5mOihoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlKSBsIHw+IENzZXQuaW50ZXJzZWN0X2FsbFxuICB8IENhc3QgKE5vX2Nhc2UgYSkgLT4gaGFuZGxlX2Nhc2VfY3NldCB0cnVlIGFcbiAgfCBDYXN0IChDYXNlIGEpIC0+IGhhbmRsZV9jYXNlX2NzZXQgZmFsc2UgYVxuOztcblxubGV0IHJlYyBoYW5kbGVfY2FzZSBpZ25fY2FzZSA6IHQgLT4gKENzZXQudCwgWyBgVW5jYXNlZCBdKSBnZW4gPSBmdW5jdGlvblxuICB8IFNldCBzIC0+IFNldCAoaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSBzKVxuICB8IFNlcXVlbmNlIGwgLT4gU2VxdWVuY2UgKExpc3QubWFwIH5mOihoYW5kbGVfY2FzZSBpZ25fY2FzZSkgbClcbiAgfCBBc3QgKEFsdGVybmF0aXZlIGwpIC0+XG4gICAgbGV0IGwgPSBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2UgaWduX2Nhc2UpIGwgaW5cbiAgICBBc3QgKEFsdGVybmF0aXZlIGwpXG4gIHwgUmVwZWF0IChyLCBpLCBqKSAtPiBSZXBlYXQgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIsIGksIGopXG4gIHwgKCBCZWdfb2ZfbGluZVxuICAgIHwgRW5kX29mX2xpbmVcbiAgICB8IEJlZ19vZl93b3JkXG4gICAgfCBFbmRfb2Zfd29yZFxuICAgIHwgTm90X2JvdW5kXG4gICAgfCBCZWdfb2Zfc3RyXG4gICAgfCBFbmRfb2Zfc3RyXG4gICAgfCBMYXN0X2VuZF9vZl9saW5lXG4gICAgfCBTdGFydFxuICAgIHwgU3RvcCApIGFzIHIgLT4gclxuICB8IFNlbSAoaywgcikgLT4gU2VtIChrLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IFNlbV9ncmVlZHkgKGssIHIpIC0+IFNlbV9ncmVlZHkgKGssIGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgR3JvdXAgKG4sIHIpIC0+IEdyb3VwIChuLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IE5vX2dyb3VwIHIgLT4gTm9fZ3JvdXAgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgTmVzdCByIC0+IE5lc3QgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgQXN0IChDYXNlIHIpIC0+IGhhbmRsZV9jYXNlIGZhbHNlIHJcbiAgfCBBc3QgKE5vX2Nhc2UgcikgLT4gaGFuZGxlX2Nhc2UgdHJ1ZSByXG4gIHwgUG1hcmsgKGksIHIpIC0+IFBtYXJrIChpLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuOztcblxubW9kdWxlIEV4cG9ydCA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID0gdFxuXG4gIGxldCBwcCA9IHBwXG5cbiAgbGV0IHNlcSA9IGZ1bmN0aW9uXG4gICAgfCBbIHIgXSAtPiByXG4gICAgfCBsIC0+IFNlcXVlbmNlIGxcbiAgOztcblxuICBsZXQgY2hhciA9XG4gICAgbGV0IGYgPSBEZW5zZV9tYXAubWFrZSB+c2l6ZToyNTYgfmY6KGZ1biBpIC0+IGNzZXQgKENzZXQuY3NpbmdsZSAoQ2hhci5jaHIgaSkpKSBpblxuICAgIGZ1biBjIC0+IGYgKENoYXIuY29kZSBjKVxuICA7O1xuXG4gIGxldCBhbnkgPSBjc2V0IENzZXQuY2FueVxuXG4gIGxldCBzdHIgcyA6IHQgPVxuICAgIGxldCBsID0gcmVmIFtdIGluXG4gICAgZm9yIGkgPSBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgICBsIDo9IGNoYXIgcy5baV0gOjogIWxcbiAgICBkb25lO1xuICAgIHNlcSAhbFxuICA7O1xuXG4gIGxldCBhc19zZXRfZWxlbXMgZWxlbXMgPVxuICAgIG1hdGNoXG4gICAgICBMaXN0Lm1hcCBlbGVtcyB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTZXQgZSAtPiBlXG4gICAgICAgIHwgXyAtPiByYWlzZV9ub3RyYWNlIEV4aXQpXG4gICAgd2l0aFxuICAgIHwgZXhjZXB0aW9uIEV4aXQgLT4gTm9uZVxuICAgIHwgZSAtPiBTb21lIGVcbiAgOztcblxuICBsZXQgZW1wdHkgOiB0ID0gQXN0IGVtcHR5X2FsdGVybmF0aXZlXG5cbiAgbGV0IGFsdCAoZWxlbXMgOiB0IGxpc3QpIDogdCA9XG4gICAgbWF0Y2ggZWxlbXMgd2l0aFxuICAgIHwgW10gLT4gZW1wdHlcbiAgICB8IFsgeCBdIC0+IHhcbiAgICB8IF8gLT5cbiAgICAgIChtYXRjaCBhc19zZXRfZWxlbXMgZWxlbXMgd2l0aFxuICAgICAgIHwgTm9uZSAtPiBBc3QgKEFsdGVybmF0aXZlIGVsZW1zKVxuICAgICAgIHwgU29tZSBlbGVtcyAtPiBTZXQgKENhc3QgKEFsdGVybmF0aXZlIGVsZW1zKSkpXG4gIDs7XG5cbiAgbGV0IGVwc2lsb24gPSBzZXEgW11cblxuICBsZXQgcmVwbiByIGkgaiA9XG4gICAgaWYgaSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnJlcG5cIjtcbiAgICBtYXRjaCBqLCBpIHdpdGhcbiAgICB8IFNvbWUgaiwgXyB3aGVuIGogPCBpIC0+IGludmFsaWRfYXJnIFwiUmUucmVwblwiXG4gICAgfCBTb21lIDAsIDAgLT4gZXBzaWxvblxuICAgIHwgU29tZSAxLCAxIC0+IHJcbiAgICB8IF8gLT4gUmVwZWF0IChyLCBpLCBqKVxuICA7O1xuXG4gIGxldCByZXAgciA9IHJlcG4gciAwIE5vbmVcbiAgbGV0IHJlcDEgciA9IHJlcG4gciAxIE5vbmVcbiAgbGV0IG9wdCByID0gcmVwbiByIDAgKFNvbWUgMSlcbiAgbGV0IGJvbCA9IEJlZ19vZl9saW5lXG4gIGxldCBlb2wgPSBFbmRfb2ZfbGluZVxuICBsZXQgYm93ID0gQmVnX29mX3dvcmRcbiAgbGV0IGVvdyA9IEVuZF9vZl93b3JkXG4gIGxldCB3b3JkIHIgPSBzZXEgWyBib3c7IHI7IGVvdyBdXG4gIGxldCBub3RfYm91bmRhcnkgPSBOb3RfYm91bmRcbiAgbGV0IGJvcyA9IEJlZ19vZl9zdHJcbiAgbGV0IGVvcyA9IEVuZF9vZl9zdHJcbiAgbGV0IHdob2xlX3N0cmluZyByID0gc2VxIFsgYm9zOyByOyBlb3MgXVxuICBsZXQgbGVvbCA9IExhc3RfZW5kX29mX2xpbmVcbiAgbGV0IHN0YXJ0ID0gU3RhcnRcbiAgbGV0IHN0b3AgPSBTdG9wXG5cbiAgdHlwZSAnYiBmID0geyBmIDogJ2EuICdhIC0+ICgnYSwgJ2IpIGFzdCB9XG5cbiAgbGV0IG1ha2Vfc2V0IGYgdCA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBTZXQgeCAtPiBTZXQgKENhc3QgKGYuZiB4KSlcbiAgICB8IF8gLT4gQXN0IChmLmYgdClcbiAgOztcblxuICBsZXQgcHJlc2VydmVfc2V0IGYgdCA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBTZXQgXyAtPiB0XG4gICAgfCBfIC0+IGYgdFxuICA7O1xuXG4gIGxldCBsb25nZXN0ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW0gKGBMb25nZXN0LCB0KSlcbiAgbGV0IHNob3J0ZXN0ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW0gKGBTaG9ydGVzdCwgdCkpXG4gIGxldCBmaXJzdCA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gU2VtIChgRmlyc3QsIHQpKVxuICBsZXQgZ3JlZWR5ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW1fZ3JlZWR5IChgR3JlZWR5LCB0KSlcbiAgbGV0IG5vbl9ncmVlZHkgPSBwcmVzZXJ2ZV9zZXQgKGZ1biB0IC0+IFNlbV9ncmVlZHkgKGBOb25fZ3JlZWR5LCB0KSlcbiAgbGV0IGdyb3VwID9uYW1lIHIgPSBHcm91cCAobmFtZSwgcilcbiAgbGV0IG5vX2dyb3VwID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBOb19ncm91cCB0KVxuICBsZXQgbmVzdCByID0gTmVzdCByXG4gIGxldCBzZXQgc3RyID0gY3NldCAoQ3NldC5zZXQgc3RyKVxuXG4gIGxldCBtYXJrIHIgPVxuICAgIGxldCBpID0gUG1hcmsuZ2VuICgpIGluXG4gICAgaSwgUG1hcmsgKGksIHIpXG4gIDs7XG5cbiAgKCoqKiogQ2hhcmFjdGVyIHNldHMgKioqKilcbiAgbGV0IGFzX3NldF9vcl9lcnJvciBuYW1lIGVsZW1zID1cbiAgICBtYXRjaCBhc19zZXRfZWxlbXMgZWxlbXMgd2l0aFxuICAgIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBuYW1lXG4gICAgfCBTb21lIHMgLT4gc1xuICA7O1xuXG4gIGxldCBpbnRlciBlbGVtcyA9IFNldCAoSW50ZXJzZWN0aW9uIChhc19zZXRfb3JfZXJyb3IgXCJSZS5pbnRlclwiIGVsZW1zKSlcbiAgbGV0IGNvbXBsIGVsZW1zID0gU2V0IChDb21wbGVtZW50IChhc19zZXRfb3JfZXJyb3IgXCJSZS5jb21wbFwiIGVsZW1zKSlcblxuICBsZXQgZGlmZiByIHInID1cbiAgICBtYXRjaCByLCByJyB3aXRoXG4gICAgfCBTZXQgciwgU2V0IHInIC0+IFNldCAoRGlmZmVyZW5jZSAociwgcicpKVxuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIlJlLmRpZmZcIlxuICA7O1xuXG4gIGxldCBjYXNlID1cbiAgICBsZXQgZiA9IHsgZiA9IChmdW4gciAtPiBDYXNlIHIpIH0gaW5cbiAgICBmdW4gdCAtPiBtYWtlX3NldCBmIHRcbiAgOztcblxuICBsZXQgbm9fY2FzZSA9XG4gICAgbGV0IGYgPSB7IGYgPSAoZnVuIHIgLT4gTm9fY2FzZSByKSB9IGluXG4gICAgZnVuIHQgLT4gbWFrZV9zZXQgZiB0XG4gIDs7XG5cbiAgbGV0IHdpdG5lc3MgdCA9XG4gICAgbGV0IHJlYyB3aXRuZXNzICh0IDogbm9fY2FzZSkgPVxuICAgICAgbWF0Y2ggdCB3aXRoXG4gICAgICB8IFNldCBjIC0+IFN0cmluZy5tYWtlIDEgKENzZXQudG9fY2hhciAoQ3NldC5waWNrIGMpKVxuICAgICAgfCBTZXF1ZW5jZSB4cyAtPiBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIH5mOndpdG5lc3MgeHMpXG4gICAgICB8IEFzdCAoQWx0ZXJuYXRpdmUgKHggOjogXykpIC0+IHdpdG5lc3MgeFxuICAgICAgfCBBc3QgKEFsdGVybmF0aXZlIFtdKSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgUmVwZWF0IChyLCBmcm9tLCBfdG8pIC0+XG4gICAgICAgIGxldCB3ID0gd2l0bmVzcyByIGluXG4gICAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCB3ICogZnJvbSkgaW5cbiAgICAgICAgZm9yIF9pID0gMSB0byBmcm9tIGRvXG4gICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiB3XG4gICAgICAgIGRvbmU7XG4gICAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG4gICAgICB8IE5vX2dyb3VwIHIgLT4gd2l0bmVzcyByXG4gICAgICB8IFNlbV9ncmVlZHkgKF8sIHIpIHwgU2VtIChfLCByKSB8IE5lc3QgciB8IFBtYXJrIChfLCByKSB8IEdyb3VwIChfLCByKSAtPiB3aXRuZXNzIHJcbiAgICAgIHwgQmVnX29mX2xpbmVcbiAgICAgIHwgRW5kX29mX2xpbmVcbiAgICAgIHwgQmVnX29mX3dvcmRcbiAgICAgIHwgRW5kX29mX3dvcmRcbiAgICAgIHwgTm90X2JvdW5kXG4gICAgICB8IEJlZ19vZl9zdHJcbiAgICAgIHwgTGFzdF9lbmRfb2ZfbGluZVxuICAgICAgfCBTdGFydFxuICAgICAgfCBTdG9wXG4gICAgICB8IEVuZF9vZl9zdHIgLT4gXCJcIlxuICAgIGluXG4gICAgd2l0bmVzcyAoaGFuZGxlX2Nhc2UgZmFsc2UgdClcbiAgOztcbmVuZFxuXG5vcGVuIEV4cG9ydFxuXG5sZXQgcmVjIG1lcmdlX3NlcXVlbmNlcyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCBBc3QgKEFsdGVybmF0aXZlIGwnKSA6OiByIC0+IG1lcmdlX3NlcXVlbmNlcyAobCcgQCByKVxuICB8IFNlcXVlbmNlICh4IDo6IHkpIDo6IHIgLT5cbiAgICAobWF0Y2ggbWVyZ2Vfc2VxdWVuY2VzIHIgd2l0aFxuICAgICB8IFNlcXVlbmNlICh4JyA6OiB5JykgOjogcicgd2hlbiBlcXVhbCBDc2V0LmVxdWFsIHggeCcgLT5cbiAgICAgICBTZXF1ZW5jZSBbIHg7IEFzdCAoQWx0ZXJuYXRpdmUgWyBzZXEgeTsgc2VxIHknIF0pIF0gOjogcidcbiAgICAgfCByJyAtPiBTZXF1ZW5jZSAoeCA6OiB5KSA6OiByJylcbiAgfCB4IDo6IHIgLT4geCA6OiBtZXJnZV9zZXF1ZW5jZXMgclxuOztcblxuKCpYWFggVXNlIGEgYmV0dGVyIGFsZ29yaXRobSBhbGxvd2luZyBub24tY29udGlndW91cyByZWdpb25zPyAqKVxuXG5sZXQgY29sb3JpemUgY29sb3JfbWFwIChyZWdleHAgOiBub19jYXNlKSA9XG4gIGxldCBsbmwgPSByZWYgZmFsc2UgaW5cbiAgbGV0IHJlYyBjb2xvcml6ZSByZWdleHAgPVxuICAgIG1hdGNoIChyZWdleHAgOiBub19jYXNlKSB3aXRoXG4gICAgfCBTZXQgcyAtPiBDb2xvcl9tYXAuc3BsaXQgY29sb3JfbWFwIHNcbiAgICB8IFNlcXVlbmNlIGwgLT4gTGlzdC5pdGVyIH5mOmNvbG9yaXplIGxcbiAgICB8IEFzdCAoQWx0ZXJuYXRpdmUgbCkgLT4gTGlzdC5pdGVyIH5mOmNvbG9yaXplIGxcbiAgICB8IFJlcGVhdCAociwgXywgXykgLT4gY29sb3JpemUgclxuICAgIHwgQmVnX29mX2xpbmUgfCBFbmRfb2ZfbGluZSAtPiBDb2xvcl9tYXAuc3BsaXQgY29sb3JfbWFwIENzZXQubmxcbiAgICB8IEJlZ19vZl93b3JkIHwgRW5kX29mX3dvcmQgfCBOb3RfYm91bmQgLT4gQ29sb3JfbWFwLnNwbGl0IGNvbG9yX21hcCBDc2V0LmN3b3JkXG4gICAgfCBCZWdfb2Zfc3RyIHwgRW5kX29mX3N0ciB8IFN0YXJ0IHwgU3RvcCAtPiAoKVxuICAgIHwgTGFzdF9lbmRfb2ZfbGluZSAtPiBsbmwgOj0gdHJ1ZVxuICAgIHwgTm9fZ3JvdXAgciB8IEdyb3VwIChfLCByKSB8IE5lc3QgciB8IFBtYXJrIChfLCByKSAtPiBjb2xvcml6ZSByXG4gICAgfCBTZW0gKF8sIHIpIHwgU2VtX2dyZWVkeSAoXywgcikgLT4gY29sb3JpemUgclxuICBpblxuICBjb2xvcml6ZSByZWdleHA7XG4gICFsbmxcbjs7XG5cbmxldCByZWMgYW5jaG9yZWRfYXN0IDogKHQsIF8pIGFzdCAtPiBib29sID0gZnVuY3Rpb25cbiAgfCBBbHRlcm5hdGl2ZSBhbHMgLT4gTGlzdC5mb3JfYWxsIH5mOmFuY2hvcmVkIGFsc1xuICB8IE5vX2Nhc2UgciB8IENhc2UgciAtPiBhbmNob3JlZCByXG5cbmFuZCBhbmNob3JlZCA6IHQgLT4gYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQXN0IGEgLT4gYW5jaG9yZWRfYXN0IGFcbiAgfCBTZXF1ZW5jZSBsIC0+IExpc3QuZXhpc3RzIH5mOmFuY2hvcmVkIGxcbiAgfCBSZXBlYXQgKHIsIGksIF8pIC0+IGkgPiAwICYmIGFuY2hvcmVkIHJcbiAgfCBOb19ncm91cCByIHwgU2VtIChfLCByKSB8IFNlbV9ncmVlZHkgKF8sIHIpIHwgR3JvdXAgKF8sIHIpIHwgTmVzdCByIHwgUG1hcmsgKF8sIHIpIC0+XG4gICAgYW5jaG9yZWQgclxuICB8IFNldCBfXG4gIHwgQmVnX29mX2xpbmVcbiAgfCBFbmRfb2ZfbGluZVxuICB8IEJlZ19vZl93b3JkXG4gIHwgRW5kX29mX3dvcmRcbiAgfCBOb3RfYm91bmRcbiAgfCBFbmRfb2Zfc3RyXG4gIHwgTGFzdF9lbmRfb2ZfbGluZVxuICB8IFN0b3AgLT4gZmFsc2VcbiAgfCBCZWdfb2Zfc3RyIHwgU3RhcnQgLT4gdHJ1ZVxuOztcblxubGV0IHRfb2ZfY3NldCB4ID0gU2V0IHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw1IiwiYTIiLCJhMyIsImE0IiwiZ2xvYmFsX2RhdGEiLCJSZV9Dc2V0IiwiUmVfRHluIiwiU3RkbGliX0xpc3RMYWJlbHMiLCJSZV9QbWFyayIsIlJlX0F1dG9tYXRhIiwiUmVfRm10IiwiU3RkbGliX0Zvcm1hdCIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9PcHRpb24iLCJTdGRsaWIiLCJSZV9Db2xvcl9tYXAiLCJTdGRsaWJfU3RyaW5nIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0NoYXIiLCJSZV9EZW5zZV9tYXAiLCJjc3RfQWx0ZXJuYXRpdmUiLCJjc3RfQ2FzZSIsImNzdF9Ob19jYXNlIiwiZHluX29mX2FzdCIsInBhcmFtIiwieHMiLCJhIiwicHBfYXN0IiwiZm10IiwiYXN0IiwidmFyJCIsInMiLCJyZSIsImFsdCIsImMiLCJjc3RfQ29tcGxlbWVudCIsImNzdF9EaWZmZXJlbmNlIiwiY3N0X0ludGVyc2VjdGlvbiIsImR5bl9vZl9jc2V0IiwiY3NldCIsInkiLCJ4IiwiY3N0X0JlZ19vZl9saW5lIiwiY3N0X0JlZ19vZl9zdHIiLCJjc3RfQmVnX29mX3dvcmQiLCJjc3RfRW5kX29mX2xpbmUiLCJjc3RfRW5kX29mX3N0ciIsImNzdF9FbmRfb2Zfd29yZCIsImNzdF9Hcm91cCIsImNzdF9MYXN0X2VuZF9vZl9saW5lIiwiY3N0X05lc3QiLCJjc3RfTm9fZ3JvdXAiLCJjc3RfTm90X2JvdW5kIiwiY3N0X1BtYXJrIiwiY3N0X1JlcGVhdCIsImNzdF9TZW0iLCJjc3RfU2VtX2dyZWVkeSIsImNzdF9TZXF1ZW5jZSIsImNzdF9TZXQiLCJjc3RfU3RhcnQiLCJjc3RfU3RvcCIsImR5bl9vZl9nZW4iLCJtYXgiLCJtaW4iLCJnZW4iLCJiYXNlIiwidCIsIm5hbWUiLCJhcmdzIiwicG1hcmsiLCJzZW0iLCJyZXAiLCJwcF9nZW4iLCJwcF9jc2V0IiwicHAiLCJyZWwiLCJzdG9wIiwic3RhcnQiLCJtYXRjaCIsIm4iLCJyIiwibSIsImsiLCJzZXEiLCJiIiwiZXF1YWwiLCJ4MSIsIngyIiwiczIiLCJzMSIsImoyIiwiaTIiLCJqMSIsImkxIiwicjIiLCJtMiIsInIxIiwibTEiLCJsMiIsImwxIiwiZXEiLCJ0b19keW4iLCJoYW5kbGVfY2FzZV9jc2V0IiwiaWduX2Nhc2UiLCJsIiwiaGFuZGxlX2Nhc2UiLCJqIiwiaSIsImNoYXIiLCJhbnkiLCJzdHIiLCJhc19zZXRfZWxlbXMiLCJlbGVtcyIsImUiLCJleG4iLCJlbXB0eSIsImVwc2lsb24iLCJyZXBuIiwiY3N0X1JlX3JlcG4iLCJyZXAxIiwib3B0IiwiYm93IiwiZW93Iiwid29yZCIsImJvcyIsImVvcyIsIndob2xlX3N0cmluZyIsIm1ha2Vfc2V0IiwibG9uZ2VzdCIsInNob3J0ZXN0IiwiZmlyc3QiLCJncmVlZHkiLCJub25fZ3JlZWR5IiwiZ3JvdXAiLCJub19ncm91cCIsIm5lc3QiLCJzZXQiLCJtYXJrIiwiYXNfc2V0X29yX2Vycm9yIiwiaW50ZXIiLCJjb21wbCIsImRpZmYiLCJjYXNlJCIsIm5vX2Nhc2UiLCJ3aXRuZXNzIiwiY3N0IiwiZnJvbSIsInciLCJtZXJnZV9zZXF1ZW5jZXMiLCJjb2xvcml6ZSIsImNvbG9yX21hcCIsInJlZ2V4cCIsImxubCIsImFuY2hvcmVkIiwiYWxzIiwidF9vZl9jc2V0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURqV0oiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNDAyNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2dyb3VwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogUmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gKilcbnR5cGUgdCA9XG4gIHsgKCogSW5wdXQgc3RyaW5nLiBNYXRjaGVkIHN0cmluZ3MgYXJlIHN1YnN0cmluZ3Mgb2YgcyAqKVxuICAgIHMgOiBzdHJpbmdcbiAgICAgICgqIE1hcHBpbmcgZnJvbSBncm91cCBpbmRpY2VzIHRvIHBvc2l0aW9ucyBpbiBncG9zLiBncm91cCBpIGhhcyBwb3NpdGlvbnMgMippXG4gICAgICAgICAtIDEsIDIqaSArIDEgaW4gZ3Bvcy4gSWYgdGhlIGdyb3VwIHdhc24ndCBtYXRjaGVkLCB0aGVuIGl0cyBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgIHZhbHVlcyBpbiBtYXJrcyB3aWxsIGJlIC0xLC0xICopXG4gIDsgbWFya3MgOiBNYXJrX2luZm9zLnRcbiAgOyAoKiBNYXJrcyBwb3NpdGlvbnMuIGkuZS4gdGhvc2UgbWFya3MgY3JlYXRlZCB3aXRoIFJlLm1hcmtzICopXG4gICAgcG1hcmtzIDogUG1hcmsuU2V0LnRcbiAgOyAoKiBHcm91cCBwb3NpdGlvbnMuIEFkamFjZW50IGVsZW1lbnRzIGFyZSAoc3RhcnQsIHN0b3ApIG9mIGdyb3VwIG1hdGNoLlxuICAgICAgIGluZGV4ZWQgYnkgdGhlIHZhbHVlcyBpbiBtYXJrcy4gU28gZ3JvdXAgaSBpbiBhbiByZSB3b3VsZCBiZSB0aGUgc3Vic3RyaW5nOlxuXG4gICAgICAgc3RhcnQgPSB0Lmdwb3MuKG1hcmtzLigyKmkpKSAtIDFcbiAgICAgICBzdG9wID0gdC5ncG9zLihtYXJrcy4oMippICsgMSkpIC0gMSAqKVxuICAgIGdwb3MgOiBpbnQgYXJyYXlcbiAgOyAoKiBOdW1iZXIgb2YgZ3JvdXBzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY29udGFpbnMuIE1hdGNoZWQgb3Igbm90ICopXG4gICAgZ2NvdW50IDogaW50XG4gIH1cblxubGV0IGNyZWF0ZSBzIH5nY291bnQgfmdwb3MgbWFya3MgcG1hcmtzID0geyBzOyBnY291bnQ7IGdwb3M7IG1hcmtzOyBwbWFya3MgfVxuXG5tb2R1bGUgT2Zmc2V0ID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCBhYnNlbnQgPSAtMVxuICBsZXQgaXNfcHJlc2VudCB0ID0gdCA+PSAwXG4gIGxldCBnZXRfbm9fY2hlY2sgdCA9IHRcbmVuZFxuXG5sZXQgc3RhcnRfb2Zmc2V0IHQgaSA9XG4gIGxldCBpID0gTWFya19pbmZvcy5zdGFydF9vZmZzZXQgdC5tYXJrcyBpIGluXG4gIGlmIE1hcmtfaW5mb3MuT2Zmc2V0LmlzX3ByZXNlbnQgaVxuICB0aGVuIHQuZ3Bvcy4oTWFya19pbmZvcy5PZmZzZXQuZ2V0X25vX2NoZWNrIGkpXG4gIGVsc2UgT2Zmc2V0LmFic2VudFxuOztcblxubGV0IHN0b3Bfb2Zmc2V0IHQgaSA9XG4gIGxldCBpID0gTWFya19pbmZvcy5zdG9wX29mZnNldCB0Lm1hcmtzIGkgaW5cbiAgaWYgTWFya19pbmZvcy5PZmZzZXQuaXNfcHJlc2VudCBpXG4gIHRoZW4gdC5ncG9zLihNYXJrX2luZm9zLk9mZnNldC5nZXRfbm9fY2hlY2sgaSlcbiAgZWxzZSBPZmZzZXQuYWJzZW50XG47O1xuXG5sZXQgb2Zmc2V0X29wdCB0IGkgPVxuICBNYXJrX2luZm9zLm9mZnNldCB0Lm1hcmtzIGlcbiAgfD4gT3B0aW9uLm1hcCAoZnVuIChzdGFydCwgc3RvcCkgLT4gdC5ncG9zLihzdGFydCksIHQuZ3Bvcy4oc3RvcCkpXG47O1xuXG5sZXQgb3Jfbm90X2ZvdW5kID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IFNvbWUgcyAtPiBzXG47O1xuXG5sZXQgb2Zmc2V0IHQgaSA9IG9mZnNldF9vcHQgdCBpIHw+IG9yX25vdF9mb3VuZFxuXG5sZXQgZ2V0X29wdCB0IGkgPVxuICBvZmZzZXRfb3B0IHQgaSB8PiBPcHRpb24ubWFwIChmdW4gKHAxLCBwMikgLT4gU3RyaW5nLnN1YiB0LnMgcDEgKHAyIC0gcDEpKVxuOztcblxubGV0IHBtYXJrcyB0ID0gdC5wbWFya3NcbmxldCBnZXQgdCBpID0gZ2V0X29wdCB0IGkgfD4gb3Jfbm90X2ZvdW5kXG5sZXQgc3RhcnRfb3B0IHN1YnMgaSA9IG9mZnNldF9vcHQgc3VicyBpIHw+IE9wdGlvbi5tYXAgZnN0XG5sZXQgc3RhcnQgc3VicyBpID0gc3RhcnRfb3B0IHN1YnMgaSB8PiBvcl9ub3RfZm91bmRcbmxldCBzdG9wX29wdCBzdWJzIGkgPSBvZmZzZXRfb3B0IHN1YnMgaSB8PiBPcHRpb24ubWFwIHNuZFxubGV0IHN0b3Agc3VicyBpID0gc3RvcF9vcHQgc3VicyBpIHw+IG9yX25vdF9mb3VuZFxubGV0IHRlc3QgdCBpID0gTWFya19pbmZvcy50ZXN0IHQubWFya3MgaVxubGV0IGdldF9vcHQgdCBpID0gaWYgdGVzdCB0IGkgdGhlbiBTb21lIChnZXQgdCBpKSBlbHNlIE5vbmVcbmxldCBkdW1teV9vZmZzZXQgPSAtMSwgLTFcblxubGV0IGFsbF9vZmZzZXQgdCA9XG4gIGxldCByZXMgPSBBcnJheS5tYWtlIHQuZ2NvdW50IGR1bW15X29mZnNldCBpblxuICBNYXJrX2luZm9zLml0ZXJpIHQubWFya3MgfmY6KGZ1biBpIHN0YXJ0IHN0b3AgLT5cbiAgICBsZXQgcDEgPSB0Lmdwb3MuKHN0YXJ0KSBpblxuICAgIGxldCBwMiA9IHQuZ3Bvcy4oc3RvcCkgaW5cbiAgICByZXMuKGkpIDwtIHAxLCBwMik7XG4gIHJlc1xuOztcblxubGV0IGR1bW15X3N0cmluZyA9IFwiXCJcblxubGV0IGFsbCB0ID1cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgdC5nY291bnQgZHVtbXlfc3RyaW5nIGluXG4gIE1hcmtfaW5mb3MuaXRlcmkgdC5tYXJrcyB+ZjooZnVuIGkgc3RhcnQgc3RvcCAtPlxuICAgIGxldCBwMSA9IHQuZ3Bvcy4oc3RhcnQpIGluXG4gICAgbGV0IHAyID0gdC5ncG9zLihzdG9wKSBpblxuICAgIHJlcy4oaSkgPC0gU3RyaW5nLnN1YiB0LnMgcDEgKHAyIC0gcDEpKTtcbiAgcmVzXG47O1xuXG5sZXQgcHAgZm10IHQgPVxuICBsZXQgbWF0Y2hlcyA9XG4gICAgbGV0IG9mZnNldHMgPSBhbGxfb2Zmc2V0IHQgaW5cbiAgICBsZXQgc3RycyA9IGFsbCB0IGluXG4gICAgQXJyYXkudG9fbGlzdCAoQXJyYXkuaW5pdCAoQXJyYXkubGVuZ3RoIHN0cnMpIChmdW4gaSAtPiBzdHJzLihpKSwgb2Zmc2V0cy4oaSkpKVxuICBpblxuICBsZXQgb3BlbiBGb3JtYXQgaW5cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCBwcF9tYXRjaCBmbXQgKHN0ciwgKHN0YXJ0LCBzdG9wKSkgPSBmcHJpbnRmIGZtdCBcIkBbKCVzICglZCAlZCkpQF1cIiBzdHIgc3RhcnQgc3RvcCBpblxuICBzZXhwIGZtdCBcIkdyb3VwXCIgKGxpc3QgcHBfbWF0Y2gpIG1hdGNoZXNcbjs7XG5cbmxldCBuYl9ncm91cHMgdCA9IHQuZ2NvdW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDMiLCJmIiwiYTAiLCJhMSIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX0FycmF5IiwiUmVfRm10IiwiU3RkbGliX1N0cmluZyIsIlJlX01hcmtfaW5mb3MiLCJTdGRsaWJfT3B0aW9uIiwiU3RkbGliIiwiY3JlYXRlIiwicyIsImdjb3VudCIsImdwb3MiLCJtYXJrcyIsInBtYXJrcyIsImlzX3ByZXNlbnQiLCJ0IiwiZ2V0X25vX2NoZWNrIiwiYWJzZW50Iiwic3RhcnRfb2Zmc2V0IiwiaSIsInN0b3Bfb2Zmc2V0Iiwib2Zmc2V0X29wdCIsInBhcmFtIiwic3RvcCIsInN0YXJ0Iiwib3Jfbm90X2ZvdW5kIiwib2Zmc2V0IiwiZ2V0IiwicDIiLCJwMSIsInN0YXJ0X29wdCIsInN1YnMiLCJzdG9wX29wdCIsInRlc3QiLCJnZXRfb3B0IiwiZHVtbXlfb2Zmc2V0IiwiYWxsX29mZnNldCIsInJlcyIsImNzdCIsImFsbCIsInBwIiwiZm10Iiwib2Zmc2V0cyIsInN0cnMiLCJtYXRjaGVzIiwicHBfbWF0Y2giLCJtYXRjaCIsInN0ciIsIm5iX2dyb3VwcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQyxRQUFBQyxNQUFBQyxPQUFBQyxRQ29CMEM7QUFBQSxHQUFrQztBQUFBLFlBQUFDLFdBQUFDLEdBTXZELHNCQUFNO0FBQUEsWUFBQUMsYUFBQUQsR0FDSixTQUFDO0FBQUEsT0FBQUUsU0QzQnhCO0FBQUEsWUFBQUMsYUFBQUgsR0FBQUk7QUFBQUEsUUFBQUEsTUMrQlU7QUFBQSxJQUNMLDBDQUVFO0FBQUEsWUFEUTtBQUFBLElBQVIsdUNBQXlDO0FBQUEsR0FDNUI7QUFBQSxZQUFBQyxZQUFBTCxHQUFBSTtBQUFBQSxRQUFBQSxNQUlWO0FBQUEsSUFDTCwwQ0FFRTtBQUFBLFlBRFE7QUFBQSxJQUFSLHVDQUF5QztBQUFBLEdBQzVCO0FBQUEsWUFBQUUsV0FBQU4sR0FBQUk7QUFBQUEsUUFBQSxJQUlsQjtBQUFBLElBQ0c7QUFBQTtBQUFBLHNCQUFBRztBQUFBQTtBQUFBQSxlQUFBQyxPQUFXO0FBQUEsZUFBQUMsUUFBQTtBQUFBLG1CQUFzQztBQUFBLGNBQWhCLHVEQUFjO0FBQUEsYUFBZ0I7QUFBQTtBQUFBO0FBQUEsWUFBQUMsYUFBQUg7QUFBQUEsSUFHakQsWUFDUDtBQUFBLFFBQUFiLElBRE87QUFBQSxJQUVMO0FBQUEsR0FBQztBQUFBLFlBQUFpQixPQUFBWCxHQUFBSSxHQUdFLE9BQWMsYUFBZCxpQkFBOEI7QUFBQSxZQUFBTixPQUFBRSxHQU1oQyxZQUFRO0FBQUEsWUFBQVksSUFBQVosR0FBQUk7QUFBQUEsUUFBQSxJQUhyQjtBQUFBLElBQWtCLE9BSUs7QUFBQSxhQUpMO0FBQUE7QUFBQSx3QkFBQUc7QUFBQUEsb0JBQUFNLEtBQVcsVUFBQUMsS0FBQTtBQUFBLGdCQUFpQiwwREFBNEI7QUFBQTtBQUFBLGtCQUluQztBQUFBO0FBQUEsWUFBQUMsVUFBQUMsTUFBQVo7QUFBQUEsUUFBQSxJQUNsQjtBQUFBLElBQXFCLCtDRDlENUMsaUJDOEQwRDtBQUFBO0FBQUEsWUFBQUssTUFBQU8sTUFBQVosR0FDdkMsT0FBZ0IsYUFBaEIsbUJBQWdDO0FBQUEsWUFBQWEsU0FBQUQsTUFBQVo7QUFBQUEsUUFBQSxJQUM3QjtBQUFBLElBQXFCLCtDRGhFM0MsaUJDZ0V5RDtBQUFBO0FBQUEsWUFBQUksS0FBQVEsTUFBQVosR0FDdkMsT0FBZSxhQUFmLGtCQUErQjtBQUFBLFlBQUFjLEtBQUFsQixHQUFBSSxHQUNsQywyQ0FBeUI7QUFBQSxZQUFBZSxRQUFBbkIsR0FBQUksR0FDbkIsd0JBQW1CLGNBQW1CO0FBQUEsT0FBQWdCLGVEbkUzRDtBQUFBLFlBQUFDLFdBQUFyQjtBQUFBQSxRQUFBc0IsTUN1RVk7QUFBQSxJQUNWO0FBQUE7QUFBQTtBQUFBLGVBQUFsQixHQUFBSyxPQUFBRDtBQUFBQTtBQUFBQSxRQUFBTSxLQUNXO0FBQUEsUUFBQUQsS0FDQTtBQUFBLE9BQ1Q7QUFBQSxPQUFpQjtBQUFBO0FBQUEsSUFBQztBQUFBLEdBQ2pCO0FBQUEsT0FBQVUsTUQ1RUw7QUFBQSxZQUFBQyxJQUFBeEI7QUFBQUEsUUFBQXNCLE1Da0ZZO0FBQUEsSUFDVjtBQUFBO0FBQUE7QUFBQSxlQUFBbEIsR0FBQUssT0FBQUQ7QUFBQUE7QUFBQUEsUUFBQU0sS0FDVztBQUFBLFFBQUFELEtBQ0E7QUFBQSxZQUNFO0FBQUEsT0FBWDtBQUFBLE9BQXNDO0FBQUE7QUFBQSxJQUFDO0FBQUEsR0FDdEM7QUFBQTtBQUFBO0FBQUEsTUR2Rkw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFZLEdBQUFDLEtBQUExQjtBQUFBQTtBQUFBQSxLQUFBMkIsVUM0RmtCO0FBQUEsS0FBQUMsT0FDSDtBQUFBO0FBQUEsT0FDRztBQUFBO0FBQUE7QUFBQSxrQkFBQXhCO0FBQUFBLGNBQUEsSUFBb0Q7QUFBQSxVQUFWLCtDQUFRO0FBQUEsU0FBYTtBQUFBLEtBQUF5QixVQUE3RTtBQUFBLGFBQUFDLFNBQUFKLEtBQUFuQjtBQUFBQSxTQUFBd0IsUUFJVyxVQUFBdkIsT0FBQSxVQUFBQyxRQUFBLFVBQUF1QixNQUFBO0FBQUEsS0FBMkI7QUFBQSxzRUFBNkM7QUFBQTtBQUFBLFlBQ3BFO0FBQUEsSUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFmO0FBQUEscUJBQXVCO0FBQUE7QUFBQSxZQUFBQyxVQUFBakMsR0FHeEIsWUFBUTtBQUFBLEdEdEcxQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM0MjA1LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvc2xpY2UubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG50eXBlIHQgPVxuICB7IHMgOiBzdHJpbmdcbiAgOyBwb3MgOiBpbnRcbiAgOyBsZW4gOiBpbnRcbiAgfVxuXG5tb2R1bGUgTCA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID0gdCBsaXN0XG5cbiAgbGV0IGdldF9zdWJzdHJpbmcgc2xpY2VzIH5zdGFydCB+c3RvcCA9XG4gICAgaWYgc3RvcCA9IHN0YXJ0XG4gICAgdGhlbiBcIlwiXG4gICAgZWxzZSAoXG4gICAgICBsZXQgc2xpY2VzID1cbiAgICAgICAgbGV0IHJlYyBkcm9wIHNsaWNlcyByZW1haW5zID1cbiAgICAgICAgICBpZiByZW1haW5zID0gMFxuICAgICAgICAgIHRoZW4gc2xpY2VzXG4gICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICBtYXRjaCBzbGljZXMgd2l0aFxuICAgICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgKHsgcyA9IF87IHBvczsgbGVuIH0gYXMgc2xpY2UpIDo6IHhzIC0+XG4gICAgICAgICAgICAgIGxldCByZW1haW5zJyA9IHJlbWFpbnMgLSBsZW4gaW5cbiAgICAgICAgICAgICAgaWYgcmVtYWlucycgPj0gMFxuICAgICAgICAgICAgICB0aGVuIGRyb3AgeHMgcmVtYWlucydcbiAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgbGV0IHBvcyA9IHBvcyArIHJlbWFpbnMgaW5cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gbGVuIC0gcmVtYWlucyBpblxuICAgICAgICAgICAgICAgIHsgc2xpY2Ugd2l0aCBwb3M7IGxlbiB9IDo6IHhzKSlcbiAgICAgICAgaW5cbiAgICAgICAgZHJvcCBzbGljZXMgc3RhcnRcbiAgICAgIGluXG4gICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoc3RvcCAtIHN0YXJ0KSBpblxuICAgICAgbGV0IHJlYyB0YWtlIHNsaWNlcyByZW1haW5zID1cbiAgICAgICAgaWYgcmVtYWlucyA+IDBcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbWF0Y2ggc2xpY2VzIHdpdGhcbiAgICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgeyBzOyBwb3M7IGxlbiB9IDo6IHhzIC0+XG4gICAgICAgICAgICBsZXQgcmVtYWlucycgPSByZW1haW5zIC0gbGVuIGluXG4gICAgICAgICAgICBpZiByZW1haW5zJyA+IDBcbiAgICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgbGVuO1xuICAgICAgICAgICAgICB0YWtlIHhzIHJlbWFpbnMnKVxuICAgICAgICAgICAgZWxzZSBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgcmVtYWlucylcbiAgICAgIGluXG4gICAgICB0YWtlIHNsaWNlcyAoc3RvcCAtIHN0YXJ0KTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWYpXG4gIDs7XG5cbiAgbGV0IHJlYyBkcm9wIHQgcmVtYWlucyA9XG4gICAgaWYgcmVtYWlucyA9IDBcbiAgICB0aGVuIHRcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoeyBzID0gXzsgcG9zOyBsZW4gfSBhcyBzbGljZSkgOjogdCAtPlxuICAgICAgICBpZiByZW1haW5zID49IGxlblxuICAgICAgICB0aGVuIGRyb3AgdCAocmVtYWlucyAtIGxlbilcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgbGV0IGRlbHRhID0gbGVuIC0gcmVtYWlucyBpblxuICAgICAgICAgIHsgc2xpY2Ugd2l0aCBwb3MgPSBwb3MgKyBkZWx0YTsgbGVuID0gbGVuIC0gZGVsdGEgfSA6OiB0KSlcbiAgOztcblxuICBsZXQgZHJvcF9yZXYgdCByZW1haW5zID1cbiAgICAoKiBUT0RPIFVzZSBhIHByb3BlciBmdW5jdGlvbmFsIHF1ZXVlICopXG4gICAgaWYgcmVtYWlucyA9IDAgdGhlbiB0IGVsc2UgTGlzdC5yZXYgKGRyb3AgKExpc3QucmV2IHQpIHJlbWFpbnMpXG4gIDs7XG5lbmRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWJfTGlzdExhYmVscyIsIlN0ZGxpYl9CdWZmZXIiLCJBc3NlcnRfZmFpbHVyZSIsImNzdF9saWJfc2xpY2VfbWwiLCJnZXRfc3Vic3RyaW5nIiwic2xpY2VzIiwicmVtYWlucyIsInN0b3AiLCJzbGljZSIsImxlbiIsInBvcyIsImJ1ZiIsIm1hdGNoIiwicyIsImRyb3BfcmV2IiwidCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxjQUFBQyxRQUFBQyxTQUFBQztBQUFBQTtBQUFBQTtBQUFBQSxLQ1lPLDJDQUNFO0FBQUEsU0FBQUYsV0FEVSxRQUFBQyxZQUFBO0FBQUE7QUFBQSxNQUtOLDhDQUFBRCxXQUFXO0FBQUEsTUFFVDtBQUFBLE9BRUs7QUFBQTtBQUFBLE9BQUFBLFdBRkw7QUFBQSxPQUFBRyxRQUFBO0FBQUEsT0FBQUMsTUFBQTtBQUFBLE9BQUFDLE1BQUE7QUFBQSxPQUFBSixZQUlEO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBQUksUUFFSztBQUFBLE1BQUFELFFBRUg7QUFBQSxNQUFBSixXQUNBO0FBQUE7QUFBQTtBQUFBLEtBQUFNLE1BSUE7QUFBQSxLQUFBTCxZQWNWO0FBQUEsS0FBQUQsV0FBQTtBQUFBLEtBQUFDLFlBQUE7QUFBQTtBQUFBLEtBWks7QUFBQSxNQUNFO0FBQUEsT0FFSztBQUFBO0FBQUEsT0FBQUQsV0FGTDtBQUFBLE9BQUFPLFFBQUE7QUFBQSxPQUFBSCxRQUFBO0FBQUEsT0FBQUMsUUFBQTtBQUFBLE9BQUFHLElBQUE7QUFBQSxPQUFBUCxZQUlEO0FBQUEsTUFDRztBQUFBLE9BRUQ7QUFBQSxPQUFrQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BRS9CO0FBQUE7QUFBQSxLQUVlLHVDQUNOO0FBQUE7QUFBQTtBQUFBLFlBQUFRLFNBQUFDLEtBQUFUO0FBQUFBLElBbUJuQiwwQ0FBaUI7QUFBQTtBQUFBLEtBQUFTLE1BQXNCO0FBQUEsS0FBQUEsSUFBTjtBQUFBLEtBQUFULFVBQUE7QUFBQTtBQUFBLEtBZmpDO0FBQUEsY0FBVztBQUFBO0FBQUEsVUFBQVMsTUFFVCxNQUFBUCxRQUFBLE1BQUFDLE1BQUEsVUFBQUMsTUFBQTtBQUFBLE1BSUQ7QUFBQSxXQUFBSixZQUNLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFVLFFBQ0E7QUFBQSxXQUVIO0FBQUE7QUFBQTtBQUFBLGNBTkk7QUFBQSxLQVdxRDtBQUFBO0FBQUE7QUFBQSxHRG5FbkUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNDMwNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2NvbXBpbGUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG5sZXQgcmVjIGl0ZXIgbiBmIHYgPSBpZiBJbnQuZXF1YWwgbiAwIHRoZW4gdiBlbHNlIGl0ZXIgKG4gLSAxKSBmIChmIHYpXG5cbm1vZHVsZSBJZHggOiBzaWdcbiAgdHlwZSB0IFtAQGltbWVkaWF0ZV1cblxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIG1ha2VfYnJlYWsgOiBBdXRvbWF0YS5JZHgudCAtPiB0XG4gIHZhbCBvZl9pZHggOiBBdXRvbWF0YS5JZHgudCAtPiB0XG4gIHZhbCBpc19pZHggOiB0IC0+IGJvb2xcbiAgdmFsIGlzX2JyZWFrIDogdCAtPiBib29sXG4gIHZhbCBpc191bmtub3duIDogdCAtPiBib29sXG4gIHZhbCBpZHggOiB0IC0+IGludFxuICB2YWwgYnJlYWtfaWR4IDogdCAtPiBpbnRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdW5rbm93biA9IC0yXG4gIGxldCBicmVhayA9IC0zXG4gIGxldCBvZl9pZHggKHggOiBBdXRvbWF0YS5JZHgudCkgPSBBdXRvbWF0YS5JZHgudG9faW50IHggW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGlzX2lkeCB0ID0gdCA+PSAwIFtAQGlubGluZSBhbHdheXNdXG4gIGxldCBpc19icmVhayB4ID0geCA8PSBicmVhayBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgaXNfdW5rbm93biB4ID0geCA9IHVua25vd24gW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGlkeCB0ID0gdCBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgbWFrZV9icmVhayAoaWR4IDogQXV0b21hdGEuSWR4LnQpID0gLTUgLSBBdXRvbWF0YS5JZHgudG9faW50IGlkeCBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgYnJlYWtfaWR4IHQgPSAodCArIDUpICogLTEgW0BAaW5saW5lIGFsd2F5c11cbmVuZFxuXG50eXBlIG1hdGNoX2luZm8gPVxuICB8IE1hdGNoIG9mIEdyb3VwLnRcbiAgfCBGYWlsZWRcbiAgfCBSdW5uaW5nIG9mIHsgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSA6IGludCB9XG5cbnR5cGUgc3RhdGVfaW5mbyA9XG4gIHsgaWR4IDogSWR4LnRcbiAgOyAoKiBJbmRleCBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcG9zaXRpb24gdGFibGUuXG4gICAgICAgTm90IHlldCBjb21wdXRlZCB0cmFuc2l0aW9ucyBwb2ludCB0byBhIGR1bW15IHN0YXRlIHdoZXJlXG4gICAgICAgW2lkeF0gaXMgc2V0IHRvIFt1bmtub3duXTtcbiAgICAgICBJZiBbaWR4XSBpcyBzZXQgdG8gW2JyZWFrXSBmb3Igc3RhdGVzIHRoYXQgZWl0aGVyIGFsd2F5c1xuICAgICAgIHN1Y2NlZWQgb3IgYWx3YXlzIGZhaWwuICopXG4gICAgbXV0YWJsZSBmaW5hbCA6IChDYXRlZ29yeS50ICogKEF1dG9tYXRhLklkeC50ICogQXV0b21hdGEuU3RhdHVzLnQpKSBsaXN0XG4gIDsgKCogTWFwcGluZyBmcm9tIHRoZSBjYXRlZ29yeSBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG9cbiAgICAgICAtIHRoZSBpbmRleCB3aGVyZSB0aGUgbmV4dCBwb3NpdGlvbiBzaG91bGQgYmUgc2F2ZWRcbiAgICAgICAtIHBvc3NpYmx5LCB0aGUgbGlzdCBvZiBtYXJrcyAoYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGljZXMpXG4gICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBiZXN0IG1hdGNoICopXG4gICAgZGVzYyA6IEF1dG9tYXRhLlN0YXRlLnQgKCogRGVzY3JpcHRpb24gb2YgdGhpcyBzdGF0ZSBvZiB0aGUgYXV0b21hdGEgKilcbiAgfVxuXG4oKiBUaHJlYWQtc2FmZXR5OiB3ZSB1c2UgZG91YmxlLWNoZWNrZWQgbG9ja2luZyB0byBhY2Nlc3MgZmllbGQgW2ZpbmFsXS4gKilcblxuKCogQSBzdGF0ZSBbdF0gaXMgYSBwYWlyIGNvbXBvc2VkIG9mIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG4gICBzdGF0ZSBbc3RhdGVfaW5mb10gYW5kIGEgdHJhbnNpdGlvbiB0YWJsZSBbdCBhcnJheV0sIGluZGV4ZWQgYnlcbiAgIGNvbG9yLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29uLCB0byBhdm9pZCBhbiBpbmRpcmVjdGlvbiwgd2UgbWFudWFsbHlcbiAgIHVuYm94IHRoZSB0cmFuc2l0aW9uIHRhYmxlOiB3ZSBhbGxvY2F0ZSBhIHNpbmdsZSBhcnJheSwgd2l0aCB0aGVcbiAgIHN0YXRlIGluZm9ybWF0aW9uIGF0IGluZGV4IDAsIGZvbGxvd2VkIGJ5IHRoZSB0cmFuc2l0aW9ucy4gKilcbm1vZHVsZSBTdGF0ZSA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgbWFrZSA6IG5jb2w6aW50IC0+IHN0YXRlX2luZm8gLT4gdFxuICB2YWwgbWFrZV9icmVhayA6IHN0YXRlX2luZm8gLT4gdFxuICB2YWwgZ2V0X2luZm8gOiB0IC0+IHN0YXRlX2luZm9cbiAgdmFsIGZvbGxvd190cmFuc2l0aW9uIDogdCAtPiBjb2xvcjpDc2V0LmMgLT4gdFxuICB2YWwgc2V0X3RyYW5zaXRpb24gOiB0IC0+IGNvbG9yOkNzZXQuYyAtPiB0IC0+IHVuaXRcbiAgdmFsIGlzX3Vua25vd25fdHJhbnNpdGlvbiA6IHQgLT4gY29sb3I6Q3NldC5jIC0+IGJvb2xcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBUYWJsZSBvZiB0IGFycmF5IFtAQHVuYm94ZWRdXG5cbiAgKCogVGhyZWFkLXNhZmV0eTpcbiAgICAgV2Ugc3RvcmUgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGF0IGluZGV4IDAuIEZvciBvdGhlciBlbGVtZW50c1xuICAgICBvZiB0aGUgdHJhbnNpdGlvbiB0YWJsZSwgd2hpY2ggYXJlIGxhemlseSBjb21wdXRlZCwgd2UgdXNlXG4gICAgIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcuICopXG5cbiAgbGV0IGdldF9pbmZvIChUYWJsZSBzdCkgOiBzdGF0ZV9pbmZvID0gT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IHN0IDApXG4gIFtAQGlubGluZSBhbHdheXNdXG4gIDs7XG5cbiAgbGV0IHNldF9pbmZvIChUYWJsZSBzdCkgKGluZm8gOiBzdGF0ZV9pbmZvKSA9IHN0LigwKSA8LSBPYmoubWFnaWMgaW5mb1xuXG4gIGxldCBmb2xsb3dfdHJhbnNpdGlvbiAoVGFibGUgc3QpIH5jb2xvciA9IEFycmF5LnVuc2FmZV9nZXQgc3QgKDEgKyBDc2V0LnRvX2ludCBjb2xvcilcbiAgW0BAaW5saW5lIGFsd2F5c11cbiAgOztcblxuICBsZXQgc2V0X3RyYW5zaXRpb24gKFRhYmxlIHN0KSB+Y29sb3Igc3QnID0gc3QuKDEgKyBDc2V0LnRvX2ludCBjb2xvcikgPC0gc3QnXG5cbiAgbGV0IGlzX3Vua25vd25fdHJhbnNpdGlvbiBzdCB+Y29sb3IgPVxuICAgIGxldCBzdCcgPSBmb2xsb3dfdHJhbnNpdGlvbiBzdCB+Y29sb3IgaW5cbiAgICBsZXQgaW5mbyA9IGdldF9pbmZvIHN0JyBpblxuICAgIElkeC5pc191bmtub3duIGluZm8uaWR4XG4gIDs7XG5cbiAgbGV0IGR1bW15IChpbmZvIDogc3RhdGVfaW5mbykgPSBUYWJsZSBbfCBPYmoubWFnaWMgaW5mbyB8XVxuICBsZXQgdW5rbm93bl9zdGF0ZSA9IGR1bW15IHsgaWR4ID0gSWR4LnVua25vd247IGZpbmFsID0gW107IGRlc2MgPSBBdXRvbWF0YS5TdGF0ZS5kdW1teSB9XG5cbiAgbGV0IG1ha2Ugfm5jb2wgc3RhdGUgPVxuICAgIGxldCBzdCA9IFRhYmxlIChBcnJheS5tYWtlIChuY29sICsgMSkgdW5rbm93bl9zdGF0ZSkgaW5cbiAgICBzZXRfaW5mbyBzdCBzdGF0ZTtcbiAgICBzdFxuICA7O1xuXG4gIGxldCBtYWtlX2JyZWFrIHN0YXRlID0gVGFibGUgW3wgT2JqLm1hZ2ljIHN0YXRlIHxdXG5lbmRcblxuKCogQXV0b21hdGEgKGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbikgKilcbnR5cGUgcmUgPVxuICB7IGluaXRpYWwgOiBBdXRvbWF0YS5leHByXG4gIDsgKCogVGhlIHdob2xlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zdGF0ZXMgOiAoQ2F0ZWdvcnkudCAqIFN0YXRlLnQpIGxpc3RcbiAgOyAoKiBJbml0aWFsIHN0YXRlcywgaW5kZXhlZCBieSBpbml0aWFsIGNhdGVnb3J5ICopXG4gICAgY29sb3JzIDogQ29sb3JfbWFwLlRhYmxlLnRcbiAgOyAoKiBDb2xvciB0YWJsZSAqKVxuICAgIGNvbG9yX3JlcHIgOiBDb2xvcl9tYXAuUmVwci50XG4gIDsgKCogVGFibGUgZnJvbSBjb2xvcnMgdG8gb25lIGNoYXJhY3RlciBvZiB0aGlzIGNvbG9yICopXG4gICAgbmNvbG9yIDogaW50XG4gIDsgKCogTnVtYmVyIG9mIGNvbG9ycy4gKilcbiAgICBsbmwgOiBDc2V0LmNcbiAgOyAoKiBDb2xvciBvZiB0aGUgbGFzdCBuZXdsaW5lLiBbQ3NldC5udWxsX2NoYXJdIGlmIHVubmVjZXNzYXJ5ICopXG4gICAgdGJsIDogQXV0b21hdGEuV29ya2luZ19hcmVhLnRcbiAgOyAoKiBUZW1wb3JhcnkgdGFibGUgdXNlZCB0byBjb21wdXRlIHRoZSBmaXJzdCBhdmFpbGFibGUgaW5kZXhcbiAgICAgICB3aGVuIGNvbXB1dGluZyBhIG5ldyBzdGF0ZSAqKVxuICAgIHN0YXRlcyA6IFN0YXRlLnQgQXV0b21hdGEuU3RhdGUuVGFibGUudFxuICA7ICgqIFN0YXRlcyBvZiB0aGUgZGV0ZXJtaW5pc3RpYyBhdXRvbWF0YSAqKVxuICAgIGdyb3VwX25hbWVzIDogKHN0cmluZyAqIGludCkgbGlzdFxuICA7ICgqIE5hbWVkIGdyb3VwcyBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uICopXG4gICAgZ3JvdXBfY291bnQgOiBpbnRcbiAgOyAoKiBOdW1iZXIgb2YgZ3JvdXBzIGluIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKilcbiAgICBtdXRleCA6IE11dGV4LnRcbiAgfVxuXG4oKiBUaHJlYWQtc2FmZXR5OlxuICAgV2UgdXNlIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcgdG8gYWNjZXNzIGZpZWxkIFtpbml0aWFsX3N0YXRlc10uIFRoZVxuICAgc3RhdGUgdGFibGUgW3N0YXRlc10gYW5kIHRoZSB3b3JraW5nIGFyZWEgW3RibF0gYXJlIG9ubHkgYWNjZXNzZWRcbiAgIHdpdGggdGhlIG11dGV4IFttdXRleF0gbG9ja2VkLlxuICAgVGhlIHdvcmtpbmcgYXJlYSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgdGhyZWFkcy4gVGhpcyBtaWdodCBiZVxuICAgaW5lZmZpY2llbnQgaWYgbWFueSB0aHJlYWRzIGFyZSB1cGRhdGluZyB0aGUgYXV0b21hdG9uLiBJdCBzZWVtc1xuICAgY29tcGxpY2F0ZWQgdG8gbWFuYWdlIGEgd29ya2luZyBhcmVhIHBlciBkb21haW4gYW5kIHBlciByZWd1bGFyXG4gICBleHByZXNzaW9uLiBTbywgaWYgdGhpcyBiZWNvbWVzIGFuIGlzc3VlLCBpdCBtaWdodCBqdXN0IGJlIHNpbXBsZXJcbiAgIHRvIGFsbG9jYXRlIGEgZnJlc2ggd29ya2luZyBhcmVhIHdoZW5ldmVyIG5lZWRlZC5cbiopXG5cbmxldCBwcF9yZSBjaCByZSA9IEF1dG9tYXRhLnBwIGNoIHJlLmluaXRpYWxcbmxldCBncm91cF9jb3VudCByZSA9IHJlLmdyb3VwX2NvdW50XG5sZXQgZ3JvdXBfbmFtZXMgcmUgPSByZS5ncm91cF9uYW1lc1xuXG5tb2R1bGUgUG9zaXRpb25zID0gc3RydWN0XG4gICgqIEluZm9ybWF0aW9uIHVzZWQgZHVyaW5nIG1hdGNoaW5nICopXG4gIHR5cGUgdCA9XG4gICAgeyBtdXRhYmxlIHBvc2l0aW9ucyA6IGludCBhcnJheVxuICAgIDsgKCogQXJyYXkgb2YgbWFyayBwb3NpdGlvbnNcbiAgICAgICAgIFRoZSBtYXJrIGFyZSBvZmYgYnkgb25lIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICopXG4gICAgICBtdXRhYmxlIGxlbmd0aCA6IGludFxuICAgIH1cblxuICBsZXQgZW1wdHkgPSB7IHBvc2l0aW9ucyA9IFt8fF07IGxlbmd0aCA9IDAgfVxuICBsZXQgbGVuZ3RoIHQgPSB0Lmxlbmd0aFxuICBsZXQgdW5zYWZlX3NldCB0IGlkeCBwb3MgPSBBcnJheS51bnNhZmVfc2V0IHQucG9zaXRpb25zIGlkeCBwb3NcblxuICBsZXQgcmVjIHJlc2l6ZSBpZHggdCA9XG4gICAgdC5sZW5ndGggPC0gMiAqIHQubGVuZ3RoO1xuICAgIGlmIGlkeCA+PSB0Lmxlbmd0aFxuICAgIHRoZW4gcmVzaXplIGlkeCB0XG4gICAgZWxzZSAoXG4gICAgICBsZXQgcG9zID0gdC5wb3NpdGlvbnMgaW5cbiAgICAgIHQucG9zaXRpb25zIDwtIEFycmF5Lm1ha2UgdC5sZW5ndGggMDtcbiAgICAgIEFycmF5LmJsaXQgcG9zIDAgdC5wb3NpdGlvbnMgMCAoQXJyYXkubGVuZ3RoIHBvcykpXG4gIDs7XG5cbiAgbGV0IHNldCB0IGlkeCBwb3MgPVxuICAgIGlmIGlkeCA+PSBsZW5ndGggdCB0aGVuIHJlc2l6ZSBpZHggdDtcbiAgICB1bnNhZmVfc2V0IHQgaWR4IHBvc1xuICA7O1xuXG4gIGxldCBhbGwgdCA9IHQucG9zaXRpb25zXG4gIGxldCBmaXJzdCB0ID0gdC5wb3NpdGlvbnMuKDApXG5cbiAgbGV0IG1ha2Ugfmdyb3VwcyByZSA9XG4gICAgaWYgZ3JvdXBzXG4gICAgdGhlbiAoXG4gICAgICAoKiBXZSBpbml0aWFsaXplIHRoaXMgdGFibGUgd2l0aCBhIHJlYXNvbmFibGUgc2l6ZS4gVGhlIHJlcXVpcmVkXG4gICAgICAgICBzaXplIG1heSBjaGFuZ2Ugd2hlbiB0aGUgYXV0b21hdG9uIGdldHMgdXBkYXRlZC4gU28gd2UgYXJlXG4gICAgICAgICBhbHdheXMgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBsYXJnZSBlbm91Z2ggYmVmb3JlIG1vZGlmeWluZyBpdC4gKilcbiAgICAgIGxldCBsZW5ndGggPSBBdXRvbWF0YS5Xb3JraW5nX2FyZWEuaW5kZXhfY291bnQgcmUudGJsICsgMSBpblxuICAgICAgeyBwb3NpdGlvbnMgPSBBcnJheS5tYWtlIGxlbmd0aCAwOyBsZW5ndGggfSlcbiAgICBlbHNlIGVtcHR5XG4gIDs7XG5lbmRcblxuKCoqKiopXG5cbmxldCBjYXRlZ29yeSByZSB+Y29sb3IgPVxuICBpZiBDc2V0LmVxdWFsX2MgY29sb3IgQ3NldC5udWxsX2NoYXJcbiAgdGhlbiBDYXRlZ29yeS5pbmV4aXN0YW50ICgqIFNwZWNpYWwgY2F0ZWdvcnkgZm9yIHRoZSBsYXN0IG5ld2xpbmUgKilcbiAgZWxzZSBpZiBDc2V0LmVxdWFsX2MgY29sb3IgcmUubG5sXG4gIHRoZW4gQ2F0ZWdvcnkuKGxhc3RuZXdsaW5lICsrIG5ld2xpbmUgKysgbm90X2xldHRlcilcbiAgZWxzZSBDYXRlZ29yeS5mcm9tX2NoYXIgKENvbG9yX21hcC5SZXByLnJlcHIgcmUuY29sb3JfcmVwciBjb2xvcilcbjs7XG5cbigqKioqKVxuXG5sZXQgZmluZF9zdGF0ZSByZSBkZXNjID1cbiAgdHJ5IEF1dG9tYXRhLlN0YXRlLlRhYmxlLmZpbmQgcmUuc3RhdGVzIGRlc2Mgd2l0aFxuICB8IE5vdF9mb3VuZCAtPlxuICAgIGxldCBzdCA9XG4gICAgICBsZXQgYnJlYWtfc3RhdGUgPVxuICAgICAgICBtYXRjaCBBdXRvbWF0YS5TdGF0ZS5zdGF0dXNfbm9fbXV0ZXggZGVzYyB3aXRoXG4gICAgICAgIHwgUnVubmluZyAtPiBmYWxzZVxuICAgICAgICB8IEZhaWxlZCB8IE1hdGNoIF8gLT4gdHJ1ZVxuICAgICAgaW5cbiAgICAgIGxldCBzdCA9XG4gICAgICAgIHsgaWR4ID1cbiAgICAgICAgICAgIChsZXQgaWR4ID0gQXV0b21hdGEuU3RhdGUuaWR4IGRlc2MgaW5cbiAgICAgICAgICAgICBpZiBicmVha19zdGF0ZSB0aGVuIElkeC5tYWtlX2JyZWFrIGlkeCBlbHNlIElkeC5vZl9pZHggaWR4KVxuICAgICAgICA7IGZpbmFsID0gW11cbiAgICAgICAgOyBkZXNjXG4gICAgICAgIH1cbiAgICAgIGluXG4gICAgICBpZiBicmVha19zdGF0ZSB0aGVuIFN0YXRlLm1ha2VfYnJlYWsgc3QgZWxzZSBTdGF0ZS5tYWtlIH5uY29sOnJlLm5jb2xvciBzdFxuICAgIGluXG4gICAgQXV0b21hdGEuU3RhdGUuVGFibGUuYWRkIHJlLnN0YXRlcyBkZXNjIHN0O1xuICAgIHN0XG47O1xuXG4oKioqKiBNYXRjaCB3aXRoIG1hcmtzICoqKiopXG5cbmxldCBkZWx0YSByZSBjYXQgfmNvbG9yIHN0ID0gQXV0b21hdGEuZGVsdGEgcmUudGJsIGNhdCBjb2xvciBzdC5kZXNjXG5cbmxldCB2YWxpZGF0ZSByZSAocyA6IHN0cmluZykgfnBvcyBzdCA9XG4gIGxldCBjb2xvciA9IENvbG9yX21hcC5UYWJsZS5nZXQgcmUuY29sb3JzIHMuW3Bvc10gaW5cbiAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgaWYgU3RhdGUuaXNfdW5rbm93bl90cmFuc2l0aW9uIHN0IH5jb2xvclxuICB0aGVuIChcbiAgICBsZXQgc3QnID1cbiAgICAgIGxldCBkZXNjJyA9XG4gICAgICAgIGxldCBjYXQgPSBjYXRlZ29yeSByZSB+Y29sb3IgaW5cbiAgICAgICAgZGVsdGEgcmUgY2F0IH5jb2xvciAoU3RhdGUuZ2V0X2luZm8gc3QpXG4gICAgICBpblxuICAgICAgZmluZF9zdGF0ZSByZSBkZXNjJ1xuICAgIGluXG4gICAgU3RhdGUuc2V0X3RyYW5zaXRpb24gc3QgfmNvbG9yIHN0Jyk7XG4gIE11dGV4LnVubG9jayByZS5tdXRleFxuOztcblxubGV0IG5leHQgY29sb3JzIHN0IHMgcG9zID1cbiAgU3RhdGUuZm9sbG93X3RyYW5zaXRpb24gc3QgfmNvbG9yOihDb2xvcl9tYXAuVGFibGUuZ2V0IGNvbG9ycyAoU3RyaW5nLnVuc2FmZV9nZXQgcyBwb3MpKVxuOztcblxubGV0IHJlYyBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0ID1cbiAgaWYgcG9zIDwgbGFzdFxuICB0aGVuIChcbiAgICBsZXQgc3QnID0gbmV4dCBjb2xvcnMgc3QgcyBwb3MgaW5cbiAgICBsZXQgaWR4ID0gKFN0YXRlLmdldF9pbmZvIHN0JykuaWR4IGluXG4gICAgaWYgSWR4LmlzX2lkeCBpZHhcbiAgICB0aGVuXG4gICAgICBpZiBJZHguaWR4IGlkeCA8IFBvc2l0aW9ucy5sZW5ndGggcG9zaXRpb25zXG4gICAgICB0aGVuIChcbiAgICAgICAgUG9zaXRpb25zLnVuc2FmZV9zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgcG9zO1xuICAgICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCcpXG4gICAgICBlbHNlIChcbiAgICAgICAgKCogUmVzaXplIHBvc2l0aW9uIGFycmF5ICopXG4gICAgICAgIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgcG9zO1xuICAgICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCcpXG4gICAgZWxzZSBpZiBJZHguaXNfYnJlYWsgaWR4XG4gICAgdGhlbiAoXG4gICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmJyZWFrX2lkeCBpZHgpIHBvcztcbiAgICAgIHN0JylcbiAgICBlbHNlIChcbiAgICAgICgqIFVua25vd24gKilcbiAgICAgIHZhbGlkYXRlIHJlIHMgfnBvcyBzdDA7XG4gICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0MCkpXG4gIGVsc2Ugc3Rcbjs7XG5cbmxldCByZWMgbG9vcF9ub19tYXJrIHJlIH5jb2xvcnMgcyB+cG9zIH5sYXN0IHN0MCBzdCA9XG4gIGlmIHBvcyA8IGxhc3RcbiAgdGhlbiAoXG4gICAgbGV0IHN0JyA9IG5leHQgY29sb3JzIHN0IHMgcG9zIGluXG4gICAgbGV0IGlkeCA9IChTdGF0ZS5nZXRfaW5mbyBzdCcpLmlkeCBpblxuICAgIGlmIElkeC5pc19pZHggaWR4XG4gICAgdGhlbiBsb29wX25vX21hcmsgcmUgfmNvbG9ycyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCdcbiAgICBlbHNlIGlmIElkeC5pc19icmVhayBpZHhcbiAgICB0aGVuIHN0J1xuICAgIGVsc2UgKFxuICAgICAgKCogVW5rbm93biAqKVxuICAgICAgdmFsaWRhdGUgcmUgcyB+cG9zIHN0MDtcbiAgICAgIGxvb3Bfbm9fbWFyayByZSB+Y29sb3JzIHMgfnBvcyB+bGFzdCBzdDAgc3QwKSlcbiAgZWxzZSBzdFxuOztcblxubGV0IGZpbmFsIHJlIHN0IGNhdCA9XG4gIHRyeSBMaXN0LmFzc3EgY2F0IHN0LmZpbmFsIHdpdGhcbiAgfCBOb3RfZm91bmQgLT5cbiAgICBNdXRleC5sb2NrIHJlLm11dGV4O1xuICAgIGxldCByZXMgPVxuICAgICAgdHJ5IExpc3QuYXNzcSBjYXQgc3QuZmluYWwgd2l0aFxuICAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IHN0JyA9IGRlbHRhIHJlIGNhdCB+Y29sb3I6Q3NldC5udWxsX2NoYXIgc3QgaW5cbiAgICAgICAgbGV0IHJlcyA9IEF1dG9tYXRhLlN0YXRlLmlkeCBzdCcsIEF1dG9tYXRhLlN0YXRlLnN0YXR1c19ub19tdXRleCBzdCcgaW5cbiAgICAgICAgc3QuZmluYWwgPC0gKGNhdCwgcmVzKSA6OiBzdC5maW5hbDtcbiAgICAgICAgcmVzXG4gICAgaW5cbiAgICBNdXRleC51bmxvY2sgcmUubXV0ZXg7XG4gICAgcmVzXG47O1xuXG5sZXQgZmluZF9pbml0aWFsX3N0YXRlIHJlIGNhdCA9XG4gIHRyeSBMaXN0LmFzc3EgY2F0IHJlLmluaXRpYWxfc3RhdGVzIHdpdGhcbiAgfCBOb3RfZm91bmQgLT5cbiAgICBNdXRleC5sb2NrIHJlLm11dGV4O1xuICAgIGxldCByZXMgPVxuICAgICAgdHJ5IExpc3QuYXNzcSBjYXQgcmUuaW5pdGlhbF9zdGF0ZXMgd2l0aFxuICAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IHN0ID0gZmluZF9zdGF0ZSByZSAoQXV0b21hdGEuU3RhdGUuY3JlYXRlIGNhdCByZS5pbml0aWFsKSBpblxuICAgICAgICByZS5pbml0aWFsX3N0YXRlcyA8LSAoY2F0LCBzdCkgOjogcmUuaW5pdGlhbF9zdGF0ZXM7XG4gICAgICAgIHN0XG4gICAgaW5cbiAgICBNdXRleC51bmxvY2sgcmUubXV0ZXg7XG4gICAgcmVzXG47O1xuXG5sZXQgZ2V0X2NvbG9yIHJlIChzIDogc3RyaW5nKSBwb3MgPVxuICBpZiBwb3MgPCAwXG4gIHRoZW4gQ3NldC5udWxsX2NoYXJcbiAgZWxzZSAoXG4gICAgbGV0IHNsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBpZiBwb3MgPj0gc2xlblxuICAgIHRoZW4gQ3NldC5udWxsX2NoYXJcbiAgICBlbHNlIGlmIHBvcyA9IHNsZW4gLSAxXG4gICAgICAgICAgICAmJiAobm90IChDc2V0LmVxdWFsX2MgcmUubG5sIENzZXQubnVsbF9jaGFyKSlcbiAgICAgICAgICAgICYmIENoYXIuZXF1YWwgKFN0cmluZy51bnNhZmVfZ2V0IHMgcG9zKSAnXFxuJ1xuICAgIHRoZW4gKCogU3BlY2lhbCBjYXNlIGZvciB0aGUgbGFzdCBuZXdsaW5lICopXG4gICAgICByZS5sbmxcbiAgICBlbHNlIENvbG9yX21hcC5UYWJsZS5nZXQgcmUuY29sb3JzIChTdHJpbmcudW5zYWZlX2dldCBzIHBvcykpXG47O1xuXG5sZXQgcmVjIGhhbmRsZV9sYXN0X25ld2xpbmUgcmUgcG9zaXRpb25zIH5wb3Mgc3Qgfmdyb3VwcyA9XG4gIGxldCBzdCcgPSBTdGF0ZS5mb2xsb3dfdHJhbnNpdGlvbiBzdCB+Y29sb3I6cmUubG5sIGluXG4gIGxldCBpbmZvID0gU3RhdGUuZ2V0X2luZm8gc3QnIGluXG4gIGlmIElkeC5pc19pZHggaW5mby5pZHhcbiAgdGhlbiAoXG4gICAgaWYgZ3JvdXBzIHRoZW4gUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKElkeC5pZHggaW5mby5pZHgpIHBvcztcbiAgICBzdCcpXG4gIGVsc2UgaWYgSWR4LmlzX2JyZWFrIGluZm8uaWR4XG4gIHRoZW4gKFxuICAgIGlmIGdyb3VwcyB0aGVuIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguYnJlYWtfaWR4IGluZm8uaWR4KSBwb3M7XG4gICAgc3QnKVxuICBlbHNlIChcbiAgICAoKiBVbmtub3duICopXG4gICAgbGV0IGNvbG9yID0gcmUubG5sIGluXG4gICAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgICBpZiBTdGF0ZS5pc191bmtub3duX3RyYW5zaXRpb24gc3QgfmNvbG9yXG4gICAgdGhlbiAoXG4gICAgICBsZXQgc3QnID1cbiAgICAgICAgbGV0IGRlc2MgPVxuICAgICAgICAgIGxldCBjYXQgPSBjYXRlZ29yeSByZSB+Y29sb3IgaW5cbiAgICAgICAgICBsZXQgcmVhbF9jID0gQ29sb3JfbWFwLlRhYmxlLmdldCByZS5jb2xvcnMgJ1xcbicgaW5cbiAgICAgICAgICBkZWx0YSByZSBjYXQgfmNvbG9yOnJlYWxfYyAoU3RhdGUuZ2V0X2luZm8gc3QpXG4gICAgICAgIGluXG4gICAgICAgIGZpbmRfc3RhdGUgcmUgZGVzY1xuICAgICAgaW5cbiAgICAgIFN0YXRlLnNldF90cmFuc2l0aW9uIHN0IH5jb2xvciBzdCcpO1xuICAgIE11dGV4LnVubG9jayByZS5tdXRleDtcbiAgICBoYW5kbGVfbGFzdF9uZXdsaW5lIHJlIHBvc2l0aW9ucyB+cG9zIHN0IH5ncm91cHMpXG47O1xuXG5sZXQgcmVjIHNjYW5fc3RyIHJlIHBvc2l0aW9ucyAocyA6IHN0cmluZykgaW5pdGlhbF9zdGF0ZSB+bGFzdCB+cG9zIH5ncm91cHMgPVxuICBpZiBsYXN0ID0gU3RyaW5nLmxlbmd0aCBzXG4gICAgICYmIChub3QgKENzZXQuZXF1YWxfYyByZS5sbmwgQ3NldC5udWxsX2NoYXIpKVxuICAgICAmJiBsYXN0ID4gcG9zXG4gICAgICYmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgcyAobGFzdCAtIDEpKSAnXFxuJ1xuICB0aGVuIChcbiAgICBsZXQgbGFzdCA9IGxhc3QgLSAxIGluXG4gICAgbGV0IHN0ID0gc2Nhbl9zdHIgcmUgcG9zaXRpb25zIH5wb3MgcyBpbml0aWFsX3N0YXRlIH5sYXN0IH5ncm91cHMgaW5cbiAgICBpZiBJZHguaXNfYnJlYWsgKFN0YXRlLmdldF9pbmZvIHN0KS5pZHhcbiAgICB0aGVuIHN0XG4gICAgZWxzZSBoYW5kbGVfbGFzdF9uZXdsaW5lIHJlIHBvc2l0aW9ucyB+cG9zOmxhc3Qgc3Qgfmdyb3VwcylcbiAgZWxzZSBpZiBncm91cHNcbiAgdGhlbiBsb29wIHJlIH5jb2xvcnM6cmUuY29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IGluaXRpYWxfc3RhdGUgaW5pdGlhbF9zdGF0ZVxuICBlbHNlIGxvb3Bfbm9fbWFyayByZSB+Y29sb3JzOnJlLmNvbG9ycyBzIH5wb3Mgfmxhc3QgaW5pdGlhbF9zdGF0ZSBpbml0aWFsX3N0YXRlXG47O1xuXG4oKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBmaW5hbCBib3VuZGFyeSBjaGVjayBvbiB0aGUgaW5wdXQuXG4gICBUaGlzIGlzIHVzZWZ1bCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgZmFpbGVkIGJlY2F1c2VcbiAgIG9mIGluc3VmZmljaWVudCBpbnB1dCwgb3IgdG8gdmVyaWZ5IHRoYXQgdGhlIG91dHB1dCBhY3R1YWxseVxuICAgbWF0Y2hlcyBmb3IgcmVnZXggdGhhdCBoYXZlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgd2l0aCByZXNwZWN0XG4gICB0byB0aGUgaW5wdXQgc3RyaW5nLlxuKilcbmxldCBmaW5hbF9ib3VuZGFyeV9jaGVjayByZSBwb3NpdGlvbnMgfmxhc3QgfnNsZW4gcyBzdGF0ZV9pbmZvIH5ncm91cHMgPVxuICBsZXQgaWR4LCByZXMgPVxuICAgIGxldCBmaW5hbF9jYXQgPVxuICAgICAgQ2F0ZWdvcnkuKFxuICAgICAgICBzZWFyY2hfYm91bmRhcnlcbiAgICAgICAgKysgaWYgbGFzdCA9IHNsZW4gdGhlbiBpbmV4aXN0YW50IGVsc2UgY2F0ZWdvcnkgcmUgfmNvbG9yOihnZXRfY29sb3IgcmUgcyBsYXN0KSlcbiAgICBpblxuICAgIGZpbmFsIHJlIHN0YXRlX2luZm8gZmluYWxfY2F0XG4gIGluXG4gIChtYXRjaCBncm91cHMsIHJlcyB3aXRoXG4gICB8IHRydWUsIE1hdGNoIF8gLT4gUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKEF1dG9tYXRhLklkeC50b19pbnQgaWR4KSBsYXN0XG4gICB8IF8gLT4gKCkpO1xuICByZXNcbjs7XG5cbmxldCBtYWtlX21hdGNoX3N0ciByZSBwb3NpdGlvbnMgfmxlbiB+Z3JvdXBzIH5wYXJ0aWFsIHMgfnBvcyA9XG4gIGxldCBzbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsYXN0ID0gaWYgbGVuID0gLTEgdGhlbiBzbGVuIGVsc2UgcG9zICsgbGVuIGluXG4gIGxldCBzdCA9XG4gICAgbGV0IGluaXRpYWxfc3RhdGUgPVxuICAgICAgbGV0IGluaXRpYWxfY2F0ID1cbiAgICAgICAgQ2F0ZWdvcnkuKFxuICAgICAgICAgIHNlYXJjaF9ib3VuZGFyeVxuICAgICAgICAgICsrIGlmIHBvcyA9IDAgdGhlbiBpbmV4aXN0YW50IGVsc2UgY2F0ZWdvcnkgcmUgfmNvbG9yOihnZXRfY29sb3IgcmUgcyAocG9zIC0gMSkpKVxuICAgICAgaW5cbiAgICAgIGZpbmRfaW5pdGlhbF9zdGF0ZSByZSBpbml0aWFsX2NhdFxuICAgIGluXG4gICAgc2Nhbl9zdHIgcmUgcG9zaXRpb25zIHMgaW5pdGlhbF9zdGF0ZSB+cG9zIH5sYXN0IH5ncm91cHNcbiAgaW5cbiAgbGV0IHN0YXRlX2luZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdCBpblxuICBpZiBJZHguaXNfYnJlYWsgc3RhdGVfaW5mby5pZHggfHwgKHBhcnRpYWwgJiYgbm90IGdyb3VwcylcbiAgdGhlbiBBdXRvbWF0YS5TdGF0ZS5zdGF0dXMgcmUubXV0ZXggc3RhdGVfaW5mby5kZXNjXG4gIGVsc2UgaWYgcGFydGlhbCAmJiBncm91cHNcbiAgdGhlbiAoXG4gICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHJlLm11dGV4IHN0YXRlX2luZm8uZGVzYyB3aXRoXG4gICAgfCAoTWF0Y2ggXyB8IEZhaWxlZCkgYXMgc3RhdHVzIC0+IHN0YXR1c1xuICAgIHwgUnVubmluZyAtPlxuICAgICAgKCogVGhpcyBjb3VsZCBiZSBiZWNhdXNlIGl0J3Mgc3RpbGwgbm90IGZ1bGx5IG1hdGNoZWQsIG9yIGl0XG4gICAgICAgICBjb3VsZCBiZSB0aGF0IGJlY2F1c2Ugd2UgbmVlZCB0byBydW4gc3BlY2lhbCBlbmQgb2YgaW5wdXRcbiAgICAgICAgIGNoZWNrcy4gKilcbiAgICAgIChtYXRjaCBmaW5hbF9ib3VuZGFyeV9jaGVjayByZSBwb3NpdGlvbnMgfmxhc3QgfnNsZW4gcyBzdGF0ZV9pbmZvIH5ncm91cHMgd2l0aFxuICAgICAgIHwgTWF0Y2ggXyBhcyBzdGF0dXMgLT4gc3RhdHVzXG4gICAgICAgfCBGYWlsZWQgfCBSdW5uaW5nIC0+XG4gICAgICAgICAoKiBBIGZhaWx1cmUgaGVyZSBqdXN0IG1lYW5zIHRoYXQgd2UgbmVlZCBtb3JlIGRhdGEsIGkuZS5cbiAgICAgICAgICAgIGl0J3MgYSBwYXJ0aWFsIG1hdGNoLiAqKVxuICAgICAgICAgUnVubmluZykpXG4gIGVsc2UgZmluYWxfYm91bmRhcnlfY2hlY2sgcmUgcG9zaXRpb25zIH5sYXN0IH5zbGVuIHMgc3RhdGVfaW5mbyB+Z3JvdXBzXG47O1xuXG5tb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIHQgPVxuICAgIHsgc3RhdGUgOiBTdGF0ZS50XG4gICAgOyByZSA6IHJlXG4gICAgfVxuXG4gIHR5cGUgJ2EgZmVlZCA9XG4gICAgfCBPayBvZiAnYVxuICAgIHwgTm9fbWF0Y2hcblxuICBsZXQgY3JlYXRlIHJlID1cbiAgICBsZXQgY2F0ZWdvcnkgPSBDYXRlZ29yeS4oc2VhcmNoX2JvdW5kYXJ5ICsrIGluZXhpc3RhbnQpIGluXG4gICAgbGV0IHN0YXRlID0gZmluZF9pbml0aWFsX3N0YXRlIHJlIGNhdGVnb3J5IGluXG4gICAgeyBzdGF0ZTsgcmUgfVxuICA7O1xuXG4gIGxldCBmZWVkIHQgcyB+cG9zIH5sZW4gPVxuICAgICgqIFRPRE8gYm91bmQgY2hlY2tzPyAqKVxuICAgIGxldCBsYXN0ID0gcG9zICsgbGVuIGluXG4gICAgbGV0IHN0YXRlID0gbG9vcF9ub19tYXJrIHQucmUgfmNvbG9yczp0LnJlLmNvbG9ycyBzIH5sYXN0IH5wb3MgdC5zdGF0ZSB0LnN0YXRlIGluXG4gICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgIGlmIElkeC5pc19icmVhayBpbmZvLmlkeFxuICAgICAgICYmXG4gICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHQucmUubXV0ZXggaW5mby5kZXNjIHdpdGhcbiAgICAgICB8IEZhaWxlZCAtPiB0cnVlXG4gICAgICAgfCBNYXRjaCBfIHwgUnVubmluZyAtPiBmYWxzZVxuICAgIHRoZW4gTm9fbWF0Y2hcbiAgICBlbHNlIE9rIHsgdCB3aXRoIHN0YXRlIH1cbiAgOztcblxuICBsZXQgZmluYWxpemUgdCBzIH5wb3MgfmxlbiA9XG4gICAgKCogVE9ETyBib3VuZCBjaGVja3M/ICopXG4gICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICBsZXQgc3RhdGUgPSBzY2FuX3N0ciB0LnJlIFBvc2l0aW9ucy5lbXB0eSBzIHQuc3RhdGUgfmxhc3QgfnBvcyB+Z3JvdXBzOmZhbHNlIGluXG4gICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgIG1hdGNoXG4gICAgICBsZXQgX2lkeCwgcmVzID1cbiAgICAgICAgbGV0IGZpbmFsX2NhdCA9IENhdGVnb3J5LihzZWFyY2hfYm91bmRhcnkgKysgaW5leGlzdGFudCkgaW5cbiAgICAgICAgZmluYWwgdC5yZSBpbmZvIGZpbmFsX2NhdFxuICAgICAgaW5cbiAgICAgIHJlc1xuICAgIHdpdGhcbiAgICB8IFJ1bm5pbmcgfCBGYWlsZWQgLT4gZmFsc2VcbiAgICB8IE1hdGNoIF8gLT4gdHJ1ZVxuICA7O1xuXG4gIG1vZHVsZSBHcm91cCA9IHN0cnVjdFxuICAgIHR5cGUgbm9ucmVjIHQgPVxuICAgICAgeyB0IDogdFxuICAgICAgOyBwb3NpdGlvbnMgOiBQb3NpdGlvbnMudFxuICAgICAgOyBzbGljZXMgOiBTbGljZS5MLnRcbiAgICAgIDsgYWJzX3BvcyA6IGludFxuICAgICAgOyBmaXJzdF9tYXRjaF9wb3MgOiBpbnRcbiAgICAgIH1cblxuICAgIGxldCBub19tYXRjaF9zdGFydHNfYmVmb3JlIHQgPSB0LmZpcnN0X21hdGNoX3Bvc1xuXG4gICAgbGV0IGNyZWF0ZSB0ID1cbiAgICAgIHsgdFxuICAgICAgOyBwb3NpdGlvbnMgPSBQb3NpdGlvbnMubWFrZSB+Z3JvdXBzOnRydWUgdC5yZVxuICAgICAgOyBzbGljZXMgPSBbXVxuICAgICAgOyBhYnNfcG9zID0gMFxuICAgICAgOyBmaXJzdF9tYXRjaF9wb3MgPSAwXG4gICAgICB9XG4gICAgOztcblxuICAgIG1vZHVsZSBNYXRjaCA9IHN0cnVjdFxuICAgICAgdHlwZSB0ID1cbiAgICAgICAgeyBwbWFya3MgOiBQbWFyay5TZXQudFxuICAgICAgICA7IHNsaWNlcyA6IFNsaWNlLkwudFxuICAgICAgICA7IG1hcmtzIDogTWFya19pbmZvcy50XG4gICAgICAgIDsgcG9zaXRpb25zIDogaW50IGFycmF5XG4gICAgICAgIDsgc3RhcnRfcG9zIDogaW50XG4gICAgICAgIH1cblxuICAgICAgbGV0IHRlc3RfbWFyayB0IG1hcmsgPSBQbWFyay5TZXQubWVtIG1hcmsgdC5wbWFya3NcblxuICAgICAgbGV0IGdldCB0IGkgPVxuICAgICAgICBNYXJrX2luZm9zLm9mZnNldCB0Lm1hcmtzIGlcbiAgICAgICAgfD4gT3B0aW9uLm1hcCAoZnVuIChzdGFydCwgc3RvcCkgLT5cbiAgICAgICAgICBsZXQgc3RhcnQgPSB0LnBvc2l0aW9ucy4oc3RhcnQpIC0gdC5zdGFydF9wb3MgaW5cbiAgICAgICAgICBsZXQgc3RvcCA9IHQucG9zaXRpb25zLihzdG9wKSAtIHQuc3RhcnRfcG9zIGluXG4gICAgICAgICAgU2xpY2UuTC5nZXRfc3Vic3RyaW5nIHQuc2xpY2VzIH5zdGFydCB+c3RvcClcbiAgICAgIDs7XG5cbiAgICAgIGxldCBtYWtlIH5zdGFydF9wb3MgfnBtYXJrcyB+c2xpY2VzIH5tYXJrcyB+cG9zaXRpb25zID1cbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFBvc2l0aW9ucy5hbGwgcG9zaXRpb25zIGluXG4gICAgICAgIHsgcG1hcmtzOyBzbGljZXM7IHBvc2l0aW9uczsgbWFya3M7IHN0YXJ0X3BvcyB9XG4gICAgICA7O1xuICAgIGVuZFxuXG4gICAgbGV0IHJlYyBsb29wIHJlIH5hYnNfcG9zIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0ID1cbiAgICAgIGlmIHBvcyA8IGxhc3RcbiAgICAgIHRoZW4gKFxuICAgICAgICBsZXQgc3QnID0gbmV4dCBjb2xvcnMgc3QgcyBwb3MgaW5cbiAgICAgICAgbGV0IGlkeCA9IChTdGF0ZS5nZXRfaW5mbyBzdCcpLmlkeCBpblxuICAgICAgICBpZiBJZHguaXNfaWR4IGlkeFxuICAgICAgICB0aGVuXG4gICAgICAgICAgaWYgSWR4LmlkeCBpZHggPCBQb3NpdGlvbnMubGVuZ3RoIHBvc2l0aW9uc1xuICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgUG9zaXRpb25zLnVuc2FmZV9zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgKGFic19wb3MgKyBwb3MpO1xuICAgICAgICAgICAgbG9vcCByZSB+YWJzX3BvcyB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zOihwb3MgKyAxKSB+bGFzdCBzdCcgc3QnKVxuICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgKCogUmVzaXplIHBvc2l0aW9uIGFycmF5ICopXG4gICAgICAgICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmlkeCBpZHgpIChhYnNfcG9zICsgcG9zKTtcbiAgICAgICAgICAgIGxvb3AgcmUgfmFic19wb3MgfmNvbG9ycyB+cG9zaXRpb25zIHMgfnBvczoocG9zICsgMSkgfmxhc3Qgc3QnIHN0JylcbiAgICAgICAgZWxzZSBpZiBJZHguaXNfYnJlYWsgaWR4XG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguYnJlYWtfaWR4IGlkeCkgKGFic19wb3MgKyBwb3MpO1xuICAgICAgICAgIHN0JylcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgKCogVW5rbm93biAqKVxuICAgICAgICAgIHZhbGlkYXRlIHJlIHMgfnBvcyBzdDA7XG4gICAgICAgICAgbG9vcCByZSB+YWJzX3BvcyB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IHN0MCBzdDApKVxuICAgICAgZWxzZSBzdFxuICAgIDs7XG5cbiAgICBsZXQgZmVlZCAoeyB0OyBwb3NpdGlvbnM7IHNsaWNlczsgYWJzX3BvczsgZmlyc3RfbWF0Y2hfcG9zID0gXyB9IGFzIHR0KSBzIH5wb3MgfmxlbiA9XG4gICAgICBsZXQgc3RhdGUgPVxuICAgICAgICAoKiBUT0RPIGJvdW5kIGNoZWNrcz8gKilcbiAgICAgICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICAgICAgbG9vcCB0LnJlIH5hYnNfcG9zIH5jb2xvcnM6dC5yZS5jb2xvcnMgcyB+cG9zaXRpb25zIH5sYXN0IH5wb3MgdC5zdGF0ZSB0LnN0YXRlXG4gICAgICBpblxuICAgICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgICAgaWYgSWR4LmlzX2JyZWFrIGluZm8uaWR4XG4gICAgICAgICAmJlxuICAgICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHQucmUubXV0ZXggaW5mby5kZXNjIHdpdGhcbiAgICAgICAgIHwgRmFpbGVkIC0+IHRydWVcbiAgICAgICAgIHwgTWF0Y2ggXyB8IFJ1bm5pbmcgLT4gZmFsc2VcbiAgICAgIHRoZW4gTm9fbWF0Y2hcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgdCA9IHsgdCB3aXRoIHN0YXRlIH0gaW5cbiAgICAgICAgbGV0IHNsaWNlcyA9IHsgU2xpY2UuczsgcG9zOyBsZW4gfSA6OiBzbGljZXMgaW5cbiAgICAgICAgbGV0IGZpcnN0X21hdGNoX3BvcyA9IFBvc2l0aW9ucy5maXJzdCBwb3NpdGlvbnMgaW5cbiAgICAgICAgbGV0IHNsaWNlcyA9IFNsaWNlLkwuZHJvcF9yZXYgc2xpY2VzIChmaXJzdF9tYXRjaF9wb3MgLSB0dC5maXJzdF9tYXRjaF9wb3MpIGluXG4gICAgICAgIGxldCBhYnNfcG9zID0gYWJzX3BvcyArIGxlbiBpblxuICAgICAgICBPayB7IHR0IHdpdGggdDsgc2xpY2VzOyBhYnNfcG9zOyBmaXJzdF9tYXRjaF9wb3MgfSlcbiAgICA7O1xuXG4gICAgbGV0IGZpbmFsaXplXG4gICAgICAoeyB0OyBwb3NpdGlvbnM7IHNsaWNlczsgYWJzX3BvczsgZmlyc3RfbWF0Y2hfcG9zID0gXyB9IGFzIHR0KVxuICAgICAgc1xuICAgICAgfnBvc1xuICAgICAgfmxlblxuICAgICAgOiBNYXRjaC50IGZlZWRcbiAgICAgID1cbiAgICAgICgqIFRPRE8gYm91bmQgY2hlY2tzPyAqKVxuICAgICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICAgIGxldCBpbmZvID1cbiAgICAgICAgbGV0IHN0YXRlID1cbiAgICAgICAgICBsb29wIHQucmUgfmFic19wb3MgfmNvbG9yczp0LnJlLmNvbG9ycyBzIH5wb3NpdGlvbnMgfmxhc3QgfnBvcyB0LnN0YXRlIHQuc3RhdGVcbiAgICAgICAgaW5cbiAgICAgICAgU3RhdGUuZ2V0X2luZm8gc3RhdGVcbiAgICAgIGluXG4gICAgICBtYXRjaFxuICAgICAgICBtYXRjaCBBdXRvbWF0YS5TdGF0ZS5zdGF0dXMgdC5yZS5tdXRleCBpbmZvLmRlc2Mgd2l0aFxuICAgICAgICB8IChNYXRjaCBfIHwgRmFpbGVkKSBhcyBzIC0+IHNcbiAgICAgICAgfCBSdW5uaW5nIC0+XG4gICAgICAgICAgbGV0IGlkeCwgcmVzID1cbiAgICAgICAgICAgIGxldCBmaW5hbF9jYXQgPSBDYXRlZ29yeS4oc2VhcmNoX2JvdW5kYXJ5ICsrIGluZXhpc3RhbnQpIGluXG4gICAgICAgICAgICBmaW5hbCB0LnJlIGluZm8gZmluYWxfY2F0XG4gICAgICAgICAgaW5cbiAgICAgICAgICAobWF0Y2ggcmVzIHdpdGhcbiAgICAgICAgICAgfCBSdW5uaW5nIHwgRmFpbGVkIC0+ICgpXG4gICAgICAgICAgIHwgTWF0Y2ggXyAtPiBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoQXV0b21hdGEuSWR4LnRvX2ludCBpZHgpIChhYnNfcG9zICsgbGFzdCkpO1xuICAgICAgICAgIHJlc1xuICAgICAgd2l0aFxuICAgICAgfCBSdW5uaW5nIHwgRmFpbGVkIC0+IE5vX21hdGNoXG4gICAgICB8IE1hdGNoIChtYXJrcywgcG1hcmtzKSAtPlxuICAgICAgICBsZXQgZmlyc3RfbWF0Y2hfcG9zaXRpb24gPSBQb3NpdGlvbnMuZmlyc3QgcG9zaXRpb25zIGluXG4gICAgICAgIGxldCBzbGljZXMgPVxuICAgICAgICAgIGxldCBzbGljZXMgPVxuICAgICAgICAgICAgbGV0IHNsaWNlcyA9IHsgU2xpY2UuczsgcG9zOyBsZW4gfSA6OiBzbGljZXMgaW5cbiAgICAgICAgICAgIFNsaWNlLkwuZHJvcF9yZXYgc2xpY2VzIChmaXJzdF9tYXRjaF9wb3NpdGlvbiAtIHR0LmZpcnN0X21hdGNoX3BvcylcbiAgICAgICAgICBpblxuICAgICAgICAgIExpc3QucmV2IHNsaWNlc1xuICAgICAgICBpblxuICAgICAgICBPayAoTWF0Y2gubWFrZSB+c3RhcnRfcG9zOmZpcnN0X21hdGNoX3Bvc2l0aW9uIH5wbWFya3Mgfm1hcmtzIH5zbGljZXMgfnBvc2l0aW9ucylcbiAgICA7O1xuICBlbmRcbmVuZFxuXG5sZXQgbWF0Y2hfc3RyX25vX2JvdW5kcyB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuID1cbiAgbGV0IHBvc2l0aW9ucyA9IFBvc2l0aW9ucy5tYWtlIH5ncm91cHMgcmUgaW5cbiAgbWF0Y2ggbWFrZV9tYXRjaF9zdHIgcmUgcG9zaXRpb25zIH5sZW4gfmdyb3VwcyB+cGFydGlhbCBzIH5wb3Mgd2l0aFxuICB8IE1hdGNoIChtYXJrcywgcG1hcmtzKSAtPlxuICAgIE1hdGNoXG4gICAgICAoR3JvdXAuY3JlYXRlIHMgbWFya3MgcG1hcmtzIH5ncG9zOihQb3NpdGlvbnMuYWxsIHBvc2l0aW9ucykgfmdjb3VudDpyZS5ncm91cF9jb3VudClcbiAgfCBGYWlsZWQgLT4gRmFpbGVkXG4gIHwgUnVubmluZyAtPlxuICAgIGxldCBub19tYXRjaF9zdGFydHNfYmVmb3JlID0gaWYgZ3JvdXBzIHRoZW4gUG9zaXRpb25zLmZpcnN0IHBvc2l0aW9ucyBlbHNlIDAgaW5cbiAgICBSdW5uaW5nIHsgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSB9XG47O1xuXG5sZXQgbWF0Y2hfc3RyX3AgcmUgcyB+cG9zIH5sZW4gPVxuICBpZiBwb3MgPCAwIHx8IGxlbiA8IC0xIHx8IHBvcyArIGxlbiA+IFN0cmluZy5sZW5ndGggc1xuICB0aGVuIGludmFsaWRfYXJnIFwiUmUuZXhlYzogb3V0IG9mIGJvdW5kc1wiO1xuICBtYXRjaCBtYWtlX21hdGNoX3N0ciByZSBQb3NpdGlvbnMuZW1wdHkgfmxlbiB+Z3JvdXBzOmZhbHNlIH5wYXJ0aWFsOmZhbHNlIHMgfnBvcyB3aXRoXG4gIHwgTWF0Y2ggXyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuOztcblxubGV0IG1hdGNoX3N0ciB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuID1cbiAgaWYgcG9zIDwgMCB8fCBsZW4gPCAtMSB8fCBwb3MgKyBsZW4gPiBTdHJpbmcubGVuZ3RoIHNcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmV4ZWM6IG91dCBvZiBib3VuZHNcIjtcbiAgbWF0Y2hfc3RyX25vX2JvdW5kcyB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuXG47O1xuXG5sZXQgbWtfcmUgfmluaXRpYWwgfmNvbG9ycyB+Y29sb3JfcmVwciB+bmNvbG9yIH5sbmwgfmdyb3VwX25hbWVzIH5ncm91cF9jb3VudCA9XG4gIHsgaW5pdGlhbFxuICA7IGluaXRpYWxfc3RhdGVzID0gW11cbiAgOyBjb2xvcnNcbiAgOyBjb2xvcl9yZXByXG4gIDsgbmNvbG9yXG4gIDsgbG5sXG4gIDsgdGJsID0gQXV0b21hdGEuV29ya2luZ19hcmVhLmNyZWF0ZSAoKVxuICA7IHN0YXRlcyA9IEF1dG9tYXRhLlN0YXRlLlRhYmxlLmNyZWF0ZSA5N1xuICA7IGdyb3VwX25hbWVzXG4gIDsgZ3JvdXBfY291bnRcbiAgOyBtdXRleCA9IE11dGV4LmNyZWF0ZSAoKVxuICB9XG47O1xuXG4oKioqKiBDb21waWxhdGlvbiAqKioqKVxuXG5tb2R1bGUgQSA9IEF1dG9tYXRhXG5cbmxldCBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3IgPVxuICBtYXRjaCBraW5kLCBraW5kJyB3aXRoXG4gIHwgYEZpcnN0LCBgRmlyc3QgLT4gY3JcbiAgfCBgRmlyc3QsIGsgLT4gQS5zZXEgaWRzIGsgY3IgKEEuZXBzIGlkcylcbiAgfCBfIC0+IGNyXG47O1xuXG50eXBlIGNvbnRleHQgPVxuICB7IGlkcyA6IEEuSWRzLnRcbiAgOyBraW5kIDogQS5TZW0udFxuICA7IGlnbl9ncm91cCA6IGJvb2xcbiAgOyBncmVlZHkgOiBBLlJlcF9raW5kLnRcbiAgOyBwb3MgOiBBLk1hcmsudCByZWZcbiAgOyBuYW1lcyA6IChzdHJpbmcgKiBpbnQpIGxpc3QgcmVmXG4gIDsgY2FjaGUgOiBDc2V0LnQgQ3NldC5DU2V0TWFwLnQgcmVmXG4gIDsgY29sb3JzIDogQ29sb3JfbWFwLlRhYmxlLnRcbiAgfVxuXG5sZXQgdHJhbnNfc2V0IGNhY2hlIChjbSA6IENvbG9yX21hcC5UYWJsZS50KSBzID1cbiAgbWF0Y2ggQ3NldC5vbmVfY2hhciBzIHdpdGhcbiAgfCBTb21lIGkgLT4gQ3NldC5jc2luZ2xlIChDb2xvcl9tYXAuVGFibGUuZ2V0X2NoYXIgY20gaSlcbiAgfCBOb25lIC0+XG4gICAgbGV0IHYgPSBDc2V0Lmhhc2ggcywgcyBpblxuICAgICh0cnkgQ3NldC5DU2V0TWFwLmZpbmQgdiAhY2FjaGUgd2l0aFxuICAgICB8IE5vdF9mb3VuZCAtPlxuICAgICAgIGxldCBsID0gQ29sb3JfbWFwLlRhYmxlLnRyYW5zbGF0ZV9jb2xvcnMgY20gcyBpblxuICAgICAgIGNhY2hlIDo9IENzZXQuQ1NldE1hcC5hZGQgdiBsICFjYWNoZTtcbiAgICAgICBsKVxuOztcblxubGV0IG1ha2VfcmVwZWF0ZXIgaWRzIGNyIGtpbmQgZ3JlZWR5ID1cbiAgbWF0Y2ggZ3JlZWR5IHdpdGhcbiAgfCBgR3JlZWR5IC0+IGZ1biByZW0gLT4gQS5hbHQgaWRzIFsgQS5zZXEgaWRzIGtpbmQgKEEucmVuYW1lIGlkcyBjcikgcmVtOyBBLmVwcyBpZHMgXVxuICB8IGBOb25fZ3JlZWR5IC0+XG4gICAgZnVuIHJlbSAtPiBBLmFsdCBpZHMgWyBBLmVwcyBpZHM7IEEuc2VxIGlkcyBraW5kIChBLnJlbmFtZSBpZHMgY3IpIHJlbSBdXG47O1xuXG4oKiBYWFggc2hvdWxkIHByb2JhYmx5IGNvbXB1dGUgYSBjYXRlZ29yeSBtYXNrICopXG5sZXQgcmVjIHRyYW5zbGF0ZVxuICAoeyBpZHM7IGtpbmQ7IGlnbl9ncm91cDsgZ3JlZWR5OyBwb3M7IG5hbWVzOyBjYWNoZTsgY29sb3JzIH0gYXMgY3R4KVxuICAoYXN0IDogQXN0Lm5vX2Nhc2UpXG4gID1cbiAgbWF0Y2ggYXN0IHdpdGhcbiAgfCBTZXQgcyAtPiBBLmNzdCBpZHMgKHRyYW5zX3NldCBjYWNoZSBjb2xvcnMgcyksIGtpbmRcbiAgfCBTZXF1ZW5jZSBsIC0+IHRyYW5zX3NlcSBjdHggbCwga2luZFxuICB8IEFzdCAoQWx0ZXJuYXRpdmUgbCkgLT5cbiAgICAobWF0Y2ggQXN0Lm1lcmdlX3NlcXVlbmNlcyBsIHdpdGhcbiAgICAgfCBbIHInIF0gLT5cbiAgICAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgICAgIGVuZm9yY2Vfa2luZCBpZHMga2luZCBraW5kJyBjciwga2luZFxuICAgICB8IG1lcmdlZF9zZXF1ZW5jZXMgLT5cbiAgICAgICAoIEEuYWx0XG4gICAgICAgICAgIGlkc1xuICAgICAgICAgICAoTGlzdC5tYXAgbWVyZ2VkX3NlcXVlbmNlcyB+ZjooZnVuIHInIC0+XG4gICAgICAgICAgICAgIGxldCBjciwga2luZCcgPSB0cmFuc2xhdGUgY3R4IHInIGluXG4gICAgICAgICAgICAgIGVuZm9yY2Vfa2luZCBpZHMga2luZCBraW5kJyBjcikpXG4gICAgICAgLCBraW5kICkpXG4gIHwgUmVwZWF0IChyJywgaSwgaikgLT5cbiAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgIGxldCByZW0gPVxuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IE5vbmUgLT4gQS5yZXAgaWRzIGdyZWVkeSBraW5kJyBjclxuICAgICAgfCBTb21lIGogLT5cbiAgICAgICAgbGV0IGYgPSBtYWtlX3JlcGVhdGVyIGlkcyBjciBraW5kJyBncmVlZHkgaW5cbiAgICAgICAgaXRlciAoaiAtIGkpIGYgKEEuZXBzIGlkcylcbiAgICBpblxuICAgIGl0ZXIgaSAoZnVuIHJlbSAtPiBBLnNlcSBpZHMga2luZCcgKEEucmVuYW1lIGlkcyBjcikgcmVtKSByZW0sIGtpbmRcbiAgfCBCZWdfb2ZfbGluZSAtPiBBLmFmdGVyIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBuZXdsaW5lKSwga2luZFxuICB8IEVuZF9vZl9saW5lIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBuZXdsaW5lKSwga2luZFxuICB8IEJlZ19vZl93b3JkIC0+XG4gICAgKCBBLnNlcVxuICAgICAgICBpZHNcbiAgICAgICAgYEZpcnN0XG4gICAgICAgIChBLmFmdGVyIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBub3RfbGV0dGVyKSlcbiAgICAgICAgKEEuYmVmb3JlIGlkcyBDYXRlZ29yeS5sZXR0ZXIpXG4gICAgLCBraW5kIClcbiAgfCBFbmRfb2Zfd29yZCAtPlxuICAgICggQS5zZXFcbiAgICAgICAgaWRzXG4gICAgICAgIGBGaXJzdFxuICAgICAgICAoQS5hZnRlciBpZHMgQ2F0ZWdvcnkubGV0dGVyKVxuICAgICAgICAoQS5iZWZvcmUgaWRzIENhdGVnb3J5LihpbmV4aXN0YW50ICsrIG5vdF9sZXR0ZXIpKVxuICAgICwga2luZCApXG4gIHwgTm90X2JvdW5kIC0+XG4gICAgKCBBLmFsdFxuICAgICAgICBpZHNcbiAgICAgICAgWyBBLnNlcSBpZHMgYEZpcnN0IChBLmFmdGVyIGlkcyBDYXRlZ29yeS5sZXR0ZXIpIChBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkubGV0dGVyKVxuICAgICAgICA7IChsZXQgY2F0ID0gQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbm90X2xldHRlcikgaW5cbiAgICAgICAgICAgQS5zZXEgaWRzIGBGaXJzdCAoQS5hZnRlciBpZHMgY2F0KSAoQS5iZWZvcmUgaWRzIGNhdCkpXG4gICAgICAgIF1cbiAgICAsIGtpbmQgKVxuICB8IEJlZ19vZl9zdHIgLT4gQS5hZnRlciBpZHMgQ2F0ZWdvcnkuaW5leGlzdGFudCwga2luZFxuICB8IEVuZF9vZl9zdHIgLT4gQS5iZWZvcmUgaWRzIENhdGVnb3J5LmluZXhpc3RhbnQsIGtpbmRcbiAgfCBMYXN0X2VuZF9vZl9saW5lIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBsYXN0bmV3bGluZSksIGtpbmRcbiAgfCBTdGFydCAtPiBBLmFmdGVyIGlkcyBDYXRlZ29yeS5zZWFyY2hfYm91bmRhcnksIGtpbmRcbiAgfCBTdG9wIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS5zZWFyY2hfYm91bmRhcnksIGtpbmRcbiAgfCBTZW0gKGtpbmQnLCByJykgLT5cbiAgICBsZXQgY3IsIGtpbmQnJyA9IHRyYW5zbGF0ZSB7IGN0eCB3aXRoIGtpbmQgPSBraW5kJyB9IHInIGluXG4gICAgZW5mb3JjZV9raW5kIGlkcyBraW5kJyBraW5kJycgY3IsIGtpbmQnXG4gIHwgU2VtX2dyZWVkeSAoZ3JlZWR5JywgcicpIC0+IHRyYW5zbGF0ZSB7IGN0eCB3aXRoIGdyZWVkeSA9IGdyZWVkeScgfSByJ1xuICB8IEdyb3VwIChuLCByJykgLT5cbiAgICBpZiBpZ25fZ3JvdXBcbiAgICB0aGVuIHRyYW5zbGF0ZSBjdHggcidcbiAgICBlbHNlIChcbiAgICAgIGxldCBwID0gIXBvcyBpblxuICAgICAgbGV0ICgpID1cbiAgICAgICAgbWF0Y2ggbiB3aXRoXG4gICAgICAgIHwgU29tZSBuYW1lIC0+IG5hbWVzIDo9IChuYW1lLCBBLk1hcmsuZ3JvdXBfY291bnQgcCkgOjogIW5hbWVzXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgaW5cbiAgICAgIHBvcyA6PSBBLk1hcmsubmV4dDIgIXBvcztcbiAgICAgIGxldCBjciwga2luZCcgPSB0cmFuc2xhdGUgY3R4IHInIGluXG4gICAgICAoIEEuc2VxIGlkcyBgRmlyc3QgKEEubWFyayBpZHMgcCkgKEEuc2VxIGlkcyBgRmlyc3QgY3IgKEEubWFyayBpZHMgKEEuTWFyay5uZXh0IHApKSlcbiAgICAgICwga2luZCcgKSlcbiAgfCBOb19ncm91cCByJyAtPiB0cmFuc2xhdGUgeyBjdHggd2l0aCBpZ25fZ3JvdXAgPSB0cnVlIH0gcidcbiAgfCBOZXN0IHInIC0+XG4gICAgbGV0IGIgPSAhcG9zIGluXG4gICAgbGV0IGNyLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggcicgaW5cbiAgICBsZXQgZSA9IEEuTWFyay5wcmV2ICFwb3MgaW5cbiAgICBpZiBBLk1hcmsuY29tcGFyZSBlIGIgPSAtMVxuICAgIHRoZW4gY3IsIGtpbmQnXG4gICAgZWxzZSBBLnNlcSBpZHMgYEZpcnN0IChBLmVyYXNlIGlkcyBiIGUpIGNyLCBraW5kJ1xuICB8IFBtYXJrIChpLCByJykgLT5cbiAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgIEEuc2VxIGlkcyBgRmlyc3QgKEEucG1hcmsgaWRzIGkpIGNyLCBraW5kJ1xuXG5hbmQgdHJhbnNfc2VxICh7IGlkczsga2luZDsgXyB9IGFzIGN0eCkgPSBmdW5jdGlvblxuICB8IFtdIC0+IEEuZXBzIGlkc1xuICB8IFsgciBdIC0+XG4gICAgbGV0IGNyJywga2luZCcgPSB0cmFuc2xhdGUgY3R4IHIgaW5cbiAgICBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3InXG4gIHwgciA6OiByZW0gLT5cbiAgICBsZXQgY3InLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggciBpblxuICAgIGxldCBjcicnID0gdHJhbnNfc2VxIGN0eCByZW0gaW5cbiAgICBpZiBBLmlzX2VwcyBjcicnIHRoZW4gY3InIGVsc2UgaWYgQS5pc19lcHMgY3InIHRoZW4gY3InJyBlbHNlIEEuc2VxIGlkcyBraW5kJyBjcicgY3InJ1xuOztcblxubGV0IGNvbXBpbGVfMSByZWdleHAgPVxuICBsZXQgcmVnZXhwID0gQXN0LmhhbmRsZV9jYXNlIGZhbHNlIHJlZ2V4cCBpblxuICBsZXQgY29sb3JfbWFwID0gQ29sb3JfbWFwLm1ha2UgKCkgaW5cbiAgbGV0IG5lZWRfbG5sID0gQXN0LmNvbG9yaXplIGNvbG9yX21hcCByZWdleHAgaW5cbiAgbGV0IGNvbG9ycywgY29sb3JfcmVwciA9IENvbG9yX21hcC5mbGF0dGVuIGNvbG9yX21hcCBpblxuICBsZXQgbmNvbG9yID0gQ29sb3JfbWFwLlJlcHIubGVuZ3RoIGNvbG9yX3JlcHIgaW5cbiAgbGV0IGxubCA9IGlmIG5lZWRfbG5sIHRoZW4gQ3NldC5vZl9pbnQgbmNvbG9yIGVsc2UgQ3NldC5udWxsX2NoYXIgaW5cbiAgbGV0IG5jb2xvciA9IGlmIG5lZWRfbG5sIHRoZW4gbmNvbG9yICsgMSBlbHNlIG5jb2xvciBpblxuICBsZXQgY3R4ID1cbiAgICB7IGlkcyA9IEEuSWRzLmNyZWF0ZSAoKVxuICAgIDsga2luZCA9IGBGaXJzdFxuICAgIDsgaWduX2dyb3VwID0gZmFsc2VcbiAgICA7IGdyZWVkeSA9IGBHcmVlZHlcbiAgICA7IHBvcyA9IHJlZiBBLk1hcmsuc3RhcnRcbiAgICA7IG5hbWVzID0gcmVmIFtdXG4gICAgOyBjYWNoZSA9IHJlZiBDc2V0LkNTZXRNYXAuZW1wdHlcbiAgICA7IGNvbG9yc1xuICAgIH1cbiAgaW5cbiAgbGV0IHIsIGtpbmQgPSB0cmFuc2xhdGUgY3R4IHJlZ2V4cCBpblxuICBsZXQgciA9IGVuZm9yY2Vfa2luZCBjdHguaWRzIGBGaXJzdCBraW5kIHIgaW5cbiAgKCpGb3JtYXQuZXByaW50ZiBcIjwlZCAlZD5ALlwiICFpZHMgbmNvbDsqKVxuICBta19yZVxuICAgIH5pbml0aWFsOnJcbiAgICB+Y29sb3JzXG4gICAgfmNvbG9yX3JlcHJcbiAgICB+bmNvbG9yXG4gICAgfmxubFxuICAgIH5ncm91cF9uYW1lczooTGlzdC5yZXYgIShjdHgubmFtZXMpKVxuICAgIH5ncm91cF9jb3VudDooQS5NYXJrLmdyb3VwX2NvdW50ICEoY3R4LnBvcykpXG47O1xuXG5sZXQgY29tcGlsZSByID1cbiAgbGV0IG9wZW4gQXN0LkV4cG9ydCBpblxuICBjb21waWxlXzEgKGlmIEFzdC5hbmNob3JlZCByIHRoZW4gZ3JvdXAgciBlbHNlIHNlcSBbIHNob3J0ZXN0IChyZXAgYW55KTsgZ3JvdXAgciBdKVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9NdXRleCIsIlJlX0NvbG9yX21hcCIsIlJlX0NzZXQiLCJTdGRsaWJfQ2hhciIsIlJlX0F1dG9tYXRhIiwiUmVfQ2F0ZWdvcnkiLCJSZV9Bc3QiLCJTdGRsaWJfTGlzdExhYmVscyIsIlN0ZGxpYiIsIlJlX0dyb3VwIiwiUmVfU2xpY2UiLCJSZV9NYXJrX2luZm9zIiwiU3RkbGliX09wdGlvbiIsIlJlX1BtYXJrIiwiU3RkbGliX0FycmF5IiwiYnJlYWtfaWR4IiwidCIsImdldF9pbmZvIiwicGFyYW0iLCJmb2xsb3dfdHJhbnNpdGlvbiIsImNvbG9yIiwic2V0X3RyYW5zaXRpb24iLCJzdCIsInVua25vd24iLCJpc191bmtub3duX3RyYW5zaXRpb24iLCJpbmZvIiwieCIsInBwX3JlIiwiY2giLCJyZSIsImdyb3VwX2NvdW50IiwiZ3JvdXBfbmFtZXMiLCJ1bnNhZmVfc2V0IiwiaWR4IiwicG9zIiwic2V0IiwiZmlyc3QiLCJlbXB0eSIsIm1ha2UiLCJncm91cHMiLCJsZW5ndGgiLCJjYXRlZ29yeSIsInVua25vd25fc3RhdGUiLCJmaW5kX3N0YXRlIiwiZGVzYyIsImV4biIsIm1hdGNoIiwiYnJlYWtfc3RhdGUiLCJzdGF0ZSIsIm5jb2wiLCJkZWx0YSIsImNhdCIsInZhbGlkYXRlIiwicyIsIm5leHQiLCJjb2xvcnMiLCJsb29wX25vX21hcmsiLCJsYXN0Iiwic3QwIiwiZmluYWwiLCJyZXMiLCJmaW5kX2luaXRpYWxfc3RhdGUiLCJnZXRfY29sb3IiLCJzbGVuIiwic2Nhbl9zdHIiLCJwb3NpdGlvbnMiLCJpbml0aWFsX3N0YXRlIiwicmVhbF9jIiwiZmluYWxfYm91bmRhcnlfY2hlY2siLCJzdGF0ZV9pbmZvIiwiZmluYWxfY2F0IiwibWFrZV9tYXRjaF9zdHIiLCJsZW4iLCJwYXJ0aWFsIiwiaW5pdGlhbF9jYXQiLCJzdGF0dXMiLCJjcmVhdGUiLCJmZWVkIiwiZmluYWxpemUiLCJub19tYXRjaF9zdGFydHNfYmVmb3JlIiwidGVzdF9tYXJrIiwibWFyayIsImdldCIsImkiLCJzdG9wIiwic3RhcnQiLCJsb29wIiwiYWJzX3BvcyIsInR0Iiwic2xpY2VzIiwiZmlyc3RfbWF0Y2hfcG9zIiwicG1hcmtzIiwibWFya3MiLCJmaXJzdF9tYXRjaF9wb3NpdGlvbiIsIm1hdGNoX3N0cl9ub19ib3VuZHMiLCJjc3RfUmVfZXhlY19vdXRfb2ZfYm91bmRzIiwibWF0Y2hfc3RyX3AiLCJtYXRjaF9zdHIiLCJlbmZvcmNlX2tpbmQiLCJpZHMiLCJraW5kIiwiY3IiLCJ0cmFuc2xhdGUiLCJjdHgiLCJhc3QiLCJjYWNoZSIsIm5hbWVzIiwiZ3JlZWR5IiwiaWduX2dyb3VwIiwibCIsIm4iLCJyIiwiYiIsImUiLCJwIiwibmFtZSIsImoiLCJyZW0iLCJ2IiwibWVyZ2VkX3NlcXVlbmNlcyIsInRyYW5zX3NlcSIsImNvbXBpbGUiLCJyZWdleHAiLCJjb2xvcl9tYXAiLCJuZWVkX2xubCIsImNvbG9yX3JlcHIiLCJuY29sb3IiLCJsbmwiLCJpbml0aWFsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxVQUFBQyxHQzBCb0IsNEJBQVk7QUFBQSxZQUFBQyxTQUFBQyxPQStDUyxnQkFBaUM7QUFBQSxZQUFBQyxrQkFBQUQsT0FBQUU7QUFBQUEsSUFNTCx3REFBaUI7QUFBQSxHQUFDO0FBQUEsWUFBQUMsZUFBQUgsT0FBQUUsT0FBQUU7QUFBQUEsUUFBQSxJQUlsQztBQUFBLElBQVI7QUFBQSxHQUFpQztB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O0FBQUEsS0FBQTlFLFFBQ1U7QUFBQSxLQUFBK0UsYUFBMkI7QUFBQSxLQUFBdEUsU0FBQTtBQUFBLEtBQUF1RSxTQUN2QztBQUFBLEtBQUFDLE1BQ2IsV0FBMkI7QUFBQSxLQUFBRCxXQUMzQjtBQUFBLFNBRVU7QUFBQTtBQUFBLEtBQUF2QjtBQUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUF6RCxVQVVJO0FBQUEsS0FBQXNELE9BQW9CO0FBQUEsS0FBQVcsSUFBQTtBQUFBLEtBQUFpQixVQUMxQjtBQUFBLEtBQUFsRyxjQVNPO0FBQUEsS0FBQUMsY0FEQTtBQUFBLFNBN0tMO0FBQUEsU0FIQztBQUFBLElBREg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQStCO0FBQUEsR0F1TDRDO0FBQUEsR0FydUJLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ1RjFGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzUxOTUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9zZWFyY2gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJsZXQgYWxsID8ocG9zID0gMCkgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGlmIHBvcyA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmFsbFwiO1xuICAoKiBpbmRleCBvZiB0aGUgZmlyc3QgcG9zaXRpb24gd2UgZG8gbm90IGNvbnNpZGVyLlxuICAgICAhcG9zIDwgbGltaXQgaXMgYW4gaW52YXJpYW50ICopXG4gIGxldCBsaW1pdCA9XG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzXG4gICAgfCBTb21lIGwgLT5cbiAgICAgIGlmIGwgPCAwIHx8IHBvcyArIGwgPiBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmFsbFwiO1xuICAgICAgcG9zICsgbFxuICBpblxuICAoKiBpdGVyYXRlIG9uIG1hdGNoZXMuIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgc2VhcmNoIGZvciB0aGUgbmV4dFxuICAgICBvbmUganVzdCBhZnRlciBpdHMgZW5kICopXG4gIGxldCByZWMgYXV4IHBvcyBvbl9tYXRjaCAoKSA9XG4gICAgaWYgcG9zID4gbGltaXRcbiAgICB0aGVuIFNlcS5OaWwgKCogbm8gbW9yZSBtYXRjaGVzICopXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaFxuICAgICAgICBDb21waWxlLm1hdGNoX3N0ciB+Z3JvdXBzOnRydWUgfnBhcnRpYWw6ZmFsc2UgcmUgcyB+cG9zIH5sZW46KGxpbWl0IC0gcG9zKVxuICAgICAgd2l0aFxuICAgICAgfCBNYXRjaCBzdWJzdHIgLT5cbiAgICAgICAgbGV0IHAxID0gR3JvdXAuc3RhcnRfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgbGV0IHAyID0gR3JvdXAuc3RvcF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICBpZiBvbl9tYXRjaCAmJiBwMSA9IHBvcyAmJiBwMSA9IHAyXG4gICAgICAgIHRoZW4gKCogc2tpcCBlbXB0eSBtYXRjaCByaWdodCBhZnRlciBhIG1hdGNoICopXG4gICAgICAgICAgYXV4IChwb3MgKyAxKSBmYWxzZSAoKVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBsZXQgcG9zID0gaWYgcDEgPSBwMiB0aGVuIHAyICsgMSBlbHNlIHAyIGluXG4gICAgICAgICAgU2VxLkNvbnMgKHN1YnN0ciwgYXV4IHBvcyAocDEgPD4gcDIpKSlcbiAgICAgIHwgUnVubmluZyBfIHwgRmFpbGVkIC0+IFNlcS5OaWwpXG4gIGluXG4gIGF1eCBwb3MgZmFsc2Vcbjs7XG5cbmxldCBtYXRjaGVzID9wb3MgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGFsbCA/cG9zID9sZW4gcmUgcyB8PiBTZXEubWFwIChmdW4gc3ViIC0+IEdyb3VwLmdldCBzdWIgMClcbjs7XG5cbmxldCBzcGxpdF9mdWxsID8ocG9zID0gMCkgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGlmIHBvcyA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnNwbGl0XCI7XG4gIGxldCBsaW1pdCA9XG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzXG4gICAgfCBTb21lIGwgLT5cbiAgICAgIGlmIGwgPCAwIHx8IHBvcyArIGwgPiBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnNwbGl0XCI7XG4gICAgICBwb3MgKyBsXG4gIGluXG4gICgqIGk6IHN0YXJ0IG9mIGRlbGltaXRlZCBzdHJpbmdcbiAgICAgcG9zOiBmaXJzdCBwb3NpdGlvbiBhZnRlciBsYXN0IG1hdGNoIG9mIFtyZV1cbiAgICAgbGltaXQ6IGZpcnN0IGluZGV4IHdlIGlnbm9yZSAoIXBvcyA8IGxpbWl0IGlzIGFuIGludmFyaWFudCkgKilcbiAgbGV0IHBvczAgPSBwb3MgaW5cbiAgbGV0IHJlYyBhdXggc3RhdGUgaSBwb3MgKCkgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IGBJZGxlIHdoZW4gcG9zID4gbGltaXQgLT5cbiAgICAgICgqIFdlIGhhZCBhbiBlbXB0eSBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKilcbiAgICAgIGFzc2VydCAoaSA9IGxpbWl0KTtcbiAgICAgIFNlcS5OaWxcbiAgICB8IGBJZGxlIC0+XG4gICAgICAobWF0Y2hcbiAgICAgICAgIENvbXBpbGUubWF0Y2hfc3RyIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDpmYWxzZSByZSBzIH5wb3MgfmxlbjoobGltaXQgLSBwb3MpXG4gICAgICAgd2l0aFxuICAgICAgIHwgTWF0Y2ggc3Vic3RyIC0+XG4gICAgICAgICBsZXQgcDEgPSBHcm91cC5zdGFydF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICAgbGV0IHAyID0gR3JvdXAuc3RvcF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICAgbGV0IHBvcyA9IGlmIHAxID0gcDIgdGhlbiBwMiArIDEgZWxzZSBwMiBpblxuICAgICAgICAgbGV0IG9sZF9pID0gaSBpblxuICAgICAgICAgbGV0IGkgPSBwMiBpblxuICAgICAgICAgaWYgb2xkX2kgPSBwMSAmJiBwMSA9IHAyICYmIHAxID4gcG9zMFxuICAgICAgICAgdGhlbiAoKiBTa2lwIGVtcHR5IG1hdGNoIHJpZ2h0IGFmdGVyIGEgZGVsaW1pdGVyICopXG4gICAgICAgICAgIGF1eCBzdGF0ZSBpIHBvcyAoKVxuICAgICAgICAgZWxzZSBpZiBwMSA+IHBvczBcbiAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAoKiBzdHJpbmcgZG9lcyBub3Qgc3RhcnQgYnkgYSBkZWxpbWl0ZXIgKilcbiAgICAgICAgICAgbGV0IHRleHQgPSBTdHJpbmcuc3ViIHMgb2xkX2kgKHAxIC0gb2xkX2kpIGluXG4gICAgICAgICAgIGxldCBzdGF0ZSA9IGBZaWVsZCAoYERlbGltIHN1YnN0cikgaW5cbiAgICAgICAgICAgU2VxLkNvbnMgKGBUZXh0IHRleHQsIGF1eCBzdGF0ZSBpIHBvcykpXG4gICAgICAgICBlbHNlIFNlcS5Db25zIChgRGVsaW0gc3Vic3RyLCBhdXggc3RhdGUgaSBwb3MpXG4gICAgICAgfCBSdW5uaW5nIF8gLT4gU2VxLk5pbFxuICAgICAgIHwgRmFpbGVkIC0+XG4gICAgICAgICBpZiBpIDwgbGltaXRcbiAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICBsZXQgdGV4dCA9IFN0cmluZy5zdWIgcyBpIChsaW1pdCAtIGkpIGluXG4gICAgICAgICAgICgqIHlpZWxkIGxhc3Qgc3RyaW5nICopXG4gICAgICAgICAgIFNlcS5Db25zIChgVGV4dCB0ZXh0LCBhdXggc3RhdGUgbGltaXQgcG9zKSlcbiAgICAgICAgIGVsc2UgU2VxLk5pbClcbiAgICB8IGBZaWVsZCB4IC0+IFNlcS5Db25zICh4LCBhdXggYElkbGUgaSBwb3MpXG4gIGluXG4gIGF1eCBgSWRsZSBwb3MgcG9zXG47O1xuXG5sZXQgc3BsaXQgP3BvcyA/bGVuIHJlIHMgOiBfIFNlcS50ID1cbiAgbGV0IHNlcSA9IHNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgaW5cbiAgbGV0IHJlYyBmaWx0ZXIgc2VxICgpID1cbiAgICBtYXRjaCBzZXEgKCkgd2l0aFxuICAgIHwgU2VxLk5pbCAtPiBTZXEuTmlsXG4gICAgfCBTZXEuQ29ucyAoYERlbGltIF8sIHRsKSAtPiBmaWx0ZXIgdGwgKClcbiAgICB8IFNlcS5Db25zIChgVGV4dCBzLCB0bCkgLT4gU2VxLkNvbnMgKHMsIGZpbHRlciB0bClcbiAgaW5cbiAgZmlsdGVyIHNlcVxuOztcblxubGV0IHNwbGl0X2RlbGltID9wb3MgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGxldCBzZXEgPSBzcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIGluXG4gIGxldCByZWMgZmlsdGVyIH5kZWxpbSBzZXEgKCkgPVxuICAgIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGlmIGRlbGltIHRoZW4gU2VxLkNvbnMgKFwiXCIsIGZ1biAoKSAtPiBTZXEuTmlsKSBlbHNlIFNlcS5OaWxcbiAgICB8IFNlcS5Db25zIChgRGVsaW0gXywgdGwpIC0+XG4gICAgICBpZiBkZWxpbVxuICAgICAgdGhlbiBTZXEuQ29ucyAoXCJcIiwgZnVuICgpIC0+IGZpbHRlciB+ZGVsaW06dHJ1ZSB0bCAoKSlcbiAgICAgIGVsc2UgZmlsdGVyIH5kZWxpbTp0cnVlIHRsICgpXG4gICAgfCBTZXEuQ29ucyAoYFRleHQgcywgdGwpIC0+IFNlcS5Db25zIChzLCBmaWx0ZXIgfmRlbGltOmZhbHNlIHRsKVxuICBpblxuICBmaWx0ZXIgfmRlbGltOnRydWUgc2VxXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJBc3NlcnRfZmFpbHVyZSIsIlJlX0NvbXBpbGUiLCJTdGRsaWJfU3RyaW5nIiwiUmVfR3JvdXAiLCJTdGRsaWIiLCJTdGRsaWJfU2VxIiwiYWxsIiwib3B0IiwibGVuIiwicmUiLCJzIiwicG9zIiwiY3N0X1JlX2FsbCIsImwiLCJsaW1pdCIsImF1eCIsIm9uX21hdGNoIiwicGFyYW0iLCJtYXRjaCIsInN1YnN0ciIsInAxIiwicDIiLCJtYXRjaGVzIiwic3ViIiwic3BsaXRfZnVsbCIsImNzdF9SZV9zcGxpdCIsInN0YXRlIiwiaSIsIm9sZF9pIiwieCIsInRleHQiLCJzcGxpdCIsInNlcSIsImZpbHRlciIsInZhcmlhbnQiLCJ0bCIsInNwbGl0X2RlbGltIiwiZGVsaW0iLCJjc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLElBQUFDLEtBQUFDLEtBQUFDLElBQUFDO0FBQUFBLFFBQUFDLE1DQVEsa0JBQUFDLGFEQVI7QUFBQSxJQ0NFLFlBQWdCO0FBQUEsSUFHaEI7QUFBQTtBQUFBLE1BQUFDLElBQUE7QUFBQSxVQUlJO0FBQUE7QUFBQSxXQUEyQztBQUFBLFNBQUFDLFFBQzNDO0FBQUE7QUFBQTtBQUFBLFNBQUFBLFFBSFE7QUFBQSxhQUFBQyxJQUFBSixPQUFBSyxZQUFBQztBQUFBQSxTQUFBTixNQVFWLE9BQUFLLFdBQUE7QUFBQTtBQUFBLHNCQUNLO0FBQUEsVUFBQUUsUUFHRDtBQUFBLE1BQTBFO0FBQUE7QUFBQSxRQUFBQyxTQUFBO0FBQUEsWUFHakU7QUFBQSxRQUFBQyxLQUFBO0FBQUEsWUFDQTtBQUFBLFFBQUFDLEtBQUE7QUFBQSxPQUNUO0FBQUE7QUFBQTtBQUFBLFdBQUFWLFFBRUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSW9CO0FBQUE7QUFBQSxTQUFBQSxRQUhqQixpQ0FFZTtBQUFBLEtBQWtCLCtCQUFsQiwwQkFBa0I7QUFBQSxJQUNSO0FBQUEsSUFFcEMsbUJEL0JGLHVCQytCRTtBQUFBLEdBQWE7QUFBQSxZQUFBVyxRQUFBWCxLQUFBSCxLQUFBQyxJQUFBQztBQUFBQSxRQUFBLElBSWI7QUFBQSxlQUFBYSxLQUEwQyxxQ0FBZTtBQUFBLFlBQUM7QUFBQSx1QkFBcEMsbUJBQW9DO0FBQUE7QUFBQSxXRG5DNUQ7QUFBQSxZQUFBQyxXQUFBakIsS0FBQUMsS0FBQUMsSUFBQUM7QUFBQUEsUUFBQUMsTUNzQ2Usa0JBQUFjLGVEdENmO0FBQUEsSUN1Q0UsWUFBZ0I7QUFBQSxJQUNoQjtBQUFBO0FBQUEsTUFBQVosSUFBQTtBQUFBLFVBSUk7QUFBQTtBQUFBLFdBQTJDO0FBQUEsU0FBQUMsUUFDM0M7QUFBQTtBQUFBO0FBQUEsU0FBQUEsUUFIUTtBQUFBLGFBQUFDLElBQUFXLFNBQUFDLEdBQUFoQixPQUFBTTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxXQUFBVyxRQVVWLEdBQUFqQixRQUFBO0FBQUE7QUFBQTtBQUFBLFFBQ2E7QUFBQSxTQUVYLG9CQUNBO0FBQUEsU0FEQTtBQUFBO0FBQUE7QUFBQSxTQUFBTztBQUFBQSxXQUlHO0FBQUEsUUFBMEU7QUFBQSwyQkFrQjdEO0FBQUE7QUFBQSxTQUFBQyxTQWxCNkQ7QUFBQSxhQUdqRTtBQUFBLFNBQUFDLEtBQUE7QUFBQSxhQUNBO0FBQUEsU0FBQUMsS0FBQTtBQUFBLFNBQUFWLFFBQ1Q7QUFBQSxRQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQUFrQixJQWZMO0FBQUEsT0FpQzBDLDBCQUFmLHlDQUFlO0FBQUE7QUFBQSxNQU5yQyxtQkFLSztBQUFBLFVBQUFDLE9BSFE7QUFBQSxNQUU4QjtBQUFBO0FBQUEsMEJBQW5CLHVDQUFtQjtBQUFBO0FBQUEsS0FidEM7QUFBQSxNQU13QztBQUFBO0FBQUEsMEJBQWYsb0NBQWU7QUFBQTtBQUFBLE1BQUFBLFNBSGhDO0FBQUEsTUFBQUosUUFDWDtBQUFBLEtBQ3FDO0FBQUE7QUFBQSx5QkFBZixrQ0FBZTtBQUFBLElBVUQ7QUFBQSxJQUU3QyxtQkR2RkYsb0NDdUZFO0FBQUEsR0FBaUI7QUFBQSxZQUFBSyxNQUFBcEIsS0FBQUgsS0FBQUMsSUFBQUM7QUFBQUEsUUFBQXNCLE1BSVA7QUFBQSxhQUFBQyxPQUFBRCxPQUFBZjtBQUFBQSxTQUFBZSxNQUVSO0FBQUE7QUFBQSxVQUFBZCxRQUFNO0FBQUEsTUFBTSxZQUNDO0FBQUEsVUFBQUEsVUFERCxVQUFBZ0IsVUFBQTtBQUFBO0FBQUEsVUFBQUYsUUFBQTtBQUFBLE1BRWlCO0FBQUE7QUFBQSxTQUFBRyxLQUY3QixVQUFBekIsSUFBQTtBQUFBLEtBR2tELDBCQUFULHVCQUFTO0FBQUEsSUFBQztBQUFBLElBRXJEO0FBQUEsR0FBVTtBQUFBLFlBQUEwQixZQUFBekIsS0FBQUgsS0FBQUMsSUFBQUM7QUFBQUEsUUFBQXNCLE1BSUE7QUFBQSxhQUFBQyxPQUFBSSxTQUFBTCxPQUFBZjtBQUFBQTtBQUFBQTtBQUFBQSxVQUFBcUIsTUR0R1o7QUFBQTtBQUFBO0FBQUEsV0FBQUQsUUN3R0ksU0FBQUwsTUFBQTtBQUFBO0FBQUEsWUFBQWQsUUFBTTtBQUFBLFFBQU07QUFBQSxZQUFBQSxVQUFBLFVBQUFnQixVQUFBO0FBQUE7QUFBQSxZQUFBRixRQUFBO0FBQUEsUUFHVjtBQUFBLFFBRUs7QUFBQTtBQUFBO0FBQUEsT0FKTSxpQ0FBQWYsT0FBc0MsU0FBTyxNQUtNO0FBQUE7QUFBQSxNQUZ6RCx5QkFBQUEsT0FBd0IsMEJBQXdCLEdBQWhEO0FBQUE7QUFBQSxTQUFBa0IsS0FKUCxVQUFBekIsSUFBQTtBQUFBLEtBTStELDBCQUF0QiwwQkFBc0I7QUFBQSxJQUFDO0FBQUEsSUFFbEUsbUJEaEhGLDBCQ2dIRTtBQUFBLEdBQXNCO0FBQUEsR0RoSHhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzUzODAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jb3JlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCpcbiAgIFJFIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeVxuXG4gICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVyb21lIFZvdWlsbG9uXG4gICBlbWFpbDogSmVyb21lLlZvdWlsbG9uQHBwcy5qdXNzaWV1LmZyXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGhcbiAgIGxpbmtpbmcgZXhjZXB0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdFxuICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuKilcblxub3BlbiBJbXBvcnRcblxuaW5jbHVkZSBzdHJ1Y3RcbiAgbGV0IGNzZXQgPSBBc3QuY3NldFxuICBsZXQgcmcgYyBjJyA9IGNzZXQgKENzZXQuY3NlcSBjIGMnKVxuICBsZXQgbm90bmwgPSBjc2V0IENzZXQubm90bmxcbiAgbGV0IGxvd2VyID0gY3NldCBDc2V0Lmxvd2VyXG4gIGxldCB1cHBlciA9IGNzZXQgQ3NldC51cHBlclxuICBsZXQgYWxwaGEgPSBjc2V0IENzZXQuYWxwaGFcbiAgbGV0IGRpZ2l0ID0gY3NldCBDc2V0LmNkaWdpdFxuICBsZXQgYWxudW0gPSBjc2V0IENzZXQuYWxudW1cbiAgbGV0IHdvcmRjID0gY3NldCBDc2V0LndvcmRjXG4gIGxldCBhc2NpaSA9IGNzZXQgQ3NldC5hc2NpaVxuICBsZXQgYmxhbmsgPSBjc2V0IENzZXQuYmxhbmtcbiAgbGV0IGNudHJsID0gY3NldCBDc2V0LmNudHJsXG4gIGxldCBncmFwaCA9IGNzZXQgQ3NldC5ncmFwaFxuICBsZXQgcHJpbnQgPSBjc2V0IENzZXQucHJpbnRcbiAgbGV0IHB1bmN0ID0gY3NldCBDc2V0LnB1bmN0XG4gIGxldCBzcGFjZSA9IGNzZXQgQ3NldC5zcGFjZVxuICBsZXQgeGRpZ2l0ID0gY3NldCBDc2V0LnhkaWdpdFxuZW5kXG5cbmluY2x1ZGUgQXN0LkV4cG9ydFxuXG5sZXQgZXhlY19pbnRlcm5hbCA/KHBvcyA9IDApID8obGVuID0gLTEpIH5wYXJ0aWFsIH5ncm91cHMgcmUgcyA9XG4gIENvbXBpbGUubWF0Y2hfc3RyIH5ncm91cHMgfnBhcnRpYWwgcmUgcyB+cG9zIH5sZW5cbjs7XG5cbmxldCBleGVjID9wb3MgP2xlbiByZSBzID1cbiAgbWF0Y2ggZXhlY19pbnRlcm5hbCA/cG9zID9sZW4gfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgd2l0aFxuICB8IE1hdGNoIHN1YnN0ciAtPiBzdWJzdHJcbiAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuOztcblxubGV0IGV4ZWNfb3B0ID9wb3MgP2xlbiByZSBzID1cbiAgbWF0Y2ggZXhlY19pbnRlcm5hbCA/cG9zID9sZW4gfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgd2l0aFxuICB8IE1hdGNoIHN1YnN0ciAtPiBTb21lIHN1YnN0clxuICB8IF8gLT4gTm9uZVxuOztcblxubGV0IGV4ZWNwID8ocG9zID0gMCkgPyhsZW4gPSAtMSkgcmUgcyA9IENvbXBpbGUubWF0Y2hfc3RyX3AgfnBvcyB+bGVuIHJlIHNcblxubGV0IGV4ZWNfcGFydGlhbCA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgfmdyb3VwczpmYWxzZSB+cGFydGlhbDp0cnVlID9wb3MgP2xlbiByZSBzIHdpdGhcbiAgfCBNYXRjaCBfIC0+IGBGdWxsXG4gIHwgUnVubmluZyBfIC0+IGBQYXJ0aWFsXG4gIHwgRmFpbGVkIC0+IGBNaXNtYXRjaFxuOztcblxubGV0IGV4ZWNfcGFydGlhbF9kZXRhaWxlZCA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOnRydWUgP3BvcyA/bGVuIHJlIHMgd2l0aFxuICB8IE1hdGNoIGdyb3VwIC0+IGBGdWxsIGdyb3VwXG4gIHwgUnVubmluZyB7IG5vX21hdGNoX3N0YXJ0c19iZWZvcmUgfSAtPiBgUGFydGlhbCBub19tYXRjaF9zdGFydHNfYmVmb3JlXG4gIHwgRmFpbGVkIC0+IGBNaXNtYXRjaFxuOztcblxubW9kdWxlIE1hcmsgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gUG1hcmsudFxuXG4gIGxldCB0ZXN0IChnIDogR3JvdXAudCkgcCA9IFBtYXJrLlNldC5tZW0gcCAoR3JvdXAucG1hcmtzIGcpXG4gIGxldCBhbGwgKGcgOiBHcm91cC50KSA9IEdyb3VwLnBtYXJrcyBnXG5cbiAgbW9kdWxlIFNldCA9IFBtYXJrLlNldFxuXG4gIGxldCBlcXVhbCA9IFBtYXJrLmVxdWFsXG4gIGxldCBjb21wYXJlID0gUG1hcmsuY29tcGFyZVxuZW5kXG5cbnR5cGUgc3BsaXRfdG9rZW4gPVxuICBbIGBUZXh0IG9mIHN0cmluZ1xuICB8IGBEZWxpbSBvZiBHcm91cC50XG4gIF1cblxubW9kdWxlIEdlbiA9IHN0cnVjdFxuICB0eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG5cbiAgbGV0IGdlbl9vZl9zZXEgKHMgOiAnYSBTZXEudCkgOiAnYSBnZW4gPVxuICAgIGxldCByID0gcmVmIHMgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIG1hdGNoICFyICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBOb25lXG4gICAgICB8IFNlcS5Db25zICh4LCB0bCkgLT5cbiAgICAgICAgciA6PSB0bDtcbiAgICAgICAgU29tZSB4XG4gIDs7XG5cbiAgbGV0IHNwbGl0ID9wb3MgP2xlbiByZSBzIDogXyBnZW4gPSBTZWFyY2guc3BsaXQgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuICBsZXQgc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyA6IF8gZ2VuID0gU2VhcmNoLnNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuICBsZXQgYWxsID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLmFsbCA/cG9zID9sZW4gcmUgcyB8PiBnZW5fb2Zfc2VxXG4gIGxldCBtYXRjaGVzID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLm1hdGNoZXMgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuZW5kXG5cbm1vZHVsZSBHcm91cCA9IEdyb3VwXG5cbigqKiB7MiBEZXByZWNhdGVkIGZ1bmN0aW9uc30gKilcblxubGV0IHNwbGl0X2Z1bGxfc2VxID0gU2VhcmNoLnNwbGl0X2Z1bGxcbmxldCBzcGxpdF9zZXEgPSBTZWFyY2guc3BsaXRcbmxldCBtYXRjaGVzX3NlcSA9IFNlYXJjaC5tYXRjaGVzXG5sZXQgYWxsX3NlcSA9IFNlYXJjaC5hbGxcblxudHlwZSAnYSBnZW4gPSAnYSBHZW4uZ2VuXG5cbmxldCBhbGxfZ2VuID0gR2VuLmFsbFxubGV0IG1hdGNoZXNfZ2VuID0gR2VuLm1hdGNoZXNcbmxldCBzcGxpdF9nZW4gPSBHZW4uc3BsaXRcbmxldCBzcGxpdF9mdWxsX2dlbiA9IEdlbi5zcGxpdF9mdWxsXG5cbnR5cGUgc3Vic3RyaW5ncyA9IEdyb3VwLnRcblxubGV0IGdldCA9IEdyb3VwLmdldFxubGV0IGdldF9vZnMgPSBHcm91cC5vZmZzZXRcbmxldCBnZXRfYWxsID0gR3JvdXAuYWxsXG5sZXQgZ2V0X2FsbF9vZnMgPSBHcm91cC5hbGxfb2Zmc2V0XG5sZXQgdGVzdCA9IEdyb3VwLnRlc3RcblxudHlwZSBtYXJraWQgPSBNYXJrLnRcblxubGV0IG1hcmtlZCA9IE1hcmsudGVzdFxubGV0IG1hcmtfc2V0ID0gTWFyay5hbGxcblxudHlwZSBncm91cHMgPSBHcm91cC50XG5cbm1vZHVsZSBMaXN0ID0gc3RydWN0XG4gIGxldCBsaXN0X29mX3NlcSAocyA6ICdhIFNlcS50KSA6ICdhIGxpc3QgPVxuICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBsIHggLT4geCA6OiBsKSBbXSBzIHw+IExpc3QucmV2XG4gIDs7XG5cbiAgbGV0IGFsbCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5hbGwgP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbiAgbGV0IG1hdGNoZXMgP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2gubWF0Y2hlcyA/cG9zID9sZW4gcmUgcyB8PiBsaXN0X29mX3NlcVxuICBsZXQgc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5zcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIHw+IGxpc3Rfb2Zfc2VxXG4gIGxldCBzcGxpdCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5zcGxpdCA/cG9zID9sZW4gcmUgcyB8PiBsaXN0X29mX3NlcVxuICBsZXQgc3BsaXRfZGVsaW0gP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2guc3BsaXRfZGVsaW0gP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbmVuZFxuXG5pbmNsdWRlIExpc3RcblxuaW5jbHVkZSBzdHJ1Y3RcbiAgb3BlbiBDb21waWxlXG5cbiAgdHlwZSBub25yZWMgcmUgPSByZVxuXG4gIGxldCBjb21waWxlID0gY29tcGlsZVxuICBsZXQgcHBfcmUgPSBwcF9yZVxuICBsZXQgcHJpbnRfcmUgPSBwcF9yZVxuICBsZXQgZ3JvdXBfbmFtZXMgPSBncm91cF9uYW1lc1xuICBsZXQgZ3JvdXBfY291bnQgPSBncm91cF9jb3VudFxuZW5kXG5cbm1vZHVsZSBTZXEgPSBTZWFyY2hcbm1vZHVsZSBTdHJlYW0gPSBDb21waWxlLlN0cmVhbVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJSZV9TZWFyY2giLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3RMYWJlbHMiLCJSZV9Hcm91cCIsIlJlX1BtYXJrIiwiUmVfQ29tcGlsZSIsIlN0ZGxpYiIsIlJlX0NzZXQiLCJSZV9Bc3QiLCJjc2V0IiwicmciLCJjIiwibm90bmwiLCJsb3dlciIsInVwcGVyIiwiYWxwaGEiLCJkaWdpdCIsImFsbnVtIiwid29yZGMiLCJhc2NpaSIsImJsYW5rIiwiY250cmwiLCJncmFwaCIsInByaW50IiwicHVuY3QiLCJzcGFjZSIsInhkaWdpdCIsImluY2x1ZGUiLCJlbXB0eSIsImVwc2lsb24iLCJzdHIiLCJub19jYXNlIiwiY2FzZSQiLCJkaWZmIiwiY29tcGwiLCJyZXBuIiwiaW50ZXIiLCJjaGFyIiwiYW55Iiwic2V0IiwibWFyayIsIm5lc3QiLCJub19ncm91cCIsIndob2xlX3N0cmluZyIsImxlb2wiLCJsb25nZXN0IiwiZ3JlZWR5Iiwibm9uX2dyZWVkeSIsInN0b3AiLCJub3RfYm91bmRhcnkiLCJncm91cCIsIndvcmQiLCJmaXJzdCIsImJvcyIsImJvdyIsImVvdyIsImVvcyIsImJvbCIsInN0YXJ0IiwiZW9sIiwib3B0IiwicmVwIiwicmVwMSIsImFsdCIsInNob3J0ZXN0Iiwic2VxIiwicHAiLCJ3aXRuZXNzIiwiZXhlY19pbnRlcm5hbCIsInBhcnRpYWwiLCJncm91cHMiLCJyZSIsInMiLCJwb3MiLCJsZW4iLCJleGVjIiwibWF0Y2giLCJzdWJzdHIiLCJleGVjX29wdCIsImV4ZWNwIiwiZXhlY19wYXJ0aWFsIiwiZXhlY19wYXJ0aWFsX2RldGFpbGVkIiwibm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSIsIm1hcmtlZCIsImciLCJwIiwibWFya19zZXQiLCJlcXVhbCIsImNvbXBhcmUiLCJnZW5fb2Zfc2VxIiwiciIsInBhcmFtIiwidGwiLCJ4Iiwic3BsaXRfZ2VuIiwic3BsaXRfZnVsbF9nZW4iLCJhbGxfZ2VuIiwibWF0Y2hlc19nZW4iLCJzcGxpdF9mdWxsX3NlcSIsInNwbGl0X3NlcSIsIm1hdGNoZXNfc2VxIiwiYWxsX3NlcSIsImdldCIsImdldF9vZnMiLCJnZXRfYWxsIiwiZ2V0X2FsbF9vZnMiLCJ0ZXN0IiwibGlzdF9vZl9zZXEiLCJsIiwiYWxsIiwibWF0Y2hlcyIsInNwbGl0X2Z1bGwiLCJzcGxpdCIsInNwbGl0X2RlbGltIiwiY29tcGlsZSIsInByaW50X3JlIiwiZ3JvdXBfbmFtZXMiLCJncm91cF9jb3VudCIsIlJlX0NvcmUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsWUFBQUMsR0FBQUMsS0FBQUEsR0MwQnFCLE9BQWdCLEtBQWhCLCtCQUFnQjtBQUFBO0FBQUEsSUFBQUMsUUFDdkI7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsU0FDQztBQUFBLElBQUFDLFVBQWdCO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpDL0IiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNTcyNiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3BhcnNlX2J1ZmZlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsInR5cGUgdCA9XG4gIHsgc3RyIDogc3RyaW5nXG4gIDsgbXV0YWJsZSBwb3MgOiBpbnRcbiAgfVxuXG5leGNlcHRpb24gUGFyc2VfZXJyb3JcblxubGV0IGNyZWF0ZSBzdHIgPSB7IHN0cjsgcG9zID0gMCB9XG5sZXQgdW5nZXQgdCA9IHQucG9zIDwtIHQucG9zIC0gMVxubGV0IGp1bmsgdCA9IHQucG9zIDwtIHQucG9zICsgMVxubGV0IGVvcyB0ID0gdC5wb3MgPSBTdHJpbmcubGVuZ3RoIHQuc3RyXG5sZXQgdGVzdCB0IGMgPSAobm90IChlb3MgdCkpICYmIHQuc3RyLlt0LnBvc10gPSBjXG5cbmxldCB0ZXN0MiB0IGMgYycgPVxuICB0LnBvcyArIDEgPCBTdHJpbmcubGVuZ3RoIHQuc3RyICYmIHQuc3RyLlt0LnBvc10gPSBjICYmIHQuc3RyLlt0LnBvcyArIDFdID0gYydcbjs7XG5cbmxldCBhY2NlcHQgdCBjID1cbiAgbGV0IHIgPSB0ZXN0IHQgYyBpblxuICBpZiByIHRoZW4gdC5wb3MgPC0gdC5wb3MgKyAxO1xuICByXG47O1xuXG5sZXQgZ2V0IHQgPVxuICBsZXQgciA9IHQuc3RyLlt0LnBvc10gaW5cbiAgdC5wb3MgPC0gdC5wb3MgKyAxO1xuICByXG47O1xuXG5sZXQgYWNjZXB0X3MgdCBzJyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMnIGluXG4gIHRyeVxuICAgIGZvciBqID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAoKiBDUi1zb21lZGF5IHJncmluYmVyZzogc3RvcCByZWx5aW5nIG9uIGJvdW5kIGNoZWNrcyAqKVxuICAgICAgdHJ5IGlmIHMnLltqXSA8PiB0LnN0ci5bdC5wb3MgKyBqXSB0aGVuIHJhaXNlX25vdHJhY2UgRXhpdCB3aXRoXG4gICAgICB8IF8gLT4gcmFpc2Vfbm90cmFjZSBFeGl0XG4gICAgZG9uZTtcbiAgICB0LnBvcyA8LSB0LnBvcyArIGxlbjtcbiAgICB0cnVlXG4gIHdpdGhcbiAgfCBFeGl0IC0+IGZhbHNlXG47O1xuXG5sZXQgcmVjIGludGVnZXInIHQgaSA9XG4gIGlmIGVvcyB0XG4gIHRoZW4gU29tZSBpXG4gIGVsc2UgKFxuICAgIG1hdGNoIGdldCB0IHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgZCAtPlxuICAgICAgbGV0IGknID0gKDEwICogaSkgKyAoQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnKSBpblxuICAgICAgaWYgaScgPCBpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBpbnRlZ2VyJyB0IGknXG4gICAgfCBfIC0+XG4gICAgICB1bmdldCB0O1xuICAgICAgU29tZSBpKVxuOztcblxubGV0IGludGVnZXIgdCA9XG4gIGlmIGVvcyB0XG4gIHRoZW4gTm9uZVxuICBlbHNlIChcbiAgICBtYXRjaCBnZXQgdCB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGQgLT4gaW50ZWdlcicgdCAoQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnKVxuICAgIHwgXyAtPlxuICAgICAgdW5nZXQgdDtcbiAgICAgIE5vbmUpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiU3RkbGliIiwiUGFyc2VfZXJyb3IiLCJjcmVhdGUiLCJzdHIiLCJ1bmdldCIsInQiLCJqdW5rIiwiZW9zIiwidGVzdCIsImMiLCJ0ZXN0MiIsImFjY2VwdCIsInIiLCJnZXQiLCJhY2NlcHRfcyIsInMiLCJsZW4iLCJqIiwiZXhuIiwiaW50ZWdlciIsImQiLCJpIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxZQUFBQyxPQUFBQyxLQ09pQixtQkFBZ0I7QUFBQSxZQUFBQyxNQUFBQyxHQUNuQiw4QkFBa0I7QUFBQSxZQUFBQyxLQUFBRCxHQUNuQiw4QkFBa0I7QUFBQSxZQUFBRSxJQUFBRixHQUNuQixvREFBMkI7QUFBQSxZQUFBRyxLQUFBSCxHQUFBSTtBQUFBQSxRQUFBLElBQ25CLGdCQUFPLElBQUs7QUFBQSxJQUFMO0FBQUEsR0FBc0I7QUFBQSxZQUFBQyxNQUFBTCxHQUFBSSxLQUFBQTtBQUFBQSxRQUFBLElBRy9DO0FBQUE7QUFBQTtBQUFBLFVBQW1DO0FBQUEsVUFBYSxJQUFRO0FBQUE7QUFBQSxhQUF4RDtBQUFBO0FBQUEsR0FBOEU7QUFBQSxZQUFBRSxPQUFBTixHQUFBSTtBQUFBQSxRQUFBRyxJQUl0RTtBQUFBLElBQ1IsTUFBVTtBQUFBLElBQ1Y7QUFBQSxHQUFDO0FBQUEsWUFBQUMsSUFBQVI7QUFBQUEsUUFBQU8sSUFJTztBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsR0FBQztBQUFBLFlBQUFFLFNBQUFULEdBQUFVO0FBQUFBLFFBQUFDLE1BSUQ7QUFBQSxJQUNBO0FBQUE7QUFBQTtBQUFBLFVBQUFDLElBQUE7QUFBQTtBQUFBLE9BR0k7QUFBQSxnQkFBaUI7QUFBQSxRQUFWLGdDQUFpQztBQUFBO0FBQUEsYUFBQUMsS0RsQzlDO0FBQUEsZUNrQ007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBR0Y7QUFBQTtBQUFBO0FBQUEsVUFBQUE7QUFBQUEsU0FBQUEsTURyQ0o7QUFBQSwyQkN3Q1k7QUFBQSxLRHhDWjtBQUFBO0FBQUEsR0N3Q2lCO0FBQUEsWUFBQUMsUUFBQWQ7QUFBQUEsSUFrQlosV0FDRTtBQUFBLFFBQUFlLE1BRUc7QUFBQSxJQUFLLHVCQUdULFVBQU87QUFBQSxRQUFBQyxNQUZZLGNBQUFBLElBQUE7QUFBQTtBQUFBLEtBbEJwQixXQUNFO0FBQUEsU0FBQUQsSUFFRztBQUFBLEtBQUsscUJBTVQsVUFBTztBQUFBLFNBQUFDLE1BSlA7QUFBQSxLQUNBLFlBQWU7QUFBQSxLQUFmO0FBQUE7QUFBQSxHQWVLO0FBQUEsR0RqRVgiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNTgyNywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3JlcGxhY2UubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJsZXQgcmVwbGFjZSA/KHBvcyA9IDApID9sZW4gPyhhbGwgPSB0cnVlKSByZSB+ZiBzID1cbiAgaWYgcG9zIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiUmUucmVwbGFjZVwiO1xuICBsZXQgbGltaXQgPVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggc1xuICAgIHwgU29tZSBsIC0+XG4gICAgICBpZiBsIDwgMCB8fCBwb3MgKyBsID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5yZXBsYWNlXCI7XG4gICAgICBwb3MgKyBsXG4gIGluXG4gICgqIGJ1ZmZlciBpbnRvIHdoaWNoIHdlIHdyaXRlIHRoZSByZXN1bHQgKilcbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgKCogaXRlcmF0ZSBvbiBtYXRjaGVkIHN1YnN0cmluZ3MuICopXG4gIGxldCByZWMgaXRlciBwb3Mgb25fbWF0Y2ggPVxuICAgIGlmIHBvcyA8PSBsaW1pdFxuICAgIHRoZW4gKFxuICAgICAgbWF0Y2hcbiAgICAgICAgQ29tcGlsZS5tYXRjaF9zdHIgfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgfnBvcyB+bGVuOihsaW1pdCAtIHBvcylcbiAgICAgIHdpdGhcbiAgICAgIHwgTWF0Y2ggc3Vic3RyIC0+XG4gICAgICAgIGxldCBwMSA9IEdyb3VwLnN0YXJ0X29mZnNldCBzdWJzdHIgMCB8PiBHcm91cC5PZmZzZXQuZ2V0X25vX2NoZWNrIGluXG4gICAgICAgIGxldCBwMiA9IEdyb3VwLnN0b3Bfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgaWYgcG9zID0gcDEgJiYgcDEgPSBwMiAmJiBvbl9tYXRjaFxuICAgICAgICB0aGVuIChcbiAgICAgICAgICAoKiBpZiB3ZSBtYXRjaGVkIGFuIGVtcHR5IHN0cmluZyByaWdodCBhZnRlciBhIG1hdGNoLFxuICAgICAgICAgICAgIHdlIG11c3QgbWFudWFsbHkgYWR2YW5jZSBieSAxICopXG4gICAgICAgICAgaWYgcDIgPCBsaW1pdCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5bcDJdO1xuICAgICAgICAgIGl0ZXIgKHAyICsgMSkgZmFsc2UpXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgICgqIGFkZCBzdHJpbmcgYmV0d2VlbiBwcmV2aW91cyBtYXRjaCBhbmQgY3VycmVudCBtYXRjaCAqKVxuICAgICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGJ1ZiBzIHBvcyAocDEgLSBwb3MpO1xuICAgICAgICAgICgqIHdoYXQgc2hvdWxkIHdlIHJlcGxhY2UgdGhlIG1hdGNoZWQgZ3JvdXAgd2l0aD8gKilcbiAgICAgICAgICBsZXQgcmVwbGFjaW5nID0gZiBzdWJzdHIgaW5cbiAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcmVwbGFjaW5nO1xuICAgICAgICAgIGlmIGFsbFxuICAgICAgICAgIHRoZW5cbiAgICAgICAgICAgICgqIGlmIHdlIG1hdGNoZWQgYW4gZW1wdHkgc3RyaW5nLCB3ZSBtdXN0IG1hbnVhbGx5IGFkdmFuY2UgYnkgMSAqKVxuICAgICAgICAgICAgaXRlclxuICAgICAgICAgICAgICAoaWYgcDEgPSBwMlxuICAgICAgICAgICAgICAgdGhlbiAoXG4gICAgICAgICAgICAgICAgICgqIGEgbm9uIGNoYXIgY291bGQgYmUgcGFzdCB0aGUgZW5kIG9mIHN0cmluZy4gZS5nLiAkICopXG4gICAgICAgICAgICAgICAgIGlmIHAyIDwgbGltaXQgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuW3AyXTtcbiAgICAgICAgICAgICAgICAgcDIgKyAxKVxuICAgICAgICAgICAgICAgZWxzZSBwMilcbiAgICAgICAgICAgICAgKHAxIDw+IHAyKVxuICAgICAgICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYnVmIHMgcDIgKGxpbWl0IC0gcDIpKVxuICAgICAgfCBSdW5uaW5nIF8gLT4gKClcbiAgICAgIHwgRmFpbGVkIC0+IEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGJ1ZiBzIHBvcyAobGltaXQgLSBwb3MpKVxuICBpblxuICBpdGVyIHBvcyBmYWxzZTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuOztcblxubGV0IHJlcGxhY2Vfc3RyaW5nID9wb3MgP2xlbiA/YWxsIHJlIH5ieSBzID0gcmVwbGFjZSA/cG9zID9sZW4gP2FsbCByZSBzIH5mOihmdW4gXyAtPiBieSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiUmVfQ29tcGlsZSIsIlN0ZGxpYl9CdWZmZXIiLCJSZV9Hcm91cCIsIlN0ZGxpYiIsInJlcGxhY2UiLCJsZW4iLCJvcHQiLCJyZSIsInMiLCJwb3MiLCJhbGwiLCJjc3RfUmVfcmVwbGFjZSIsImwiLCJsaW1pdCIsImJ1ZiIsIm9uX21hdGNoIiwibWF0Y2giLCJzdWJzdHIiLCJwMSIsInAyIiwicmVwbGFjaW5nIiwicmVwbGFjZV9zdHJpbmciLCJieSIsInBhcmFtIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxRQUFBLEdBQUFDLEtBQUFDLEtBQUFDLElBQUFWLEdBQUFXO0FBQUFBO0FBQUFBLEtBQUFDLE1DQVk7QUFBQSxLQUFBQyxNQUFBO0FBQUEsS0FBQUMsaUJEQVo7QUFBQSxJQ0NFLFlBQWdCO0FBQUEsSUFDaEI7QUFBQTtBQUFBLE1BQUFDLElBQUE7QUFBQSxVQUlJO0FBQUE7QUFBQSxXQUEyQztBQUFBLFNBQUFDLFFBQzNDO0FBQUE7QUFBQTtBQUFBLFNBQUFBLFFBSFE7QUFBQTtBQUFBLEtBQUFDLE1BTUYsNEJBQVY7QUFBQSxLQUFBTCxRQXNDQTtBQUFBLEtBQUFNLFdBQUE7QUFBQTtBQUFBLEtBbkNFO0FBQUE7QUFBQSxPQUFBQyxRQUdJO0FBQUEsTUFBMEU7QUFBQSxPQThCaEU7QUFBQTtBQUFBO0FBQUEsUUFBQUMsU0E5QmdFO0FBQUEsWUFHakU7QUFBQSxRQUFBQyxLQUFBO0FBQUEsWUFDQTtBQUFBLFFBQUFDLEtBQUE7QUFBQSxPQUNUO0FBQUEsUUFDSztBQUFBLGlCQUdvQztBQUFBLFNBQXBCO0FBQUE7QUFBQSxZQUFBVixRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FHQTtBQUFBLFdBQUFXLFlBRWdCO0FBQUEsT0FDaEI7QUFBQSxPQUErQjtBQUFBLFlBQUFMLGFBSTdCO0FBQUE7QUFBQSxRQUVRO0FBQUEsaUJBRW9DO0FBQUEsU0FBcEI7QUFBQTtBQUFBLFFBQ25CO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FHRjtBQUFBO0FBQUE7QUFBQSxLQUlDLHVDQUNLO0FBQUE7QUFBQTtBQUFBLFlBQUFNLGVBQUFaLEtBQUFKLEtBQUFLLEtBQUFILElBQUFlLElBQUFkO0FBQUFBLElBR3dCLDJDQUFBZSxPQUF5QyxVQUFFLEtBQUM7QUFBQTtBQUFBLEdEcER6RiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM1OTE5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvcG9zaXhfY2xhc3MubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJtb2R1bGUgUmUgPSBDb3JlXG5cbmxldCBvZl9uYW1lID0gZnVuY3Rpb25cbiAgfCBcImFscGhhXCIgLT4gUmUuYWxwaGFcbiAgfCBcImFsbnVtXCIgLT4gUmUuYWxudW1cbiAgfCBcImFzY2lpXCIgLT4gUmUuYXNjaWlcbiAgfCBcImJsYW5rXCIgLT4gUmUuYmxhbmtcbiAgfCBcImNudHJsXCIgLT4gUmUuY250cmxcbiAgfCBcImRpZ2l0XCIgLT4gUmUuZGlnaXRcbiAgfCBcImxvd2VyXCIgLT4gUmUubG93ZXJcbiAgfCBcInByaW50XCIgLT4gUmUucHJpbnRcbiAgfCBcInNwYWNlXCIgLT4gUmUuc3BhY2VcbiAgfCBcInVwcGVyXCIgLT4gUmUudXBwZXJcbiAgfCBcIndvcmRcIiAtPiBSZS53b3JkY1xuICB8IFwicHVuY3RcIiAtPiBSZS5wdW5jdFxuICB8IFwiZ3JhcGhcIiAtPiBSZS5ncmFwaFxuICB8IFwieGRpZ2l0XCIgLT4gUmUueGRpZ2l0XG4gIHwgY2xhc3NfIC0+IGludmFsaWRfYXJnIChcIkludmFsaWQgcGNyZSBjbGFzczogXCIgXiBjbGFzc18pXG47O1xuXG5sZXQgbmFtZXMgPVxuICBbIFwiYWxwaGFcIlxuICA7IFwiYWxudW1cIlxuICA7IFwiYXNjaWlcIlxuICA7IFwiYmxhbmtcIlxuICA7IFwiY250cmxcIlxuICA7IFwiZGlnaXRcIlxuICA7IFwibG93ZXJcIlxuICA7IFwicHJpbnRcIlxuICA7IFwic3BhY2VcIlxuICA7IFwidXBwZXJcIlxuICA7IFwid29yZFwiXG4gIDsgXCJwdW5jdFwiXG4gIDsgXCJncmFwaFwiXG4gIDsgXCJ4ZGlnaXRcIlxuICBdXG47O1xuXG5sZXQgcGFyc2UgYnVmID1cbiAgbGV0IGFjY2VwdCA9IFBhcnNlX2J1ZmZlci5hY2NlcHQgYnVmIGluXG4gIGxldCBhY2NlcHRfcyA9IFBhcnNlX2J1ZmZlci5hY2NlcHRfcyBidWYgaW5cbiAgbWF0Y2ggYWNjZXB0ICc6JyB3aXRoXG4gIHwgZmFsc2UgLT4gTm9uZVxuICB8IHRydWUgLT5cbiAgICBsZXQgY29tcGwgPSBhY2NlcHQgJ14nIGluXG4gICAgbGV0IGNscyA9XG4gICAgICB0cnkgTGlzdC5maW5kIGFjY2VwdF9zIG5hbWVzIHdpdGhcbiAgICAgIHwgTm90X2ZvdW5kIC0+IHJhaXNlIFBhcnNlX2J1ZmZlci5QYXJzZV9lcnJvclxuICAgIGluXG4gICAgaWYgbm90IChhY2NlcHRfcyBcIjpdXCIpIHRoZW4gcmFpc2UgUGFyc2VfYnVmZmVyLlBhcnNlX2Vycm9yO1xuICAgIGxldCBwb3NpeF9jbGFzcyA9IG9mX25hbWUgY2xzIGluXG4gICAgU29tZSAoaWYgY29tcGwgdGhlbiBSZS5jb21wbCBbIHBvc2l4X2NsYXNzIF0gZWxzZSBwb3NpeF9jbGFzcylcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJjc3RfYWxudW0iLCJjc3RfYWxwaGEiLCJjc3RfYXNjaWkiLCJjc3RfYmxhbmsiLCJjc3RfY250cmwiLCJjc3RfZGlnaXQiLCJjc3RfZ3JhcGgiLCJjc3RfbG93ZXIiLCJjc3RfcHJpbnQiLCJjc3RfcHVuY3QiLCJjc3Rfc3BhY2UiLCJjc3RfdXBwZXIiLCJjc3Rfd29yZCIsImNzdF94ZGlnaXQiLCJuYW1lcyIsIlJlX1BhcnNlX2J1ZmZlciIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliIiwiUmVfQ29yZSIsIm9mX25hbWUiLCJjbGFzcyQiLCJzd2l0Y2gkIiwicGFyc2UiLCJidWYiLCJhY2NlcHRfcyIsImNvbXBsIiwiY2xzIiwiZXhuIiwicG9zaXhfY2xhc3MiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLFlBQUFDLFFBQUFDO0FBQUFBLFFBQUFDLFVDRWM7QUFBQTtBQUFBLHNCQU9DO0FBQUEsS0FQRCx5QkFRQztBQUFBLEtBUkQseUJBWUM7QUFBQSxLQVpELHlCQVNDO0FBQUEsS0FURCx5QkFVQztBQUFBLEtBVkQsd0JBV0E7QUFBQSxLQVhBLDBCQWNFO0FBQUE7QUFBQTtBQUFBLEtBZEYseUJBRUM7QUFBQSxLQUZELHlCQUNDO0FBQUEsS0FERCx5QkFHQztBQUFBLEtBSEQseUJBSUM7QUFBQSxLQUpELHlCQUtDO0FBQUEsS0FMRCx5QkFNQztBQUFBLEtBTkQseUJBYUM7QUFBQTtBQUFBLFlBRVc7QUFBQSxJQUFpQztBQUFBO0FBQUEsWUFBQUMsTUFBQUM7QUFBQUEsUUFBQSxJQXNCekQsd0JBQ0E7QUFBQSxhQUFBQyxTQUFBLEdBQWU7QUFBQSxJQURGLGlCQUdGO0FBQUEsUUFBQUMsUUFIRTtBQUFBLElBTVgsUUFBQUMsTUFDTTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLE1EOUNWO0FBQUE7QUFBQSxNQytDcUI7QUFBQSxLRC9DckI7QUFBQTtBQUFBLElDd0NpQjtBQUFBLEtBU2U7QUFBQTtBQUFBLEtBQUFDLGNBQ1Y7QUFBQSxTQUNsQixRQUFvQjtBQUFBLElBQXBCO0FBQUEsR0FBOEQ7QUFBQSxHRG5EbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNjAxOCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3BlcmwubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG5tb2R1bGUgUmUgPSBDb3JlXG5cbmV4Y2VwdGlvbiBQYXJzZV9lcnJvciA9IFBhcnNlX2J1ZmZlci5QYXJzZV9lcnJvclxuZXhjZXB0aW9uIE5vdF9zdXBwb3J0ZWRcblxubGV0IGFjY19kaWdpdHMgPVxuICBsZXQgcmVjIGxvb3AgYmFzZSBkaWdpdHMgYWNjIGkgPVxuICAgIG1hdGNoIGRpZ2l0cyB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGQgOjogZGlnaXRzIC0+XG4gICAgICBsZXQgYWNjID0gYWNjICsgKGQgKiBpKSBpblxuICAgICAgbGV0IGkgPSBpICogaSBpblxuICAgICAgbG9vcCBiYXNlIGRpZ2l0cyBhY2MgaVxuICBpblxuICBmdW4gfmJhc2UgfmRpZ2l0cyAtPiBsb29wIGJhc2UgZGlnaXRzIDAgMVxuOztcblxubGV0IGNoYXJfb2ZfaW50IHggPVxuICBtYXRjaCBjaGFyX29mX2ludCB4IHdpdGhcbiAgfCB4IC0+IHhcbiAgfCBleGNlcHRpb24gXyAtPiByYWlzZSBQYXJzZV9lcnJvclxuOztcblxudHlwZSBlbGVtID1cbiAgfCBDaGFyIG9mIGNoYXJcbiAgfCBTZXQgb2YgQXN0LnRcblxubGV0IGNoYXJfYiA9IENoYXIgJ1xcMDA4J1xubGV0IGNoYXJfbmV3bGluZSA9IENoYXIgJ1xcbidcbmxldCBjaGFyX2NyID0gQ2hhciAnXFxyJ1xubGV0IGNoYXJfdGFiID0gQ2hhciAnXFx0J1xubGV0IHdvcmRfY2hhciA9IFsgUmUuYWxudW07IFJlLmNoYXIgJ18nIF1cbmxldCB3b3JkID0gU2V0IChSZS5hbHQgd29yZF9jaGFyKVxubGV0IG5vdF93b3JkID0gU2V0IChSZS5hbHQgd29yZF9jaGFyKVxubGV0IHNwYWNlID0gU2V0IFJlLnNwYWNlXG5sZXQgbm90X3NwYWNlID0gU2V0IChSZS5jb21wbCBbIFJlLnNwYWNlIF0pXG5sZXQgZGlnaXQgPSBTZXQgUmUuZGlnaXRcbmxldCBub3RfZGlnaXQgPSBTZXQgKFJlLmNvbXBsIFsgUmUuZGlnaXQgXSlcblxubGV0IHBhcnNlIH5tdWx0aWxpbmUgfmRvbGxhcl9lbmRvbmx5IH5kb3RhbGwgfnVuZ3JlZWR5IHMgPVxuICBsZXQgYnVmID0gUGFyc2VfYnVmZmVyLmNyZWF0ZSBzIGluXG4gIGxldCBhY2NlcHQgPSBQYXJzZV9idWZmZXIuYWNjZXB0IGJ1ZiBpblxuICBsZXQgZW9zICgpID0gUGFyc2VfYnVmZmVyLmVvcyBidWYgaW5cbiAgbGV0IHRlc3QgYyA9IFBhcnNlX2J1ZmZlci50ZXN0IGJ1ZiBjIGluXG4gIGxldCB1bmdldCAoKSA9IFBhcnNlX2J1ZmZlci51bmdldCBidWYgaW5cbiAgbGV0IGdldCAoKSA9IFBhcnNlX2J1ZmZlci5nZXQgYnVmIGluXG4gIGxldCBncmVlZHlfbW9kIHIgPVxuICAgIGxldCBnciA9IGFjY2VwdCAnPycgaW5cbiAgICBsZXQgZ3IgPSBpZiB1bmdyZWVkeSB0aGVuIG5vdCBnciBlbHNlIGdyIGluXG4gICAgaWYgZ3IgdGhlbiBSZS5ub25fZ3JlZWR5IHIgZWxzZSBSZS5ncmVlZHkgclxuICBpblxuICBsZXQgcmVjIHJlZ2V4cCAoKSA9IHJlZ2V4cCcgWyBicmFuY2ggKCkgXVxuICBhbmQgcmVnZXhwJyBsZWZ0ID1cbiAgICBpZiBhY2NlcHQgJ3wnIHRoZW4gcmVnZXhwJyAoYnJhbmNoICgpIDo6IGxlZnQpIGVsc2UgUmUuYWx0IChMaXN0LnJldiBsZWZ0KVxuICBhbmQgYnJhbmNoICgpID0gYnJhbmNoJyBbXVxuICBhbmQgYnJhbmNoJyBsZWZ0ID1cbiAgICBpZiBlb3MgKCkgfHwgdGVzdCAnfCcgfHwgdGVzdCAnKSdcbiAgICB0aGVuIFJlLnNlcSAoTGlzdC5yZXYgbGVmdClcbiAgICBlbHNlIGJyYW5jaCcgKHBpZWNlICgpIDo6IGxlZnQpXG4gIGFuZCBpbl9icmFjZSB+ZiB+aW5pdCA9XG4gICAgbWF0Y2ggYWNjZXB0ICd7JyB3aXRoXG4gICAgfCBmYWxzZSAtPiBOb25lXG4gICAgfCB0cnVlIC0+XG4gICAgICBsZXQgcmVjIGxvb3AgYWNjID1cbiAgICAgICAgaWYgYWNjZXB0ICd9J1xuICAgICAgICB0aGVuIGFjY1xuICAgICAgICBlbHNlIChcbiAgICAgICAgICBsZXQgYWNjID0gZiBhY2MgaW5cbiAgICAgICAgICBsb29wIGFjYylcbiAgICAgIGluXG4gICAgICBTb21lIChsb29wIGluaXQpXG4gIGFuZCBwaWVjZSAoKSA9XG4gICAgbGV0IHIgPSBhdG9tICgpIGluXG4gICAgaWYgYWNjZXB0ICcqJ1xuICAgIHRoZW4gZ3JlZWR5X21vZCAoUmUucmVwIHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJysnXG4gICAgdGhlbiBncmVlZHlfbW9kIChSZS5yZXAxIHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJz8nXG4gICAgdGhlbiBncmVlZHlfbW9kIChSZS5vcHQgcilcbiAgICBlbHNlIGlmIGFjY2VwdCAneydcbiAgICB0aGVuIChcbiAgICAgIG1hdGNoIFBhcnNlX2J1ZmZlci5pbnRlZ2VyIGJ1ZiB3aXRoXG4gICAgICB8IFNvbWUgaSAtPlxuICAgICAgICBsZXQgaiA9IGlmIGFjY2VwdCAnLCcgdGhlbiBQYXJzZV9idWZmZXIuaW50ZWdlciBidWYgZWxzZSBTb21lIGkgaW5cbiAgICAgICAgaWYgbm90IChhY2NlcHQgJ30nKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgICAobWF0Y2ggaiB3aXRoXG4gICAgICAgICB8IFNvbWUgaiB3aGVuIGogPCBpIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICAgICB8IF8gLT4gKCkpO1xuICAgICAgICBncmVlZHlfbW9kIChSZS5yZXBuIHIgaSBqKVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIHVuZ2V0ICgpO1xuICAgICAgICByKVxuICAgIGVsc2UgclxuICBhbmQgYXRvbSAoKSA9XG4gICAgaWYgYWNjZXB0ICcuJ1xuICAgIHRoZW4gaWYgZG90YWxsIHRoZW4gUmUuYW55IGVsc2UgUmUubm90bmxcbiAgICBlbHNlIGlmIGFjY2VwdCAnKCdcbiAgICB0aGVuXG4gICAgICBpZiBhY2NlcHQgJz8nXG4gICAgICB0aGVuXG4gICAgICAgIGlmIGFjY2VwdCAnOidcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbGV0IHIgPSByZWdleHAgKCkgaW5cbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnKScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgcilcbiAgICAgICAgZWxzZSBpZiBhY2NlcHQgJyMnXG4gICAgICAgIHRoZW4gY29tbWVudCAoKVxuICAgICAgICBlbHNlIGlmIGFjY2VwdCAnPCdcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbGV0IG5hbWUgPSBuYW1lICgpIGluXG4gICAgICAgICAgbGV0IHIgPSByZWdleHAgKCkgaW5cbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnKScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgUmUuZ3JvdXAgfm5hbWUgcilcbiAgICAgICAgZWxzZSByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCByID0gcmVnZXhwICgpIGluXG4gICAgICAgIGlmIG5vdCAoYWNjZXB0ICcpJykgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgUmUuZ3JvdXAgcilcbiAgICBlbHNlIGlmIGFjY2VwdCAnXidcbiAgICB0aGVuIGlmIG11bHRpbGluZSB0aGVuIFJlLmJvbCBlbHNlIFJlLmJvc1xuICAgIGVsc2UgaWYgYWNjZXB0ICckJ1xuICAgIHRoZW4gaWYgbXVsdGlsaW5lIHRoZW4gUmUuZW9sIGVsc2UgaWYgZG9sbGFyX2VuZG9ubHkgdGhlbiBSZS5sZW9sIGVsc2UgUmUuZW9zXG4gICAgZWxzZSBpZiBhY2NlcHQgJ1snXG4gICAgdGhlbiBpZiBhY2NlcHQgJ14nIHRoZW4gUmUuY29tcGwgKGJyYWNrZXQgW10pIGVsc2UgUmUuYWx0IChicmFja2V0IFtdKVxuICAgIGVsc2UgaWYgYWNjZXB0ICdcXFxcJ1xuICAgIHRoZW4gKFxuICAgICAgKCogWFhYXG4gICAgICAgICAtIEJhY2stcmVmZXJlbmNlc1xuICAgICAgICAgLSBcXGN4IChjb250cm9sLXgpLCBcXGRkZFxuICAgICAgKilcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgJ3cnIC0+IFJlLmFsdCBbIFJlLmFsbnVtOyBSZS5jaGFyICdfJyBdXG4gICAgICB8ICdXJyAtPiBSZS5jb21wbCBbIFJlLmFsbnVtOyBSZS5jaGFyICdfJyBdXG4gICAgICB8ICdzJyAtPiBSZS5zcGFjZVxuICAgICAgfCAnUycgLT4gUmUuY29tcGwgWyBSZS5zcGFjZSBdXG4gICAgICB8ICdkJyAtPiBSZS5kaWdpdFxuICAgICAgfCAnRCcgLT4gUmUuY29tcGwgWyBSZS5kaWdpdCBdXG4gICAgICB8ICdiJyAtPiBSZS5hbHQgWyBSZS5ib3c7IFJlLmVvdyBdXG4gICAgICB8ICdCJyAtPiBSZS5ub3RfYm91bmRhcnlcbiAgICAgIHwgJ0EnIC0+IFJlLmJvc1xuICAgICAgfCAnWicgLT4gUmUubGVvbFxuICAgICAgfCAneicgLT4gUmUuZW9zXG4gICAgICB8ICdHJyAtPiBSZS5zdGFydFxuICAgICAgfCAnZScgLT4gUmUuY2hhciAnXFx4MWInXG4gICAgICB8ICdmJyAtPiBSZS5jaGFyICdcXHgwYydcbiAgICAgIHwgJ24nIC0+IFJlLmNoYXIgJ1xcbidcbiAgICAgIHwgJ3InIC0+IFJlLmNoYXIgJ1xccidcbiAgICAgIHwgJ3QnIC0+IFJlLmNoYXIgJ1xcdCdcbiAgICAgIHwgJ1EnIC0+IHF1b3RlIChCdWZmZXIuY3JlYXRlIDEyKVxuICAgICAgfCAnRScgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgIHwgJ3gnIC0+XG4gICAgICAgIGxldCBjMSwgYzIgPVxuICAgICAgICAgIG1hdGNoIGluX2JyYWNlIH5pbml0OltdIH5mOihmdW4gYWNjIC0+IGhleGRpZ2l0ICgpIDo6IGFjYykgd2l0aFxuICAgICAgICAgIHwgU29tZSBbIGMxOyBjMiBdIC0+IGMxLCBjMlxuICAgICAgICAgIHwgU29tZSBbIGMyIF0gLT4gMCwgYzJcbiAgICAgICAgICB8IFNvbWUgXyAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgbGV0IGMxID0gaGV4ZGlnaXQgKCkgaW5cbiAgICAgICAgICAgIGxldCBjMiA9IGhleGRpZ2l0ICgpIGluXG4gICAgICAgICAgICBjMSwgYzJcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGNvZGUgPSAoYzEgKiAxNikgKyBjMiBpblxuICAgICAgICBSZS5jaGFyIChjaGFyX29mX2ludCBjb2RlKVxuICAgICAgfCAnbycgLT5cbiAgICAgICAgKG1hdGNoXG4gICAgICAgICAgIGluX2JyYWNlIH5pbml0OltdIH5mOihmdW4gYWNjIC0+XG4gICAgICAgICAgICAgbWF0Y2ggbWF5YmVfb2N0YWxkaWdpdCAoKSB3aXRoXG4gICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICAgICAgICAgfCBTb21lIHAgLT4gcCA6OiBhY2MpXG4gICAgICAgICB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgICAgIHwgU29tZSBkaWdpdHMgLT4gUmUuY2hhciAoY2hhcl9vZl9pbnQgKGFjY19kaWdpdHMgfmJhc2U6OCB+ZGlnaXRzKSkpXG4gICAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8ICcwJyAuLiAnNycgYXMgbjEgLT5cbiAgICAgICAgbGV0IG4yID0gbWF5YmVfb2N0YWxkaWdpdCAoKSBpblxuICAgICAgICBsZXQgbjMgPSBtYXliZV9vY3RhbGRpZ2l0ICgpIGluXG4gICAgICAgIChtYXRjaCBuMiwgbjMgd2l0aFxuICAgICAgICAgfCBTb21lIG4yLCBTb21lIG4zIC0+XG4gICAgICAgICAgIGxldCBuMSA9IENoYXIuY29kZSBuMSAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgUmUuY2hhciAoY2hhcl9vZl9pbnQgKChuMSAqICg4ICogOCkpICsgKG4yICogOCkgKyBuMykpXG4gICAgICAgICB8IF8sIF8gLT4gcmFpc2UgTm90X3N1cHBvcnRlZClcbiAgICAgIHwgJzgnIC4uICc5JyAtPiByYWlzZSBOb3Rfc3VwcG9ydGVkXG4gICAgICB8IGMgLT4gUmUuY2hhciBjKVxuICAgIGVsc2UgKFxuICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBtYXRjaCBnZXQgKCkgd2l0aFxuICAgICAgfCAnKicgfCAnKycgfCAnPycgfCAneycgfCAnXFxcXCcgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgIHwgYyAtPiBSZS5jaGFyIGMpXG4gIGFuZCBxdW90ZSBidWYgPVxuICAgIGlmIGFjY2VwdCAnXFxcXCdcbiAgICB0aGVuIChcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgJ0UnIC0+IFJlLnN0ciAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICAgIHwgYyAtPlxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJztcbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgICBxdW90ZSBidWYpXG4gICAgZWxzZSAoXG4gICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKGdldCAoKSk7XG4gICAgICBxdW90ZSBidWYpXG4gIGFuZCBoZXhkaWdpdCAoKSA9XG4gICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgZCAtPiBDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdhJyAuLiAnZicgYXMgZCAtPiBDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgJ0EnIC4uICdGJyBhcyBkIC0+IENoYXIuY29kZSBkIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gIGFuZCBtYXliZV9vY3RhbGRpZ2l0ICgpID1cbiAgICBpZiBlb3MgKClcbiAgICB0aGVuIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICcwJyAuLiAnNycgYXMgZCAtPiBTb21lIChDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnMCcpXG4gICAgICB8IF8gLT4gTm9uZSlcbiAgYW5kIG5hbWUgKCkgPVxuICAgIGlmIGVvcyAoKVxuICAgIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICgnXycgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJykgYXMgYyAtPlxuICAgICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYztcbiAgICAgICAgbmFtZScgYlxuICAgICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yKVxuICBhbmQgbmFtZScgYiA9XG4gICAgaWYgZW9zICgpXG4gICAgdGhlbiByYWlzZSBQYXJzZV9lcnJvclxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgKCdfJyB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JykgYXMgYyAtPlxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgICBuYW1lJyBiXG4gICAgICB8ICc+JyAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yKVxuICBhbmQgYnJhY2tldCBzID1cbiAgICBpZiBzIDw+IFtdICYmIGFjY2VwdCAnXSdcbiAgICB0aGVuIHNcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGNoYXIgKCkgd2l0aFxuICAgICAgfCBTZXQgc3QgLT4gYnJhY2tldCAoc3QgOjogcylcbiAgICAgIHwgQ2hhciBjIC0+XG4gICAgICAgIGlmIGFjY2VwdCAnLSdcbiAgICAgICAgdGhlblxuICAgICAgICAgIGlmIGFjY2VwdCAnXSdcbiAgICAgICAgICB0aGVuIFJlLmNoYXIgYyA6OiBSZS5jaGFyICctJyA6OiBzXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnJhY2tldFxuICAgICAgICAgICAgICAobWF0Y2ggY2hhciAoKSB3aXRoXG4gICAgICAgICAgICAgICB8IENoYXIgYycgLT4gUmUucmcgYyBjJyA6OiBzXG4gICAgICAgICAgICAgICB8IFNldCBzdCcgLT4gUmUuY2hhciBjIDo6IFJlLmNoYXIgJy0nIDo6IHN0JyA6OiBzKVxuICAgICAgICBlbHNlIGJyYWNrZXQgKFJlLmNoYXIgYyA6OiBzKSlcbiAgYW5kIGNoYXIgKCkgPVxuICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgIGxldCBjID0gZ2V0ICgpIGluXG4gICAgaWYgYyA9ICdbJ1xuICAgIHRoZW4gKFxuICAgICAgaWYgYWNjZXB0ICc9JyB0aGVuIHJhaXNlIE5vdF9zdXBwb3J0ZWQ7XG4gICAgICBtYXRjaCBQb3NpeF9jbGFzcy5wYXJzZSBidWYgd2l0aFxuICAgICAgfCBTb21lIHNldCAtPiBTZXQgc2V0XG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgaWYgYWNjZXB0ICcuJ1xuICAgICAgICB0aGVuIChcbiAgICAgICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgICBsZXQgYyA9IGdldCAoKSBpblxuICAgICAgICAgIGlmIG5vdCAoYWNjZXB0ICcuJykgdGhlbiByYWlzZSBOb3Rfc3VwcG9ydGVkO1xuICAgICAgICAgIGlmIG5vdCAoYWNjZXB0ICddJykgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgICBDaGFyIGMpXG4gICAgICAgIGVsc2UgQ2hhciBjKVxuICAgIGVsc2UgaWYgYyA9ICdcXFxcJ1xuICAgIHRoZW4gKFxuICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBsZXQgYyA9IGdldCAoKSBpblxuICAgICAgKCogWFhYXG4gICAgICAgICBcXDEyNywgLi4uXG4gICAgICAqKVxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICdiJyAtPiBjaGFyX2JcbiAgICAgIHwgJ24nIC0+IGNoYXJfbmV3bGluZSAoKlhYWCopXG4gICAgICB8ICdyJyAtPiBjaGFyX2NyICgqWFhYKilcbiAgICAgIHwgJ3QnIC0+IGNoYXJfdGFiICgqWFhYKilcbiAgICAgIHwgJ3cnIC0+IHdvcmRcbiAgICAgIHwgJ1cnIC0+IG5vdF93b3JkXG4gICAgICB8ICdzJyAtPiBzcGFjZVxuICAgICAgfCAnUycgLT4gbm90X3NwYWNlXG4gICAgICB8ICdkJyAtPiBkaWdpdFxuICAgICAgfCAnRCcgLT4gbm90X2RpZ2l0XG4gICAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8ICcwJyAuLiAnOScgLT4gcmFpc2UgTm90X3N1cHBvcnRlZFxuICAgICAgfCBfIC0+IENoYXIgYylcbiAgICBlbHNlIENoYXIgY1xuICBhbmQgY29tbWVudCAoKSA9XG4gICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgaWYgYWNjZXB0ICcpJ1xuICAgIHRoZW4gUmUuZXBzaWxvblxuICAgIGVsc2UgKFxuICAgICAgUGFyc2VfYnVmZmVyLmp1bmsgYnVmO1xuICAgICAgY29tbWVudCAoKSlcbiAgaW5cbiAgbGV0IHJlcyA9IHJlZ2V4cCAoKSBpblxuICBpZiBub3QgKGVvcyAoKSkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgcmVzXG47O1xuXG50eXBlIG9wdCA9XG4gIFsgYFVuZ3JlZWR5XG4gIHwgYERvdGFsbFxuICB8IGBEb2xsYXJfZW5kb25seVxuICB8IGBNdWx0aWxpbmVcbiAgfCBgQW5jaG9yZWRcbiAgfCBgQ2FzZWxlc3NcbiAgXVxuXG5sZXQgcmUgPyhvcHRzID0gW10pIHMgPVxuICBsZXQgciA9XG4gICAgcGFyc2VcbiAgICAgIH5tdWx0aWxpbmU6KExpc3QubWVtcSBgTXVsdGlsaW5lIG9wdHMpXG4gICAgICB+ZG9sbGFyX2VuZG9ubHk6KExpc3QubWVtcSBgRG9sbGFyX2VuZG9ubHkgb3B0cylcbiAgICAgIH5kb3RhbGw6KExpc3QubWVtcSBgRG90YWxsIG9wdHMpXG4gICAgICB+dW5ncmVlZHk6KExpc3QubWVtcSBgVW5ncmVlZHkgb3B0cylcbiAgICAgIHNcbiAgaW5cbiAgbGV0IHIgPSBpZiBMaXN0Lm1lbXEgYEFuY2hvcmVkIG9wdHMgdGhlbiBSZS5zZXEgWyBSZS5zdGFydDsgciBdIGVsc2UgciBpblxuICBsZXQgciA9IGlmIExpc3QubWVtcSBgQ2FzZWxlc3Mgb3B0cyB0aGVuIFJlLm5vX2Nhc2UgciBlbHNlIHIgaW5cbiAgclxuOztcblxubGV0IGNvbXBpbGUgPSBSZS5jb21waWxlXG5sZXQgY29tcGlsZV9wYXQgPyhvcHRzID0gW10pIHMgPSBjb21waWxlIChyZSB+b3B0cyBzKVxuXG5sZXQgcmVfcmVzdWx0ID9vcHRzIHMgPVxuICBtYXRjaCByZSA/b3B0cyBzIHdpdGhcbiAgfCBzIC0+IE9rIHNcbiAgfCBleGNlcHRpb24gTm90X3N1cHBvcnRlZCAtPiBFcnJvciBgTm90X3N1cHBvcnRlZFxuICB8IGV4Y2VwdGlvbiBQYXJzZV9lcnJvciAtPiBFcnJvciBgUGFyc2VfZXJyb3Jcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9MaXN0IiwiUmVfQ29yZSIsIlJlX1BhcnNlX2J1ZmZlciIsIlN0ZGxpYl9CdWZmZXIiLCJSZV9Qb3NpeF9jbGFzcyIsIlN0ZGxpYiIsIlBhcnNlX2Vycm9yIiwiTm90X3N1cHBvcnRlZCIsImNoYXJfb2ZfaW50IiwieCIsImV4biIsIndvcmRfY2hhciIsIndvcmQiLCJub3Rfd29yZCIsInNwYWNlIiwibm90X3NwYWNlIiwiZGlnaXQiLCJub3RfZGlnaXQiLCJjaGFyX2IiLCJjaGFyX25ld2xpbmUiLCJjaGFyX2NyIiwiY2hhcl90YWIiLCJyZSIsIm9wdCIsInMiLCJvcHRzIiwidW5ncmVlZHkiLCJkb3RhbGwiLCJkb2xsYXJfZW5kb25seSIsIm11bHRpbGluZSIsImJ1ZiIsImVvcyIsInBhcmFtIiwidGVzdCIsImMiLCJnZXQiLCJncmVlZHlfbW9kIiwiciIsImdyIiwicmVnZXhwIiwibGVmdCIsImJyYW5jaCIsIm1hdGNoIiwiaSIsImoiLCJhdG9tIiwibjEiLCJzd2l0Y2hlciIsImFjYyIsInAiLCJkaWdpdHMiLCJkIiwiYzEiLCJjMiIsImNvZGUiLCJuMiIsIm4zIiwiYiIsIm5hbWUiLCJoZXhkaWdpdCIsIm1heWJlX29jdGFsZGlnaXQiLCJicmFja2V0Iiwic3QiLCJjaGFyIiwic2V0IiwicmVzIiwiY29tcGlsZSIsImNvbXBpbGVfcGF0IiwicmVfcmVzdWx0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFB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S0RyVy9CLHdCQ3NXNkI7QUFBQSxLRHRXN0I7QUFBQTtBQUFBLElDb1dTO0FBQUEsR0FFc0M7QUFBQSxHQTNTSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzRDNDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzY1MjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wY3JlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIFJlID0gQ29yZVxuXG5leGNlcHRpb24gUGFyc2VfZXJyb3IgPSBQZXJsLlBhcnNlX2Vycm9yXG5leGNlcHRpb24gTm90X3N1cHBvcnRlZCA9IFBlcmwuTm90X3N1cHBvcnRlZFxuXG50eXBlIHJlZ2V4cCA9IFJlLnJlXG5cbnR5cGUgZmxhZyA9XG4gIFsgYENBU0VMRVNTXG4gIHwgYE1VTFRJTElORVxuICB8IGBBTkNIT1JFRFxuICB8IGBET1RBTExcbiAgXVxuXG50eXBlIHNwbGl0X3Jlc3VsdCA9XG4gIHwgVGV4dCBvZiBzdHJpbmdcbiAgfCBEZWxpbSBvZiBzdHJpbmdcbiAgfCBHcm91cCBvZiBpbnQgKiBzdHJpbmdcbiAgfCBOb0dyb3VwXG5cbnR5cGUgZ3JvdXBzID0gQ29yZS5Hcm91cC50XG5cbmxldCByZSA/KGZsYWdzID0gW10pIHBhdCA9XG4gIGxldCBvcHRzID1cbiAgICBMaXN0Lm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgYENBU0VMRVNTIC0+IGBDYXNlbGVzc1xuICAgICAgICB8IGBNVUxUSUxJTkUgLT4gYE11bHRpbGluZVxuICAgICAgICB8IGBBTkNIT1JFRCAtPiBgQW5jaG9yZWRcbiAgICAgICAgfCBgRE9UQUxMIC0+IGBEb3RhbGwpXG4gICAgICBmbGFnc1xuICBpblxuICBQZXJsLnJlIH5vcHRzIHBhdFxuOztcblxubGV0IHJlX3Jlc3VsdCA/ZmxhZ3MgcyA9XG4gIG1hdGNoIHJlID9mbGFncyBzIHdpdGhcbiAgfCBzIC0+IE9rIHNcbiAgfCBleGNlcHRpb24gTm90X3N1cHBvcnRlZCAtPiBFcnJvciBgTm90X3N1cHBvcnRlZFxuICB8IGV4Y2VwdGlvbiBQYXJzZV9lcnJvciAtPiBFcnJvciBgUGFyc2VfZXJyb3Jcbjs7XG5cbmxldCByZWdleHAgP2ZsYWdzIHBhdCA9IFJlLmNvbXBpbGUgKHJlID9mbGFncyBwYXQpXG5sZXQgZXh0cmFjdCB+cmV4IHMgPSBSZS5Hcm91cC5hbGwgKFJlLmV4ZWMgcmV4IHMpXG5sZXQgZXhlYyB+cmV4ID9wb3MgcyA9IFJlLmV4ZWMgcmV4ID9wb3Mgc1xubGV0IG5hbWVzIHJleCA9IFJlLmdyb3VwX25hbWVzIHJleCB8PiBMaXN0Lm1hcCBmc3QgfD4gQXJyYXkub2ZfbGlzdFxuXG5sZXQgZ2V0X25hbWVkX3N1YnN0cmluZ19vcHQgcmV4IG5hbWUgcyA9XG4gIGxldCByZWMgbG9vcCA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCAobiwgaSkgOjogcmVtIHdoZW4gbiA9IG5hbWUgLT5cbiAgICAgIChtYXRjaCBSZS5Hcm91cC5nZXRfb3B0IHMgaSB3aXRoXG4gICAgICAgfCBOb25lIC0+IGxvb3AgcmVtXG4gICAgICAgfCBTb21lIF8gYXMgcyAtPiBzKVxuICAgIHwgXyA6OiByZW0gLT4gbG9vcCByZW1cbiAgaW5cbiAgbG9vcCAoUmUuZ3JvdXBfbmFtZXMgcmV4KVxuOztcblxubGV0IGdldF9zdWJzdHJpbmdfb2ZzIHMgaSA9IFJlLkdyb3VwLm9mZnNldCBzIGlcbmxldCBwbWF0Y2ggfnJleCBzID0gUmUuZXhlY3AgcmV4IHNcblxubGV0IHN1YnN0aXR1dGUgfnJleCB+c3Vic3Qgc3RyID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgbGV0IHJlYyBsb29wIHBvcyBvbl9tYXRjaCA9XG4gICAgaWYgUmUuZXhlY3AgfnBvcyByZXggc3RyXG4gICAgdGhlbiAoXG4gICAgICBsZXQgc3MgPSBSZS5leGVjIH5wb3MgcmV4IHN0ciBpblxuICAgICAgbGV0IHN0YXJ0LCBmaW4gPSBSZS5Hcm91cC5vZmZzZXQgc3MgMCBpblxuICAgICAgaWYgb25fbWF0Y2ggJiYgc3RhcnQgPSBwb3MgJiYgc3RhcnQgPSBmaW5cbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiAoKiBFbXB0eSBtYXRjaCBmb2xsb3dpbmcgYSBtYXRjaCAqKVxuICAgICAgICAgICBwb3MgPCBTdHJpbmcubGVuZ3RoIHN0clxuICAgICAgICB0aGVuIChcbiAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiBzdHIuW3Bvc107XG4gICAgICAgICAgbG9vcCAocG9zICsgMSkgZmFsc2UpKVxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBwYXQgPSBSZS5Hcm91cC5nZXQgc3MgMCBpblxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHN0ciBwb3MgKHN0YXJ0IC0gcG9zKTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiAoc3Vic3QgcGF0KTtcbiAgICAgICAgaWYgc3RhcnQgPSBmaW5cbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgaWYgKCogTWFudWFsbHkgYWR2YW5jZSBieSBvbmUgYWZ0ZXIgYW4gZW1wdHkgbWF0Y2ggKilcbiAgICAgICAgICAgICBmaW4gPCBTdHJpbmcubGVuZ3RoIHN0clxuICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgc3RyLltmaW5dO1xuICAgICAgICAgICAgbG9vcCAoZmluICsgMSkgZmFsc2UpKVxuICAgICAgICBlbHNlIGxvb3AgZmluIHRydWUpKVxuICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzdHIgcG9zIChTdHJpbmcubGVuZ3RoIHN0ciAtIHBvcylcbiAgaW5cbiAgbG9vcCAwIGZhbHNlO1xuICBCdWZmZXIuY29udGVudHMgYlxuOztcblxubGV0IHNwbGl0IH5yZXggcyA9XG4gIGxldCByZWMgc3BsaXQgYWNjdSBzdGFydCA9XG4gICAgaWYgc3RhcnQgPSBTdHJpbmcubGVuZ3RoIHNcbiAgICB0aGVuIGFjY3VcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoXG4gICAgICAgIGxldCBnID0gUmUuZXhlYyByZXggcyB+cG9zOnN0YXJ0IGluXG4gICAgICAgIGlmIEdyb3VwLnN0b3AgZyAwID0gc3RhcnQgdGhlbiBSZS5leGVjIHJleCBzIH5wb3M6KHN0YXJ0ICsgMSkgZWxzZSBnXG4gICAgICB3aXRoXG4gICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gU3RyaW5nLnN1YiBzIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMgLSBzdGFydCkgOjogYWNjdVxuICAgICAgfCBnIC0+XG4gICAgICAgIGxldCBuZXh0ID0gR3JvdXAuc3RvcCBnIDAgaW5cbiAgICAgICAgc3BsaXQgKFN0cmluZy5zdWIgcyBzdGFydCAoR3JvdXAuc3RhcnQgZyAwIC0gc3RhcnQpIDo6IGFjY3UpIG5leHQpXG4gIGluXG4gIG1hdGNoIFJlLmV4ZWMgcmV4IHMgfnBvczowIHdpdGhcbiAgfCBnIC0+XG4gICAgTGlzdC5yZXZcbiAgICAgIChpZiBHcm91cC5zdGFydCBnIDAgPSAwXG4gICAgICAgdGhlbiBzcGxpdCBbXSAoR3JvdXAuc3RvcCBnIDApXG4gICAgICAgZWxzZSBzcGxpdCBbIFN0cmluZy5zdWIgcyAwIChHcm91cC5zdGFydCBnIDApIF0gKEdyb3VwLnN0b3AgZyAwKSlcbiAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGlmIHMgPSBcIlwiIHRoZW4gW10gZWxzZSBbIHMgXVxuOztcblxuKCogRnJvbSBQQ1JFICopXG5sZXQgc3RyaW5nX3Vuc2FmZV9zdWIgcyBvZnMgbGVuID1cbiAgbGV0IHIgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gIEJ5dGVzLnVuc2FmZV9ibGl0IHMgb2ZzIHIgMCBsZW47XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgclxuOztcblxubGV0IHF1b3RlIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKGxlbiBsc2wgMSkgaW5cbiAgbGV0IHBvcyA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICB8ICgnXFxcXCcgfCAnXicgfCAnJCcgfCAnLicgfCAnWycgfCAnfCcgfCAnKCcgfCAnKScgfCAnPycgfCAnKicgfCAnKycgfCAneycpIGFzIGMgLT5cbiAgICAgIEJ5dGVzLnVuc2FmZV9zZXQgYnVmICFwb3MgJ1xcXFwnO1xuICAgICAgaW5jciBwb3M7XG4gICAgICBCeXRlcy51bnNhZmVfc2V0IGJ1ZiAhcG9zIGM7XG4gICAgICBpbmNyIHBvc1xuICAgIHwgYyAtPlxuICAgICAgQnl0ZXMudW5zYWZlX3NldCBidWYgIXBvcyBjO1xuICAgICAgaW5jciBwb3NcbiAgZG9uZTtcbiAgc3RyaW5nX3Vuc2FmZV9zdWIgYnVmIDAgIXBvc1xuOztcblxubGV0IGZ1bGxfc3BsaXQgPyhtYXggPSAwKSB+cmV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPSAwXG4gIHRoZW4gW11cbiAgZWxzZSBpZiBtYXggPSAxXG4gIHRoZW4gWyBUZXh0IHMgXVxuICBlbHNlIChcbiAgICBsZXQgcmVzdWx0cyA9IFJlLnNwbGl0X2Z1bGwgcmV4IHMgaW5cbiAgICBsZXQgbWF0Y2hlcyA9XG4gICAgICBMaXN0Lm1hcFxuICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICB8IGBUZXh0IHMgLT4gWyBUZXh0IHMgXVxuICAgICAgICAgIHwgYERlbGltIGQgLT5cbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gUmUuR3JvdXAuYWxsX29mZnNldCBkIGluXG4gICAgICAgICAgICBsZXQgZGVsaW0gPSBSZS5Hcm91cC5nZXQgZCAwIGluXG4gICAgICAgICAgICBEZWxpbSBkZWxpbVxuICAgICAgICAgICAgOjpcbiAgICAgICAgICAgIChsZXQgbCA9IHJlZiBbXSBpblxuICAgICAgICAgICAgIGZvciBpID0gMSB0byBBcnJheS5sZW5ndGggbWF0Y2hlcyAtIDEgZG9cbiAgICAgICAgICAgICAgIGxcbiAgICAgICAgICAgICAgIDo9IChpZiBtYXRjaGVzLihpKSA9ICgtMSwgLTEpIHRoZW4gTm9Hcm91cCBlbHNlIEdyb3VwIChpLCBSZS5Hcm91cC5nZXQgZCBpKSlcbiAgICAgICAgICAgICAgICAgIDo6ICFsXG4gICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICBMaXN0LnJldiAhbCkpXG4gICAgICAgIHJlc3VsdHNcbiAgICBpblxuICAgIExpc3QuY29uY2F0IG1hdGNoZXMpXG47O1xuXG50eXBlIHN1YnN0cmluZ3MgPSBHcm91cC50XG5cbmxldCBnZXRfc3Vic3RyaW5nIHMgaSA9IFJlLkdyb3VwLmdldCBzIGlcblxubGV0IGdldF9uYW1lZF9zdWJzdHJpbmcgcmV4IG5hbWUgcyA9XG4gIG1hdGNoIGdldF9uYW1lZF9zdWJzdHJpbmdfb3B0IHJleCBuYW1lIHMgd2l0aFxuICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgU29tZSBzIC0+IHNcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlJlX0NvcmUiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9CeXRlcyIsIlJlX0dyb3VwIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfQXJyYXkiLCJSZV9QZXJsIiwiUGFyc2VfZXJyb3IiLCJOb3Rfc3VwcG9ydGVkIiwicmUiLCJvcHQiLCJwYXQiLCJmbGFncyIsIm9wdHMiLCJwYXJhbSIsInJlX3Jlc3VsdCIsInMiLCJleG4iLCJyZWdleHAiLCJleHRyYWN0IiwicmV4IiwiZXhlYyIsInBvcyIsIm5hbWVzIiwiZ2V0X25hbWVkX3N1YnN0cmluZ19vcHQiLCJuYW1lIiwibWF0Y2giLCJyZW0iLCJpIiwibiIsImdldF9zdWJzdHJpbmdfb2ZzIiwicG1hdGNoIiwic3Vic3RpdHV0ZSIsInN1YnN0Iiwic3RyIiwiYiIsIm9uX21hdGNoIiwic3MiLCJmaW4iLCJzdGFydCIsInNwbGl0IiwiYWNjdSIsImciLCJxdW90ZSIsImxlbiIsImJ1ZiIsImMiLCJyIiwiZnVsbF9zcGxpdCIsIm1heCIsInJlc3VsdHMiLCJtYXRjaGVzIiwidmFyaWFudCIsImQiLCJkZWxpbSIsImwiLCJnZXRfc3Vic3RyaW5nIiwiZ2V0X25hbWVkX3N1YnN0cmluZyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsWUFBQUMsR0FBQUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQUMsUUNzQk87QUFBQSxLQUFBQztBQUFBQSxPQUVIO0FBQUE7QUFBQSxrQkFBQUM7QUFBQUEsVUFDRTtB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ckMsS0FBQUssTUFBQVQ7QUFBQUEsUUFBQVUsUUFHaEM7QUFBQSxJQUFrQyxZQUM5QjtBQUFBLFFBQUFWLE1BRDhCO0FBQUEsSUFFNUI7QUFBQSxHQUFDO0FBQUEsR0RqTGYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNjgyMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlJlX0NvcmUiLCJSZV9SZXBsYWNlIiwiR3JvdXAiLCJjb21waWxlIiwiZ3JvdXBfY291bnQiLCJncm91cF9uYW1lcyIsImV4ZWMiLCJleGVjX29wdCIsImV4ZWNwIiwiZXhlY19wYXJ0aWFsIiwiZXhlY19wYXJ0aWFsX2RldGFpbGVkIiwiTWFyayIsImFsbCIsImFsbF9nZW4iLCJhbGxfc2VxIiwibWF0Y2hlcyIsIm1hdGNoZXNfZ2VuIiwibWF0Y2hlc19zZXEiLCJzcGxpdCIsInNwbGl0X2RlbGltIiwic3BsaXRfZ2VuIiwic3BsaXRfc2VxIiwic3BsaXRfZnVsbCIsInNwbGl0X2Z1bGxfZ2VuIiwic3BsaXRfZnVsbF9zZXEiLCJTZXEiLCJzdHIiLCJjaGFyIiwiYWx0Iiwic2VxIiwiZW1wdHkiLCJlcHNpbG9uIiwicmVwIiwicmVwMSIsInJlcG4iLCJvcHQiLCJib2wiLCJlb2wiLCJib3ciLCJlb3ciLCJib3MiLCJlb3MiLCJsZW9sIiwic3RhcnQiLCJzdG9wIiwid29yZCIsIm5vdF9ib3VuZGFyeSIsIndob2xlX3N0cmluZyIsImxvbmdlc3QiLCJzaG9ydGVzdCIsImZpcnN0IiwiZ3JlZWR5Iiwibm9uX2dyZWVkeSIsImdyb3VwIiwibm9fZ3JvdXAiLCJuZXN0IiwibWFyayIsInNldCIsInJnIiwiaW50ZXIiLCJkaWZmIiwiY29tcGwiLCJhbnkiLCJub3RubCIsImFsbnVtIiwid29yZGMiLCJhbHBoYSIsImFzY2lpIiwiYmxhbmsiLCJjbnRybCIsImRpZ2l0IiwiZ3JhcGgiLCJsb3dlciIsInByaW50IiwicHVuY3QiLCJzcGFjZSIsInVwcGVyIiwieGRpZ2l0IiwiY2FzZSQiLCJub19jYXNlIiwicHAiLCJwcF9yZSIsInByaW50X3JlIiwid2l0bmVzcyIsImdldCIsImdldF9vZnMiLCJnZXRfYWxsIiwiZ2V0X2FsbF9vZnMiLCJ0ZXN0IiwibWFya2VkIiwibWFya19zZXQiLCJTdHJlYW0iLCJyZXBsYWNlIiwicmVwbGFjZV9zdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxLQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGlCQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzcwMjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5peC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2RpbV8xIiwiY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zeXNfZXhpdCIsImNhbWxfdW5peF9jbG9zZSIsImNhbWxfdW5peF9nZXRwd25hbSIsImNhbWxfdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlcyIsImNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIiwiY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlIiwiY2FtbF91bml4X3dyaXRlX2JpZ2FycmF5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInVuaXhfZXJyb3JfbWVzc2FnZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX011dGV4IiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfRnVuIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQ2FsbGJhY2siLCJTdGRsaWJfUHJpbnRleGMiLCJjc3RfVW5peF9Vbml4X2Vycm9yIiwiVW5peF9lcnJvciIsImNzdCIsInBhcmFtIiwicyIsImUiLCJtc2ciLCJ4IiwiaGFuZGxlX3VuaXhfZXJyb3IiLCJhcmciLCJleG4iLCJmdW5fbmFtZSIsImVyciIsInJlYWQiLCJmZCIsImJ1ZiIsIm9mcyIsImxlbiIsInJlYWRfYmlnYXJyYXkiLCJ3cml0ZSIsIndyaXRlX2JpZ2FycmF5Iiwic2luZ2xlX3dyaXRlIiwic2luZ2xlX3dyaXRlX2JpZ2FycmF5Iiwid3JpdGVfc3Vic3RyaW5nIiwic2luZ2xlX3dyaXRlX3N1YnN0cmluZyIsIm1hcF9maWxlIiwib3B0Iiwia2luZCIsImxheW91dCIsInNoYXJlZCIsImRpbXMiLCJwb3MiLCJwYXVzZSIsInNpZ3MiLCJzbGVlcCIsImR1cmF0aW9uIiwiaXNfaW5ldDZfYWRkciIsImNzdF8wXzBfMF8wIiwiaW5ldF9hZGRyX2FueSIsImNzdF8xMjdfMF8wXzEiLCJpbmV0X2FkZHJfbG9vcGJhY2siLCJpbmV0Nl9hZGRyX2FueSIsImluZXQ2X2FkZHJfbG9vcGJhY2siLCJkb21haW5fb2Zfc29ja2FkZHIiLCJhIiwicmVjdiIsImZsYWdzIiwicmVjdmZyb20iLCJzZW5kIiwic2VuZHRvIiwiYWRkciIsInNlbmRfc3Vic3RyaW5nIiwic2VuZHRvX3N1YnN0cmluZyIsImdldHNvY2tvcHQiLCJzZXRzb2Nrb3B0IiwidiIsImdldHNvY2tvcHRfaW50Iiwic2V0c29ja29wdF9pbnQiLCJnZXRzb2Nrb3B0X29wdGludCIsInNldHNvY2tvcHRfb3B0aW50IiwiZ2V0c29ja29wdF9mbG9hdCIsInNldHNvY2tvcHRfZmxvYXQiLCJnZXRzb2Nrb3B0X2Vycm9yIiwiY3N0X3RjcCIsImNzdF91ZHAiLCJnZXRhZGRyaW5mbyIsIm5vZGUiLCJzZXJ2aWNlIiwib3B0cyIsIm9wdF9zb2NrdHlwZSIsIm9wdF9wcm90b2NvbCIsInAiLCJnZXRfcG9ydCIsInR5IiwibWF0Y2giLCJwb3J0cyIsImFkZHJlc3NlcyIsInBvcnQiLCJuYW1lIiwiZ2V0bmFtZWluZm8iLCJob3N0bmFtZSIsIndhaXRwaWRfbm9uX2ludHIiLCJwaWQiLCJjcmVhdGVfcHJvY2Vzc19nZW4iLCJjbWQiLCJhcmdzIiwib3B0ZW52IiwibmV3X3N0ZGluIiwibmV3X3N0ZG91dCIsIm5ld19zdGRlcnIiLCJ0b2Nsb3NlIiwiY2xvc2VfYWZ0ZXIiLCJmaWxlX2Rlc2NyX25vdF9zdGFuZGFyZCIsInJlZGlyZWN0aW9ucyIsImNyZWF0ZV9wcm9jZXNzIiwiY3JlYXRlX3Byb2Nlc3NfZW52IiwiZW52IiwiY3N0X2MiLCJjc3RfYmluX3NoIiwic2hlbGwiLCJzeXN0ZW0iLCJwb3Blbl9wcm9jZXNzZXMiLCJwb3Blbl9tdXRleCIsIm9wZW5fcHJvYyIsInByb2ciLCJlbnZvcHQiLCJwcm9jIiwiaW5wdXQiLCJvdXRwdXQiLCJlcnJvciIsInN0ZGluIiwic3RkZXJyIiwib3Blbl9wcm9jZXNzX2FyZ3NfaW4iLCJpbl93cml0ZSIsImluX3JlYWQiLCJpbmNoYW4iLCJzdGRvdXQiLCJvcGVuX3Byb2Nlc3NfYXJnc19vdXQiLCJvdXRfd3JpdGUiLCJvdXRfcmVhZCIsIm91dGNoYW4iLCJvcGVuX3Byb2Nlc3NfYXJncyIsIm9wZW5fcHJvY2Vzc19hcmdzX2Z1bGwiLCJlcnJfd3JpdGUiLCJlcnJfcmVhZCIsImVycmNoYW4iLCJvcGVuX3Byb2Nlc3Nfc2hlbGwiLCJmbiIsIm9wZW5fcHJvY2Vzc19pbiIsIm9wZW5fcHJvY2Vzc19vdXQiLCJvcGVuX3Byb2Nlc3MiLCJvcGVuX3Byb2Nlc3NfZnVsbCIsImZpbmRfcHJvY19pZCIsInJlbW92ZV9wcm9jX2lkIiwicHJvY2Vzc19pbl9waWQiLCJwcm9jZXNzX291dF9waWQiLCJwcm9jZXNzX3BpZCIsInByb2Nlc3NfZnVsbF9waWQiLCJjbG9zZV9wcm9jZXNzX2luIiwiY2xvc2VfcHJvY2Vzc19vdXQiLCJjbG9zZV9wcm9jZXNzIiwiY2xvc2VfcHJvY2Vzc19mdWxsIiwib3Blbl9jb25uZWN0aW9uIiwic29ja2FkZHIiLCJzb2NrIiwic2h1dGRvd25fY29ubmVjdGlvbiIsImVzdGFibGlzaF9zZXJ2ZXIiLCJzZXJ2ZXJfZnVuIiwiaWQiLCJVbml4Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsZ0NBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLDJCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxHQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLFFBQUE7QUFBQTtBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQUEsTUFBQSw0QkFBQTtBQUFBLFVBQUFDLElBQUEsVUFBQUEsTUFBQSxVQUFBQyxJQUFBO0FBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUMsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBLHVCQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUEsdUJBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBQyxJQUFBLE1BQUFELE1BQUE7QUFBQSxNQUFBLG1FQUFBO0FBQUEsS0FBQTtBQUFBLFlBQUFFLGtCQUFBekIsR0FBQTBCO0FBQUFBLElBQUEsWUFBQTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUEsTUFBQUQsUUFBQTtBQUFBLE1BQUFFLFdBQUE7QUFBQSxNQUFBQyxNQUFBO0FBQUEsVUFBQSx5QkFBQTtBQUFBO0FBQUEsS0FBQTtBQUFBLEtBQUE7QUFBQSxLQUFBO0FBQUEsS0FBQTtBQUFBLE1BQUE7QUFBQSxNQUFBO0FBQUEsTUFBQTtBQUFBO0FBQUEsS0FBQTtBQUFBLGFBQUE7QUFBQSxLQUFBO0FBQUEsS0FBQSwrQkFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBO0FBQUEsWUFBQUMsS0FBQUMsSUFBQUMsS0FBQUMsS0FBQUM7QUFBQUEsSUFBQTtBQUFBLEtBQUEsZ0RBQUE7QUFBQSxJQUFBLHdD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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUE7QUFBQTtBQUFBLEVBQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozODA1MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJ1bml4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiXSwibmFtZXMiOlsicnVudGltZSIsIlVuaXgiLCJVbml4X2Vycm9yIiwiZXJyb3JfbWVzc2FnZSIsImhhbmRsZV91bml4X2Vycm9yIiwiZW52aXJvbm1lbnQiLCJ1bnNhZmVfZW52aXJvbm1lbnQiLCJnZXRlbnYiLCJ1bnNhZmVfZ2V0ZW52IiwicHV0ZW52IiwiZXhlY3YiLCJleGVjdmUiLCJleGVjdnAiLCJleGVjdnBlIiwiZm9yayIsIndhaXQiLCJ3YWl0cGlkIiwic3lzdGVtIiwiZXhpdCIsImdldHBpZCIsImdldHBwaWQiLCJuaWNlIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuZmlsZSIsImNsb3NlIiwiZnN5bmMiLCJyZWFkIiwicmVhZF9iaWdhcnJheSIsIndyaXRlIiwid3JpdGVfYmlnYXJyYXkiLCJzaW5nbGVfd3JpdGUiLCJ3cml0ZV9zdWJzdHJpbmciLCJzaW5nbGVfd3JpdGVfc3Vic3RyaW5nIiwic2luZ2xlX3dyaXRlX2JpZ2FycmF5IiwiaW5fY2hhbm5lbF9vZl9kZXNjciIsIm91dF9jaGFubmVsX29mX2Rlc2NyIiwiZGVzY3Jfb2ZfaW5fY2hhbm5lbCIsImRlc2NyX29mX291dF9jaGFubmVsIiwibHNlZWsiLCJ0cnVuY2F0ZSIsImZ0cnVuY2F0ZSIsInN0YXQiLCJsc3RhdCIsImZzdGF0IiwiaXNhdHR5IiwiTGFyZ2VGaWxlIiwibWFwX2ZpbGUiLCJ1bmxpbmsiLCJyZW5hbWUiLCJsaW5rIiwicmVhbHBhdGgiLCJjaG1vZCIsImZjaG1vZCIsImNob3duIiwiZmNob3duIiwidW1hc2siLCJhY2Nlc3MiLCJkdXAiLCJkdXAyIiwic2V0X25vbmJsb2NrIiwiY2xlYXJfbm9uYmxvY2siLCJzZXRfY2xvc2Vfb25fZXhlYyIsImNsZWFyX2Nsb3NlX29uX2V4ZWMiLCJta2RpciIsInJtZGlyIiwiY2hkaXIiLCJnZXRjd2QiLCJjaHJvb3QiLCJvcGVuZGlyIiwicmVhZGRpciIsInJld2luZGRpciIsImNsb3NlZGlyIiwicGlwZSIsIm1rZmlmbyIsImNyZWF0ZV9wcm9jZXNzIiwiY3JlYXRlX3Byb2Nlc3NfZW52Iiwib3Blbl9wcm9jZXNzX2luIiwib3Blbl9wcm9jZXNzX291dCIsIm9wZW5fcHJvY2VzcyIsIm9wZW5fcHJvY2Vzc19mdWxsIiwib3Blbl9wcm9jZXNzX2FyZ3MiLCJvcGVuX3Byb2Nlc3NfYXJnc19pbiIsIm9wZW5fcHJvY2Vzc19hcmdzX291dCIsIm9wZW5fcHJvY2Vzc19hcmdzX2Z1bGwiLCJwcm9jZXNzX2luX3BpZCIsInByb2Nlc3Nfb3V0X3BpZCIsInByb2Nlc3NfcGlkIiwicHJvY2Vzc19mdWxsX3BpZCIsImNsb3NlX3Byb2Nlc3NfaW4iLCJjbG9zZV9wcm9jZXNzX291dCIsImNsb3NlX3Byb2Nlc3MiLCJjbG9zZV9wcm9jZXNzX2Z1bGwiLCJzeW1saW5rIiwiaGFzX3N5bWxpbmsiLCJyZWFkbGluayIsInNlbGVjdCIsImxvY2tmIiwia2lsbCIsInNpZ3Byb2NtYXNrIiwic2lncGVuZGluZyIsInNpZ3N1c3BlbmQiLCJwYXVzZSIsInRpbWUiLCJnZXR0aW1lb2ZkYXkiLCJnbXRpbWUiLCJsb2NhbHRpbWUiLCJta3RpbWUiLCJhbGFybSIsInNsZWVwIiwic2xlZXBmIiwidGltZXMiLCJ1dGltZXMiLCJnZXRpdGltZXIiLCJzZXRpdGltZXIiLCJnZXR1aWQiLCJnZXRldWlkIiwic2V0dWlkIiwiZ2V0Z2lkIiwiZ2V0ZWdpZCIsInNldGdpZCIsImdldGdyb3VwcyIsInNldGdyb3VwcyIsImluaXRncm91cHMiLCJnZXRsb2dpbiIsImdldHB3bmFtIiwiZ2V0Z3JuYW0iLCJnZXRwd3VpZCIsImdldGdyZ2lkIiwiaW5ldF9hZGRyX29mX3N0cmluZyIsInN0cmluZ19vZl9pbmV0X2FkZHIiLCJpbmV0X2FkZHJfYW55IiwiaW5ldF9hZGRyX2xvb3BiYWNrIiwiaW5ldDZfYWRkcl9hbnkiLCJpbmV0Nl9hZGRyX2xvb3BiYWNrIiwiaXNfaW5ldDZfYWRkciIsInNvY2tldCIsImRvbWFpbl9vZl9zb2NrYWRkciIsInNvY2tldHBhaXIiLCJhY2NlcHQiLCJiaW5kIiwiY29ubmVjdCIsImxpc3RlbiIsInNodXRkb3duIiwiZ2V0c29ja25hbWUiLCJnZXRwZWVybmFtZSIsInJlY3YiLCJyZWN2ZnJvbSIsInNlbmQiLCJzZW5kX3N1YnN0cmluZyIsInNlbmR0byIsInNlbmR0b19zdWJzdHJpbmciLCJnZXRzb2Nrb3B0Iiwic2V0c29ja29wdCIsImdldHNvY2tvcHRfaW50Iiwic2V0c29ja29wdF9pbnQiLCJnZXRzb2Nrb3B0X29wdGludCIsInNldHNvY2tvcHRfb3B0aW50IiwiZ2V0c29ja29wdF9mbG9hdCIsInNldHNvY2tvcHRfZmxvYXQiLCJnZXRzb2Nrb3B0X2Vycm9yIiwib3Blbl9jb25uZWN0aW9uIiwic2h1dGRvd25fY29ubmVjdGlvbiIsImVzdGFibGlzaF9zZXJ2ZXIiLCJnZXRob3N0bmFtZSIsImdldGhvc3RieW5hbWUiLCJnZXRob3N0YnlhZGRyIiwiZ2V0cHJvdG9ieW5hbWUiLCJnZXRwcm90b2J5bnVtYmVyIiwiZ2V0c2VydmJ5bmFtZSIsImdldHNlcnZieXBvcnQiLCJnZXRhZGRyaW5mbyIsImdldG5hbWVpbmZvIiwidGNnZXRhdHRyIiwidGNzZXRhdHRyIiwidGNzZW5kYnJlYWsiLCJ0Y2RyYWluIiwidGNmbHVzaCIsInRjZmxvdyIsInNldHNpZCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzg0MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3R5cGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIENvcmUgdHlwZXMgZm9yIHRoZSBTWCBsYW5ndWFnZS5cblxuICAgIFRoZSBbdmFsdWVdIHN1bSB0eXBlIHJlcHJlc2VudHMgZXZlcnkgcG9zc2libGUgU1ggcnVudGltZSB2YWx1ZS5cbiAgICBPQ2FtbCdzIGFsZ2VicmFpYyB0eXBlcyBtYWtlIHRoZSBDRUsgbWFjaGluZSdzIGZyYW1lIGRpc3BhdGNoIGFcbiAgICBwYXR0ZXJuIG1hdGNoIOKAlCBleGFjdGx5IHdoYXQgdGhlIHNwZWMgZGVzY3JpYmVzLiAqKVxuXG4oKiogezEgU3ltYm9sIGludGVybmluZ30gKilcblxuKCoqIE1hcCBzeW1ib2wgbmFtZXMgdG8gc21hbGwgaW50ZWdlcnMgZm9yIE8oMSkgZW52IGxvb2t1cHMuXG4gICAgVGhlIGludGVybiB0YWJsZSBpcyBwb3B1bGF0ZWQgb25jZSBwZXIgdW5pcXVlIHN5bWJvbCBuYW1lO1xuICAgIGFsbCBzdWJzZXF1ZW50IGVudiBvcGVyYXRpb25zIHVzZSB0aGUgaW50ZWdlciBrZXkuICopXG5cbmxldCBzeW1fdG9faWQgOiAoc3RyaW5nLCBpbnQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0IGlkX3RvX3N5bSA6IChpbnQsIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNTEyXG5sZXQgc3ltX25leHQgID0gcmVmIDBcblxubGV0IGludGVybiBzID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBzeW1fdG9faWQgcyB3aXRoXG4gIHwgU29tZSBpZCAtPiBpZFxuICB8IE5vbmUgLT5cbiAgICBsZXQgaWQgPSAhc3ltX25leHQgaW5cbiAgICBpbmNyIHN5bV9uZXh0O1xuICAgIEhhc2h0YmwucmVwbGFjZSBzeW1fdG9faWQgcyBpZDtcbiAgICBIYXNodGJsLnJlcGxhY2UgaWRfdG9fc3ltIGlkIHM7XG4gICAgaWRcblxubGV0IHVuaW50ZXJuIGlkID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBpZF90b19zeW0gaWQgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiBcIjxzeW06XCIgXiBzdHJpbmdfb2ZfaW50IGlkIF4gXCI+XCJcblxuXG4oKiogezEgRW52aXJvbm1lbnR9ICopXG5cbigqKiBMZXhpY2FsIHNjb3BlIGNoYWluLiAgRWFjaCBmcmFtZSBob2xkcyBhIG11dGFibGUgYmluZGluZyB0YWJsZVxuICAgIGtleWVkIGJ5IGludGVybmVkIHN5bWJvbCBJRHMgZm9yIGZhc3QgbG9va3VwLiAqKVxudHlwZSBlbnYgPSB7XG4gIGJpbmRpbmdzIDogKGludCwgdmFsdWUpIEhhc2h0YmwudDtcbiAgcGFyZW50ICAgOiBlbnYgb3B0aW9uO1xufVxuXG4oKiogezEgVmFsdWVzfSAqKVxuXG5hbmQgdmFsdWUgPVxuICB8IE5pbFxuICB8IEJvb2wgICAgb2YgYm9vbFxuICB8IEludGVnZXIgb2YgaW50ICAgICgqKiBFeGFjdCBpbnRlZ2VyIOKAlCBkaXN0aW5jdCBmcm9tIGluZXhhY3QgZmxvYXQuICopXG4gIHwgTnVtYmVyICBvZiBmbG9hdCAgKCoqIEluZXhhY3QgZmxvYXQuICopXG4gIHwgU3RyaW5nICBvZiBzdHJpbmdcbiAgfCBTeW1ib2wgb2Ygc3RyaW5nXG4gIHwgS2V5d29yZCBvZiBzdHJpbmdcbiAgfCBMaXN0ICAgb2YgdmFsdWUgbGlzdFxuICB8IERpY3QgICBvZiBkaWN0XG4gIHwgTGFtYmRhIG9mIGxhbWJkYVxuICB8IENvbXBvbmVudCBvZiBjb21wb25lbnRcbiAgfCBJc2xhbmQgb2YgaXNsYW5kXG4gIHwgTWFjcm8gIG9mIG1hY3JvXG4gIHwgVGh1bmsgIG9mIHZhbHVlICogZW52XG4gIHwgQ29udGludWF0aW9uIG9mICh2YWx1ZSAtPiB2YWx1ZSkgKiBkaWN0IG9wdGlvblxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiBvZiB2YWx1ZSBsaXN0ICogaW50ICAoKiogVW5kZWxpbWl0ZWQgY29udGludWF0aW9uIOKAlCBjYXB0dXJlZCBrb250IGZyYW1lcyArIHdpbmRlcnMgZGVwdGggYXQgY2FwdHVyZSAqKVxuICB8IE5hdGl2ZUZuIG9mIHN0cmluZyAqICh2YWx1ZSBsaXN0IC0+IHZhbHVlKVxuICB8IFNpZ25hbCBvZiBzaWduYWxcbiAgfCBSYXdIVE1MIG9mIHN0cmluZ1xuICB8IFNwcmVhZCBvZiAoc3RyaW5nICogdmFsdWUpIGxpc3RcbiAgfCBTeEV4cHIgb2Ygc3RyaW5nICAoKiogT3BhcXVlIFNYIHdpcmUtZm9ybWF0IHN0cmluZyDigJQgYXNlciBvdXRwdXQuICopXG4gIHwgRW52IG9mIGVudiAgKCoqIEZpcnN0LWNsYXNzIGVudmlyb25tZW50IOKAlCB1c2VkIGJ5IENFSyBtYWNoaW5lIHN0YXRlIGRpY3RzLiAqKVxuICB8IExpc3RSZWYgb2YgdmFsdWUgbGlzdCByZWYgICgqKiBNdXRhYmxlIGxpc3Qg4oCUIEpTLXN0eWxlIGFycmF5IGZvciBhcHBlbmQhICopXG4gIHwgQ2VrU3RhdGUgb2YgY2VrX3N0YXRlICAoKiogT3B0aW1pemVkIENFSyBtYWNoaW5lIHN0YXRlIOKAlCBhdm9pZHMgRGljdCBhbGxvY2F0aW9uLiAqKVxuICB8IENla0ZyYW1lIG9mIGNla19mcmFtZSAgKCoqIE9wdGltaXplZCBDRUsgY29udGludWF0aW9uIGZyYW1lLiAqKVxuICB8IFZtQ2xvc3VyZSBvZiB2bV9jbG9zdXJlICAoKiogVk0tY29tcGlsZWQgY2xvc3VyZSDigJQgY2FsbGFibGUgd2l0aGluIHRoZSBWTSB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgVk0uICopXG4gIHwgVm1GcmFtZSBvZiB2bV9mcmFtZSAgKCoqIFZNIGNhbGwgZnJhbWUg4oCUIG9uZSBwZXIgZnVuY3Rpb24gaW52b2NhdGlvbi4gKilcbiAgfCBWbU1hY2hpbmUgb2Ygdm1fbWFjaGluZSAgKCoqIFZNIHN0YXRlIOKAlCBzdGFjaywgZnJhbWVzLCBnbG9iYWxzLiAqKVxuICB8IFJlY29yZCBvZiByZWNvcmQgICgqKiBSN1JTIHJlY29yZCDigJQgb3BhcXVlLCBnZW5lcmF0aXZlLCBmaWVsZC1pbmRleGVkLiAqKVxuICB8IFBhcmFtZXRlciBvZiBwYXJhbWV0ZXIgICgqKiBSN1JTIHBhcmFtZXRlciDigJQgZHluYW1pYyBiaW5kaW5nIHZpYSBrb250LXN0YWNrIHByb3ZpZGUgZnJhbWVzLiAqKVxuICB8IFZlY3RvciBvZiB2YWx1ZSBhcnJheSAgKCoqIFI3UlMgdmVjdG9yIOKAlCBtdXRhYmxlIGZpeGVkLXNpemUgYXJyYXkuICopXG4gIHwgU3RyaW5nQnVmZmVyIG9mIEJ1ZmZlci50ICAoKiogTXV0YWJsZSBzdHJpbmcgYnVmZmVyIOKAlCBPKDEpIGFtb3J0aXplZCBhcHBlbmQuICopXG4gIHwgSGFzaFRhYmxlIG9mICh2YWx1ZSwgdmFsdWUpIEhhc2h0YmwudCAgKCoqIE11dGFibGUgaGFzaCB0YWJsZSB3aXRoIGFyYml0cmFyeSBrZXlzLiAqKVxuICB8IENoYXIgb2YgaW50ICAoKiogVW5pY29kZSBjb2RlcG9pbnQg4oCUIFI3UlMgY2hhciB0eXBlLiAqKVxuICB8IEVvZiAgICAgICAgICAgICgqKiBFT0Ygc2VudGluZWwg4oCUIHJldHVybmVkIGJ5IHJlYWQtY2hhciBldGMuIGF0IGVuZCBvZiBpbnB1dC4gKilcbiAgfCBQb3J0IG9mIHN4X3BvcnQgICgqKiBTdHJpbmcgcG9ydCDigJQgaW5wdXQgKHN0cmluZyBjdXJzb3IpIG9yIG91dHB1dCAoYnVmZmVyKS4gKilcbiAgfCBSYXRpb25hbCBvZiBpbnQgKiBpbnQgICgqKiBFeGFjdCByYXRpb25hbDogbnVtZXJhdG9yLCBkZW5vbWluYXRvciAocmVkdWNlZCwgZGVub20+MCkuICopXG4gIHwgU3hTZXQgb2YgKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCAgKCoqIE11dGFibGUgc2V0IGtleWVkIGJ5IGluc3BlY3QodmFsdWUpLiAqKVxuICB8IFN4UmVnZXhwIG9mIHN0cmluZyAqIHN0cmluZyAqIFJlLnJlICAoKiogUmVnZXhwOiBzb3VyY2UsIGZsYWdzLCBjb21waWxlZC4gKilcbiAgfCBTeEJ5dGV2ZWN0b3Igb2YgYnl0ZXMgICgqKiBNdXRhYmxlIGJ5dGV2ZWN0b3Ig4oCUIFI3UlMgYnl0ZXZlY3RvciB0eXBlLiAqKVxuICB8IEFkdFZhbHVlIG9mIGFkdF92YWx1ZSAgKCoqIE5hdGl2ZSBhbGdlYnJhaWMgZGF0YSB0eXBlIGluc3RhbmNlIOKAlCBvcGFxdWUgc3VtIHR5cGUuICopXG5cbigqKiBBbGdlYnJhaWMgZGF0YSB0eXBlIGluc3RhbmNlIOKAlCBwcm9kdWNlZCBieSBbZGVmaW5lLXR5cGVdIGNvbnN0cnVjdG9ycy5cbiAgICBbYXZfdHlwZV0gaXMgdGhlIHR5cGUgbmFtZSAoZS5nLiBcIk1heWJlXCIpLCBbYXZfY3Rvcl0gaXMgdGhlIGNvbnN0cnVjdG9yXG4gICAgbmFtZSAoZS5nLiBcIkp1c3RcIiksIFthdl9maWVsZHNdIGFyZSB0aGUgcG9zaXRpb25hbCBmaWVsZCB2YWx1ZXMuICopXG5hbmQgYWR0X3ZhbHVlID0ge1xuICBhdl90eXBlICAgOiBzdHJpbmc7XG4gIGF2X2N0b3IgICA6IHN0cmluZztcbiAgYXZfZmllbGRzIDogdmFsdWUgYXJyYXk7XG59XG5cbigqKiBTdHJpbmcgaW5wdXQgcG9ydDogc291cmNlIHN0cmluZyArIG11dGFibGUgY3Vyc29yIHBvc2l0aW9uLiAqKVxuYW5kIHN4X3BvcnRfa2luZCA9XG4gIHwgUG9ydElucHV0IG9mIHN0cmluZyAqIGludCByZWZcbiAgfCBQb3J0T3V0cHV0IG9mIEJ1ZmZlci50XG5cbmFuZCBzeF9wb3J0ID0ge1xuICBtdXRhYmxlIHNwX2Nsb3NlZCA6IGJvb2w7XG4gIHNwX2tpbmQgOiBzeF9wb3J0X2tpbmQ7XG59XG5cbigqKiBDRUsgbWFjaGluZSBzdGF0ZSDigJQgcmVjb3JkIGluc3RlYWQgb2YgRGljdCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgNSBmaWVsZHMgw5cgNTVLIHN0ZXBzL3NlYyA9IDI3NUsgSGFzaHRibCBhbGxvY2F0aW9ucy9zZWMgZWxpbWluYXRlZC4gKilcbmFuZCBjZWtfc3RhdGUgPSB7XG4gIGNzX2NvbnRyb2wgOiB2YWx1ZTtcbiAgY3NfZW52ICAgICA6IHZhbHVlO1xuICBjc19rb250ICAgIDogdmFsdWU7XG4gIGNzX3BoYXNlICAgOiBzdHJpbmc7XG4gIGNzX3ZhbHVlICAgOiB2YWx1ZTtcbn1cblxuKCoqIENFSyBjb250aW51YXRpb24gZnJhbWUg4oCUIHRhZ2dlZCByZWNvcmQgY292ZXJpbmcgYWxsIDI5IGZyYW1lIHR5cGVzLlxuICAgIEZpZWxkcyBhcmUgbmFtZWQgZ2VuZXJpY2FsbHk7IG5vdCBhbGwgYXJlIHVzZWQgYnkgZXZlcnkgZnJhbWUgdHlwZS5cbiAgICBFbGltaW5hdGVzIH4xMDBLIEhhc2h0YmwgYWxsb2NhdGlvbnMgcGVyIHBhZ2UgcmVuZGVyLiAqKVxuYW5kIGNla19mcmFtZSA9IHtcbiAgY2ZfdHlwZSAgICAgIDogc3RyaW5nOyAgICAgICAgKCogZnJhbWUgdHlwZSB0YWc6IFwiaWZcIiwgXCJsZXRcIiwgXCJjYWxsXCIsIGV0Yy4gKilcbiAgY2ZfZW52ICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogZW52aXJvbm1lbnQg4oCUIGV2ZXJ5IGZyYW1lIGhhcyB0aGlzICopXG4gIGNmX25hbWUgICAgICA6IHZhbHVlOyAgICAgICAgICgqIGxldC9kZWZpbmUvc2V0L3Njb3BlOiBiaW5kaW5nIG5hbWUgKilcbiAgY2ZfYm9keSAgICAgIDogdmFsdWU7ICAgICAgICAgKCogd2hlbi9sZXQ6IGJvZHkgZXhwciAqKVxuICBtdXRhYmxlIGNmX3JlbWFpbmluZyA6IHZhbHVlOyAgKCogYmVnaW4vY29uZC9tYXAvZXRjOiByZW1haW5pbmcgZXhwcnMgKilcbiAgY2ZfZiAgICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbC9tYXAvZmlsdGVyL2V0YzogZnVuY3Rpb24gKilcbiAgY2ZfYXJncyAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbDogcmF3IGFyZ3M7IGFyZzogZXZhbGVkIGFyZ3MgKilcbiAgbXV0YWJsZSBjZl9yZXN1bHRzICAgOiB2YWx1ZTsgKCogbWFwL2ZpbHRlci9kaWN0OiBhY2N1bXVsYXRlZCByZXN1bHRzOyBwcm92aWRlOiBzdWJzY3JpYmVycyAqKVxuICBtdXRhYmxlIGNmX2V4dHJhIDogdmFsdWU7ICAgICAoKiBleHRyYSBmaWVsZDogc2NoZW1lLCBpbmRleGVkLCB2YWx1ZSwgcGhhc2UsIGV0Yy4gKilcbiAgbXV0YWJsZSBjZl9leHRyYTIgICAgOiB2YWx1ZTsgKCogc2Vjb25kIGV4dHJhOiBlbWl0dGVkLCBldGMuICopXG59XG5cbigqKiBNdXRhYmxlIHN0cmluZy1rZXllZCB0YWJsZSAoU1ggZGljdHMgc3VwcG9ydCBbZGljdC1zZXQhXSkuICopXG5hbmQgZGljdCA9IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnRcblxuYW5kIGxhbWJkYSA9IHtcbiAgbF9wYXJhbXMgIDogc3RyaW5nIGxpc3Q7XG4gIGxfYm9keSAgICA6IHZhbHVlO1xuICBsX2Nsb3N1cmUgOiBlbnY7XG4gIG11dGFibGUgbF9uYW1lIDogc3RyaW5nIG9wdGlvbjtcbiAgbXV0YWJsZSBsX2NvbXBpbGVkIDogdm1fY2xvc3VyZSBvcHRpb247ICAoKiogTGF6eSBKSVQgY2FjaGUgKilcbiAgbXV0YWJsZSBsX2NhbGxfY291bnQgOiBpbnQ7ICAgICAgICAgICAgICAoKiogVGllcmVkLWNvbXBpbGF0aW9uIGNvdW50ZXIg4oCUIEpJVCBhZnRlciB0aHJlc2hvbGQgY2FsbHMgKilcbiAgbF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiogVW5pcXVlIGlkZW50aXR5IGZvciBMUlUgY2FjaGUgdHJhY2tpbmcgKilcbn1cblxuYW5kIGNvbXBvbmVudCA9IHtcbiAgY19uYW1lICAgICAgICAgOiBzdHJpbmc7XG4gIGNfcGFyYW1zICAgICAgIDogc3RyaW5nIGxpc3Q7XG4gIGNfaGFzX2NoaWxkcmVuIDogYm9vbDtcbiAgY19ib2R5ICAgICAgICAgOiB2YWx1ZTtcbiAgY19jbG9zdXJlICAgICAgOiBlbnY7XG4gIGNfYWZmaW5pdHkgICAgIDogc3RyaW5nOyAgKCoqIFwiYXV0b1wiIHwgXCJjbGllbnRcIiB8IFwic2VydmVyXCIgKilcbiAgbXV0YWJsZSBjX2ZpbGUgOiBzdHJpbmcgb3B0aW9uOyAgKCoqIFNvdXJjZSBmaWxlIHBhdGggKilcbiAgbXV0YWJsZSBjX2NvbXBpbGVkIDogdm1fY2xvc3VyZSBvcHRpb247ICAoKiogTGF6eSBKSVQgY2FjaGUgKilcbn1cblxuYW5kIGlzbGFuZCA9IHtcbiAgaV9uYW1lICAgICAgICAgOiBzdHJpbmc7XG4gIGlfcGFyYW1zICAgICAgIDogc3RyaW5nIGxpc3Q7XG4gIGlfaGFzX2NoaWxkcmVuIDogYm9vbDtcbiAgaV9ib2R5ICAgICAgICAgOiB2YWx1ZTtcbiAgaV9jbG9zdXJlICAgICAgOiBlbnY7XG4gIG11dGFibGUgaV9maWxlIDogc3RyaW5nIG9wdGlvbjsgICgqKiBTb3VyY2UgZmlsZSBwYXRoICopXG4gIG11dGFibGUgaV9jb21waWxlZCA6IHZtX2Nsb3N1cmUgb3B0aW9uOyAgKCoqIExhenkgSklUIGNhY2hlICopXG59XG5cbmFuZCBtYWNybyA9IHtcbiAgbV9wYXJhbXMgICAgIDogc3RyaW5nIGxpc3Q7XG4gIG1fcmVzdF9wYXJhbSA6IHN0cmluZyBvcHRpb247XG4gIG1fYm9keSAgICAgICA6IHZhbHVlO1xuICBtX2Nsb3N1cmUgICAgOiBlbnY7XG4gIG1fbmFtZSAgICAgICA6IHN0cmluZyBvcHRpb247XG59XG5cbmFuZCBzaWduYWwgPSB7XG4gIG11dGFibGUgc192YWx1ZSAgICAgICA6IHZhbHVlO1xuICBtdXRhYmxlIHNfc3Vic2NyaWJlcnMgOiAodW5pdCAtPiB1bml0KSBsaXN0O1xuICBtdXRhYmxlIHNfZGVwcyAgICAgICAgOiBzaWduYWwgbGlzdDtcbn1cblxuKCoqIFI3UlMgcmVjb3JkIHR5cGUgZGVzY3JpcHRvciDigJQgb25lIHBlciBbZGVmaW5lLXJlY29yZC10eXBlXSBjYWxsLlxuICAgIFN0b3JlZCBpbiBbcnRkX3RhYmxlXTsgY2xvc3VyZXMgY2FwdHVyZSBvbmx5IHRoZSBpbnRlZ2VyIHVpZC4gKilcbmFuZCByZWNvcmRfdHlwZSA9IHtcbiAgcnRfbmFtZSAgICAgOiBzdHJpbmc7ICAgICAgICgqKiBlLmcuLCBcInBvaW50XCIgKilcbiAgcnRfdWlkICAgICAgOiBpbnQ7ICAgICAgICAgICgqKiB1bmlxdWUgaWRlbnRpdHkg4oCUIGdlbmVyYXRpdmUgKilcbiAgcnRfZmllbGRzICAgOiBzdHJpbmcgYXJyYXk7ICgqKiBmaWVsZCBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlciAqKVxuICBydF9jdG9yX21hcCA6IGludCBhcnJheTsgICAgKCoqIGN0b3JfbWFwW2ldID0gZmllbGQgaW5kZXggZm9yIGN0b3IgcGFyYW0gaSAqKVxufVxuXG4oKiogUjdSUyByZWNvcmQgaW5zdGFuY2Ug4oCUIG9wYXF1ZSwgYWNjZXNzZWQgb25seSB0aHJvdWdoIGdlbmVyYXRlZCBmdW5jdGlvbnMuICopXG5hbmQgcmVjb3JkID0ge1xuICByX3R5cGUgICA6IHJlY29yZF90eXBlO1xuICByX2ZpZWxkcyA6IHZhbHVlIGFycmF5OyAgICAgKCoqIG11dGFibGUgdmlhIEFycmF5LnNldCBmb3IgcmVjb3JkLXNldCEgKilcbn1cblxuKCoqIFI3UlMgcGFyYW1ldGVyIOKAlCBkeW5hbWljIGJpbmRpbmcgdmlhIHByb3ZpZGUgZnJhbWVzIG9uIHRoZSBrb250IHN0YWNrLlxuICAgIENhbGxpbmcgWyhwYXJhbSldIHNlYXJjaGVzIGtvbnQgZm9yIHRoZSBuZWFyZXN0IHByb3ZpZGUgZnJhbWUga2V5ZWRcbiAgICBieSBbcG1fdWlkXTsgaWYgbm90IGZvdW5kIHJldHVybnMgW3BtX2RlZmF1bHRdLiAqKVxuYW5kIHBhcmFtZXRlciA9IHtcbiAgcG1fdWlkICAgICAgIDogc3RyaW5nOyAgICAgICgqKiB1bmlxdWUgSUQg4oCUIHVzZWQgYXMgcHJvdmlkZSBmcmFtZSBrZXkgKilcbiAgcG1fZGVmYXVsdCAgIDogdmFsdWU7ICAgICAgICgqKiBpbml0aWFsL2RlZmF1bHQgdmFsdWUgKilcbiAgcG1fY29udmVydGVyIDogdmFsdWUgb3B0aW9uOyAoKiogb3B0aW9uYWwgY29udmVydGVyIGZ1bmN0aW9uICopXG59XG5cbigqKiB7MSBCeXRlY29kZSBWTSB0eXBlc31cblxuICAgIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtLm1sKSBiZWNhdXNlIFt2bV9jb2RlLmNvbnN0YW50c10gcmVmZXJlbmNlc1xuICAgIFt2YWx1ZV0gYW5kIFtsYW1iZGEubF9jb21waWxlZF0gcmVmZXJlbmNlcyBbdm1fY2xvc3VyZV0g4oCUIG11dHVhbFxuICAgIHJlY3Vyc2lvbiByZXF1aXJlcyBhbGwgdHlwZXMgaW4gb25lIFthbmRdIGNoYWluLiAqKVxuXG4oKiogQ29tcGlsZWQgZnVuY3Rpb24gYm9keSDigJQgYnl0ZWNvZGUgKyBjb25zdGFudCBwb29sLiAqKVxuYW5kIHZtX2NvZGUgPSB7XG4gIHZjX2FyaXR5ICAgICA6IGludDtcbiAgdmNfcmVzdF9hcml0eSA6IGludDsgICgqKiAtMSA9IG5vICZyZXN0OyA+PSAwID0gbnVtYmVyIG9mIHBvc2l0aW9uYWwgcGFyYW1zIGJlZm9yZSAmcmVzdCAqKVxuICB2Y19sb2NhbHMgICAgOiBpbnQ7XG4gIHZjX2J5dGVjb2RlICA6IGludCBhcnJheTtcbiAgdmNfY29uc3RhbnRzIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgdmNfYnl0ZWNvZGVfbGlzdCAgOiB2YWx1ZSBsaXN0IG9wdGlvbjsgICgqKiBMYXp5IGNhY2hlIGZvciB0cmFuc3BpbGVkIFZNICopXG4gIG11dGFibGUgdmNfY29uc3RhbnRzX2xpc3QgOiB2YWx1ZSBsaXN0IG9wdGlvbjsgICgqKiBMYXp5IGNhY2hlIGZvciB0cmFuc3BpbGVkIFZNICopXG59XG5cbigqKiBVcHZhbHVlIGNlbGwg4oCUIHNoYXJlZCBtdXRhYmxlIHJlZmVyZW5jZSB0byBhIGNhcHR1cmVkIHZhcmlhYmxlLiAqKVxuYW5kIHZtX3VwdmFsdWVfY2VsbCA9IHtcbiAgbXV0YWJsZSB1dl92YWx1ZSA6IHZhbHVlO1xufVxuXG4oKiogQ2xvc3VyZSDigJQgY29tcGlsZWQgY29kZSArIGNhcHR1cmVkIHVwdmFsdWVzICsgbGl2ZSBlbnYgcmVmZXJlbmNlLiAqKVxuYW5kIHZtX2Nsb3N1cmUgPSB7XG4gIHZtX2NvZGUgICAgIDogdm1fY29kZTtcbiAgdm1fdXB2YWx1ZXMgOiB2bV91cHZhbHVlX2NlbGwgYXJyYXk7XG4gIHZtX25hbWUgICAgIDogc3RyaW5nIG9wdGlvbjtcbiAgdm1fZW52X3JlZiAgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50O1xuICB2bV9jbG9zdXJlX2VudiA6IGVudiBvcHRpb247ICAoKiogT3JpZ2luYWwgY2xvc3VyZSBlbnYgZm9yIGlubmVyIGZ1bmN0aW9ucyAqKVxufVxuXG4oKiogVk0gY2FsbCBmcmFtZSDigJQgb25lIHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uLlxuICAgIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtLm1sKSBzbyBpdCBjYW4gYmUgYSBbdmFsdWVdIHZhcmlhbnQuICopXG5hbmQgdm1fZnJhbWUgPSB7XG4gIHZmX2Nsb3N1cmUgICAgOiB2bV9jbG9zdXJlO1xuICBtdXRhYmxlIHZmX2lwIDogaW50O1xuICB2Zl9iYXNlICAgICAgIDogaW50O1xuICB2Zl9sb2NhbF9jZWxscyA6IChpbnQsIHZtX3VwdmFsdWVfY2VsbCkgSGFzaHRibC50O1xufVxuXG4oKiogVk0gc3RhdGUg4oCUIHN0YWNrIG1hY2hpbmUgd2l0aCBmcmFtZSBsaXN0LlxuICAgIERlZmluZWQgaGVyZSBmb3IgdGhlIHNhbWUgbXV0dWFsLXJlY3Vyc2lvbiByZWFzb24uICopXG5hbmQgdm1fbWFjaGluZSA9IHtcbiAgbXV0YWJsZSB2bV9zdGFjayAgIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgdm1fc3AgICAgICA6IGludDtcbiAgbXV0YWJsZSB2bV9mcmFtZXMgIDogdm1fZnJhbWUgbGlzdDtcbiAgdm1fZ2xvYmFscyAgICAgICAgIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudDtcbiAgbXV0YWJsZSB2bV9wZW5kaW5nX2NlayA6IHZhbHVlIG9wdGlvbjtcbn1cblxuXG4oKiogezEgRm9yd2FyZCByZWYgZm9yIGNhbGxpbmcgVk0gY2xvc3VyZXMgZnJvbSBvdXRzaWRlIHRoZSBWTX0gKilcblxubGV0IF92bV9jYWxsX2Nsb3N1cmVfcmVmIDogKHZtX2Nsb3N1cmUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IHJhaXNlIChGYWlsdXJlIFwiVk0gY2FsbF9jbG9zdXJlIG5vdCBpbml0aWFsaXplZFwiKSlcblxuKCoqIEZvcndhcmQgcmVmIGZvciBjYWxsaW5nIENFSyBldmFsdWF0b3IgZnJvbSBwcmltaXRpdmVzIChhdm9pZHMgZGVwZW5kZW5jeSBjeWNsZSkuICopXG5sZXQgX2Nla19jYWxsX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IHJhaXNlIChGYWlsdXJlIFwiQ0VLIGNhbGwgbm90IGluaXRpYWxpemVkXCIpKVxuXG4oKiogRm9yd2FyZCByZWY6IGV2YWx1YXRlIGEgTGFtYmRhIHZpYSBDRUsgKHN1cHBvcnRzIHBlcmZvcm0vc3VzcGVuc2lvbikuXG4gICAgU2V0IGJ5IHN4X3ZtLm1sIHRvIGJyZWFrIHRoZSBzeF9ydW50aW1lIOKGkiBzeF9yZWYgZGVwZW5kZW5jeSBjeWNsZS4gKilcbmxldCBfY2VrX2V2YWxfbGFtYmRhX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEZhaWx1cmUgXCJDRUsgZXZhbCBsYW1iZGEgbm90IGluaXRpYWxpemVkXCIpKVxuXG5cbigqKiB7MSBFcnJvcnN9ICopXG5cbmV4Y2VwdGlvbiBFdmFsX2Vycm9yIG9mIHN0cmluZ1xuZXhjZXB0aW9uIFBhcnNlX2Vycm9yIG9mIHN0cmluZ1xuXG4oKiogUmFpc2VkIHdoZW4gYSBWbUNsb3N1cmUgaGl0cyBPUF9QRVJGT1JNIGluc2lkZSBhIENFSyBldmFsdWF0aW9uLlxuICAgIFRoZSBDRUsgc3RlcCBsb29wIGNhdGNoZXMgdGhpcyBhbmQgY3JlYXRlcyBhIHByb3BlciBpby1zdXNwZW5kZWQgc3RhdGVcbiAgICB3aXRoIHRoZSBjb250aW51YXRpb24gcHJlc2VydmVkIGZvciByZXN1bWUuIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtKVxuICAgIHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBjeWNsZSBiZXR3ZWVuIHN4X3J1bnRpbWUgYW5kIHN4X3ZtLiAqKVxuZXhjZXB0aW9uIENla1BlcmZvcm1SZXF1ZXN0IG9mIHZhbHVlXG5cbigqKiBIb29rOiByZXNvbHZlIElPIHN1c3BlbnNpb24gaW5saW5lIGluIGNla19ydW4uXG4gICAgV2hlbiBzZXQsIGNla19ydW4gY2FsbHMgdGhpcyBpbnN0ZWFkIG9mIHJhaXNpbmcgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIuXG4gICAgVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBzdXNwZW5kZWQgc3RhdGUgYW5kIHJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgIFVzZWQgYnkgdGhlIEhUVFAgc2VydmVyIHRvIGhhbmRsZSBwZXJmb3JtICh0ZXh0LW1lYXN1cmUpIGR1cmluZyBhc2VyLiAqKVxubGV0IF9jZWtfaW9fcmVzb2x2ZXIgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiogSG9vazogaGFuZGxlIENFSyBJTyBzdXNwZW5zaW9uIGluIGV2YWxfZXhwciAoY2VrX3J1bl9pdGVyYXRpdmUpLlxuICAgIFdoZW4gc2V0LCBjYWxsZWQgd2l0aCB0aGUgc3VzcGVuZGVkIENFSyBzdGF0ZSBpbnN0ZWFkIG9mIHJhaXNpbmdcbiAgICBcIklPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHRcIi4gVXNlZCBieSB0aGUgYnJvd3NlciBXQVNNIGtlcm5lbFxuICAgIHRvIGNvbnZlcnQgQ0VLIHN1c3BlbnNpb25zIHRvIFZtU3VzcGVuZGVkIGZvciBfZHJpdmVBc3luYyBoYW5kbGluZy4gKilcbmxldCBfY2VrX2lvX3N1c3BlbmRfaG9vayA6ICh2YWx1ZSAtPiB2YWx1ZSkgb3B0aW9uIHJlZiA9IHJlZiBOb25lXG5cbigqKiBEZWZhdWx0IFZNIGdsb2JhbHMgZm9yIHN0dWIgVk1zIGNyZWF0ZWQgZHVyaW5nIElPIHN1c3BlbnNpb24uXG4gICAgU2V0IGJ5IHN4X2Jyb3dzZXIubWwgdG8gX3ZtX2dsb2JhbHMgc28gQ0VLIHJlc3VtZSBjYW4gYWNjZXNzIHBsYXRmb3JtIGZ1bmN0aW9ucy4gKilcbmxldCBfZGVmYXVsdF92bV9nbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCByZWYgPSByZWYgKEhhc2h0YmwuY3JlYXRlIDApXG5cbigqKiBIb29rOiBjb252ZXJ0IFZNIHN1c3BlbnNpb24gZXhjZXB0aW9ucyB0byBDZWtQZXJmb3JtUmVxdWVzdC5cbiAgICBTZXQgYnkgc3hfdm0gYWZ0ZXIgaXQgZGVmaW5lcyBWbVN1c3BlbmRlZC4gQ2FsbGVkIGJ5IHN4X3J1bnRpbWUuc3hfYXBwbHlfY2VrLiAqKVxubGV0IF9jb252ZXJ0X3ZtX3N1c3BlbnNpb24gOiAoZXhuIC0+IHVuaXQpIHJlZiA9IHJlZiAoZnVuIF8gLT4gKCkpXG5cbigqKiBIb29rOiBjb252ZXJ0IFZNIHN1c3BlbnNpb24gdG8gYSBfX3ZtX3N1c3BlbmRlZCBtYXJrZXIgZGljdC5cbiAgICBSZXR1cm5zIFNvbWUoZGljdCkgZm9yIFZtU3VzcGVuZGVkLCBOb25lIG90aGVyd2lzZS5cbiAgICBUaGUgZGljdCBoYXMga2V5czogX192bV9zdXNwZW5kZWQsIHJlcXVlc3QsIHJlc3VtZS5cbiAgICBVc2VkIGJ5IHN4X2FwcGx5X2NlayBzbyBjb250aW51ZV93aXRoX2NhbGwgY2FuIGJ1aWxkIGEgcHJvcGVyXG4gICAgc3VzcGVuZGVkIENFSyBzdGF0ZSB3aXRoIHZtLXJlc3VtZS1mcmFtZSBvbiB0aGUga29udC4gKilcbmxldCBfdm1fc3VzcGVuc2lvbl90b19kaWN0IDogKGV4biAtPiB2YWx1ZSBvcHRpb24pIHJlZiA9IHJlZiAoZnVuIF8gLT4gTm9uZSlcblxuXG4oKiogezEgUmVjb3JkIHR5cGUgZGVzY3JpcHRvciB0YWJsZX0gKilcblxubGV0IHJ0ZF90YWJsZSA6IChpbnQsIHJlY29yZF90eXBlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSAxNlxubGV0IHJ0ZF9jb3VudGVyID0gcmVmIDBcblxuKCoqIHsxIFBhcmFtZXRlciBVSUQgY291bnRlcn0gKilcblxubGV0IHBhcmFtX2NvdW50ZXIgPSByZWYgMFxuXG5cbigqKiB7MSBFbnZpcm9ubWVudCBvcGVyYXRpb25zfSAqKVxuXG5sZXQgbWFrZV9lbnYgKCkgPVxuICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IE5vbmUgfVxuXG5sZXQgZW52X2V4dGVuZCBwYXJlbnQgPVxuICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IFNvbWUgcGFyZW50IH1cblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGFmdGVyIGV2ZXJ5IGVudl9iaW5kIHdpdGggKGVudiwgbmFtZSwgdmFsdWUpLlxuICAgVXNlZCBieSBicm93c2VyIGtlcm5lbCB0byBzeW5jIFZNIGdsb2JhbHMgdGFibGUuICopXG5sZXQgX2Vudl9iaW5kX2hvb2sgOiAoZW52IC0+IHN0cmluZyAtPiB2YWx1ZSAtPiB1bml0KSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGFmdGVyIFZNIEdMT0JBTF9TRVQgd3JpdGVzIHRvIHZtLmdsb2JhbHMuXG4gICBVc2VkIGJ5IGJyb3dzZXIga2VybmVsIHRvIHN5bmMgbXV0YXRpb25zIGJhY2sgdG8gZ2xvYmFsX2Vudi4gKilcbmxldCBfdm1fZ2xvYmFsX3NldF9ob29rIDogKHN0cmluZyAtPiB2YWx1ZSAtPiB1bml0KSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGJ5IGNla19ydW4gb24gaW1wb3J0IHN1c3BlbnNpb24uXG4gICBJZiBzZXQsIHRoZSBob29rIGxvYWRzIHRoZSBsaWJyYXJ5IGFuZCByZXR1cm5zIHRydWU7IGNla19ydW4gdGhlbiByZXN1bWVzLiAqKVxubGV0IF9pbXBvcnRfaG9vayA6ICh2YWx1ZSAtPiBib29sKSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGJ5IHZtX2dsb2JhbF9nZXQgd2hlbiBhIHN5bWJvbCBpc24ndCBmb3VuZC5cbiAgIFJlY2VpdmVzIHRoZSBzeW1ib2wgbmFtZS4gSWYgdGhlIGhvb2sgY2FuIHJlc29sdmUgaXQgKGUuZy4gYnkgbG9hZGluZyBhXG4gICBsaWJyYXJ5IHRoYXQgZXhwb3J0cyBpdCksIGl0IHJldHVybnMgU29tZSB2YWx1ZS4gT3RoZXJ3aXNlIE5vbmUuXG4gICBUaGlzIGVuYWJsZXMgdHJhbnNwYXJlbnQgbGF6eSBtb2R1bGUgbG9hZGluZyDigJQganVzdCB1c2UgYSBzeW1ib2wgYW5kXG4gICB0aGUgVk0gbG9hZHMgd2hhdGV2ZXIgbW9kdWxlIHByb3ZpZGVzIGl0LiAqKVxubGV0IF9zeW1ib2xfcmVzb2x2ZV9ob29rIDogKHN0cmluZyAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgZW52X2JpbmQgZW52IG5hbWUgdiA9XG4gIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2O1xuICAobWF0Y2ggIV9lbnZfYmluZF9ob29rIHdpdGggU29tZSBmIC0+IGYgZW52IG5hbWUgdiB8IE5vbmUgLT4gKCkpO1xuICBOaWxcblxuKCogSW50ZXJuYWw6IHNjb3BlLWNoYWluIGxvb2t1cCB3aXRoIHByZS1pbnRlcm5lZCBJRCAqKVxubGV0IHJlYyBlbnZfaGFzX2lkIGVudiBpZCA9XG4gIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB8fFxuICBtYXRjaCBlbnYucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9oYXNfaWQgcCBpZCB8IE5vbmUgLT4gZmFsc2VcblxubGV0IGVudl9oYXMgZW52IG5hbWUgPSBlbnZfaGFzX2lkIGVudiAoaW50ZXJuIG5hbWUpXG5cbmxldCByZWMgZW52X2dldF9pZCBlbnYgaWQgbmFtZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZW52LmJpbmRpbmdzIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT5cbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfZ2V0X2lkIHAgaWQgbmFtZVxuICAgIHwgTm9uZSAtPlxuICAgICAgKCogU3ltYm9sIG5vdCBpbiBhbnkgc2NvcGUg4oCUIHRyeSB0aGUgcmVzb2x2ZSBob29rICh0cmFuc3BhcmVudCBsYXp5IGxvYWRpbmcpLlxuICAgICAgICAgVGhlIGhvb2sgbG9hZHMgdGhlIG1vZHVsZSB0aGF0IGV4cG9ydHMgdGhpcyBzeW1ib2wsIG1ha2luZyBpdCBhdmFpbGFibGUuICopXG4gICAgICBtYXRjaCAhX3N5bWJvbF9yZXNvbHZlX2hvb2sgd2l0aFxuICAgICAgfCBTb21lIGhvb2sgLT5cbiAgICAgICAgKG1hdGNoIGhvb2sgbmFtZSB3aXRoXG4gICAgICAgICB8IFNvbWUgdiAtPlxuICAgICAgICAgICAoKiBDYWNoZSBpbiB0aGUgcm9vdCBlbnYgc28gc3Vic2VxdWVudCBsb29rdXBzIGFyZSBpbnN0YW50ICopXG4gICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgaWQgdjsgdlxuICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVuZGVmaW5lZCBzeW1ib2w6IFwiIF4gbmFtZSkpKVxuICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVuZGVmaW5lZCBzeW1ib2w6IFwiIF4gbmFtZSkpXG5cbmxldCBlbnZfZ2V0IGVudiBuYW1lID0gZW52X2dldF9pZCBlbnYgKGludGVybiBuYW1lKSBuYW1lXG5cbmxldCByZWMgZW52X3NldF9pZCBlbnYgaWQgdiA9XG4gIGlmIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB0aGVuIGJlZ2luXG4gICAgSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyBpZCB2O1xuICAgIChtYXRjaCAhX2Vudl9iaW5kX2hvb2sgd2l0aCBTb21lIGYgLT4gZiBlbnYgKHVuaW50ZXJuIGlkKSB2IHwgTm9uZSAtPiAoKSk7XG4gICAgTmlsXG4gIGVuZCBlbHNlXG4gICAgbWF0Y2ggZW52LnBhcmVudCB3aXRoXG4gICAgfCBTb21lIHAgLT4gZW52X3NldF9pZCBwIGlkIHZcbiAgICB8IE5vbmUgLT4gSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyBpZCB2OyBOaWxcblxubGV0IGVudl9zZXQgZW52IG5hbWUgdiA9IGVudl9zZXRfaWQgZW52IChpbnRlcm4gbmFtZSkgdlxuXG5sZXQgZW52X21lcmdlIGJhc2Ugb3ZlcmxheSA9XG4gIGlmIGJhc2UgPT0gb3ZlcmxheSB0aGVuXG4gICAgeyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBpc19kZXNjZW5kYW50IGUgZGVwdGggPVxuICAgICAgaWYgZGVwdGggPiAxMDAgdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBlID09IGJhc2UgdGhlbiB0cnVlXG4gICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGlzX2Rlc2NlbmRhbnQgcCAoZGVwdGggKyAxKSB8IE5vbmUgLT4gZmFsc2VcbiAgICBpblxuICAgIGlmIGlzX2Rlc2NlbmRhbnQgb3ZlcmxheSAwIHRoZW5cbiAgICAgIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBiYXNlIH1cbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgZSA9IHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBiYXNlIH0gaW5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT5cbiAgICAgICAgaWYgbm90IChlbnZfaGFzX2lkIGJhc2UgaWQpIHRoZW4gSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdlxuICAgICAgKSBvdmVybGF5LmJpbmRpbmdzO1xuICAgICAgZVxuICAgIGVuZFxuICBlbmRcblxuXG4oKiogezEgVmFsdWUgZXh0cmFjdGlvbiBoZWxwZXJzfSAqKVxuXG4oKiogRm9ybWF0IGEgZmxvYXQgc2FmZWx5IOKAlCBkZWZ1c2UgW2ludF9vZl9mbG9hdF0gb3ZlcmZsb3cgb24gaHVnZVxuICAgIGludGVnZXItdmFsdWVkIGZsb2F0cywga2VlcCBbJWddIGZvciBmcmFjdGlvbnMgKHVuY2hhbmdlZCkuICopXG5sZXQgZm9ybWF0X251bWJlciBuID1cbiAgaWYgRmxvYXQuaXNfbmFuIG4gdGhlbiBcIm5hblwiXG4gIGVsc2UgaWYgbiA9IEZsb2F0LmluZmluaXR5IHRoZW4gXCJpbmZcIlxuICBlbHNlIGlmIG4gPSBGbG9hdC5uZWdfaW5maW5pdHkgdGhlbiBcIi1pbmZcIlxuICBlbHNlIGlmIEZsb2F0LmlzX2ludGVnZXIgbiAmJiBGbG9hdC5hYnMgbiA8IDFlMTYgdGhlblxuICAgIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICBlbHNlIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuXG4gICAgUHJpbnRmLnNwcmludGYgXCIlLjE3Z1wiIG5cbiAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuXG5sZXQgdmFsdWVfdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzIHwgU3ltYm9sIHMgLT4gcyB8IEtleXdvcmQgayAtPiBrXG4gIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IGZvcm1hdF9udW1iZXIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCIgfCBfIC0+IFwiPHZhbHVlPlwiXG5cbmxldCB2YWx1ZV90b19zdHJpbmdfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gIHwgXyAtPiBbXVxuXG5sZXQgdmFsdWVfdG9fYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGIgfCBOaWwgLT4gZmFsc2UgfCBfIC0+IHRydWVcblxubGV0IHZhbHVlX3RvX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IFNvbWUgcyB8IFN5bWJvbCBzIC0+IFNvbWUgcyB8IE5pbCAtPiBOb25lIHwgXyAtPiBOb25lXG5cblxuKCoqIHsxIENvbnN0cnVjdG9ycyDigJQgYWNjZXB0IFt2YWx1ZV0gYXJncyBmcm9tIHRyYW5zcGlsZWQgY29kZX0gKilcblxubGV0IHVud3JhcF9lbnZfdmFsID0gZnVuY3Rpb25cbiAgfCBFbnYgZSAtPiBlXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2VfbGFtYmRhOiBleHBlY3RlZCBlbnYgZm9yIGNsb3N1cmVcIilcblxuKCogTGFtYmRhIFVJRCDigJQgbWludGVkIG9uIGNvbnN0cnVjdGlvbiwgdXNlZCBhcyBMUlUgY2FjaGUga2V5IChQaGFzZSAyKS4gKilcbmxldCBsYW1iZGFfdWlkX2NvdW50ZXIgPSByZWYgMFxubGV0IG5leHRfbGFtYmRhX3VpZCAoKSA9IGluY3IgbGFtYmRhX3VpZF9jb3VudGVyOyAhbGFtYmRhX3VpZF9jb3VudGVyXG5cbmxldCBtYWtlX2xhbWJkYSBwYXJhbXMgYm9keSBjbG9zdXJlID1cbiAgbGV0IHBzID0gbWF0Y2ggcGFyYW1zIHdpdGhcbiAgICB8IExpc3QgaXRlbXMgLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gICAgfCBfIC0+IHZhbHVlX3RvX3N0cmluZ19saXN0IHBhcmFtc1xuICBpblxuICBMYW1iZGEgeyBsX3BhcmFtcyA9IHBzOyBsX2JvZHkgPSBib2R5OyBsX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBsX25hbWUgPSBOb25lOyBsX2NvbXBpbGVkID0gTm9uZTsgbF9jYWxsX2NvdW50ID0gMDsgbF91aWQgPSBuZXh0X2xhbWJkYV91aWQgKCkgfVxuXG4oKiogezEgSklUIGNhY2hlIGNvbnRyb2x9XG5cbiAgICBUaWVyZWQgY29tcGlsYXRpb246IG9ubHkgSklUIGEgbGFtYmRhIGFmdGVyIGl0J3MgYmVlbiBjYWxsZWQgW2ppdF90aHJlc2hvbGRdXG4gICAgdGltZXMuIFRoaXMgZmlsdGVycyBvdXQgb25lLXNob3QgbGFtYmRhcyAodGVzdCBoYXJuZXNzLCBkeW5hbWljIGV2YWwsIFJFUExzKVxuICAgIHNvIHRoZXkgbmV2ZXIgZW50ZXIgdGhlIEpJVCBjYWNoZS4gQ291bnRlcnMgYXJlIGV4cG9zZWQgdG8gU1ggYXMgWyhqaXQtc3RhdHMpXS5cblxuICAgIFRoZXNlIGxpdmUgaGVyZSAoaW4gc3hfdHlwZXMpIHJhdGhlciB0aGFuIHN4X3ZtIHNvIFtzeF9wcmltaXRpdmVzXSBjYW4gcmVhZFxuICAgIHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIHN4X3ByaW1pdGl2ZXMg4oaSIHN4X3ZtIGRlcGVuZGVuY3kgY3ljbGUuICopXG5sZXQgaml0X3RocmVzaG9sZCA9IHJlZiA0XG5sZXQgaml0X2NvbXBpbGVkX2NvdW50ID0gcmVmIDBcbmxldCBqaXRfc2tpcHBlZF9jb3VudCA9IHJlZiAwXG5sZXQgaml0X3RocmVzaG9sZF9za2lwcGVkX2NvdW50ID0gcmVmIDBcblxuKCoqIFJ1bnRpbWUsIGRhdGEtZHJpdmVuIEpJVCBleGNsdXNpb24gc2V0LiBOYW1lcyBhZGRlZCBoZXJlIGFyZSBuZXZlclxuICAgIEpJVC1jb21waWxlZCDigJQgdGhleSBydW4gb24gdGhlIENFSyBpbnRlcnByZXRlciBpbnN0ZWFkLlxuXG4gICAgVGhpcyBpcyBob3cgYSBndWVzdCBpbnRlcnByZXRlciBkZWNsYXJlcyBpdHMgKmludGVycHJldC1vbmx5KiBmdW5jdGlvbnM6XG4gICAgdGhvc2UgdGhhdCBjYXB0dXJlIG9yIGludm9rZSBmaXJzdC1jbGFzcyBjb250aW51YXRpb25zIChlLmcuIFNtYWxsdGFsaydzXG4gICAgW2NhbGwvY2NdLWJhc2VkIG5vbi1sb2NhbCByZXR1cm4gW15leHByXSwgb3IgYmxvY2sgZXNjYXBlKS4gVGhlIHN0YWNrIFZNXG4gICAgY2Fubm90IHRyYW5zZmVyIGNvbnRyb2wgdGhyb3VnaCBhIENFSyBjb250aW51YXRpb24sIHNvIGEgSklULWNvbXBpbGVkXG4gICAgZnJhbWUgb24gdGhlIE9DYW1sL1ZNIHN0YWNrIGJldHdlZW4gYSBbY2FsbC9jY10gYW5kIGl0cyBbKGsgdildIGludm9jYXRpb25cbiAgICB3b3VsZCBlaXRoZXIgZmFpbCBhdCBydW50aW1lIG9yICh3b3JzZSkgcmUtcnVuIHdpdGggZHVwbGljYXRlZCBzaWRlXG4gICAgZWZmZWN0cy4gTWFya2luZyB0aGUgZGlzcGF0Y2ggY29yZSBpbnRlcnByZXQtb25seSBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgb25cbiAgICB0aGUgQ0VLIHdoaWxlIHB1cmUgaGVscGVycyBzdGlsbCBKSVQuXG5cbiAgICBQb3B1bGF0ZWQgZnJvbSBTWCB2aWEgdGhlIFtqaXQtZXhjbHVkZSFdIHByaW1pdGl2ZSAoc2VlIHN4X3ByaW1pdGl2ZXMpLlxuICAgIENvbnN1bHRlZCBpbiBbU3hfdm0uaml0X2NvbXBpbGVfbGFtYmRhXSwgc28gaXQgY292ZXJzIEJPVEggSklUIGVudHJ5XG4gICAgcG9pbnRzOiB0aGUgQ0VLIGNhbGwgaG9vayBhbmQgdGhlIGluLVZNIHRpZXJlZC1jb21waWxhdGlvbiBwYXRoLiAqKVxubGV0IGppdF9leGNsdWRlZCA6IChzdHJpbmcsIHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG5cbigqKiBOYW1lc3BhY2UtcHJlZml4IGV4Y2x1c2lvbnMuIEEgZ3Vlc3QgaW50ZXJwcmV0ZXIgZGVjbGFyZXMgaXRzIHdob2xlXG4gICAgZnVuY3Rpb24gbmFtZXNwYWNlIGludGVycHJldC1vbmx5IHdpdGggb25lIGVudHJ5IChlLmcuIFtcImVyLVwiXSwgW1wic2NtLVwiXSksXG4gICAgd2hpY2ggaXMgZmFyIG1vcmUgcm9idXN0IHRoYW4gZW51bWVyYXRpbmcgZXZlcnkgZnVuY3Rpb24g4oCUIGEgbmFtZS1saXN0XG4gICAgbWlzc2VzIGZ1bmN0aW9ucyBpbiBleHRyYSBmaWxlcyAodGhlIGVybGFuZyBWTSBkaXNwYXRjaGVyLCBldGMuKSBhbmRcbiAgICBzaWxlbnRseSByZWdyZXNzZXMuIFNldCB2aWEgW2ppdC1leGNsdWRlIV0gd2l0aCBhIHRyYWlsaW5nIFtcIipcIl1cbiAgICAoZS5nLiBbKGppdC1leGNsdWRlISBcImVyLSpcIildKS4gQ2hlY2tlZCB2aWEgW2ppdF9uYW1lX2V4Y2x1ZGVkXS4gKilcbmxldCBqaXRfZXhjbHVkZWRfcHJlZml4ZXMgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW11cblxuKCoqIFRydWUgaWYgW25hbWVdIGlzIGV4Y2x1ZGVkIGZyb20gSklUIOKAlCBieSBleGFjdCBuYW1lIG9yIGJ5IG5hbWVzcGFjZSBwcmVmaXguICopXG5sZXQgaml0X25hbWVfZXhjbHVkZWQgbmFtZSA9XG4gIEhhc2h0YmwubWVtIGppdF9leGNsdWRlZCBuYW1lXG4gIHx8IExpc3QuZXhpc3RzIChmdW4gcCAtPlxuICAgICAgIFN0cmluZy5sZW5ndGggbmFtZSA+PSBTdHJpbmcubGVuZ3RoIHBcbiAgICAgICAmJiBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBwKSA9IHApICFqaXRfZXhjbHVkZWRfcHJlZml4ZXNcblxuKCoqIE5hbWVzIG9mIGZ1bmN0aW9ucyB0aGF0IEVTVEFCTElTSCBhbiBlc2NhcGluZyBjb250aW51YXRpb24gdmlhIGNhbGwvY2NcbiAgICAoZS5nLiBDb21tb24tTGlzcCdzIFtjbC1yZXN0YXJ0LWNhc2VdIC8gW2NsLWhhbmRsZXItY2FzZV0g4oCUIHRoZSBjb25kaXRpb25cbiAgICBzeXN0ZW0pLiBBbnkgU1ggZnVuY3Rpb24gdGhhdCAqY2FsbHMqIG9uZSBvZiB0aGVzZSBpcyBpdHNlbGYgdW5zYWZlIHRvIEpJVDpcbiAgICBKSVQtY29tcGlsaW5nIHRoZSBjYWxsZXIgZm9yY2VzIHRoZSBjYWxsL2NjLXdyYXBwaW5nIGZvcm0gdG8gcnVuIGluIGEgbmVzdGVkXG4gICAgY2VrLXJ1biwgd2hlcmUgaW52b2tpbmcgdGhlIGNhcHR1cmVkIGNvbnRpbnVhdGlvbiBydW5zLXRvLWNvbXBsZXRpb24tYW5kLVxuICAgIHJldHVybnMgaW5zdGVhZCBvZiBlc2NhcGluZyDigJQgc28gYSByZXN0YXJ0L25vbi1sb2NhbCBleGl0IHNpbGVudGx5IGZhaWxzXG4gICAgYW5kIHRoZSBib2R5IGZhbGxzIHRocm91Z2ggKG9ic2VydmVkIGFzIHJlc3VsdCBhY2N1bXVsYXRpb24gLyBuby1hYm9ydCkuXG5cbiAgICBUaGVzZSBjYWxsZXJzIGFyZSBOT1QgYSBmaXhlZCBuYW1lc3BhY2UgKHRoZXkgYXJlIGFyYml0cmFyeSB1c2VyL3Rlc3QgY29kZSksXG4gICAgc28gdGhleSBjYW5ub3QgYmUgcHJlZml4LWV4Y2x1ZGVkLiBJbnN0ZWFkIGEgZ3Vlc3QgZGVjbGFyZXMgaXRzIGVzY2FwaW5nXG4gICAgZm9ybXMgaGVyZSAodmlhIFtqaXQtZXhjbHVkZS1jYWxsZXJzLW9mIV0pIGFuZCBbaml0X2NvbXBpbGVfbGFtYmRhXSBza2lwc1xuICAgIGFueSBmdW5jdGlvbiB3aG9zZSBjb25zdGFudCBwb29sIHJlZmVyZW5jZXMgb25lIG9mIHRoZW0uICopXG5sZXQgaml0X2V4Y2x1ZGVkX2NhbGxlcl9uYW1lcyA6IChzdHJpbmcsIHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2XG5cbigqKiB7MiBKSVQgY2FjaGUgTFJVIGV2aWN0aW9uIOKAlCBQaGFzZSAyfVxuXG4gICAgT25jZSBhIGxhbWJkYSBjcm9zc2VzIHRoZSB0aHJlc2hvbGQsIGl0cyBbbF9jb21waWxlZF0gc2xvdCBpcyBmaWxsZWQuXG4gICAgVG8gYm91bmQgbWVtb3J5IHVuZGVyIHVuYm91bmRlZCBjb21waWxhdGlvbiBwcmVzc3VyZSwgdHJhY2sgYWxsIGxpdmVcbiAgICBjb21waWxlZCBsYW1iZGFzIGluIEZJRk8gb3JkZXIsIGFuZCBldmljdCBmcm9tIHRoZSBoZWFkIHdoZW4gdGhlIGNvdW50XG4gICAgZXhjZWVkcyBbaml0X2J1ZGdldF0uXG5cbiAgICBbbGFtYmRhX3VpZF9jb3VudGVyXSBtaW50cyB1bmlxdWUgaWRlbnRpdGllcyBvbiBsYW1iZGEgY3JlYXRpb247IHRoZVxuICAgIExSVSBxdWV1ZSBob2xkcyB0aGVzZSBJRHMgcGFpcmVkIHdpdGggYSBiYWNrLXJlZmVyZW5jZSB0byB0aGUgbGFtYmRhXG4gICAgc28gd2UgY2FuIGNsZWFyIGl0cyBbbF9jb21waWxlZF0gc2xvdCBvbiBldmljdGlvbi5cblxuICAgIEJ1ZGdldCBvZiAwID0gbm8gY2FjaGUgKGRpc2FibGUgSklUIGVudGlyZWx5KS5cbiAgICBCdWRnZXQgb2YgW21heF9pbnRdID0gdW5ib3VuZGVkIChsZWdhY3kgYmVoYXZpb3VyKS4gRGVmYXVsdCA1MDAwIGlzXG4gICAgYSBnZW5lcm91cyBjZWlsaW5nIGZvciBhbnkgcmVhbGlzdGljIHBhZ2U7IHRoZSB0ZXN0IGhhcm5lc3MgY29tcGlsZXNcbiAgICB+MzAwMCBkaXN0aW5jdCBvbmUtc2hvdCBsYW1iZGFzIGluIGEgZnVsbCBydW4gYnV0IHRpZXJlZCBjb21waWxhdGlvblxuICAgIChQaGFzZSAxKSBtZWFucyBtb3N0IG5ldmVyIGVudGVyIHRoZSBjYWNoZSwgc28gc3RlYWR5LXN0YXRlIGNvdW50XG4gICAgc3RheXMgc21hbGwuXG5cbiAgICBbbGFtYmRhX3VpZF9jb3VudGVyXSBhbmQgW25leHRfbGFtYmRhX3VpZF0gYXJlIGRlZmluZWQgYWJvdmVcbiAgICBbbWFrZV9sYW1iZGFdICh3aGljaCB1c2VzIHRoZW0gb24gY29uc3RydWN0aW9uKS4gKilcbmxldCBqaXRfYnVkZ2V0ID0gcmVmIDUwMDBcbmxldCBqaXRfZXZpY3RlZF9jb3VudCA9IHJlZiAwXG5cbigqKiBMaXZlIGNvbXBpbGVkIGxhbWJkYXMgaW4gRklGTyBvcmRlciDigJQgZnJvbnQgaXMgb2xkZXN0LCBiYWNrIGlzIG5ld2VzdC5cbiAgICBFYWNoIGVudHJ5IGlzICh1aWQsIGxhbWJkYSk7IG9uIGV2aWN0aW9uIHdlIGNsZWFyIGxhbWJkYS5sX2NvbXBpbGVkIGFuZFxuICAgIGRyb3AgZnJvbSB0aGUgcXVldWUuIFVzaW5nIGEgbXV0YWJsZSBRdWV1ZSByYXRoZXIgdGhhbiBhIGhhbmQtcm9sbGVkXG4gICAgbGlua2VkIGxpc3QgYmVjYXVzZSBldmljdGlvbiBpcyBhbW9ydGlzZWQgTygxKSBhdCB0aGUgaGVhZCBhbmQgaW5zZXJ0c1xuICAgIGFyZSBPKDEpIGF0IHRoZSB0YWlsLiAqKVxubGV0IGppdF9jYWNoZV9xdWV1ZSA6IChpbnQgKiB2YWx1ZSkgUXVldWUudCA9IFF1ZXVlLmNyZWF0ZSAoKVxubGV0IGppdF9jYWNoZV9zaXplICgpID0gUXVldWUubGVuZ3RoIGppdF9jYWNoZV9xdWV1ZVxuXG5sZXQgbWFrZV9jb21wb25lbnQgbmFtZSBwYXJhbXMgaGFzX2NoaWxkcmVuIGJvZHkgY2xvc3VyZSBhZmZpbml0eSA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBoYyA9IHZhbHVlX3RvX2Jvb2wgaGFzX2NoaWxkcmVuIGluXG4gIGxldCBhZmYgPSBtYXRjaCBhZmZpbml0eSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiYXV0b1wiIGluXG4gIENvbXBvbmVudCB7XG4gICAgY19uYW1lID0gbjsgY19wYXJhbXMgPSBwczsgY19oYXNfY2hpbGRyZW4gPSBoYztcbiAgICBjX2JvZHkgPSBib2R5OyBjX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBjX2FmZmluaXR5ID0gYWZmO1xuICAgIGNfZmlsZSA9IE5vbmU7IGNfY29tcGlsZWQgPSBOb25lO1xuICB9XG5cbmxldCBtYWtlX2lzbGFuZCBuYW1lIHBhcmFtcyBoYXNfY2hpbGRyZW4gYm9keSBjbG9zdXJlID1cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IGhjID0gdmFsdWVfdG9fYm9vbCBoYXNfY2hpbGRyZW4gaW5cbiAgSXNsYW5kIHtcbiAgICBpX25hbWUgPSBuOyBpX3BhcmFtcyA9IHBzOyBpX2hhc19jaGlsZHJlbiA9IGhjO1xuICAgIGlfYm9keSA9IGJvZHk7IGlfY2xvc3VyZSA9IHVud3JhcF9lbnZfdmFsIGNsb3N1cmU7XG4gICAgaV9maWxlID0gTm9uZTsgaV9jb21waWxlZCA9IE5vbmU7XG4gIH1cblxubGV0IG1ha2VfbWFjcm8gcGFyYW1zIHJlc3RfcGFyYW0gYm9keSBjbG9zdXJlIG5hbWUgPVxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IHJwID0gdmFsdWVfdG9fc3RyaW5nX29wdCByZXN0X3BhcmFtIGluXG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nX29wdCBuYW1lIGluXG4gIE1hY3JvIHtcbiAgICBtX3BhcmFtcyA9IHBzOyBtX3Jlc3RfcGFyYW0gPSBycDtcbiAgICBtX2JvZHkgPSBib2R5OyBtX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBtX25hbWUgPSBuO1xuICB9XG5cbmxldCBtYWtlX3RodW5rIGV4cHIgZW52ID0gVGh1bmsgKGV4cHIsIHVud3JhcF9lbnZfdmFsIGVudilcblxubGV0IG1ha2Vfc3ltYm9sIG5hbWUgPSBTeW1ib2wgKHZhbHVlX3RvX3N0cmluZyBuYW1lKVxubGV0IG1ha2Vfa2V5d29yZCBuYW1lID0gS2V5d29yZCAodmFsdWVfdG9fc3RyaW5nIG5hbWUpXG5cblxuKCoqIHsxIFR5cGUgaW5zcGVjdGlvbn0gKilcblxubGV0IHR5cGVfb2YgPSBmdW5jdGlvblxuICB8IE5pbCAgICAgICAgICAgIC0+IFwibmlsXCJcbiAgfCBCb29sIF8gICAgICAgICAtPiBcImJvb2xlYW5cIlxuICB8IEludGVnZXIgXyAgICAgIC0+IFwibnVtYmVyXCJcbiAgfCBOdW1iZXIgXyAgICAgICAtPiBcIm51bWJlclwiXG4gIHwgU3RyaW5nIF8gICAgICAgLT4gXCJzdHJpbmdcIlxuICB8IFN5bWJvbCBfICAgICAgIC0+IFwic3ltYm9sXCJcbiAgfCBLZXl3b3JkIF8gICAgICAtPiBcImtleXdvcmRcIlxuICB8IExpc3QgXyB8IExpc3RSZWYgXyAtPiBcImxpc3RcIlxuICB8IERpY3QgXyAgICAgICAgIC0+IFwiZGljdFwiXG4gIHwgTGFtYmRhIF8gICAgICAgLT4gXCJsYW1iZGFcIlxuICB8IENvbXBvbmVudCBfICAgIC0+IFwiY29tcG9uZW50XCJcbiAgfCBJc2xhbmQgXyAgICAgICAtPiBcImlzbGFuZFwiXG4gIHwgTWFjcm8gXyAgICAgICAgLT4gXCJtYWNyb1wiXG4gIHwgVGh1bmsgXyAgICAgICAgLT4gXCJ0aHVua1wiXG4gIHwgQ29udGludWF0aW9uIChfLCBfKSAtPiBcImNvbnRpbnVhdGlvblwiXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSAtPiBcImNvbnRpbnVhdGlvblwiXG4gIHwgTmF0aXZlRm4gXyAgICAgLT4gXCJmdW5jdGlvblwiXG4gIHwgU2lnbmFsIF8gICAgICAgLT4gXCJzaWduYWxcIlxuICB8IFJhd0hUTUwgXyAgICAgIC0+IFwicmF3LWh0bWxcIlxuICB8IFNwcmVhZCBfICAgICAgIC0+IFwic3ByZWFkXCJcbiAgfCBTeEV4cHIgXyAgICAgICAtPiBcInN4LWV4cHJcIlxuICB8IEVudiBfICAgICAgICAgIC0+IFwiZW52XCJcbiAgfCBDZWtTdGF0ZSBfICAgICAtPiBcImRpY3RcIiAgKCogQ0VLIHN0YXRlIGJlaGF2ZXMgYXMgYSBkaWN0IGZvciB0eXBlIGNoZWNrcyAqKVxuICB8IENla0ZyYW1lIF8gICAgIC0+IFwiZGljdFwiXG4gIHwgVm1DbG9zdXJlIF8gICAgLT4gXCJmdW5jdGlvblwiXG4gIHwgVm1GcmFtZSBfICAgICAgLT4gXCJ2bS1mcmFtZVwiXG4gIHwgVm1NYWNoaW5lIF8gICAgLT4gXCJ2bS1tYWNoaW5lXCJcbiAgfCBSZWNvcmQgciAgICAgICAtPiByLnJfdHlwZS5ydF9uYW1lXG4gIHwgUGFyYW1ldGVyIF8gICAgLT4gXCJwYXJhbWV0ZXJcIlxuICB8IFZlY3RvciBfICAgICAgIC0+IFwidmVjdG9yXCJcbiAgfCBTdHJpbmdCdWZmZXIgXyAtPiBcInN0cmluZy1idWZmZXJcIlxuICB8IEhhc2hUYWJsZSBfICAgIC0+IFwiaGFzaC10YWJsZVwiXG4gIHwgQ2hhciBfICAgICAgICAgLT4gXCJjaGFyXCJcbiAgfCBFb2YgICAgICAgICAgICAtPiBcImVvZi1vYmplY3RcIlxuICB8IFBvcnQgeyBzcF9raW5kID0gUG9ydElucHV0IF87IF8gfSAgLT4gXCJpbnB1dC1wb3J0XCJcbiAgfCBQb3J0IHsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgXzsgXyB9IC0+IFwib3V0cHV0LXBvcnRcIlxuICB8IFJhdGlvbmFsIF8gIC0+IFwicmF0aW9uYWxcIlxuICB8IFN4U2V0IF8gICAgICAgICAgLT4gXCJzZXRcIlxuICB8IFN4UmVnZXhwIF8gICAgICAgLT4gXCJyZWdleHBcIlxuICB8IFN4Qnl0ZXZlY3RvciBfICAgLT4gXCJieXRldmVjdG9yXCJcbiAgfCBBZHRWYWx1ZSBhICAgICAgIC0+IGEuYXZfdHlwZVxuXG5sZXQgaXNfbmlsID0gZnVuY3Rpb24gTmlsIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfbGFtYmRhID0gZnVuY3Rpb24gTGFtYmRhIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19jb21wb25lbnQgPSBmdW5jdGlvbiBDb21wb25lbnQgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX2lzbGFuZCA9IGZ1bmN0aW9uIElzbGFuZCBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfbWFjcm8gPSBmdW5jdGlvbiBNYWNybyBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfdGh1bmsgPSBmdW5jdGlvbiBUaHVuayBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfc2lnbmFsID0gZnVuY3Rpb25cbiAgfCBTaWduYWwgXyAtPiB0cnVlXG4gIHwgRGljdCBkIC0+IEhhc2h0YmwubWVtIGQgXCJfX3NpZ25hbFwiXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgaXNfcmVjb3JkID0gZnVuY3Rpb24gUmVjb3JkIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxubGV0IGlzX2NhbGxhYmxlID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBDb250aW51YXRpb24gKF8sIF8pIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSB8IFZtQ2xvc3VyZSBfIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxuKCoqIHsxIFRydXRoaW5lc3N9ICopXG5cbigqKiBTWCB0cnV0aGluZXNzOiBldmVyeXRoaW5nIGlzIHRydXRoeSBleGNlcHQgW05pbF0gYW5kIFtCb29sIGZhbHNlXS4gKilcbmxldCBzeF90cnV0aHkgPSBmdW5jdGlvblxuICB8IE5pbCB8IEJvb2wgZmFsc2UgLT4gZmFsc2VcbiAgfCBfIC0+IHRydWVcblxuXG4oKiogezEgQWNjZXNzb3JzfSAqKVxuXG5sZXQgc3ltYm9sX25hbWUgPSBmdW5jdGlvblxuICB8IFN5bWJvbCBzIC0+IFN0cmluZyBzXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBzeW1ib2wsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBrZXl3b3JkX25hbWUgPSBmdW5jdGlvblxuICB8IEtleXdvcmQgayAtPiBTdHJpbmcga1xuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQga2V5d29yZCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGxhbWJkYV9wYXJhbXMgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgbC5sX3BhcmFtcylcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGxhbWJkYSwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGxhbWJkYV9ib2R5ID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgbCAtPiBsLmxfYm9keVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IEVudiBsLmxfY2xvc3VyZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX25hbWUgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IChtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBTdHJpbmcgbiB8IE5vbmUgLT4gTmlsKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgc2V0X2xhbWJkYV9uYW1lIGwgbiA9IG1hdGNoIGwgd2l0aFxuICB8IExhbWJkYSBsIC0+IGwubF9uYW1lIDwtIFNvbWUgbjsgTmlsXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1sYW1iZGEtbmFtZSE6IG5vdCBhIGxhbWJkYVwiKVxuXG5sZXQgY29tcG9uZW50X25hbWUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IFN0cmluZyBjLmNfbmFtZVxuICB8IElzbGFuZCBpIC0+IFN0cmluZyBpLmlfbmFtZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2ZpbGUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IChtYXRjaCBjLmNfZmlsZSB3aXRoIFNvbWUgZiAtPiBTdHJpbmcgZiB8IE5vbmUgLT4gTmlsKVxuICB8IElzbGFuZCBpIC0+IChtYXRjaCBpLmlfZmlsZSB3aXRoIFNvbWUgZiAtPiBTdHJpbmcgZiB8IE5vbmUgLT4gTmlsKVxuICB8IF8gLT4gTmlsXG5cbmxldCBjb21wb25lbnRfc2V0X2ZpbGUgdiBmID1cbiAgKG1hdGNoIHYsIGYgd2l0aFxuICB8IENvbXBvbmVudCBjLCBTdHJpbmcgcyAtPiBjLmNfZmlsZSA8LSBTb21lIHNcbiAgfCBJc2xhbmQgaSwgU3RyaW5nIHMgLT4gaS5pX2ZpbGUgPC0gU29tZSBzXG4gIHwgXyAtPiAoKSk7IE5pbFxuXG5sZXQgY29tcG9uZW50X3NldF9maWxlX2IgPSBjb21wb25lbnRfc2V0X2ZpbGVcblxubGV0IGNvbXBvbmVudF9wYXJhbXMgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYy5jX3BhcmFtcylcbiAgfCBJc2xhbmQgaSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfYm9keSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gYy5jX2JvZHlcbiAgfCBJc2xhbmQgaSAtPiBpLmlfYm9keVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IEVudiBjLmNfY2xvc3VyZVxuICB8IElzbGFuZCBpIC0+IEVudiBpLmlfY2xvc3VyZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2hhc19jaGlsZHJlbiA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gQm9vbCBjLmNfaGFzX2NoaWxkcmVuXG4gIHwgSXNsYW5kIGkgLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfYWZmaW5pdHkgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IFN0cmluZyBjLmNfYWZmaW5pdHlcbiAgfCBJc2xhbmQgXyAtPiBTdHJpbmcgXCJjbGllbnRcIlxuICB8IF8gLT4gU3RyaW5nIFwiYXV0b1wiXG5cbmxldCBtYWNyb19wYXJhbXMgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBtLm1fcGFyYW1zKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbWFjcm8sIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBtYWNyb19yZXN0X3BhcmFtID0gZnVuY3Rpb25cbiAgfCBNYWNybyBtIC0+IChtYXRjaCBtLm1fcmVzdF9wYXJhbSB3aXRoIFNvbWUgcyAtPiBTdHJpbmcgcyB8IE5vbmUgLT4gTmlsKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbWFjcm8sIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBtYWNyb19ib2R5ID0gZnVuY3Rpb25cbiAgfCBNYWNybyBtIC0+IG0ubV9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gRW52IG0ubV9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IHRodW5rX2V4cHIgPSBmdW5jdGlvblxuICB8IFRodW5rIChlLCBfKSAtPiBlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCB0aHVuaywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IHRodW5rX2VudiA9IGZ1bmN0aW9uXG4gIHwgVGh1bmsgKF8sIGUpIC0+IEVudiBlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCB0aHVuaywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuXG4oKiogezEgUmVjb3JkIG9wZXJhdGlvbnN9ICopXG5cbmxldCB2YWxfdG9faW50ID0gZnVuY3Rpb25cbiAgfCBJbnRlZ2VyIG4gLT4gblxuICB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBbbWFrZV9ydGQgbmFtZSBmaWVsZHMgY3Rvcl9wYXJhbXNdIOKAlCBjcmVhdGUgYSByZWNvcmQgdHlwZSBkZXNjcmlwdG9yLlxuICAgIENhbGxlZCBhcyBbbWFrZS1ydGRdIGZyb20gdHJhbnNwaWxlZCBldmFsdWF0b3IuIFRha2VzIDMgc2VwYXJhdGUgYXJncy4gKilcbmxldCBtYWtlX3J0ZCBuYW1lIGZpZWxkcyBjdG9yX3BhcmFtcyA9XG4gIGxldCB1aWQgPSAhcnRkX2NvdW50ZXIgaW5cbiAgaW5jciBydGRfY291bnRlcjtcbiAgbGV0IGZpZWxkX25hbWVzID0gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIChtYXRjaCBmaWVsZHMgd2l0aCBMaXN0IGwgLT4gbCB8IF8gLT4gW10pIGluXG4gIGxldCBjdG9yX25hbWVzID0gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIChtYXRjaCBjdG9yX3BhcmFtcyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSkgaW5cbiAgbGV0IGZpZWxkX2FyciA9IEFycmF5Lm9mX2xpc3QgZmllbGRfbmFtZXMgaW5cbiAgbGV0IGN0b3JfbWFwID0gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biBjcCAtPlxuICAgIGxldCByZWMgZmluZCBqID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwibWFrZS1ydGQ6IGN0b3IgcGFyYW0gJXMgbm90IGluIGZpZWxkc1wiIGNwKSlcbiAgICAgIHwgZiA6OiBfIHdoZW4gZiA9IGNwIC0+IGpcbiAgICAgIHwgXyA6OiByZXN0IC0+IGZpbmQgKGogKyAxKSByZXN0XG4gICAgaW4gZmluZCAwIGZpZWxkX25hbWVzXG4gICkgY3Rvcl9uYW1lcykgaW5cbiAgbGV0IHJ0ID0geyBydF9uYW1lID0gdmFsdWVfdG9fc3RyaW5nIG5hbWU7IHJ0X3VpZCA9IHVpZDsgcnRfZmllbGRzID0gZmllbGRfYXJyOyBydF9jdG9yX21hcCA9IGN0b3JfbWFwIH0gaW5cbiAgSGFzaHRibC5hZGQgcnRkX3RhYmxlIHVpZCBydDtcbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgdWlkKVxuXG4oKiogW21ha2VfcmVjb3JkIHVpZF92YWwgYXJnc19saXN0XSDigJQgY3JlYXRlIGEgcmVjb3JkIGZyb20gdWlkICsgYXJncyBsaXN0LlxuICAgIDItYXJnIGRpcmVjdCBjYWxsOiAobWFrZS1yZWNvcmQgcnRkLXVpZCBjdG9yLWFyZ3MtbGlzdCkuICopXG5sZXQgbWFrZV9yZWNvcmQgdWlkX3ZhbCBhcmdzX2xpc3QgPVxuICBsZXQgdWlkID0gdmFsX3RvX2ludCB1aWRfdmFsIGluXG4gIGxldCBjdG9yX2FyZ3MgPSBtYXRjaCBhcmdzX2xpc3Qgd2l0aCBMaXN0IGwgLT4gbCB8IF8gLT4gW10gaW5cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBydGRfdGFibGUgdWlkIHdpdGhcbiAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQ6IHVua25vd24gcnRkXCIpXG4gIHwgU29tZSBydCAtPlxuICAgIGxldCBuX2N0b3IgPSBBcnJheS5sZW5ndGggcnQucnRfY3Rvcl9tYXAgaW5cbiAgICBsZXQgbl9hcmdzID0gTGlzdC5sZW5ndGggY3Rvcl9hcmdzIGluXG4gICAgaWYgbl9hcmdzIDw+IG5fY3RvciB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlczogZXhwZWN0ZWQgJWQgYXJncywgZ290ICVkXCJcbiAgICAgICAgcnQucnRfbmFtZSBuX2N0b3Igbl9hcmdzKSk7XG4gICAgbGV0IGZpZWxkcyA9IEFycmF5Lm1ha2UgKEFycmF5Lmxlbmd0aCBydC5ydF9maWVsZHMpIE5pbCBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpIGFyZyAtPlxuICAgICAgZmllbGRzLihydC5ydF9jdG9yX21hcC4oaSkpIDwtIGFyZ1xuICAgICkgY3Rvcl9hcmdzO1xuICAgIFJlY29yZCB7IHJfdHlwZSA9IHJ0OyByX2ZpZWxkcyA9IGZpZWxkcyB9XG5cbigqKiBbcmVjb3JkX3JlZiB2IGlkeF0g4oCUIGFjY2VzcyBmaWVsZCBieSBpbmRleC4gMi1hcmcgZGlyZWN0IGNhbGwuICopXG5sZXQgcmVjb3JkX3JlZiB2IGlkeCA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IFJlY29yZCByIC0+XG4gICAgbGV0IGkgPSB2YWxfdG9faW50IGlkeCBpblxuICAgIGlmIGkgPCAwIHx8IGkgPj0gQXJyYXkubGVuZ3RoIHIucl9maWVsZHMgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kcyBmb3IgJXNcIiBpIHIucl90eXBlLnJ0X25hbWUpKTtcbiAgICByLnJfZmllbGRzLihpKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVjb3JkLXJlZjogbm90IGEgcmVjb3JkLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG4oKiogW3JlY29yZF9zZXRfYiB2IGlkeCBuZXdfdmFsXSDigJQgbXV0YXRlIGZpZWxkIGJ5IGluZGV4LiAzLWFyZyBkaXJlY3QgY2FsbC5cbiAgICBOYW1lZCByZWNvcmRfc2V0X2IgYmVjYXVzZSB0cmFuc3BpbGVyIG1hbmdsZXMgcmVjb3JkLXNldCEgdG8gcmVjb3JkX3NldF9iLiAqKVxubGV0IHJlY29yZF9zZXRfYiB2IGlkeCBuZXdfdmFsID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgUmVjb3JkIHIgLT5cbiAgICBsZXQgaSA9IHZhbF90b19pbnQgaWR4IGluXG4gICAgaWYgaSA8IDAgfHwgaSA+PSBBcnJheS5sZW5ndGggci5yX2ZpZWxkcyB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJyZWNvcmQtc2V0ITogaW5kZXggJWQgb3V0IG9mIGJvdW5kcyBmb3IgJXNcIiBpIHIucl90eXBlLnJ0X25hbWUpKTtcbiAgICByLnJfZmllbGRzLihpKSA8LSBuZXdfdmFsOyBOaWxcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInJlY29yZC1zZXQhOiBub3QgYSByZWNvcmQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBbcmVjb3JkX3R5cGVfcCB2IHVpZF92YWxdIOKAlCB0eXBlIHByZWRpY2F0ZS4gMi1hcmcgZGlyZWN0IGNhbGwuXG4gICAgTmFtZWQgcmVjb3JkX3R5cGVfcCBiZWNhdXNlIHRyYW5zcGlsZXIgbWFuZ2xlcyByZWNvcmQtdHlwZT8gdG8gcmVjb3JkX3R5cGVfcC4gKilcbmxldCByZWNvcmRfdHlwZV9wIHYgdWlkX3ZhbCA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IFJlY29yZCByIC0+IEJvb2wgKHIucl90eXBlLnJ0X3VpZCA9IHZhbF90b19pbnQgdWlkX3ZhbClcbiAgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCoqIFtyZWNvcmRfcCB2XSDigJQgZ2VuZXJpYyByZWNvcmQgcHJlZGljYXRlLlxuICAgIE5hbWVkIHJlY29yZF9wIGJlY2F1c2UgdHJhbnNwaWxlciBtYW5nbGVzIHJlY29yZD8gdG8gcmVjb3JkX3AuICopXG5sZXQgcmVjb3JkX3AgdiA9IEJvb2wgKGlzX3JlY29yZCB2KVxuXG4oKiogW21ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIHJ0ZF91aWRdIOKAlCByZXR1cm5zIGEgTmF0aXZlRm4gdGhhdCBjb25zdHJ1Y3RzIHJlY29yZHMuXG4gICAgQ2FsbGVkIGZyb20gdHJhbnNwaWxlZCBzZi1kZWZpbmUtcmVjb3JkLXR5cGUuICopXG5sZXQgbWFrZV9yZWNvcmRfY29uc3RydWN0b3IgdWlkX3ZhbCA9XG4gIGxldCB1aWQgPSB2YWxfdG9faW50IHVpZF92YWwgaW5cbiAgbGV0IHJ0ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBydGRfdGFibGUgdWlkIHdpdGhcbiAgICB8IFNvbWUgcnQgLT4gcnQgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtY29uc3RydWN0b3I6IHVua25vd24gcnRkXCIpIGluXG4gIE5hdGl2ZUZuIChydC5ydF9uYW1lLCBmdW4gYXJncyAtPlxuICAgIGxldCBuX2N0b3IgPSBBcnJheS5sZW5ndGggcnQucnRfY3Rvcl9tYXAgaW5cbiAgICBsZXQgbl9hcmdzID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIGlmIG5fYXJncyA8PiBuX2N0b3IgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiJXM6IGV4cGVjdGVkICVkIGFyZ3MsIGdvdCAlZFwiIHJ0LnJ0X25hbWUgbl9jdG9yIG5fYXJncykpO1xuICAgIGxldCBmaWVsZHMgPSBBcnJheS5tYWtlIChBcnJheS5sZW5ndGggcnQucnRfZmllbGRzKSBOaWwgaW5cbiAgICBMaXN0Lml0ZXJpIChmdW4gaSBhcmcgLT4gZmllbGRzLihydC5ydF9jdG9yX21hcC4oaSkpIDwtIGFyZykgYXJncztcbiAgICBSZWNvcmQgeyByX3R5cGUgPSBydDsgcl9maWVsZHMgPSBmaWVsZHMgfSlcblxuKCoqIFttYWtlX3JlY29yZF9wcmVkaWNhdGUgcnRkX3VpZF0g4oCUIHJldHVybnMgYSBOYXRpdmVGbiB0aGF0IHRlc3RzIHJlY29yZCB0eXBlLiAqKVxubGV0IG1ha2VfcmVjb3JkX3ByZWRpY2F0ZSB1aWRfdmFsID1cbiAgbGV0IHVpZCA9IHZhbF90b19pbnQgdWlkX3ZhbCBpblxuICBOYXRpdmVGbiAoXCI/XCIsIGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmVjb3JkIHJdIC0+IEJvb2wgKHIucl90eXBlLnJ0X3VpZCA9IHVpZClcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIHByZWRpY2F0ZTogZXhwZWN0ZWQgMSBhcmdcIikpXG5cbigqKiBbbWFrZV9yZWNvcmRfYWNjZXNzb3IgZmllbGRfaWR4XSDigJQgcmV0dXJucyBhIE5hdGl2ZUZuIHRoYXQgcmVhZHMgYSBmaWVsZC4gKilcbmxldCBtYWtlX3JlY29yZF9hY2Nlc3NvciBpZHhfdmFsID1cbiAgbGV0IGlkeCA9IHZhbF90b19pbnQgaWR4X3ZhbCBpblxuICBOYXRpdmVGbiAoXCJyZWZcIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSZWNvcmQgcl0gLT5cbiAgICAgIGlmIGlkeCA8IDAgfHwgaWR4ID49IEFycmF5Lmxlbmd0aCByLnJfZmllbGRzIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkIGFjY2Vzc29yOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzXCIgaWR4KSk7XG4gICAgICByLnJfZmllbGRzLihpZHgpXG4gICAgfCBbdl0gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVjb3JkIGFjY2Vzc29yOiBub3QgYSByZWNvcmQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIGFjY2Vzc29yOiBleHBlY3RlZCAxIGFyZ1wiKSlcblxuKCoqIFttYWtlX3JlY29yZF9tdXRhdG9yIGZpZWxkX2lkeF0g4oCUIHJldHVybnMgYSBOYXRpdmVGbiB0aGF0IHNldHMgYSBmaWVsZC4gKilcbmxldCBtYWtlX3JlY29yZF9tdXRhdG9yIGlkeF92YWwgPVxuICBsZXQgaWR4ID0gdmFsX3RvX2ludCBpZHhfdmFsIGluXG4gIE5hdGl2ZUZuIChcInNldCFcIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSZWNvcmQgcjsgbmV3X3ZhbF0gLT5cbiAgICAgIGlmIGlkeCA8IDAgfHwgaWR4ID49IEFycmF5Lmxlbmd0aCByLnJfZmllbGRzIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkIG11dGF0b3I6IGluZGV4ICVkIG91dCBvZiBib3VuZHNcIiBpZHgpKTtcbiAgICAgIHIucl9maWVsZHMuKGlkeCkgPC0gbmV3X3ZhbDsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIG11dGF0b3I6IGV4cGVjdGVkIChyZWNvcmQgdmFsdWUpXCIpKVxuXG5cbigqKiB7MSBSN1JTIHBhcmFtZXRlciBhY2Nlc3NvcnMg4oCUIGNhbGxlZCBmcm9tIHRyYW5zcGlsZWQgZXZhbHVhdG9yfSAqKVxuXG5sZXQgcGFyYW1ldGVyX3AgdiA9IG1hdGNoIHYgd2l0aCBQYXJhbWV0ZXIgXyAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcbmxldCBwYXJhbWV0ZXJfdWlkIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBQYXJhbWV0ZXIgcCAtPiBTdHJpbmcgcC5wbV91aWRcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLXVpZDogbm90IGEgcGFyYW1ldGVyXCIpXG5sZXQgcGFyYW1ldGVyX2RlZmF1bHQgdiA9IG1hdGNoIHYgd2l0aFxuICB8IFBhcmFtZXRlciBwIC0+IHAucG1fZGVmYXVsdFxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItZGVmYXVsdDogbm90IGEgcGFyYW1ldGVyXCIpXG5sZXQgcGFyYW1ldGVyX2NvbnZlcnRlciB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgUGFyYW1ldGVyIHAgLT4gKG1hdGNoIHAucG1fY29udmVydGVyIHdpdGggU29tZSBjIC0+IGMgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLWNvbnZlcnRlcjogbm90IGEgcGFyYW1ldGVyXCIpXG5cblxuKCoqIHsxIERpY3Qgb3BlcmF0aW9uc30gKilcblxubGV0IG1ha2VfZGljdCAoKSA6IGRpY3QgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbmxldCBkaWN0X2dldCAoZCA6IGRpY3QpIGtleSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBrZXkgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsXG5cbmxldCBkaWN0X2hhcyAoZCA6IGRpY3QpIGtleSA9IEhhc2h0YmwubWVtIGQga2V5XG5cbmxldCBkaWN0X3NldCAoZCA6IGRpY3QpIGtleSB2ID0gSGFzaHRibC5yZXBsYWNlIGQga2V5IHZcblxubGV0IGRpY3RfZGVsZXRlIChkIDogZGljdCkga2V5ID0gSGFzaHRibC5yZW1vdmUgZCBrZXlcblxubGV0IGRpY3Rfa2V5cyAoZCA6IGRpY3QpID1cbiAgSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBTdHJpbmcgayA6OiBhY2MpIGQgW11cblxubGV0IGRpY3RfdmFscyAoZCA6IGRpY3QpID1cbiAgSGFzaHRibC5mb2xkIChmdW4gXyB2IGFjYyAtPiB2IDo6IGFjYykgZCBbXVxuXG5cbigqKiB7MSBWYWx1ZSBkaXNwbGF5fSAqKVxuXG4oKiBTaW5nbGUgc2hhcmVkIGJ1ZmZlciBmb3IgdGhlIGVudGlyZSBpbnNwZWN0IHJlY3Vyc2lvbiDigJQgZWxpbWluYXRlc1xuICAgdGhlIHBlci1sZXZlbCBbU3RyaW5nLmNvbmNhdCAoTGlzdC5tYXAgaW5zcGVjdCAuLi4pXSBhbGxvY2F0aW9uLiAqKVxubGV0IHJlYyBpbnNwZWN0X2ludG8gYnVmID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwibmlsXCJcbiAgfCBCb29sIHRydWUgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJmYWxzZVwiXG4gIHwgSW50ZWdlciBuIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCBuKVxuICB8IE51bWJlciBuIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoZm9ybWF0X251bWJlciBuKVxuICB8IFN0cmluZyBzIC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICAgIFN0cmluZy5pdGVyIChmdW5jdGlvblxuICAgICAgfCAnXCInICAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXG4nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcdFwiXG4gICAgICB8IGMgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjKSBzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICB8IFN5bWJvbCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgS2V5d29yZCBrIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJzonOyBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgKG1hdGNoIGl0ZW1zIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IHggOjogcmVzdCAtPlxuICAgICAgIGluc3BlY3RfaW50byBidWYgeDtcbiAgICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnOyBpbnNwZWN0X2ludG8gYnVmIHYpIHJlc3QpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG4gIHwgRGljdCBkIC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAneyc7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIGZpcnN0IDo9IGZhbHNlIGVsc2UgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc6JzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGs7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJzsgaW5zcGVjdF9pbnRvIGJ1ZiB2KSBkO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ30nXG4gIHwgTGFtYmRhIGwgLT5cbiAgICBsZXQgdGFnID0gbWF0Y2ggbC5sX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJsYW1iZGFcIiBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJzwnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgdGFnO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJygnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN0cmluZy5jb25jYXQgXCIsIFwiIGwubF9wYXJhbXMpO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIik+XCJcbiAgfCBDb21wb25lbnQgYyAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxDb21wb25lbnQgflwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgYy5jX25hbWU7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnKCc7IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgYy5jX3BhcmFtcyk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiKT5cIlxuICB8IElzbGFuZCBpIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPElzbGFuZCB+XCI7IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpLmlfbmFtZTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcoJzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuY29uY2F0IFwiLCBcIiBpLmlfcGFyYW1zKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIpPlwiXG4gIHwgTWFjcm8gbSAtPlxuICAgIGxldCB0YWcgPSBtYXRjaCBtLm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIm1hY3JvXCIgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc8JzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHRhZztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcoJzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuY29uY2F0IFwiLCBcIiBtLm1fcGFyYW1zKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIpPlwiXG4gIHwgVGh1bmsgXyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8dGh1bms+XCJcbiAgfCBDb250aW51YXRpb24gKF8sIF8pIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjb250aW51YXRpb24+XCJcbiAgfCBDYWxsY2NDb250aW51YXRpb24gKF8sIF8pIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjYWxsY2MtY29udGludWF0aW9uPlwiXG4gIHwgTmF0aXZlRm4gKG5hbWUsIF8pIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPG5hdGl2ZTpcIjsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG5hbWU7IEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgU2lnbmFsIF8gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPHNpZ25hbD5cIlxuICB8IFJhd0hUTUwgcyAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXCI8cmF3LWh0bWw6XCI7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI+XFxcIlwiXG4gIHwgU3ByZWFkIF8gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPHNwcmVhZD5cIlxuICB8IFN4RXhwciBzIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcIjxzeC1leHByOlwiO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPlxcXCJcIlxuICB8IEVudiBfIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxlbnY+XCJcbiAgfCBDZWtTdGF0ZSBfIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjZWstc3RhdGU+XCJcbiAgfCBDZWtGcmFtZSBmIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPGZyYW1lOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgZi5jZl90eXBlOyBCdWZmZXIuYWRkX2NoYXIgYnVmICc+J1xuICB8IFZtQ2xvc3VyZSBjbCAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjx2bTpcIjtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJhbm9uXCIpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgUmVjb3JkIHIgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8cmVjb3JkOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgci5yX3R5cGUucnRfbmFtZTtcbiAgICBBcnJheS5pdGVyaSAoZnVuIGkgdiAtPlxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgci5yX3R5cGUucnRfZmllbGRzLihpKTtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz0nO1xuICAgICAgaW5zcGVjdF9pbnRvIGJ1ZiB2KSByLnJfZmllbGRzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgUGFyYW1ldGVyIHAgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8cGFyYW1ldGVyOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgcC5wbV91aWQ7IEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgVmVjdG9yIGFyciAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiMoXCI7XG4gICAgQXJyYXkuaXRlcmkgKGZ1biBpIHYgLT5cbiAgICAgIGlmIGkgPiAwIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBpbnNwZWN0X2ludG8gYnVmIHYpIGFycjtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcpJ1xuICB8IFZtRnJhbWUgZiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8dm0tZnJhbWU6aXA9JWQgYmFzZT0lZD5cIiBmLnZmX2lwIGYudmZfYmFzZSlcbiAgfCBWbU1hY2hpbmUgbSAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8dm0tbWFjaGluZTpzcD0lZCBmcmFtZXM9JWQ+XCIgbS52bV9zcCAoTGlzdC5sZW5ndGggbS52bV9mcmFtZXMpKVxuICB8IFN0cmluZ0J1ZmZlciBiIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxzdHJpbmctYnVmZmVyOiVkPlwiIChCdWZmZXIubGVuZ3RoIGIpKVxuICB8IEhhc2hUYWJsZSBodCAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8aGFzaC10YWJsZTolZD5cIiAoSGFzaHRibC5sZW5ndGggaHQpKVxuICB8IENoYXIgbiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiNcXFxcXCI7XG4gICAgKG1hdGNoIG4gd2l0aFxuICAgICB8IDMyIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcInNwYWNlXCJcbiAgICAgfCAxMCAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJuZXdsaW5lXCJcbiAgICAgfCA5IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcInRhYlwiXG4gICAgIHwgMTMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwicmV0dXJuXCJcbiAgICAgfCAwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIm51bFwiXG4gICAgIHwgMjcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiZXNjYXBlXCJcbiAgICAgfCAxMjcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiZGVsZXRlXCJcbiAgICAgfCA4IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImJhY2tzcGFjZVwiXG4gICAgIHwgXyAtPiBCdWZmZXIuYWRkX3V0Zl84X3VjaGFyIGJ1ZiAoVWNoYXIub2ZfaW50IG4pKVxuICB8IEVvZiAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIjIWVvZlwiXG4gIHwgUG9ydCB7IHNwX2tpbmQgPSBQb3J0SW5wdXQgKF8sIHBvcyk7IHNwX2Nsb3NlZCB9IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxpbnB1dC1wb3J0OnBvcz0lZCVzPlwiICFwb3MgKGlmIHNwX2Nsb3NlZCB0aGVuIFwiOmNsb3NlZFwiIGVsc2UgXCJcIikpXG4gIHwgUG9ydCB7IHNwX2tpbmQgPSBQb3J0T3V0cHV0IGI7IHNwX2Nsb3NlZCB9IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxvdXRwdXQtcG9ydDpsZW49JWQlcz5cIiAoQnVmZmVyLmxlbmd0aCBiKSAoaWYgc3BfY2xvc2VkIHRoZW4gXCI6Y2xvc2VkXCIgZWxzZSBcIlwiKSlcbiAgfCBSYXRpb25hbCAobiwgZCkgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgbik7IEJ1ZmZlci5hZGRfY2hhciBidWYgJy8nO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCBkKVxuICB8IFN4U2V0IGh0IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxzZXQ6JWQ+XCIgKEhhc2h0YmwubGVuZ3RoIGh0KSlcbiAgfCBTeFJlZ2V4cCAoc3JjLCBmbGFncywgXykgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIjL1wiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgc3JjO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJy8nOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgZmxhZ3NcbiAgfCBTeEJ5dGV2ZWN0b3IgYiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiN1OChcIjtcbiAgICBsZXQgbiA9IEJ5dGVzLmxlbmd0aCBiIGluXG4gICAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgICBpZiBpID4gMCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKSlcbiAgICBkb25lO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG4gIHwgQWR0VmFsdWUgYSAtPlxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJygnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgYS5hdl9jdG9yO1xuICAgIEFycmF5Lml0ZXIgKGZ1biB2IC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnOyBpbnNwZWN0X2ludG8gYnVmIHYpIGEuYXZfZmllbGRzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG5cbmxldCBpbnNwZWN0IHYgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBpbnNwZWN0X2ludG8gYnVmIHY7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZnJlc2hfb29faWQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfVWNoYXIiLCJTdGRsaWJfUXVldWUiLCJTdGRsaWJfRmxvYXQiLCJzeW1fdG9faWQiLCJpZF90b19zeW0iLCJzeW1fbmV4dCIsImludGVybiIsInMiLCJtYXRjaCIsImlkIiwidW5pbnRlcm4iLCJ2bV9jYWxsX2Nsb3N1cmVfcmVmIiwicGFyYW0iLCJjZWtfY2FsbF9yZWYiLCJjZWtfZXZhbF9sYW1iZGFfcmVmIiwiRXZhbF9lcnJvciIsIlBhcnNlX2Vycm9yIiwiQ2VrUGVyZm9ybVJlcXVlc3QiLCJkZWZhdWx0X3ZtX2dsb2JhbHMiLCJjb252ZXJ0X3ZtX3N1c3BlbnNpb24iLCJ2bV9zdXNwZW5zaW9uX3RvX2RpY3QiLCJydGRfdGFibGUiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJwYXJlbnQiLCJlbnZfYmluZF9ob29rIiwiZW52X2JpbmQiLCJlbnYiLCJuYW1lIiwidiIsImVudl9oYXNfaWQiLCJlbnZfaGFzIiwic3ltYm9sX3Jlc29sdmVfaG9vayIsImVudl9nZXRfaWQiLCJjc3RfVW5kZWZpbmVkX3N5bWJvbCIsImhvb2siLCJlbnZfZ2V0IiwiZW52X3NldF9pZCIsImVudl9zZXQiLCJlbnZfbWVyZ2UiLCJiYXNlIiwib3ZlcmxheSIsImUiLCJkZXB0aCIsInAiLCJmb3JtYXRfbnVtYmVyIiwibiIsImNzdCIsImNzdF9mYWxzZSIsImNzdF90cnVlIiwidmFsdWVfdG9fc3RyaW5nIiwidmFsdWVfdG9fc3RyaW5nX2xpc3QiLCJpdGVtcyIsInZhbHVlX3RvX2Jvb2wiLCJiIiwidmFsdWVfdG9fc3RyaW5nX29wdCIsInVud3JhcF9lbnZfdmFsIiwibGFtYmRhX3VpZF9jb3VudGVyIiwibmV4dF9sYW1iZGFfdWlkIiwibWFrZV9sYW1iZGEiLCJwYXJhbXMiLCJib2R5IiwiY2xvc3VyZSIsInBzIiwiaml0X2V4Y2x1ZGVkIiwiaml0X2V4Y2x1ZGVkX3ByZWZpeGVzIiwiaml0X25hbWVfZXhjbHVkZWQiLCJqaXRfZXhjbHVkZWRfY2FsbGVyX25hbWVzIiwiaml0X2NhY2hlX3F1ZXVlIiwiaml0X2NhY2hlX3NpemUiLCJjc3RfYXV0byIsIm1ha2VfY29tcG9uZW50IiwiaGFzX2NoaWxkcmVuIiwiYWZmaW5pdHkiLCJoYyIsImFmZiIsIm1ha2VfaXNsYW5kIiwibWFrZV9tYWNybyIsInJlc3RfcGFyYW0iLCJycCIsIm1ha2VfdGh1bmsiLCJleHByIiwibWFrZV9zeW1ib2wiLCJtYWtlX2tleXdvcmQiLCJjc3RfbGFtYmRhIiwiY3N0X21hY3JvIiwiY3N0X25pbCIsInR5cGVfb2YiLCJjc3RfY29udGludWF0aW9uIiwiY3N0X2RpY3QiLCJjc3RfZnVuY3Rpb24iLCJjc3RfbnVtYmVyIiwiciIsImEiLCJpc19uaWwiLCJpc19sYW1iZGEiLCJpc19jb21wb25lbnQiLCJpc19pc2xhbmQiLCJpc19tYWNybyIsImlzX3RodW5rIiwiaXNfc2lnbmFsIiwiZCIsImlzX3JlY29yZCIsImlzX2NhbGxhYmxlIiwic3hfdHJ1dGh5Iiwic3ltYm9sX25hbWUiLCJrZXl3b3JkX25hbWUiLCJrIiwiY3N0X0V4cGVjdGVkX2xhbWJkYV9nb3QiLCJsYW1iZGFfcGFyYW1zIiwibCIsImxhbWJkYV9ib2R5IiwibGFtYmRhX2Nsb3N1cmUiLCJsYW1iZGFfbmFtZSIsInNldF9sYW1iZGFfbmFtZSIsImNzdF9FeHBlY3RlZF9jb21wb25lbnRfZ290IiwiY29tcG9uZW50X25hbWUiLCJjIiwiY29tcG9uZW50X2ZpbGUiLCJpIiwiY29tcG9uZW50X3NldF9maWxlIiwiY29tcG9uZW50X3BhcmFtcyIsImNvbXBvbmVudF9ib2R5IiwiY29tcG9uZW50X2Nsb3N1cmUiLCJjb21wb25lbnRfaGFzX2NoaWxkcmVuIiwiY29tcG9uZW50X2FmZmluaXR5IiwiY3N0X0V4cGVjdGVkX21hY3JvX2dvdCIsIm1hY3JvX3BhcmFtcyIsIm0iLCJtYWNyb19yZXN0X3BhcmFtIiwibWFjcm9fYm9keSIsIm1hY3JvX2Nsb3N1cmUiLCJjc3RfRXhwZWN0ZWRfdGh1bmtfZ290IiwidGh1bmtfZXhwciIsInRodW5rX2VudiIsInZhbF90b19pbnQiLCJydGRfY291bnRlciIsIm1ha2VfcnRkIiwiZmllbGRzIiwiY3Rvcl9wYXJhbXMiLCJ1aWQiLCJmaWVsZF9uYW1lcyIsImN0b3JfbmFtZXMiLCJmaWVsZF9hcnIiLCJjcCIsImoiLCJyZXN0IiwiY3Rvcl9tYXAiLCJydCIsImNzdF9hcmdzX2dvdCIsImNzdF9zX2V4cGVjdGVkX2RfYXJnc19nb3RfZCIsImNzdF9leHBlY3RlZCIsIm1ha2VfcmVjb3JkIiwidWlkX3ZhbCIsImFyZ3NfbGlzdCIsImN0b3JfYXJncyIsIm5fY3RvciIsIm5fYXJncyIsImFyZyIsImNzdF9vdXRfb2ZfYm91bmRzX2ZvciIsInJlY29yZF9yZWYiLCJpZHgiLCJyZWNvcmRfc2V0X2IiLCJuZXdfdmFsIiwicmVjb3JkX3R5cGVfcCIsInJlY29yZF9wIiwibWFrZV9yZWNvcmRfY29uc3RydWN0b3IiLCJhcmdzIiwibWFrZV9yZWNvcmRfcHJlZGljYXRlIiwiY3N0X291dF9vZl9ib3VuZHMiLCJtYWtlX3JlY29yZF9hY2Nlc3NvciIsImlkeF92YWwiLCJtYWtlX3JlY29yZF9tdXRhdG9yIiwicGFyYW1ldGVyX3AiLCJwYXJhbWV0ZXJfdWlkIiwicGFyYW1ldGVyX2RlZmF1bHQiLCJwYXJhbWV0ZXJfY29udmVydGVyIiwibWFrZV9kaWN0IiwiZGljdF9nZXQiLCJrZXkiLCJkaWN0X2hhcyIsImRpY3Rfc2V0IiwiZGljdF9kZWxldGUiLCJkaWN0X2tleXMiLCJhY2MiLCJkaWN0X3ZhbHMiLCJpbnNwZWN0X2ludG8iLCJidWYiLCJmaXJzdCIsInRhZyIsImNsIiwiYXJyIiwiaHQiLCJzcF9jbG9zZWQiLCJjc3RfY2xvc2VkIiwicG9zIiwiZmxhZ3MiLCJzcmMiLCJ4IiwiaW5zcGVjdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxZQ1kwQztBQUFBLElBQUFDLFlBQ0E7QUFBQSxJQUFBQyxXQUFrQjtBQUFBLFlBQUFDLE9BQUFDO0FBQUFBLFFBQUFDLFFBSXBEO0FBQUEsSUFBNEIsY0FBQUMsS0FBQSxVQUNyQjtBQUFBLFFBQUFBLE9BRVg7QUFB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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRGxpQjdEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzk5NTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X2Nib3IubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogZGFnLWNib3IgZW5jb2RlIC8gZGVjb2RlIOKAlCBwdXJlIE9DYW1sLCBXQVNNLXNhZmUuXG5cbiAgICBSRkMgODk0OSBkZXRlcm1pbmlzdGljIHN1YnNldCBhcyBjb25zdHJhaW5lZCBieSBJUExEIGRhZy1jYm9yXG4gICAgKFJGQyA4NzQyKTogdW5zaWduZWQvbmVnYXRpdmUgaW50cywgdGV4dCBzdHJpbmdzLCBhcnJheXMsIG1hcHNcbiAgICB3aXRoIGtleXMgc29ydGVkIGJ5ICoqbGVuZ3RoLXRoZW4tYnl0ZXdpc2UqKiwgYm9vbCwgbnVsbCwgYW5kXG4gICAgdGFnIDQyIChDSUQgbGluaywgZGVjb2RlLXNpZGUgcGFzc3Rocm91Z2gpLiBGbG9hdHMgYXJlIG5vdFxuICAgIHN1cHBvcnRlZCAobm8gZmVkLXN4IHNoYXBlIG5lZWRzIHRoZW0geWV0KSDigJQgZW5jb2RpbmcgYSBbTnVtYmVyXVxuICAgIG9yIGRlY29kaW5nIGEgZmxvYXQgaGVhZCByYWlzZXMuIFJlZmVyZW5jZTogUkZDIDg5NDkgwqczLCDCpzQuMi4gKilcblxub3BlbiBTeF90eXBlc1xuXG5leGNlcHRpb24gQ2Jvcl9lcnJvciBvZiBzdHJpbmdcblxuKCogLS0tLSBFbmNvZGVyIC0tLS0gKilcblxubGV0IHdyaXRlX2hlYWQgYnVmIG1ham9yIHYgPVxuICBsZXQgbSA9IG1ham9yIGxzbCA1IGluXG4gICgqIFdpZHRoIHNlbGVjdGlvbiArIGJpZy1lbmRpYW4gYnl0ZSBlbWlzc2lvbiB2aWEgSW50NjQsIHNvIHRoZSB3ZWIgdGFyZ2V0c1xuICAgICBjb21wdXRlIGlkZW50aWNhbGx5IHRvIG5hdGl2ZTogb24ganNfb2Zfb2NhbWwgW2ludF0gaXMgMzItYml0LCBzbyB0aGVcbiAgICAgbGl0ZXJhbCAweDEwMDAwMDAwMCAoMl4zMikgdHJ1bmNhdGVzIHRvIDAgKHNlbmRpbmcgc21hbGwgdmFsdWVzIHRvIHRoZVxuICAgICA4LWJ5dGUgYnJhbmNoKSBhbmQgW3YgbHNyICg4KmkpXSB3aXRoIGk+PTQgaXMgc2hpZnQtbW9kLTMyLiBJbnQ2NCBoYXMgdGhlXG4gICAgIGZ1bGwgNjQtYml0IHdpZHRoIGFuZCB3ZWxsLWRlZmluZWQgc2hpZnRzIG9uIGV2ZXJ5IHRhcmdldC4gKilcbiAgbGV0IHY2NCA9IEludDY0Lm9mX2ludCB2IGluXG4gIGxldCBwdXRfYmUgbmJ5dGVzID1cbiAgICBmb3IgaSA9IG5ieXRlcyAtIDEgZG93bnRvIDAgZG9cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWZcbiAgICAgICAgKENoYXIuY2hyIChJbnQ2NC50b19pbnRcbiAgICAgICAgICAgKEludDY0LmxvZ2FuZCAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCB2NjQgKDggKiBpKSkgMHhGRkwpKSlcbiAgICBkb25lXG4gIGluXG4gIGlmIHYgPCAyNCB0aGVuXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG0gbG9yIHYpKVxuICBlbHNlIGlmIHYgPCAweDEwMCB0aGVuIGJlZ2luXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG0gbG9yIDI0KSk7IHB1dF9iZSAxXG4gIGVuZCBlbHNlIGlmIHYgPCAweDEwMDAwIHRoZW4gYmVnaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChDaGFyLmNociAobSBsb3IgMjUpKTsgcHV0X2JlIDJcbiAgZW5kIGVsc2UgaWYgSW50NjQuY29tcGFyZSB2NjQgMHgxMDAwMDAwMDBMIDwgMCB0aGVuIGJlZ2luXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG0gbG9yIDI2KSk7IHB1dF9iZSA0XG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG0gbG9yIDI3KSk7IHB1dF9iZSA4XG4gIGVuZFxuXG4oKiBkYWctY2JvciBtYXAga2V5IG9yZGVyOiBzaG9ydGVyIGtleSBmaXJzdCwgdGhlbiBieXRld2lzZS4gKilcbmxldCBrZXlfb3JkZXIgYSBiID1cbiAgbGV0IGxhID0gU3RyaW5nLmxlbmd0aCBhIGFuZCBsYiA9IFN0cmluZy5sZW5ndGggYiBpblxuICBpZiBsYSA8PiBsYiB0aGVuIGNvbXBhcmUgbGEgbGIgZWxzZSBjb21wYXJlIGEgYlxuXG5sZXQgcmVjIGVuY29kZV9pbnRvIGJ1ZiAodiA6IHZhbHVlKSA6IHVuaXQgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBJbnRlZ2VyIG4gLT5cbiAgICBpZiBuID49IDAgdGhlbiB3cml0ZV9oZWFkIGJ1ZiAwIG5cbiAgICBlbHNlIHdyaXRlX2hlYWQgYnVmIDEgKC0xIC0gbilcbiAgfCBTdHJpbmcgcyAtPlxuICAgIHdyaXRlX2hlYWQgYnVmIDMgKFN0cmluZy5sZW5ndGggcyk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgfCBTeW1ib2wgcyB8IEtleXdvcmQgcyAtPlxuICAgIHdyaXRlX2hlYWQgYnVmIDMgKFN0cmluZy5sZW5ndGggcyk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgfCBCb29sIGZhbHNlIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xceGY0J1xuICB8IEJvb2wgdHJ1ZSAgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFx4ZjUnXG4gIHwgTmlsICAgICAgICAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHhmNidcbiAgfCBMaXN0IGl0ZW1zIC0+XG4gICAgd3JpdGVfaGVhZCBidWYgNCAoTGlzdC5sZW5ndGggaXRlbXMpO1xuICAgIExpc3QuaXRlciAoZW5jb2RlX2ludG8gYnVmKSBpdGVtc1xuICB8IERpY3QgZCAtPlxuICAgIGxldCBrZXlzID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgZCBbXSBpblxuICAgIGxldCBrZXlzID0gTGlzdC5zb3J0X3VuaXEga2V5X29yZGVyIGtleXMgaW5cbiAgICB3cml0ZV9oZWFkIGJ1ZiA1IChMaXN0Lmxlbmd0aCBrZXlzKTtcbiAgICBMaXN0Lml0ZXIgKGZ1biBrIC0+XG4gICAgICB3cml0ZV9oZWFkIGJ1ZiAzIChTdHJpbmcubGVuZ3RoIGspO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGs7XG4gICAgICBlbmNvZGVfaW50byBidWYgKEhhc2h0YmwuZmluZCBkIGspKSBrZXlzXG4gIHwgTnVtYmVyIF8gLT5cbiAgICByYWlzZSAoQ2Jvcl9lcnJvciBcImNib3ItZW5jb2RlOiBmbG9hdHMgdW5zdXBwb3J0ZWQgKGRhZy1jYm9yIHN1YnNldClcIilcbiAgfCBfIC0+XG4gICAgcmFpc2UgKENib3JfZXJyb3JcbiAgICAgICAgICAgICAoXCJjYm9yLWVuY29kZTogdW5lbmNvZGFibGUgdmFsdWUgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgZW5jb2RlICh2IDogdmFsdWUpIDogc3RyaW5nID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgZW5jb2RlX2ludG8gYnVmIHY7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuKCogLS0tLSBEZWNvZGVyIC0tLS0gKilcblxubGV0IGRlY29kZSAocyA6IHN0cmluZykgOiB2YWx1ZSA9XG4gIGxldCBwb3MgPSByZWYgMCBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBieXRlICgpID1cbiAgICBpZiAhcG9zID49IGxlbiB0aGVuIHJhaXNlIChDYm9yX2Vycm9yIFwiY2Jvci1kZWNvZGU6IHRydW5jYXRlZFwiKTtcbiAgICBsZXQgYyA9IENoYXIuY29kZSBzLlshcG9zXSBpbiBpbmNyIHBvczsgY1xuICBpblxuICBsZXQgcmVhZF91aW50IGFpID1cbiAgICBpZiBhaSA8IDI0IHRoZW4gYWlcbiAgICBlbHNlIGlmIGFpID0gMjQgdGhlbiBieXRlICgpXG4gICAgZWxzZSBpZiBhaSA9IDI1IHRoZW4gbGV0IGEgPSBieXRlICgpIGluIGxldCBiID0gYnl0ZSAoKSBpbiAoYSBsc2wgOCkgbG9yIGJcbiAgICBlbHNlIGlmIGFpID0gMjYgdGhlbiBiZWdpblxuICAgICAgbGV0IHYgPSByZWYgMCBpblxuICAgICAgZm9yIF8gPSAwIHRvIDMgZG8gdiA6PSAoIXYgbHNsIDgpIGxvciBieXRlICgpIGRvbmU7ICF2XG4gICAgZW5kIGVsc2UgaWYgYWkgPSAyNyB0aGVuIGJlZ2luXG4gICAgICBsZXQgdiA9IHJlZiAwIGluXG4gICAgICBmb3IgXyA9IDAgdG8gNyBkbyB2IDo9ICghdiBsc2wgOCkgbG9yIGJ5dGUgKCkgZG9uZTsgIXZcbiAgICBlbmQgZWxzZSByYWlzZSAoQ2Jvcl9lcnJvciBcImNib3ItZGVjb2RlOiBiYWQgYWRkaXRpb25hbCBpbmZvXCIpXG4gIGluXG4gIGxldCByZWFkX2J5dGVzIG4gPVxuICAgIGlmICFwb3MgKyBuID4gbGVuIHRoZW4gcmFpc2UgKENib3JfZXJyb3IgXCJjYm9yLWRlY29kZTogdHJ1bmNhdGVkXCIpO1xuICAgIGxldCByID0gU3RyaW5nLnN1YiBzICFwb3MgbiBpbiBwb3MgOj0gIXBvcyArIG47IHJcbiAgaW5cbiAgbGV0IHJlYyBpdGVtICgpID1cbiAgICBsZXQgYiA9IGJ5dGUgKCkgaW5cbiAgICBsZXQgbWFqb3IgPSBiIGxzciA1IGFuZCBhaSA9IGIgbGFuZCAweDFmIGluXG4gICAgbWF0Y2ggbWFqb3Igd2l0aFxuICAgIHwgMCAtPiBJbnRlZ2VyIChyZWFkX3VpbnQgYWkpXG4gICAgfCAxIC0+IEludGVnZXIgKC0xIC0gcmVhZF91aW50IGFpKVxuICAgIHwgMiAtPiBTdHJpbmcgKHJlYWRfYnl0ZXMgKHJlYWRfdWludCBhaSkpXG4gICAgfCAzIC0+IFN0cmluZyAocmVhZF9ieXRlcyAocmVhZF91aW50IGFpKSlcbiAgICB8IDQgLT5cbiAgICAgIGxldCBuID0gcmVhZF91aW50IGFpIGluXG4gICAgICBMaXN0IChMaXN0LmluaXQgbiAoZnVuIF8gLT4gaXRlbSAoKSkpXG4gICAgfCA1IC0+XG4gICAgICBsZXQgbiA9IHJlYWRfdWludCBhaSBpblxuICAgICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICAgIGZvciBfID0gMSB0byBuIGRvXG4gICAgICAgIGxldCBrID0gbWF0Y2ggaXRlbSAoKSB3aXRoXG4gICAgICAgICAgfCBTdHJpbmcgayAtPiBrXG4gICAgICAgICAgfCBfIC0+IHJhaXNlIChDYm9yX2Vycm9yIFwiY2Jvci1kZWNvZGU6IG5vbi1zdHJpbmcgbWFwIGtleVwiKVxuICAgICAgICBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBrIChpdGVtICgpKVxuICAgICAgZG9uZTtcbiAgICAgIERpY3QgZFxuICAgIHwgNiAtPlxuICAgICAgKCogVGFnOiB0YWctNDIgQ0lEIGxpbmsg4oaSIHBhc3MgdGhlIGlubmVyIGl0ZW0gdGhyb3VnaC4gKilcbiAgICAgIGlnbm9yZSAocmVhZF91aW50IGFpKTsgaXRlbSAoKVxuICAgIHwgNyAtPlxuICAgICAgKG1hdGNoIGFpIHdpdGhcbiAgICAgICB8IDIwIC0+IEJvb2wgZmFsc2VcbiAgICAgICB8IDIxIC0+IEJvb2wgdHJ1ZVxuICAgICAgIHwgMjIgLT4gTmlsXG4gICAgICAgfCAyMyAtPiBOaWxcbiAgICAgICB8IF8gLT5cbiAgICAgICAgIHJhaXNlIChDYm9yX2Vycm9yXG4gICAgICAgICAgICAgICAgICBcImNib3ItZGVjb2RlOiBmbG9hdHMvc2ltcGxlIHVuc3VwcG9ydGVkIChkYWctY2JvciBzdWJzZXQpXCIpKVxuICAgIHwgXyAtPiByYWlzZSAoQ2Jvcl9lcnJvciBcImNib3ItZGVjb2RlOiBiYWQgbWFqb3IgdHlwZVwiKVxuICBpblxuICBsZXQgdiA9IGl0ZW0gKCkgaW5cbiAgdlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0xpc3QiLCJTeF90eXBlcyIsIlN0ZGxpYiIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsIlN0ZGxpYl9JbnQ2NCIsIkNib3JfZXJyb3IiLCJ3cml0ZV9oZWFkIiwiYnVmIiwibWFqb3IiLCJ2IiwibSIsInY2NCIsInB1dF9iZSIsIm5ieXRlcyIsImkiLCJrZXlfb3JkZXIiLCJhIiwiYiIsImxhIiwibGIiLCJlbmNvZGVfaW50byIsIm4iLCJzIiwiaXRlbXMiLCJkIiwia2V5cyIsImsiLCJwYXJhbSIsImFjYyIsImVuY29kZSIsImRlY29kZSIsImxlbiIsImNzdF9jYm9yX2RlY29kZV90cnVuY2F0ZWQiLCJwb3MiLCJieXRlIiwiYyIsInJlYWRfdWludCIsImFpIiwiZm9yJCIsIml0ZW0iLCJzd2l0Y2hlciIsInIiLCJtYXRjaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFB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SUF3QmdCO0FBQUEsUUFBQWxCLElBRWpEO0FBQUEsSUFDUjtBQUFBLEdBQUM7QUFBQSxHRGpKSCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQwMjA3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9zaGEyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIFNIQS0yIChTSEEtMjU2LCBTSEEtNTEyKSDigJQgcHVyZSBPQ2FtbCwgV0FTTS1zYWZlLlxuXG4gICAgTm8gQyBzdHVicywgbm8gZXh0ZXJuYWwgZGVwcy4gVXNlZCBieSB0aGUgZmVkLXN4IGhvc3QgcHJpbWl0aXZlc1xuICAgIFtjcnlwdG8tc2hhMjU2XSAvIFtjcnlwdG8tc2hhNTEyXS4gUmVmZXJlbmNlOiBGSVBTIDE4MC00LiAqKVxuXG4oKiAtLS0tIFNIQS0yNTYgKEZJUFMgMTgwLTQgwqc2LjIpLiAzMi1iaXQgd29yZHMgdmlhIEludDMyLCBOT1QgbmF0aXZlIGludC5cbiAgIE9uIHRoZSB3ZWIgdGFyZ2V0cyB0aGUga2VybmVsIGlzIGNvbXBpbGVkIGJ5IGpzX29mX29jYW1sICgzMi1iaXQgaW50KSBhbmRcbiAgIHdhc21fb2Zfb2NhbWwgKDMxLWJpdCBpbnQpLCB3aGVyZSBuYXRpdmUgW2ludF0gc2lsZW50bHkgdHJ1bmNhdGVzIHRoZSAzMi1iaXRcbiAgIHJvdW5kIHdvcmRzIOKAlCBwcm9kdWNpbmcgV1JPTkcgZGlnZXN0cyAoYW5kLCBkb3duc3RyZWFtLCBiYWQgQ0lEcyBhbmQgYVxuICAgQ2hhci5jaHIgY3Jhc2ggYXQga2VybmVsIGluaXQpLiBJbnQzMiBoYXMgd2VsbC1kZWZpbmVkIHdyYXAtYXJvdW5kIG1vZCAyXjMyIG9uXG4gICBldmVyeSB0YXJnZXQsIHNvIHRoaXMgbWF0Y2hlcyB0aGUgNjMtYml0IG5hdGl2ZSBidWlsZCBleGFjdGx5LiAtLS0tICopXG5cbmxldCBrMjU2ID0gW3xcbiAgMHg0MjhhMmY5OGw7IDB4NzEzNzQ0OTFsOyAweGI1YzBmYmNmbDsgMHhlOWI1ZGJhNWw7XG4gIDB4Mzk1NmMyNWJsOyAweDU5ZjExMWYxbDsgMHg5MjNmODJhNGw7IDB4YWIxYzVlZDVsO1xuICAweGQ4MDdhYTk4bDsgMHgxMjgzNWIwMWw7IDB4MjQzMTg1YmVsOyAweDU1MGM3ZGMzbDtcbiAgMHg3MmJlNWQ3NGw7IDB4ODBkZWIxZmVsOyAweDliZGMwNmE3bDsgMHhjMTliZjE3NGw7XG4gIDB4ZTQ5YjY5YzFsOyAweGVmYmU0Nzg2bDsgMHgwZmMxOWRjNmw7IDB4MjQwY2ExY2NsO1xuICAweDJkZTkyYzZmbDsgMHg0YTc0ODRhYWw7IDB4NWNiMGE5ZGNsOyAweDc2Zjk4OGRhbDtcbiAgMHg5ODNlNTE1Mmw7IDB4YTgzMWM2NmRsOyAweGIwMDMyN2M4bDsgMHhiZjU5N2ZjN2w7XG4gIDB4YzZlMDBiZjNsOyAweGQ1YTc5MTQ3bDsgMHgwNmNhNjM1MWw7IDB4MTQyOTI5NjdsO1xuICAweDI3YjcwYTg1bDsgMHgyZTFiMjEzOGw7IDB4NGQyYzZkZmNsOyAweDUzMzgwZDEzbDtcbiAgMHg2NTBhNzM1NGw7IDB4NzY2YTBhYmJsOyAweDgxYzJjOTJlbDsgMHg5MjcyMmM4NWw7XG4gIDB4YTJiZmU4YTFsOyAweGE4MWE2NjRibDsgMHhjMjRiOGI3MGw7IDB4Yzc2YzUxYTNsO1xuICAweGQxOTJlODE5bDsgMHhkNjk5MDYyNGw7IDB4ZjQwZTM1ODVsOyAweDEwNmFhMDcwbDtcbiAgMHgxOWE0YzExNmw7IDB4MWUzNzZjMDhsOyAweDI3NDg3NzRjbDsgMHgzNGIwYmNiNWw7XG4gIDB4MzkxYzBjYjNsOyAweDRlZDhhYTRhbDsgMHg1YjljY2E0Zmw7IDB4NjgyZTZmZjNsO1xuICAweDc0OGY4MmVlbDsgMHg3OGE1NjM2Zmw7IDB4ODRjODc4MTRsOyAweDhjYzcwMjA4bDtcbiAgMHg5MGJlZmZmYWw7IDB4YTQ1MDZjZWJsOyAweGJlZjlhM2Y3bDsgMHhjNjcxNzhmMmwgfF1cblxubGV0IHJvdHIzMiAoeCA6IGludDMyKSAobiA6IGludCkgOiBpbnQzMiA9XG4gIEludDMyLmxvZ29yIChJbnQzMi5zaGlmdF9yaWdodF9sb2dpY2FsIHggbikgKEludDMyLnNoaWZ0X2xlZnQgeCAoMzIgLSBuKSlcblxubGV0IHNoYTI1Nl9oZXggKG1zZyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgaCA9IFt8IDB4NmEwOWU2NjdsOyAweGJiNjdhZTg1bDsgMHgzYzZlZjM3Mmw7IDB4YTU0ZmY1M2FsO1xuICAgICAgICAgICAgIDB4NTEwZTUyN2ZsOyAweDliMDU2ODhjbDsgMHgxZjgzZDlhYmw7IDB4NWJlMGNkMTlsIHxdIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIG1zZyBpblxuICAoKiBQYWRkZWQgbGVuZ3RoOiBtdWx0aXBsZSBvZiA2NCBieXRlcy4gKilcbiAgbGV0IGJpdGxlbiA9IEludDY0Lm11bCAoSW50NjQub2ZfaW50IGxlbikgOEwgaW5cbiAgbGV0IHBhZGxlbiA9XG4gICAgbGV0IHIgPSAobGVuICsgMSkgbW9kIDY0IGluXG4gICAgaWYgciA8PSA1NiB0aGVuIDU2IC0gciBlbHNlIDEyMCAtIHJcbiAgaW5cbiAgbGV0IHRvdGFsID0gbGVuICsgMSArIHBhZGxlbiArIDggaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLm1ha2UgdG90YWwgJ1xcMDAwJyBpblxuICBCeXRlcy5ibGl0X3N0cmluZyBtc2cgMCBidWYgMCBsZW47XG4gIEJ5dGVzLnNldCBidWYgbGVuICdcXHg4MCc7XG4gICgqIDY0LWJpdCBiaWctZW5kaWFuIGJpdCBsZW5ndGguIEludDY0IHNoaWZ0cyBzbyB0aGUgaGlnaCBieXRlcyAoc2hpZnQgPj0gMzIpXG4gICAgIGFyZSBjb3JyZWN0IG9uIHRoZSAzMi1iaXQgd2ViIHRhcmdldHMg4oCUIG5hdGl2ZSBpbnQgYGxzciAzMmAgaXMgc2hpZnQtbW9kLTMyXG4gICAgIG9uIGpzX29mX29jYW1sIGFuZCB3b3VsZCBsZWFrIHRoZSBsb3cgbGVuZ3RoIGJ5dGUgaW50byBhIGhpZ2hlciB3b3JkLiAqKVxuICBmb3IgaSA9IDAgdG8gNyBkb1xuICAgIEJ5dGVzLnNldCBidWYgKHRvdGFsIC0gMSAtIGkpXG4gICAgICAoQ2hhci5jaHIgKEludDY0LnRvX2ludFxuICAgICAgICAgKEludDY0LmxvZ2FuZCAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCBiaXRsZW4gKDggKiBpKSkgMHhGRkwpKSlcbiAgZG9uZTtcbiAgbGV0IGJ5dGUgaSA9IEludDMyLm9mX2ludCAoQ2hhci5jb2RlIChCeXRlcy5nZXQgYnVmIGkpKSBpblxuICBsZXQgdyA9IEFycmF5Lm1ha2UgNjQgMGwgaW5cbiAgbGV0IG5ibG9ja3MgPSB0b3RhbCAvIDY0IGluXG4gIGZvciBiID0gMCB0byBuYmxvY2tzIC0gMSBkb1xuICAgIGxldCBiYXNlID0gYiAqIDY0IGluXG4gICAgZm9yIHQgPSAwIHRvIDE1IGRvXG4gICAgICBsZXQgbyA9IGJhc2UgKyB0ICogNCBpblxuICAgICAgdy4odCkgPC1cbiAgICAgICAgSW50MzIubG9nb3JcbiAgICAgICAgICAoSW50MzIubG9nb3JcbiAgICAgICAgICAgICAoSW50MzIuc2hpZnRfbGVmdCAoYnl0ZSBvKSAyNClcbiAgICAgICAgICAgICAoSW50MzIuc2hpZnRfbGVmdCAoYnl0ZSAobyArIDEpKSAxNikpXG4gICAgICAgICAgKEludDMyLmxvZ29yXG4gICAgICAgICAgICAgKEludDMyLnNoaWZ0X2xlZnQgKGJ5dGUgKG8gKyAyKSkgOClcbiAgICAgICAgICAgICAoYnl0ZSAobyArIDMpKSlcbiAgICBkb25lO1xuICAgIGZvciB0ID0gMTYgdG8gNjMgZG9cbiAgICAgIGxldCBzMCA9XG4gICAgICAgIEludDMyLmxvZ3hvclxuICAgICAgICAgIChJbnQzMi5sb2d4b3IgKHJvdHIzMiB3Lih0IC0gMTUpIDcpIChyb3RyMzIgdy4odCAtIDE1KSAxOCkpXG4gICAgICAgICAgKEludDMyLnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgdy4odCAtIDE1KSAzKSBpblxuICAgICAgbGV0IHMxID1cbiAgICAgICAgSW50MzIubG9neG9yXG4gICAgICAgICAgKEludDMyLmxvZ3hvciAocm90cjMyIHcuKHQgLSAyKSAxNykgKHJvdHIzMiB3Lih0IC0gMikgMTkpKVxuICAgICAgICAgIChJbnQzMi5zaGlmdF9yaWdodF9sb2dpY2FsIHcuKHQgLSAyKSAxMCkgaW5cbiAgICAgIHcuKHQpIDwtXG4gICAgICAgIEludDMyLmFkZCAoSW50MzIuYWRkIHcuKHQgLSAxNikgczApIChJbnQzMi5hZGQgdy4odCAtIDcpIHMxKVxuICAgIGRvbmU7XG4gICAgbGV0IGEgPSByZWYgaC4oMCkgYW5kIGJiID0gcmVmIGguKDEpIGFuZCBjID0gcmVmIGguKDIpXG4gICAgYW5kIGQgPSByZWYgaC4oMykgYW5kIGUgPSByZWYgaC4oNCkgYW5kIGYgPSByZWYgaC4oNSlcbiAgICBhbmQgZyA9IHJlZiBoLig2KSBhbmQgaGggPSByZWYgaC4oNykgaW5cbiAgICBmb3IgdCA9IDAgdG8gNjMgZG9cbiAgICAgIGxldCBzMSA9XG4gICAgICAgIEludDMyLmxvZ3hvclxuICAgICAgICAgIChJbnQzMi5sb2d4b3IgKHJvdHIzMiAhZSA2KSAocm90cjMyICFlIDExKSkgKHJvdHIzMiAhZSAyNSkgaW5cbiAgICAgIGxldCBjaCA9XG4gICAgICAgIEludDMyLmxvZ3hvciAoSW50MzIubG9nYW5kICFlICFmKVxuICAgICAgICAgIChJbnQzMi5sb2dhbmQgKEludDMyLmxvZ25vdCAhZSkgIWcpIGluXG4gICAgICBsZXQgdDEgPVxuICAgICAgICBJbnQzMi5hZGRcbiAgICAgICAgICAoSW50MzIuYWRkIChJbnQzMi5hZGQgIWhoIHMxKSAoSW50MzIuYWRkIGNoIGsyNTYuKHQpKSkgdy4odCkgaW5cbiAgICAgIGxldCBzMCA9XG4gICAgICAgIEludDMyLmxvZ3hvclxuICAgICAgICAgIChJbnQzMi5sb2d4b3IgKHJvdHIzMiAhYSAyKSAocm90cjMyICFhIDEzKSkgKHJvdHIzMiAhYSAyMikgaW5cbiAgICAgIGxldCBtYWogPVxuICAgICAgICBJbnQzMi5sb2d4b3JcbiAgICAgICAgICAoSW50MzIubG9neG9yIChJbnQzMi5sb2dhbmQgIWEgIWJiKSAoSW50MzIubG9nYW5kICFhICFjKSlcbiAgICAgICAgICAoSW50MzIubG9nYW5kICFiYiAhYykgaW5cbiAgICAgIGxldCB0MiA9IEludDMyLmFkZCBzMCBtYWogaW5cbiAgICAgIGhoIDo9ICFnOyBnIDo9ICFmOyBmIDo9ICFlO1xuICAgICAgZSA6PSBJbnQzMi5hZGQgIWQgdDE7XG4gICAgICBkIDo9ICFjOyBjIDo9ICFiYjsgYmIgOj0gIWE7XG4gICAgICBhIDo9IEludDMyLmFkZCB0MSB0MlxuICAgIGRvbmU7XG4gICAgaC4oMCkgPC0gSW50MzIuYWRkIGguKDApICFhO1xuICAgIGguKDEpIDwtIEludDMyLmFkZCBoLigxKSAhYmI7XG4gICAgaC4oMikgPC0gSW50MzIuYWRkIGguKDIpICFjO1xuICAgIGguKDMpIDwtIEludDMyLmFkZCBoLigzKSAhZDtcbiAgICBoLig0KSA8LSBJbnQzMi5hZGQgaC4oNCkgIWU7XG4gICAgaC4oNSkgPC0gSW50MzIuYWRkIGguKDUpICFmO1xuICAgIGguKDYpIDwtIEludDMyLmFkZCBoLig2KSAhZztcbiAgICBoLig3KSA8LSBJbnQzMi5hZGQgaC4oNykgIWhoXG4gIGRvbmU7XG4gIGxldCBvdXQgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIEFycmF5Lml0ZXIgKGZ1biB4IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIG91dCAoUHJpbnRmLnNwcmludGYgXCIlMDhseFwiIHgpKSBoO1xuICBCdWZmZXIuY29udGVudHMgb3V0XG5cbigqIC0tLS0gU0hBLTUxMiAoRklQUyAxODAtNCDCpzYuNCkuIDY0LWJpdCB3b3JkcyB2aWEgSW50NjQuXG4gICAxMjgtYml0IGxlbmd0aCBhcHBlbmQ7IHdlIG9ubHkgc3VwcG9ydCBtZXNzYWdlcyB3aG9zZSBiaXQgbGVuZ3RoXG4gICBmaXRzIGluIDY0IGJpdHMgKGhpZ2ggd29yZCBpcyBhbHdheXMgemVybykuIC0tLS0gKilcblxubGV0IGs1MTIgPSBbfFxuICAweDQyOGEyZjk4ZDcyOGFlMjJMOyAweDcxMzc0NDkxMjNlZjY1Y2RMOyAweGI1YzBmYmNmZWM0ZDNiMmZMO1xuICAweGU5YjVkYmE1ODE4OWRiYmNMOyAweDM5NTZjMjViZjM0OGI1MzhMOyAweDU5ZjExMWYxYjYwNWQwMTlMO1xuICAweDkyM2Y4MmE0YWYxOTRmOWJMOyAweGFiMWM1ZWQ1ZGE2ZDgxMThMOyAweGQ4MDdhYTk4YTMwMzAyNDJMO1xuICAweDEyODM1YjAxNDU3MDZmYmVMOyAweDI0MzE4NWJlNGVlNGIyOGNMOyAweDU1MGM3ZGMzZDVmZmI0ZTJMO1xuICAweDcyYmU1ZDc0ZjI3Yjg5NmZMOyAweDgwZGViMWZlM2IxNjk2YjFMOyAweDliZGMwNmE3MjVjNzEyMzVMO1xuICAweGMxOWJmMTc0Y2Y2OTI2OTRMOyAweGU0OWI2OWMxOWVmMTRhZDJMOyAweGVmYmU0Nzg2Mzg0ZjI1ZTNMO1xuICAweDBmYzE5ZGM2OGI4Y2Q1YjVMOyAweDI0MGNhMWNjNzdhYzljNjVMOyAweDJkZTkyYzZmNTkyYjAyNzVMO1xuICAweDRhNzQ4NGFhNmVhNmU0ODNMOyAweDVjYjBhOWRjYmQ0MWZiZDRMOyAweDc2Zjk4OGRhODMxMTUzYjVMO1xuICAweDk4M2U1MTUyZWU2NmRmYWJMOyAweGE4MzFjNjZkMmRiNDMyMTBMOyAweGIwMDMyN2M4OThmYjIxM2ZMO1xuICAweGJmNTk3ZmM3YmVlZjBlZTRMOyAweGM2ZTAwYmYzM2RhODhmYzJMOyAweGQ1YTc5MTQ3OTMwYWE3MjVMO1xuICAweDA2Y2E2MzUxZTAwMzgyNmZMOyAweDE0MjkyOTY3MGEwZTZlNzBMOyAweDI3YjcwYTg1NDZkMjJmZmNMO1xuICAweDJlMWIyMTM4NWMyNmM5MjZMOyAweDRkMmM2ZGZjNWFjNDJhZWRMOyAweDUzMzgwZDEzOWQ5NWIzZGZMO1xuICAweDY1MGE3MzU0OGJhZjYzZGVMOyAweDc2NmEwYWJiM2M3N2IyYThMOyAweDgxYzJjOTJlNDdlZGFlZTZMO1xuICAweDkyNzIyYzg1MTQ4MjM1M2JMOyAweGEyYmZlOGExNGNmMTAzNjRMOyAweGE4MWE2NjRiYmM0MjMwMDFMO1xuICAweGMyNGI4YjcwZDBmODk3OTFMOyAweGM3NmM1MWEzMDY1NGJlMzBMOyAweGQxOTJlODE5ZDZlZjUyMThMO1xuICAweGQ2OTkwNjI0NTU2NWE5MTBMOyAweGY0MGUzNTg1NTc3MTIwMmFMOyAweDEwNmFhMDcwMzJiYmQxYjhMO1xuICAweDE5YTRjMTE2YjhkMmQwYzhMOyAweDFlMzc2YzA4NTE0MWFiNTNMOyAweDI3NDg3NzRjZGY4ZWViOTlMO1xuICAweDM0YjBiY2I1ZTE5YjQ4YThMOyAweDM5MWMwY2IzYzVjOTVhNjNMOyAweDRlZDhhYTRhZTM0MThhY2JMO1xuICAweDViOWNjYTRmNzc2M2UzNzNMOyAweDY4MmU2ZmYzZDZiMmI4YTNMOyAweDc0OGY4MmVlNWRlZmIyZmNMO1xuICAweDc4YTU2MzZmNDMxNzJmNjBMOyAweDg0Yzg3ODE0YTFmMGFiNzJMOyAweDhjYzcwMjA4MWE2NDM5ZWNMO1xuICAweDkwYmVmZmZhMjM2MzFlMjhMOyAweGE0NTA2Y2ViZGU4MmJkZTlMOyAweGJlZjlhM2Y3YjJjNjc5MTVMO1xuICAweGM2NzE3OGYyZTM3MjUzMmJMOyAweGNhMjczZWNlZWEyNjYxOWNMOyAweGQxODZiOGM3MjFjMGMyMDdMO1xuICAweGVhZGE3ZGQ2Y2RlMGViMWVMOyAweGY1N2Q0ZjdmZWU2ZWQxNzhMOyAweDA2ZjA2N2FhNzIxNzZmYmFMO1xuICAweDBhNjM3ZGM1YTJjODk4YTZMOyAweDExM2Y5ODA0YmVmOTBkYWVMOyAweDFiNzEwYjM1MTMxYzQ3MWJMO1xuICAweDI4ZGI3N2Y1MjMwNDdkODRMOyAweDMyY2FhYjdiNDBjNzI0OTNMOyAweDNjOWViZTBhMTVjOWJlYmNMO1xuICAweDQzMWQ2N2M0OWMxMDBkNGNMOyAweDRjYzVkNGJlY2IzZTQyYjZMOyAweDU5N2YyOTljZmM2NTdlMmFMO1xuICAweDVmY2I2ZmFiM2FkNmZhZWNMOyAweDZjNDQxOThjNGE0NzU4MTdMIHxdXG5cbmxldCAoICY6ICkgPSBJbnQ2NC5sb2dhbmRcbmxldCAoIHw6ICkgPSBJbnQ2NC5sb2dvclxubGV0ICggXjogKSA9IEludDY0LmxvZ3hvclxubGV0ICggKzogKSA9IEludDY0LmFkZFxubGV0IGxub3Q2NCA9IEludDY0LmxvZ25vdFxuXG5sZXQgcm90cjY0IHggbiA9XG4gIChJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIHggbikgfDogKEludDY0LnNoaWZ0X2xlZnQgeCAoNjQgLSBuKSlcblxubGV0IHNoYTUxMl9oZXggKG1zZyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgaCA9IFt8IDB4NmEwOWU2NjdmM2JjYzkwOEw7IDB4YmI2N2FlODU4NGNhYTczYkw7XG4gICAgICAgICAgICAgMHgzYzZlZjM3MmZlOTRmODJiTDsgMHhhNTRmZjUzYTVmMWQzNmYxTDtcbiAgICAgICAgICAgICAweDUxMGU1MjdmYWRlNjgyZDFMOyAweDliMDU2ODhjMmIzZTZjMWZMO1xuICAgICAgICAgICAgIDB4MWY4M2Q5YWJmYjQxYmQ2Ykw7IDB4NWJlMGNkMTkxMzdlMjE3OUwgfF0gaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggbXNnIGluXG4gIGxldCBiaXRsZW4gPSBJbnQ2NC5tdWwgKEludDY0Lm9mX2ludCBsZW4pIDhMIGluXG4gICgqIFBhZCB0byBhIG11bHRpcGxlIG9mIDEyOCBieXRlczsgMTYtYnl0ZSBiaWctZW5kaWFuIGxlbmd0aC4gKilcbiAgbGV0IHBhZGxlbiA9XG4gICAgbGV0IHIgPSAobGVuICsgMSkgbW9kIDEyOCBpblxuICAgIGlmIHIgPD0gMTEyIHRoZW4gMTEyIC0gciBlbHNlIDI0MCAtIHJcbiAgaW5cbiAgbGV0IHRvdGFsID0gbGVuICsgMSArIHBhZGxlbiArIDE2IGluXG4gIGxldCBidWYgPSBCeXRlcy5tYWtlIHRvdGFsICdcXDAwMCcgaW5cbiAgQnl0ZXMuYmxpdF9zdHJpbmcgbXNnIDAgYnVmIDAgbGVuO1xuICBCeXRlcy5zZXQgYnVmIGxlbiAnXFx4ODAnO1xuICAoKiBMb3cgNjQgYml0cyBvZiB0aGUgYml0IGxlbmd0aCAoaGlnaCA2NCBzdGF5IDApLiBJbnQ2NCBzaGlmdHMgc28gdGhlIGJ5dGVzXG4gICAgIGF0IHNoaWZ0ID49IDMyIGFyZSBjb3JyZWN0IG9uIHRoZSAzMi1iaXQgd2ViIHRhcmdldHMgKGpzIHNoaWZ0LW1vZC0zMikuICopXG4gIGZvciBpID0gMCB0byA3IGRvXG4gICAgQnl0ZXMuc2V0IGJ1ZiAodG90YWwgLSAxIC0gaSlcbiAgICAgIChDaGFyLmNociAoSW50NjQudG9faW50XG4gICAgICAgICAoSW50NjQubG9nYW5kIChJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIGJpdGxlbiAoOCAqIGkpKSAweEZGTCkpKVxuICBkb25lO1xuICBsZXQgdyA9IEFycmF5Lm1ha2UgODAgMEwgaW5cbiAgbGV0IG5ibG9ja3MgPSB0b3RhbCAvIDEyOCBpblxuICBmb3IgYiA9IDAgdG8gbmJsb2NrcyAtIDEgZG9cbiAgICBsZXQgYmFzZSA9IGIgKiAxMjggaW5cbiAgICBmb3IgdCA9IDAgdG8gMTUgZG9cbiAgICAgIGxldCBvID0gYmFzZSArIHQgKiA4IGluXG4gICAgICBsZXQgdiA9IHJlZiAwTCBpblxuICAgICAgZm9yIGogPSAwIHRvIDcgZG9cbiAgICAgICAgdiA6PSBJbnQ2NC5sb2dvciAoSW50NjQuc2hpZnRfbGVmdCAhdiA4KVxuICAgICAgICAgICAgICAgKEludDY0Lm9mX2ludCAoQ2hhci5jb2RlIChCeXRlcy5nZXQgYnVmIChvICsgaikpKSlcbiAgICAgIGRvbmU7XG4gICAgICB3Lih0KSA8LSAhdlxuICAgIGRvbmU7XG4gICAgZm9yIHQgPSAxNiB0byA3OSBkb1xuICAgICAgbGV0IHMwID1cbiAgICAgICAgKHJvdHI2NCB3Lih0IC0gMTUpIDEpIF46IChyb3RyNjQgdy4odCAtIDE1KSA4KVxuICAgICAgICBeOiAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCB3Lih0IC0gMTUpIDcpIGluXG4gICAgICBsZXQgczEgPVxuICAgICAgICAocm90cjY0IHcuKHQgLSAyKSAxOSkgXjogKHJvdHI2NCB3Lih0IC0gMikgNjEpXG4gICAgICAgIF46IChJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIHcuKHQgLSAyKSA2KSBpblxuICAgICAgdy4odCkgPC0gdy4odCAtIDE2KSArOiBzMCArOiB3Lih0IC0gNykgKzogczFcbiAgICBkb25lO1xuICAgIGxldCBhID0gcmVmIGguKDApIGFuZCBiYiA9IHJlZiBoLigxKSBhbmQgYyA9IHJlZiBoLigyKVxuICAgIGFuZCBkID0gcmVmIGguKDMpIGFuZCBlID0gcmVmIGguKDQpIGFuZCBmID0gcmVmIGguKDUpXG4gICAgYW5kIGcgPSByZWYgaC4oNikgYW5kIGhoID0gcmVmIGguKDcpIGluXG4gICAgZm9yIHQgPSAwIHRvIDc5IGRvXG4gICAgICBsZXQgczEgPSAocm90cjY0ICFlIDE0KSBeOiAocm90cjY0ICFlIDE4KSBeOiAocm90cjY0ICFlIDQxKSBpblxuICAgICAgbGV0IGNoID0gKCFlICY6ICFmKSBeOiAoKGxub3Q2NCAhZSkgJjogIWcpIGluXG4gICAgICBsZXQgdDEgPSAhaGggKzogczEgKzogY2ggKzogazUxMi4odCkgKzogdy4odCkgaW5cbiAgICAgIGxldCBzMCA9IChyb3RyNjQgIWEgMjgpIF46IChyb3RyNjQgIWEgMzQpIF46IChyb3RyNjQgIWEgMzkpIGluXG4gICAgICBsZXQgbWFqID0gKCFhICY6ICFiYikgXjogKCFhICY6ICFjKSBeOiAoIWJiICY6ICFjKSBpblxuICAgICAgbGV0IHQyID0gczAgKzogbWFqIGluXG4gICAgICBoaCA6PSAhZzsgZyA6PSAhZjsgZiA6PSAhZTtcbiAgICAgIGUgOj0gIWQgKzogdDE7XG4gICAgICBkIDo9ICFjOyBjIDo9ICFiYjsgYmIgOj0gIWE7XG4gICAgICBhIDo9IHQxICs6IHQyXG4gICAgZG9uZTtcbiAgICBoLigwKSA8LSBoLigwKSArOiAhYTtcbiAgICBoLigxKSA8LSBoLigxKSArOiAhYmI7XG4gICAgaC4oMikgPC0gaC4oMikgKzogIWM7XG4gICAgaC4oMykgPC0gaC4oMykgKzogIWQ7XG4gICAgaC4oNCkgPC0gaC4oNCkgKzogIWU7XG4gICAgaC4oNSkgPC0gaC4oNSkgKzogIWY7XG4gICAgaC4oNikgPC0gaC4oNikgKzogIWc7XG4gICAgaC4oNykgPC0gaC4oNykgKzogIWhoXG4gIGRvbmU7XG4gIGxldCBvdXQgPSBCdWZmZXIuY3JlYXRlIDEyOCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biB4IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIG91dCAoUHJpbnRmLnNwcmludGYgXCIlMDE2THhcIiB4KSkgaDtcbiAgQnVmZmVyLmNvbnRlbnRzIG91dFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9hbmQiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfbXVsIiwiY2FtbF9pbnQ2NF9vZl9pbnQzMiIsImNhbWxfaW50NjRfb3IiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmUiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF94b3IiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfb2JqX2R1cCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfSW50MzIiLCJTdGRsaWJfSW50NjQiLCJrMjU2Iiwicm90cjMyIiwieCIsIm4iLCJzaGEyNTZfaGV4IiwibXNnIiwiaCIsImxlbiIsImJpdGxlbiIsInIiLCJwYWRsZW4iLCJ0b3RhbCIsImJ1ZiIsImkiLCJieXRlIiwidyIsIm5ibG9ja3MiLCJiIiwiYmFzZSIsInQiLCJvIiwiczAiLCJzMSIsImhoIiwiZSIsImQiLCJjIiwiYmIiLCJjaCIsInQxIiwibWFqIiwidDIiLCJhIiwib3V0IiwiazUxMiIsImxub3Q2NCIsInJvdHI2NCIsInNoYTUxMl9oZXgiLCJ2IiwiaiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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QyxLQUM5QjtBQUFBLFFBQUFQLE1BRUo7QUFBQSxRQUFBUSxJQUVBO0FBQUEsWUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUVOO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLGNBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQUFDLE1BRWI7QUFBQSxJQUNWO0FBQUE7QUFBQSxlQUFBL0I7QUFBQUEsV0FBQSxJQUNrQztBQUFBLE9BQTJCO0FBQUE7QUFBQTtBQUFBLElBQUc7QUFBQTtBQUFBLEdEM09sRSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQwNzQ2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9jaWQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQ0lEdjEgY29tcHV0YXRpb24g4oCUIHB1cmUgT0NhbWwsIFdBU00tc2FmZS5cblxuICAgIE11bHRpaGFzaCArIENJRHYxICsgbXVsdGliYXNlIGJhc2UzMi1sb3dlciAoUkZDIDQ2NDgsIG5vIHBhZCxcbiAgICBtdWx0aWJhc2UgcHJlZml4ICdiJykuIENvZGVjczogZGFnLWNib3IgMHg3MSwgcmF3IDB4NTUuIEhhc2hcbiAgICBjb2Rlczogc2hhMi0yNTYgMHgxMiwgc2hhMy0yNTYgMHgxNi4gUmVmZXJlbmNlOiB0aGUgbXVsdGlmb3JtYXRzXG4gICAgc3BlY3MgKHVuc2lnbmVkLXZhcmludCwgbXVsdGloYXNoLCBjaWQsIG11bHRpYmFzZSkuIE5vIGRlcHMuICopXG5cbm9wZW4gU3hfdHlwZXNcblxuKCogVW5zaWduZWQgTEVCMTI4IChtdWx0aWZvcm1hdHMgdW5zaWduZWQtdmFyaW50KS4gKilcbmxldCB2YXJpbnQgKG4gOiBpbnQpIDogc3RyaW5nID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNCBpblxuICBsZXQgbiA9IHJlZiBuIGluXG4gIGxldCBjb250ID0gcmVmIHRydWUgaW5cbiAgd2hpbGUgIWNvbnQgZG9cbiAgICBsZXQgYiA9ICFuIGxhbmQgMHg3ZiBpblxuICAgIG4gOj0gIW4gbHNyIDc7XG4gICAgaWYgIW4gPSAwIHRoZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIGIpOyBjb250IDo9IGZhbHNlKVxuICAgIGVsc2UgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKGIgbG9yIDB4ODApKVxuICBkb25lO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbigqIFJGQyA0NjQ4IGJhc2UzMiBsb3dlcmNhc2UsIG5vIHBhZGRpbmcuICopXG5sZXQgYjMyX2FscGhhID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2N1wiXG5cbmxldCBiYXNlMzJfbG93ZXIgKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKChTdHJpbmcubGVuZ3RoIHMgKiA4ICsgNCkgLyA1KSBpblxuICBsZXQgYWNjID0gcmVmIDAgYW5kIGJpdHMgPSByZWYgMCBpblxuICBTdHJpbmcuaXRlciAoZnVuIGMgLT5cbiAgICBhY2MgOj0gKCFhY2MgbHNsIDgpIGxvciAoQ2hhci5jb2RlIGMpO1xuICAgIGJpdHMgOj0gIWJpdHMgKyA4O1xuICAgIHdoaWxlICFiaXRzID49IDUgZG9cbiAgICAgIGJpdHMgOj0gIWJpdHMgLSA1O1xuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBiMzJfYWxwaGEuWyghYWNjIGxzciAhYml0cykgbGFuZCAweDFmXVxuICAgIGRvbmU7XG4gICAgKCogS2VlcCBvbmx5IHRoZSB1bmNvbnN1bWVkIGxvdyBbYml0c10gYml0cywgc28gW2FjY10gc3RheXMgdGlueSAoPCAyXjEzKS5cbiAgICAgICBXaXRob3V0IHRoaXMgaXQgZ3Jvd3MgYnkgOCBiaXRzIHBlciBieXRlIGFuZCBvdmVyZmxvd3MgbmF0aXZlIFtpbnRdIG9uXG4gICAgICAgdGhlIDMyLWJpdCB3ZWIgdGFyZ2V0cywgY29ycnVwdGluZyB0aGUgZW1pdHRlZCBzeW1ib2xzLiAqKVxuICAgIGFjYyA6PSAhYWNjIGxhbmQgKCgxIGxzbCAhYml0cykgLSAxKSkgcztcbiAgaWYgIWJpdHMgPiAwIHRoZW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIGIzMl9hbHBoYS5bKCFhY2MgbHNsICg1IC0gIWJpdHMpKSBsYW5kIDB4MWZdO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbigqIFwiYWJlZlwiIC0+IHRoZSAyIHJhdyBieXRlcy4gKilcbmxldCB1bmhleCAoaCA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgbiA9IFN0cmluZy5sZW5ndGggaCAvIDIgaW5cbiAgbGV0IGIgPSBCeXRlcy5jcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICBCeXRlcy5zZXQgYiBpXG4gICAgICAoQ2hhci5jaHIgKGludF9vZl9zdHJpbmcgKFwiMHhcIiBeIFN0cmluZy5zdWIgaCAoMiAqIGkpIDIpKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiXG5cbigqIG11bHRpaGFzaCA9IHZhcmludChjb2RlKSB8fCB2YXJpbnQobGVuKSB8fCBkaWdlc3QgKilcbmxldCBtdWx0aWhhc2ggKGNvZGUgOiBpbnQpIChkaWdlc3QgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgdmFyaW50IGNvZGUgXiB2YXJpbnQgKFN0cmluZy5sZW5ndGggZGlnZXN0KSBeIGRpZ2VzdFxuXG4oKiBDSUR2MSA9IDB4MDEgfHwgdmFyaW50KGNvZGVjKSB8fCBtdWx0aWhhc2ggOyBtdWx0aWJhc2UgJ2InIGJhc2UzMi4gKilcbmxldCBjaWR2MSAoY29kZWMgOiBpbnQpIChtaCA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBcImJcIiBeIGJhc2UzMl9sb3dlciAoXCJcXHgwMVwiIF4gdmFyaW50IGNvZGVjIF4gbWgpXG5cbmxldCBjb2RlY19kYWdfY2JvciA9IDB4NzFcbmxldCBtaF9zaGEyXzI1NiA9IDB4MTJcblxuKCogQ2Fub25pY2FsaXplIGFuIFNYIHZhbHVlOiBkYWctY2JvciBlbmNvZGUgLT4gc2hhMi0yNTYgLT5cbiAgIG11bHRpaGFzaCAtPiBDSUR2MSAoZGFnLWNib3IgY29kZWMpLiAqKVxubGV0IGNpZF9mcm9tX3N4ICh2IDogdmFsdWUpIDogc3RyaW5nID1cbiAgbGV0IGNib3IgPSBTeF9jYm9yLmVuY29kZSB2IGluXG4gIGxldCBkaWdlc3QgPSB1bmhleCAoU3hfc2hhMi5zaGEyNTZfaGV4IGNib3IpIGluXG4gIGNpZHYxIGNvZGVjX2RhZ19jYm9yIChtdWx0aWhhc2ggbWhfc2hhMl8yNTYgZGlnZXN0KVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJnbG9iYWxfZGF0YSIsIlN4X2Nib3IiLCJTeF9zaGEyIiwiU3RkbGliIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0J1ZmZlciIsInZhcmludCIsIm4iLCJidWYiLCJjb250IiwiYiIsImNzdF9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsImJhc2UzMl9sb3dlciIsInMiLCJhY2MiLCJiaXRzIiwiYyIsInVuaGV4IiwiaCIsImkiLCJtdWx0aWhhc2giLCJjb2RlIiwiZGlnZXN0IiwiY2lkdjEiLCJjb2RlYyIsIm1oIiwiY29kZWNfZGFnX2Nib3IiLCJtaF9zaGEyXzI1NiIsImNpZF9mcm9tX3N4IiwidiIsImNib3IiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBQyxNQ1dZLGdDQUFBQyxPQUdWLEdBQUFGLE1BQUE7QUFBQTtBQUFBLGdCQU1BLHVDQUFtQjtBQUFBLFNBQUFHLElBTGpCLFdBQUFILE1BQ0E7QUFBQSxLQUNBO0FBQUEsY0FBb0M7QUFBQSxNQUFwQjtBQUFBLE1BQWdDO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FDdkI7QUFBQSxNQUFwQjtBQUFBLE1BQTJDO0FBQUE7QUFBQTtBQUFBLEdBRS9CO0FBQUEsT0FBQUksaUNEcEJyQjtBQUFBLFlBQUFDLGFBQUFDO0FBQUFBO0FBQUFBLEtBQUFMO0FBQUFBLE9DMEJZO0FBQUEsaUJBQVY7QUFBQSxLQUFBTSxNQUNBO0FBQUEsS0FBQUMsT0FBQTtBQUFBLElBQ0E7QUFBQTtBQUFBLGVBQUFDO0FBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBLHdCQU9BO0FBQUEsUUFORTtBQUFBO0FBQUE7QUFBQSxXQUNvQjtBQUFBO0FBQUEsUUFBcEI7QUFBQTtBQUFBLE1BS2tDO0FBQUE7QUFBQSxJQUFHO0FBQUE7QUFBQTtBQUFBLFFBRW5CO0FBQUE7QUFBQSxLQUFwQjtBQUFBO0FBQUEsSUFDRix1Q0FBbUI7QUFBQTtBQUFBLFlBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUFYLElBSW5CO0FBQUEsS0FBQUcsSUFDUTtBQUFBLFNBQ1I7QUFBQTtBQUFBLFNBQUFTLElBQUE7QUFBQTtBQUFBO0FBQUEsV0FFcUM7QUFBQSxXQUF2QiwyQkFBZTtBQUFBLE1BRDNCLDZCQUNFO0FBQUEsY0FBMEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRTlELHFDQUF3QjtBQUFBO0FBQUEsWUFBQUMsVUFBQUMsTUFBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQUlWLE9BQWQ7QUFBQSxTQUFjO0FBQUEsU0FBZDtBQUFBLElBQVcsa0NBQXlDO0FBQUE7QUFBQSxZQUFBQyxNQUFBQyxPQUFBQztBQUFBQTtBQUFBQSxLQUFBLElBSXZCO0FBQUE7QUFBQSxTQUF2QixhQUFhO0FBQUEsSUFBNEI7QUFBQTtBQUFBLE9BQUFDLGlCRDNEakQsS0FBQUMsY0FBQTtBQUFBLFlBQUFDLFlBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLE9DbUVhO0FBQUEsS0FBQVIsU0FDRSxNQUFNO0FBQUEsSUFDRSxPQUE4QixzQkFBOUIsK0JBQThCO0FBQUE7QUFBQSxHRHJFckQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0MDg3MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfY3N0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIENvbmNyZXRlIFN5bnRheCBUcmVlIGZvciBTWCDigJQgbG9zc2xlc3Mgc291cmNlIHJlcHJlc2VudGF0aW9uLlxuXG4gICAgRXZlcnkgcGllY2Ugb2Ygc291cmNlIHRleHQgaXMgcHJlc2VydmVkOiB3aGl0ZXNwYWNlLCBjb21tZW50cyxcbiAgICBkZWxpbWl0ZXJzLCByYXcgdG9rZW4gdGV4dC4gIFRoZSBDU1Qgc3VwcG9ydHMgdHdvIHByb2plY3Rpb25zOlxuICAgIC0gW2NzdF90b19zb3VyY2VdOiByZWNvbnN0cnVjdCB0aGUgZXhhY3Qgb3JpZ2luYWwgc291cmNlXG4gICAgLSBbY3N0X3RvX2FzdF06IHN0cmlwIHRyaXZpYSwgcHJvZHVjZSBbU3hfdHlwZXMudmFsdWVdIGZvciBldmFsdWF0aW9uXG5cbiAgICBUcml2aWEgYXR0YWNoZXMgdG8gbm9kZXMgKGxlYWRpbmcgb24gZXZlcnkgbm9kZSwgdHJhaWxpbmcgb25cbiAgICBjb250YWluZXJzIGJlZm9yZSB0aGUgY2xvc2UgZGVsaW1pdGVyKS4gIE5vIHNlcGFyYXRlIGNvbW1lbnQgbWFwLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiB7MSBUeXBlc30gKilcblxudHlwZSB0cml2aWEgPVxuICB8IFdoaXRlc3BhY2Ugb2Ygc3RyaW5nICAgICAgKCoqIFJ1bnMgb2Ygc3BhY2VzLCB0YWJzLCBuZXdsaW5lcyAqKVxuICB8IExpbmVDb21tZW50IG9mIHN0cmluZyAgICAgKCoqIFwiOztcIiB0aHJvdWdoIGVuZCBvZiBsaW5lLCBpbmNsdWRpbmcgdGhlIFwiO1wiIGNoYXJzICopXG5cbnR5cGUgc3BhbiA9IHtcbiAgc3RhcnRfb2Zmc2V0IDogaW50O1xuICBlbmRfb2Zmc2V0ICAgOiBpbnQ7XG59XG5cbnR5cGUgY3N0X25vZGUgPVxuICB8IENzdEF0b20gb2Yge1xuICAgICAgbGVhZGluZ190cml2aWEgOiB0cml2aWEgbGlzdDtcbiAgICAgIHRva2VuIDogc3RyaW5nOyAgICAgICAgICAgICAgKCoqIFJhdyBzb3VyY2UgdGV4dCBvZiB0aGUgdG9rZW4gKilcbiAgICAgIHZhbHVlIDogdmFsdWU7ICAgICAgICAgICAgICAgKCoqIFBhcnNlZCBzZW1hbnRpYyB2YWx1ZSAqKVxuICAgICAgc3BhbiAgOiBzcGFuO1xuICAgIH1cbiAgfCBDc3RMaXN0IG9mIHtcbiAgICAgIGxlYWRpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICBvcGVuX2RlbGltICA6IGNoYXI7ICAgICAgICAgICgqKiAnKCcgb3IgJ1snICopXG4gICAgICBjaGlsZHJlbiAgICA6IGNzdF9ub2RlIGxpc3Q7XG4gICAgICBjbG9zZV9kZWxpbSA6IGNoYXI7ICAgICAgICAgICgqKiAnKScgb3IgJ10nICopXG4gICAgICB0cmFpbGluZ190cml2aWEgOiB0cml2aWEgbGlzdDsgICgqKiBUcml2aWEgYmV0d2VlbiBsYXN0IGNoaWxkIGFuZCBjbG9zZSBkZWxpbSAqKVxuICAgICAgc3BhbiA6IHNwYW47XG4gICAgfVxuICB8IENzdERpY3Qgb2Yge1xuICAgICAgbGVhZGluZ190cml2aWEgOiB0cml2aWEgbGlzdDtcbiAgICAgIGNoaWxkcmVuIDogY3N0X25vZGUgbGlzdDsgICAgKCoqIEFsdGVybmF0aW5nIGtleS92YWx1ZSBhdG9tcyAqKVxuICAgICAgdHJhaWxpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICBzcGFuIDogc3BhbjtcbiAgICB9XG5cblxuKCoqIHsxIENTVCDihpIgU291cmNlIChsb3NzbGVzcyByZWNvbnN0cnVjdGlvbil9ICopXG5cbmxldCB0cml2aWFfdG9fc3RyaW5nIHRzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgTGlzdC5pdGVyIChmdW5jdGlvblxuICAgIHwgV2hpdGVzcGFjZSBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gICAgfCBMaW5lQ29tbWVudCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gICkgdHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJlYyBjc3RfdG9fc291cmNlIG5vZGUgPVxuICBtYXRjaCBub2RlIHdpdGhcbiAgfCBDc3RBdG9tIHsgbGVhZGluZ190cml2aWE7IHRva2VuOyBfIH0gLT5cbiAgICB0cml2aWFfdG9fc3RyaW5nIGxlYWRpbmdfdHJpdmlhIF4gdG9rZW5cbiAgfCBDc3RMaXN0IHsgbGVhZGluZ190cml2aWE7IG9wZW5fZGVsaW07IGNoaWxkcmVuOyBjbG9zZV9kZWxpbTsgdHJhaWxpbmdfdHJpdmlhOyBfIH0gLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgbGVhZGluZ190cml2aWEpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgb3Blbl9kZWxpbTtcbiAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoY3N0X3RvX3NvdXJjZSBjKSkgY2hpbGRyZW47XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh0cml2aWFfdG9fc3RyaW5nIHRyYWlsaW5nX3RyaXZpYSk7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjbG9zZV9kZWxpbTtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gIHwgQ3N0RGljdCB7IGxlYWRpbmdfdHJpdmlhOyBjaGlsZHJlbjsgdHJhaWxpbmdfdHJpdmlhOyBfIH0gLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgbGVhZGluZ190cml2aWEpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ3snO1xuICAgIExpc3QuaXRlciAoZnVuIGMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChjc3RfdG9fc291cmNlIGMpKSBjaGlsZHJlbjtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgdHJhaWxpbmdfdHJpdmlhKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICd9JztcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjc3RfdG9fc291cmNlX2ZpbGUgbm9kZXMgPVxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIGNzdF90b19zb3VyY2Ugbm9kZXMpXG5cbigqKiBSZWNvbnN0cnVjdCBzb3VyY2UgZnJvbSBhIHBhcnNlZCBmaWxlIChub2RlcyArIHRyYWlsaW5nIHRyaXZpYSkuICopXG5sZXQgY3N0X2ZpbGVfdG9fc291cmNlIG5vZGVzIHRyYWlsaW5nID1cbiAgY3N0X3RvX3NvdXJjZV9maWxlIG5vZGVzIF4gdHJpdmlhX3RvX3N0cmluZyB0cmFpbGluZ1xuXG5cbigqKiB7MSBDU1Qg4oaSIEFTVCAoc3RyaXAgdHJpdmlhIGZvciBldmFsdWF0aW9uKX0gKilcblxubGV0IHJlYyBjc3RfdG9fYXN0ID0gZnVuY3Rpb25cbiAgfCBDc3RBdG9tIHsgdmFsdWU7IF8gfSAtPiB2YWx1ZVxuICB8IENzdExpc3QgeyBjaGlsZHJlbjsgXyB9IC0+XG4gICAgTGlzdCAoTGlzdC5tYXAgY3N0X3RvX2FzdCBjaGlsZHJlbilcbiAgfCBDc3REaWN0IHsgY2hpbGRyZW47IF8gfSAtPlxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgbGV0IHJlYyBwYWlycyA9IGZ1bmN0aW9uXG4gICAgICB8IGsgOjogdiA6OiByZXN0IC0+XG4gICAgICAgIGxldCBrZXlfc3RyID0gbWF0Y2ggY3N0X3RvX2FzdCBrIHdpdGhcbiAgICAgICAgICB8IEtleXdvcmQgayAtPiBrIHwgU3RyaW5nIGsgLT4gayB8IFN5bWJvbCBrIC0+IGsgfCBfIC0+IFwiXCJcbiAgICAgICAgaW5cbiAgICAgICAgZGljdF9zZXQgZCBrZXlfc3RyIChjc3RfdG9fYXN0IHYpO1xuICAgICAgICBwYWlycyByZXN0XG4gICAgICB8IF8gLT4gKClcbiAgICBpblxuICAgIHBhaXJzIGNoaWxkcmVuO1xuICAgIERpY3QgZFxuXG5cbigqKiBDb252ZXJ0IGNoYXJhY3RlciBvZmZzZXQgdG8gbGluZS9jb2wgKDEtYmFzZWQgbGluZXMsIDAtYmFzZWQgY29scykgKilcbmxldCBvZmZzZXRfdG9fbG9jIHNyYyBvZmZzZXQgPVxuICBsZXQgbGluZSA9IHJlZiAxIGFuZCBjb2wgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbWluIChvZmZzZXQgLSAxKSAoU3RyaW5nLmxlbmd0aCBzcmMgLSAxKSBkb1xuICAgIGlmIHNyYy5baV0gPSAnXFxuJyB0aGVuIChpbmNyIGxpbmU7IGNvbCA6PSAwKVxuICAgIGVsc2UgY29sIDo9ICFjb2wgKyAxXG4gIGRvbmU7XG4gICghbGluZSwgIWNvbClcblxuKCoqIENTVCDihpIgQVNUIHdpdGggc291cmNlIGxvY2F0aW9uIGRpY3RzICh7OmZvcm0gdmFsdWUgOmxpbmUgTiA6Y29sIE59KSAqKVxubGV0IGNzdF90b19hc3RfbG9jIHNyYyBub2RlcyA9XG4gIExpc3QubWFwIChmdW4gbm9kZSAtPlxuICAgIGxldCBzcGFuID0gbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IENzdEF0b20geyBzcGFuOyBfIH0gLT4gc3BhblxuICAgICAgfCBDc3RMaXN0IHsgc3BhbjsgXyB9IC0+IHNwYW5cbiAgICAgIHwgQ3N0RGljdCB7IHNwYW47IF8gfSAtPiBzcGFuXG4gICAgaW5cbiAgICBsZXQgdmFsdWUgPSBjc3RfdG9fYXN0IG5vZGUgaW5cbiAgICBsZXQgKGxpbmUsIGNvbCkgPSBvZmZzZXRfdG9fbG9jIHNyYyBzcGFuLnN0YXJ0X29mZnNldCBpblxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgZGljdF9zZXQgZCBcImZvcm1cIiB2YWx1ZTtcbiAgICBkaWN0X3NldCBkIFwibGluZVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBsaW5lKSk7XG4gICAgZGljdF9zZXQgZCBcImNvbFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2wpKTtcbiAgICBEaWN0IGRcbiAgKSBub2Rlc1xuXG5cbigqKiB7MSBDU1QgZWRpdGluZyDigJQgYXBwbHkgQVNULWxldmVsIGVkaXRzIGJhY2sgdG8gdGhlIENTVH0gKilcblxuKCoqIFJlcGxhY2UgdGhlIENTVCBub2RlIGF0IFtwYXRoXSB3aXRoIFtuZXdfc291cmNlXSwgcHJlc2VydmluZyB0aGVcbiAgICBvcmlnaW5hbCBub2RlJ3MgbGVhZGluZyB0cml2aWEuICBbbmV3X3NvdXJjZV0gaXMgcGFyc2VkIGFzIENTVCBzb1xuICAgIGFueSBjb21tZW50cyBpbiBpdCBhcmUgcHJlc2VydmVkLiAqKVxubGV0IGFwcGx5X2VkaXQgcGF0aCBuZXdfY3N0X25vZGVzIG9yaWdpbmFsX2NzdF9ub2RlcyA9XG4gIGxldCByZWMgZ28gbm9kZXMgaWR4X3BhdGggPVxuICAgIG1hdGNoIGlkeF9wYXRoIHdpdGhcbiAgICB8IFtdIC0+IG5vZGVzICAoKiBzaG91bGRuJ3QgaGFwcGVuICopXG4gICAgfCBbdGFyZ2V0XSAtPlxuICAgICAgTGlzdC5tYXBpIChmdW4gaSBub2RlIC0+XG4gICAgICAgIGlmIGkgPSB0YXJnZXQgdGhlblxuICAgICAgICAgIG1hdGNoIG5ld19jc3Rfbm9kZXMgd2l0aFxuICAgICAgICAgIHwgW3JlcGxhY2VtZW50XSAtPlxuICAgICAgICAgICAgKCogUHJlc2VydmUgb3JpZ2luYWwgbGVhZGluZyB0cml2aWEgKilcbiAgICAgICAgICAgIGxldCBvcmlnX3RyaXZpYSA9IG1hdGNoIG5vZGUgd2l0aFxuICAgICAgICAgICAgICB8IENzdEF0b20geyBsZWFkaW5nX3RyaXZpYTsgXyB9IC0+IGxlYWRpbmdfdHJpdmlhXG4gICAgICAgICAgICAgIHwgQ3N0TGlzdCB7IGxlYWRpbmdfdHJpdmlhOyBfIH0gLT4gbGVhZGluZ190cml2aWFcbiAgICAgICAgICAgICAgfCBDc3REaWN0IHsgbGVhZGluZ190cml2aWE7IF8gfSAtPiBsZWFkaW5nX3RyaXZpYVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIChtYXRjaCByZXBsYWNlbWVudCB3aXRoXG4gICAgICAgICAgICAgfCBDc3RBdG9tIHIgLT4gQ3N0QXRvbSB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IG9yaWdfdHJpdmlhIH1cbiAgICAgICAgICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gb3JpZ190cml2aWEgfVxuICAgICAgICAgICAgIHwgQ3N0RGljdCByIC0+IENzdERpY3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBvcmlnX3RyaXZpYSB9KVxuICAgICAgICAgIHwgXyAtPiBub2RlICAoKiBtdWx0aS1ub2RlIHJlcGxhY2VtZW50OiB1c2UgYXMtaXMgKilcbiAgICAgICAgZWxzZSBub2RlXG4gICAgICApIG5vZGVzXG4gICAgfCB0YXJnZXQgOjogcmVzdCAtPlxuICAgICAgTGlzdC5tYXBpIChmdW4gaSBub2RlIC0+XG4gICAgICAgIGlmIGkgPSB0YXJnZXQgdGhlblxuICAgICAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgICAgIHwgQ3N0TGlzdCByIC0+XG4gICAgICAgICAgICBDc3RMaXN0IHsgciB3aXRoIGNoaWxkcmVuID0gZ28gci5jaGlsZHJlbiByZXN0IH1cbiAgICAgICAgICB8IENzdERpY3QgciAtPlxuICAgICAgICAgICAgQ3N0RGljdCB7IHIgd2l0aCBjaGlsZHJlbiA9IGdvIHIuY2hpbGRyZW4gcmVzdCB9XG4gICAgICAgICAgfCBfIC0+IG5vZGVcbiAgICAgICAgZWxzZSBub2RlXG4gICAgICApIG5vZGVzXG4gIGluXG4gIGdvIG9yaWdpbmFsX2NzdF9ub2RlcyBwYXRoXG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYiIsIlN0ZGxpYl9MaXN0IiwiU3hfdHlwZXMiLCJTdGRsaWJfU3RyaW5nIiwidHJpdmlhX3RvX3N0cmluZyIsInRzIiwiYnVmIiwicGFyYW0iLCJzIiwiY3N0X3RvX3NvdXJjZSIsIm5vZGUiLCJ0b2tlbiIsImxlYWRpbmdfdHJpdmlhIiwidHJhaWxpbmdfdHJpdmlhIiwiY2xvc2VfZGVsaW0iLCJjaGlsZHJlbiIsIm9wZW5fZGVsaW0iLCJjIiwiY3N0IiwiY3N0X3RvX3NvdXJjZV9maWxlIiwibm9kZXMiLCJjc3RfZmlsZV90b19zb3VyY2UiLCJ0cmFpbGluZyIsImNzdF90b19hc3QiLCJ2YWx1ZSIsImQiLCJtYXRjaCIsInJlc3QiLCJ2IiwiayIsImtleV9zdHIiLCJvZmZzZXRfdG9fbG9jIiwic3JjIiwib2Zmc2V0IiwiY29sIiwibGluZSIsImkiLCJjc3RfdG9fYXN0X2xvYyIsInNwYW4iLCJhcHBseV9lZGl0IiwicGF0aCIsIm5ld19jc3Rfbm9kZXMiLCJvcmlnaW5hbF9jc3Rfbm9kZXMiLCJnbyIsImlkeF9wYXRoIiwidGFyZ2V0IiwicmVwbGFjZW1lbnQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7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QUFBUSxNQUFtQztBQUFBLGVBQUFDLE9BQUE7QUFBQSxlQUFBVixJQUM3QztBQUFBLGNBQ1I7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQTRDO0FBQUEsYUFDdEM7QUFBQSxtQkFDRDtBQUFBO0FBQUEsWUFBQWMsV0FBQUMsTUFBQUMsZUFBQUM7QUFBQUEsYUFBQUMsR0FBQXZCLE9BQUF3QjtBQUFBQSxLQVVMLGVBQ1E7QUFBQSxTQUFBQyxTQURSO0FBQUE7QUFBQSxNQUdFO0FBQUE7QUFBQSx3QkFBQVQsR0FBQTFCO0FBQUFBLGdCQUNFLGlCQWNLO0FBQUEsZ0JBYkg7QUFBQSxxQkFBQW9DLGNBQUEsa0JBQUFsQyxpQkFHRTtBQUFBLGlCQUtBO0FBQUE7QUFBQSxvQkFDZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ1g7QUFBQSxlQUNBO0FBQUEscUJBWUo7QUFBQSxTQUFBZSxPQTlCVDtBQUFBLEtBcUJFO0FBQUE7QUFBQSx1QkFBQVMsR0FBQTFCO0FBQUFBLGVBQ0U7QUFBQSxnQkFDRTtBQUFBO0FBQUEsbUJBS087QUFBQTtBQUFBO0FBQUEsd0JBSHVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQWtCO0FBQUE7QUFBQSwyQkFFbEI7QUFBQSxtQkFBa0I7QUFBQTtBQUFBLGVBRTdDO0FBQUEsY0FBSTtBQUFBLG9CQUNKO0FBQUE7QUFBQSxJQUVYLG1DQUEwQjtBQUFBO0FBQUEsR0Q1SzVCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDExMTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X2VkMjU1MTkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogRWQyNTUxOSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIOKAlCBwdXJlIE9DYW1sLCBXQVNNLXNhZmUuXG5cbiAgICBSRkMgODAzMiDCpzUuMS43IGNvZmFjdG9ybGVzcyB2ZXJpZnkgb3ZlciBlZHdhcmRzMjU1MTkuIEluY2x1ZGVzIGFcbiAgICBtaW5pbWFsIGFyYml0cmFyeS1wcmVjaXNpb24gdW5zaWduZWQgYmlnbnVtIChubyBaYXJpdGggLyBubyBkZXBzKVxuICAgIGFuZCB0d2lzdGVkLUVkd2FyZHMgZXh0ZW5kZWQtY29vcmRpbmF0ZSBwb2ludCBhcml0aG1ldGljLiBWZXJpZnlcbiAgICBpcyB0b3RhbDogbWFsZm9ybWVkIGlucHV0cyByZXR1cm4gW2ZhbHNlXSwgbmV2ZXIgcmFpc2UuIFNIQS01MTJcbiAgICBpcyByZXVzZWQgZnJvbSB7IVN4X3NoYTJ9LiBSZWZlcmVuY2U6IFJGQyA4MDMyLCBSRkMgNzc0OC4gKilcblxuKCogLS0tLSBNaW5pbWFsIGJpZ251bTogaW50IGFycmF5LCBsaXR0bGUtZW5kaWFuLCBiYXNlIDJeMjYuIC0tLS0gKilcblxubGV0IGJpdHMgPSAyNlxubGV0IGJhc2UgPSAxIGxzbCBiaXRzXG5sZXQgbWFzayA9IGJhc2UgLSAxXG5cbnR5cGUgYm4gPSBpbnQgYXJyYXkgICgqIG5vcm1hbGl6ZWQ6IG5vIGhpZ2ggemVybyBsaW1icywgbGVuZ3RoID49IDEgKilcblxubGV0IG5vcm0gKGEgOiBibikgOiBibiA9XG4gIGxldCBuID0gcmVmIChBcnJheS5sZW5ndGggYSkgaW5cbiAgd2hpbGUgIW4gPiAxICYmIGEuKCFuIC0gMSkgPSAwIGRvIGRlY3IgbiBkb25lO1xuICBpZiAhbiA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gYSBlbHNlIEFycmF5LnN1YiBhIDAgIW5cblxubGV0IGJ6ZXJvIDogYm4gPSBbfCAwIHxdXG5sZXQgb2ZfaW50IG4gOiBibiA9XG4gIGlmIG4gPSAwIHRoZW4gYnplcm9cbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gcmVmIFtdIGFuZCBuID0gcmVmIG4gaW5cbiAgICB3aGlsZSAhbiA+IDAgZG8gciA6PSAoIW4gbGFuZCBtYXNrKSA6OiAhcjsgbiA6PSAhbiBsc3IgYml0cyBkb25lO1xuICAgIG5vcm0gKEFycmF5Lm9mX2xpc3QgKExpc3QucmV2ICFyKSlcbiAgZW5kXG5cbmxldCBpc196ZXJvIChhIDogYm4pID0gQXJyYXkubGVuZ3RoIGEgPSAxICYmIGEuKDApID0gMFxuXG5sZXQgY21wIChhIDogYm4pIChiIDogYm4pIDogaW50ID1cbiAgbGV0IGEgPSBub3JtIGEgYW5kIGIgPSBub3JtIGIgaW5cbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlbiBjb21wYXJlIGxhIGxiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHJlZiAwIGFuZCBpID0gcmVmIChsYSAtIDEpIGluXG4gICAgd2hpbGUgIXIgPSAwICYmICFpID49IDAgZG9cbiAgICAgIGlmIGEuKCFpKSA8PiBiLighaSkgdGhlbiByIDo9IGNvbXBhcmUgYS4oIWkpIGIuKCFpKTtcbiAgICAgIGRlY3IgaVxuICAgIGRvbmU7ICFyXG4gIGVuZFxuXG5sZXQgYWRkIChhIDogYm4pIChiIDogYm4pIDogYm4gPVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBhbmQgbGIgPSBBcnJheS5sZW5ndGggYiBpblxuICBsZXQgbiA9IChtYXggbGEgbGIpICsgMSBpblxuICBsZXQgciA9IEFycmF5Lm1ha2UgbiAwIGluXG4gIGxldCBjYXJyeSA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIGxldCBzID0gIWNhcnJ5XG4gICAgICAgICAgICArIChpZiBpIDwgbGEgdGhlbiBhLihpKSBlbHNlIDApXG4gICAgICAgICAgICArIChpZiBpIDwgbGIgdGhlbiBiLihpKSBlbHNlIDApIGluXG4gICAgci4oaSkgPC0gcyBsYW5kIG1hc2s7IGNhcnJ5IDo9IHMgbHNyIGJpdHNcbiAgZG9uZTtcbiAgbm9ybSByXG5cbigqIGEgLSBiLCByZXF1aXJlcyBhID49IGIgKilcbmxldCBzdWIgKGEgOiBibikgKGIgOiBibikgOiBibiA9XG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGxldCByID0gQXJyYXkubWFrZSBsYSAwIGluXG4gIGxldCBib3Jyb3cgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGEgLSAxIGRvXG4gICAgbGV0IHMgPSBhLihpKSAtICFib3Jyb3cgLSAoaWYgaSA8IGxiIHRoZW4gYi4oaSkgZWxzZSAwKSBpblxuICAgIGlmIHMgPCAwIHRoZW4gKHIuKGkpIDwtIHMgKyBiYXNlOyBib3Jyb3cgOj0gMSlcbiAgICBlbHNlIChyLihpKSA8LSBzOyBib3Jyb3cgOj0gMClcbiAgZG9uZTtcbiAgbm9ybSByXG5cbmxldCBtdWwgKGEgOiBibikgKGIgOiBibikgOiBibiA9XG4gICgqIEFjY3VtdWxhdGUgaW4gSW50NjQ6IGEgbGltYiBwcm9kdWN0IGlzIDI2KzI2ID0gNTIgYml0cywgd2hpY2ggb3ZlcmZsb3dzIHRoZVxuICAgICB3ZWIgdGFyZ2V0cycgaW50ICgzMi1iaXQganNfb2Zfb2NhbWwgLyAzMS1iaXQgd2FzbV9vZl9vY2FtbCkuIEludDY0IGlzIGFcbiAgICAgcmVhbCA2NC1iaXQgdHlwZSBvbiBldmVyeSB0YXJnZXQsIHNvIHRoZSBjYXJyaWVzIGFyZSBleGFjdC4gKilcbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgbGV0IHIgPSBBcnJheS5tYWtlIChsYSArIGxiKSAwIGluXG4gIGxldCBtYXNrTCA9IEludDY0Lm9mX2ludCBtYXNrIGluXG4gIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICBsZXQgY2FycnkgPSByZWYgMEwgaW5cbiAgICBsZXQgYWkgPSBJbnQ2NC5vZl9pbnQgYS4oaSkgaW5cbiAgICBmb3IgaiA9IDAgdG8gbGIgLSAxIGRvXG4gICAgICBsZXQgcyA9IEludDY0LmFkZCAoSW50NjQuYWRkIChJbnQ2NC5vZl9pbnQgci4oaSArIGopKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKEludDY0Lm11bCBhaSAoSW50NjQub2ZfaW50IGIuKGopKSkpICFjYXJyeSBpblxuICAgICAgci4oaSArIGopIDwtIEludDY0LnRvX2ludCAoSW50NjQubG9nYW5kIHMgbWFza0wpO1xuICAgICAgY2FycnkgOj0gSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCBzIGJpdHNcbiAgICBkb25lO1xuICAgIHIuKGkgKyBsYikgPC0gci4oaSArIGxiKSArIEludDY0LnRvX2ludCAhY2FycnlcbiAgZG9uZTtcbiAgbm9ybSByXG5cbmxldCBudW1iaXRzIChhIDogYm4pIDogaW50ID1cbiAgbGV0IGEgPSBub3JtIGEgaW5cbiAgbGV0IGhpID0gQXJyYXkubGVuZ3RoIGEgLSAxIGluXG4gIGlmIGhpID0gMCAmJiBhLigwKSA9IDAgdGhlbiAwXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYiA9IHJlZiAwIGFuZCB2ID0gcmVmIGEuKGhpKSBpblxuICAgIHdoaWxlICF2ID4gMCBkbyBpbmNyIGI7IHYgOj0gIXYgbHNyIDEgZG9uZTtcbiAgICBoaSAqIGJpdHMgKyAhYlxuICBlbmRcblxubGV0IGJpdCAoYSA6IGJuKSAoaSA6IGludCkgOiBpbnQgPVxuICBsZXQgbGltYiA9IGkgLyBiaXRzIGFuZCBvZmYgPSBpIG1vZCBiaXRzIGluXG4gIGlmIGxpbWIgPj0gQXJyYXkubGVuZ3RoIGEgdGhlbiAwIGVsc2UgKGEuKGxpbWIpIGxzciBvZmYpIGxhbmQgMVxuXG4oKiByID0gYSBtb2QgbSAgKG0gPiAwKSwgYmluYXJ5IGxvbmcgZGl2aXNpb24uICopXG5sZXQgYm5fbW9kIChhIDogYm4pIChtIDogYm4pIDogYm4gPVxuICBpZiBjbXAgYSBtIDwgMCB0aGVuIG5vcm0gYVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSByZWYgYnplcm8gaW5cbiAgICBmb3IgaSA9IG51bWJpdHMgYSAtIDEgZG93bnRvIDAgZG9cbiAgICAgICgqIHIgPSByKjIgKyBiaXQgKilcbiAgICAgIHIgOj0gYWRkICFyICFyO1xuICAgICAgaWYgYml0IGEgaSA9IDEgdGhlbiByIDo9IGFkZCAhciBbfCAxIHxdO1xuICAgICAgaWYgY21wICFyIG0gPj0gMCB0aGVuIHIgOj0gc3ViICFyIG1cbiAgICBkb25lO1xuICAgICFyXG4gIGVuZFxuXG5sZXQgZGl2X3NtYWxsIChhIDogYm4pIChkIDogaW50KSA6IGJuID1cbiAgKCogW3JlbSBsc2wgYml0c10gcmVhY2hlcyB+Ml4zNCAocmVtIDwgZCA8PSAyNTYsIGJpdHMgPSAyNiksIHBhc3QgdGhlIHdlYlxuICAgICB0YXJnZXRzJyBpbnQgd2lkdGgg4oCUIGFjY3VtdWxhdGUgdGhlIHJ1bm5pbmcgcmVtYWluZGVyIGluIEludDY0LiAqKVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcSA9IEFycmF5Lm1ha2UgbGEgMCBpblxuICBsZXQgcmVtID0gcmVmIDBMIGluXG4gIGxldCBkTCA9IEludDY0Lm9mX2ludCBkIGluXG4gIGZvciBpID0gbGEgLSAxIGRvd250byAwIGRvXG4gICAgbGV0IGN1ciA9IEludDY0LmxvZ29yIChJbnQ2NC5zaGlmdF9sZWZ0ICFyZW0gYml0cykgKEludDY0Lm9mX2ludCBhLihpKSkgaW5cbiAgICBxLihpKSA8LSBJbnQ2NC50b19pbnQgKEludDY0LmRpdiBjdXIgZEwpO1xuICAgIHJlbSA6PSBJbnQ2NC5yZW0gY3VyIGRMXG4gIGRvbmU7XG4gIG5vcm0gcVxuXG5sZXQgcG93bW9kIChiMCA6IGJuKSAoZSA6IGJuKSAobSA6IGJuKSA6IGJuID1cbiAgbGV0IHJlc3VsdCA9IHJlZiBbfCAxIHxdIGFuZCBiID0gcmVmIChibl9tb2QgYjAgbSkgaW5cbiAgbGV0IG5iID0gbnVtYml0cyBlIGluXG4gIGZvciBpID0gMCB0byBuYiAtIDEgZG9cbiAgICBpZiBiaXQgZSBpID0gMSB0aGVuIHJlc3VsdCA6PSBibl9tb2QgKG11bCAhcmVzdWx0ICFiKSBtO1xuICAgIGIgOj0gYm5fbW9kIChtdWwgIWIgIWIpIG1cbiAgZG9uZTtcbiAgIXJlc3VsdFxuXG5sZXQgb2ZfYnl0ZXNfbGUgKHMgOiBzdHJpbmcpIDogYm4gPVxuICBsZXQgYWNjID0gcmVmIGJ6ZXJvIGluXG4gIGZvciBpID0gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGFjYyA6PSBhZGQgKG11bCAhYWNjIChvZl9pbnQgMjU2KSkgKG9mX2ludCAoQ2hhci5jb2RlIHMuW2ldKSlcbiAgZG9uZTtcbiAgIWFjY1xuXG5sZXQgdG9fYnl0ZXNfbGUgKGEgOiBibikgKG4gOiBpbnQpIDogc3RyaW5nID1cbiAgbGV0IGIgPSBCeXRlcy5tYWtlIG4gJ1xcMDAwJyBpblxuICBsZXQgY3VyID0gcmVmIChub3JtIGEpIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIGxldCBxID0gZGl2X3NtYWxsICFjdXIgMjU2IGluXG4gICAgbGV0IHIgPVxuICAgICAgbGV0IHFtID0gbXVsIHEgKG9mX2ludCAyNTYpIGluXG4gICAgICBsZXQgZCA9IHN1YiAhY3VyIHFtIGluXG4gICAgICBpZiBpc196ZXJvIGQgdGhlbiAwIGVsc2UgZC4oMClcbiAgICBpblxuICAgIEJ5dGVzLnNldCBiIGkgKENoYXIuY2hyIHIpO1xuICAgIGN1ciA6PSBxXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG4oKiAtLS0tIEZpZWxkIEdGKHApLCBwID0gMl4yNTUgLSAxOSAtLS0tICopXG5cbmxldCBwID1cbiAgbGV0IHR3b3AyNTUgPSBBcnJheS5tYWtlIDExIDAgaW4gICAoKiAxMSoyNiA9IDI4NiA+IDI1NSAqKVxuICBsZXQgbGltYiA9IDI1NSAvIGJpdHMgYW5kIG9mZiA9IDI1NSBtb2QgYml0cyBpblxuICB0d29wMjU1LihsaW1iKSA8LSAxIGxzbCBvZmY7XG4gIHN1YiAobm9ybSB0d29wMjU1KSAob2ZfaW50IDE5KVxuXG5sZXQgZm1vZCBhID0gYm5fbW9kIGEgcFxubGV0IGZhZGQgYSBiID0gZm1vZCAoYWRkIGEgYilcbmxldCBmc3ViIGEgYiA9IGZtb2QgKGFkZCBhIChzdWIgcCAoZm1vZCBiKSkpXG5sZXQgZm11bCBhIGIgPSBmbW9kIChtdWwgYSBiKVxubGV0IGZwb3cgYSBlID0gcG93bW9kIGEgZSBwXG5sZXQgZmludiBhID0gZnBvdyBhIChzdWIgcCAob2ZfaW50IDIpKSAgICgqIEZlcm1hdDogYV4ocC0yKSAqKVxuXG4oKiBncm91cCBvcmRlciBMID0gMl4yNTIgKyAyNzc0MjMxNzc3NzM3MjM1MzUzNTg1MTkzNzc5MDg4MzY0ODQ5MyAqKVxubGV0IGVsbCA9XG4gIG9mX2J5dGVzX2xlXG4gICAgXCJcXHhlZFxceGQzXFx4ZjVcXHg1Y1xceDFhXFx4NjNcXHgxMlxceDU4XFx4ZDZcXHg5Y1xceGY3XFx4YTJcXHhkZVxceGY5XFx4ZGVcXHgxNFxcXG4gICAgIFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDEwXCJcblxuKCogZCA9IC0xMjE2NjUgLyAxMjE2NjYgbW9kIHAgKilcbmxldCBkY29uc3QgPVxuICBsZXQgaW52NjY2ID0gZmludiAob2ZfaW50IDEyMTY2NikgaW5cbiAgZm1vZCAobXVsIChmc3ViIChvZl9pbnQgMCkgKG9mX2ludCAxMjE2NjUpKSBpbnY2NjYpXG5cbigqIHNxcnQoLTEpID0gMl4oKHAtMSkvNCkgbW9kIHAgKilcbmxldCBzcXJ0bTEgPSBmcG93IChvZl9pbnQgMikgKGRpdl9zbWFsbCAoc3ViIHAgKG9mX2ludCAxKSkgNClcblxuKCogLS0tLSBlZHdhcmRzMjU1MTkgcG9pbnRzIGluIGV4dGVuZGVkIGNvb3JkcyAoWCxZLFosVCkgLS0tLSAqKVxuXG50eXBlIHB0ID0geyB4IDogYm47IHkgOiBibjsgeiA6IGJuOyB0IDogYm4gfVxuXG5sZXQgaWRlbnRpdHkgPSB7IHggPSBiemVybzsgeSA9IG9mX2ludCAxOyB6ID0gb2ZfaW50IDE7IHQgPSBiemVybyB9XG5cbigqIGFkZC0yMDA4LWh3Y2QtMywgY29tcGxldGUgZm9yIGEgPSAtMSBvbiBlZDI1NTE5ICopXG5sZXQgcGFkZCAocDEgOiBwdCkgKHAyIDogcHQpIDogcHQgPVxuICBsZXQgYSA9IGZtdWwgKGZzdWIgcDEueSBwMS54KSAoZnN1YiBwMi55IHAyLngpIGluXG4gIGxldCBiID0gZm11bCAoZmFkZCBwMS55IHAxLngpIChmYWRkIHAyLnkgcDIueCkgaW5cbiAgbGV0IGMgPSBmbXVsIChmbXVsIHAxLnQgKGZtdWwgKG9mX2ludCAyKSBkY29uc3QpKSBwMi50IGluXG4gIGxldCBkZCA9IGZtdWwgKGZtdWwgcDEueiAob2ZfaW50IDIpKSBwMi56IGluXG4gIGxldCBlID0gZnN1YiBiIGEgaW5cbiAgbGV0IGYgPSBmc3ViIGRkIGMgaW5cbiAgbGV0IGcgPSBmYWRkIGRkIGMgaW5cbiAgbGV0IGggPSBmYWRkIGIgYSBpblxuICB7IHggPSBmbXVsIGUgZjsgeSA9IGZtdWwgZyBoOyB0ID0gZm11bCBlIGg7IHogPSBmbXVsIGYgZyB9XG5cbmxldCBzY2FsYXJfbXVsIChuIDogYm4pIChxIDogcHQpIDogcHQgPVxuICBsZXQgciA9IHJlZiBpZGVudGl0eSBpblxuICBmb3IgaSA9IG51bWJpdHMgbiAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IHBhZGQgIXIgIXI7XG4gICAgaWYgYml0IG4gaSA9IDEgdGhlbiByIDo9IHBhZGQgIXIgcVxuICBkb25lO1xuICAhclxuXG5sZXQgcG5lZ2F0ZSAocSA6IHB0KSA6IHB0ID1cbiAgeyBxIHdpdGggeCA9IGZzdWIgKG9mX2ludCAwKSBxLng7IHQgPSBmc3ViIChvZl9pbnQgMCkgcS50IH1cblxuKCogRGVjb21wcmVzcyBhIDMyLWJ5dGUgbGl0dGxlLWVuZGlhbiBwb2ludCBlbmNvZGluZy4gKilcbmxldCBkZWNvbXByZXNzIChzIDogc3RyaW5nKSA6IHB0IG9wdGlvbiA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIE5vbmVcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzaWduID0gKENoYXIuY29kZSBzLlszMV0gbHNyIDcpIGxhbmQgMSBpblxuICAgIGxldCBzJyA9IEJ5dGVzLm9mX3N0cmluZyBzIGluXG4gICAgQnl0ZXMuc2V0IHMnIDMxIChDaGFyLmNociAoQ2hhci5jb2RlIHMuWzMxXSBsYW5kIDB4N2YpKTtcbiAgICBsZXQgeSA9IG9mX2J5dGVzX2xlIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMnKSBpblxuICAgIGlmIGNtcCB5IHAgPj0gMCB0aGVuIE5vbmVcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgeTIgPSBmbXVsIHkgeSBpblxuICAgICAgbGV0IHUgPSBmc3ViIHkyIChvZl9pbnQgMSkgaW5cbiAgICAgIGxldCB2ID0gZmFkZCAoZm11bCBkY29uc3QgeTIpIChvZl9pbnQgMSkgaW5cbiAgICAgICgqIHggPSB1IHZeMyAodSB2XjcpXigocC01KS84KSAqKVxuICAgICAgbGV0IHYzID0gZm11bCAoZm11bCB2IHYpIHYgaW5cbiAgICAgIGxldCB2NyA9IGZtdWwgKGZtdWwgdjMgdjMpIHYgaW5cbiAgICAgIGxldCBleHAgPSBkaXZfc21hbGwgKHN1YiBwIChvZl9pbnQgNSkpIDggaW5cbiAgICAgIGxldCB4MCA9IGZtdWwgKGZtdWwgdSB2MykgKGZwb3cgKGZtdWwgdSB2NykgZXhwKSBpblxuICAgICAgbGV0IHZ4MiA9IGZtdWwgdiAoZm11bCB4MCB4MCkgaW5cbiAgICAgIGxldCB4ID1cbiAgICAgICAgaWYgY21wIHZ4MiB1ID0gMCB0aGVuIFNvbWUgeDBcbiAgICAgICAgZWxzZSBpZiBjbXAgdngyIChmc3ViIChvZl9pbnQgMCkgdSkgPSAwIHRoZW4gU29tZSAoZm11bCB4MCBzcXJ0bTEpXG4gICAgICAgIGVsc2UgTm9uZVxuICAgICAgaW5cbiAgICAgIG1hdGNoIHggd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSB4IC0+XG4gICAgICAgIGlmIGlzX3plcm8geCAmJiBzaWduID0gMSB0aGVuIE5vbmVcbiAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgIGxldCB4ID0gaWYgKGJpdCB4IDApIDw+IHNpZ24gdGhlbiBmc3ViIChvZl9pbnQgMCkgeCBlbHNlIHggaW5cbiAgICAgICAgICBTb21lIHsgeDsgeTsgeiA9IG9mX2ludCAxOyB0ID0gZm11bCB4IHkgfVxuICAgICAgICBlbmRcbiAgICBlbmRcbiAgZW5kXG5cbigqIEVuY29kZSBhIHBvaW50IHRvIDMyLWJ5dGUgbGl0dGxlLWVuZGlhbiAoeSB3aXRoIHgtcGFyaXR5IGJpdCkuICopXG5sZXQgZW5jb2RlIChxIDogcHQpIDogc3RyaW5nID1cbiAgbGV0IHppID0gZmludiBxLnogaW5cbiAgbGV0IHggPSBmbXVsIHEueCB6aSBhbmQgeSA9IGZtdWwgcS55IHppIGluXG4gIGxldCBiID0gQnl0ZXMub2Zfc3RyaW5nICh0b19ieXRlc19sZSB5IDMyKSBpblxuICBsZXQgbGFzdCA9IENoYXIuY29kZSAoQnl0ZXMuZ2V0IGIgMzEpIGxvciAoKGJpdCB4IDApIGxzbCA3KSBpblxuICBCeXRlcy5zZXQgYiAzMSAoQ2hhci5jaHIgbGFzdCk7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG4oKiBiYXNlIHBvaW50OiB5ID0gNC81IG1vZCBwLCB4IGV2ZW4gKHNpZ24gMCkuICopXG5sZXQgYmFzZV9wb2ludCA9XG4gIGxldCBieSA9IGZtdWwgKG9mX2ludCA0KSAoZmludiAob2ZfaW50IDUpKSBpblxuICBtYXRjaCBkZWNvbXByZXNzICh0b19ieXRlc19sZSBieSAzMikgd2l0aFxuICB8IFNvbWUgcHQgLT4gcHRcbiAgfCBOb25lIC0+IGZhaWx3aXRoIFwiZWQyNTUxOTogYmFzZSBwb2ludCBkZWNvbXByZXNzIGZhaWxlZFwiXG5cbmxldCB1bmhleCAoaCA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgbiA9IFN0cmluZy5sZW5ndGggaCAvIDIgaW5cbiAgbGV0IGIgPSBCeXRlcy5jcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICBCeXRlcy5zZXQgYiBpXG4gICAgICAoQ2hhci5jaHIgKGludF9vZl9zdHJpbmcgKFwiMHhcIiBeIFN0cmluZy5zdWIgaCAoMiAqIGkpIDIpKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiXG5cbmxldCBzaGE1MTJfYnl0ZXMgcyA9IHVuaGV4IChTeF9zaGEyLnNoYTUxMl9oZXggcylcblxuKCogUkZDIDgwMzIgwqc1LjEuNyBjb2ZhY3Rvcmxlc3M6IGVuY29kZShbU11CIC0gW2tdQSkgPT0gUi4gKilcbmxldCB2ZXJpZnkgfnB1YmtleSB+bXNnIH5zaWdfIDogYm9vbCA9XG4gIGlmIFN0cmluZy5sZW5ndGggcHVia2V5IDw+IDMyIHx8IFN0cmluZy5sZW5ndGggc2lnXyA8PiA2NCB0aGVuIGZhbHNlXG4gIGVsc2VcbiAgICBsZXQgcmIgPSBTdHJpbmcuc3ViIHNpZ18gMCAzMiBpblxuICAgIGxldCBzYiA9IFN0cmluZy5zdWIgc2lnXyAzMiAzMiBpblxuICAgIGxldCBzID0gb2ZfYnl0ZXNfbGUgc2IgaW5cbiAgICBpZiBjbXAgcyBlbGwgPj0gMCB0aGVuIGZhbHNlXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZGVjb21wcmVzcyBwdWJrZXkgd2l0aFxuICAgICAgfCBOb25lIC0+IGZhbHNlXG4gICAgICB8IFNvbWUgYSAtPlxuICAgICAgICBsZXQgaCA9IHNoYTUxMl9ieXRlcyAocmIgXiBwdWJrZXkgXiBtc2cpIGluXG4gICAgICAgIGxldCBrID0gYm5fbW9kIChvZl9ieXRlc19sZSBoKSBlbGwgaW5cbiAgICAgICAgbGV0IHNiX3B0ID0gc2NhbGFyX211bCBzIGJhc2VfcG9pbnQgaW5cbiAgICAgICAgbGV0IGthID0gc2NhbGFyX211bCBrIGEgaW5cbiAgICAgICAgbGV0IGNoayA9IHBhZGQgc2JfcHQgKHBuZWdhdGUga2EpIGluXG4gICAgICAgICh0cnkgZW5jb2RlIGNoayA9IHJiIHdpdGggXyAtPiBmYWxzZSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliIiwiU3hfc2hhMiIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfQXJyYXkiLCJub3JtIiwiYSIsIm4iLCJiemVybyIsIm9mX2ludCIsInIiLCJpc196ZXJvIiwiY21wIiwiYiIsImxhIiwibGIiLCJpIiwiYWRkIiwiY2FycnkiLCJzIiwic3ViIiwiYm9ycm93IiwibXVsIiwibWFza0wiLCJhaSIsImoiLCJudW1iaXRzIiwiaGkiLCJ2IiwiYml0IiwibGltYiIsIm9mZiIsImJuX21vZCIsIm0iLCJkaXZfc21hbGwiLCJkIiwicSIsImRMIiwicmVtIiwiY3VyIiwicG93bW9kIiwiYjAiLCJlIiwibmIiLCJyZXN1bHQiLCJvZl9ieXRlc19sZSIsImFjYyIsInRvX2J5dGVzX2xlIiwicW0iLCJ0d29wMjU1IiwicCIsImZtb2QiLCJmYWRkIiwiZnN1YiIsImZtdWwiLCJmcG93IiwiZmludiIsImVsbCIsImludjY2NiIsImRjb25zdCIsInNxcnRtMSIsImlkZW50aXR5IiwicGFkZCIsInAxIiwicDIiLCJjIiwiZGQiLCJmIiwiZyIsImgiLCJzY2FsYXJfbXVsIiwicG5lZ2F0ZSIsImRlY29tcHJlc3MiLCJzaWduIiwieSIsInkyIiwidSIsInYzIiwidjciLCJleHAiLCJ4MCIsInZ4MiIsIngiLCJlbmNvZGUiLCJ6aSIsImxhc3QiLCJieSIsIm1hdGNoIiwicHQiLCJiYXNlX3BvaW50IiwidW5oZXgiLCJzaGE1MTJfYnl0ZXMiLCJ2ZXJpZnkiLCJwdWJrZXkiLCJtc2ciLCJzaWciLCJyYiIsInNiIiwiayIsInNiX3B0Iiwia2EiLCJjaGsiLCJleG4iLCJTeF9lZDI1NTE5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxLQUFBQztBQUFBQSxRQUFBQyxJQ2tCRTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQWdCO0FBQUEsV0FBQUEsTUFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQ2xDLGdDQUFtQyxtQ0FBZ0I7QUFBQTtBQUFBO0FBQUEsV0RuQnJELHFDQUFBQyxRQUFBO0FBQUEsWUFBQUMsT0FBQUY7QUFBQUEsSUN1QkUsWUFBYztBQUFBLFFBQUFBLE1BR1osR0FBQUcsSUFBQTtBQUFBO0FBQUE7QUFBQSxjQUNvQjtBQUFBLE1BQWYsT0FBNkIsS0FBN0IsK0JBQ0o7QUFBQTtBQUFBLGFBRjBDO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FFMUM7QUFBQSxZQUFBQyxRQUFBTDtBQUFBQTtBQUFBQSxLQUFBLElBRWtCO0FBQUEsbUJBQXNCO0FBQUEsSUFBdEI7QUFBQSxHQUErQjtBQUFBLFlBQUFNLElBQUFOLEdBQUFPO0FBQUFBO0FBQUFBLEtBQUFQLE1BRzVDO0FBQUEsS0FBQU8sTUFBZTtBQUFBLEtBQUFDLEtBQ3ZCO0FBQUEsS0FBQUMsS0FBQTtBQUFBLElBQ0EsY0FBaUIsK0JBT2Q7QUFBQSxRQUFBQyxJQUpELFlBQUFOLElBQUE7QUFBQTtBQUFBO0FBQUEsY0FDZTtBQUFBLE1BQVY7QUFBQTtBQUFBLFlBQTBDO0FBQUEsUUFBQUEsTUFBRCxpQkFBTjtBQUFBO0FBQUEsV0FBQUEsTUFBN0I7QUFBQSxVQUFBTSxNQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNJO0FBQUE7QUFBQSxHQUNMO0FBQUEsWUFBQUMsSUFBQVgsR0FBQU87QUFBQUE7QUFBQUEsS0FBQUMsS0FHSDtBQUFBLEtBQUFDLEtBQUE7QUFBQSxLQUFBUixJQUNRO0FBQUEsS0FBQUcsSUFDQTtBQUFBLFNBRVI7QUFBQTtBQUFBLFNBQUFRLFFBQUEsR0FBQUYsSUFBQTtBQUFBO0FBQUE7QUFBQSxXQUNFLFNBRTBCO0FBQUEsV0FGMUIsU0FDMEI7QUFBQSxPQUFBRyxJQUQxQjtBQUFBLE1BR0E7QUFBQSxjQUFvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUV0QixjQUFNO0FBQUE7QUFBQSxZQUFBQyxJQUFBZCxHQUFBTztBQUFBQTtBQUFBQSxLQUFBQyxLQUlOO0FBQUEsS0FBQUMsS0FBQTtBQUFBLEtBQUFMLElBQ1E7QUFBQSxTQUVSO0FBQUE7QUFBQSxTQUFBVyxTQUFBLEdBQUFMLElBQUE7QUFBQTtBQUFBO0FBQUEsV0FDRSxTQUEwQztBQUFBLE9BQUFHLElBQWxDO0FBQUEsT0FBQUU7QUFBQUEsU0FDUjtBQUFBLGFBQ007QUFBQSxhQURTO0FBQUEsV0FBZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUdGLGNBQU07QUFBQTtBQUFBLFlBQUFDLElBQUFoQixHQUFBTztBQUFBQTtBQUFBQSxLQUFBQyxLQU1OO0FBQUEsS0FBQUMsS0FBQTtBQUFBLEtBQUFMLElBQ1E7QUFBQSxLQUFBYSxRQUNJO0FBQUEsU0FDWjtBQUFBO0FBQUEsU0FBQVAsSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBUSxLQUVXLG9CQUFhO0FBQUEsV0FDdEI7QUFBQTtBQUFBLFdBQUFOLFVBQUE7QUFBQTtBQUFBLFdBQUFBLFFBQUEsR0FBQU8sSUFBQTtBQUFBO0FBQUE7QUFBQSxhQUUwRDtBQUFBO0FBQUEsV0FBbkM7QUFBQSxpQkFBYyxvQkFBYztBQUFBLFNBQUFOO0FBQUFBLFdBRHpDO0FBQUEsYUFBVTtBQUFBLGVBQVcsb0JBQWM7QUFBQTtBQUFBLGFBRUs7QUFBQSxRQUFoRDtBQUFBLFNBQWdELG9CQUF0QjtBQUFBLGdCQUNqQixvREFBZ0M7QUFBQSx3QkFBQUQsVUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUUzQztBQUFBLFdBQXdCO0FBQUEsV0FBVixnQ0FBZDtBQUFBO0FBQUEsY0FBOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRWhELGNBQU07QUFBQTtBQUFBLFlBQUFRLFFBQUFwQjtBQUFBQSxRQUFBQSxNQUdFLFNBQUFxQixLQUNSO0FBQUEsSUFDQSxxQkFBYSw2QkFBZTtBQUFBLFFBQUFDLElBRUEsbUNBQUFmLElBQzFCO0FBQUE7QUFBQSxnQkFDQTtBQUFBLFNBQUFBLE1BRGdCO0FBQUEsS0FBUTtBQUFBO0FBQUE7QUFBQSxHQUV2QjtBQUFBLFlBQUFnQixJQUFBdkIsR0FBQVU7QUFBQUEsUUFBQWMsT0FHSCxZQUFBQyxNQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsZUFBdUMsb0RBQXdCO0FBQUE7QUFBQSxZQUFBQyxPQUFBMUIsR0FBQTJCO0FBQUFBLElBSTVELGtCQUFpQixjQVVqQjtBQUFBLFlBUE87QUFBQSxJQUFTO0FBQUEsU0FBQXZCLE1BQUE7QUFBQTtBQUFBLFNBQUFBLE1BQUEsT0FBQU0sSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBTixJQUVWO0FBQUEsT0FBQUEsTUFDRixrQkFBc0I7QUFBQSxPQUFBQSxNQUN0QixtQkFBd0I7QUFBQSxXQUFoQjtBQUFBLHNCQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUViO0FBQUEsR0FDQztBQUFBLFlBQUF3QixVQUFBNUIsR0FBQTZCO0FBQUFBO0FBQUFBLEtBQUFyQixLQUtIO0FBQUEsS0FBQXNCLElBQ1E7QUFBQSxLQUFBQyxLQUVDO0FBQUEsU0FDVDtBQUFBO0FBQUEsU0FBQUMsTUFBQSxHQUFBdEIsSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBdUI7QUFBQUEsU0FDWTtBQUFBLFdBQVk7QUFBQSxXQUE2QixvQkFBYztBQUFBLFdBQ3pCLG9CQUFsQjtBQUFBLE1BQXRCO0FBQUEsY0FDTyxxQ0FBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFekIsY0FBTTtBQUFBO0FBQUEsWUFBQUMsT0FBQUMsSUFBQUMsR0FBQVQ7QUFBQUEsUUFBQSxJQUcrQixlQUFBVSxLQUM1QixnQkFDVCxnQkFGQTtBQUFBLElBRUE7QUFBQSxTQUFBQyxXQUFBO0FBQUE7QUFBQSxTQUFBL0IsSUFBQSxHQUFBK0IsU0FBQSxHQUFBNUIsSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBNEIsV0FDSyxrQkFBMkIsT0FBTztBQUFBLFdBQ2hDLE9BQU87QUFBQSxXQUFhO0FBQUEsc0JBQUFBLFdBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFM0I7QUFBQSxHQUFPO0FBQUEsWUFBQUMsWUFBQTFCO0FBQUFBLFFBQUEsSUFJUDtBQUFBO0FBQUEsU0FBQTJCLFFBQUE7QUFBQTtBQUFBLFNBQUFBLE1BQUEsT0FBQTlCLElBQUE7QUFBQTtBQUFBO0FBQUEsV0FDcUMsT0FBbUI7QUFBQSxXQUEvQyxJQUFJLFNBQVU7QUFBQSxXQUF3QztBQUFBLHNCQUFBOEIsUUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFL0Q7QUFBQSxHQUFJO0FBQUEsWUFBQUMsWUFBQXpDLEdBQUFDO0FBQUFBLFFBQUFNLElBR0ksc0NBRVIsZUFEYztBQUFBLElBQ2Q7QUFBQSxTQUFBMEIsTUFBQSxHQUFBdkIsSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBb0IsSUFDVTtBQUFBLE9BQUFZLEtBRUcsT0FBTTtBQUFBLE9BQUFiLElBQ1A7QUFBQSxPQUFBekIsSUFDTCxpQkFBc0I7QUFBQSxNQUUzQixxQkFBYztBQUFBLGNBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFHNUIscUNBQXdCO0FBQUE7QUFBQSxPQUFBdUMsVUFLVjtBQUFBLEdBRWQ7QUFBQSxXQUNtQixZQUFBQyxJQUFuQixJQUFJO0FBQUEsWUFBQUMsS0FBQTdDLEdBRU8sbUJBQVU7QUFBQSxZQUFBOEMsS0FBQTlDLEdBQUFPLE9BQUFQLE1BQ0gsV0FEUCxxQkFDZ0I7QUFBQSxZQUFBK0MsS0FBQS9DLEdBQUFPO0FBQUFBLFFBQUFQLE1BQ1QsT0FBTyxPQUZkO0FBQUEseUJBRStCO0FBQUE7QUFBQSxZQUFBZ0QsS0FBQWhELEdBQUFPLE9BQUFQLE1BQ3hCLFdBSFAscUJBR2dCO0FBQUEsWUFBQWlELEtBQUFqRCxHQUFBb0MsR0FDZCxzQkFBWTtBQUFBLFlBQUFjLEtBQUFsRCxPQUFBb0MsSUFDUCxPQUFPLFlBRFosc0JBQ3VCO0FBQUE7QUFBQSxJQUFBZTtBQUFBQSxNQUlwQztBQUFBO0FBQUEsSUFBQUMsU0FNYSxLQUFLO0FBQUEsUUFDUztBQUFBLElBQUFwRCxJQUF0QixJQUFLLEtBQU07QUFBQSxJQUFBcUQsU0FoQkw7QUFBQSxJQUFBakIsSUFtQmdCLFVBQVcsT0FBTztBQUFBLElBQUFwQyxNQUE3QjtBQUFBLElBQUFzRCxTQWZIO0FBQUEsUUFxQitCO0FBQUEsSUFBQUMsV0FBZDtBQUFBLFlBQUFDLEtBQUFDLElBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUFJQTtBQUFBLEtBQUExRCxJQUF0QixLQUFLO0FBQUEsU0FDaUI7QUFBQSxLQUFBTyxJQUF0QixLQUFLO0FBQUEsU0FDaUI7QUFBQSxTQUFOLEtBQU07QUFBQSxLQUFBb0QsSUFBdEIsS0FBSztBQUFBLFNBQ1k7QUFBQTtBQUFBLEtBQUFDLEtBQWhCLEtBQUs7QUFBQSxLQUFBeEIsSUFDTjtBQUFBLEtBQUF5QixJQUNBO0FBQUEsS0FBQUMsSUFDQTtBQUFBLEtBQUFDLElBQ0E7QUFBQSxTQUMwQjtBQUFBLFNBQWM7QUFBQSxTQUE1QjtBQUFBLElBQWQsK0JBQVE7QUFBQSxHQUE0QztBQUFBLFlBQUFDLFdBQUEvRCxHQUFBNkI7QUFBQUEsUUFBQSxJQUlsRDtBQUFBLElBQVM7QUFBQSxTQUFBMUIsTUFBQTtBQUFBO0FBQUEsU0FBQUEsTUFBQSxVQUFBTSxJQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFOLElBQ1Y7QUFBQSxPQUFBQSxNQUNGLGtCQUFzQjtBQUFBLFdBQWY7QUFBQSxzQkFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFWjtBQUFBLEdBQUU7QUFBQSxZQUFBNkQsUUFBQW5DO0FBQUFBLFFBQUEsSUFHeUMsVUFBTCxLQUFLLG1CQUF6QjtBQUFBLGVBQUwsS0FBSyx1QkFBYztBQUFBLEdBQTJCO0FBQUEsWUFBQW9DLFdBQUFyRDtBQUFBQSxJQUkzRCxvQ0FBOEI7QUFBQTtBQUFBLEtBQUFzRCxPQUVOO0FBQUEsS0FBQXRELE1BQ2I7QUFBQSxTQUM0QjtBQUFBLElBQXJDLHdCQUFnQjtBQUFBLFFBQUF1RCxJQUNSLFlBQVk7QUFBQSxJQUNqQixtQkFBa0I7QUFBQTtBQUFBLEtBQUFDLEtBRVY7QUFBQSxLQUFBQyxJQUNELFNBQVE7QUFBQSxTQUNjO0FBQUEsS0FBQWhELElBQXRCLEtBQUs7QUFBQSxLQUFBaUQsS0FFSixLQUFLO0FBQUEsS0FBQUMsS0FDTCxLQUFLO0FBQUEsS0FBQUMsTUFDSixVQUFVLE9BQU87QUFBQSxLQUFBekUsSUFDSztBQUFBLFNBL0R2QjtBQUFBLEtBQUEwRSxLQStEQSxLQUFLO0FBQUEsS0FBQUMsTUFDSixRQUFPO0FBQUEsS0FBQUM7QUFBQUEsT0FFWjtBQUFBO0FBQUEsZ0JBQ0ssU0FBUSxLQUFNLHFCQUE0QjtBQUFBLElBR3BELFFBQ1U7QUFBQSxRQUFBQSxNQURWO0FBQUEsSUFHSywrQkFBMkI7QUFBQTtBQUFBLEtBQUFBLE1BRWpCLHVCQUF1QixLQUFLO0FBQUEsU0FDUjtBQUFBLElBQWQscUNBQVE7QUFBQSxHQUc5QjtBQUFBLFlBQUFDLE9BQUEvQztBQUFBQTtBQUFBQSxLQUFBZ0QsS0FJTTtBQUFBLEtBQUFGLElBQ0Q7QUFBQSxLQUFBUixJQUFvQjtBQUFBLFNBQ0o7QUFBQSxLQUFBN0QsSUFBaEI7QUFBQSxTQUNtQztBQUFBLEtBQUF3RSxPQUF0QjtBQUFBLElBQ3JCLHNCQUFlO0FBQUEsSUFBZSxxQ0FDTjtBQUFBO0FBQUE7QUFBQSxRQUlDLEtBQU07QUFBQSxJQUFBQyxLQUF0QixLQUFLO0FBQUEsSUFBQUMsUUFDUixXQUFXO0FBQUEsR0FBbUI7QUFBQSxRQUFBQyxLQUFBLFVBQUFDLGFBQ3ZCO0FBQUE7QUFBQTtBQUFBLEtBQUFBO0FBQUFBLE9BQ0g7QUFBQSxZQUFBQyxNQUFBckI7QUFBQUE7QUFBQUEsS0FBQTlELElBR1Y7QUFBQSxLQUFBTSxJQUNRO0FBQUEsU0FDUjtBQUFBO0FBQUEsU0FBQUcsSUFBQTtBQUFBO0FBQUE7QUFBQSxXQUVxQztBQUFBLFdBQXZCLDJCQUFlO0FBQUEsTUFEM0IscUJBQ0U7QUFBQSxjQUEwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFOUQscUNBQXdCO0FBQUE7QUFBQSxZQUFBMkUsYUFBQXhFLEdBRUMsT0FBc0IsTUFBdEIsMEJBQXNCO0FBQUEsWUFBQXlFLE9BQUFDLFFBQUFDLEtBQUFDO0FBQUFBLElBSS9DO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBQUMsS0FFVztBQUFBLE1BQUFDLEtBQ0E7QUFBQSxNQUFBOUUsSUFDRDtBQUFBLEtBQ0wscUJBQW9CO0FBQUEsU0FBQW9FLFFBRWY7QUFBQSxLQUFpQixZQUNiO0FBQUE7QUFBQSxNQUFBakYsSUFEYTtBQUFBLFVBR007QUFBQSxNQUFBK0QsSUFBbkIsYUFBYTtBQUFBLE1BQUE2QixJQUNiLE9BQU87QUFBQSxNQUFBQyxRQUNIO0FBQUEsTUFBQUMsS0FDSDtBQUFBLE1BQUFDLE1BQ0MsWUFBVztBQUFBLEtBQ3JCLFlBQUssNENBQUFDLEtBQTBCO0FBQUE7QUFBQSxJQWYwQjtBQUFBLEdBZXBCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQWhDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzUXRDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDE2MjksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3BhcnNlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTLWV4cHJlc3Npb24gcGFyc2VyLlxuXG4gICAgUmVjdXJzaXZlIGRlc2NlbnQgb3ZlciBhIHN0cmluZywgcHJvZHVjaW5nIFtTeF90eXBlcy52YWx1ZSBsaXN0XS5cbiAgICBTdXBwb3J0czogbGlzdHMsIGRpY3RzLCBzeW1ib2xzLCBrZXl3b3Jkcywgc3RyaW5ncyAod2l0aCBlc2NhcGVzKSxcbiAgICBudW1iZXJzLCBib29sZWFucywgbmlsLCBjb21tZW50cywgcXVvdGUvcXVhc2lxdW90ZS91bnF1b3RlIHN1Z2FyLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbnR5cGUgc3RhdGUgPSB7XG4gIHNyYyA6IHN0cmluZztcbiAgbGVuIDogaW50O1xuICBtdXRhYmxlIHBvcyA6IGludDtcbn1cblxubGV0IG1ha2Vfc3RhdGUgc3JjID0geyBzcmM7IGxlbiA9IFN0cmluZy5sZW5ndGggc3JjOyBwb3MgPSAwIH1cblxubGV0IHBlZWsgcyA9IGlmIHMucG9zIDwgcy5sZW4gdGhlbiBTb21lIHMuc3JjLltzLnBvc10gZWxzZSBOb25lXG5sZXQgYWR2YW5jZSBzID0gcy5wb3MgPC0gcy5wb3MgKyAxXG5sZXQgYXRfZW5kIHMgPSBzLnBvcyA+PSBzLmxlblxuXG5sZXQgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzID1cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgaWYgYXRfZW5kIHMgdGhlbiAoKVxuICAgIGVsc2UgbWF0Y2ggcy5zcmMuW3MucG9zXSB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT4gYWR2YW5jZSBzOyBnbyAoKVxuICAgIHwgJzsnIC0+XG4gICAgICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIHMuc3JjLltzLnBvc10gPD4gJ1xcbicgZG8gYWR2YW5jZSBzIGRvbmU7XG4gICAgICBpZiBzLnBvcyA8IHMubGVuIHRoZW4gYWR2YW5jZSBzO1xuICAgICAgZ28gKClcbiAgICB8IF8gLT4gKClcbiAgaW4gZ28gKClcblxuKCogQ2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIOKAlCBtYXRjaGVzIHNwZWMvcGFyc2VyLnN4IGlkZW50LXN0YXJ0L2lkZW50LWNoYXIuXG4gICBpZGVudC1zdGFydDogYS16IEEtWiBfIH4gKiArIC0gPiA8ID0gLyAhID8gJlxuICAgaWRlbnQtY2hhcjogIGlkZW50LXN0YXJ0IHBsdXMgMC05IC4gOiAvICMgLCAqKVxubGV0IGlzX2lkZW50X3N0YXJ0ID0gZnVuY3Rpb25cbiAgfCAnYScuLid6JyB8ICdBJy4uJ1onIHwgJ18nIHwgJ34nIHwgJyonIHwgJysnIHwgJy0nXG4gIHwgJz4nIHwgJzwnIHwgJz0nIHwgJy8nIHwgJyEnIHwgJz8nIHwgJyYnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBpc19pZGVudF9jaGFyID0gZnVuY3Rpb25cbiAgfCBjIHdoZW4gaXNfaWRlbnRfc3RhcnQgYyAtPiB0cnVlXG4gIHwgJzAnLi4nOScgfCAnLicgfCAnOicgfCAnIycgfCAnLCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuKCogU3ltYm9sIHJlYWRpbmcgdXNlcyBpZGVudF9jaGFyOyBmaXJzdCBjaGFyIG11c3QgYmUgaWRlbnRfc3RhcnQgb3IgZGlnaXQvY29sb24gKilcbmxldCBpc19zeW1ib2xfY2hhciA9IGlzX2lkZW50X2NoYXJcblxubGV0IHJlYWRfc3RyaW5nIHMgPVxuICAoKiBzLnBvcyBpcyBvbiB0aGUgb3BlbmluZyBxdW90ZSAqKVxuICBhZHZhbmNlIHM7XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgYyA9ICdcIicgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgZWxzZSBpZiBjID0gJ1xcXFwnIHRoZW4gYmVnaW5cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBlc2NhcGVcIik7XG4gICAgICBsZXQgZXNjID0gcy5zcmMuW3MucG9zXSBpblxuICAgICAgYWR2YW5jZSBzO1xuICAgICAgKG1hdGNoIGVzYyB3aXRoXG4gICAgICAgfCAnbicgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJ1xuICAgICAgIHwgJ3QnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcdCdcbiAgICAgICB8ICdyJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHInXG4gICAgICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICAgICAgIHwgJ1xcXFwnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcXFwnXG4gICAgICAgfCAnLycgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnLydcbiAgICAgICB8ICd1JyAtPlxuICAgICAgICAgKCogXFx1WFhYWCDigJQgcmVhZCA0IGhleCBkaWdpdHMsIGVuY29kZSBhcyBVVEYtOCAqKVxuICAgICAgICAgaWYgcy5wb3MgKyA0ID4gcy5sZW4gdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJJbmNvbXBsZXRlIFxcXFx1IGVzY2FwZVwiKTtcbiAgICAgICAgIGxldCBoZXggPSBTdHJpbmcuc3ViIHMuc3JjIHMucG9zIDQgaW5cbiAgICAgICAgIHMucG9zIDwtIHMucG9zICsgNDtcbiAgICAgICAgIGxldCBjb2RlID0gaW50X29mX3N0cmluZyAoXCIweFwiIF4gaGV4KSBpblxuICAgICAgICAgbGV0IHVidWYgPSBCdWZmZXIuY3JlYXRlIDQgaW5cbiAgICAgICAgIEJ1ZmZlci5hZGRfdXRmXzhfdWNoYXIgdWJ1ZiAoVWNoYXIub2ZfaW50IGNvZGUpO1xuICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChCdWZmZXIuY29udGVudHMgdWJ1ZilcbiAgICAgICB8ICdgJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdgJ1xuICAgICAgIHwgXyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJzsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBlc2MpO1xuICAgICAgZ28gKClcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW4gZ28gKClcblxubGV0IHJlYWRfc3ltYm9sIHMgPVxuICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIGlzX3N5bWJvbF9jaGFyIHMuc3JjLltzLnBvc10gZG8gYWR2YW5jZSBzIGRvbmU7XG4gIFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKHMucG9zIC0gc3RhcnQpXG5cbmxldCBnY2QgYSBiID1cbiAgbGV0IHJlYyBnIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGcgYiAoYSBtb2QgYikgaW4gZyAoYWJzIGEpIChhYnMgYilcblxubGV0IG1ha2VfcmF0IG4gZCA9XG4gIGlmIGQgPSAwIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwicmF0aW9uYWw6IGRpdmlzaW9uIGJ5IHplcm9cIik7XG4gIGxldCBzaWduID0gaWYgZCA8IDAgdGhlbiAtMSBlbHNlIDEgaW5cbiAgbGV0IGcgPSBnY2QgKGFicyBuKSAoYWJzIGQpIGluXG4gIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgaWYgcmQgPSAxIHRoZW4gSW50ZWdlciBybiBlbHNlIFJhdGlvbmFsIChybiwgcmQpXG5cbmxldCB0cnlfbnVtYmVyIHN0ciA9XG4gICgqIEludGVnZXJzIChubyAnLicgb3IgJ2UnLydFJykg4oaSIGV4YWN0IEludGVnZXI7IHJhdGlvbmFscyBOL0Q7IGZsb2F0cyDihpIgaW5leGFjdCBOdW1iZXIgKilcbiAgbGV0IGhhc19kZWMgPSBTdHJpbmcuY29udGFpbnMgc3RyICcuJyBpblxuICBsZXQgaGFzX2V4cCA9IFN0cmluZy5jb250YWlucyBzdHIgJ2UnIHx8IFN0cmluZy5jb250YWlucyBzdHIgJ0UnIGluXG4gIGlmIGhhc19kZWMgfHwgaGFzX2V4cCB0aGVuXG4gICAgbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzdHIgd2l0aFxuICAgIHwgU29tZSBuIC0+IFNvbWUgKE51bWJlciBuKVxuICAgIHwgTm9uZSAtPiBOb25lXG4gIGVsc2VcbiAgICBtYXRjaCBTdHJpbmcuc3BsaXRfb25fY2hhciAnLycgc3RyIHdpdGhcbiAgICB8IFtudW1fczsgZGVuX3NdIHdoZW4gbnVtX3MgPD4gXCJcIiAmJiBkZW5fcyA8PiBcIlwiIC0+XG4gICAgICAobWF0Y2ggaW50X29mX3N0cmluZ19vcHQgbnVtX3MsIGludF9vZl9zdHJpbmdfb3B0IGRlbl9zIHdpdGhcbiAgICAgICB8IFNvbWUgbiwgU29tZSBkIC0+ICh0cnkgU29tZSAobWFrZV9yYXQgbiBkKSB3aXRoIF8gLT4gTm9uZSlcbiAgICAgICB8IF8gLT4gTm9uZSlcbiAgICB8IF8gLT5cbiAgICAgIG1hdGNoIGludF9vZl9zdHJpbmdfb3B0IHN0ciB3aXRoXG4gICAgICB8IFNvbWUgbiAtPiBTb21lIChJbnRlZ2VyIG4pXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgKCogaGFuZGxlcyBcIm5hblwiLCBcImluZlwiLCBcIi1pbmZcIiAqKVxuICAgICAgICBtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHN0ciB3aXRoXG4gICAgICAgIHwgU29tZSBuIC0+IFNvbWUgKE51bWJlciBuKVxuICAgICAgICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmVjIHJlYWRfdmFsdWUgcyA6IHZhbHVlID1cbiAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICBpZiBhdF9lbmQgcyB0aGVuIGJlZ2luXG4gICAgbGV0IGxpbmUgPSByZWYgMSBpblxuICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBpZiBjID0gJ1xcbicgdGhlbiBpbmNyIGxpbmUpIHMuc3JjO1xuICAgIHJhaXNlIChQYXJzZV9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBhdCBsaW5lICVkIChwb3MgJWQpXCIgIWxpbmUgcy5wb3MpKVxuICBlbmQ7XG4gIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICB8ICcoJyAtPiByZWFkX2xpc3QgcyAnKSdcbiAgfCAnWycgLT4gcmVhZF9saXN0IHMgJ10nXG4gIHwgJ3snIC0+IHJlYWRfZGljdCBzXG4gIHwgJ1wiJyAtPiBTdHJpbmcgKHJlYWRfc3RyaW5nIHMpXG4gIHwgJ1xcJycgLT4gYWR2YW5jZSBzOyBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJ2AnIC0+IGFkdmFuY2UgczsgTGlzdCBbU3ltYm9sIFwicXVhc2lxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnXFxcXCcgLT5cbiAgICAoKiBDaGFyYWN0ZXIgbGl0ZXJhbDogI1xcYSwgI1xcc3BhY2UsICNcXG5ld2xpbmUsIGV0Yy4gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGFmdGVyICNcXFxcXCIpO1xuICAgIGxldCBjaGFyX3N0YXJ0ID0gcy5wb3MgaW5cbiAgICAoKiBSZWFkIGEgbmFtZSBpZiBzdGFydHMgd2l0aCBpZGVudCBjaGFyLCBlbHNlIHNpbmdsZSBjaGFyICopXG4gICAgaWYgaXNfaWRlbnRfc3RhcnQgcy5zcmMuW3MucG9zXSB0aGVuIGJlZ2luXG4gICAgICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIGlzX2lkZW50X2NoYXIgcy5zcmMuW3MucG9zXSBkbyBhZHZhbmNlIHMgZG9uZTtcbiAgICAgIGxldCBuYW1lID0gU3RyaW5nLnN1YiBzLnNyYyBjaGFyX3N0YXJ0IChzLnBvcyAtIGNoYXJfc3RhcnQpIGluXG4gICAgICBsZXQgY3AgPSBtYXRjaCBuYW1lIHdpdGhcbiAgICAgICAgfCBcInNwYWNlXCIgLT4gMzIgfCBcIm5ld2xpbmVcIiAtPiAxMCB8IFwidGFiXCIgLT4gOVxuICAgICAgICB8IFwicmV0dXJuXCIgLT4gMTMgfCBcIm51bFwiIC0+IDAgfCBcIm51bGxcIiAtPiAwXG4gICAgICAgIHwgXCJlc2NhcGVcIiAtPiAyNyB8IFwiZGVsZXRlXCIgLT4gMTI3IHwgXCJiYWNrc3BhY2VcIiAtPiA4XG4gICAgICAgIHwgXCJhbHRtb2RlXCIgLT4gMjcgfCBcInJ1Ym91dFwiIC0+IDEyN1xuICAgICAgICB8IF8gLT4gQ2hhci5jb2RlIG5hbWUuWzBdICAoKiBzaW5nbGUgbGV0dGVyIGxpa2UgI1xcYSAqKVxuICAgICAgaW4gQ2hhciBjcFxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIENoYXIgKENoYXIuY29kZSBjKVxuICAgIGVuZFxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmXG4gICAgICAgICAgICAgKHMuc3JjLltzLnBvcyArIDFdID0gJ3QnIHx8IHMuc3JjLltzLnBvcyArIDFdID0gJ2YnKSAmJlxuICAgICAgICAgICAgIChzLnBvcyArIDIgPj0gcy5sZW4gfHwgbm90IChpc19pZGVudF9jaGFyIHMuc3JjLltzLnBvcyArIDJdKSkgLT5cbiAgICAoKiAjdCAvICNmIOKAlCBib29sZWFuIGxpdGVyYWxzIChSN1JTIHNob3J0aGFuZCkgKilcbiAgICBsZXQgYiA9IHMuc3JjLltzLnBvcyArIDFdID0gJ3QnIGluXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgQm9vbCBiXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnOycgLT5cbiAgICAoKiBEYXR1bSBjb21tZW50OiAjOyBkaXNjYXJkcyBuZXh0IGV4cHJlc3Npb24gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBpZ25vcmUgKHJlYWRfdmFsdWUgcyk7XG4gICAgcmVhZF92YWx1ZSBzXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnXFwnJyAtPlxuICAgICgqIFF1b3RlIHNob3J0aGFuZDogIydleHByIC0+IChxdW90ZSBleHByKSAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgfCAnIycgd2hlbiBzLnBvcyArIDEgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgKyAxXSA9ICd8JyAtPlxuICAgICgqIFJhdyBzdHJpbmc6ICN8Li4ufCAg4oCUIGVuZHMgYXQgbmV4dCB8ICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgcmVjIGdvICgpID1cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHJhdyBzdHJpbmdcIik7XG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGlmIGMgPSAnfCcgdGhlblxuICAgICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgZ28gKClcbiAgICAgIGVuZFxuICAgIGluIGdvICgpXG4gIHwgJywnIC0+XG4gICAgKCogVW5xdW90ZSAvIHNwbGljZS11bnF1b3RlIOKAlCBtYXRjaGVzIHNwZWM6ICwgYWx3YXlzIHRyaWdnZXJzIHVucXVvdGUgKilcbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdID0gJ0AnIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIExpc3QgW1N5bWJvbCBcInNwbGljZS11bnF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgICBlbmQgZWxzZVxuICAgICAgTGlzdCBbU3ltYm9sIFwidW5xdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgXyAtPlxuICAgIGJlZ2luXG4gICAgICAoKiBTeW1ib2wsIGtleXdvcmQsIG51bWJlciwgb3IgYm9vbGVhbiAqKVxuICAgICAgbGV0IHRva2VuID0gcmVhZF9zeW1ib2wgcyBpblxuICAgICAgaWYgdG9rZW4gPSBcIlwiIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxpbmUgPSByZWYgMSBhbmQgY29sID0gcmVmIDEgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHMucG9zIC0gMSBkb1xuICAgICAgICAgIGlmIHMuc3JjLltpXSA9ICdcXG4nIHRoZW4gKGluY3IgbGluZTsgY29sIDo9IDEpIGVsc2UgaW5jciBjb2xcbiAgICAgICAgZG9uZTtcbiAgICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlVuZXhwZWN0ZWQgY2hhcjogJWMgYXQgbGluZSAlZCBjb2wgJWQgKHBvcyAlZClcIlxuICAgICAgICAgIHMuc3JjLltzLnBvc10gIWxpbmUgIWNvbCBzLnBvcykpXG4gICAgICBlbmQ7XG4gICAgICBtYXRjaCB0b2tlbiB3aXRoXG4gICAgICB8IFwidHJ1ZVwiIC0+IEJvb2wgdHJ1ZVxuICAgICAgfCBcImZhbHNlXCIgLT4gQm9vbCBmYWxzZVxuICAgICAgfCBcIm5pbFwiIC0+IE5pbFxuICAgICAgfCBfIHdoZW4gdG9rZW4uWzBdID0gJzonIC0+XG4gICAgICAgIEtleXdvcmQgKFN0cmluZy5zdWIgdG9rZW4gMSAoU3RyaW5nLmxlbmd0aCB0b2tlbiAtIDEpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIHRyeV9udW1iZXIgdG9rZW4gd2l0aFxuICAgICAgICB8IFNvbWUgbiAtPiBuXG4gICAgICAgIHwgTm9uZSAtPiBTeW1ib2wgdG9rZW5cbiAgICBlbmRcblxuYW5kIHJlYWRfbGlzdCBzIGNsb3NlX2NoYXIgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgb3BlbmluZyBwYXJlbi9icmFja2V0ICopXG4gIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgbGlzdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gY2xvc2VfY2hhciB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBMaXN0IChMaXN0LnJldiAhaXRlbXMpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGl0ZW1zIDo9IHJlYWRfdmFsdWUgcyA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5hbmQgcmVhZF9kaWN0IHMgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgeyAqKVxuICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgZGljdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gJ30nIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIERpY3QgZFxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBsZXQga2V5ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBsZXQga2V5X3N0ciA9IG1hdGNoIGtleSB3aXRoXG4gICAgICAgIHwgS2V5d29yZCBrIC0+IGtcbiAgICAgICAgfCBTdHJpbmcgayAtPiBrXG4gICAgICAgIHwgU3ltYm9sIGsgLT4ga1xuICAgICAgICB8IF8gLT4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiRGljdCBrZXkgbXVzdCBiZSBrZXl3b3JkLCBzdHJpbmcsIG9yIHN5bWJvbFwiKVxuICAgICAgaW5cbiAgICAgIGxldCB2ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBkaWN0X3NldCBkIGtleV9zdHIgdjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cblxuKCoqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBsaXN0IG9mIFNYIHZhbHVlcyAoQVNUIOKAlCBjb21tZW50cyBzdHJpcHBlZCkuICopXG5sZXQgcGFyc2VfYWxsIHNyYyA9XG4gIGxldCBzID0gbWFrZV9zdGF0ZSBzcmMgaW5cbiAgbGV0IHJlc3VsdHMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gTGlzdC5yZXYgIXJlc3VsdHNcbiAgICBlbHNlIGJlZ2luXG4gICAgICByZXN1bHRzIDo9IHJlYWRfdmFsdWUgcyA6OiAhcmVzdWx0cztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cbigqKiBQYXJzZSBhIGZpbGUgaW50byBhIGxpc3Qgb2YgU1ggdmFsdWVzIChBU1Qg4oCUIGNvbW1lbnRzIHN0cmlwcGVkKS4gKilcbmxldCBwYXJzZV9maWxlIHBhdGggPVxuICBsZXQgaWMgPSBvcGVuX2luIHBhdGggaW5cbiAgbGV0IG4gPSBpbl9jaGFubmVsX2xlbmd0aCBpYyBpblxuICBsZXQgc3JjID0gcmVhbGx5X2lucHV0X3N0cmluZyBpYyBuIGluXG4gIGNsb3NlX2luIGljO1xuICBwYXJzZV9hbGwgc3JjXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBDU1QgcGFyc2VyIOKAlCBsb3NzbGVzcyBjb25jcmV0ZSBzeW50YXggdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbm9wZW4gU3hfY3N0XG5cbigqKiBDb2xsZWN0IGxlYWRpbmcgdHJpdmlhICh3aGl0ZXNwYWNlICsgY29tbWVudHMpIGZyb20gY3VycmVudCBwb3NpdGlvbi4gKilcbmxldCBjb2xsZWN0X3RyaXZpYSBzID1cbiAgbGV0IGl0ZW1zID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gKClcbiAgICBlbHNlIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+XG4gICAgICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiAobGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluIGMgPSAnICcgfHwgYyA9ICdcXHQnIHx8IGMgPSAnXFxuJyB8fCBjID0gJ1xccicpIGRvXG4gICAgICAgIGFkdmFuY2Ugc1xuICAgICAgZG9uZTtcbiAgICAgIGl0ZW1zIDo9IFdoaXRlc3BhY2UgKFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKHMucG9zIC0gc3RhcnQpKSA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIHwgJzsnIC0+XG4gICAgICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdIDw+ICdcXG4nIGRvIGFkdmFuY2UgcyBkb25lO1xuICAgICAgbGV0IHRleHQgPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChzLnBvcyAtIHN0YXJ0KSBpblxuICAgICAgaWYgcy5wb3MgPCBzLmxlbiB0aGVuIGFkdmFuY2UgcztcbiAgICAgICgqIEluY2x1ZGUgdGhlIG5ld2xpbmUgaW4gdGhlIGNvbW1lbnQgdHJpdmlhICopXG4gICAgICBsZXQgdGV4dCA9IGlmIHMucG9zID4gMCAmJiBzLnBvcyA8PSBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgLSAxXSA9ICdcXG4nXG4gICAgICAgIHRoZW4gdGV4dCBeIFwiXFxuXCIgZWxzZSB0ZXh0IGluXG4gICAgICBpdGVtcyA6PSBMaW5lQ29tbWVudCB0ZXh0IDo6ICFpdGVtcztcbiAgICAgIGdvICgpXG4gICAgfCBfIC0+ICgpXG4gIGluXG4gIGdvICgpO1xuICBMaXN0LnJldiAhaXRlbXNcblxuKCoqIFJlYWQgYSBzaW5nbGUgQ1NUIHZhbHVlIOKAlCBkaXNwYXRjaGVzIG9uIGZpcnN0IG5vbi10cml2aWEgY2hhci4gKilcbmxldCByZWMgcmVhZF9jc3QgcyA6IGNzdF9ub2RlID1cbiAgbGV0IHRyaXZpYSA9IGNvbGxlY3RfdHJpdmlhIHMgaW5cbiAgaWYgYXRfZW5kIHMgdGhlblxuICAgIHJhaXNlIChQYXJzZV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICBtYXRjaCBzLnNyYy5bcy5wb3NdIHdpdGhcbiAgfCAnKCcgLT4gcmVhZF9jc3RfbGlzdCBzIHRyaXZpYSBzdGFydCAnKCcgJyknXG4gIHwgJ1snIC0+IHJlYWRfY3N0X2xpc3QgcyB0cml2aWEgc3RhcnQgJ1snICddJ1xuICB8ICd7JyAtPiByZWFkX2NzdF9kaWN0IHMgdHJpdmlhIHN0YXJ0XG4gIHwgJ1xcJycgLT5cbiAgICAoKiBRdW90ZSBzdWdhcjogJ3gg4oaSIChxdW90ZSB4KSDigJQgZW1pdCBhcyByYXcgdG9rZW4gKilcbiAgICBhZHZhbmNlIHM7XG4gICAgbGV0IGlubmVyID0gcmVhZF9jc3QgcyBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgY3N0X3RvX2FzdCBpbm5lcl0gaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZTsgc3BhbiA9IHsgc3RhcnRfb2Zmc2V0ID0gc3RhcnQ7IGVuZF9vZmZzZXQgPSBlbmRfcG9zIH0gfVxuICB8ICdgJyAtPlxuICAgIGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgXCJxdWFzaXF1b3RlXCI7IGNzdF90b19hc3QgaW5uZXJdIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7IHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCAnLCcgLT5cbiAgICBhZHZhbmNlIHM7XG4gICAgbGV0IHNwbGljZSA9IHMucG9zIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zXSA9ICdAJyBpblxuICAgIGlmIHNwbGljZSB0aGVuIGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgc3ltID0gaWYgc3BsaWNlIHRoZW4gXCJzcGxpY2UtdW5xdW90ZVwiIGVsc2UgXCJ1bnF1b3RlXCIgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgc3ltOyBjc3RfdG9fYXN0IGlubmVyXSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlOyBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnOycgLT5cbiAgICAoKiBEYXR1bSBjb21tZW50OiAjOyBkaXNjYXJkcyBuZXh0IGV4cHJlc3Npb24gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBsZXQgX2Rpc2NhcmRlZCA9IHJlYWRfY3N0IHMgaW5cbiAgICAoKiBSZWFkIHRoZSByZWFsIHZhbHVlIGFmdGVyIHRoZSBkYXR1bSBjb21tZW50IOKAlCBhdHRhY2ggdHJpdmlhIGZyb20gIzsgKilcbiAgICBsZXQgbmV4dCA9IHJlYWRfY3N0IHMgaW5cbiAgICBsZXQgY29tYmluZWRfdHJpdmlhID0gdHJpdmlhIEAgKG1hdGNoIG5leHQgd2l0aFxuICAgICAgfCBDc3RBdG9tIHIgLT4gci5sZWFkaW5nX3RyaXZpYVxuICAgICAgfCBDc3RMaXN0IHIgLT4gci5sZWFkaW5nX3RyaXZpYVxuICAgICAgfCBDc3REaWN0IHIgLT4gci5sZWFkaW5nX3RyaXZpYSkgaW5cbiAgICAobWF0Y2ggbmV4dCB3aXRoXG4gICAgIHwgQ3N0QXRvbSByIC0+IENzdEF0b20geyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjb21iaW5lZF90cml2aWEgfVxuICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY29tYmluZWRfdHJpdmlhIH1cbiAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNvbWJpbmVkX3RyaXZpYSB9KVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ1xcJycgLT5cbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBjc3RfdG9fYXN0IGlubmVyXSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlOyBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnfCcgLT5cbiAgICAoKiBSYXcgc3RyaW5nOiAjfC4uLnwgICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgcmVjIGdvICgpID1cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHJhdyBzdHJpbmdcIik7XG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGlmIGMgPSAnfCcgdGhlbiAoKVxuICAgICAgZWxzZSBiZWdpbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7IGdvICgpIGVuZFxuICAgIGluXG4gICAgZ28gKCk7XG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZSA9IFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1Zik7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCAnXCInIC0+XG4gICAgbGV0IHZhbHVlID0gU3RyaW5nIChyZWFkX3N0cmluZyBzKSBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCBfIC0+XG4gICAgbGV0IHN5bSA9IHJlYWRfc3ltYm9sIHMgaW5cbiAgICBpZiBzeW0gPSBcIlwiIHRoZW4gYmVnaW5cbiAgICAgIGxldCBsaW5lID0gcmVmIDEgYW5kIGNvbCA9IHJlZiAxIGluXG4gICAgICBmb3IgaSA9IDAgdG8gcy5wb3MgLSAxIGRvXG4gICAgICAgIGlmIHMuc3JjLltpXSA9ICdcXG4nIHRoZW4gKGluY3IgbGluZTsgY29sIDo9IDEpIGVsc2UgaW5jciBjb2xcbiAgICAgIGRvbmU7XG4gICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVW5leHBlY3RlZCBjaGFyOiAlYyBhdCBsaW5lICVkIGNvbCAlZCAocG9zICVkKVwiXG4gICAgICAgIHMuc3JjLltzLnBvc10gIWxpbmUgIWNvbCBzLnBvcykpXG4gICAgZW5kO1xuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gbWF0Y2ggc3ltIHdpdGhcbiAgICAgIHwgXCJ0cnVlXCIgLT4gQm9vbCB0cnVlXG4gICAgICB8IFwiZmFsc2VcIiAtPiBCb29sIGZhbHNlXG4gICAgICB8IFwibmlsXCIgLT4gTmlsXG4gICAgICB8IF8gd2hlbiBzeW0uWzBdID0gJzonIC0+IEtleXdvcmQgKFN0cmluZy5zdWIgc3ltIDEgKFN0cmluZy5sZW5ndGggc3ltIC0gMSkpXG4gICAgICB8IF8gLT4gbWF0Y2ggdHJ5X251bWJlciBzeW0gd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gU3ltYm9sIHN5bVxuICAgIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cblxuYW5kIHJlYWRfY3N0X2xpc3QgcyB0cml2aWEgc3RhcnQgb3Blbl9jIGNsb3NlX2MgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgb3BlbiBkZWxpbSAqKVxuICBsZXQgY2hpbGRyZW4gPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgbGV0IGNoaWxkX3RyaXZpYSA9IGNvbGxlY3RfdHJpdmlhIHMgaW5cbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBsaXN0XCIpO1xuICAgIGlmIHMuc3JjLltzLnBvc10gPSBjbG9zZV9jIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICAgIENzdExpc3QgeyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgb3Blbl9kZWxpbSA9IG9wZW5fYztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IExpc3QucmV2ICFjaGlsZHJlbjsgY2xvc2VfZGVsaW0gPSBjbG9zZV9jO1xuICAgICAgICAgICAgICAgIHRyYWlsaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYTtcbiAgICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFB1c2ggY29sbGVjdGVkIHRyaXZpYSBvbnRvIHRoZSBuZXh0IGNoaWxkICopXG4gICAgICBsZXQgY2hpbGRfc3RhcnQgPSBzLnBvcyBpblxuICAgICAgbGV0IGNoaWxkID0gcmVhZF9jc3RfaW5uZXIgcyBpblxuICAgICAgbGV0IGNoaWxkX3dpdGhfdHJpdmlhID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0TGlzdCByIC0+IENzdExpc3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBjaGlsZF9zdGFydDtcbiAgICAgIGNoaWxkcmVuIDo9IGNoaWxkX3dpdGhfdHJpdmlhIDo6ICFjaGlsZHJlbjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluXG4gIGdvICgpXG5cbmFuZCByZWFkX2NzdF9kaWN0IHMgdHJpdmlhIHN0YXJ0ID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIHsgKilcbiAgbGV0IGNoaWxkcmVuID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGxldCBjaGlsZF90cml2aWEgPSBjb2xsZWN0X3RyaXZpYSBzIGluXG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgZGljdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gJ30nIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICAgIENzdERpY3QgeyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgY2hpbGRyZW4gPSBMaXN0LnJldiAhY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhO1xuICAgICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IGNoaWxkID0gcmVhZF9jc3RfaW5uZXIgcyBpblxuICAgICAgbGV0IGNoaWxkX3dpdGhfdHJpdmlhID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0TGlzdCByIC0+IENzdExpc3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgaW5cbiAgICAgIGNoaWxkcmVuIDo9IGNoaWxkX3dpdGhfdHJpdmlhIDo6ICFjaGlsZHJlbjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluXG4gIGdvICgpXG5cbigqKiBJbm5lciByZWFkIOKAlCBubyB0cml2aWEgY29sbGVjdGlvbiAoY2FsbGVyIGhhbmRsZXMgaXQpLiAqKVxuYW5kIHJlYWRfY3N0X2lubmVyIHMgOiBjc3Rfbm9kZSA9XG4gIHJlYWRfY3N0IHNcblxuKCoqIFBhcnNlIHJlc3VsdDogbGlzdCBvZiBDU1Qgbm9kZXMgKyBhbnkgdHJhaWxpbmcgdHJpdmlhIGFmdGVyIHRoZSBsYXN0IG5vZGUuICopXG50eXBlIGNzdF9maWxlID0ge1xuICBub2RlcyA6IGNzdF9ub2RlIGxpc3Q7XG4gIHRyYWlsaW5nX3RyaXZpYSA6IHRyaXZpYSBsaXN0O1xufVxuXG4oKiogUGFyc2UgYSBzdHJpbmcgaW50byBhIGxpc3Qgb2YgQ1NUIG5vZGVzLiAqKVxubGV0IHBhcnNlX2FsbF9jc3Qgc3JjID1cbiAgbGV0IHMgPSBtYWtlX3N0YXRlIHNyYyBpblxuICBsZXQgcmVzdWx0cyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBsZXQgdHJpdmlhID0gY29sbGVjdF90cml2aWEgcyBpblxuICAgIGlmIGF0X2VuZCBzIHRoZW5cbiAgICAgIHsgbm9kZXMgPSBMaXN0LnJldiAhcmVzdWx0czsgdHJhaWxpbmdfdHJpdmlhID0gdHJpdmlhIH1cbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgbm9kZSA9IHJlYWRfY3N0X2lubmVyIHMgaW5cbiAgICAgICgqIFByZXBlbmQgY29sbGVjdGVkIHRyaXZpYSB0byB0aGlzIG5vZGUgKilcbiAgICAgIGxldCBub2RlX3dpdGhfdHJpdmlhID0gbWF0Y2ggbm9kZSB3aXRoXG4gICAgICAgIHwgQ3N0QXRvbSByIC0+IENzdEF0b20geyByIHdpdGggbGVhZGluZ190cml2aWEgPSB0cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3RMaXN0IHIgLT4gQ3N0TGlzdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgICB8IENzdERpY3QgciAtPiBDc3REaWN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICBpblxuICAgICAgcmVzdWx0cyA6PSBub2RlX3dpdGhfdHJpdmlhIDo6ICFyZXN1bHRzO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW5cbiAgZ28gKClcblxuKCoqIFBhcnNlIGEgZmlsZSBpbnRvIGEgbGlzdCBvZiBDU1Qgbm9kZXMuICopXG5sZXQgcGFyc2VfZmlsZV9jc3QgcGF0aCA9XG4gIGxldCBpYyA9IG9wZW5faW4gcGF0aCBpblxuICBsZXQgbiA9IGluX2NoYW5uZWxfbGVuZ3RoIGljIGluXG4gIGxldCBzcmMgPSByZWFsbHlfaW5wdXRfc3RyaW5nIGljIG4gaW5cbiAgY2xvc2VfaW4gaWM7XG4gIHBhcnNlX2FsbF9jc3Qgc3JjXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZGl2IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9tdWwiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX2NhbGwyIiwiZiIsImEwIiwiYTEiLCJjYW1sX2NhbGw0IiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiU3hfdHlwZXMiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfTGlzdCIsIlN4X2NzdCIsIlN0ZGxpYiIsIlN0ZGxpYl9VY2hhciIsIm1ha2Vfc3RhdGUiLCJzcmMiLCJwZWVrIiwicyIsImFkdmFuY2UiLCJhdF9lbmQiLCJza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIiwibWF0Y2giLCJpc19pZGVudF9zdGFydCIsInBhcmFtIiwiaXNfaWRlbnRfY2hhciIsImMiLCJyZWFkX3N0cmluZyIsImJ1ZiIsImVzYyIsImhleCIsImNvZGUiLCJ1YnVmIiwicmVhZF9zeW1ib2wiLCJzdGFydCIsImdjZCIsImEiLCJiIiwibWFrZV9yYXQiLCJuIiwiZCIsInNpZ24iLCJnIiwicm4iLCJyZCIsImNzdCIsInRyeV9udW1iZXIiLCJzdHIiLCJoYXNfZGVjIiwiaGFzX2V4cCIsImRlbl9zIiwibnVtX3MiLCJleG4iLCJjc3RfcG9zIiwiY3N0X2F0X2xpbmUiLCJjc3RfY29sIiwiY3N0X1VuZXhwZWN0ZWRfY2hhciIsImNzdF9VbmV4cGVjdGVkX2NoYXJfY19hdF9saW5lXyIsImNzdF9VbnRlcm1pbmF0ZWRfcmF3X3N0cmluZyIsImNzdF9mYWxzZSIsImNzdF9uaWwiLCJjc3RfcXVhc2lxdW90ZSIsImNzdF9xdW90ZSIsImNzdF9zcGxpY2VfdW5xdW90ZSIsImNzdF90cnVlIiwiY3N0X3VucXVvdGUiLCJyZWFkX3ZhbHVlIiwiY2hhcl9zdGFydCIsIm5hbWUiLCJzd2l0Y2gkIiwiY3AiLCJ0b2tlbiIsImNvbCIsImxpbmUiLCJpIiwiY3N0X1VudGVybWluYXRlZF9saXN0IiwicmVhZF9saXN0IiwiY2xvc2VfY2hhciIsIml0ZW1zIiwiY3N0X1VudGVybWluYXRlZF9kaWN0IiwicmVhZF9kaWN0Iiwia2V5Iiwia2V5X3N0ciIsInYiLCJwYXJzZV9hbGwiLCJyZXN1bHRzIiwicGFyc2VfZmlsZSIsInBhdGgiLCJpYyIsImNvbGxlY3RfdHJpdmlhIiwidGV4dCIsInJlYWRfY3N0IiwidHJpdmlhIiwiaW5uZXIiLCJlbmRfcG9zIiwidmFsdWUiLCJuZXh0IiwiY29tYmluZWRfdHJpdmlhIiwic3BsaWNlIiwic3ltIiwicmVhZF9jc3RfbGlzdCIsIm9wZW5fYyIsImNsb3NlX2MiLCJjaGlsZHJlbiIsImNoaWxkX3RyaXZpYSIsImNoaWxkIiwiY2hpbGRfd2l0aF90cml2aWEiLCJyZWFkX2NzdF9kaWN0IiwicmVhZF9jc3RfaW5uZXIiLCJwYXJzZV9hbGxfY3N0Iiwibm9kZSIsIm5vZGVfd2l0aF90cml2aWEiLCJwYXJzZV9maWxlX2NzdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsOEJB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QUFBN0Y7QUFBQUEsUUFBQUUsSUFVRixpQkFBQW1FLFVBR087QUFBQTtBQUFBLFNBQUFPLFNBQUE7QUFBQSxLQUNWLGNBQ1MsdURBQWlCO0FBQUEsU0FBQWtCLE9BRWhCO0FBQUEsS0FFWDtBQUFBO0FBQUE7QUFBQSxhQUNtRDtBQUFBO0FBQUE7QUFBQSxTQUFBQztBQUFBQSxXQUF5QixJQUF6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQUFBO0FBQUFBLFdBQXlCLElBQXpCO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFDQTtBQUFBO0FBQUE7QUFBQSxTQUFBQTtBQUFBQSxXQUF5QixJQUF6QjtBQUFBO0FBQUEsS0FHbkQ7QUFBQTtBQUFBLEdBR0M7QUFBQSxZQUFBQyxlQUFBekI7QUFBQUE7QUFBQUEsS0FBQUMsS0FJSTtBQUFBLEtBQUFqRCxJQUNEO0FBQUEsS0FBQXZCLE1BQ0U7QUFBQSxJQUNWO0FBQUEsSUFBVyx5QkFDTTtBQUFBO0FBQUEsR0Q3Zm5CIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDI1ODEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JzYS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBSU0FTU0EtUEtDUzEtdjFfNSB2ZXJpZmljYXRpb24gd2l0aCBTSEEtMjU2IOKAlCBwdXJlIE9DYW1sLFxuICAgIFdBU00tc2FmZS4gU2VsZi1jb250YWluZWQgbWluaW1hbCBiaWdudW0gKG1vZGV4cCBvbmx5KSwgYSB0aW55XG4gICAgREVSIHJlYWRlciBmb3IgU3ViamVjdFB1YmxpY0tleUluZm8sIGFuZCB0aGUgZml4ZWQgU0hBLTI1NlxuICAgIERpZ2VzdEluZm8gcHJlZml4LiBWZXJpZnkgb25seSBvbiBwdWJsaWMgZGF0YSDigJQgY29uc3RhbnQgdGltZVxuICAgIG5vdCByZXF1aXJlZC4gUmVmZXJlbmNlOiBSRkMgODAxNyDCpzguMi4yLCDCpzkuMi4gTm8gZGVwcy4gKilcblxuKCogLS0tLSBNaW5pbWFsIHVuc2lnbmVkIGJpZ251bTogaW50IGFycmF5LCBsaXR0bGUtZW5kaWFuLCBiYXNlIDJeMjYgLS0tLSAqKVxuXG5sZXQgYml0cyA9IDI2XG5sZXQgYmFzZSA9IDEgbHNsIGJpdHNcbmxldCBtYXNrID0gYmFzZSAtIDFcblxudHlwZSBibiA9IGludCBhcnJheVxuXG5sZXQgbm9ybSBhID1cbiAgbGV0IG4gPSByZWYgKEFycmF5Lmxlbmd0aCBhKSBpblxuICB3aGlsZSAhbiA+IDEgJiYgYS4oIW4gLSAxKSA9IDAgZG8gZGVjciBuIGRvbmU7XG4gIGlmICFuID0gQXJyYXkubGVuZ3RoIGEgdGhlbiBhIGVsc2UgQXJyYXkuc3ViIGEgMCAhblxuXG5sZXQgYnplcm8gOiBibiA9IFt8IDAgfF1cbmxldCBpc196ZXJvIGEgPSBBcnJheS5sZW5ndGggYSA9IDEgJiYgYS4oMCkgPSAwXG5cbmxldCBjbXAgYSBiID1cbiAgbGV0IGEgPSBub3JtIGEgYW5kIGIgPSBub3JtIGIgaW5cbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlbiBjb21wYXJlIGxhIGxiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHJlZiAwIGFuZCBpID0gcmVmIChsYSAtIDEpIGluXG4gICAgd2hpbGUgIXIgPSAwICYmICFpID49IDAgZG9cbiAgICAgIGlmIGEuKCFpKSA8PiBiLighaSkgdGhlbiByIDo9IGNvbXBhcmUgYS4oIWkpIGIuKCFpKTtcbiAgICAgIGRlY3IgaVxuICAgIGRvbmU7ICFyXG4gIGVuZFxuXG5sZXQgYWRkIGEgYiA9XG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGxldCBuID0gKG1heCBsYSBsYikgKyAxIGluXG4gIGxldCByID0gQXJyYXkubWFrZSBuIDAgYW5kIGNhcnJ5ID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgbGV0IHMgPSAhY2FycnkgKyAoaWYgaSA8IGxhIHRoZW4gYS4oaSkgZWxzZSAwKVxuICAgICAgICAgICAgKyAoaWYgaSA8IGxiIHRoZW4gYi4oaSkgZWxzZSAwKSBpblxuICAgIHIuKGkpIDwtIHMgbGFuZCBtYXNrOyBjYXJyeSA6PSBzIGxzciBiaXRzXG4gIGRvbmU7XG4gIG5vcm0gclxuXG5sZXQgc3ViIGEgYiA9ICAgICAgICAgICAgICAgICAgICAgICAoKiByZXF1aXJlcyBhID49IGIgKilcbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgbGV0IHIgPSBBcnJheS5tYWtlIGxhIDAgYW5kIGJvcnJvdyA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICBsZXQgcyA9IGEuKGkpIC0gIWJvcnJvdyAtIChpZiBpIDwgbGIgdGhlbiBiLihpKSBlbHNlIDApIGluXG4gICAgaWYgcyA8IDAgdGhlbiAoci4oaSkgPC0gcyArIGJhc2U7IGJvcnJvdyA6PSAxKVxuICAgIGVsc2UgKHIuKGkpIDwtIHM7IGJvcnJvdyA6PSAwKVxuICBkb25lO1xuICBub3JtIHJcblxubGV0IG11bCBhIGIgPVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBhbmQgbGIgPSBBcnJheS5sZW5ndGggYiBpblxuICBsZXQgciA9IEFycmF5Lm1ha2UgKGxhICsgbGIpIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxhIC0gMSBkb1xuICAgIGxldCBjYXJyeSA9IHJlZiAwIGluXG4gICAgZm9yIGogPSAwIHRvIGxiIC0gMSBkb1xuICAgICAgbGV0IHMgPSByLihpICsgaikgKyBhLihpKSAqIGIuKGopICsgIWNhcnJ5IGluXG4gICAgICByLihpICsgaikgPC0gcyBsYW5kIG1hc2s7IGNhcnJ5IDo9IHMgbHNyIGJpdHNcbiAgICBkb25lO1xuICAgIHIuKGkgKyBsYikgPC0gci4oaSArIGxiKSArICFjYXJyeVxuICBkb25lO1xuICBub3JtIHJcblxubGV0IG51bWJpdHMgYSA9XG4gIGxldCBhID0gbm9ybSBhIGluXG4gIGxldCBoaSA9IEFycmF5Lmxlbmd0aCBhIC0gMSBpblxuICBpZiBoaSA9IDAgJiYgYS4oMCkgPSAwIHRoZW4gMFxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGIgPSByZWYgMCBhbmQgdiA9IHJlZiBhLihoaSkgaW5cbiAgICB3aGlsZSAhdiA+IDAgZG8gaW5jciBiOyB2IDo9ICF2IGxzciAxIGRvbmU7XG4gICAgaGkgKiBiaXRzICsgIWJcbiAgZW5kXG5cbmxldCBiaXQgYSBpID1cbiAgbGV0IGxpbWIgPSBpIC8gYml0cyBhbmQgb2ZmID0gaSBtb2QgYml0cyBpblxuICBpZiBsaW1iID49IEFycmF5Lmxlbmd0aCBhIHRoZW4gMCBlbHNlIChhLihsaW1iKSBsc3Igb2ZmKSBsYW5kIDFcblxubGV0IGJuX21vZCBhIG0gPSAgICAgICAgICAgICAgICAgICAgKCogYmluYXJ5IGxvbmcgZGl2aXNpb24sIG0gPiAwICopXG4gIGlmIGNtcCBhIG0gPCAwIHRoZW4gbm9ybSBhXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHJlZiBiemVybyBpblxuICAgIGZvciBpID0gbnVtYml0cyBhIC0gMSBkb3dudG8gMCBkb1xuICAgICAgciA6PSBhZGQgIXIgIXI7XG4gICAgICBpZiBiaXQgYSBpID0gMSB0aGVuIHIgOj0gYWRkICFyIFt8IDEgfF07XG4gICAgICBpZiBjbXAgIXIgbSA+PSAwIHRoZW4gciA6PSBzdWIgIXIgbVxuICAgIGRvbmU7XG4gICAgIXJcbiAgZW5kXG5cbmxldCBwb3dtb2QgYjAgZSBtID1cbiAgbGV0IHJlc3VsdCA9IHJlZiBbfCAxIHxdIGFuZCBiID0gcmVmIChibl9tb2QgYjAgbSkgaW5cbiAgZm9yIGkgPSAwIHRvIG51bWJpdHMgZSAtIDEgZG9cbiAgICBpZiBiaXQgZSBpID0gMSB0aGVuIHJlc3VsdCA6PSBibl9tb2QgKG11bCAhcmVzdWx0ICFiKSBtO1xuICAgIGIgOj0gYm5fbW9kIChtdWwgIWIgIWIpIG1cbiAgZG9uZTtcbiAgIXJlc3VsdFxuXG5sZXQgb2ZfYnl0ZXNfYmUgKHMgOiBzdHJpbmcpIDogYm4gPVxuICBsZXQgYWNjID0gcmVmIGJ6ZXJvIGluXG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgYWNjIDo9IGFkZCAobXVsICFhY2MgW3wgMjU2IHxdKSBbfCBDaGFyLmNvZGUgcy5baV0gfF1cbiAgZG9uZTtcbiAgIWFjY1xuXG5sZXQgZGl2X3NtYWxsIGEgZCA9XG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCBxID0gQXJyYXkubWFrZSBsYSAwIGFuZCByZW0gPSByZWYgMCBpblxuICBmb3IgaSA9IGxhIC0gMSBkb3dudG8gMCBkb1xuICAgIGxldCBjdXIgPSAoIXJlbSBsc2wgYml0cykgbG9yIGEuKGkpIGluXG4gICAgcS4oaSkgPC0gY3VyIC8gZDsgcmVtIDo9IGN1ciBtb2QgZFxuICBkb25lO1xuICBub3JtIHFcblxubGV0IHRvX2J5dGVzX2JlIChhIDogYm4pIChuIDogaW50KSA6IHN0cmluZyA9XG4gIGxldCBiID0gQnl0ZXMubWFrZSBuICdcXDAwMCcgaW5cbiAgbGV0IGN1ciA9IHJlZiAobm9ybSBhKSBpblxuICBmb3IgaSA9IG4gLSAxIGRvd250byAwIGRvXG4gICAgbGV0IHEgPSBkaXZfc21hbGwgIWN1ciAyNTYgaW5cbiAgICBsZXQgciA9XG4gICAgICBsZXQgZCA9IHN1YiAhY3VyIChtdWwgcSBbfCAyNTYgfF0pIGluXG4gICAgICBpZiBpc196ZXJvIGQgdGhlbiAwIGVsc2UgZC4oMClcbiAgICBpblxuICAgIEJ5dGVzLnNldCBiIGkgKENoYXIuY2hyIHIpO1xuICAgIGN1ciA6PSBxXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG4oKiAtLS0tIE1pbmltYWwgREVSIHJlYWRlciAoZm9yIFN1YmplY3RQdWJsaWNLZXlJbmZvKSAtLS0tICopXG5cbmV4Y2VwdGlvbiBEZXIgb2Ygc3RyaW5nXG5cbigqIFJldHVybnMgKHRhZywgY29udGVudF9zdGFydCwgY29udGVudF9sZW4sIG5leHQpLiAqKVxubGV0IGRlcl90bHYgcyBwb3MgPVxuICBpZiBwb3MgKyAyID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gcmFpc2UgKERlciBcInNob3J0XCIpO1xuICBsZXQgdGFnID0gQ2hhci5jb2RlIHMuW3Bvc10gaW5cbiAgbGV0IGwwID0gQ2hhci5jb2RlIHMuW3BvcyArIDFdIGluXG4gIGxldCBsZW4sIGhkciA9XG4gICAgaWYgbDAgPCAweDgwIHRoZW4gbDAsIDJcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgbmIgPSBsMCBsYW5kIDB4N2YgaW5cbiAgICAgIGlmIHBvcyArIDIgKyBuYiA+IFN0cmluZy5sZW5ndGggcyB0aGVuIHJhaXNlIChEZXIgXCJzaG9ydCBsZW5cIik7XG4gICAgICBsZXQgdiA9IHJlZiAwIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbmIgLSAxIGRvXG4gICAgICAgIHYgOj0gKCF2IGxzbCA4KSBsb3IgQ2hhci5jb2RlIHMuW3BvcyArIDIgKyBpXVxuICAgICAgZG9uZTtcbiAgICAgICF2LCAyICsgbmJcbiAgICBlbmRcbiAgaW5cbiAgKHRhZywgcG9zICsgaGRyLCBsZW4sIHBvcyArIGhkciArIGxlbilcblxuKCogU1BLSSBERVIgLT4gKG4sIGUpIGFzIGJpZ251bXMuICopXG5sZXQgcGFyc2Vfc3BraSAoZGVyIDogc3RyaW5nKSA6IGJuICogYm4gPVxuICBsZXQgdGFnLCBjLCBfbCwgXyA9IGRlcl90bHYgZGVyIDAgaW5cbiAgaWYgdGFnIDw+IDB4MzAgdGhlbiByYWlzZSAoRGVyIFwic3BraTogb3V0ZXIgbm90IFNFUVVFTkNFXCIpO1xuICAoKiBBbGdvcml0aG1JZGVudGlmaWVyIFNFUVVFTkNFIOKAlCBza2lwLiAqKVxuICBsZXQgXywgXywgXywgYWZ0ZXJfYWxnID0gZGVyX3RsdiBkZXIgYyBpblxuICAoKiBCSVQgU1RSSU5HLiAqKVxuICBsZXQgYnQsIGJjLCBibCwgXyA9IGRlcl90bHYgZGVyIGFmdGVyX2FsZyBpblxuICBpZiBidCA8PiAweDAzIHRoZW4gcmFpc2UgKERlciBcInNwa2k6IGV4cGVjdGVkIEJJVCBTVFJJTkdcIik7XG4gICgqIEZpcnN0IGNvbnRlbnQgYnl0ZSA9IHVudXNlZCBiaXRzIChtdXN0IGJlIDApLiAqKVxuICBsZXQgcnBrX3N0YXJ0ID0gYmMgKyAxIGluXG4gIGlnbm9yZSBibDtcbiAgbGV0IHN0LCBzYywgXywgXyA9IGRlcl90bHYgZGVyIHJwa19zdGFydCBpblxuICBpZiBzdCA8PiAweDMwIHRoZW4gcmFpc2UgKERlciBcInNwa2k6IFJTQVB1YmxpY0tleSBub3QgU0VRVUVOQ0VcIik7XG4gIGxldCBudCwgbmMsIG5sLCBhZnRlcl9uID0gZGVyX3RsdiBkZXIgc2MgaW5cbiAgaWYgbnQgPD4gMHgwMiB0aGVuIHJhaXNlIChEZXIgXCJzcGtpOiBtb2R1bHVzIG5vdCBJTlRFR0VSXCIpO1xuICBsZXQgZXQsIGVjLCBlbCwgXyA9IGRlcl90bHYgZGVyIGFmdGVyX24gaW5cbiAgaWYgZXQgPD4gMHgwMiB0aGVuIHJhaXNlIChEZXIgXCJzcGtpOiBleHBvbmVudCBub3QgSU5URUdFUlwiKTtcbiAgbGV0IG4gPSBvZl9ieXRlc19iZSAoU3RyaW5nLnN1YiBkZXIgbmMgbmwpIGluXG4gIGxldCBlID0gb2ZfYnl0ZXNfYmUgKFN0cmluZy5zdWIgZGVyIGVjIGVsKSBpblxuICAobiwgZSlcblxuKCogU0hBLTI1NiBEaWdlc3RJbmZvIERFUiBwcmVmaXggKFJGQyA4MDE3IMKnOS4yIG5vdGUgMSkuICopXG5sZXQgc2hhMjU2X2RpZ2VzdGluZm9fcHJlZml4ID1cbiAgXCJcXHgzMFxceDMxXFx4MzBcXHgwZFxceDA2XFx4MDlcXHg2MFxceDg2XFx4NDhcXHgwMVxceDY1XFx4MDNcXHgwNFxceDAyXFx4MDFcXHgwNVxceDAwXFx4MDRcXHgyMFwiXG5cbmxldCB1bmhleCBoID1cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIGggLyAyIGluXG4gIGxldCBiID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgQnl0ZXMuc2V0IGIgaSAoQ2hhci5jaHIgKGludF9vZl9zdHJpbmcgKFwiMHhcIiBeIFN0cmluZy5zdWIgaCAoMiAqIGkpIDIpKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiXG5cbigqIFJTQVNTQS1QS0NTMS12MV81IHZlcmlmeSB3aXRoIFNIQS0yNTYuIFRvdGFsOiBhbnkgbWFsZm9ybWVkXG4gICBpbnB1dCB5aWVsZHMgZmFsc2UgKGNhbGxlciB3cmFwcywgYnV0IGJlIGRlZmVuc2l2ZSBoZXJlIHRvbykuICopXG5sZXQgdmVyaWZ5IH5zcGtpIH5tc2cgfnNpZ18gOiBib29sID1cbiAgdHJ5XG4gICAgbGV0IG4sIGUgPSBwYXJzZV9zcGtpIHNwa2kgaW5cbiAgICBsZXQgayA9IChudW1iaXRzIG4gKyA3KSAvIDggaW5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHNpZ18gPD4gayB0aGVuIGZhbHNlXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHMgPSBvZl9ieXRlc19iZSBzaWdfIGluXG4gICAgICBpZiBjbXAgcyBuID49IDAgdGhlbiBmYWxzZVxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgbSA9IHBvd21vZCBzIGUgbiBpblxuICAgICAgICBsZXQgZW0gPSB0b19ieXRlc19iZSBtIGsgaW5cbiAgICAgICAgKCogRU0gPSAweDAwIDAxIEZGLi5GRiAwMCB8fCBEaWdlc3RJbmZvIHx8IEggKilcbiAgICAgICAgbGV0IGggPSB1bmhleCAoU3hfc2hhMi5zaGEyNTZfaGV4IG1zZykgaW5cbiAgICAgICAgbGV0IHQgPSBzaGEyNTZfZGlnZXN0aW5mb19wcmVmaXggXiBoIGluXG4gICAgICAgIGxldCB0bGVuID0gU3RyaW5nLmxlbmd0aCB0IGluXG4gICAgICAgIGlmIGsgPCB0bGVuICsgMTEgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgbGV0IG9rID0gcmVmIChlbS5bMF0gPSAnXFx4MDAnICYmIGVtLlsxXSA9ICdcXHgwMScpIGluXG4gICAgICAgICAgbGV0IHBzX2VuZCA9IGsgLSB0bGVuIC0gMSBpblxuICAgICAgICAgIGZvciBpID0gMiB0byBwc19lbmQgLSAxIGRvXG4gICAgICAgICAgICBpZiBlbS5baV0gPD4gJ1xceGZmJyB0aGVuIG9rIDo9IGZhbHNlXG4gICAgICAgICAgZG9uZTtcbiAgICAgICAgICBpZiBlbS5bcHNfZW5kXSA8PiAnXFx4MDAnIHRoZW4gb2sgOj0gZmFsc2U7XG4gICAgICAgICAgaWYgU3RyaW5nLnN1YiBlbSAocHNfZW5kICsgMSkgdGxlbiA8PiB0IHRoZW4gb2sgOj0gZmFsc2U7XG4gICAgICAgICAgIW9rXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIHdpdGggXyAtPiBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJnbG9iYWxfZGF0YSIsIlN4X3NoYTIiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfQXJyYXkiLCJub3JtIiwiYSIsIm4iLCJpc196ZXJvIiwiY21wIiwiYiIsImxhIiwibGIiLCJpIiwiciIsImFkZCIsImNhcnJ5IiwicyIsInN1YiIsImJvcnJvdyIsIm11bCIsImoiLCJudW1iaXRzIiwiaGkiLCJ2IiwiYml0IiwibGltYiIsIm9mZiIsImJ6ZXJvIiwiYm5fbW9kIiwibSIsInBvd21vZCIsImIwIiwiZSIsInJlc3VsdCIsIm9mX2J5dGVzX2JlIiwiYWNjIiwiZGl2X3NtYWxsIiwiZCIsInEiLCJyZW0iLCJjdXIiLCJ0b19ieXRlc19iZSIsIkRlciIsImRlcl90bHYiLCJwb3MiLCJ0YWciLCJsMCIsIm5iIiwiaGRyIiwibGVuIiwicGFyc2Vfc3BraSIsImRlciIsIm1hdGNoIiwiYyIsImFmdGVyX2FsZyIsImJjIiwiYnQiLCJycGtfc3RhcnQiLCJzYyIsInN0IiwiYWZ0ZXJfbiIsIm5sIiwibmMiLCJudCIsImVsIiwiZWMiLCJldCIsInVuaGV4IiwiaCIsInNoYTI1Nl9kaWdlc3RpbmZvX3ByZWZpeCIsInZlcmlmeSIsInNwa2kiLCJtc2ciLCJzaWciLCJrIiwiZW0iLCJ0IiwidGxlbiIsInBzX2VuZCIsIm9rIiwiZXhuIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxLQUFBQztBQUFBQSxRQUFBQyxJQ2dCRTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQWdCO0FBQUEsV0FBQUEsTUFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQ2xDLGdDQUFtQyxtQ0FBZ0I7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUY7QUFBQUE7QUFBQUEsS0FBQSxJQUdyQztBQUFBLG1CQUFzQjtBQUFBLElBQXRCO0FBQUEsR0FBK0I7QUFBQSxZQUFBRyxJQUFBSCxHQUFBSTtBQUFBQTtBQUFBQSxLQUFBSixNQUdyQztBQUFBLEtBQUFJLE1BQWU7QUFBQSxLQUFBQyxLQUN2QjtBQUFBLEtBQUFDLEtB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RDtBQUFBLFdBQXZCLDJCQUFlO0FBQUEsTUFBdkMscUJBQWM7QUFBQSxjQUEwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFMUUscUNBQXdCO0FBQUE7QUFBQTtBQUFBLElBQUF5RDtBQUFBQSxNRDNMMUI7QUFBQSxZQUFBQyxPQUFBQyxNQUFBQyxLQUFBQztBQUFBQSxJQ2dNRTtBQUFBO0FBQUEsTUFBQXJCLFFBQ2E7QUFBQSxNQUFBcEIsSUFBZTtBQUFBLE1BQUExQixJQUFBO0FBQUEsTUFBQW9FLElBQ2pCO0FBQUEsS0FDVDtBQUFBLGNBQWdDO0FBQUE7QUFBQSxVQUFBMUQsSUFFdEI7QUFBQSxNQUNMO0FBQUEsZUFBa0I7QUFBQTtBQUFBO0FBQUEsUUFBQWEsSUFFWDtBQUFBLFFBQUE4QyxLQUNDO0FBQUEsUUFBQVAsSUFFRCxNQUFNO0FBQUEsUUFBQVEsSUFDTjtBQUFBLFFBQUFDLE9BQ1I7QUFBQSxPQUNBO0FBQUEsZ0JBQXNCO0FBQUE7QUFBQTtBQUFBLGFBRU47QUFBQSxhQUFNLFVBQWE7QUFBQSxTQUFBQyxTQUNqQztBQUFBLGFBQ0E7QUFBQTtBQUFBLGFBQUFDLE9BQUE7QUFBQTtBQUFBLGFBQUFBLEtBQUEsR0FBQW5FLElBQUE7QUFBQTtBQUFBLGNBQUFtRSxPQUNLLDZDQUFNO0FBQUEsMEJBQUFBLE9BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBQUEsT0FFUjtBQUFBO0FBQUEsV0FDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBQUMsS0FLRDtBQUFBLEdBQUs7QUFBQSxHRDNOakIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0MzAyMSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfc2hhMy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTSEEtMyAoU0hBMy0yNTYpIOKAlCBwdXJlIE9DYW1sLCBXQVNNLXNhZmUuXG5cbiAgICBLZWNjYWstZlsxNjAwXSBwZXJtdXRhdGlvbiArIFNIQS0zIG11bHRpLXJhdGUgcGFkZGluZyAoZG9tYWluIGJ5dGVcbiAgICAweDA2LCBOT1QgdGhlIGxlZ2FjeSBLZWNjYWsgMHgwMSkuIFJlZmVyZW5jZTogRklQUyAyMDIuIE5vIGRlcHMuICopXG5cbmxldCAoIF46ICkgPSBJbnQ2NC5sb2d4b3JcbmxldCAoICY6ICkgPSBJbnQ2NC5sb2dhbmRcbmxldCBsbm90NjQgPSBJbnQ2NC5sb2dub3RcblxubGV0IHJvdGw2NCB4IG4gPVxuICBpZiBuID0gMCB0aGVuIHhcbiAgZWxzZVxuICAgIEludDY0LmxvZ29yIChJbnQ2NC5zaGlmdF9sZWZ0IHggbikgKEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgeCAoNjQgLSBuKSlcblxuKCogRklQUyAyMDIgVGFibGUgMiDigJQgz4Egcm90YXRpb24gb2Zmc2V0cywgaW5kZXhlZCBsYW5lID0geCArIDUqeS4gKilcbmxldCByaG8gPSBbfFxuICAgMDsgIDE7IDYyOyAyODsgMjc7XG4gIDM2OyA0NDsgIDY7IDU1OyAyMDtcbiAgIDM7IDEwOyA0MzsgMjU7IDM5O1xuICA0MTsgNDU7IDE1OyAyMTsgIDg7XG4gIDE4OyAgMjsgNjE7IDU2OyAxNCB8XVxuXG4oKiBGSVBTIDIwMiDCpzMuMi41IOKAlCByb3VuZCBjb25zdGFudHMgUkNbMC4uMjNdIGZvciDOuS4gKilcbmxldCByYyA9IFt8XG4gIDB4MDAwMDAwMDAwMDAwMDAwMUw7IDB4MDAwMDAwMDAwMDAwODA4Mkw7IDB4ODAwMDAwMDAwMDAwODA4YUw7XG4gIDB4ODAwMDAwMDA4MDAwODAwMEw7IDB4MDAwMDAwMDAwMDAwODA4Ykw7IDB4MDAwMDAwMDA4MDAwMDAwMUw7XG4gIDB4ODAwMDAwMDA4MDAwODA4MUw7IDB4ODAwMDAwMDAwMDAwODAwOUw7IDB4MDAwMDAwMDAwMDAwMDA4YUw7XG4gIDB4MDAwMDAwMDAwMDAwMDA4OEw7IDB4MDAwMDAwMDA4MDAwODAwOUw7IDB4MDAwMDAwMDA4MDAwMDAwYUw7XG4gIDB4MDAwMDAwMDA4MDAwODA4Ykw7IDB4ODAwMDAwMDAwMDAwMDA4Ykw7IDB4ODAwMDAwMDAwMDAwODA4OUw7XG4gIDB4ODAwMDAwMDAwMDAwODAwM0w7IDB4ODAwMDAwMDAwMDAwODAwMkw7IDB4ODAwMDAwMDAwMDAwMDA4MEw7XG4gIDB4MDAwMDAwMDAwMDAwODAwYUw7IDB4ODAwMDAwMDA4MDAwMDAwYUw7IDB4ODAwMDAwMDA4MDAwODA4MUw7XG4gIDB4ODAwMDAwMDAwMDAwODA4MEw7IDB4MDAwMDAwMDA4MDAwMDAwMUw7IDB4ODAwMDAwMDA4MDAwODAwOEwgfF1cblxubGV0IGtlY2Nha19mIChhIDogaW50NjQgYXJyYXkpIDogdW5pdCA9XG4gIGxldCBjID0gQXJyYXkubWFrZSA1IDBMIGFuZCBkID0gQXJyYXkubWFrZSA1IDBMIGluXG4gIGxldCBiID0gQXJyYXkubWFrZSAyNSAwTCBpblxuICBmb3Igcm91bmQgPSAwIHRvIDIzIGRvXG4gICAgKCogzrggKilcbiAgICBmb3IgeCA9IDAgdG8gNCBkb1xuICAgICAgYy4oeCkgPC0gYS4oeCkgXjogYS4oeCArIDUpIF46IGEuKHggKyAxMClcbiAgICAgICAgICAgICAgIF46IGEuKHggKyAxNSkgXjogYS4oeCArIDIwKVxuICAgIGRvbmU7XG4gICAgZm9yIHggPSAwIHRvIDQgZG9cbiAgICAgIGQuKHgpIDwtIGMuKCh4ICsgNCkgbW9kIDUpIF46IChyb3RsNjQgYy4oKHggKyAxKSBtb2QgNSkgMSlcbiAgICBkb25lO1xuICAgIGZvciB4ID0gMCB0byA0IGRvXG4gICAgICBmb3IgeSA9IDAgdG8gNCBkb1xuICAgICAgICBhLih4ICsgNSAqIHkpIDwtIGEuKHggKyA1ICogeSkgXjogZC4oeClcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgICgqIM+BIGFuZCDPgDogQlt5LCAyeCszeV0gPSByb3RsKEFbeCx5XSwgcmhvW3gseV0pICopXG4gICAgZm9yIHggPSAwIHRvIDQgZG9cbiAgICAgIGZvciB5ID0gMCB0byA0IGRvXG4gICAgICAgIGxldCBueCA9IHkgYW5kIG55ID0gKDIgKiB4ICsgMyAqIHkpIG1vZCA1IGluXG4gICAgICAgIGIuKG54ICsgNSAqIG55KSA8LSByb3RsNjQgYS4oeCArIDUgKiB5KSByaG8uKHggKyA1ICogeSlcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgICgqIM+HICopXG4gICAgZm9yIHkgPSAwIHRvIDQgZG9cbiAgICAgIGZvciB4ID0gMCB0byA0IGRvXG4gICAgICAgIGEuKHggKyA1ICogeSkgPC1cbiAgICAgICAgICBiLih4ICsgNSAqIHkpXG4gICAgICAgICAgXjogKChsbm90NjQgYi4oKHggKyAxKSBtb2QgNSArIDUgKiB5KSlcbiAgICAgICAgICAgICAgJjogYi4oKHggKyAyKSBtb2QgNSArIDUgKiB5KSlcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgICgqIM65ICopXG4gICAgYS4oMCkgPC0gYS4oMCkgXjogcmMuKHJvdW5kKVxuICBkb25lXG5cbmxldCBzaGEzXzI1Nl9oZXggKG1zZyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgcmF0ZSA9IDEzNiAoKiBieXRlczogKDE2MDAgLSAyKjI1NikgLyA4ICopIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIG1zZyBpblxuICAoKiBwYWQxMCoxIHdpdGggU0hBLTMgZG9tYWluIGJ5dGUgMHgwNjsgbGFzdCBieXRlIE9SZWQgd2l0aCAweDgwLiAqKVxuICBsZXQgcSA9IHJhdGUgLSAobGVuIG1vZCByYXRlKSBpblxuICBsZXQgcGFkZGVkID0gQnl0ZXMubWFrZSAobGVuICsgcSkgJ1xcMDAwJyBpblxuICBCeXRlcy5ibGl0X3N0cmluZyBtc2cgMCBwYWRkZWQgMCBsZW47XG4gIGlmIHEgPSAxIHRoZW5cbiAgICBCeXRlcy5zZXQgcGFkZGVkIGxlbiAnXFx4ODYnXG4gIGVsc2UgYmVnaW5cbiAgICBCeXRlcy5zZXQgcGFkZGVkIGxlbiAnXFx4MDYnO1xuICAgIEJ5dGVzLnNldCBwYWRkZWQgKGxlbiArIHEgLSAxKSAnXFx4ODAnXG4gIGVuZDtcbiAgbGV0IHRvdGFsID0gQnl0ZXMubGVuZ3RoIHBhZGRlZCBpblxuICBsZXQgYSA9IEFycmF5Lm1ha2UgMjUgMEwgaW5cbiAgbGV0IG5ibG9ja3MgPSB0b3RhbCAvIHJhdGUgaW5cbiAgZm9yIGJsayA9IDAgdG8gbmJsb2NrcyAtIDEgZG9cbiAgICBsZXQgYmFzZSA9IGJsayAqIHJhdGUgaW5cbiAgICAoKiBBYnNvcmI6IFhPUiByYXRlIGJ5dGVzIGludG8gdGhlIHN0YXRlLCBsaXR0bGUtZW5kaWFuIGxhbmVzLiAqKVxuICAgIGZvciBqID0gMCB0byByYXRlIC0gMSBkb1xuICAgICAgbGV0IGxhbmUgPSBqIC8gOCBhbmQgc2ggPSAoaiBtb2QgOCkgKiA4IGluXG4gICAgICBsZXQgYnl0ZSA9IEludDY0Lm9mX2ludCAoQ2hhci5jb2RlIChCeXRlcy5nZXQgcGFkZGVkIChiYXNlICsgaikpKSBpblxuICAgICAgYS4obGFuZSkgPC0gYS4obGFuZSkgXjogKEludDY0LnNoaWZ0X2xlZnQgYnl0ZSBzaClcbiAgICBkb25lO1xuICAgIGtlY2Nha19mIGFcbiAgZG9uZTtcbiAgKCogU3F1ZWV6ZSAzMiBieXRlcyAoZml0cyBpbiB0aGUgZmlyc3QgNCBsYW5lczsgcmF0ZSA+IDMyKS4gKilcbiAgbGV0IG91dCA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgZm9yIGogPSAwIHRvIDMxIGRvXG4gICAgbGV0IGxhbmUgPSBqIC8gOCBhbmQgc2ggPSAoaiBtb2QgOCkgKiA4IGluXG4gICAgbGV0IGJ5dGUgPVxuICAgICAgSW50NjQudG9faW50XG4gICAgICAgIChJbnQ2NC5sb2dhbmQgKEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYS4obGFuZSkgc2gpIDB4RkZMKVxuICAgIGluXG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgb3V0IChQcmludGYuc3ByaW50ZiBcIiUwMnhcIiBieXRlKVxuICBkb25lO1xuICBCdWZmZXIuY29udGVudHMgb3V0XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfaW50NjRfYW5kIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmUiLCJjYW1sX2ludDY0X3hvciIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9vYmpfZHVwIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfSW50NjQiLCJsbm90NjQiLCJyb3RsNjQiLCJ4IiwibiIsInJobyIsInJjIiwia2VjY2FrX2YiLCJhIiwiYyIsImQiLCJiIiwicm91bmQiLCJ5IiwibnkiLCJzaGEzXzI1Nl9oZXgiLCJtc2ciLCJsZW4iLCJxIiwicGFkZGVkIiwidG90YWwiLCJuYmxvY2tzIiwiYmxrIiwiYmFzZSIsImoiLCJsYW5lIiwic2giLCJieXRlIiwib3V0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQztBQUFBQSxJQ1VFO0FBQUE7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QUMsTUFLNUMsaUNBQUFKLElBQ1Y7QUFBQTtBQUFBO0FBQUEsTUFBQUMsT0FDRTtBQUFBLE1BQUFDLEtBQUE7QUFBQSxNQUFBQztBQUFBQSxRQUdnRTtBQUFBLFVBQTVEO0FBQUEsWUFBYztBQUFBLGNBQTJCO0FBQUE7QUFBQSxVQUV2QjtBQUFBLEtBQXRCO0FBQUEsYUFBa0Q7QUFBQSxrQkFFcEQsdUNBQW1CO0FBQUEsS0FGaUM7QUFBQTtBQUFBLEdBRWpDO0FBQUEsR0QxR3JCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDMzMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ByaW1pdGl2ZXMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQnVpbHQtaW4gcHJpbWl0aXZlIGZ1bmN0aW9ucyAofjgwIHB1cmUgZnVuY3Rpb25zKS5cblxuICAgIFJlZ2lzdGVyZWQgaW4gYSBnbG9iYWwgdGFibGU7IHRoZSBldmFsdWF0b3IgY2hlY2tzIHRoaXMgdGFibGVcbiAgICB3aGVuIGEgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBsZXhpY2FsIGVudmlyb25tZW50LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbmxldCBwcmltaXRpdmVzIDogKHN0cmluZywgdmFsdWUgbGlzdCAtPiB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMTI4XG5cbigqKiBGb3J3YXJkIHJlZnMgZm9yIGNhbGxpbmcgU1ggZnVuY3Rpb25zIGZyb20gcHJpbWl0aXZlcyAoYnJlYWtzIGN5Y2xlKS4gKilcbmxldCBfc3hfY2FsbF9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeF9jYWxsIG5vdCBpbml0aWFsaXplZFwiKSlcbmxldCBfc3hfdHJhbXBvbGluZV9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gdiAtPiB2KVxubGV0IF9pc19jbGllbnQgOiBib29sIHJlZiA9IHJlZiBmYWxzZVxuXG4oKiogU2NvcGUgc3RhY2tzIOKAlCBkeW5hbWljIHNjb3BlIGZvciByZW5kZXItdGltZSBlZmZlY3RzLlxuICAgIEVhY2gga2V5IG1hcHMgdG8gYSBzdGFjayBvZiB2YWx1ZXMuIFVzZWQgYnkgYXNlciBmb3JcbiAgICBzcHJlYWQvcHJvdmlkZS9lbWl0IHBhdHRlcm5zLCBDU1NYIGNvbGxlY3QvZmx1c2gsIGV0Yy5cbiAgICBNaWdyYXRlZCBmcm9tIHN4X3Njb3BlLm1sLiAqKVxubGV0IF9zY29wZV9zdGFja3MgOiAoc3RyaW5nLCB2YWx1ZSBsaXN0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbigqKiBEZWJ1ZyB0cmFjZSBmb3Igc2NvcGUgb3BlcmF0aW9ucyAqKVxubGV0IF9zY29wZV90cmFjZSA9IHJlZiBmYWxzZVxubGV0IF9zY29wZV9sb2cgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW11cbmxldCBzY29wZV90cmFjZV9lbmFibGUgKCkgPSBfc2NvcGVfdHJhY2UgOj0gdHJ1ZTsgX3Njb3BlX2xvZyA6PSBbXVxubGV0IHNjb3BlX3RyYWNlX2Rpc2FibGUgKCkgPSBfc2NvcGVfdHJhY2UgOj0gZmFsc2VcbmxldCBzY29wZV90cmFjZV9kcmFpbiAoKSA9XG4gIGxldCBsb2cgPSBMaXN0LnJldiAhX3Njb3BlX2xvZyBpblxuICBfc2NvcGVfbG9nIDo9IFtdO1xuICBsb2dcblxuKCoqIFJlcXVlc3QgY29va2llcyDigJQgc2V0IGJ5IHRoZSBQeXRob24gYnJpZGdlIGJlZm9yZSBlYWNoIHJlbmRlci5cbiAgICBnZXQtY29va2llIHJlYWRzIGZyb20gaGVyZTsgc2V0LWNvb2tpZSBpcyBhIG5vLW9wIG9uIHRoZSBzZXJ2ZXIuICopXG5sZXQgX3JlcXVlc3RfY29va2llcyA6IChzdHJpbmcsIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgOFxuXG4oKiogQ2xlYXIgYWxsIHNjb3BlIHN0YWNrcy4gQ2FsbGVkIGJldHdlZW4gcmVxdWVzdHMgaWYgbmVlZGVkLiAqKVxubGV0IHNjb3BlX2NsZWFyX2FsbCAoKSA9IEhhc2h0YmwuY2xlYXIgX3Njb3BlX3N0YWNrc1xuXG5sZXQgcmVnaXN0ZXIgbmFtZSBmbiA9IEhhc2h0YmwucmVwbGFjZSBwcmltaXRpdmVzIG5hbWUgZm5cblxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gSGFzaHRibC5tZW0gcHJpbWl0aXZlcyBuYW1lXG5cbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmbiAtPiBOYXRpdmVGbiAobmFtZSwgZm4pXG4gIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJVbmtub3duIHByaW1pdGl2ZTogXCIgXiBuYW1lKSlcblxuKCogLS0tIEhlbHBlcnMgLS0tICopXG5cbigqIFRyYW1wb2xpbmUgaG9vayDigJQgc2V0IGJ5IHN4X3JlZiBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicmVhayBjaXJjdWxhciBkZXAgKilcbmxldCB0cmFtcG9saW5lX2hvb2sgOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIHYgLT4gdilcblxubGV0IGFzX2ludCA9IGZ1bmN0aW9uXG4gIHwgSW50ZWdlciBuIC0+IG5cbiAgfCBOdW1iZXIgbiAtPiBpbnRfb2ZfZmxvYXQgblxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgYWxsX2ludHMgPSBMaXN0LmZvcl9hbGwgKGZ1bmN0aW9uIEludGVnZXIgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcblxubGV0IHJlYyBhc19udW1iZXIgPSBmdW5jdGlvblxuICB8IEludGVnZXIgbiAtPiBmbG9hdF9vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IG5cbiAgfCBSYXRpb25hbChuLCBkKSAtPiBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZFxuICB8IEJvb2wgdHJ1ZSAtPiAxLjBcbiAgfCBCb29sIGZhbHNlIC0+IDAuMFxuICB8IE5pbCAtPiAwLjBcbiAgfCBTdHJpbmcgcyAtPiAobWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IEZsb2F0Lm5hbilcbiAgfCBUaHVuayBfIGFzIHQgLT5cbiAgICAoKiBUcmFtcG9saW5lIHRodW5rcyDigJQgdGhleSBzaG91bGRuJ3QgbGVhayBidXQgc29tZXRpbWVzIGRvICopXG4gICAgYXNfbnVtYmVyICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBeIHR5cGVfb2YgdiBeIFwiOiBcIiBeIChtYXRjaCB2IHdpdGggRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX3NpZ25hbFwiIHdpdGggU29tZSBfIC0+IFwic2lnbmFse3ZhbHVlPVwiIF4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInZhbHVlXCIgd2l0aCBTb21lIHYnIC0+IHZhbHVlX3RvX3N0cmluZyB2JyB8IE5vbmUgLT4gXCI/XCIpIF4gXCJ9XCIgfCBOb25lIC0+IFwiZGljdFwiKSB8IF8gLT4gXCJcIikpKVxuXG5sZXQgYXNfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBzdHJpbmcsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCByZWMgYXNfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBsIC0+IGxcbiAgfCBMaXN0UmVmIHIgLT4gIXJcbiAgfCBOaWwgLT4gW11cbiAgfCBUaHVuayBfIGFzIHQgLT4gYXNfbGlzdCAoIV9zeF90cmFtcG9saW5lX2ZuIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsaXN0LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgYXNfYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGJcbiAgfCB2IC0+IHN4X3RydXRoeSB2XG5cbmxldCByZWMgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCJcbiAgfCBTeW1ib2wgcyAtPiBzXG4gIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBUaHVuayBfIGFzIHQgLT4gdG9fc3RyaW5nICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgU3hFeHByIHMgLT4gc1xuICB8IFJhd0hUTUwgcyAtPiBzXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxubGV0IGdlbnN5bV9jb3VudGVyID0gcmVmIDBcblxubGV0IHJhdF9nY2QgYSBiID1cbiAgbGV0IHJlYyBnIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGcgYiAoYSBtb2QgYikgaW4gZyAoYWJzIGEpIChhYnMgYilcblxubGV0IG1ha2VfcmF0IG4gZCA9XG4gIGlmIGQgPSAwIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYXRpb25hbDogZGl2aXNpb24gYnkgemVyb1wiKTtcbiAgbGV0IHNpZ24gPSBpZiBkIDwgMCB0aGVuIC0xIGVsc2UgMSBpblxuICBsZXQgZyA9IHJhdF9nY2QgKGFicyBuKSAoYWJzIGQpIGluXG4gIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgaWYgcmQgPSAxIHRoZW4gSW50ZWdlciBybiBlbHNlIFJhdGlvbmFsIChybiwgcmQpXG5cbmxldCByYXRfb2ZfdmFsID0gZnVuY3Rpb25cbiAgfCBJbnRlZ2VyIG4gICAgIC0+IChuLCAxKVxuICB8IFJhdGlvbmFsKG4sZCkgLT4gKG4sIGQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJleHBlY3RlZCBpbnRlZ2VyIG9yIHJhdGlvbmFsLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgaGFzX3JhdGlvbmFsIGFyZ3MgPSBMaXN0LmV4aXN0cyAoZnVuY3Rpb24gUmF0aW9uYWwgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgYXJnc1xubGV0IGhhc19mbG9hdCAgICBhcmdzID0gTGlzdC5leGlzdHMgKGZ1bmN0aW9uIE51bWJlciAgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgYXJnc1xuXG5sZXQgcmF0X2FkZCAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJkICsgYm4gKiBhZCkgKGFkICogYmQpXG5sZXQgcmF0X3N1YiAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJkIC0gYm4gKiBhZCkgKGFkICogYmQpXG5sZXQgcmF0X211bCAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJuKSAoYWQgKiBiZClcbmxldCByYXRfZGl2IChhbiwgYWQpIChibiwgYmQpID1cbiAgaWYgYm4gPSAwIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYXRpb25hbDogZGl2aXNpb24gYnkgemVyb1wiKTtcbiAgbWFrZV9yYXQgKGFuICogYmQpIChhZCAqIGJuKVxuXG4oKiB3cml0ZS9kaXNwbGF5IHNlcmlhbGl6ZXJzICopXG5sZXQgcmVjIHN4X3dyaXRlX3ZhbCA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IFwiKClcIlxuICB8IEVvZiAtPiBcIiMhZW9mXCJcbiAgfCBCb29sIHRydWUgLT4gXCIjdFwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcIiNmXCJcbiAgfCBJbnRlZ2VyIG4gLT4gc3RyaW5nX29mX2ludCBuXG4gIHwgTnVtYmVyIG4gLT5cbiAgICBsZXQgcyA9IFByaW50Zi5zcHJpbnRmIFwiJWdcIiBuIGluXG4gICAgKCogRW5zdXJlIGZsb2F0LWxpa2UgaWYgbm8gZGVjaW1hbCBwb2ludCAqKVxuICAgIGlmIFN0cmluZy5jb250YWlucyBzICcuJyB8fCBTdHJpbmcuY29udGFpbnMgcyAnZScgdGhlbiBzIGVsc2Ugc1xuICB8IFJhdGlvbmFsKG4sIGQpIC0+IFByaW50Zi5zcHJpbnRmIFwiJWQvJWRcIiBuIGRcbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ1wiJyAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxuJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHRcIlxuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IENoYXIgbiAtPlxuICAgIGlmIG4gPSAzMiB0aGVuIFwiI1xcXFxzcGFjZVwiXG4gICAgZWxzZSBpZiBuID0gMTAgdGhlbiBcIiNcXFxcbmV3bGluZVwiXG4gICAgZWxzZSBpZiBuID0gOSB0aGVuIFwiI1xcXFx0YWJcIlxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIjXFxcXCVjXCIgKENoYXIuY2hyIChuIGxhbmQgMHhGRikpXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBcIjpcIiBeIGtcbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPlxuICAgIFwiKFwiIF4gU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgc3hfd3JpdGVfdmFsIGl0ZW1zKSBeIFwiKVwiXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxuYW5kIHN4X2Rpc3BsYXlfdmFsID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgQ2hhciBuIC0+IFN0cmluZy5tYWtlIDEgKENoYXIuY2hyIChuIGxhbmQgMHhGRikpXG4gIHwgdiAtPiBzeF93cml0ZV92YWwgdlxuXG5sZXQgKCkgPVxuICAoKiA9PT0gQXJpdGhtZXRpYyA9PT0gKilcbiAgcmVnaXN0ZXIgXCIrXCIgKGZ1biBhcmdzIC0+XG4gICAgaWYgYWxsX2ludHMgYXJncyB0aGVuXG4gICAgICBJbnRlZ2VyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IG1hdGNoIGEgd2l0aCBJbnRlZ2VyIG4gLT4gYWNjICsgbiB8IF8gLT4gYWNjKSAwIGFyZ3MpXG4gICAgZWxzZSBpZiBoYXNfcmF0aW9uYWwgYXJncyAmJiBub3QgKGhhc19mbG9hdCBhcmdzKSB0aGVuXG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+XG4gICAgICAgIG1hdGNoIGFjYywgYSB3aXRoXG4gICAgICAgIHwgSW50ZWdlciBhbiwgXyAtPiByYXRfYWRkIChhbiwgMSkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgfCBSYXRpb25hbChhbixhZCksIF8gLT4gcmF0X2FkZCAoYW4sIGFkKSAocmF0X29mX3ZhbCBhKVxuICAgICAgICB8IF8gLT4gYWNjXG4gICAgICApIChJbnRlZ2VyIDApIGFyZ3NcbiAgICBlbHNlXG4gICAgICBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gYWNjICsuIGFzX251bWJlciBhKSAwLjAgYXJncykpO1xuICByZWdpc3RlciBcIi1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEludGVnZXIgMFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoLW4pXG4gICAgfCBbUmF0aW9uYWwobixkKV0gLT4gbWFrZV9yYXQgKC1uKSBkXG4gICAgfCBbYV0gLT4gTnVtYmVyICgtLiAoYXNfbnVtYmVyIGEpKVxuICAgIHwgXyB3aGVuIGFsbF9pbnRzIGFyZ3MgLT5cbiAgICAgIChtYXRjaCBhcmdzIHdpdGhcbiAgICAgICB8IEludGVnZXIgaCA6OiB0bCAtPlxuICAgICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IGFjYyAtIG4gfCBfIC0+IGFjYykgaCB0bClcbiAgICAgICB8IF8gLT4gTnVtYmVyIDAuMClcbiAgICB8IF8gd2hlbiBoYXNfcmF0aW9uYWwgYXJncyAmJiBub3QgKGhhc19mbG9hdCBhcmdzKSAtPlxuICAgICAgKG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgIHwgaCA6OiB0bCAtPlxuICAgICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPlxuICAgICAgICAgICBtYXRjaCBhY2Mgd2l0aFxuICAgICAgICAgICB8IEludGVnZXIgYW4gLT4gcmF0X3N1YiAoYW4sIDEpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgICAgIHwgUmF0aW9uYWwoYW4sYWQpIC0+IHJhdF9zdWIgKGFuLCBhZCkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgICAgfCBfIC0+IGFjY1xuICAgICAgICAgKSBoIHRsXG4gICAgICAgfCBfIC0+IEludGVnZXIgMClcbiAgICB8IGEgOjogcmVzdCAtPlxuICAgICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IGFjYyAtLiBhc19udW1iZXIgeCkgKGFzX251bWJlciBhKSByZXN0KSk7XG4gIHJlZ2lzdGVyIFwiKlwiIChmdW4gYXJncyAtPlxuICAgIGlmIGFsbF9pbnRzIGFyZ3MgdGhlblxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IGFjYyAqIG4gfCBfIC0+IGFjYykgMSBhcmdzKVxuICAgIGVsc2UgaWYgaGFzX3JhdGlvbmFsIGFyZ3MgJiYgbm90IChoYXNfZmxvYXQgYXJncykgdGhlblxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPlxuICAgICAgICBtYXRjaCBhY2Mgd2l0aFxuICAgICAgICB8IEludGVnZXIgYW4gLT4gcmF0X211bCAoYW4sIDEpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgIHwgUmF0aW9uYWwoYW4sYWQpIC0+IHJhdF9tdWwgKGFuLCBhZCkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgfCBfIC0+IGFjY1xuICAgICAgKSAoSW50ZWdlciAxKSBhcmdzXG4gICAgZWxzZVxuICAgICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyAqLiBhc19udW1iZXIgYSkgMS4wIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCIvXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgKCogKC8gaW50IGludCk6IGV4YWN0IHdoZW4gZGl2aXNpYmxlIOKGkiBpbnRlZ2VyLCBlbHNlIGluZXhhY3QgZmxvYXQuXG4gICAgICAgTWF0Y2hlcyBzcGVjIChcImluZXhhY3QgZmxvYXRcIikgKyBKUyBob3N0IChiYWNrd2FyZC1jb21wYXRpYmxlKSArXG4gICAgICAgdGVzdC1udW1lcmljLXRvd2VyICgoLyA2IDIpPTMsICgvIDEgNCk9MC4yNSwgKC8gNSAyKT0yLjUpLiBFeGFjdFxuICAgICAgIHJhdGlvbmFscyBjb21lIE9OTFkgZnJvbSBsaXRlcmFscyAvIG1ha2UtcmF0aW9uYWwsIHNvIGEgcmF0aW9uYWxcbiAgICAgICBPUEVSQU5EIGtlZXBzIHRoZSByZXN1bHQgZXhhY3QgKGNhc2VzIGJlbG93KSDigJQgYnV0IHR3byBpbnRlZ2VycyBkb1xuICAgICAgIE5PVCBzaWxlbnRseSBwcm9kdWNlIGEgcmF0aW9uYWwgKHRoYXQgZGl2ZXJnZWQgZnJvbSB0aGUgSlMgaG9zdCkuICopXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIHdoZW4gYiA8PiAwICYmIGEgbW9kIGIgPSAwIC0+IEludGVnZXIgKGEgLyBiKVxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBhIC8uIGZsb2F0X29mX2ludCBiKVxuICAgIHwgW1JhdGlvbmFsKGFuLGFkKTsgSW50ZWdlciBiXSAtPiBtYWtlX3JhdCBhbiAoYWQgKiBiKVxuICAgIHwgW0ludGVnZXIgYTsgUmF0aW9uYWwoYm4sYmQpXSAtPiBtYWtlX3JhdCAoYSAqIGJkKSBiblxuICAgIHwgW1JhdGlvbmFsKGFuLGFkKTsgUmF0aW9uYWwoYm4sYmQpXSAtPiByYXRfZGl2IChhbiwgYWQpIChibiwgYmQpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChhc19udW1iZXIgYSAvLiBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCIvOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1vZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPiBJbnRlZ2VyIChhIG1vZCBiKVxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoRmxvYXQucmVtIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtb2Q6IGV4cGVjdGVkIDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIChuICsgMSlcbiAgICB8IFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhICsuIDEuMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgKG4gLSAxKVxuICAgIHwgW2FdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgLS4gMS4wKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlYzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFic1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoYWJzIG4pXG4gICAgfCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hYnMgKGFzX251bWJlciBhKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhYnM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmbG9vclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciBuXG4gICAgfCBbYV0gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChmbG9vciAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbG9vcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNlaWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoY2VpbCAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWlsOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicm91bmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoRmxvYXQucm91bmQgKGFzX251bWJlciBhKSkpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgYW5kIHBsYWNlcyA9IGFzX2ludCBiIGluXG4gICAgICBsZXQgZmFjdG9yID0gMTAuMCAqKiBmbG9hdF9vZl9pbnQgcGxhY2VzIGluXG4gICAgICBOdW1iZXIgKEZsb2F0LnJvdW5kIChuICouIGZhY3RvcikgLy4gZmFjdG9yKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJvdW5kOiAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibWluXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1pbjogYXQgbGVhc3QgMSBhcmdcIilcbiAgICB8IF8gd2hlbiBhbGxfaW50cyBhcmdzIC0+XG4gICAgICBJbnRlZ2VyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IG1hdGNoIGEgd2l0aCBJbnRlZ2VyIG4gLT4gbWluIGFjYyBuIHwgXyAtPiBhY2MpIG1heF9pbnQgYXJncylcbiAgICB8IF8gLT4gTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IEZsb2F0Lm1pbiBhY2MgKGFzX251bWJlciBhKSkgRmxvYXQuaW5maW5pdHkgYXJncykpO1xuICByZWdpc3RlciBcIm1heFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYXg6IGF0IGxlYXN0IDEgYXJnXCIpXG4gICAgfCBfIHdoZW4gYWxsX2ludHMgYXJncyAtPlxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IG1heCBhY2MgbiB8IF8gLT4gYWNjKSBtaW5faW50IGFyZ3MpXG4gICAgfCBfIC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBGbG9hdC5tYXggYWNjIChhc19udW1iZXIgYSkpIEZsb2F0Lm5lZ19pbmZpbml0eSBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwic3FydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zcXJ0IChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNxcnQ6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJwb3dcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgKiogYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicG93OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImNicnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuY2JydCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjYnJ0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmV4cCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleHA6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJleHBtMVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5leHBtMSAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleHBtMTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG9nMlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cgKGFzX251bWJlciBhKSAvLiBGbG9hdC5sb2cgMi4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb2cyOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG9nMTBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQubG9nMTAgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nMTA6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJsb2cxcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cxcCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb2cxcDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNpblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zaW4gKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2luOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiY29zXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmNvcyAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb3M6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0YW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQudGFuIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRhbjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFzaW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYXNpbiAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc2luOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYWNvc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hY29zIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFjb3M6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhdGFuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hdGFuIChhc19udW1iZXIgYSkpXG4gICAgfCBbeTsgeF0gLT4gTnVtYmVyIChGbG9hdC5hdGFuMiAoYXNfbnVtYmVyIHkpIChhc19udW1iZXIgeCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXRhbjogMS0yIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImF0YW4yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBOdW1iZXIgKEZsb2F0LmF0YW4yIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhdGFuMjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzaW5oXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LnNpbmggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2luaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNvc2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuY29zaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb3NoOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidGFuaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC50YW5oIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRhbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhc2luaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hc2luaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc2luaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFjb3NoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmFjb3NoIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFjb3NoOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYXRhbmhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYXRhbmggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXRhbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJoeXBvdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBzcXVhcmUgeCA9IHggKi4geCBpblxuICAgIGxldCBzdW0gPSBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyArLiBzcXVhcmUgKGFzX251bWJlciBhKSkgMC4wIGFyZ3MgaW5cbiAgICBOdW1iZXIgKEZsb2F0LnNxcnQgc3VtKSk7XG4gIHJlZ2lzdGVyIFwic2lnblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoaWYgbiA+IDAgdGhlbiAxIGVsc2UgaWYgbiA8IDAgdGhlbiAtMSBlbHNlIDApXG4gICAgfCBbYV0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgaW5cbiAgICAgIE51bWJlciAoaWYgRmxvYXQuaXNfbmFuIG4gdGhlbiBGbG9hdC5uYW5cbiAgICAgICAgICAgICAgZWxzZSBpZiBuID4gMC4wIHRoZW4gMS4wXG4gICAgICAgICAgICAgIGVsc2UgaWYgbiA8IDAuMCB0aGVuIC0xLjBcbiAgICAgICAgICAgICAgZWxzZSBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNpZ246IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmcm91bmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoSW50MzIuZmxvYXRfb2ZfYml0cyAoSW50MzIuYml0c19vZl9mbG9hdCAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmcm91bmQ6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbHozMlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2FdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIGluXG4gICAgICBsZXQgaSA9IGlmIEZsb2F0LmlzX25hbiBuIHx8IEZsb2F0LmlzX2luZmluaXRlIG4gdGhlbiAwbFxuICAgICAgICAgICAgICBlbHNlIEludDMyLm9mX2Zsb2F0IChGbG9hdC5yZW0gbiA0Mjk0OTY3Mjk2LjApIGluXG4gICAgICBpZiBpID0gMGwgdGhlbiBOdW1iZXIgMzIuMFxuICAgICAgZWxzZVxuICAgICAgICBsZXQgaGlnaF9iaXQgPSBJbnQzMi5zaGlmdF9sZWZ0IDFsIDMxIGluXG4gICAgICAgIGxldCBjb3VudCA9IHJlZiAwIGluXG4gICAgICAgIGxldCB4ID0gcmVmIGkgaW5cbiAgICAgICAgd2hpbGUgSW50MzIubG9nYW5kICF4IGhpZ2hfYml0ID0gMGwgZG9cbiAgICAgICAgICBpbmNyIGNvdW50O1xuICAgICAgICAgIHggOj0gSW50MzIuc2hpZnRfbGVmdCAheCAxXG4gICAgICAgIGRvbmU7XG4gICAgICAgIE51bWJlciAoZmxvYXRfb2ZfaW50ICFjb3VudClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbHozMjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImltdWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IHRvdTMyIGYgPVxuICAgICAgICBpZiBGbG9hdC5pc19uYW4gZiB8fCBGbG9hdC5pc19pbmZpbml0ZSBmIHRoZW4gMGxcbiAgICAgICAgZWxzZSBJbnQzMi5vZl9mbG9hdCAoRmxvYXQucmVtIGYgNDI5NDk2NzI5Ni4wKSBpblxuICAgICAgbGV0IGFpID0gdG91MzIgKGFzX251bWJlciBhKSBhbmQgYmkgPSB0b3UzMiAoYXNfbnVtYmVyIGIpIGluXG4gICAgICBsZXQgciA9IEludDMyLm11bCBhaSBiaSBpblxuICAgICAgTnVtYmVyIChJbnQzMi50b19mbG9hdCByKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImltdWw6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2xhbXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt4OyBsbzsgaGldIC0+XG4gICAgICBsZXQgeCA9IGFzX251bWJlciB4IGFuZCBsbyA9IGFzX251bWJlciBsbyBhbmQgaGkgPSBhc19udW1iZXIgaGkgaW5cbiAgICAgIE51bWJlciAoRmxvYXQubWF4IGxvIChGbG9hdC5taW4gaGkgeCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xhbXA6IDMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJ1bmNhdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IGxldCBuID0gYXNfbnVtYmVyIGEgaW4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChpZiBuID49IDAuMCB0aGVuIGZsb29yIG4gZWxzZSBjZWlsIG4pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRydW5jYXRlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVtYWluZGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbW9kIGIpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5yZW0gKGFzX251bWJlciBhKSAoYXNfbnVtYmVyIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlbWFpbmRlcjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJtb2R1bG9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT5cbiAgICAgIGxldCByID0gYSBtb2QgYiBpblxuICAgICAgSW50ZWdlciAoaWYgciA9IDAgfHwgKHIgPiAwKSA9IChiID4gMCkgdGhlbiByIGVsc2UgciArIGIpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBhID0gYXNfbnVtYmVyIGEgYW5kIGIgPSBhc19udW1iZXIgYiBpblxuICAgICAgbGV0IHIgPSBGbG9hdC5yZW0gYSBiIGluXG4gICAgICBOdW1iZXIgKGlmIHIgPSAwLjAgfHwgKHIgPiAwLjApID0gKGIgPiAwLjApIHRoZW4gciBlbHNlIHIgKy4gYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtb2R1bG86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhhY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtSYXRpb25hbCBfXSAtPiBCb29sIHRydWUgICAoKiByYXRpb25hbHMgYXJlIGV4YWN0ICopXG4gICAgfCBbTnVtYmVyIF9dIC0+IEJvb2wgZmFsc2VcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXhhY3Q/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5leGFjdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbSW50ZWdlciBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluZXhhY3Q/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhhY3QtPmluZXhhY3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IG4pXG4gICAgfCBbTnVtYmVyIG5dIC0+IE51bWJlciBuXG4gICAgfCBbUmF0aW9uYWwobixkKV0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZClcbiAgICB8IFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4YWN0LT5pbmV4YWN0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5leGFjdC0+ZXhhY3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW051bWJlciBuXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKEZsb2F0LnJvdW5kIG4pKVxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoRmxvYXQucm91bmQgKGFzX251bWJlciBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5leGFjdC0+ZXhhY3Q6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJleHB0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIHdoZW4gYiA+PSAwIC0+XG4gICAgICBsZXQgcmVjIGlwb3cgYmFzZSBlIGFjYyA9IGlmIGUgPSAwIHRoZW4gYWNjIGVsc2UgaXBvdyBiYXNlIChlIC0gMSkgKGFjYyAqIGJhc2UpIGluXG4gICAgICBJbnRlZ2VyIChpcG93IGEgYiAxKVxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoRmxvYXQucG93IChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleHB0OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInF1b3RpZW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKEludC5kaXYgYSBiKVxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIC8uIGFzX251bWJlciBiIGluXG4gICAgICBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKGlmIG4gPj0gMC4wIHRoZW4gZmxvb3IgbiBlbHNlIGNlaWwgbikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicXVvdGllbnQ6IDIgYXJnc1wiKSk7XG4gIGxldCByZWMgaWdjZCBhIGIgPSBpZiBiID0gMCB0aGVuIGEgZWxzZSBpZ2NkIGIgKGEgbW9kIGIpIGluXG4gIHJlZ2lzdGVyIFwiZ2NkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGlnY2QgKGFicyBhKSAoYWJzIGIpKVxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgcmVjIGZnY2QgYSBiID0gaWYgYiA9IDAuMCB0aGVuIGEgZWxzZSBmZ2NkIGIgKEZsb2F0LnJlbSBhIGIpIGluXG4gICAgICBOdW1iZXIgKGZnY2QgKGFic19mbG9hdCAoYXNfbnVtYmVyIGEpKSAoYWJzX2Zsb2F0IChhc19udW1iZXIgYikpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdjZDogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJsY21cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT5cbiAgICAgIGxldCBnID0gaWdjZCAoYWJzIGEpIChhYnMgYikgaW5cbiAgICAgIGlmIGcgPSAwIHRoZW4gSW50ZWdlciAwIGVsc2UgSW50ZWdlciAoYWJzIGEgLyBnICogYWJzIGIpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBhID0gYWJzX2Zsb2F0IChhc19udW1iZXIgYSkgYW5kIGIgPSBhYnNfZmxvYXQgKGFzX251bWJlciBiKSBpblxuICAgICAgbGV0IHJlYyBmZ2NkIGEgYiA9IGlmIGIgPSAwLjAgdGhlbiBhIGVsc2UgZmdjZCBiIChGbG9hdC5yZW0gYSBiKSBpblxuICAgICAgbGV0IGcgPSBmZ2NkIGEgYiBpblxuICAgICAgaWYgZyA9IDAuMCB0aGVuIE51bWJlciAwLjAgZWxzZSBOdW1iZXIgKGEgLy4gZyAqLiBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxjbTogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJudW1iZXItPnN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIGxldCBkaWdpdHMgPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiIGluXG4gICAgbGV0IGludF90b19yYWRpeCBuIHIgPVxuICAgICAgaWYgbiA9IDAgdGhlbiBcIjBcIlxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgbmVnID0gbiA8IDAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgICAgICAgbGV0IHJlYyBnbyBuID0gaWYgbiA+IDAgdGhlbiBiZWdpbiBnbyAobiAvIHIpOyBCdWZmZXIuYWRkX2NoYXIgYnVmIGRpZ2l0cy5bbiBtb2Qgcl0gZW5kIGluXG4gICAgICAgIGdvIChhYnMgbik7XG4gICAgICAgIChpZiBuZWcgdGhlbiBcIi1cIiBlbHNlIFwiXCIpIF4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IFN0cmluZyAoc3RyaW5nX29mX2ludCBuKVxuICAgIHwgW051bWJlciBmXSAtPiBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiJWdcIiBmKVxuICAgIHwgW1JhdGlvbmFsKG4sZCldIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlZC8lZFwiIG4gZClcbiAgICB8IFtJbnRlZ2VyIG47IEludGVnZXIgcl0gLT5cbiAgICAgIGlmIHIgPCAyIHx8IHIgPiAzNiB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwibnVtYmVyLT5zdHJpbmc6IHJhZGl4IG91dCBvZiByYW5nZVwiKTtcbiAgICAgIFN0cmluZyAoaW50X3RvX3JhZGl4IG4gcilcbiAgICB8IFtOdW1iZXIgZjsgSW50ZWdlciByXSAtPlxuICAgICAgaWYgciA8IDIgfHwgciA+IDM2IHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1iZXItPnN0cmluZzogcmFkaXggb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgU3RyaW5nIChpbnRfdG9fcmFkaXggKGludF9vZl9mbG9hdCBmKSByKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlci0+c3RyaW5nOiAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLT5udW1iZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT5cbiAgICAgICh0cnkgSW50ZWdlciAoaW50X29mX3N0cmluZyBzKVxuICAgICAgIHdpdGggXyAtPiB0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgICAgICB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBJbnRlZ2VyIHJdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBuZWcgPSBTdHJpbmcubGVuZ3RoIHMgPiAwICYmIHMuWzBdID0gJy0nIGluXG4gICAgICAgIGxldCBzdGFydCA9IGlmIG5lZyB0aGVuIDEgZWxzZSAwIGluXG4gICAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgICAgZm9yIGkgPSBzdGFydCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgICAgbGV0IGMgPSBDaGFyLmNvZGUgcy5baV0gaW5cbiAgICAgICAgICBsZXQgZCA9IGlmIGMgPj0gNDggJiYgYyA8PSA1NyB0aGVuIGMgLSA0OFxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiBjID49IDk3ICYmIGMgPD0gMTIyIHRoZW4gYyAtIDg3XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIGMgPj0gNjUgJiYgYyA8PSA5MCAgdGhlbiBjIC0gNTVcbiAgICAgICAgICAgICAgICAgIGVsc2UgcmFpc2UgRXhpdFxuICAgICAgICAgIGluXG4gICAgICAgICAgaWYgZCA+PSByIHRoZW4gcmFpc2UgRXhpdDtcbiAgICAgICAgICBuIDo9ICFuICogciArIGRcbiAgICAgICAgZG9uZTtcbiAgICAgICAgSW50ZWdlciAoaWYgbmVnIHRoZW4gLSAhbiBlbHNlICFuKVxuICAgICAgIHdpdGggXyAtPiBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLT5udW1iZXI6IDEtMiBhcmdzXCIpKTtcbiAgbGV0IG1ha2VfcmF0aW9uYWxfdmFsIG4gZCA9XG4gICAgaWYgZCA9IDAgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcmF0aW9uYWw6IGRlbm9taW5hdG9yIGNhbm5vdCBiZSB6ZXJvXCIpO1xuICAgIGxldCByZWMgZ2NkIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGdjZCBiIChhIG1vZCBiKSBpblxuICAgIGxldCBzaWduID0gaWYgZCA8IDAgdGhlbiAtMSBlbHNlIDEgaW5cbiAgICBsZXQgZyA9IGdjZCAoYWJzIG4pIChhYnMgZCkgaW5cbiAgICBsZXQgcm4gPSBzaWduICogbiAvIGcgYW5kIHJkID0gc2lnbiAqIGQgLyBnIGluXG4gICAgaWYgcmQgPSAxIHRoZW4gSW50ZWdlciBybiBlbHNlIFJhdGlvbmFsIChybiwgcmQpXG4gIGluXG4gIHJlZ2lzdGVyIFwibWFrZS1yYXRpb25hbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbjsgSW50ZWdlciBkXSAtPiBtYWtlX3JhdGlvbmFsX3ZhbCBuIGRcbiAgICB8IFtOdW1iZXIgZjsgSW50ZWdlciBkXSAgLT4gbWFrZV9yYXRpb25hbF92YWwgKGludF9vZl9mbG9hdCBmKSBkXG4gICAgfCBbSW50ZWdlciBuOyBOdW1iZXIgZl0gIC0+IG1ha2VfcmF0aW9uYWxfdmFsIG4gKGludF9vZl9mbG9hdCBmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcmF0aW9uYWw6IGV4cGVjdGVkIDIgaW50ZWdlcnNcIikpO1xuICByZWdpc3RlciBcInJhdGlvbmFsP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JhdGlvbmFsIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dICAgICAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYXRpb25hbD86IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJudW1lcmF0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSYXRpb25hbCAobiwgXyldIC0+IEludGVnZXIgblxuICAgIHwgW0ludGVnZXIgbl0gICAgICAgLT4gSW50ZWdlciBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibnVtZXJhdG9yOiBleHBlY3RlZCByYXRpb25hbCBvciBpbnRlZ2VyXCIpKTtcbiAgcmVnaXN0ZXIgXCJkZW5vbWluYXRvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JhdGlvbmFsIChfLCBkKV0gLT4gSW50ZWdlciBkXG4gICAgfCBbSW50ZWdlciBfXSAgICAgICAtPiBJbnRlZ2VyIDFcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkZW5vbWluYXRvcjogZXhwZWN0ZWQgcmF0aW9uYWwgb3IgaW50ZWdlclwiKSk7XG4gICgqIHByaW50Zi1zcGVjOiBhcHBseSBvbmUgVGNsL3ByaW50ZiBmb3JtYXQgc3BlYyB0byBvbmUgYXJnLlxuICAgICBzcGVjIGlzIGxpa2UgXCIlNS4yZlwiLCBcIiUtMTBzXCIsIFwiJXhcIiwgXCIlY1wiLCBcIiVkXCIuIEFsd2F5cyBzdGFydHMgd2l0aCAlXG4gICAgIGFuZCBlbmRzIHdpdGggdGhlIGNvbnZlcnNpb24gY2hhci4gIFN1cHBvcnRzIGQgaSB1IHggWCBvIGMgcyBmIGUgZy5cbiAgICAgQ29lcmNlcyBhcmcgdG8gdGhlIHJpZ2h0IHR5cGUgcGVyIGNvbnZlcnNpb24uICopXG4gIHJlZ2lzdGVyIFwicHJpbnRmLXNwZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgc3BlY19zdHIsIGFyZyA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbU3RyaW5nIHM7IHZdIC0+IChzLCB2KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJpbnRmLXNwZWM6IChzcGVjIGFyZylcIilcbiAgICBpblxuICAgIGxldCBuID0gU3RyaW5nLmxlbmd0aCBzcGVjX3N0ciBpblxuICAgIGlmIG4gPCAyIHx8IHNwZWNfc3RyLlswXSA8PiAnJScgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwicHJpbnRmLXNwZWM6IGludmFsaWQgc3BlYyBcIiBeIHNwZWNfc3RyKSk7XG4gICAgbGV0IHR5cGVfY2hhciA9IHNwZWNfc3RyLltuIC0gMV0gaW5cbiAgICBsZXQgdG9faW50IHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgSW50ZWdlciBpIC0+IGlcbiAgICAgIHwgTnVtYmVyIGYgLT4gaW50X29mX2Zsb2F0IGZcbiAgICAgIHwgU3RyaW5nIHMgLT5cbiAgICAgICAgbGV0IHMgPSBTdHJpbmcudHJpbSBzIGluXG4gICAgICAgICh0cnkgaW50X29mX3N0cmluZyBzXG4gICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICAgdHJ5IGludF9vZl9mbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgICAgICAgIHdpdGggXyAtPiAwKVxuICAgICAgfCBCb29sIHRydWUgLT4gMSB8IEJvb2wgZmFsc2UgLT4gMFxuICAgICAgfCBfIC0+IDBcbiAgICBpblxuICAgIGxldCB0b19mbG9hdCB2ID0gbWF0Y2ggdiB3aXRoXG4gICAgICB8IE51bWJlciBmIC0+IGZcbiAgICAgIHwgSW50ZWdlciBpIC0+IGZsb2F0X29mX2ludCBpXG4gICAgICB8IFN0cmluZyBzIC0+XG4gICAgICAgIGxldCBzID0gU3RyaW5nLnRyaW0gcyBpblxuICAgICAgICAodHJ5IGZsb2F0X29mX3N0cmluZyBzIHdpdGggXyAtPiAwLjApXG4gICAgICB8IF8gLT4gMC4wXG4gICAgaW5cbiAgICBsZXQgdG9fc3RyaW5nIHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgfCBJbnRlZ2VyIGkgLT4gc3RyaW5nX29mX2ludCBpXG4gICAgICB8IE51bWJlciBmIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgZlxuICAgICAgfCBCb29sIHRydWUgLT4gXCIxXCIgfCBCb29sIGZhbHNlIC0+IFwiMFwiXG4gICAgICB8IE5pbCAtPiBcIlwiXG4gICAgICB8IF8gLT4gU3hfdHlwZXMuaW5zcGVjdCB2XG4gICAgaW5cbiAgICB0cnlcbiAgICAgIG1hdGNoIHR5cGVfY2hhciB3aXRoXG4gICAgICB8ICdkJyB8ICdpJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJWRcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9faW50IGFyZykpXG4gICAgICB8ICd1JyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJXVcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9faW50IGFyZykpXG4gICAgICB8ICd4JyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJXhcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9faW50IGFyZykpXG4gICAgICB8ICdYJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJVhcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9faW50IGFyZykpXG4gICAgICB8ICdvJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJW9cIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9faW50IGFyZykpXG4gICAgICB8ICdjJyAtPlxuICAgICAgICBsZXQgbl92YWwgPSB0b19pbnQgYXJnIGluXG4gICAgICAgIGxldCBib2R5ID0gU3RyaW5nLnN1YiBzcGVjX3N0ciAwIChuIC0gMSkgaW5cbiAgICAgICAgbGV0IGZtdCA9IFNjYW5mLmZvcm1hdF9mcm9tX3N0cmluZyAoYm9keSBeIFwic1wiKSBcIiVzXCIgaW5cbiAgICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBmbXQgKFN0cmluZy5tYWtlIDEgKENoYXIuY2hyIChuX3ZhbCBsYW5kIDB4ZmYpKSkpXG4gICAgICB8ICdzJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJXNcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9fc3RyaW5nIGFyZykpXG4gICAgICB8ICdmJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJWZcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9fZmxvYXQgYXJnKSlcbiAgICAgIHwgJ2UnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlZVwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19mbG9hdCBhcmcpKVxuICAgICAgfCAnRScgLT5cbiAgICAgICAgbGV0IGZtdCA9IFNjYW5mLmZvcm1hdF9mcm9tX3N0cmluZyBzcGVjX3N0ciBcIiVFXCIgaW5cbiAgICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBmbXQgKHRvX2Zsb2F0IGFyZykpXG4gICAgICB8ICdnJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJWdcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9fZmxvYXQgYXJnKSlcbiAgICAgIHwgJ0cnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlR1wiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19mbG9hdCBhcmcpKVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInByaW50Zi1zcGVjOiB1bnN1cHBvcnRlZCBjb252ZXJzaW9uIFwiIF4gU3RyaW5nLm1ha2UgMSB0eXBlX2NoYXIpKVxuICAgIHdpdGhcbiAgICB8IEV2YWxfZXJyb3IgXyBhcyBlIC0+IHJhaXNlIGVcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicHJpbnRmLXNwZWM6IGludmFsaWQgZm9ybWF0IFwiIF4gc3BlY19zdHIpKSk7XG5cbiAgKCogc2Nhbi1zcGVjOiBhcHBseSBvbmUgVGNsL3NjYW5mIGZvcm1hdCBzcGVjIHRvIGEgc3RyaW5nLlxuICAgICBSZXR1cm5zIChjb25zdW1lZC1jb3VudCAuIHBhcnNlZC12YWx1ZSksIG9yIG5pbCBvbiBmYWlsdXJlLiAqKVxuICByZWdpc3RlciBcInNjYW4tc3BlY1wiIChmdW4gYXJncyAtPlxuICAgIGxldCBzcGVjX3N0ciwgc3RyID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtTdHJpbmcgczsgU3RyaW5nIGlucHV0XSAtPiAocywgaW5wdXQpXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzY2FuLXNwZWM6IChzcGVjIGlucHV0KVwiKVxuICAgIGluXG4gICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHNwZWNfc3RyIGluXG4gICAgaWYgbiA8IDIgfHwgc3BlY19zdHIuWzBdIDw+ICclJyB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJzY2FuLXNwZWM6IGludmFsaWQgc3BlYyBcIiBeIHNwZWNfc3RyKSk7XG4gICAgbGV0IHR5cGVfY2hhciA9IHNwZWNfc3RyLltuIC0gMV0gaW5cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICAoKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBmb3Igbm9uLSVjLyVzIGNvbnZlcnNpb25zICopXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGlmIHR5cGVfY2hhciA8PiAnYycgdGhlblxuICAgICAgd2hpbGUgIWkgPCBsZW4gJiYgKHN0ci5bIWldID0gJyAnIHx8IHN0ci5bIWldID0gJ1xcdCcgfHwgc3RyLlshaV0gPSAnXFxuJykgZG8gaW5jciBpIGRvbmU7XG4gICAgbGV0IHN0YXJ0ID0gIWkgaW5cbiAgICB0cnlcbiAgICAgIG1hdGNoIHR5cGVfY2hhciB3aXRoXG4gICAgICB8ICdkJyB8ICdpJyAtPlxuICAgICAgICBsZXQgaiA9IHJlZiAhaSBpblxuICAgICAgICBpZiAhaiA8IGxlbiAmJiAoc3RyLlshal0gPSAnLScgfHwgc3RyLlshal0gPSAnKycpIHRoZW4gaW5jciBqO1xuICAgICAgICB3aGlsZSAhaiA8IGxlbiAmJiBzdHIuWyFqXSA+PSAnMCcgJiYgc3RyLlshal0gPD0gJzknIGRvIGluY3IgaiBkb25lO1xuICAgICAgICBpZiAhaiA+IHN0YXJ0ICYmIChzdHIuW3N0YXJ0XSA+PSAnMCcgJiYgc3RyLltzdGFydF0gPD0gJzknXG4gICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCFqID4gc3RhcnQgKyAxICYmIChzdHIuW3N0YXJ0XSA9ICctJyB8fCBzdHIuW3N0YXJ0XSA9ICcrJykpKSB0aGVuXG4gICAgICAgICAgbGV0IG5fdmFsID0gaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgc3RhcnQgKCFqIC0gc3RhcnQpKSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoSW50ZWdlciBuX3ZhbCk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdW1lZFwiIChJbnRlZ2VyICFqKTtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgZWxzZSBOaWxcbiAgICAgIHwgJ3gnIHwgJ1gnIC0+XG4gICAgICAgIGxldCBqID0gcmVmICFpIGluXG4gICAgICAgIHdoaWxlICFqIDwgbGVuICYmXG4gICAgICAgICAgICAgICgoc3RyLlshal0gPj0gJzAnICYmIHN0ci5bIWpdIDw9ICc5JykgfHxcbiAgICAgICAgICAgICAgIChzdHIuWyFqXSA+PSAnYScgJiYgc3RyLlshal0gPD0gJ2YnKSB8fFxuICAgICAgICAgICAgICAgKHN0ci5bIWpdID49ICdBJyAmJiBzdHIuWyFqXSA8PSAnRicpKSBkbyBpbmNyIGogZG9uZTtcbiAgICAgICAgaWYgIWogPiBzdGFydCB0aGVuXG4gICAgICAgICAgbGV0IG5fdmFsID0gaW50X29mX3N0cmluZyAoXCIweFwiIF4gU3RyaW5nLnN1YiBzdHIgc3RhcnQgKCFqIC0gc3RhcnQpKSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoSW50ZWdlciBuX3ZhbCk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdW1lZFwiIChJbnRlZ2VyICFqKTtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgZWxzZSBOaWxcbiAgICAgIHwgJ28nIC0+XG4gICAgICAgIGxldCBqID0gcmVmICFpIGluXG4gICAgICAgIHdoaWxlICFqIDwgbGVuICYmIHN0ci5bIWpdID49ICcwJyAmJiBzdHIuWyFqXSA8PSAnNycgZG8gaW5jciBqIGRvbmU7XG4gICAgICAgIGlmICFqID4gc3RhcnQgdGhlblxuICAgICAgICAgIGxldCBuX3ZhbCA9IGludF9vZl9zdHJpbmcgKFwiMG9cIiBeIFN0cmluZy5zdWIgc3RyIHN0YXJ0ICghaiAtIHN0YXJ0KSkgaW5cbiAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZhbHVlXCIgKEludGVnZXIgbl92YWwpO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY29uc3VtZWRcIiAoSW50ZWdlciAhaik7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIGVsc2UgTmlsXG4gICAgICB8ICdmJyB8ICdlJyB8ICdnJyAtPlxuICAgICAgICBsZXQgaiA9IHJlZiAhaSBpblxuICAgICAgICBpZiAhaiA8IGxlbiAmJiAoc3RyLlshal0gPSAnLScgfHwgc3RyLlshal0gPSAnKycpIHRoZW4gaW5jciBqO1xuICAgICAgICB3aGlsZSAhaiA8IGxlbiAmJiAoKHN0ci5bIWpdID49ICcwJyAmJiBzdHIuWyFqXSA8PSAnOScpIHx8IHN0ci5bIWpdID0gJy4nKSBkbyBpbmNyIGogZG9uZTtcbiAgICAgICAgaWYgIWogPCBsZW4gJiYgKHN0ci5bIWpdID0gJ2UnIHx8IHN0ci5bIWpdID0gJ0UnKSB0aGVuIGJlZ2luXG4gICAgICAgICAgaW5jciBqO1xuICAgICAgICAgIGlmICFqIDwgbGVuICYmIChzdHIuWyFqXSA9ICctJyB8fCBzdHIuWyFqXSA9ICcrJykgdGhlbiBpbmNyIGo7XG4gICAgICAgICAgd2hpbGUgIWogPCBsZW4gJiYgc3RyLlshal0gPj0gJzAnICYmIHN0ci5bIWpdIDw9ICc5JyBkbyBpbmNyIGogZG9uZVxuICAgICAgICBlbmQ7XG4gICAgICAgIGlmICFqID4gc3RhcnQgdGhlblxuICAgICAgICAgIGxldCBmX3ZhbCA9IGZsb2F0X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgc3RhcnQgKCFqIC0gc3RhcnQpKSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoTnVtYmVyIGZfdmFsKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN1bWVkXCIgKEludGVnZXIgIWopO1xuICAgICAgICAgIERpY3QgZFxuICAgICAgICBlbHNlIE5pbFxuICAgICAgfCAncycgLT5cbiAgICAgICAgbGV0IGogPSByZWYgIWkgaW5cbiAgICAgICAgd2hpbGUgIWogPCBsZW4gJiYgc3RyLlshal0gPD4gJyAnICYmIHN0ci5bIWpdIDw+ICdcXHQnICYmIHN0ci5bIWpdIDw+ICdcXG4nIGRvIGluY3IgaiBkb25lO1xuICAgICAgICBpZiAhaiA+IHN0YXJ0IHRoZW5cbiAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZhbHVlXCIgKFN0cmluZyAoU3RyaW5nLnN1YiBzdHIgc3RhcnQgKCFqIC0gc3RhcnQpKSk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdW1lZFwiIChJbnRlZ2VyICFqKTtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgZWxzZSBOaWxcbiAgICAgIHwgJ2MnIC0+XG4gICAgICAgIGlmICFpIDwgbGVuIHRoZW5cbiAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZhbHVlXCIgKEludGVnZXIgKENoYXIuY29kZSBzdHIuWyFpXSkpO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY29uc3VtZWRcIiAoSW50ZWdlciAoIWkgKyAxKSk7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIGVsc2UgTmlsXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwic2Nhbi1zcGVjOiB1bnN1cHBvcnRlZCBjb252ZXJzaW9uIFwiIF4gU3RyaW5nLm1ha2UgMSB0eXBlX2NoYXIpKVxuICAgIHdpdGhcbiAgICB8IEV2YWxfZXJyb3IgXyBhcyBlIC0+IHJhaXNlIGVcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInBhcnNlLWludFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBwYXJzZV9sZWFkaW5nX2ludCBzID1cbiAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBzdGFydCA9IHJlZiAwIGluXG4gICAgICBsZXQgbmVnID0gbGVuID4gMCAmJiBzLlswXSA9ICctJyBpblxuICAgICAgaWYgbmVnIHRoZW4gc3RhcnQgOj0gMVxuICAgICAgZWxzZSBpZiBsZW4gPiAwICYmIHMuWzBdID0gJysnIHRoZW4gc3RhcnQgOj0gMTtcbiAgICAgIGxldCBqID0gcmVmICFzdGFydCBpblxuICAgICAgd2hpbGUgIWogPCBsZW4gJiYgcy5bIWpdID49ICcwJyAmJiBzLlshal0gPD0gJzknIGRvIGluY3IgaiBkb25lO1xuICAgICAgaWYgIWogPiAhc3RhcnQgdGhlblxuICAgICAgICBsZXQgbiA9IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgcyAhc3RhcnQgKCFqIC0gIXN0YXJ0KSkgaW5cbiAgICAgICAgU29tZSAoaWYgbmVnIHRoZW4gLW4gZWxzZSBuKVxuICAgICAgZWxzZSBOb25lXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gKG1hdGNoIHBhcnNlX2xlYWRpbmdfaW50IHMgd2l0aCBTb21lIG4gLT4gSW50ZWdlciBuIHwgTm9uZSAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IGRlZmF1bHRfdmFsXSAtPlxuICAgICAgKG1hdGNoIHBhcnNlX2xlYWRpbmdfaW50IHMgd2l0aCBTb21lIG4gLT4gSW50ZWdlciBuIHwgTm9uZSAtPiBkZWZhdWx0X3ZhbClcbiAgICB8IFtJbnRlZ2VyIG5dIHwgW0ludGVnZXIgbjsgX10gLT4gSW50ZWdlciBuXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgbilcbiAgICB8IFtfOyBkZWZhdWx0X3ZhbF0gLT4gZGVmYXVsdF92YWxcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJwYXJzZS1mbG9hdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiAobWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzIHdpdGggU29tZSBuIC0+IE51bWJlciBuIHwgTm9uZSAtPiBOaWwpXG4gICAgfCBbTnVtYmVyIG5dIC0+IE51bWJlciBuXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogPT09IENvbXBhcmlzb24gPT09ICopXG4gICgqIFNhZmUgZXF1YWxpdHk6IHBoeXNpY2FsIGVxdWFsaXR5IGZvciBwb3RlbnRpYWxseS1jaXJjdWxhciB0eXBlc1xuICAgICAoRGljdCwgTGFtYmRhLCBDb21wb25lbnQsIElzbGFuZCwgU2lnbmFsLCBOYXRpdmVGbiksXG4gICAgIHN0cnVjdHVyYWwgZXF1YWxpdHkgZm9yIGFjeWNsaWMgdHlwZXMgKE51bWJlciwgU3RyaW5nLCBCb29sLCBldGMuKS5cbiAgICAgTGlzdHMgYXJlIGNvbXBhcmVkIGVsZW1lbnQtd2lzZSByZWN1cnNpdmVseSB3aXRoIHRoZSBzYW1lIHNhZmV0eS4gKilcbiAgbGV0IHJlYyBzYWZlX2VxIGEgYiA9XG4gICAgaWYgYSA9PSBiIHRoZW4gdHJ1ZSAgKCogcGh5c2ljYWwgZXF1YWxpdHkgZmFzdCBwYXRoICopXG4gICAgZWxzZSBtYXRjaCBhLCBiIHdpdGhcbiAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IHggPSB5XG4gICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IHggPSB5XG4gICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IHggPSBmbG9hdF9vZl9pbnQgeVxuICAgIHwgUmF0aW9uYWwobiwgZCksIE51bWJlciB5IC0+IGZsb2F0X29mX2ludCBuIC8uIGZsb2F0X29mX2ludCBkID0geVxuICAgIHwgTnVtYmVyIHgsIFJhdGlvbmFsKG4sIGQpIC0+IHggPSBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZFxuICAgIHwgUmF0aW9uYWwoYW4sIGFkKSwgUmF0aW9uYWwoYm4sIGJkKSAtPiBhbiAqIGJkID0gYm4gKiBhZFxuICAgIHwgUmF0aW9uYWwobiwgZCksIEludGVnZXIgeSAtPiBuID0geSAqIGRcbiAgICB8IEludGVnZXIgeCwgUmF0aW9uYWwobiwgZCkgLT4geCAqIGQgPSBuXG4gICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4geCA9IHlcbiAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgfCBOaWwsIE5pbCAtPiB0cnVlXG4gICAgfCBTeW1ib2wgeCwgU3ltYm9sIHkgLT4geCA9IHlcbiAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgfCAoTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH0pLFxuICAgICAgKExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9KSAtPlxuICAgICAgTGlzdC5sZW5ndGggbGEgPSBMaXN0Lmxlbmd0aCBsYiAmJlxuICAgICAgTGlzdC5mb3JfYWxsMiBzYWZlX2VxIGxhIGxiXG4gICAgKCogRGljdDogX19ob3N0X2hhbmRsZSBpZGVudGl0eSBmb3IgRE9NLXdyYXBwZWQgZGljdHM7IG90aGVyd2lzZVxuICAgICAgIHN0cnVjdHVyYWwgZXF1YWxpdHkgb3ZlciBrZXlzICsgdmFsdWVzLiAqKVxuICAgIHwgRGljdCBhLCBEaWN0IGIgLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGEgXCJfX2hvc3RfaGFuZGxlXCIsIEhhc2h0YmwuZmluZF9vcHQgYiBcIl9faG9zdF9oYW5kbGVcIiB3aXRoXG4gICAgICAgfCBTb21lIChOdW1iZXIgaGEpLCBTb21lIChOdW1iZXIgaGIpIC0+IGhhID0gaGJcbiAgICAgICB8IFNvbWUgXywgXyB8IF8sIFNvbWUgXyAtPiBmYWxzZVxuICAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICAgSGFzaHRibC5sZW5ndGggYSA9IEhhc2h0YmwubGVuZ3RoIGIgJiZcbiAgICAgICAgIChsZXQgZXEgPSByZWYgdHJ1ZSBpblxuICAgICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPlxuICAgICAgICAgICAgaWYgIWVxIHRoZW5cbiAgICAgICAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBiIGsgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgdicgLT4gaWYgbm90IChzYWZlX2VxIHYgdicpIHRoZW4gZXEgOj0gZmFsc2VcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGVxIDo9IGZhbHNlXG4gICAgICAgICAgKSBhO1xuICAgICAgICAgICFlcSkpXG4gICAgKCogUmVjb3Jkczogc2FtZSB0eXBlICsgc3RydWN0dXJhbGx5IGVxdWFsIGZpZWxkcyAqKVxuICAgIHwgUmVjb3JkIGEsIFJlY29yZCBiIC0+XG4gICAgICBhLnJfdHlwZS5ydF91aWQgPSBiLnJfdHlwZS5ydF91aWQgJiZcbiAgICAgIEFycmF5Lmxlbmd0aCBhLnJfZmllbGRzID0gQXJyYXkubGVuZ3RoIGIucl9maWVsZHMgJiZcbiAgICAgIChsZXQgZXEgPSByZWYgdHJ1ZSBpblxuICAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYS5yX2ZpZWxkcyAtIDEgZG9cbiAgICAgICAgIGlmIG5vdCAoc2FmZV9lcSBhLnJfZmllbGRzLihpKSBiLnJfZmllbGRzLihpKSkgdGhlbiBlcSA6PSBmYWxzZVxuICAgICAgIGRvbmU7ICFlcSlcbiAgICAoKiBQYXJhbWV0ZXJzOiBzYW1lIFVJRCA9IHNhbWUgcGFyYW1ldGVyICopXG4gICAgfCBQYXJhbWV0ZXIgYSwgUGFyYW1ldGVyIGIgLT4gYS5wbV91aWQgPSBiLnBtX3VpZFxuICAgICgqIFZlY3RvcnM6IHNhbWUgbGVuZ3RoICsgZWxlbWVudC13aXNlIGVxdWFsICopXG4gICAgfCBWZWN0b3IgYSwgVmVjdG9yIGIgLT5cbiAgICAgIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiZcbiAgICAgIChsZXQgZXEgPSByZWYgdHJ1ZSBpblxuICAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgIGlmIG5vdCAoc2FmZV9lcSBhLihpKSBiLihpKSkgdGhlbiBlcSA6PSBmYWxzZVxuICAgICAgIGRvbmU7ICFlcSlcbiAgICAoKiBMYW1iZGEvQ29tcG9uZW50L0lzbGFuZC9TaWduYWwvTmF0aXZlRm46IHBoeXNpY2FsIG9ubHkgKilcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgcmVnaXN0ZXIgXCI9XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoc2FmZV9lcSBhIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPTogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCIhPVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKG5vdCAoc2FmZV9lcSBhIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIiE9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIjxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPCBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhIDwgYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPDogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI+XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhID4gYilcbiAgICB8IFthOyBiXSAtPiBCb29sIChhc19udW1iZXIgYSA+IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIj46IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPD1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPD0gYilcbiAgICB8IFthOyBiXSAtPiBCb29sIChhc19udW1iZXIgYSA8PSBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI8PTogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI+PVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA+PSBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhID49IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIj49OiAyIGFyZ3NcIikpO1xuXG4gICgqID09PSBMb2dpYyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJub3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKG5vdCAoc3hfdHJ1dGh5IGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3Q6IDEgYXJnXCIpKTtcblxuICAoKiA9PT0gUHJlZGljYXRlcyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJuaWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpc19uaWwgYSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibmlsPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcIm51bWJlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIF9dIHwgW051bWJlciBfXSB8IFtSYXRpb25hbCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibnVtYmVyPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImludGVnZXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtOdW1iZXIgZl0gLT4gQm9vbCAoRmxvYXQuaXNfaW50ZWdlciBmKVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnRlZ2VyPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImZsb2F0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW051bWJlciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmxvYXQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZz86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJib29sZWFuP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQm9vbCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJib29sZWFuPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxpc3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMaXN0IF9dIHwgW0xpc3RSZWYgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGlzdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbRGljdCBfXSAtPiBCb29sIHRydWUgfCBbQWR0VmFsdWUgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhZHQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtBZHRWYWx1ZSBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhZHQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ltYm9sP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJrZXl3b3JkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbS2V5d29yZCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXl3b3JkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImVtcHR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbU3RyaW5nIFwiXCJdIC0+IEJvb2wgdHJ1ZSB8IFtTdHJpbmcgX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBbTmlsXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW1wdHk/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwib2RkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoaW50X29mX2Zsb2F0IChhc19udW1iZXIgYSkgbW9kIDIgPD4gMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwib2RkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV2ZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBhKSBtb2QgMiA9IDApIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2ZW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiemVybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGFzX251bWJlciBhID0gMC4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ6ZXJvPzogMSBhcmdcIikpO1xuXG4gICgqID09PSBTdHJpbmdzID09PSAqKVxuICByZWdpc3RlciBcInN0clwiIChmdW4gYXJncyAtPiBTdHJpbmcgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgdG9fc3RyaW5nIGFyZ3MpKSk7XG4gIHJlZ2lzdGVyIFwidXBwZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAoU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1cHBlcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInVwY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVwY2FzZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvd2VyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG93ZXI6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkb3duY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcubG93ZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRvd25jYXNlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJpbVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudHJpbSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmltOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCAoYXNfc3RyaW5nIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1sZW5ndGg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctY29udGFpbnM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhheXN0YWNrOyBTdHJpbmcgbmVlZGxlXSAtPlxuICAgICAgbGV0IHJlYyBmaW5kIGkgPVxuICAgICAgICBpZiBpICsgU3RyaW5nLmxlbmd0aCBuZWVkbGUgPiBTdHJpbmcubGVuZ3RoIGhheXN0YWNrIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIGhheXN0YWNrIGkgKFN0cmluZy5sZW5ndGggbmVlZGxlKSA9IG5lZWRsZSB0aGVuIHRydWVcbiAgICAgICAgZWxzZSBmaW5kIChpICsgMSlcbiAgICAgIGluIEJvb2wgKGZpbmQgMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctY29udGFpbnM/OiAyIHN0cmluZyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdGFydHMtd2l0aD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHByZWZpeF0gLT5cbiAgICAgIEJvb2wgKFN0cmluZy5sZW5ndGggcyA+PSBTdHJpbmcubGVuZ3RoIHByZWZpeCAmJlxuICAgICAgICAgICAgU3RyaW5nLnN1YiBzIDAgKFN0cmluZy5sZW5ndGggcHJlZml4KSA9IHByZWZpeClcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiZW5kcy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgc3VmZml4XSAtPlxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGFuZCB4bCA9IFN0cmluZy5sZW5ndGggc3VmZml4IGluXG4gICAgICBCb29sIChzbCA+PSB4bCAmJiBTdHJpbmcuc3ViIHMgKHNsIC0geGwpIHhsID0gc3VmZml4KVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJpbmRleC1vZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBoYXlzdGFjazsgU3RyaW5nIG5lZWRsZV0gLT5cbiAgICAgIGxldCBubCA9IFN0cmluZy5sZW5ndGggbmVlZGxlIGFuZCBobCA9IFN0cmluZy5sZW5ndGggaGF5c3RhY2sgaW5cbiAgICAgIGxldCByZWMgZmluZCBpID1cbiAgICAgICAgaWYgaSArIG5sID4gaGwgdGhlbiBOdW1iZXIgKC0xLjApXG4gICAgICAgIGVsc2UgaWYgU3RyaW5nLnN1YiBoYXlzdGFjayBpIG5sID0gbmVlZGxlIHRoZW4gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSlcbiAgICAgICAgZWxzZSBmaW5kIChpICsgMSlcbiAgICAgIGluIGZpbmQgMFxuICAgIHwgW0xpc3QgaXRlbXM7IHRhcmdldF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfTsgdGFyZ2V0XSAtPlxuICAgICAgbGV0IGVxIGEgYiA9IG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IHggPSB5XG4gICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IHggPSBmbG9hdF9vZl9pbnQgeVxuICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICAgICAgICB8IFN5bWJvbCB4LCBTeW1ib2wgeSAtPiB4ID0geSB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgICAgIHwgQm9vbCB4LCBCb29sIHkgLT4geCA9IHkgfCBOaWwsIE5pbCAtPiB0cnVlIHwgXyAtPiBhID09IGIgaW5cbiAgICAgIGxldCByZWMgZmluZCBpID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBOaWxcbiAgICAgICAgfCBoIDo6IF8gd2hlbiBlcSBoIHRhcmdldCAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKVxuICAgICAgICB8IF8gOjogdGwgLT4gZmluZCAoaSArIDEpIHRsXG4gICAgICBpbiBmaW5kIDAgaXRlbXNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmRleC1vZjogMiBzdHJpbmcgYXJncyBvciBsaXN0K3RhcmdldFwiKSk7XG4gIHJlZ2lzdGVyIFwic3Vic3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IHN0YXJ0X3Y7IGVuZF92XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgc3RhcnRfdiBhbmQgaiA9IGFzX2ludCBlbmRfdiBpblxuICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGkgPSBtYXggMCAobWluIGkgbGVuKSBhbmQgaiA9IG1heCAwIChtaW4gaiBsZW4pIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChtYXggMCAoaiAtIGkpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdWJzdHJpbmc6IDMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic3Vic3RyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IHN0YXJ0X3Y7IGxlbl92XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgc3RhcnRfdiBhbmQgbiA9IGFzX2ludCBsZW5fdiBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBzbCkgaW5cbiAgICAgIGxldCBuID0gbWF4IDAgKG1pbiBuIChzbCAtIGkpKSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKVxuICAgIHwgW1N0cmluZyBzOyBzdGFydF92XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgc3RhcnRfdiBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBzbCkgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgKHNsIC0gaSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3Vic3RyOiAyLTMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHNlcF0gLT5cbiAgICAgIGlmIFN0cmluZy5sZW5ndGggc2VwID0gMSB0aGVuXG4gICAgICAgIExpc3QgKExpc3QubWFwIChmdW4gcCAtPiBTdHJpbmcgcCkgKFN0cmluZy5zcGxpdF9vbl9jaGFyIHNlcC5bMF0gcykpXG4gICAgICBlbHNlXG4gICAgICAgICgqIE11bHRpLWNoYXIgc2VwYXJhdG9yOiB1c2UgUmUgZm9yIGxpdGVyYWwgc3BsaXQgKilcbiAgICAgICAgbGV0IHJlID0gUmUuY29tcGlsZSAoUmUuc3RyIHNlcCkgaW5cbiAgICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBwIC0+IFN0cmluZyBwKSAoUmUuc3BsaXQgcmUgcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3BsaXQ6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiam9pblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzZXA7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBTdHJpbmcgKFN0cmluZy5jb25jYXQgc2VwIChMaXN0Lm1hcCB0b19zdHJpbmcgaXRlbXMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImpvaW46IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIGxldCB0b19zdHIgPSBmdW5jdGlvblxuICAgICAgfCBTdHJpbmcgcyAtPiBzIHwgU3hFeHByIHMgLT4gcyB8IFJhd0hUTUwgcyAtPiBzXG4gICAgICB8IEtleXdvcmQgayAtPiBrIHwgU3ltYm9sIHMgLT4gc1xuICAgICAgfCBOaWwgLT4gXCJcIiB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gICAgICB8IEludGVnZXIgbiAtPiBzdHJpbmdfb2ZfaW50IG5cbiAgICAgIHwgTnVtYmVyIG4gLT4gaWYgRmxvYXQuaXNfaW50ZWdlciBuIHRoZW4gc3RyaW5nX29mX2ludCAoaW50X29mX2Zsb2F0IG4pIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgICAgIHwgVGh1bmsgXyBhcyB0IC0+IChtYXRjaCAhX3N4X3RyYW1wb2xpbmVfZm4gdCB3aXRoIFN0cmluZyBzIC0+IHMgfCB2IC0+IHRvX3N0cmluZyB2KVxuICAgICAgfCB2IC0+IHRvX3N0cmluZyB2XG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtzOyBvbGRfczsgbmV3X3NdIC0+XG4gICAgICBsZXQgcyA9IHRvX3N0ciBzIGFuZCBvbGRfcyA9IHRvX3N0ciBvbGRfcyBhbmQgbmV3X3MgPSB0b19zdHIgbmV3X3MgaW5cbiAgICAgIGxldCBvbCA9IFN0cmluZy5sZW5ndGggb2xkX3MgaW5cbiAgICAgIGlmIG9sID0gMCB0aGVuIFN0cmluZyBzXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgICAgIGxldCByZWMgZ28gaSA9XG4gICAgICAgICAgaWYgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiAoKVxuICAgICAgICAgIGVsc2UgaWYgaSArIG9sIDw9IFN0cmluZy5sZW5ndGggcyAmJiBTdHJpbmcuc3ViIHMgaSBvbCA9IG9sZF9zIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBuZXdfcztcbiAgICAgICAgICAgIGdvIChpICsgb2wpXG4gICAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5baV07XG4gICAgICAgICAgICBnbyAoaSArIDEpXG4gICAgICAgICAgZW5kXG4gICAgICAgIGluIGdvIDA7XG4gICAgICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICAgIGVuZFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlcGxhY2U6IDMgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImNoYXItZnJvbS1jb2RlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYV0gLT5cbiAgICAgIGxldCBuID0gYXNfaW50IGEgaW5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDQgaW5cbiAgICAgIEJ1ZmZlci5hZGRfdXRmXzhfdWNoYXIgYnVmIChVY2hhci5vZl9pbnQgbik7XG4gICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1mcm9tLWNvZGU6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWF0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IG5dIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICBpZiBpID49IDAgJiYgaSA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICAgIFN0cmluZyAoU3RyaW5nLm1ha2UgMSBzLltpXSlcbiAgICAgIGVsc2UgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1hdDogc3RyaW5nIGFuZCBpbmRleFwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jb2RlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIHdoZW4gU3RyaW5nLmxlbmd0aCBzID4gMCAtPiBJbnRlZ2VyIChDaGFyLmNvZGUgcy5bMF0pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1jb2RlOiAxIG5vbi1lbXB0eSBzdHJpbmcgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJwYXJzZS1udW1iZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT5cbiAgICAgIGxldCBoYXNfZGVjID0gU3RyaW5nLmNvbnRhaW5zIHMgJy4nIGluXG4gICAgICBsZXQgaGFzX2V4cCA9IFN0cmluZy5jb250YWlucyBzICdlJyB8fCBTdHJpbmcuY29udGFpbnMgcyAnRScgaW5cbiAgICAgIGlmIGhhc19kZWMgfHwgaGFzX2V4cCB0aGVuXG4gICAgICAgICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTmlsKVxuICAgICAgZWxzZVxuICAgICAgICAobWF0Y2ggaW50X29mX3N0cmluZ19vcHQgcyB3aXRoXG4gICAgICAgICB8IFNvbWUgbiAtPiBJbnRlZ2VyIG5cbiAgICAgICAgIHwgTm9uZSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5pbCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyc2UtbnVtYmVyOiAxIHN0cmluZyBhcmdcIikpO1xuXG4gICgqID09PSBSZWdleCAoUENSRS1jb21wYXRpYmxlIOKAlCBzYW1lIHN5bnRheCBhcyBKUyBSZWdFeHApID09PSAqKVxuICByZWdpc3RlciBcInJlZ2V4LW1hdGNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdHRlcm47IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgbWF0Y2ggUmUuZXhlY19vcHQgcmUgaW5wdXQgd2l0aFxuICAgICAgICB8IFNvbWUgZ3JvdXAgLT5cbiAgICAgICAgICBsZXQgZnVsbCA9IFJlLkdyb3VwLmdldCBncm91cCAwIGluXG4gICAgICAgICAgbGV0IG4gPSBSZS5Hcm91cC5uYl9ncm91cHMgZ3JvdXAgaW5cbiAgICAgICAgICBsZXQgZ3JvdXBzID0gcmVmIFtTdHJpbmcgZnVsbF0gaW5cbiAgICAgICAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgICAgICAgICh0cnkgZ3JvdXBzIDo9ICFncm91cHMgQCBbU3RyaW5nIChSZS5Hcm91cC5nZXQgZ3JvdXAgaSldXG4gICAgICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT4gZ3JvdXBzIDo9ICFncm91cHMgQCBbTmlsXSlcbiAgICAgICAgICBkb25lO1xuICAgICAgICAgIExpc3QgIWdyb3Vwc1xuICAgICAgICB8IE5vbmUgLT4gTmlsXG4gICAgICAgd2l0aCBfIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1tYXRjaDogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtbWF0Y2g/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdHRlcm47IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnkgQm9vbCAoUmUuZXhlY3AgKFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlKSBpbnB1dClcbiAgICAgICB3aXRoIF8gLT4gQm9vbCBmYWxzZSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1tYXRjaD86IHBhdHRlcm4gYW5kIGlucHV0IHN0cmluZ3NcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LWZpbmQtYWxsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdHRlcm47IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgbGV0IG1hdGNoZXMgPSBSZS5hbGwgcmUgaW5wdXQgaW5cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBMaXN0Lm1hcCAoZnVuIGdyb3VwIC0+XG4gICAgICAgICAgKCogSWYgdGhlcmUncyBhIGNhcHR1cmUgZ3JvdXAsIHJldHVybiBncm91cCAxOyBlbHNlIGZ1bGwgbWF0Y2ggKilcbiAgICAgICAgICB0cnkgU3RyaW5nIChSZS5Hcm91cC5nZXQgZ3JvdXAgMSlcbiAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiBTdHJpbmcgKFJlLkdyb3VwLmdldCBncm91cCAwKVxuICAgICAgICApIG1hdGNoZXMgaW5cbiAgICAgICAgTGlzdFJlZiAocmVmIHJlc3VsdHMpXG4gICAgICAgd2l0aCBfIC0+IExpc3RSZWYgKHJlZiBbXSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtZmluZC1hbGw6IHBhdHRlcm4gYW5kIGlucHV0IHN0cmluZ3NcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXJlcGxhY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIHJlcGxhY2VtZW50OyBTdHJpbmcgaW5wdXRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZV9zdHJpbmcgcmUgfmJ5OnJlcGxhY2VtZW50IGlucHV0KVxuICAgICAgIHdpdGggXyAtPiBTdHJpbmcgaW5wdXQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtcmVwbGFjZTogcGF0dGVybiwgcmVwbGFjZW1lbnQsIGlucHV0IHN0cmluZ3NcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXJlcGxhY2UtZmlyc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIHJlcGxhY2VtZW50OyBTdHJpbmcgaW5wdXRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgICgqIFJlIGRvZXNuJ3QgaGF2ZSByZXBsYWNlX2ZpcnN0LCBzbyB1c2UgYWxsIG1hdGNoZXMgYW5kIHJlcGxhY2Ugb25seSBmaXJzdCAqKVxuICAgICAgICBtYXRjaCBSZS5leGVjX29wdCByZSBpbnB1dCB3aXRoXG4gICAgICAgIHwgU29tZSBncm91cCAtPlxuICAgICAgICAgIGxldCBzdGFydCA9IFJlLkdyb3VwLnN0YXJ0IGdyb3VwIDAgYW5kIHN0b3AgPSBSZS5Hcm91cC5zdG9wIGdyb3VwIDAgaW5cbiAgICAgICAgICBTdHJpbmcgKFN0cmluZy5zdWIgaW5wdXQgMCBzdGFydCBeIHJlcGxhY2VtZW50IF5cbiAgICAgICAgICAgICAgICAgIFN0cmluZy5zdWIgaW5wdXQgc3RvcCAoU3RyaW5nLmxlbmd0aCBpbnB1dCAtIHN0b3ApKVxuICAgICAgICB8IE5vbmUgLT4gU3RyaW5nIGlucHV0XG4gICAgICAgd2l0aCBfIC0+IFN0cmluZyBpbnB1dClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlLWZpcnN0OiBwYXR0ZXJuLCByZXBsYWNlbWVudCwgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtc3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5QY3JlLnJlIHBhdHRlcm4gfD4gUmUuY29tcGlsZSBpblxuICAgICAgICBMaXN0UmVmIChyZWYgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgKFJlLnNwbGl0IHJlIGlucHV0KSkpXG4gICAgICAgd2l0aCBfIC0+IExpc3RSZWYgKHJlZiBbU3RyaW5nIGlucHV0XSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtc3BsaXQ6IHBhdHRlcm4gYW5kIGlucHV0IHN0cmluZ3NcIikpO1xuXG4gICgqID09PSBDb2xsZWN0aW9ucyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJsaXN0XCIgKGZ1biBhcmdzIC0+IExpc3RSZWYgKHJlZiBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwibGVuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IEludGVnZXIgKExpc3QubGVuZ3RoIGwpXG4gICAgfCBbU3RyaW5nIHNdIC0+IEludGVnZXIgKFN0cmluZy5sZW5ndGggcylcbiAgICB8IFtEaWN0IGRdIC0+IEludGVnZXIgKEhhc2h0YmwubGVuZ3RoIGQpXG4gICAgfCBbTmlsXSB8IFtCb29sIGZhbHNlXSAtPiBJbnRlZ2VyIDBcbiAgICB8IFtCb29sIHRydWVdIC0+IEludGVnZXIgMVxuICAgIHwgW051bWJlciBfXSB8IFtJbnRlZ2VyIF9dIC0+IEludGVnZXIgMVxuICAgIHwgW1Jhd0hUTUwgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgIHwgW1N4RXhwciBzXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPiBJbnRlZ2VyIChMaXN0Lmxlbmd0aCBwYWlycylcbiAgICB8IFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIHwgW0xhbWJkYSBfXSB8IFtOYXRpdmVGbiBfXVxuICAgIHwgW01hY3JvIF9dIHwgW1RodW5rIF9dIHwgW0tleXdvcmQgX10gfCBbU3ltYm9sIF9dIC0+IEludGVnZXIgMFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJsZW46ICVkIGFyZ3NcIlxuICAgICAgICAoTGlzdC5sZW5ndGggYXJncykpKSk7XG4gIHJlZ2lzdGVyIFwibGVuZ3RoXCIgKEhhc2h0YmwuZmluZCBwcmltaXRpdmVzIFwibGVuXCIpO1xuICByZWdpc3RlciBcImZpcnN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoeCA6OiBfKV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH1dIC0+IHhcbiAgICB8IFtMaXN0IFtdXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9XSAtPiBOaWwgfCBbTmlsXSAtPiBOaWxcbiAgICB8IFt4XSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaXJzdDogZXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gaW5zcGVjdCB4KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaXJzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgKF8gOjogeHMpXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBfIDo6IHhzIH1dIC0+IExpc3QgeHNcbiAgICB8IFtMaXN0IFtdXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9XSAtPiBMaXN0IFtdIHwgW05pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlc3Q6IDEgbGlzdCBhcmdcIikpO1xuICByZWdpc3RlciBcImxhc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT5cbiAgICAgIChtYXRjaCBMaXN0LnJldiBsIHdpdGggeCA6OiBfIC0+IHggfCBbXSAtPiBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGFzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5pdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPlxuICAgICAgKG1hdGNoIExpc3QucmV2IGwgd2l0aCBfIDo6IHJlc3QgLT4gTGlzdCAoTGlzdC5yZXYgcmVzdCkgfCBbXSAtPiBMaXN0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluaXQ6IDEgbGlzdCBhcmdcIikpO1xuICByZWdpc3RlciBcIm50aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbDsgbl0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9OyBuXSAtPlxuICAgICAgKHRyeSBMaXN0Lm50aCBsIChhc19pbnQgbikgd2l0aCBfIC0+IE5pbClcbiAgICB8IFtTdHJpbmcgczsgbl0gLT5cbiAgICAgIGxldCBpID0gYXNfaW50IG4gaW5cbiAgICAgIGlmIGkgPj0gMCAmJiBpIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW4gU3RyaW5nIChTdHJpbmcubWFrZSAxIHMuW2ldKVxuICAgICAgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudGg6IGxpc3Qvc3RyaW5nIGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcImNvbnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt4OyBMaXN0IGxdIHwgW3g7IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoeCA6OiBsKVxuICAgIHwgW3g7IE5pbF0gLT4gTGlzdCBbeF1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb25zOiB2YWx1ZSBhbmQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH07IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPlxuICAgICAgTGlzdCAobGEgQCBsYilcbiAgICB8IFtMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfTsgTmlsXSAtPiBMaXN0IGxhXG4gICAgfCBbTmlsOyBMaXN0IGxiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGIgfV0gLT4gTGlzdCBsYlxuICAgIHwgW0xpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9OyB2XSAtPiBMaXN0IChsYSBAIFt2XSlcbiAgICB8IFt2OyBMaXN0IGxiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGIgfV0gLT4gTGlzdCAoW3ZdIEAgbGIpXG4gICAgfCBfIC0+XG4gICAgICBsZXQgYWxsID0gTGlzdC5jb25jYXRfbWFwIGFzX2xpc3QgYXJncyBpblxuICAgICAgTGlzdCBhbGwpO1xuICByZWdpc3RlciBcImFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IGl0ZW1dIC0+IHIgOj0gIXIgQCBbaXRlbV07IExpc3RSZWYgclxuICAgIHwgW0xpc3QgaXRlbXM7IGl0ZW1dIC0+IExpc3QgKGl0ZW1zIEAgW2l0ZW1dKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGxpc3QgYW5kIGl0ZW1cIikpO1xuICByZWdpc3RlciBcInJldmVyc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5yZXYgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXZlcnNlOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcImZsYXR0ZW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgcmVjIGZsYXQgPSBmdW5jdGlvblxuICAgICAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPiBMaXN0LmNvbmNhdF9tYXAgZmxhdCBpdGVtc1xuICAgICAgfCB4IC0+IFt4XVxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IExpc3QgKExpc3QuY29uY2F0X21hcCBmbGF0IGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmxhdHRlbjogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJjb25jYXRcIiAoZnVuIGFyZ3MgLT4gTGlzdCAoTGlzdC5jb25jYXRfbWFwIGFzX2xpc3QgYXJncykpO1xuICByZWdpc3RlciBcImNvbnRhaW5zP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbDsgaXRlbV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9OyBpdGVtXSAtPlxuICAgICAgKCogUGh5c2ljYWwgZXF1YWxpdHkgZmlyc3QgKGhhbmRsZXMgc2lnbmFscy9kaWN0cy9jbG9zdXJlcyBzYWZlbHkpLFxuICAgICAgICAgc3RydWN0dXJhbCBmYWxsYmFjayBvbmx5IGZvciBhY3ljbGljIHR5cGVzIChzdHJpbmcvbnVtYmVyL2Jvb2wvbmlsL3N5bWJvbC9rZXl3b3JkKSAqKVxuICAgICAgbGV0IHNhZmVfZXEgYSBiID1cbiAgICAgICAgYSA9PSBiIHx8XG4gICAgICAgIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4geCA9IHlcbiAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IHggPSB5XG4gICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4geCA9IGZsb2F0X29mX2ludCB5XG4gICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICAgICAgICAgfCBOaWwsIE5pbCAtPiB0cnVlXG4gICAgICAgICB8IFN5bWJvbCB4LCBTeW1ib2wgeSAtPiB4ID0geVxuICAgICAgICAgfCBLZXl3b3JkIHgsIEtleXdvcmQgeSAtPiB4ID0geVxuICAgICAgICAgfCBEaWN0IGEsIERpY3QgYiAtPlxuICAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBhIFwiX19ob3N0X2hhbmRsZVwiLCBIYXNodGJsLmZpbmRfb3B0IGIgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgaGEpLCBTb21lIChOdW1iZXIgaGIpIC0+IGhhID0gaGJcbiAgICAgICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICAgIGluXG4gICAgICBCb29sIChMaXN0LmV4aXN0cyAoZnVuIHggLT4gc2FmZV9lcSB4IGl0ZW0pIGwpXG4gICAgfCBbU3RyaW5nIHM7IFN0cmluZyBzdWJdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIHN1YiA+IFN0cmluZy5sZW5ndGggcyB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgaWYgU3RyaW5nLnN1YiBzIGkgKFN0cmluZy5sZW5ndGggc3ViKSA9IHN1YiB0aGVuIHRydWVcbiAgICAgICAgZWxzZSBmaW5kIChpICsgMSlcbiAgICAgIGluIEJvb2wgKGZpbmQgMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb250YWlucz86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmFuZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtzdG9wX3ZdIC0+XG4gICAgICBsZXQgbiA9IGFzX2ludCBzdG9wX3YgaW5cbiAgICAgIExpc3QgKExpc3QuaW5pdCAobWF4IDAgbikgKGZ1biBpIC0+IEludGVnZXIgaSkpXG4gICAgfCBbc3RhcnRfdjsgc3RvcF92XSAtPlxuICAgICAgbGV0IHMgPSBhc19pbnQgc3RhcnRfdiBhbmQgZSA9IGFzX2ludCBzdG9wX3YgaW5cbiAgICAgIGxldCBsZW4gPSBtYXggMCAoZSAtIHMpIGluXG4gICAgICBMaXN0IChMaXN0LmluaXQgbGVuIChmdW4gaSAtPiBJbnRlZ2VyIChzICsgaSkpKVxuICAgIHwgW3N0YXJ0X3Y7IHN0b3Bfdjsgc3RlcF92XSAtPlxuICAgICAgKG1hdGNoIHN0YXJ0X3YsIHN0b3Bfdiwgc3RlcF92IHdpdGhcbiAgICAgICB8IEludGVnZXIgcywgSW50ZWdlciBlLCBJbnRlZ2VyIHN0IC0+XG4gICAgICAgICBpZiBzdCA9IDAgdGhlbiBMaXN0IFtdXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICAgICAgICAgICBsZXQgaSA9IHJlZiBzIGluXG4gICAgICAgICAgIGlmIHN0ID4gMCB0aGVuXG4gICAgICAgICAgICAgKHdoaWxlICFpIDwgZSBkbyBpdGVtcyA6PSBJbnRlZ2VyICFpIDo6ICFpdGVtczsgaSA6PSAhaSArIHN0IGRvbmUpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAod2hpbGUgIWkgPiBlIGRvIGl0ZW1zIDo9IEludGVnZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsgc3QgZG9uZSk7XG4gICAgICAgICAgIExpc3QgKExpc3QucmV2ICFpdGVtcylcbiAgICAgICB8IF8gLT5cbiAgICAgICAgIGxldCBzID0gYXNfbnVtYmVyIHN0YXJ0X3YgYW5kIGUgPSBhc19udW1iZXIgc3RvcF92IGFuZCBzdCA9IGFzX251bWJlciBzdGVwX3YgaW5cbiAgICAgICAgIGlmIHN0ID0gMC4wIHRoZW4gTGlzdCBbXVxuICAgICAgICAgZWxzZVxuICAgICAgICAgICBsZXQgaXRlbXMgPSByZWYgW10gaW5cbiAgICAgICAgICAgbGV0IGkgPSByZWYgcyBpblxuICAgICAgICAgICBpZiBzdCA+IDAuMCB0aGVuXG4gICAgICAgICAgICAgKHdoaWxlICFpIDwgZSBkbyBpdGVtcyA6PSBOdW1iZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsuIHN0IGRvbmUpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAod2hpbGUgIWkgPiBlIGRvIGl0ZW1zIDo9IE51bWJlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKy4gc3QgZG9uZSk7XG4gICAgICAgICAgIExpc3QgKExpc3QucmV2ICFpdGVtcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmFuZ2U6IDEtMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzbGljZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBzdGFydF92XSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoYXNfaW50IHN0YXJ0X3YpIGluXG4gICAgICBsZXQgcmVjIGRyb3AgbiA9IGZ1bmN0aW9uIF8gOjogeHMgd2hlbiBuID4gMCAtPiBkcm9wIChuLTEpIHhzIHwgbCAtPiBsIGluXG4gICAgICBMaXN0IChkcm9wIGkgbClcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChhc19pbnQgc3RhcnRfdikgYW5kIGogPSBhc19pbnQgZW5kX3YgaW5cbiAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICBsZXQgaiA9IG1pbiBqIGxlbiBpblxuICAgICAgbGV0IHJlYyB0YWtlX3JhbmdlIGlkeCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW11cbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgaWYgaWR4ID49IGogdGhlbiBbXVxuICAgICAgICAgIGVsc2UgaWYgaWR4ID49IGkgdGhlbiB4IDo6IHRha2VfcmFuZ2UgKGlkeCsxKSB4c1xuICAgICAgICAgIGVsc2UgdGFrZV9yYW5nZSAoaWR4KzEpIHhzXG4gICAgICBpbiBMaXN0ICh0YWtlX3JhbmdlIDAgbClcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdl0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGFzX2ludCBzdGFydF92KSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKFN0cmluZy5sZW5ndGggcyAtIGkpKSlcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChhc19pbnQgc3RhcnRfdikgYW5kIGogPSBhc19pbnQgZW5kX3YgaW5cbiAgICAgIGxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGogPSBtaW4gaiBzbCBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKGogLSBpKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2xpY2U6IDItMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzb3J0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IExpc3QgKExpc3Quc29ydCBjb21wYXJlIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ydDogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGxhID0gYXNfbGlzdCBhIGFuZCBsYiA9IGFzX2xpc3QgYiBpblxuICAgICAgbGV0IHJlYyBnbyBsMSBsMiBhY2MgPSBtYXRjaCBsMSwgbDIgd2l0aFxuICAgICAgICB8IHggOjogeHMsIHkgOjogeXMgLT4gZ28geHMgeXMgKExpc3QgW3g7IHldIDo6IGFjYylcbiAgICAgICAgfCBfIC0+IExpc3QucmV2IGFjY1xuICAgICAgaW4gTGlzdCAoZ28gbGEgbGIgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiemlwOiAyIGxpc3RzXCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXAtcGFpcnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPlxuICAgICAgbGV0IGwgPSBhc19saXN0IHYgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IGEgOjogYiA6OiByZXN0IC0+IExpc3QgW2E7IGJdIDo6IGdvIHJlc3RcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInppcC1wYWlyczogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ0YWtlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IG5dIC0+XG4gICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgfCB4IDo6IHhzIHdoZW4gaSA+IDAgLT4geCA6OiB0YWtlX24gKGktMSkgeHNcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0ICh0YWtlX24gKGFzX2ludCBuKSBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRha2U6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiZHJvcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBuXSAtPlxuICAgICAgbGV0IHJlYyBkcm9wX24gaSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgXyA6OiB4cyB3aGVuIGkgPiAwIC0+IGRyb3BfbiAoaS0xKSB4c1xuICAgICAgICB8IGwgLT4gbFxuICAgICAgaW4gTGlzdCAoZHJvcF9uIChhc19pbnQgbikgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkcm9wOiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcImNodW5rLWV2ZXJ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IG5dIC0+XG4gICAgICBsZXQgc2l6ZSA9IGFzX2ludCBuIGluXG4gICAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbXVxuICAgICAgICB8IGwgLT5cbiAgICAgICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgeCA6OiB4cyB3aGVuIGkgPiAwIC0+IHggOjogdGFrZV9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IF8gLT4gW11cbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCByZWMgZHJvcF9uIGkgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBfIDo6IHhzIHdoZW4gaSA+IDAgLT4gZHJvcF9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IGwgLT4gbFxuICAgICAgICAgIGluXG4gICAgICAgICAgTGlzdCAodGFrZV9uIHNpemUgbCkgOjogZ28gKGRyb3BfbiBzaXplIGwpXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNodW5rLWV2ZXJ5OiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcInVuaXF1ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pXSAtPlxuICAgICAgbGV0IHNlZW4gPSBIYXNodGJsLmNyZWF0ZSAxNiBpblxuICAgICAgbGV0IHJlc3VsdCA9IExpc3QuZmlsdGVyIChmdW4geCAtPlxuICAgICAgICBsZXQga2V5ID0gaW5zcGVjdCB4IGluXG4gICAgICAgIGlmIEhhc2h0YmwubWVtIHNlZW4ga2V5IHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSAoSGFzaHRibC5yZXBsYWNlIHNlZW4ga2V5IHRydWU7IHRydWUpXG4gICAgICApIGwgaW5cbiAgICAgIExpc3QgcmVzdWx0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidW5pcXVlOiAxIGxpc3RcIikpO1xuXG4gICgqID09PSBEaWN0ID09PSAqKVxuICByZWdpc3RlciBcImRpY3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBEaWN0IGRcbiAgICAgIHwgS2V5d29yZCBrIDo6IHYgOjogcmVzdCAtPiBkaWN0X3NldCBkIGsgdjsgZ28gcmVzdFxuICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gZGljdF9zZXQgZCBrIHY7IGdvIHJlc3RcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Q6IHBhaXJzIG9mIGtleSB2YWx1ZVwiKVxuICAgIGluIGdvIGFyZ3MpO1xuICByZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IFtMaXN0IGw7IG5dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfTsgbl1cbiAgICAgICAgd2hlbiAobWF0Y2ggbiB3aXRoIE51bWJlciBfIHwgSW50ZWdlciBfIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgKHRyeSBMaXN0Lm50aCBsIChhc19pbnQgbikgd2l0aCBfIC0+IE5pbClcbiAgICB8IFtOaWw7IF9dIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgICB8IFtfOyBfXSAtPiBOaWwgICAgKCogdHlwZSBtaXNtYXRjaCDihpIgbmlsIChtYXRjaGVzIEpTL1B5dGhvbiBiZWhhdmlvcikgKilcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJoYXMta2V5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IEJvb2wgKGRpY3RfaGFzIGQgaylcbiAgICB8IFtEaWN0IGQ7IEtleXdvcmQga10gLT4gQm9vbCAoZGljdF9oYXMgZCBrKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhcy1rZXk/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImFzc29jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBEaWN0IGQgOjogcmVzdCAtPlxuICAgICAgbGV0IGQyID0gSGFzaHRibC5jb3B5IGQgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IERpY3QgZDJcbiAgICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IEtleXdvcmQgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogcGFpcnNcIilcbiAgICAgIGluIGdvIHJlc3RcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogZGljdCArIHBhaXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNzb2NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IERpY3QgZCA6OiBrZXlzIC0+XG4gICAgICBsZXQgZDIgPSBIYXNodGJsLmNvcHkgZCBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gayAtPiBIYXNodGJsLnJlbW92ZSBkMiAodG9fc3RyaW5nIGspKSBrZXlzO1xuICAgICAgRGljdCBkMlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpc3NvYzogZGljdCArIGtleXNcIikpO1xuICByZWdpc3RlciBcIm1lcmdlXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8IERpY3Qgc3JjIC0+IEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgZCBrIHYpIHNyY1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWVyZ2U6IGFsbCBhcmdzIG11c3QgYmUgZGljdHNcIilcbiAgICApIGFyZ3M7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJrZXlzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IExpc3QgKGRpY3Rfa2V5cyBkKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXlzOiAxIGRpY3RcIikpO1xuICByZWdpc3RlciBcInZhbHNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gTGlzdCAoZGljdF92YWxzIGQpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZhbHM6IDEgZGljdFwiKSk7XG4gIHJlZ2lzdGVyIFwibXV0YWJsZS1saXN0XCIgKGZ1biBfYXJncyAtPiBMaXN0UmVmIChyZWYgW10pKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbnRoIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgaWR4OyB2XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgaWR4IGluXG4gICAgICBsZXQgbCA9ICFyIGluXG4gICAgICByIDo9IExpc3QubWFwaSAoZnVuIGogeCAtPiBpZiBqID0gaSB0aGVuIHYgZWxzZSB4KSBsO1xuICAgICAgTmlsXG4gICAgfCBbTGlzdCBfOyBfOyBfXSAtPlxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbnRoITogbGlzdCBpcyBpbW11dGFibGUsIHVzZSBMaXN0UmVmXCIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW50aCE6IGV4cGVjdGVkIChsaXN0IGlkeCB2YWwpXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Qtc2V0ITogZGljdCBrZXkgdmFsXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWdldDogZGljdCBhbmQga2V5XCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWhhcz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrXSAtPiBCb29sIChkaWN0X2hhcyBkIGspXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1oYXM/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImRpY3QtZGVsZXRlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZGVsZXRlIGQgazsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1kZWxldGUhOiBkaWN0IGFuZCBrZXlcIikpO1xuXG4gICgqID09PSBNaXNjID09PSAqKVxuICByZWdpc3RlciBcInR5cGUtb2ZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAodHlwZV9vZiBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0eXBlLW9mOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5zcGVjdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChpbnNwZWN0IGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluc3BlY3Q6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXJpYWxpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEV4cHIgc10gLT4gU3RyaW5nIHNcbiAgICB8IFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPlxuICAgICAgKCogU2VyaWFsaXplIHNwcmVhZCB2YWx1ZXMgYXMgKG1ha2Utc3ByZWFkIHs6a2V5IFwidmFsXCIgLi4ufSkgKilcbiAgICAgIGxldCBkaWN0X3BhcnRzID0gTGlzdC5tYXAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCI6JXMgJXNcIiBrIChpbnNwZWN0IHYpKSBwYWlycyBpblxuICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIihtYWtlLXNwcmVhZCB7JXN9KVwiIChTdHJpbmcuY29uY2F0IFwiIFwiIGRpY3RfcGFydHMpKVxuICAgIHwgW0NvbXBvbmVudCBjXSAtPlxuICAgICAgKCogU2VyaWFsaXplIGNvbXBvbmVudCB2YWx1ZXMgYXMgdGhlaXIgfm5hbWUgcmVmZXJlbmNlICopXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwifiVzXCIgYy5jX25hbWUpXG4gICAgfCBbSXNsYW5kIGldIC0+XG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwifiVzXCIgaS5pX25hbWUpXG4gICAgfCBbTGFtYmRhIF9dIC0+IFN0cmluZyBcIjxsYW1iZGE+XCJcbiAgICB8IFtSZWNvcmQgcl0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiM8JXM+XCIgci5yX3R5cGUucnRfbmFtZSlcbiAgICB8IFtQYXJhbWV0ZXIgcF0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiM8cGFyYW1ldGVyICVzPlwiIHAucG1fdWlkKVxuICAgIHwgW1ZlY3RvciBhcnJdIC0+XG4gICAgICBsZXQgZWx0cyA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIHYgLT4gaW5zcGVjdCB2KSBhcnIpIGluXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiIyglcylcIiAoU3RyaW5nLmNvbmNhdCBcIiBcIiBlbHRzKSlcbiAgICB8IFthXSAtPiBTdHJpbmcgKGluc3BlY3QgYSkgICgqIHVzZWQgZm9yIGRlZHVwIGtleXMgaW4gY29tcGlsZXIgKilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXJpYWxpemU6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXN5bWJvbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBTeW1ib2wgc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ltYm9sOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcImVycm9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgbXNnXSAtPiByYWlzZSAoRXZhbF9lcnJvciBtc2cpXG4gICAgfCBbYV0gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKHRvX3N0cmluZyBhKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlcnJvcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImhvc3QtZXJyb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBtc2ddIC0+IHJhaXNlIChFdmFsX2Vycm9yIG1zZylcbiAgICB8IFthXSAtPiByYWlzZSAoRXZhbF9lcnJvciAodG9fc3RyaW5nIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhvc3QtZXJyb3I6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJob3N0LXdhcm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbXNnXSAtPiBwcmVycl9lbmRsaW5lIG1zZzsgTmlsXG4gICAgfCBbYV0gLT4gcHJlcnJfZW5kbGluZSAodG9fc3RyaW5nIGEpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJob3N0LXdhcm46IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0cnktY2F0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0cnlfZm47IGNhdGNoX2ZuXSAtPlxuICAgICAgKHRyeSAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiB0cnlfZm4gW10pXG4gICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gY2F0Y2hfZm4gW1N0cmluZyBtc2ddKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cnktY2F0Y2g6IGV4cGVjdGVkICh0cnktZm4gY2F0Y2gtZm4pXCIpKTtcbiAgKCogY2xpZW50PyDigJQgZmFsc2UgYnkgZGVmYXVsdCAoc2VydmVyKTsgc3hfYnJvd3Nlci5tbCBzZXRzIF9pc19jbGllbnQgOj0gdHJ1ZSAqKVxuICByZWdpc3RlciBcImNsaWVudD9cIiAoZnVuIF9hcmdzIC0+IEJvb2wgIV9pc19jbGllbnQpO1xuICAoKiBOYW1lZCBzdG9yZXMg4oCUIGdsb2JhbCBtdXRhYmxlIHJlZ2lzdHJ5LCBieXBhc3NlcyBlbnYgc2NvcGluZyBpc3N1ZXMgKilcbiAgbGV0IHN0b3JlX3JlZ2lzdHJ5IDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gIHJlZ2lzdGVyIFwiZGVmLXN0b3JlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IGluaXRfZm5dIC0+XG4gICAgICBpZiBub3QgKEhhc2h0YmwubWVtIHN0b3JlX3JlZ2lzdHJ5IG5hbWUpIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHN0b3JlID0gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gaW5pdF9mbiBbXSkgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHN0b3JlX3JlZ2lzdHJ5IG5hbWUgc3RvcmVcbiAgICAgIGVuZDtcbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN0b3JlX3JlZ2lzdHJ5IG5hbWUgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlZi1zdG9yZTogZXhwZWN0ZWQgKG5hbWUgaW5pdC1mbilcIikpO1xuICByZWdpc3RlciBcInVzZS1zdG9yZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgc3RvcmVfcmVnaXN0cnkgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJTdG9yZSBub3QgZm91bmQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVzZS1zdG9yZTogZXhwZWN0ZWQgKG5hbWUpXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbGVhci1zdG9yZXNcIiAoZnVuIF9hcmdzIC0+IEhhc2h0YmwuY2xlYXIgc3RvcmVfcmVnaXN0cnk7IE5pbCk7XG4gICgqIFNTUiBzdHVicyDigJQgcmVzb3VyY2UgcmV0dXJucyBsb2FkaW5nIHN0YXRlIG9uIHNlcnZlci5cbiAgICAgTk9URTogZWZmZWN0IGFuZCByZWdpc3Rlci1pbi1zY29wZSBtdXN0IE5PVCBiZSByZWdpc3RlcmVkIGFzIHByaW1pdGl2ZXNcbiAgICAgaGVyZSDigJQgdGhlIGJ5dGVjb2RlIGNvbXBpbGVyIHVzZXMgcHJpbWl0aXZlPyB0byBkZWNpZGUgQ0FMTF9QUklNIHZzXG4gICAgIEdMT0JBTF9HRVQrQ0FMTC4gSWYgZWZmZWN0IGlzIGEgcHJpbWl0aXZlLCBieXRlY29kZWQgbW9kdWxlcyBlbWl0XG4gICAgIENBTExfUFJJTSB3aGljaCByZXR1cm5zIE5pbCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIHJlYWwgZWZmZWN0IGZ1bmN0aW9uXG4gICAgIGZyb20gY29yZS1zaWduYWxzLnN4LiBUaGUgc2VydmVyIG92ZXJyaWRlcyBlZmZlY3QgaW4gc3hfc2VydmVyLm1sIHZpYVxuICAgICBlbnZfYmluZCBBRlRFUiBjb21waWxhdGlvbi4gKilcbiAgKCogcmVnaXN0ZXIgXCJlZmZlY3RcIiDigJQgUkVNT1ZFRDogc2VlIG5vdGUgYWJvdmUgKilcbiAgKCogcmVnaXN0ZXIgXCJyZWdpc3Rlci1pbi1zY29wZVwiIOKAlCBSRU1PVkVEOiBzZWUgbm90ZSBhYm92ZSAqKVxuICAoKiByZXNvdXJjZSDigJQgU1NSIHN0dWI6IHJldHVybiBzaWduYWwgd2l0aCB7bG9hZGluZzogdHJ1ZX0sIGNsaWVudCBoeWRyYXRlcyByZWFsIGZldGNoICopXG4gIHJlZ2lzdGVyIFwicmVzb3VyY2VcIiAoZnVuIF9hcmdzIC0+XG4gICAgbGV0IHN0YXRlID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImxvYWRpbmdcIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc3RhdGUgXCJkYXRhXCIgTmlsO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImVycm9yXCIgTmlsO1xuICAgIGxldCBzaWdfZCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJfX3NpZ25hbFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInZhbHVlXCIgKERpY3Qgc3RhdGUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInN1YnNjcmliZXJzXCIgKExpc3QgW10pO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcImRlcHNcIiAoTGlzdCBbXSk7XG4gICAgRGljdCBzaWdfZCk7XG4gIHJlZ2lzdGVyIFwiYXBwbHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgY2FsbCBmIGEgPVxuICAgICAgbWF0Y2ggZiB3aXRoXG4gICAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYVxuICAgICAgfCBfIC0+ICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIGYgYSlcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pXSAtPiBjYWxsIGYgYVxuICAgIHwgW2Y7IE5pbF0gLT4gY2FsbCBmIFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHk6IGZ1bmN0aW9uIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJpZGVudGljYWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBpZGVudGljYWwgPSBtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiB4ID0geVxuICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiB4ID0geVxuICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IHggPSB5XG4gICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiB4ID0gZmxvYXRfb2ZfaW50IHlcbiAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4geCA9IHlcbiAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICAgICAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGEgPT0gYlxuICAgICAgaW4gQm9vbCBpZGVudGljYWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpZGVudGljYWw/OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1ha2Utc3ByZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkXSAtPlxuICAgICAgbGV0IHBhaXJzID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiAoaywgdikgOjogYWNjKSBkIFtdIGluXG4gICAgICBTcHJlYWQgcGFpcnNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXNwcmVhZDogMSBkaWN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTcHJlYWQgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ByZWFkLWF0dHJzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPlxuICAgICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBkaWN0X3NldCBkIGsgdikgcGFpcnM7XG4gICAgICBEaWN0IGRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQtYXR0cnM6IDEgc3ByZWFkXCIpKTtcblxuICAoKiBIaWdoZXItb3JkZXIgZm9ybXMgYXMgY2FsbGFibGUgcHJpbWl0aXZlcyDigJQgdXNlZCBieSB0aGUgVk0uXG4gICAgIFRoZSBDRUsgbWFjaGluZSBoYW5kbGVzIHRoZXNlIGFzIHNwZWNpYWwgZm9ybXMgd2l0aCBkZWRpY2F0ZWQgZnJhbWVzO1xuICAgICB0aGUgVk0gbmVlZHMgdGhlbSBhcyBwbGFpbiBjYWxsYWJsZSB2YWx1ZXMuICopXG4gICgqIENhbGwgYW55IFNYIGNhbGxhYmxlIOKAlCBoYW5kbGVzIE5hdGl2ZUZuLCBMYW1iZGEgKHZpYSB0cmFtcG9saW5lKSwgVk0gY2xvc3VyZXMgKilcbiAgbGV0IGNhbGxfYW55IGYgYXJncyA9XG4gICAgbWF0Y2ggZiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgICB8IF8gLT4gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gZiBhcmdzKVxuICBpblxuICByZWdpc3RlciBcIm1hcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gY2FsbF9hbnkgZiBbeF0pIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1hcDogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYXAtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHggLT4gY2FsbF9hbnkgZiBbSW50ZWdlciBpOyB4XSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwLWluZGV4ZWQ6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsdGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QuZmlsdGVyIChmdW4geCAtPiBzeF90cnV0aHkgKGNhbGxfYW55IGYgW3hdKSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsdGVyOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImZvci1lYWNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gaWdub3JlIChjYWxsX2FueSBmIFt4XSkpIGl0ZW1zOyBOaWxcbiAgICB8IFtfOyBOaWxdIC0+IE5pbCAgKCogbmlsIGNvbGxlY3Rpb24gPSBuby1vcCAqKVxuICAgIHwgXyAtPlxuICAgICAgbGV0IHR5cGVzID0gU3RyaW5nLmNvbmNhdCBcIiwgXCIgKExpc3QubWFwIChmdW4gdiAtPiB0eXBlX29mIHYpIGFyZ3MpIGluXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJmb3ItZWFjaDogZXhwZWN0ZWQgKGZuIGxpc3QpLCBnb3QgKCVzKSAlZCBhcmdzXCIgdHlwZXMgKExpc3QubGVuZ3RoIGFyZ3MpKSkpO1xuICByZWdpc3RlciBcInJlZHVjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGluaXQ7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IGNhbGxfYW55IGYgW2FjYzsgeF0pIGluaXQgaXRlbXNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWR1Y2U6IGV4cGVjdGVkIChmbiBpbml0IGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJzb21lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gQm9vbCBmYWxzZVxuICAgICAgICB8IHggOjogcmVzdCAtPlxuICAgICAgICAgIGxldCByZXN1bHQgPSBjYWxsX2FueSBmIFt4XSBpblxuICAgICAgICAgIGlmIHN4X3RydXRoeSByZXN1bHQgdGhlbiByZXN1bHQgZWxzZSBmaW5kIHJlc3RcbiAgICAgIGluIGZpbmQgaXRlbXNcbiAgICB8IFtfOyBOaWxdIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb21lOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImV2ZXJ5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBCb29sIChMaXN0LmZvcl9hbGwgKGZ1biB4IC0+IHN4X3RydXRoeSAoY2FsbF9hbnkgZiBbeF0pKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2ZXJ5PzogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcblxuICAoKiAtLS0tIFZNIHN0YWNrIHByaW1pdGl2ZXMgKHZtLnN4IHBsYXRmb3JtIGludGVyZmFjZSkgLS0tLSAqKVxuICByZWdpc3RlciBcIm1ha2Utdm0tc3RhY2tcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtuXSAtPiBMaXN0UmVmIChyZWYgKExpc3QuaW5pdCAoYXNfaW50IG4pIChmdW4gXyAtPiBOaWwpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXZtLXN0YWNrOiBleHBlY3RlZCAoc2l6ZSlcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgbl0gLT4gTGlzdC5udGggIXIgKGFzX2ludCBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWdldDogZXhwZWN0ZWQgKHN0YWNrIGlkeClcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IG47IHZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICByIDo9IExpc3QubWFwaSAoZnVuIGogeCAtPiBpZiBqID0gaSB0aGVuIHYgZWxzZSB4KSAhcjsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm0tc3RhY2stc2V0ITogZXhwZWN0ZWQgKHN0YWNrIGlkeCB2YWwpXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2bS1zdGFjay1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHJdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoICFyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWxlbmd0aDogZXhwZWN0ZWQgKHN0YWNrKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stY29weSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHNyYzsgTGlzdFJlZiBkc3Q7IG5dIC0+XG4gICAgICBsZXQgY291bnQgPSBhc19pbnQgbiBpblxuICAgICAgbGV0IHNyY19pdGVtcyA9ICFzcmMgaW5cbiAgICAgIGRzdCA6PSBMaXN0Lm1hcGkgKGZ1biBpIHggLT4gaWYgaSA8IGNvdW50IHRoZW4gTGlzdC5udGggc3JjX2l0ZW1zIGkgZWxzZSB4KSAhZHN0OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1jb3B5ITogZXhwZWN0ZWQgKHNyYyBkc3QgY291bnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJwcmltaXRpdmU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+IEJvb2wgKEhhc2h0YmwubWVtIHByaW1pdGl2ZXMgbmFtZSlcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogU2NvcGUgc3RhY2sgcHJpbWl0aXZlcyBhcmUgcmVnaXN0ZXJlZCBieSBzeF9zZXJ2ZXIubWwgLyBydW5fdGVzdHMubWxcbiAgICAgYmVjYXVzZSB0aGV5IHVzZSBhIHNoYXJlZCBzY29wZSBzdGFja3MgdGFibGUgd2l0aCBjb2xsZWN0IS9jb2xsZWN0ZWQuICopXG5cbiAgKCogLS0tLSBQcmVkaWNhdGVzIG5lZWRlZCBieSBhZGFwdGVyLWh0bWwuc3ggLS0tLSAqKVxuICByZWdpc3RlciBcImxhbWJkYT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImlzbGFuZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuXG4gICgqIFI3UlMgcmVjb3JkcyAqKVxuICByZWdpc3RlciBcInJlY29yZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHJlY29yZF9wIHYgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcIm1ha2UtcnRkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtuYW1lOyBmaWVsZHM7IGN0b3JfcGFyYW1zXSAtPiBtYWtlX3J0ZCBuYW1lIGZpZWxkcyBjdG9yX3BhcmFtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcnRkOiBleHBlY3RlZCAobmFtZSBmaWVsZHMgY3Rvci1wYXJhbXMpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXJlY29yZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkOyBhcmdfbGlzdF0gLT4gbWFrZV9yZWNvcmQgdWlkIGFyZ19saXN0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQ6IGV4cGVjdGVkICh1aWQgYXJncy1saXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVjb3JkLXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgaWR4XSAtPiByZWNvcmRfcmVmIHYgaWR4XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkLXJlZjogZXhwZWN0ZWQgKHJlY29yZCBpbmRleClcIikpO1xuICByZWdpc3RlciBcInJlY29yZC1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2OyBpZHg7IG52XSAtPiByZWNvcmRfc2V0X2IgdiBpZHggbnZcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQtc2V0ITogZXhwZWN0ZWQgKHJlY29yZCBpbmRleCB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInJlY29yZC10eXBlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgdWlkXSAtPiByZWNvcmRfdHlwZV9wIHYgdWlkIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXJlY29yZC1jb25zdHJ1Y3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkXSAtPiBtYWtlX3JlY29yZF9jb25zdHJ1Y3RvciB1aWRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1jb25zdHJ1Y3RvcjogZXhwZWN0ZWQgKHVpZClcIikpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkLXByZWRpY2F0ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkXSAtPiBtYWtlX3JlY29yZF9wcmVkaWNhdGUgdWlkXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtcHJlZGljYXRlOiBleHBlY3RlZCAodWlkKVwiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yZWNvcmQtYWNjZXNzb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2lkeF0gLT4gbWFrZV9yZWNvcmRfYWNjZXNzb3IgaWR4XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtYWNjZXNzb3I6IGV4cGVjdGVkIChpbmRleClcIikpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkLW11dGF0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2lkeF0gLT4gbWFrZV9yZWNvcmRfbXV0YXRvciBpZHhcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1tdXRhdG9yOiBleHBlY3RlZCAoaW5kZXgpXCIpKTtcbiAgKCogUjdSUyBwYXJhbWV0ZXJzIOKAlCBjb252ZXJ0ZXIgc3RvcmVkLCBhcHBsaWVkIGJ5IHBhcmFtZXRlcml6ZSBmcmFtZSAqKVxuICByZWdpc3RlciBcIm1ha2UtcGFyYW1ldGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbaW5pdF0gLT5cbiAgICAgIGxldCB1aWQgPSAhcGFyYW1fY291bnRlciBpblxuICAgICAgaW5jciBwYXJhbV9jb3VudGVyO1xuICAgICAgUGFyYW1ldGVyIHsgcG1fdWlkID0gXCJfX3BhcmFtX1wiIF4gc3RyaW5nX29mX2ludCB1aWQ7XG4gICAgICAgICAgICAgICAgICBwbV9kZWZhdWx0ID0gaW5pdDsgcG1fY29udmVydGVyID0gTm9uZSB9XG4gICAgfCBbaW5pdDsgY29udmVydGVyXSAtPlxuICAgICAgbGV0IHVpZCA9ICFwYXJhbV9jb3VudGVyIGluXG4gICAgICBpbmNyIHBhcmFtX2NvdW50ZXI7XG4gICAgICAoKiBBcHBseSBjb252ZXJ0ZXIgdG8gaW5pdCBmb3IgTmF0aXZlRm4sIHN0b3JlIHJhdyBmb3IgTGFtYmRhICopXG4gICAgICBsZXQgY29udmVydGVkID0gbWF0Y2ggY29udmVydGVyIHdpdGhcbiAgICAgICAgfCBOYXRpdmVGbiAoXywgZikgLT4gZiBbaW5pdF1cbiAgICAgICAgfCBfIC0+IGluaXQgICgqIExhbWJkYSBjb252ZXJ0ZXJzIGFwcGxpZWQgdmlhIENFSyBhdCBwYXJhbWV0ZXJpemUgdGltZSAqKVxuICAgICAgaW5cbiAgICAgIFBhcmFtZXRlciB7IHBtX3VpZCA9IFwiX19wYXJhbV9cIiBeIHN0cmluZ19vZl9pbnQgdWlkO1xuICAgICAgICAgICAgICAgICAgcG1fZGVmYXVsdCA9IGNvbnZlcnRlZDsgcG1fY29udmVydGVyID0gU29tZSBjb252ZXJ0ZXIgfVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcGFyYW1ldGVyOiBleHBlY3RlZCAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbUGFyYW1ldGVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcInBhcmFtZXRlci11aWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1BhcmFtZXRlciBwXSAtPiBTdHJpbmcgcC5wbV91aWRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItdWlkOiBleHBlY3RlZCBwYXJhbWV0ZXJcIikpO1xuICByZWdpc3RlciBcInBhcmFtZXRlci1kZWZhdWx0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtQYXJhbWV0ZXIgcF0gLT4gcC5wbV9kZWZhdWx0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLWRlZmF1bHQ6IGV4cGVjdGVkIHBhcmFtZXRlclwiKSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyLWNvbnZlcnRlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BhcmFtZXRlciBwXSAtPiAobWF0Y2ggcC5wbV9jb252ZXJ0ZXIgd2l0aCBTb21lIGMgLT4gYyB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcmFtZXRlci1jb252ZXJ0ZXI6IGV4cGVjdGVkIHBhcmFtZXRlclwiKSk7XG4gICgqIFI3UlMgdmVjdG9ycyDigJQgbXV0YWJsZSBmaXhlZC1zaXplIGFycmF5cyAqKVxuICByZWdpc3RlciBcIm1ha2UtdmVjdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbbl0gLT4gVmVjdG9yIChBcnJheS5tYWtlIChhc19pbnQgbikgTmlsKVxuICAgIHwgW247IGZpbGxdIC0+IFZlY3RvciAoQXJyYXkubWFrZSAoYXNfaW50IG4pIGZpbGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS12ZWN0b3I6IGV4cGVjdGVkIChsZW5ndGgpIG9yIChsZW5ndGggZmlsbClcIikpO1xuICByZWdpc3RlciBcInZlY3RvclwiIChmdW4gYXJncyAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgYXJncykpO1xuICByZWdpc3RlciBcInZlY3Rvcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1ZlY3RvciBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2ZWN0b3ItbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtWZWN0b3IgYXJyXSAtPiBJbnRlZ2VyIChBcnJheS5sZW5ndGggYXJyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1sZW5ndGg6IGV4cGVjdGVkIHZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1ZlY3RvciBhcnI7IG5dIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICBpZiBpIDwgMCB8fCBpID49IEFycmF5Lmxlbmd0aCBhcnIgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJ2ZWN0b3ItcmVmOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzIChsZW5ndGggJWQpXCIgaSAoQXJyYXkubGVuZ3RoIGFycikpKTtcbiAgICAgIGFyci4oaSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2ZWN0b3ItcmVmOiBleHBlY3RlZCAodmVjdG9yIGluZGV4KVwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtWZWN0b3IgYXJyOyBuOyB2XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgbiBpblxuICAgICAgaWYgaSA8IDAgfHwgaSA+PSBBcnJheS5sZW5ndGggYXJyIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwidmVjdG9yLXNldCE6IGluZGV4ICVkIG91dCBvZiBib3VuZHMgKGxlbmd0aCAlZClcIiBpIChBcnJheS5sZW5ndGggYXJyKSkpO1xuICAgICAgYXJyLihpKSA8LSB2OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2ZWN0b3Itc2V0ITogZXhwZWN0ZWQgKHZlY3RvciBpbmRleCB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci0+bGlzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbVmVjdG9yIGFycl0gLT4gTGlzdCAoQXJyYXkudG9fbGlzdCBhcnIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yLT5saXN0OiBleHBlY3RlZCB2ZWN0b3JcIikpO1xuICByZWdpc3RlciBcImxpc3QtPnZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gLT4gVmVjdG9yIChBcnJheS5vZl9saXN0IGwpXG4gICAgfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0LT52ZWN0b3I6IGV4cGVjdGVkIGxpc3RcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci1maWxsIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1ZlY3RvciBhcnI7IHZdIC0+IEFycmF5LmZpbGwgYXJyIDAgKEFycmF5Lmxlbmd0aCBhcnIpIHY7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1maWxsITogZXhwZWN0ZWQgKHZlY3RvciB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci1jb3B5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbVmVjdG9yIGFycl0gLT4gVmVjdG9yIChBcnJheS5jb3B5IGFycilcbiAgICB8IFtWZWN0b3IgYXJyOyBzXSAtPlxuICAgICAgbGV0IHN0YXJ0ID0gYXNfaW50IHMgaW5cbiAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYXJyIC0gc3RhcnQgaW5cbiAgICAgIGlmIGxlbiA8PSAwIHRoZW4gVmVjdG9yIFt8fF0gZWxzZSBWZWN0b3IgKEFycmF5LnN1YiBhcnIgc3RhcnQgbGVuKVxuICAgIHwgW1ZlY3RvciBhcnI7IHM7IGVdIC0+XG4gICAgICBsZXQgc3RhcnQgPSBhc19pbnQgcyBpblxuICAgICAgbGV0IHN0b3AgPSBtaW4gKGFzX2ludCBlKSAoQXJyYXkubGVuZ3RoIGFycikgaW5cbiAgICAgIGxldCBsZW4gPSBzdG9wIC0gc3RhcnQgaW5cbiAgICAgIGlmIGxlbiA8PSAwIHRoZW4gVmVjdG9yIFt8fF0gZWxzZSBWZWN0b3IgKEFycmF5LnN1YiBhcnIgc3RhcnQgbGVuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1jb3B5OiBleHBlY3RlZCAodmVjdG9yKSBvciAodmVjdG9yIHN0YXJ0KSBvciAodmVjdG9yIHN0YXJ0IGVuZClcIikpO1xuXG4gICgqIFN0cmluZyBidWZmZXJzIOKAlCBPKDEpIGFtb3J0aXNlZCBhcHBlbmQgZm9yIHN0cmluZyBidWlsZGluZyBpbiBsb29wcyAqKVxuICByZWdpc3RlciBcIm1ha2Utc3RyaW5nLWJ1ZmZlclwiIChmdW4gXyAtPiBTdHJpbmdCdWZmZXIgKEJ1ZmZlci5jcmVhdGUgNjQpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWJ1ZmZlcj86IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyLWFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmdCdWZmZXIgYnVmOyBTdHJpbmcgc10gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBfOyB2XSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJzdHJpbmctYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIHN0cmluZywgZ290IFwiIF4gdHlwZV9vZiB2KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIChidWZmZXIgc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWJ1ZmZlci0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmdCdWZmZXIgYnVmXSAtPiBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWJ1ZmZlci0+c3RyaW5nOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWJ1ZmZlci1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZ0J1ZmZlciBidWZdIC0+IEludGVnZXIgKEJ1ZmZlci5sZW5ndGggYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1idWZmZXItbGVuZ3RoOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG5cbiAgKCogU2hvcnQgYWxpYXNlcyDigJQgc2FtZSBTdHJpbmdCdWZmZXIgdmFsdWUsIHRlcnNlciBuYW1lcyBmb3IgaG90IHBhdGhzLlxuICAgICBBcHBlbmQgYWNjZXB0cyBhbnkgdmFsdWU6IHN0cmluZ3MgcGFzcyB0aHJvdWdoLCBvdGhlcnMgZ2V0IGluc3BlY3RlZC9jb2VyY2VkLiAqKVxuICByZWdpc3RlciBcIm1ha2UtYnVmZmVyXCIgKGZ1biBfIC0+IFN0cmluZ0J1ZmZlciAoQnVmZmVyLmNyZWF0ZSA2NCkpO1xuICByZWdpc3RlciBcImJ1ZmZlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZ0J1ZmZlciBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ1ZmZlcj86IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJidWZmZXItYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IFN0cmluZyBzXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgczsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgSW50ZWdlciBuXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgbik7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IE51bWJlciBuXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgbik7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IFN5bWJvbCBzXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgczsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgQ2hhciBuXSAtPlxuICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciBidWYgKFVjaGFyLm9mX2ludCBuKTsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgTmlsXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcIjsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgQm9vbCB0cnVlXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJ0cnVlXCI7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IEJvb2wgZmFsc2VdIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImZhbHNlXCI7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IHZdIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoaW5zcGVjdCB2KTsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIChidWZmZXIgdmFsdWUpXCIpKTtcbiAgcmVnaXN0ZXIgXCJidWZmZXItPnN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIGJ1Zl0gLT4gU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ1ZmZlci0+c3RyaW5nOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYnVmZmVyLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIGJ1Zl0gLT4gSW50ZWdlciAoQnVmZmVyLmxlbmd0aCBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnVmZmVyLWxlbmd0aDogZXhwZWN0ZWQgKGJ1ZmZlcilcIikpO1xuXG4gICgqIENhcGFiaWxpdHktYmFzZWQgc2FuZGJveGluZyDigJQgZ2F0ZSBJTyBvcGVyYXRpb25zICopXG4gIGxldCBjYXBfc3RhY2sgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW10gaW5cbiAgcmVnaXN0ZXIgXCJ3aXRoLWNhcGFiaWxpdGllc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgY2FwczsgYm9keV0gLT5cbiAgICAgIGxldCBjYXBfc2V0ID0gTGlzdC5maWx0ZXJfbWFwIChmdW4gdiAtPiBtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBTeW1ib2wgcyB8IFN0cmluZyBzIHwgS2V5d29yZCBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgY2FwcyBpblxuICAgICAgbGV0IHByZXYgPSAhY2FwX3N0YWNrIGluXG4gICAgICBjYXBfc3RhY2sgOj0gY2FwX3NldDtcbiAgICAgIChtYXRjaCBib2R5IHdpdGhcbiAgICAgICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gKHRyeSAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBib2R5IE5pbFxuICAgICAgICAgICB3aXRoIGV4biAtPiBjYXBfc3RhY2sgOj0gcHJldjsgcmFpc2UgZXhuKSBpblxuICAgICAgICAgY2FwX3N0YWNrIDo9IHByZXY7IHJlc3VsdFxuICAgICAgIHwgXyAtPiBjYXBfc3RhY2sgOj0gcHJldjsgYm9keSlcbiAgICB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBjYXBzIH07IGJvZHldIC0+XG4gICAgICAoKiBIYW5kbGUgbXV0YWJsZSBsaXN0cyB0b28gKilcbiAgICAgIGxldCBjYXBfc2V0ID0gTGlzdC5maWx0ZXJfbWFwIChmdW4gdiAtPiBtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBTeW1ib2wgcyB8IFN0cmluZyBzIHwgS2V5d29yZCBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgY2FwcyBpblxuICAgICAgbGV0IHByZXYgPSAhY2FwX3N0YWNrIGluXG4gICAgICBjYXBfc3RhY2sgOj0gY2FwX3NldDtcbiAgICAgIChtYXRjaCBib2R5IHdpdGhcbiAgICAgICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gKHRyeSAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBib2R5IE5pbFxuICAgICAgICAgICB3aXRoIGV4biAtPiBjYXBfc3RhY2sgOj0gcHJldjsgcmFpc2UgZXhuKSBpblxuICAgICAgICAgY2FwX3N0YWNrIDo9IHByZXY7IHJlc3VsdFxuICAgICAgIHwgXyAtPiBjYXBfc3RhY2sgOj0gcHJldjsgYm9keSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3aXRoLWNhcGFiaWxpdGllczogZXhwZWN0ZWQgKGNhcC1saXN0IGJvZHktZm4pXCIpKTtcbiAgcmVnaXN0ZXIgXCJjdXJyZW50LWNhcGFiaWxpdGllc1wiIChmdW4gX2FyZ3MgLT5cbiAgICBpZiAhY2FwX3N0YWNrID0gW10gdGhlbiBOaWxcbiAgICBlbHNlIExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgIWNhcF9zdGFjaykpO1xuICByZWdpc3RlciBcImhhcy1jYXBhYmlsaXR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBjYXBdIHwgW0tleXdvcmQgY2FwXSB8IFtTeW1ib2wgY2FwXSAtPlxuICAgICAgaWYgIWNhcF9zdGFjayA9IFtdIHRoZW4gQm9vbCB0cnVlICAoKiB1bnJlc3RyaWN0ZWQgKilcbiAgICAgIGVsc2UgQm9vbCAoTGlzdC5tZW0gY2FwICFjYXBfc3RhY2spXG4gICAgfCBfIC0+IEJvb2wgdHJ1ZSk7XG4gIHJlZ2lzdGVyIFwicmVxdWlyZS1jYXBhYmlsaXR5IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBjYXBdIHwgW0tleXdvcmQgY2FwXSB8IFtTeW1ib2wgY2FwXSAtPlxuICAgICAgaWYgIWNhcF9zdGFjayA9IFtdIHRoZW4gTmlsICAoKiB1bnJlc3RyaWN0ZWQgKilcbiAgICAgIGVsc2UgaWYgTGlzdC5tZW0gY2FwICFjYXBfc3RhY2sgdGhlbiBOaWxcbiAgICAgIGVsc2UgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgIFwiQ2FwYWJpbGl0eSAnJXMnIG5vdCBhdmFpbGFibGUuIEN1cnJlbnQgY2FwYWJpbGl0aWVzOiBbJXNdXCJcbiAgICAgICAgY2FwIChTdHJpbmcuY29uY2F0IFwiLCBcIiAhY2FwX3N0YWNrKSkpXG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY2FwYWJpbGl0eS1yZXN0cmljdGVkP1wiIChmdW4gX2FyZ3MgLT5cbiAgICBCb29sICghY2FwX3N0YWNrIDw+IFtdKSk7XG5cbiAgcmVnaXN0ZXIgXCJpcy1lbHNlLWNsYXVzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtLZXl3b3JkIFwiZWxzZVwiXSAtPiBCb29sIHRydWVcbiAgICB8IFtCb29sIHRydWVdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJjb25kLXNjaGVtZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGNsYXVzZXNdIC0+XG4gICAgICBCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8IExpc3QgbCAtPiBMaXN0Lmxlbmd0aCBsID0gMlxuICAgICAgICB8IF8gLT4gZmFsc2UpIGNsYXVzZXMpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImNvbXBvbmVudD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSAtPiBCb29sIHRydWUgfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gRW52IGMuY19jbG9zdXJlXG4gICAgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1oYXMtY2hpbGRyZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlblxuICAgIHwgW0lzbGFuZCBpXSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gU3RyaW5nIGMuY19uYW1lXG4gICAgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICAgIHwgW0lzbGFuZCBpXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IGMuY19ib2R5XG4gICAgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5XG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWZpbGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IGNvbXBvbmVudF9maWxlIHYgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LXNldC1maWxlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgZl0gLT4gY29tcG9uZW50X3NldF9maWxlIHYgZiB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW01hY3JvIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiZm9yLWVhY2gtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoY2FsbF9hbnkgZiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgaXRlbXM7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZvci1lYWNoLWluZGV4ZWQ6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xhbWJkYSBsXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGwubF9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImxhbWJkYS1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gICgqIGV4cGFuZC1tYWNybyBpcyByZWdpc3RlcmVkIGxhdGVyIGJ5IHJ1bl90ZXN0cy5tbCAvIHN4X3NlcnZlci5tbFxuICAgICBiZWNhdXNlIGl0IG5lZWRzIGV2YWxfZXhwciB3aGljaCBjcmVhdGVzIGEgZGVwZW5kZW5jeSBjeWNsZSAqKTtcbiAgcmVnaXN0ZXIgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBfIC0+IEJvb2wgdHJ1ZSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFJhd0hUTUwgcyB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJyYXctaHRtbC1jb250ZW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIHJlZ2lzdGVyIFwiZ2V0LXByaW1pdGl2ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgZm4gLT4gTmF0aXZlRm4gKG5hbWUsIGZuKVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG4gIHJlZ2lzdGVyIFwiY2FsbC1wcmltaXRpdmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSldIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSBmbiAtPiBmbiBhXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBbU3RyaW5nIG5hbWU7IE5pbF0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIGZuIC0+IGZuIFtdXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2FsbC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lIGFyZ3MtbGlzdClcIikpO1xuICAoKTtcblxuICAoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4gICgqIFNjb3BlIHN0YWNrcyDigJQgZHluYW1pYyBzY29wZSBmb3IgcmVuZGVyLXRpbWUgZWZmZWN0cy4gICAgICAgICAgICAqKVxuICAoKiBNaWdyYXRlZCBmcm9tIHN4X3Njb3BlLm1sIOKAlCBQaGFzZSAxIG9mIHN0ZXAgNS41ICAgICAgICAgICAgICAgICAqKVxuICAoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbiAgKCogLS0tIENvb2tpZXMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJnZXQtY29va2llXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBfcmVxdWVzdF9jb29raWVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSB2IC0+IFN0cmluZyB2XG4gICAgICAgfCBOb25lIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInNldC1jb29raWVcIiAoZnVuIF9hcmdzIC0+IE5pbCk7XG5cbiAgKCogLS0tIENvcmUgc2NvcGUgc3RhY2sgb3BlcmF0aW9ucyAtLS0gKilcblxuICByZWdpc3RlciBcInNjb3BlLXB1c2ghXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiUFVTSCAlcyBkZXB0aD0lZC0+JWRcIiBuYW1lIChMaXN0Lmxlbmd0aCBzdGFjaykgKExpc3QubGVuZ3RoIHN0YWNrICsgMSkgOjogIV9zY29wZV9sb2c7XG4gICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lICh2YWx1ZSA6OiBzdGFjayk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiUE9QICVzIGRlcHRoPSVkLT4lZFwiIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAobWF4IDAgKExpc3QubGVuZ3RoIHN0YWNrIC0gMSkpIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggXyA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgcmVzdCB8IFtdIC0+ICgpKTsgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1wZWVrXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQRUVLICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCB2IDo6IF8gLT4gdiB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQ29udGV4dCAoc2NvcGUgbG9va3VwIHdpdGggb3B0aW9uYWwgZGVmYXVsdCkgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCAoU3RyaW5nIG5hbWUpIDo6IHJlc3QgLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIkNUWCAlcyBkZXB0aD0lZCBmb3VuZD0lYlwiIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAoc3RhY2sgPD4gW10pIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IHYgOjogXyAtPiB2XG4gICAgICAgfCBbXSAtPiAobWF0Y2ggcmVzdCB3aXRoIGRlZmF1bHRfdmFsIDo6IF8gLT4gZGVmYXVsdF92YWwgfCBbXSAtPiBOaWwpKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29udGV4dC1kZWJ1Z1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGxldCBhbGxfa2V5cyA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIF9zY29wZV9zdGFja3MgW10gaW5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJuYW1lPSVzIHN0YWNrX2xlbj0lZCBhbGxfa2V5cz1bJXNdXCJcbiAgICAgICAgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChTdHJpbmcuY29uY2F0IFwiLFwiIGFsbF9rZXlzKSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiYmFkIGFyZ3NcIik7XG5cbiAgKCogLS0tIENvbGxlY3QgLyBjb2xsZWN0ZWQgLyBjbGVhci1jb2xsZWN0ZWQhIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IExpc3QgaXRlbXMgOjogcmVzdCAtPlxuICAgICAgICAgaWYgbm90IChMaXN0Lm1lbSB2YWx1ZSBpdGVtcykgdGhlblxuICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBbXSAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggTGlzdCBpdGVtcyA6OiBfIC0+IExpc3QgaXRlbXMgfCBfIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwiY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCBfIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbXSA6OiByZXN0KVxuICAgICAgIHwgW10gLT4gSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbXV0pO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFVuaWZpZWQgcmVhY3RpdmUgbW9kZWwgKFN0ZXAgMTBjKSAtLS1cbiAgICAgcHJvdmlkZSB3cmFwcyB2YWx1ZSBpbiBhIFNpZ25hbCAocmVhY3RpdmUgY2VsbCkuXG4gICAgIGNvbnRleHQgdW53cmFwcyB0aGUgc2lnbmFsICsgcmVnaXN0ZXJzIGluIHRyYWNraW5nIGNvbnRleHQuXG4gICAgIHBlZWsgdW53cmFwcyB3aXRob3V0IHRyYWNraW5nLlxuICAgICBwcm92aWRlISBtdXRhdGVzIHRoZSBzaWduYWwgYW5kIG5vdGlmaWVzIHN1YnNjcmliZXJzLiAqKVxuXG4gIGxldCBfdHJhY2tpbmdfYWN0aXZlIDogYm9vbCByZWYgPSByZWYgZmFsc2UgaW5cbiAgbGV0IF90cmFja2luZ19kZXBzIDogdmFsdWUgbGlzdCByZWYgPSByZWYgW10gaW5cblxuICByZWdpc3RlciBcInByb3ZpZGUtcmVhY3RpdmUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHNpZycgPSB7IHNfdmFsdWUgPSB2YWx1ZTsgc19zdWJzY3JpYmVycyA9IFtdOyBzX2RlcHMgPSBbXSB9IGluXG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoU2lnbmFsIHNpZycgOjogc3RhY2spOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwcm92aWRlLXJlYWN0aXZlITogZXhwZWN0ZWQgKG5hbWUgdmFsdWUpXCIpKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wLXJlYWN0aXZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoIF8gOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIHJlc3QgfCBbXSAtPiAoKSk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwicHJvdmlkZS1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IG5ld192YWx1ZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgU2lnbmFsIHNpZycgOjogXyAtPlxuICAgICAgICAgc2lnJy5zX3ZhbHVlIDwtIG5ld192YWx1ZTtcbiAgICAgICAgIExpc3QuaXRlciAoZnVuIHN1YiAtPiBzdWIgKCkpIHNpZycuc19zdWJzY3JpYmVycztcbiAgICAgICAgIE5pbFxuICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgXCJwcm92aWRlLXNldCE6ICclcycgaXMgbm90IGEgcmVhY3RpdmUgcHJvdmlkZVwiIG5hbWUpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwcm92aWRlLXNldCE6IGV4cGVjdGVkIChuYW1lIG5ldy12YWx1ZSlcIikpO1xuXG4gIHJlZ2lzdGVyIFwicGVla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgKFN0cmluZyBuYW1lKSA6OiBfIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT4gc2lnJy5zX3ZhbHVlXG4gICAgICAgfCB2IDo6IF8gLT4gdlxuICAgICAgIHwgW10gLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWs6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJ0cmFja2luZy1zdGFydCFcIiAoZnVuIF9hcmdzIC0+XG4gICAgX3RyYWNraW5nX2FjdGl2ZSA6PSB0cnVlOyBfdHJhY2tpbmdfZGVwcyA6PSBbXTsgTmlsKTtcblxuICByZWdpc3RlciBcInRyYWNraW5nLXN0b3AhXCIgKGZ1biBfYXJncyAtPlxuICAgIF90cmFja2luZ19hY3RpdmUgOj0gZmFsc2U7XG4gICAgbGV0IGRlcHMgPSAhX3RyYWNraW5nX2RlcHMgaW5cbiAgICBfdHJhY2tpbmdfZGVwcyA6PSBbXTtcbiAgICBMaXN0IGRlcHMpO1xuXG4gIHJlZ2lzdGVyIFwidHJhY2tpbmctYWN0aXZlP1wiIChmdW4gX2FyZ3MgLT5cbiAgICBCb29sICFfdHJhY2tpbmdfYWN0aXZlKTtcblxuICAoKiBPdmVycmlkZSBjb250ZXh0IHRvIGJlIHRyYWNraW5nLWF3YXJlICopXG4gIEhhc2h0YmwucmVtb3ZlIHByaW1pdGl2ZXMgXCJjb250ZXh0XCI7XG4gIHJlZ2lzdGVyIFwiY29udGV4dFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgKFN0cmluZyBuYW1lKSA6OiByZXN0IC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT5cbiAgICAgICAgICgqIFJlZ2lzdGVyIGluIHRyYWNraW5nIGNvbnRleHQgaWYgYWN0aXZlICopXG4gICAgICAgICBpZiAhX3RyYWNraW5nX2FjdGl2ZSB0aGVuIGJlZ2luXG4gICAgICAgICAgIGlmIG5vdCAoTGlzdC5tZW1xIChTaWduYWwgc2lnJykgIV90cmFja2luZ19kZXBzKSB0aGVuXG4gICAgICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzXG4gICAgICAgICBlbmQ7XG4gICAgICAgICBzaWcnLnNfdmFsdWVcbiAgICAgICB8IHYgOjogXyAtPiB2XG4gICAgICAgfCBbXSAtPiAobWF0Y2ggcmVzdCB3aXRoIGRlZmF1bHRfdmFsIDo6IF8gLT4gZGVmYXVsdF92YWwgfCBbXSAtPiBOaWwpKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIHRyYWNraW5nLXJlZ2lzdGVyLXNjb3BlISDigJQgZXhwbGljaXRseSByZWdpc3RlciBhIHJlYWN0aXZlIHByb3ZpZGUgYXMgYSBkZXAgKilcbiAgcmVnaXN0ZXIgXCJ0cmFja2luZy1yZWdpc3Rlci1zY29wZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGlmICFfdHJhY2tpbmdfYWN0aXZlIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgICAgbWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT5cbiAgICAgICAgICBpZiBub3QgKExpc3QubWVtcSAoU2lnbmFsIHNpZycpICFfdHJhY2tpbmdfZGVwcykgdGhlblxuICAgICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzO1xuICAgICAgICAgIE5pbFxuICAgICAgICB8IF8gLT4gTmlsXG4gICAgICBlbmQgZWxzZSBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiBkZXJlZiDigJQgdW53cmFwIGEgc2lnbmFsIHZhbHVlIHdpdGggcmVhY3RpdmUgZGVwZW5kZW5jeSB0cmFja2luZy5cbiAgICAgSWYgdmFsdWUgaXMgYSBTaWduYWwsIHJldHVybnMgc192YWx1ZSBhbmQgcmVnaXN0ZXJzIGluIHRyYWNraW5nIGNvbnRleHQuXG4gICAgIE90aGVyd2lzZSByZXR1cm5zIHZhbHVlIGFzLWlzLiAqKVxuICByZWdpc3RlciBcImRlcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU2lnbmFsIHNpZyddIC0+XG4gICAgICBpZiAhX3RyYWNraW5nX2FjdGl2ZSB0aGVuIGJlZ2luXG4gICAgICAgIGlmIG5vdCAoTGlzdC5tZW1xIChTaWduYWwgc2lnJykgIV90cmFja2luZ19kZXBzKSB0aGVuXG4gICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzXG4gICAgICBlbmQ7XG4gICAgICBzaWcnLnNfdmFsdWVcbiAgICB8IFt2XSAtPiB2XG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogYmluZCDigJQgY3JlYXRlIGEgdHJhY2tlZCBjb21wdXRhdGlvbi4gVGFrZXMgYSBib2R5LWZuIChsYW1iZGEpLlxuICAgICBTdGFydHMgdHJhY2tpbmcsIGV2YWx1YXRlcyBib2R5LCBjb2xsZWN0cyBkZXBzLCBzdWJzY3JpYmVzLlxuICAgICBPbiBkZXAgY2hhbmdlOiB1bnN1YnNjcmliZXMsIHJlLWV2YWx1YXRlcywgcmUtc3Vic2NyaWJlcy5cbiAgICAgUmV0dXJucyBpbml0aWFsIHZhbHVlLiBPcHRpb25hbCB1cGRhdGUtZm4gY2FsbGVkIHdpdGggbmV3IHZhbHVlcy4gKilcbiAgcmVnaXN0ZXIgXCJiaW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYm9keV9mbl0gfCBbYm9keV9mbjsgX10gLT5cbiAgICAgIGxldCB1cGRhdGVfZm4gPSBtYXRjaCBhcmdzIHdpdGggW187IHVdIC0+IFNvbWUgdSB8IF8gLT4gTm9uZSBpblxuICAgICAgbGV0IGRpc3Bvc2VycyA6ICh1bml0IC0+IHVuaXQpIGxpc3QgcmVmID0gcmVmIFtdIGluXG4gICAgICBsZXQgcmVjIHJ1bl90cmFja2VkICgpID1cbiAgICAgICAgKCogQ2xlYW4gdXAgcHJldmlvdXMgc3Vic2NyaXB0aW9ucyAqKVxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biBkIC0+IGQgKCkpICFkaXNwb3NlcnM7XG4gICAgICAgIGRpc3Bvc2VycyA6PSBbXTtcbiAgICAgICAgKCogU3RhcnQgdHJhY2tpbmcgKilcbiAgICAgICAgX3RyYWNraW5nX2FjdGl2ZSA6PSB0cnVlO1xuICAgICAgICBfdHJhY2tpbmdfZGVwcyA6PSBbXTtcbiAgICAgICAgKCogRXZhbHVhdGUgYm9keSAqKVxuICAgICAgICBsZXQgcmVzdWx0ID0gIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgYm9keV9mbiBOaWwgaW5cbiAgICAgICAgKCogQ29sbGVjdCBkZXBzICopXG4gICAgICAgIGxldCBkZXBzID0gIV90cmFja2luZ19kZXBzIGluXG4gICAgICAgIF90cmFja2luZ19hY3RpdmUgOj0gZmFsc2U7XG4gICAgICAgIF90cmFja2luZ19kZXBzIDo9IFtdO1xuICAgICAgICAoKiBTdWJzY3JpYmUgdG8gZWFjaCBkZXAgKilcbiAgICAgICAgTGlzdC5pdGVyIChmdW4gZGVwIC0+XG4gICAgICAgICAgbWF0Y2ggZGVwIHdpdGhcbiAgICAgICAgICB8IFNpZ25hbCBzaWcnIC0+XG4gICAgICAgICAgICBsZXQgc3Vic2NyaWJlciA9IChmdW4gKCkgLT5cbiAgICAgICAgICAgICAgbGV0IG5ld19yZXN1bHQgPSBydW5fdHJhY2tlZCAoKSBpblxuICAgICAgICAgICAgICBtYXRjaCB1cGRhdGVfZm4gd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgZiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGYgKExpc3QgW25ld19yZXN1bHRdKSlcbiAgICAgICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgICApIGluXG4gICAgICAgICAgICBzaWcnLnNfc3Vic2NyaWJlcnMgPC0gc3Vic2NyaWJlciA6OiBzaWcnLnNfc3Vic2NyaWJlcnM7XG4gICAgICAgICAgICBkaXNwb3NlcnMgOj0gKGZ1biAoKSAtPlxuICAgICAgICAgICAgICBzaWcnLnNfc3Vic2NyaWJlcnMgPC0gTGlzdC5maWx0ZXIgKGZ1biBzIC0+IHMgIT0gc3Vic2NyaWJlcikgc2lnJy5zX3N1YnNjcmliZXJzXG4gICAgICAgICAgICApIDo6ICFkaXNwb3NlcnNcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgKSBkZXBzO1xuICAgICAgICByZXN1bHRcbiAgICAgIGluXG4gICAgICBydW5fdHJhY2tlZCAoKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpbmQ6IGV4cGVjdGVkIChib2R5LWZuKSBvciAoYm9keS1mbiB1cGRhdGUtZm4pXCIpKTtcblxuICAoKiAtLS0gRW1pdCAvIGVtaXR0ZWQgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyB2YWx1ZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgTGlzdCBpdGVtcyA6OiByZXN0IC0+XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBOaWwgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbdmFsdWVdIDo6IHJlc3QpXG4gICAgICAgfCBbXSAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiZW1pdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJzY29wZS1lbWl0IVwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTmlsKTtcblxuICByZWdpc3RlciBcImVtaXR0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIFwiZW1pdHRlZFwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1jb2xsZWN0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJjb2xsZWN0ZWRcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBcImNsZWFyLWNvbGxlY3RlZCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgKCogLS0tIFByb3ZpZGUgYWxpYXNlcyAtLS0gKilcblxuICByZWdpc3RlciBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJzY29wZS1wdXNoIVwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTmlsKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBcInNjb3BlLXBvcCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgKCogaHMtc2FmZS1jYWxsOiBpbnZva2UgYSAwLWFyZyB0aHVuaywgcmV0dXJuIG5pbCBvbiBhbnkgbmF0aXZlIGVycm9yLlxuICAgICBVc2VkIGJ5IHRoZSBoeXBlcnNjcmlwdCBjb21waWxlciB0byB3cmFwIGNvbGxlY3Rpb24gZXhwcmVzc2lvbnMgaW5cbiAgICAgZm9yLWxvb3BzLCBzbyBgZm9yIHggaW4gZG9lc05vdEV4aXN0YCBpdGVyYXRlcyBvdmVyIG5pbCBpbnN0ZWFkIG9mXG4gICAgIGNyYXNoaW5nIHdpdGggYW4gdW5kZWZpbmVkLXN5bWJvbCBlcnJvci4gKilcbiAgcmVnaXN0ZXIgXCJocy1zYWZlLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0aHVua10gLT5cbiAgICAgICh0cnkgIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgdGh1bmsgTmlsXG4gICAgICAgd2l0aCBfIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiA9PT0gUmVnZXggPT09IHdyYXBwaW5nIFJlICsgUmUuUGNyZSAqKVxuICBsZXQgcmVnZXhfdGFibGUgOiAoaW50LCBSZS5yZSAqIHN0cmluZyAqIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlZ2V4X25leHRfaWQgPSByZWYgMCBpblxuICBsZXQgcGFyc2VfZmxhZ3MgZmxhZ3MgPVxuICAgIGxldCBvcHRzID0gcmVmIFtdIGluXG4gICAgU3RyaW5nLml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8ICdpJyAtPiBvcHRzIDo9IGBDQVNFTEVTUyA6OiAhb3B0c1xuICAgICAgfCAnbScgLT4gb3B0cyA6PSBgTVVMVElMSU5FIDo6ICFvcHRzXG4gICAgICB8ICdzJyAtPiBvcHRzIDo9IGBET1RBTEwgOjogIW9wdHNcbiAgICAgIHwgXyAtPiAoKSkgZmxhZ3M7XG4gICAgIW9wdHNcbiAgaW5cbiAgbGV0IG1ha2VfcmVnZXhfdmFsdWUgaWQgc291cmNlIGZsYWdzID1cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9fcmVnZXhfX1wiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaWRcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgaWQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInNvdXJjZVwiIChTdHJpbmcgc291cmNlKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImZsYWdzXCIgKFN0cmluZyBmbGFncyk7XG4gICAgRGljdCBkXG4gIGluXG4gIGxldCByZWdleF9vZl92YWx1ZSA9IGZ1bmN0aW9uXG4gICAgfCBEaWN0IGQgLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJpZFwiIHdpdGhcbiAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPlxuICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcmVnZXhfdGFibGUgKGludF9vZl9mbG9hdCBuKSB3aXRoXG4gICAgICAgICAgfCBTb21lIHIgLT4gclxuICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBoYW5kbGUgbm90IGZvdW5kXCIpKVxuICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBtaXNzaW5nIGlkXCIpKVxuICAgIHwgU3RyaW5nIHMgLT5cbiAgICAgICgqIEFjY2VwdCBhIHJhdyBwYXR0ZXJuIHN0cmluZzogYXV0by1jb21waWxlIGl0LiBMZXRzIHJlZ2V4LXNwbGl0IC9cbiAgICAgICAgIHJlZ2V4LW1hdGNoLWFsbCAvIHJlZ2V4LXRlc3QgLyBldGMuIHRha2UgYSBwYXR0ZXJuIGRpcmVjdGx5LCBub3Qgb25seVxuICAgICAgICAgYSBwcmUtY29tcGlsZWQgcmVnZXggZGljdCBmcm9tIHJlZ2V4LWNvbXBpbGUuICopXG4gICAgICAodHJ5IChSZS5jb21waWxlIChSZS5QY3JlLnJlIHMpLCBzLCBcIlwiKVxuICAgICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWdleDogaW52YWxpZCBwYXR0ZXJuIFwiIF4gcykpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBleHBlY3RlZCByZWdleCBkaWN0IG9yIHBhdHRlcm4gc3RyaW5nXCIpXG4gIGluXG4gIGxldCBncm91cF90b19kaWN0IGcgaW5wdXQgPVxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibWF0Y2hcIiAoU3RyaW5nIChSZS5Hcm91cC5nZXQgZyAwKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJpbmRleFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCAoUmUuR3JvdXAuc3RhcnQgZyAwKSkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaW5wdXRcIiAoU3RyaW5nIGlucHV0KTtcbiAgICBsZXQgY291bnQgPSBSZS5Hcm91cC5uYl9ncm91cHMgZyBpblxuICAgIGxldCBncm91cHMgPSByZWYgW10gaW5cbiAgICBmb3IgaSA9IGNvdW50IC0gMSBkb3dudG8gMSBkb1xuICAgICAgbGV0IHMgPSB0cnkgUmUuR3JvdXAuZ2V0IGcgaSB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gICAgICBncm91cHMgOj0gU3RyaW5nIHMgOjogIWdyb3Vwc1xuICAgIGRvbmU7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJncm91cHNcIiAoTGlzdCAhZ3JvdXBzKTtcbiAgICBEaWN0IGRcbiAgaW5cbiAgcmVnaXN0ZXIgXCJyZWdleC1jb21waWxlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNvdXJjZTsgU3RyaW5nIGZsYWdzXSB8IFtTdHJpbmcgc291cmNlOyBTdHJpbmcgZmxhZ3M7IF9dIC0+XG4gICAgICBsZXQgb3B0cyA9IHBhcnNlX2ZsYWdzIGZsYWdzIGluXG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLmNvbXBpbGUgKFJlLlBjcmUucmUgfmZsYWdzOm9wdHMgc291cmNlKSBpblxuICAgICAgICBsZXQgaWQgPSAhcmVnZXhfbmV4dF9pZCBpblxuICAgICAgICBpbmNyIHJlZ2V4X25leHRfaWQ7XG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSByZWdleF90YWJsZSBpZCAocmUsIHNvdXJjZSwgZmxhZ3MpO1xuICAgICAgICBtYWtlX3JlZ2V4X3ZhbHVlIGlkIHNvdXJjZSBmbGFnc1xuICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInJlZ2V4LWNvbXBpbGU6IGludmFsaWQgcGF0dGVybiBcIiBeIHNvdXJjZSkpKVxuICAgIHwgW1N0cmluZyBzb3VyY2VdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLmNvbXBpbGUgKFJlLlBjcmUucmUgc291cmNlKSBpblxuICAgICAgICBsZXQgaWQgPSAhcmVnZXhfbmV4dF9pZCBpblxuICAgICAgICBpbmNyIHJlZ2V4X25leHRfaWQ7XG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSByZWdleF90YWJsZSBpZCAocmUsIHNvdXJjZSwgXCJcIik7XG4gICAgICAgIG1ha2VfcmVnZXhfdmFsdWUgaWQgc291cmNlIFwiXCJcbiAgICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWdleC1jb21waWxlOiBpbnZhbGlkIHBhdHRlcm4gXCIgXiBzb3VyY2UpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1jb21waWxlOiAoc291cmNlIGZsYWdzKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtdGVzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgc10gLT5cbiAgICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIEJvb2wgKFJlLmV4ZWNwIHJlIHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtdGVzdDogKHJlZ2V4IHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LWV4ZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKHJ4LCBzLCBzdGFydCkgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW3J4OyBTdHJpbmcgc10gLT4gKHJ4LCBzLCAwKVxuICAgICAgfCBbcng7IFN0cmluZyBzOyBOdW1iZXIgbl0gLT4gKHJ4LCBzLCBpbnRfb2ZfZmxvYXQgbilcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LWV4ZWM6IChyZWdleCBzdHJpbmcgc3RhcnQ/KVwiKVxuICAgIGluXG4gICAgbGV0IChyZSwgXywgXykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgIHRyeVxuICAgICAgbGV0IGcgPSBSZS5leGVjIH5wb3M6c3RhcnQgcmUgcyBpblxuICAgICAgZ3JvdXBfdG9fZGljdCBnIHNcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBOaWwpO1xuICByZWdpc3RlciBcInJlZ2V4LW1hdGNoLWFsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgc10gLT5cbiAgICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIGxldCBhbGwgPSBSZS5hbGwgcmUgcyBpblxuICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBnIC0+IGdyb3VwX3RvX2RpY3QgZyBzKSBhbGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtbWF0Y2gtYWxsOiAocmVnZXggc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICgqIHN0cmluZyBBUEk6IChyZWdleC1yZXBsYWNlIHBhdHRlcm4gcmVwbGFjZW1lbnQgaW5wdXQpIOKAlCByZXBsYWNlIEFMTFxuICAgICAgICAgbWF0Y2hlcyBvZiBhIHJhdyBwYXR0ZXJuLiBEaXNhbWJpZ3VhdGVkIGZyb20gdGhlIGNvbXBpbGVkLXJlZ2V4IEFQSVxuICAgICAgICAgYmVsb3cgYnkgdGhlIGZpcnN0IGFyZyBiZWluZyBhIFN0cmluZyByYXRoZXIgdGhhbiBhIHJlZ2V4IERpY3QuICopXG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZV9zdHJpbmcgcmUgfmJ5OnJlcGxhY2VtZW50IGlucHV0KVxuICAgICAgIHdpdGggXyAtPiBTdHJpbmcgaW5wdXQpXG4gICAgfCBbcng7IFN0cmluZyBzOyBTdHJpbmcgcmVwbGFjZW1lbnRdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBmbGFncykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgICAgbGV0IGV4cGFuZCBnID1cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQpIGluXG4gICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHJlcGxhY2VtZW50IGluXG4gICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICBkb25lO1xuICAgICAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBpblxuICAgICAgbGV0IGdsb2JhbCA9IFN0cmluZy5jb250YWlucyBmbGFncyAnZycgaW5cbiAgICAgIGlmIGdsb2JhbCB0aGVuXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZSByZSB+ZjpleHBhbmQgcylcbiAgICAgIGVsc2VcbiAgICAgICAgKG1hdGNoIFJlLmV4ZWNfb3B0IHJlIHMgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IFN0cmluZyBzXG4gICAgICAgICB8IFNvbWUgZyAtPlxuICAgICAgICAgICBsZXQgcmVwbCA9IGV4cGFuZCBnIGluXG4gICAgICAgICAgIGxldCBiZWZvcmUgPSBTdHJpbmcuc3ViIHMgMCAoUmUuR3JvdXAuc3RhcnQgZyAwKSBpblxuICAgICAgICAgICBsZXQgYWZ0ZXJfc3RhcnQgPSBSZS5Hcm91cC5zdG9wIGcgMCBpblxuICAgICAgICAgICBsZXQgYWZ0ZXIgPSBTdHJpbmcuc3ViIHMgYWZ0ZXJfc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtIGFmdGVyX3N0YXJ0KSBpblxuICAgICAgICAgICBTdHJpbmcgKGJlZm9yZSBeIHJlcGwgXiBhZnRlcikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtcmVwbGFjZTogKHJlZ2V4IHN0cmluZyByZXBsYWNlbWVudClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXJlcGxhY2UtZm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHM7IGZdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBmbGFncykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgICAgbGV0IGNhbGxfZm4gZyA9XG4gICAgICAgIGxldCBtYXRjaF9zdHIgPSBSZS5Hcm91cC5nZXQgZyAwIGluXG4gICAgICAgIGxldCBjb3VudCA9IFJlLkdyb3VwLm5iX2dyb3VwcyBnIGluXG4gICAgICAgIGxldCBncm91cHNfYmVmb3JlID0gcmVmIFtdIGluXG4gICAgICAgIGZvciBpID0gY291bnQgLSAxIGRvd250byAxIGRvXG4gICAgICAgICAgbGV0IHYgPSB0cnkgU3RyaW5nIChSZS5Hcm91cC5nZXQgZyBpKSB3aXRoIE5vdF9mb3VuZCAtPiBOaWwgaW5cbiAgICAgICAgICBncm91cHNfYmVmb3JlIDo9IHYgOjogIWdyb3Vwc19iZWZvcmVcbiAgICAgICAgZG9uZTtcbiAgICAgICAgbGV0IGlkeCA9IE51bWJlciAoZmxvYXRfb2ZfaW50IChSZS5Hcm91cC5zdGFydCBnIDApKSBpblxuICAgICAgICBsZXQgYWxsX2FyZ3MgPSBbU3RyaW5nIG1hdGNoX3N0cl0gQCAhZ3JvdXBzX2JlZm9yZSBAIFtpZHg7IFN0cmluZyBzXSBpblxuICAgICAgICBtYXRjaCAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBmIChMaXN0IGFsbF9hcmdzKSB3aXRoXG4gICAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgICB8IE51bWJlciBuIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgblxuICAgICAgICB8IHYgLT4gU3hfdHlwZXMuaW5zcGVjdCB2XG4gICAgICBpblxuICAgICAgbGV0IGdsb2JhbCA9IFN0cmluZy5jb250YWlucyBmbGFncyAnZycgaW5cbiAgICAgIGlmIGdsb2JhbCB0aGVuXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZSByZSB+ZjpjYWxsX2ZuIHMpXG4gICAgICBlbHNlXG4gICAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBTdHJpbmcgc1xuICAgICAgICAgfCBTb21lIGcgLT5cbiAgICAgICAgICAgbGV0IHJlcGwgPSBjYWxsX2ZuIGcgaW5cbiAgICAgICAgICAgbGV0IGJlZm9yZSA9IFN0cmluZy5zdWIgcyAwIChSZS5Hcm91cC5zdGFydCBnIDApIGluXG4gICAgICAgICAgIGxldCBhZnRlcl9zdGFydCA9IFJlLkdyb3VwLnN0b3AgZyAwIGluXG4gICAgICAgICAgIGxldCBhZnRlciA9IFN0cmluZy5zdWIgcyBhZnRlcl9zdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gYWZ0ZXJfc3RhcnQpIGluXG4gICAgICAgICAgIFN0cmluZyAoYmVmb3JlIF4gcmVwbCBeIGFmdGVyKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlLWZuOiAocmVnZXggc3RyaW5nIGZuKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtc3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBfKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gU3RyaW5nIHgpIChSZS5zcGxpdCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zcGxpdDogKHJlZ2V4IHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXNvdXJjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4XSAtPlxuICAgICAgbGV0IChfLCBzb3VyY2UsIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIFN0cmluZyBzb3VyY2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zb3VyY2U6IChyZWdleClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LWZsYWdzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbcnhdIC0+XG4gICAgICBsZXQgKF8sIF8sIGZsYWdzKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBTdHJpbmcgZmxhZ3NcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1mbGFnczogKHJlZ2V4KVwiKSk7XG5cbiAgKCogbWFrZS1yZWdleHAgLyByZWdleHA/IC8gcmVnZXhwLW1hdGNoIC8gcmVnZXhwLW1hdGNoLWFsbCAvIHJlZ2V4cC1yZXBsYWNlIC8gcmVnZXhwLXJlcGxhY2UtYWxsIC8gcmVnZXhwLXNwbGl0ICopXG4gIGxldCBwYXJzZV9yZV9mbGFncyBmbGFncyA9XG4gICAgbGV0IG9wdHMgPSByZWYgW10gaW5cbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ2knIC0+IG9wdHMgOj0gYENBU0VMRVNTIDo6ICFvcHRzXG4gICAgICB8ICdtJyAtPiBvcHRzIDo9IGBNVUxUSUxJTkUgOjogIW9wdHNcbiAgICAgIHwgJ3MnIC0+IG9wdHMgOj0gYERPVEFMTCA6OiAhb3B0c1xuICAgICAgfCBfIC0+ICgpKSBmbGFncztcbiAgICAhb3B0c1xuICBpblxuICBsZXQgbWFrZV9yZWdleHBfdmFsdWUgc291cmNlIGZsYWdzID1cbiAgICBsZXQgb3B0cyA9IHBhcnNlX3JlX2ZsYWdzIGZsYWdzIGluXG4gICAgdHJ5XG4gICAgICBsZXQgY29tcGlsZWQgPSBSZS5jb21waWxlIChSZS5QY3JlLnJlIH5mbGFnczpvcHRzIHNvdXJjZSkgaW5cbiAgICAgIFN4UmVnZXhwIChzb3VyY2UsIGZsYWdzLCBjb21waWxlZClcbiAgICB3aXRoIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwibWFrZS1yZWdleHA6IGludmFsaWQgcGF0dGVybjogXCIgXiBzb3VyY2UpKVxuICBpblxuICBsZXQgbWF0Y2hfZGljdCBnIGlucHV0ID1cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIm1hdGNoXCIgKFN0cmluZyAoUmUuR3JvdXAuZ2V0IGcgMCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwic3RhcnRcIiAoSW50ZWdlciAoUmUuR3JvdXAuc3RhcnQgZyAwKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJlbmRcIiAoSW50ZWdlciAoUmUuR3JvdXAuc3RvcCBnIDApKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImlucHV0XCIgKFN0cmluZyBpbnB1dCk7XG4gICAgbGV0IGNvdW50ID0gUmUuR3JvdXAubmJfZ3JvdXBzIGcgaW5cbiAgICBsZXQgZ3JvdXBzID0gcmVmIFtdIGluXG4gICAgZm9yIGkgPSBjb3VudCAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBzID0gdHJ5IFJlLkdyb3VwLmdldCBnIGkgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICAgICAgZ3JvdXBzIDo9IFN0cmluZyBzIDo6ICFncm91cHNcbiAgICBkb25lO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiZ3JvdXBzXCIgKExpc3QgIWdyb3Vwcyk7XG4gICAgRGljdCBkXG4gIGluXG4gIHJlZ2lzdGVyIFwibWFrZS1yZWdleHBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPiBtYWtlX3JlZ2V4cF92YWx1ZSBzcmMgXCJcIlxuICAgIHwgW1N0cmluZyBzcmM7IFN0cmluZyBmbGFnc10gLT4gbWFrZV9yZWdleHBfdmFsdWUgc3JjIGZsYWdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWdleHA6IChwYXR0ZXJuIFtmbGFnc10pXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHA/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtc291cmNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgKHNyYywgXywgXyldIC0+IFN0cmluZyBzcmNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtc291cmNlOiBleHBlY3RlZCByZWdleHBcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1mbGFnc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBmbGFncywgXyldIC0+IFN0cmluZyBmbGFnc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1mbGFnczogZXhwZWN0ZWQgcmVnZXhwXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtbWF0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICB8IE5vbmUgLT4gTmlsXG4gICAgICAgfCBTb21lIGcgLT4gbWF0Y2hfZGljdCBnIHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwLW1hdGNoOiAocmVnZXhwIHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1tYXRjaC1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4gZyAtPiBtYXRjaF9kaWN0IGcgcykgKFJlLmFsbCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtbWF0Y2gtYWxsOiAocmVnZXhwIHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1yZXBsYWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgKF8sIF8sIHJlKTsgU3RyaW5nIHM7IFN0cmluZyByZXBsYWNlbWVudF0gLT5cbiAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICB8IE5vbmUgLT4gU3RyaW5nIHNcbiAgICAgICB8IFNvbWUgZyAtPlxuICAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgIGxldCBuID0gU3RyaW5nLmxlbmd0aCByZXBsYWNlbWVudCBpblxuICAgICAgICAgbGV0IGV4cGFuZCAoKSA9XG4gICAgICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgICBkb25lXG4gICAgICAgICBpblxuICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuc3ViIHMgMCAoUmUuR3JvdXAuc3RhcnQgZyAwKSk7XG4gICAgICAgICBleHBhbmQgKCk7XG4gICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN0cmluZy5zdWIgcyAoUmUuR3JvdXAuc3RvcCBnIDApXG4gICAgICAgICAgIChTdHJpbmcubGVuZ3RoIHMgLSBSZS5Hcm91cC5zdG9wIGcgMCkpO1xuICAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtcmVwbGFjZTogKHJlZ2V4cCBzdHJpbmcgcmVwbGFjZW1lbnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtcmVwbGFjZS1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgczsgU3RyaW5nIHJlcGxhY2VtZW50XSAtPlxuICAgICAgbGV0IGV4cGFuZCBnID1cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQpIGluXG4gICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHJlcGxhY2VtZW50IGluXG4gICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICBkb25lO1xuICAgICAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBpblxuICAgICAgU3RyaW5nIChSZS5yZXBsYWNlIHJlIH5mOmV4cGFuZCBzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1yZXBsYWNlLWFsbDogKHJlZ2V4cCBzdHJpbmcgcmVwbGFjZW1lbnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtc3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4geCAtPiBTdHJpbmcgeCkgKFJlLnNwbGl0IHJlIHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1zcGxpdDogKHJlZ2V4cCBzdHJpbmcpXCIpKTtcbiAgKCogQml0d2lzZSBvcGVyYXRpb25zICopXG4gIHJlZ2lzdGVyIFwiYml0d2lzZS1hbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoYSBsYW5kIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0d2lzZS1hbmQ6IGV4cGVjdGVkIChpbnRlZ2VyIGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJiaXR3aXNlLW9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbG9yIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0d2lzZS1vcjogZXhwZWN0ZWQgKGludGVnZXIgaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImJpdHdpc2UteG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbHhvciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpdHdpc2UteG9yOiBleHBlY3RlZCAoaW50ZWdlciBpbnRlZ2VyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYml0d2lzZS1ub3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGFdIC0+IEludGVnZXIgKGxub3QgYSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJiaXR3aXNlLW5vdDogZXhwZWN0ZWQgKGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJhcml0aG1ldGljLXNoaWZ0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGNvdW50XSAtPlxuICAgICAgSW50ZWdlciAoaWYgY291bnQgPj0gMCB0aGVuIGEgbHNsIGNvdW50IGVsc2UgYSBhc3IgKC1jb3VudCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXJpdGhtZXRpYy1zaGlmdDogZXhwZWN0ZWQgKGludGVnZXIgaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImJpdC1jb3VudFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYV0gLT5cbiAgICAgIGxldCBuID0gcmVmIChhYnMgYSkgaW5cbiAgICAgIGxldCBjID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFuIDw+IDAgZG9cbiAgICAgICAgYyA6PSAhYyArICghbiBsYW5kIDEpO1xuICAgICAgICBuIDo9ICFuIGxzciAxXG4gICAgICBkb25lO1xuICAgICAgSW50ZWdlciAhY1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpdC1jb3VudDogZXhwZWN0ZWQgKGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlZ2VyLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYV0gLT5cbiAgICAgIGxldCBuID0gcmVmIChhYnMgYSkgaW5cbiAgICAgIGxldCBiaXRzID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFuIDw+IDAgZG9cbiAgICAgICAgaW5jciBiaXRzO1xuICAgICAgICBuIDo9ICFuIGxzciAxXG4gICAgICBkb25lO1xuICAgICAgSW50ZWdlciAhYml0c1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImludGVnZXItbGVuZ3RoOiBleHBlY3RlZCAoaW50ZWdlcilcIikpO1xuXG4gICgqIFBoYXNlIDEwOiBtdXRhYmxlIGhhc2ggdGFibGVzICopXG4gIHJlZ2lzdGVyIFwibWFrZS1oYXNoLXRhYmxlXCIgKGZ1biBfIC0+IEhhc2hUYWJsZSAoSGFzaHRibC5jcmVhdGUgMTYpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodDsgazsgdl0gLT5cbiAgICAgICh0cnkgSGFzaHRibC5yZXBsYWNlIGh0IGsgdlxuICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgKCogZmFsbGJhY2s6IHNjYW4gZm9yIHBoeXNpY2FsbHkgZXF1YWwga2V5ICopXG4gICAgICAgICBsZXQgZm91bmQgPSByZWYgZmFsc2UgaW5cbiAgICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGVrIF8gLT4gaWYgZWsgPT0gayB0aGVuIChIYXNodGJsLnJlcGxhY2UgaHQgZWsgdjsgZm91bmQgOj0gdHJ1ZSkpIGh0O1xuICAgICAgICAgaWYgbm90ICFmb3VuZCB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1zZXQhOiBleHBlY3RlZCAoaHQga2V5IHZhbClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBrXSAtPlxuICAgICAgKHRyeSBIYXNodGJsLmZpbmQgaHQga1xuICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImhhc2gtdGFibGUtcmVmOiBrZXkgbm90IGZvdW5kXCIpKSlcbiAgICB8IFtIYXNoVGFibGUgaHQ7IGs7IGRlZmF1bHRdIC0+XG4gICAgICAodHJ5IEhhc2h0YmwuZmluZCBodCBrIHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1yZWY6IGV4cGVjdGVkIChodCBrZXkpIG9yIChodCBrZXkgZGVmYXVsdClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtZGVsZXRlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodDsga10gLT4gSGFzaHRibC5yZW1vdmUgaHQgazsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1kZWxldGUhOiBleHBlY3RlZCAoaHQga2V5KVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1zaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPiBJbnRlZ2VyIChIYXNodGJsLmxlbmd0aCBodClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLXNpemU6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUta2V5c1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodF0gLT4gTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1rZXlzOiBleHBlY3RlZCAoaHQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlLXZhbHVlc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodF0gLT4gTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gXyB2IGFjYyAtPiB2IDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS12YWx1ZXM6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtPmFsaXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPlxuICAgICAgTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiBMaXN0IFtrOyB2XSA6OiBhY2MpIGh0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhc2gtdGFibGUtPmFsaXN0OiBleHBlY3RlZCAoaHQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlLWZvci1lYWNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBmbl0gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFtrOyB2XSkpKSBodDtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhc2gtdGFibGUtZm9yLWVhY2g6IGV4cGVjdGVkIChodCBmbilcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtbWVyZ2UhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGRzdDsgSGFzaFRhYmxlIHNyY10gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgZHN0IGsgdikgc3JjO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1tZXJnZSE6IGV4cGVjdGVkIChkc3Qgc3JjKVwiKSk7XG4gICgqIFBoYXNlIDExOiBzZXF1ZW5jZSBwcm90b2NvbCAqKVxuICBsZXQgc2VxX3RvX2xpc3QgdiA9XG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBOaWwgLT4gTGlzdCBbXVxuICAgIHwgTGlzdCBfIC0+IHZcbiAgICB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdCBpdGVtc1xuICAgIHwgVmVjdG9yIGFyciAtPiBMaXN0IChBcnJheS50b19saXN0IGFycilcbiAgICB8IFN0cmluZyBzIC0+XG4gICAgICBsZXQgY2hhcnMgPSByZWYgW10gaW5cbiAgICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBjaGFycyA6PSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYykgOjogIWNoYXJzKSBzO1xuICAgICAgTGlzdCAoTGlzdC5yZXYgIWNoYXJzKVxuICAgIHwgXyAtPiB2XG4gIGluXG4gIHJlZ2lzdGVyIFwic2VxLXRvLWxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBzZXFfdG9fbGlzdCB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxLXRvLWxpc3Q6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS10by1saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gc2VxX3RvX2xpc3QgdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXRvLWxpc3Q6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS10by12ZWN0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc2VxX3RvX2xpc3QgdiB3aXRoIExpc3QgeHMgLT4gVmVjdG9yIChBcnJheS5vZl9saXN0IHhzKSB8IHggLT4geClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS10by12ZWN0b3I6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgIHwgW1ZlY3RvciBhcnJdIC0+IEludGVnZXIgKEFycmF5Lmxlbmd0aCBhcnIpXG4gICAgfCBbdl0gLT4gKG1hdGNoIHNlcV90b19saXN0IHYgd2l0aFxuICAgICAgICB8IExpc3QgeHMgLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggeHMpXG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLWxlbmd0aDogZXhwZWN0ZWQgc2VxdWVuY2VcIikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtbGVuZ3RoOiBleHBlY3RlZCAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic2VxdWVuY2UtcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IEludGVnZXIgaV0gLT5cbiAgICAgIGlmIGkgPCAwIHx8IGkgPj0gU3RyaW5nLmxlbmd0aCBzXG4gICAgICB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInNlcXVlbmNlLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGkpKVxuICAgICAgZWxzZSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgKFN0cmluZy5nZXQgcyBpKSlcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIG5dIC0+XG4gICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBpZiBpIDwgMCB8fCBpID49IFN0cmluZy5sZW5ndGggc1xuICAgICAgdGhlbiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJzZXF1ZW5jZS1yZWY6IGluZGV4ICVkIG91dCBvZiBib3VuZHNcIiBpKSlcbiAgICAgIGVsc2UgU3RyaW5nIChTdHJpbmcubWFrZSAxIChTdHJpbmcuZ2V0IHMgaSkpXG4gICAgfCBbdjsgaWR4XSAtPlxuICAgICAgbGV0IGxzdCA9IHNlcV90b19saXN0IHYgaW5cbiAgICAgIGxldCBpID0gKG1hdGNoIGlkeCB3aXRoIEludGVnZXIgbiAtPiBuIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtcmVmOiBpbmRleCBtdXN0IGJlIG51bWJlclwiKSkgaW5cbiAgICAgIChtYXRjaCBsc3Qgd2l0aFxuICAgICAgIHwgTGlzdCB4cyAtPlxuICAgICAgICAgKHRyeSBMaXN0Lm50aCB4cyBpXG4gICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInNlcXVlbmNlLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGkpKSlcbiAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1yZWY6IGV4cGVjdGVkIHNlcXVlbmNlXCIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXJlZjogZXhwZWN0ZWQgKHNlcSBpbmRleClcIikpO1xuICByZWdpc3RlciBcInNlcXVlbmNlLWFwcGVuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzMTsgU3RyaW5nIHMyXSAtPiBTdHJpbmcgKHMxIF4gczIpXG4gICAgfCBbdjE7IHYyXSAtPlxuICAgICAgbGV0IGwxID0gc2VxX3RvX2xpc3QgdjEgaW5cbiAgICAgIGxldCBsMiA9IHNlcV90b19saXN0IHYyIGluXG4gICAgICAobWF0Y2ggbDEsIGwyIHdpdGhcbiAgICAgICB8IExpc3QgeHMxLCBMaXN0IHhzMiAtPiBMaXN0ICh4czEgQCB4czIpXG4gICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtYXBwZW5kOiBleHBlY3RlZCBzZXF1ZW5jZXNcIikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtYXBwZW5kOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImluLXJhbmdlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPlxuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9IGlmIGkgPCAwIHRoZW4gYWNjIGVsc2UgYnVpbGQgKGktMSkgKEludGVnZXIgaSA6OiBhY2MpIGluXG4gICAgICBMaXN0IChidWlsZCAobi0xKSBbXSlcbiAgICB8IFtOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBoaSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBsZXQgcmVjIGJ1aWxkIGkgYWNjID0gaWYgaSA8IDAgdGhlbiBhY2MgZWxzZSBidWlsZCAoaS0xKSAoSW50ZWdlciBpIDo6IGFjYykgaW5cbiAgICAgIExpc3QgKGJ1aWxkIChoaS0xKSBbXSlcbiAgICB8IFtJbnRlZ2VyIGxvOyBJbnRlZ2VyIGhpXSAtPlxuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9IGlmIGkgPCBsbyB0aGVuIGFjYyBlbHNlIGJ1aWxkIChpLTEpIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoYnVpbGQgKGhpLTEpIFtdKVxuICAgIHwgW051bWJlciBsbzsgTnVtYmVyIGhpXSAtPlxuICAgICAgbGV0IGxvX2kgPSBpbnRfb2ZfZmxvYXQgbG8gYW5kIGhpX2kgPSBpbnRfb2ZfZmxvYXQgaGkgaW5cbiAgICAgIGxldCByZWMgYnVpbGQgaSBhY2MgPSBpZiBpIDwgbG9faSB0aGVuIGFjYyBlbHNlIGJ1aWxkIChpLTEpIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoYnVpbGQgKGhpX2ktMSkgW10pXG4gICAgfCBbSW50ZWdlciBsbzsgSW50ZWdlciBoaTsgSW50ZWdlciBzdGVwXSAtPlxuICAgICAgaWYgc3RlcCA9IDAgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcImluLXJhbmdlOiBzdGVwIGNhbm5vdCBiZSB6ZXJvXCIpO1xuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9XG4gICAgICAgIGlmIChzdGVwID4gMCAmJiBpID49IGhpKSB8fCAoc3RlcCA8IDAgJiYgaSA8PSBoaSkgdGhlbiBhY2NcbiAgICAgICAgZWxzZSBidWlsZCAoaSArIHN0ZXApIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoTGlzdC5yZXYgKGJ1aWxkIGxvIFtdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbi1yYW5nZTogZXhwZWN0ZWQgKGVuZCkgb3IgKHN0YXJ0IGVuZCkgb3IgKHN0YXJ0IGVuZCBzdGVwKVwiKSk7XG4gICgqID09PSBnZW5zeW0gKyBzeW1ib2wgaW50ZXJuaW5nID09PSAqKVxuICByZWdpc3RlciBcImdlbnN5bVwiIChmdW4gYXJncyAtPlxuICAgIGxldCBwcmVmaXggPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW10gLT4gXCJnXCJcbiAgICAgIHwgW1N0cmluZyBzXSAtPiBzXG4gICAgICB8IFtTeW1ib2wgc10gLT4gc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZ2Vuc3ltOiBleHBlY3RlZCBvcHRpb25hbCBwcmVmaXggc3RyaW5nXCIpIGluXG4gICAgaW5jciBnZW5zeW1fY291bnRlcjtcbiAgICBTeW1ib2wgKHByZWZpeCBeIHN0cmluZ19vZl9pbnQgIWdlbnN5bV9jb3VudGVyKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLT5zeW1ib2xcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3ltYm9sIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPnN5bWJvbDogZXhwZWN0ZWQgMSBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcInN5bWJvbC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ltYm9sIHNdIC0+IFN0cmluZyBzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sLT5zdHJpbmc6IGV4cGVjdGVkIDEgc3ltYm9sXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlcm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3ltYm9sIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnRlcm46IGV4cGVjdGVkIDEgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJzeW1ib2wtaW50ZXJuZWQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ltYm9sIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbC1pbnRlcm5lZD86IGV4cGVjdGVkIDEgc3ltYm9sXCIpKTtcbiAgKCogUGhhc2UgMTM6IGNoYXJhY3RlciB0eXBlICopXG4gIGxldCBjaGFyX2Rvd25jYXNlX2NwIG4gPVxuICAgIGlmIG4gPj0gNjUgJiYgbiA8PSA5MCB0aGVuIG4gKyAzMiBlbHNlIG4gaW5cbiAgbGV0IGNoYXJfdXBjYXNlX2NwIG4gPVxuICAgIGlmIG4gPj0gOTcgJiYgbiA8PSAxMjIgdGhlbiBuIC0gMzIgZWxzZSBuIGluXG4gIHJlZ2lzdGVyIFwibWFrZS1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBDaGFyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWNoYXI6IGV4cGVjdGVkIGludGVnZXIgY29kZXBvaW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci0+aW50ZWdlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gSW50ZWdlciBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci0+aW50ZWdlcjogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiaW50ZWdlci0+Y2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gQ2hhciBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW50ZWdlci0+Y2hhcjogZXhwZWN0ZWQgaW50ZWdlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci11cGNhc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IENoYXIgKGNoYXJfdXBjYXNlX2NwIG4pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci11cGNhc2U6IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItZG93bmNhc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IENoYXIgKGNoYXJfZG93bmNhc2VfY3AgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWRvd25jYXNlOiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPT9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPSBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcj0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPD9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPCBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcjw/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPj9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPiBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcj4/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPD0/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPD0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcjw9PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhcj49P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChhID49IGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXI+PT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k9P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhID0gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k8P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhIDwgY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPD86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k+P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhID4gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPj86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k8PT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhIDw9IGNoYXJfZG93bmNhc2VfY3AgYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1jaTw9PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaT49P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPj0gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPj0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWFscGhhYmV0aWM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBCb29sICgobiA+PSA2NSAmJiBuIDw9IDkwKSB8fCAobiA+PSA5NyAmJiBuIDw9IDEyMikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1hbHBoYWJldGljPzogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1udW1lcmljP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQm9vbCAobiA+PSA0OCAmJiBuIDw9IDU3KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItbnVtZXJpYz86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItd2hpdGVzcGFjZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKG4gPSAzMiB8fCBuID0gOSB8fCBuID0gMTAgfHwgbiA9IDEzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItd2hpdGVzcGFjZT86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItdXBwZXItY2FzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKG4gPj0gNjUgJiYgbiA8PSA5MClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLXVwcGVyLWNhc2U/OiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWxvd2VyLWNhc2U/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBCb29sIChuID49IDk3ICYmIG4gPD0gMTIyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItbG93ZXItY2FzZT86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcInN0cmluZy0+bGlzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgbGV0IGNoYXJzID0gcmVmIFtdIGluXG4gICAgICBTdHJpbmcuaXRlciAoZnVuIGMgLT4gY2hhcnMgOj0gQ2hhciAoQ2hhci5jb2RlIGMpIDo6ICFjaGFycykgcztcbiAgICAgIExpc3QgKExpc3QucmV2ICFjaGFycylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPmxpc3Q6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBjaGFyc10gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gY2hhcnMgfV0gLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChMaXN0Lmxlbmd0aCBjaGFycykgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgICAgfCBDaGFyIG4gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG4gbGFuZCAweEZGKSlcbiAgICAgICAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImxpc3QtPnN0cmluZzogZXhwZWN0ZWQgY2hhciwgZ290IFwiIF4gdHlwZV9vZiB2KSlcbiAgICAgICkgY2hhcnM7XG4gICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGlzdC0+c3RyaW5nOiBleHBlY3RlZCBsaXN0IG9mIGNoYXJzXCIpKTtcbiAgKCogUGhhc2UgMTQg4oCUIEVPRiBvYmplY3QgKyBzdHJpbmcgcG9ydHMgKilcbiAgcmVnaXN0ZXIgXCJlb2Ytb2JqZWN0XCIgKGZ1biBfYXJncyAtPiBFb2YpO1xuICByZWdpc3RlciBcImVvZi1vYmplY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRW9mXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlb2Ytb2JqZWN0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwib3Blbi1pbnB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT5cbiAgICAgIFBvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRJbnB1dCAocywgcmVmIDApIH1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvcGVuLWlucHV0LXN0cmluZzogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJvcGVuLW91dHB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IFBvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgKEJ1ZmZlci5jcmVhdGUgNjQpIH1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvcGVuLW91dHB1dC1zdHJpbmc6IGV4cGVjdGVkIG5vIGFyZ3VtZW50c1wiKSk7XG4gIHJlZ2lzdGVyIFwiZ2V0LW91dHB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgYnVmOyBfIH1dIC0+IFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZXQtb3V0cHV0LXN0cmluZzogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcInBvcnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUG9ydCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwb3J0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwiaW5wdXQtcG9ydD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHsgc3Bfa2luZCA9IFBvcnRJbnB1dCBfOyBfIH1dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnB1dC1wb3J0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwib3V0cHV0LXBvcnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUG9ydCB7IHNwX2tpbmQgPSBQb3J0T3V0cHV0IF87IF8gfV0gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvdXRwdXQtcG9ydD86IGV4cGVjdGVkIDEgYXJndW1lbnRcIikpO1xuICByZWdpc3RlciBcImNsb3NlLXBvcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHBdIC0+IHAuc3BfY2xvc2VkIDwtIHRydWU7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsb3NlLXBvcnQ6IGV4cGVjdGVkIHBvcnRcIikpO1xuICByZWdpc3RlciBcInJlYWQtY2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWNoYXI6IG5vIGRlZmF1bHQgcG9ydCBpbiB0aGlzIGhvc3RcIilcbiAgICB8IFtQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRPdXRwdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGlmIHAuc3BfY2xvc2VkIHx8ICFwb3MgPj0gU3RyaW5nLmxlbmd0aCBzcmMgdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgbGV0IGNwID0gQ2hhci5jb2RlIHNyYy5bIXBvc10gaW5cbiAgICAgICAgICAgaW5jciBwb3M7XG4gICAgICAgICAgIENoYXIgY3BcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWNoYXI6IGV4cGVjdGVkIGlucHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcInBlZWstY2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwZWVrLWNoYXI6IG5vIGRlZmF1bHQgcG9ydCBpbiB0aGlzIGhvc3RcIilcbiAgICB8IFtQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRPdXRwdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWstY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGlmIHAuc3BfY2xvc2VkIHx8ICFwb3MgPj0gU3RyaW5nLmxlbmd0aCBzcmMgdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgQ2hhciAoQ2hhci5jb2RlIHNyYy5bIXBvc10pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWstY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwicmVhZC1saW5lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtbGluZTogbm8gZGVmYXVsdCBwb3J0IGluIHRoaXMgaG9zdFwiKVxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1saW5lOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0SW5wdXQgKHNyYywgcG9zKSAtPlxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBTdHJpbmcubGVuZ3RoIHNyYyB0aGVuIEVvZlxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBsZXQgc3RhcnQgPSAhcG9zIGluXG4gICAgICAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYyBpblxuICAgICAgICAgICB3aGlsZSAhcG9zIDwgbGVuICYmIHNyYy5bIXBvc10gPD4gJ1xcbicgZG8gaW5jciBwb3MgZG9uZTtcbiAgICAgICAgICAgbGV0IGxpbmUgPSBTdHJpbmcuc3ViIHNyYyBzdGFydCAoIXBvcyAtIHN0YXJ0KSBpblxuICAgICAgICAgICBpZiAhcG9zIDwgbGVuIHRoZW4gaW5jciBwb3M7XG4gICAgICAgICAgIFN0cmluZyBsaW5lXG4gICAgICAgICBlbmQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1saW5lOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZS1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuOyBQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRJbnB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGUtY2hhcjogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIilcbiAgICAgICB8IFBvcnRPdXRwdXQgYnVmIC0+XG4gICAgICAgICBpZiBub3QgcC5zcF9jbG9zZWQgdGhlblxuICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChDaGFyLmNociAobiBsYW5kIDB4RkYpKTtcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1jaGFyOiBleHBlY3RlZCBjaGFyIGFuZCBvdXRwdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwid3JpdGUtc3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IFBvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydElucHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1zdHJpbmc6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gICAgICAgICBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGUtc3RyaW5nOiBleHBlY3RlZCBzdHJpbmcgYW5kIG91dHB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLXJlYWR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRJbnB1dCAoc3JjLCBwb3MpOyBfIH1dIC0+XG4gICAgICBCb29sICghcG9zIDwgU3RyaW5nLmxlbmd0aCBzcmMpXG4gICAgfCBbUG9ydCBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1yZWFkeT86IGV4cGVjdGVkIGlucHV0IHBvcnRcIikpXG47XG4gICgqID09PSByZWFkIC8gd3JpdGUgLyBkaXNwbGF5ID09PSAqKVxuICBsZXQgcmVjIHJlYWRfcG9zdHByb2Nlc3MgPSBmdW5jdGlvblxuICAgIHwgTGlzdCBbXSAtPiBOaWxcbiAgICB8IExpc3QgaXRlbXMgLT4gTGlzdCAoTGlzdC5tYXAgcmVhZF9wb3N0cHJvY2VzcyBpdGVtcylcbiAgICB8IHYgLT4gdlxuICBpblxuICByZWdpc3RlciBcInJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEVvZlxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZDogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYyBpblxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBsZW4gdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgbGV0IHN1YiA9IFN0cmluZy5zdWIgc3JjICFwb3MgKGxlbiAtICFwb3MpIGluXG4gICAgICAgICAgIGxldCBzID0gU3hfcGFyc2VyLm1ha2Vfc3RhdGUgc3ViIGluXG4gICAgICAgICAgIFN4X3BhcnNlci5za2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgICAgICAgIGlmIFN4X3BhcnNlci5hdF9lbmQgcyB0aGVuIChwb3MgOj0gbGVuOyBFb2YpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAodHJ5IGxldCBmb3JtID0gcmVhZF9wb3N0cHJvY2VzcyAoU3hfcGFyc2VyLnJlYWRfdmFsdWUgcykgaW5cbiAgICAgICAgICAgICAgICAgIHBvcyA6PSAhcG9zICsgcy5wb3M7IGZvcm1cbiAgICAgICAgICAgICAgd2l0aCBfIC0+IHBvcyA6PSBsZW47IEVvZilcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkOiBleHBlY3RlZCBvcHRpb25hbCBpbnB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IFN0cmluZyAoc3hfd3JpdGVfdmFsIHYpXG4gICAgfCBbdjsgUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlOiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydE91dHB1dCBidWYgLT5cbiAgICAgICAgIGlmIG5vdCBwLnNwX2Nsb3NlZCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3hfd3JpdGVfdmFsIHYpO1xuICAgICAgICAgTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlOiBleHBlY3RlZCB2YWwgW3BvcnRdXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNwbGF5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF9kaXNwbGF5X3ZhbCB2KVxuICAgIHwgW3Y7IFBvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydElucHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaXNwbGF5OiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydE91dHB1dCBidWYgLT5cbiAgICAgICAgIGlmIG5vdCBwLnNwX2Nsb3NlZCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3hfZGlzcGxheV92YWwgdik7XG4gICAgICAgICBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGlzcGxheTogZXhwZWN0ZWQgdmFsIFtwb3J0XVwiKSk7XG4gIHJlZ2lzdGVyIFwibmV3bGluZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gTmlsXG4gICAgfCBbUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5ld2xpbmU6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJuZXdsaW5lOiBleHBlY3RlZCBvcHRpb25hbCBvdXRwdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwid3JpdGUtdG8tc3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF93cml0ZV92YWwgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS10by1zdHJpbmc6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNwbGF5LXRvLXN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IFN0cmluZyAoc3hfZGlzcGxheV92YWwgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaXNwbGF5LXRvLXN0cmluZzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImZvcm1hdC1kZWNpbWFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIHByZWNdIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLipmXCIgcHJlYyAoZmxvYXRfb2ZfaW50IG4pKVxuICAgIHwgW051bWJlciBuOyAgSW50ZWdlciBwcmVjXSAtPiBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiJS4qZlwiIHByZWMgbilcbiAgICB8IFtJbnRlZ2VyIG47IF9dIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLjZmXCIgKGZsb2F0X29mX2ludCBuKSlcbiAgICB8IFtOdW1iZXIgbjsgIF9dIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLjZmXCIgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmb3JtYXQtZGVjaW1hbDogZXhwZWN0ZWQgbnVtYmVyIHByZWNpc2lvblwiKSk7XG4gIHJlZ2lzdGVyIFwiY3VycmVudC1pbnB1dC1wb3J0XCIgIChmdW4gXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImN1cnJlbnQtb3V0cHV0LXBvcnRcIiAoZnVuIF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjdXJyZW50LWVycm9yLXBvcnRcIiAgKGZ1biBfIC0+IE5pbCk7XG4gICgqIC0tLS0gU2V0cyAtLS0tICopXG4gIGxldCBzZXRfa2V5IHYgPSBTeF90eXBlcy5pbnNwZWN0IHYgaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLXNldFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBodCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICAobWF0Y2ggYXJncyB3aXRoXG4gICAgIHwgW10gLT4gKClcbiAgICAgfCBbTGlzdCBpdGVtc10gLT4gTGlzdC5pdGVyIChmdW4gdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgKHNldF9rZXkgdikgdikgaXRlbXNcbiAgICAgfCBbTGlzdFJlZiByXSAtPiBMaXN0Lml0ZXIgKGZ1biB2IC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2KSAhclxuICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXNldDogZXhwZWN0ZWQgb3B0aW9uYWwgbGlzdFwiKSk7XG4gICAgU3hTZXQgaHQpO1xuICByZWdpc3RlciBcInNldD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNldC1hZGQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IHZdIC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtYWRkITogZXhwZWN0ZWQgc2V0IHZhbFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LW1lbWJlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodDsgdl0gLT4gQm9vbCAoSGFzaHRibC5tZW0gaHQgKHNldF9rZXkgdikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW1lbWJlcj86IGV4cGVjdGVkIHNldCB2YWxcIikpO1xuICByZWdpc3RlciBcInNldC1yZW1vdmUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IHZdIC0+IEhhc2h0YmwucmVtb3ZlIGh0IChzZXRfa2V5IHYpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtcmVtb3ZlITogZXhwZWN0ZWQgc2V0IHZhbFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LXNpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodF0gLT4gSW50ZWdlciAoSGFzaHRibC5sZW5ndGggaHQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LXNpemU6IGV4cGVjdGVkIHNldFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHRdIC0+IExpc3QgKEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhY2MgLT4gdiA6OiBhY2MpIGh0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC0+bGlzdDogZXhwZWN0ZWQgc2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJsaXN0LT5zZXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGl0ZW1zXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgKExpc3QubGVuZ3RoIGl0ZW1zKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgKHNldF9rZXkgdikgdikgaXRlbXM7XG4gICAgICBTeFNldCBodFxuICAgIHwgW0xpc3RSZWYgcl0gLT5cbiAgICAgIGxldCBodCA9IEhhc2h0YmwuY3JlYXRlIChMaXN0Lmxlbmd0aCAhcikgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gSGFzaHRibC5yZXBsYWNlIGh0IChzZXRfa2V5IHYpIHYpICFyO1xuICAgICAgU3hTZXQgaHRcbiAgICB8IFtOaWxdIC0+IFN4U2V0IChIYXNodGJsLmNyZWF0ZSAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxpc3QtPnNldDogZXhwZWN0ZWQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LXVuaW9uXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgYTsgU3hTZXQgYl0gLT5cbiAgICAgIGxldCBodCA9IEhhc2h0YmwuY29weSBhIGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIGh0IGsgdikgYjtcbiAgICAgIFN4U2V0IGh0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LXVuaW9uOiBleHBlY3RlZCAyIHNldHNcIikpO1xuICByZWdpc3RlciBcInNldC1pbnRlcnNlY3Rpb25cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBhOyBTeFNldCBiXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlmIEhhc2h0YmwubWVtIGIgayB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpIGE7XG4gICAgICBTeFNldCBodFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1pbnRlcnNlY3Rpb246IGV4cGVjdGVkIDIgc2V0c1wiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LWRpZmZlcmVuY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBhOyBTeFNldCBiXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlmIG5vdCAoSGFzaHRibC5tZW0gYiBrKSB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpIGE7XG4gICAgICBTeFNldCBodFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1kaWZmZXJlbmNlOiBleHBlY3RlZCAyIHNldHNcIikpO1xuICByZWdpc3RlciBcInNldC1mb3ItZWFjaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGh0OyBmbl0gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFt2XSkpKSBodDtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1mb3ItZWFjaDogZXhwZWN0ZWQgc2V0IGZuXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbWFwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IGZuXSAtPlxuICAgICAgbGV0IG91dCA9IEhhc2h0YmwuY3JlYXRlIChIYXNodGJsLmxlbmd0aCBodCkgaW5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPlxuICAgICAgICBsZXQgciA9ICFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFt2XSkgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIG91dCAoc2V0X2tleSByKSByKSBodDtcbiAgICAgIFN4U2V0IG91dFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1tYXA6IGV4cGVjdGVkIHNldCBmblwiKSk7XG4gICgqID09PSBCeXRldmVjdG9ycyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJtYWtlLWJ5dGV2ZWN0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IFN4Qnl0ZXZlY3RvciAoQnl0ZXMubWFrZSBuICdcXDAwMCcpXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIGZpbGxdIC0+XG4gICAgICBpZiBmaWxsIDwgMCB8fCBmaWxsID4gMjU1IHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWJ5dGV2ZWN0b3I6IGZpbGwgbXVzdCBiZSAwLTI1NVwiKTtcbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMubWFrZSBuIChDaGFyLmNociBmaWxsKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWJ5dGV2ZWN0b3I6IGV4cGVjdGVkIG4gW2ZpbGxdXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiXSAtPiBJbnRlZ2VyIChCeXRlcy5sZW5ndGggYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLWxlbmd0aDogZXhwZWN0ZWQgYnl0ZXZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwiYnl0ZXZlY3Rvci11OC1yZWZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBpXSAtPlxuICAgICAgaWYgaSA8IDAgfHwgaSA+PSBCeXRlcy5sZW5ndGggYiB0aGVuXG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImJ5dGV2ZWN0b3ItdTgtcmVmOiBpbmRleCAlZCBvdXQgb2YgcmFuZ2VcIiBpKSk7XG4gICAgICBJbnRlZ2VyIChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItdTgtcmVmOiBleHBlY3RlZCBieXRldmVjdG9yIGluZGV4XCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLXU4LXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBpOyBJbnRlZ2VyIGJ5dGVdIC0+XG4gICAgICBpZiBpIDwgMCB8fCBpID49IEJ5dGVzLmxlbmd0aCBiIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiYnl0ZXZlY3Rvci11OC1zZXQhOiBpbmRleCAlZCBvdXQgb2YgcmFuZ2VcIiBpKSk7XG4gICAgICBpZiBieXRlIDwgMCB8fCBieXRlID4gMjU1IHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLXU4LXNldCE6IGJ5dGUgbXVzdCBiZSAwLTI1NVwiKTtcbiAgICAgIEJ5dGVzLnNldCBiIGkgKENoYXIuY2hyIGJ5dGUpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLXU4LXNldCE6IGV4cGVjdGVkIGJ5dGV2ZWN0b3IgaW5kZXggYnl0ZVwiKSk7XG4gIHJlZ2lzdGVyIFwiYnl0ZXZlY3Rvci1jb3B5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+IFN4Qnl0ZXZlY3RvciAoQnl0ZXMuY29weSBiKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBiIC0gc3RhcnQgaW5cbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMuc3ViIGIgc3RhcnQgbGVuKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIHN0YXJ0OyBJbnRlZ2VyIHN0b3BdIC0+XG4gICAgICBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLnN1YiBiIHN0YXJ0IChzdG9wIC0gc3RhcnQpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItY29weTogZXhwZWN0ZWQgYnl0ZXZlY3RvciBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLWNvcHkhXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGRvX2NvcHkgZHN0IGF0IHNyYyBzdGFydCBzdG9wID1cbiAgICAgIGxldCBsZW4gPSBzdG9wIC0gc3RhcnQgaW5cbiAgICAgIEJ5dGVzLmJsaXQgc3JjIHN0YXJ0IGRzdCBhdCBsZW47IE5pbFxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGRzdDsgSW50ZWdlciBhdDsgU3hCeXRldmVjdG9yIHNyY10gLT5cbiAgICAgIGRvX2NvcHkgZHN0IGF0IHNyYyAwIChCeXRlcy5sZW5ndGggc3JjKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBkc3Q7IEludGVnZXIgYXQ7IFN4Qnl0ZXZlY3RvciBzcmM7IEludGVnZXIgc3RhcnRdIC0+XG4gICAgICBkb19jb3B5IGRzdCBhdCBzcmMgc3RhcnQgKEJ5dGVzLmxlbmd0aCBzcmMpXG4gICAgfCBbU3hCeXRldmVjdG9yIGRzdDsgSW50ZWdlciBhdDsgU3hCeXRldmVjdG9yIHNyYzsgSW50ZWdlciBzdGFydDsgSW50ZWdlciBzdG9wXSAtPlxuICAgICAgZG9fY29weSBkc3QgYXQgc3JjIHN0YXJ0IHN0b3BcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLWNvcHkhOiBleHBlY3RlZCBkc3QgYXQgc3JjIFtzdGFydCBbZW5kXV1cIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGJ1ZnMgPSBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgIHwgU3hCeXRldmVjdG9yIGIgLT4gYlxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci1hcHBlbmQ6IGV4cGVjdGVkIGJ5dGV2ZWN0b3JzXCIpKSBhcmdzIGluXG4gICAgbGV0IHRvdGFsID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYiAtPiBhY2MgKyBCeXRlcy5sZW5ndGggYikgMCBidWZzIGluXG4gICAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSB0b3RhbCBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIExpc3QuaXRlciAoZnVuIGIgLT5cbiAgICAgIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYiBpblxuICAgICAgQnl0ZXMuYmxpdCBiIDAgcmVzdWx0ICFwb3MgbGVuO1xuICAgICAgcG9zIDo9ICFwb3MgKyBsZW4pIGJ1ZnM7XG4gICAgU3hCeXRldmVjdG9yIHJlc3VsdCk7XG4gIHJlZ2lzdGVyIFwidXRmOC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+IFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGIpXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnRdIC0+XG4gICAgICBTdHJpbmcgKEJ5dGVzLnN1Yl9zdHJpbmcgYiBzdGFydCAoQnl0ZXMubGVuZ3RoIGIgLSBzdGFydCkpXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnQ7IEludGVnZXIgc3RvcF0gLT5cbiAgICAgIFN0cmluZyAoQnl0ZXMuc3ViX3N0cmluZyBiIHN0YXJ0IChzdG9wIC0gc3RhcnQpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInV0ZjgtPnN0cmluZzogZXhwZWN0ZWQgYnl0ZXZlY3RvciBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctPnV0ZjhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5vZl9zdHJpbmcgcylcbiAgICB8IFtTdHJpbmcgczsgSW50ZWdlciBzdGFydF0gLT5cbiAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgLSBzdGFydCBpblxuICAgICAgU3hCeXRldmVjdG9yIChCeXRlcy5vZl9zdHJpbmcgKFN0cmluZy5zdWIgcyBzdGFydCBsZW4pKVxuICAgIHwgW1N0cmluZyBzOyBJbnRlZ2VyIHN0YXJ0OyBJbnRlZ2VyIHN0b3BdIC0+XG4gICAgICBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLm9mX3N0cmluZyAoU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPnV0Zjg6IGV4cGVjdGVkIHN0cmluZyBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+XG4gICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgKEJ5dGVzLmxlbmd0aCBiKSAoZnVuIGkgLT4gSW50ZWdlciAoQ2hhci5jb2RlIChCeXRlcy5nZXQgYiBpKSkpIGluXG4gICAgICBMaXN0IGl0ZW1zXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci0+bGlzdDogZXhwZWN0ZWQgYnl0ZXZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdC0+Ynl0ZXZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgaXRlbXNdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH1dIC0+XG4gICAgICBsZXQgYnl0ZXNfbGlzdCA9IExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICB8IEludGVnZXIgbiB3aGVuIG4gPj0gMCAmJiBuIDw9IDI1NSAtPiBDaGFyLmNociBuXG4gICAgICAgIHwgSW50ZWdlciBuIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImxpc3QtPmJ5dGV2ZWN0b3I6IGJ5dGUgJWQgb3V0IG9mIHJhbmdlXCIgbikpXG4gICAgICAgIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJsaXN0LT5ieXRldmVjdG9yOiBleHBlY3RlZCBpbnRlZ2VyLCBnb3QgXCIgXiBTeF90eXBlcy50eXBlX29mIHYpKSkgaXRlbXMgaW5cbiAgICAgIGxldCBiID0gQnl0ZXMuY3JlYXRlIChMaXN0Lmxlbmd0aCBieXRlc19saXN0KSBpblxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgYyAtPiBCeXRlcy5zZXQgYiBpIGMpIGJ5dGVzX2xpc3Q7XG4gICAgICBTeEJ5dGV2ZWN0b3IgYlxuICAgIHwgW05pbF0gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5jcmVhdGUgMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0LT5ieXRldmVjdG9yOiBleHBlY3RlZCBsaXN0XCIpKTtcblxuICAoKiA9PT0gRmlsZSBJL08gPT09ICopXG4gIHJlZ2lzdGVyIFwiZmlsZS1yZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGhdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBpYyA9IG9wZW5faW4gcGF0aCBpblxuICAgICAgICBsZXQgbiA9IGluX2NoYW5uZWxfbGVuZ3RoIGljIGluXG4gICAgICAgIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiAgICAgICAgcmVhbGx5X2lucHV0IGljIHMgMCBuO1xuICAgICAgICBjbG9zZV9pbiBpYztcbiAgICAgICAgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgcylcbiAgICAgIHdpdGggU3lzX2Vycm9yIG1zZyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaWxlLXJlYWQ6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1yZWFkOiAocGF0aClcIikpO1xuXG4gICgqIGZlZC1zeCBTdGVwIDMgc2VnbWVudCByZXBsYXkuIFNvcnRlZCBuYW1lcywgbm8gXCIuXCIvXCIuLlwiIDtcbiAgICAgZXJyb3JzIHByZWZpeGVkIGxpa2UgZmlsZS1yZWFkIChtc2cgY2FycmllcyBlbm9lbnQvZW5vdGRpcikuICopXG4gIHJlZ2lzdGVyIFwiZmlsZS1saXN0LWRpclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRoXSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgbmFtZXMgPSBTeXMucmVhZGRpciBwYXRoIGluXG4gICAgICAgIGxldCBuYW1lcyA9XG4gICAgICAgICAgQXJyYXkudG9fbGlzdCBuYW1lc1xuICAgICAgICAgIHw+IExpc3QuZmlsdGVyIChmdW4gbiAtPiBuIDw+IFwiLlwiICYmIG4gPD4gXCIuLlwiKSBpblxuICAgICAgICBsZXQgbmFtZXMgPSBMaXN0LnNvcnQgY29tcGFyZSBuYW1lcyBpblxuICAgICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIG4gLT4gU3RyaW5nIG4pIG5hbWVzKVxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtbGlzdC1kaXI6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1saXN0LWRpcjogKHBhdGgpXCIpKTtcblxuICByZWdpc3RlciBcImZpbGUtd3JpdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aDsgU3RyaW5nIGNvbnRlbnRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBvYyA9IG9wZW5fb3V0IHBhdGggaW5cbiAgICAgICAgb3V0cHV0X3N0cmluZyBvYyBjb250ZW50O1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtd3JpdGU6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS13cml0ZTogKHBhdGggY29udGVudClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiZmlsZS1hcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aDsgU3RyaW5nIGNvbnRlbnRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBvYyA9IG9wZW5fb3V0X2dlbiBbT3Blbl9hcHBlbmQ7IE9wZW5fY3JlYXQ7IE9wZW5fd3Jvbmx5OyBPcGVuX3RleHRdIDBvNjQ0IHBhdGggaW5cbiAgICAgICAgb3V0cHV0X3N0cmluZyBvYyBjb250ZW50O1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtYXBwZW5kOiBcIiBeIG1zZykpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtYXBwZW5kOiAocGF0aCBjb250ZW50KVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJmaWxlLWV4aXN0cz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT4gQm9vbCAoU3lzLmZpbGVfZXhpc3RzIHBhdGgpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1leGlzdHM/OiAocGF0aClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiZmlsZS1nbG9iXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGdsb2JfbWF0Y2ggcGF0IHN0ciA9XG4gICAgICBsZXQgcG4gPSBTdHJpbmcubGVuZ3RoIHBhdCBhbmQgc24gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgICAgbGV0IHJlYyBnbyBwaSBzaSA9XG4gICAgICAgIGlmIHBpID0gcG4gdGhlbiBzaSA9IHNuXG4gICAgICAgIGVsc2UgbWF0Y2ggcGF0LltwaV0gd2l0aFxuICAgICAgICAgIHwgJyonIC0+XG4gICAgICAgICAgICBsZXQgcmVjIHRyeV9mcm9tIGkgPSBpIDw9IHNuICYmIChnbyAocGkrMSkgaSB8fCB0cnlfZnJvbSAoaSsxKSkgaW5cbiAgICAgICAgICAgIHRyeV9mcm9tIHNpXG4gICAgICAgICAgfCAnPycgLT4gc2kgPCBzbiAmJiBnbyAocGkrMSkgKHNpKzEpXG4gICAgICAgICAgfCAnWycgLT5cbiAgICAgICAgICAgIGxldCBwaScgPSByZWYgKHBpKzEpIGluXG4gICAgICAgICAgICBsZXQgbmVnYXRlID0gIXBpJyA8IHBuICYmIHBhdC5bIXBpJ10gPSAnXicgaW5cbiAgICAgICAgICAgIGlmIG5lZ2F0ZSB0aGVuIGluY3IgcGknO1xuICAgICAgICAgICAgbGV0IG1hdGNoZWQgPSByZWYgZmFsc2UgaW5cbiAgICAgICAgICAgIHdoaWxlICFwaScgPCBwbiAmJiBwYXQuWyFwaSddIDw+ICddJyBkb1xuICAgICAgICAgICAgICBsZXQgYzEgPSBwYXQuWyFwaSddIGluXG4gICAgICAgICAgICAgIGluY3IgcGknO1xuICAgICAgICAgICAgICBpZiAhcGknICsgMSA8IHBuICYmIHBhdC5bIXBpJ10gPSAnLScgdGhlbiBiZWdpblxuICAgICAgICAgICAgICAgIGxldCBjMiA9IHBhdC5bIXBpJyArIDFdIGluXG4gICAgICAgICAgICAgICAgcGknIDo9ICFwaScgKyAyO1xuICAgICAgICAgICAgICAgIGlmIHNpIDwgc24gJiYgc3RyLltzaV0gPj0gYzEgJiYgc3RyLltzaV0gPD0gYzIgdGhlbiBtYXRjaGVkIDo9IHRydWVcbiAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgc2kgPCBzbiAmJiBzdHIuW3NpXSA9IGMxIHRoZW4gbWF0Y2hlZCA6PSB0cnVlXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgaWYgIXBpJyA8IHBuIHRoZW4gaW5jciBwaSc7XG4gICAgICAgICAgICAoKCFtYXRjaGVkICYmIG5vdCBuZWdhdGUpIHx8IChub3QgIW1hdGNoZWQgJiYgbmVnYXRlKSkgJiYgZ28gIXBpJyAoc2krMSlcbiAgICAgICAgICB8IGMgLT4gc2kgPCBzbiAmJiBzdHIuW3NpXSA9IGMgJiYgZ28gKHBpKzEpIChzaSsxKVxuICAgICAgaW4gZ28gMCAwXG4gICAgaW5cbiAgICBsZXQgZ2xvYl9wYXRocyBwYXQgPVxuICAgICAgbGV0IGRpciA9IEZpbGVuYW1lLmRpcm5hbWUgcGF0IGluXG4gICAgICBsZXQgYmFzZV9wYXQgPSBGaWxlbmFtZS5iYXNlbmFtZSBwYXQgaW5cbiAgICAgIGxldCBkaXInID0gaWYgZGlyID0gXCIuXCIgJiYgbm90IChTdHJpbmcubGVuZ3RoIHBhdCA+IDEgJiYgcGF0LlswXSA9ICcuJykgdGhlbiBcIi5cIiBlbHNlIGRpciBpblxuICAgICAgKHRyeVxuICAgICAgICBsZXQgZW50cmllcyA9IFN5cy5yZWFkZGlyIGRpcicgaW5cbiAgICAgICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gYWNjIGVudHJ5IC0+XG4gICAgICAgICAgaWYgZ2xvYl9tYXRjaCBiYXNlX3BhdCBlbnRyeSB0aGVuXG4gICAgICAgICAgICBsZXQgZnVsbCA9IGlmIGRpcicgPSBcIi5cIiB0aGVuIGVudHJ5IGVsc2UgRmlsZW5hbWUuY29uY2F0IGRpcicgZW50cnkgaW5cbiAgICAgICAgICAgIGZ1bGwgOjogYWNjXG4gICAgICAgICAgZWxzZSBhY2NcbiAgICAgICAgKSBbXSBlbnRyaWVzXG4gICAgICAgIHw+IExpc3Quc29ydCBTdHJpbmcuY29tcGFyZVxuICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPiBbXSlcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgKGdsb2JfcGF0aHMgcGF0KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLWdsb2I6IChwYXR0ZXJuKVwiKSk7XG5cbiAgKCogPT09IEZpbGUgbWV0YWRhdGEgKyBvcHMgKFBoYXNlIDVkKSA9PT0gKilcbiAgbGV0IHN0YXRfb3IgPSBmdW5jdGlvblxuICAgIHwgU3RyaW5nIHBhdGggLT4gKHRyeSBTb21lIChVbml4LnN0YXQgcGF0aCkgd2l0aCBfIC0+IE5vbmUpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZTogcGF0aCBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gIGluXG4gIHJlZ2lzdGVyIFwiZmlsZS1zaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gKG1hdGNoIHN0YXRfb3IgdiB3aXRoIFNvbWUgcyAtPiBJbnRlZ2VyIHMuVW5peC5zdF9zaXplIHwgTm9uZSAtPiBJbnRlZ2VyIDApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1zaXplOiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtbXRpbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc3RhdF9vciB2IHdpdGggU29tZSBzIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCBzLlVuaXguc3RfbXRpbWUpIHwgTm9uZSAtPiBJbnRlZ2VyIDApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1tdGltZTogKHBhdGgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWxlLWlzZmlsZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc3RhdF9vciB2IHdpdGggU29tZSBzIC0+IEJvb2wgKHMuVW5peC5zdF9raW5kID0gVW5peC5TX1JFRykgfCBOb25lIC0+IEJvb2wgZmFsc2UpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1pc2ZpbGU/OiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtaXNkaXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gKG1hdGNoIHN0YXRfb3IgdiB3aXRoIFNvbWUgcyAtPiBCb29sIChzLlVuaXguc3Rfa2luZCA9IFVuaXguU19ESVIpIHwgTm9uZSAtPiBCb29sIGZhbHNlKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtaXNkaXI/OiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtcmVhZGFibGU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGhdIC0+XG4gICAgICBCb29sICh0cnkgVW5peC5hY2Nlc3MgcGF0aCBbVW5peC5SX09LXTsgdHJ1ZSB3aXRoIF8gLT4gZmFsc2UpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1yZWFkYWJsZT86IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS13cml0YWJsZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT5cbiAgICAgIEJvb2wgKHRyeSBVbml4LmFjY2VzcyBwYXRoIFtVbml4LldfT0tdOyB0cnVlIHdpdGggXyAtPiBmYWxzZSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLXdyaXRhYmxlPzogKHBhdGgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWxlLXN0YXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPlxuICAgICAgKG1hdGNoIHN0YXRfb3IgdiB3aXRoXG4gICAgICAgfCBOb25lIC0+IE5pbFxuICAgICAgIHwgU29tZSBzIC0+XG4gICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDYgaW5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwic2l6ZVwiIChJbnRlZ2VyIHMuVW5peC5zdF9zaXplKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibXRpbWVcIiAoSW50ZWdlciAoaW50X29mX2Zsb2F0IHMuVW5peC5zdF9tdGltZSkpO1xuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJhdGltZVwiIChJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgcy5Vbml4LnN0X2F0aW1lKSk7XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImN0aW1lXCIgKEludGVnZXIgKGludF9vZl9mbG9hdCBzLlVuaXguc3RfY3RpbWUpKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibW9kZVwiIChJbnRlZ2VyIHMuVW5peC5zdF9wZXJtKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgKG1hdGNoIHMuVW5peC5zdF9raW5kIHdpdGhcbiAgICAgICAgICAgfCBVbml4LlNfUkVHIC0+IFwiZmlsZVwiIHwgVW5peC5TX0RJUiAtPiBcImRpcmVjdG9yeVwiXG4gICAgICAgICAgIHwgVW5peC5TX0xOSyAtPiBcImxpbmtcIiB8IFVuaXguU19DSFIgLT4gXCJjaGFyYWN0ZXJTcGVjaWFsXCJcbiAgICAgICAgICAgfCBVbml4LlNfQkxLIC0+IFwiYmxvY2tTcGVjaWFsXCIgfCBVbml4LlNfRklGTyAtPiBcImZpZm9cIlxuICAgICAgICAgICB8IFVuaXguU19TT0NLIC0+IFwic29ja2V0XCIpKTtcbiAgICAgICAgIERpY3QgZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLXN0YXQ6IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1kZWxldGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgaWYgU3lzLmlzX2RpcmVjdG9yeSBwYXRoIHRoZW4gVW5peC5ybWRpciBwYXRoXG4gICAgICAgIGVsc2UgVW5peC51bmxpbmsgcGF0aFxuICAgICAgd2l0aFxuICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRU5PRU5ULCBfLCBfKSAtPiAoKSAgKCogdG9sZXJhdGUgbWlzc2luZyAqKVxuICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtZGVsZXRlOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1kZWxldGU6IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1ta2RpclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRoXSAtPlxuICAgICAgbGV0IHJlYyBtayBwID1cbiAgICAgICAgaWYgcCA9IFwiXCIgfHwgcCA9IFwiLlwiIHx8IHAgPSBcIi9cIiB0aGVuICgpXG4gICAgICAgIGVsc2UgaWYgU3lzLmZpbGVfZXhpc3RzIHAgdGhlbiAoKVxuICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgbWsgKEZpbGVuYW1lLmRpcm5hbWUgcCk7XG4gICAgICAgICAgKHRyeSBVbml4Lm1rZGlyIHAgMG83NTVcbiAgICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRUVYSVNULCBfLCBfKSAtPiAoKSlcbiAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgKHRyeSBtayBwYXRoXG4gICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtbWtkaXI6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLW1rZGlyOiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtY29weVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmM7IFN0cmluZyBkc3RdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBpYyA9IG9wZW5faW5fYmluIHNyYyBpblxuICAgICAgICBsZXQgb2MgPSBvcGVuX291dF9iaW4gZHN0IGluXG4gICAgICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgODE5MiBpblxuICAgICAgICBsZXQgcmVjIGxvb3AgKCkgPVxuICAgICAgICAgIGxldCBuID0gaW5wdXQgaWMgYnVmIDAgKEJ5dGVzLmxlbmd0aCBidWYpIGluXG4gICAgICAgICAgaWYgbiA+IDAgdGhlbiAob3V0cHV0IG9jIGJ1ZiAwIG47IGxvb3AgKCkpXG4gICAgICAgIGluXG4gICAgICAgIGxvb3AgKCk7XG4gICAgICAgIGNsb3NlX2luIGljO1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aFxuICAgICAgfCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtY29weTogXCIgXiBtc2cpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLWNvcHk6IChzcmMgZHN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1yZW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjOyBTdHJpbmcgZHN0XSAtPlxuICAgICAgKHRyeSBTeXMucmVuYW1lIHNyYyBkc3Qgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtcmVuYW1lOiBcIiBeIG1zZykpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtcmVuYW1lOiAoc3JjIGRzdClcIikpO1xuXG4gICgqID09PSBDaGFubmVscyAocmFuZG9tLWFjY2VzcyArIGJsb2NraW5nIGNvbnRyb2wpID09PSAqKVxuICBsZXQgY2hhbm5lbF90YWJsZSA6IChzdHJpbmcsIFVuaXguZmlsZV9kZXNjciAqIHN0cmluZyAqIGJvb2wgcmVmICogYm9vbCByZWYpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gIGxldCBjaGFubmVsX25leHRfaWQgPSByZWYgMCBpblxuICBsZXQgcGFyc2Vfb3Blbl9tb2RlIG1vZGUgPVxuICAgIG1hdGNoIG1vZGUgd2l0aFxuICAgIHwgXCJyXCIgIC0+IFtVbml4Lk9fUkRPTkxZXVxuICAgIHwgXCJ3XCIgIC0+IFtVbml4Lk9fV1JPTkxZOyBVbml4Lk9fQ1JFQVQ7IFVuaXguT19UUlVOQ11cbiAgICB8IFwiYVwiICAtPiBbVW5peC5PX1dST05MWTsgVW5peC5PX0NSRUFUOyBVbml4Lk9fQVBQRU5EXVxuICAgIHwgXCJyK1wiIC0+IFtVbml4Lk9fUkRXUl1cbiAgICB8IFwidytcIiAtPiBbVW5peC5PX1JEV1I7IFVuaXguT19DUkVBVDsgVW5peC5PX1RSVU5DXVxuICAgIHwgXCJhK1wiIC0+IFtVbml4Lk9fUkRXUjsgVW5peC5PX0NSRUFUOyBVbml4Lk9fQVBQRU5EXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjaGFubmVsLW9wZW46IGludmFsaWQgbW9kZSBcIiBeIG1vZGUpKVxuICBpblxuICBsZXQgY2hhbl9nZXQgbmFtZSA9XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBjaGFubmVsX3RhYmxlIG5hbWUgd2l0aFxuICAgIHwgU29tZSBjIC0+IGNcbiAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2hhbm5lbDogbm8gc3VjaCBjaGFubmVsIFwiIF4gbmFtZSkpXG4gIGluXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1vcGVuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGg7IFN0cmluZyBtb2RlXSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgZmQgPSBVbml4Lm9wZW5maWxlIHBhdGggKHBhcnNlX29wZW5fbW9kZSBtb2RlKSAwbzY0NCBpblxuICAgICAgICBsZXQgaWQgPSAhY2hhbm5lbF9uZXh0X2lkIGluXG4gICAgICAgIGluY3IgY2hhbm5lbF9uZXh0X2lkO1xuICAgICAgICBsZXQgbmFtZSA9IFByaW50Zi5zcHJpbnRmIFwiZmlsZSVkXCIgaWQgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGNoYW5uZWxfdGFibGUgbmFtZSAoZmQsIG1vZGUsIHJlZiBmYWxzZSwgcmVmIHRydWUpO1xuICAgICAgICBTdHJpbmcgbmFtZVxuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImNoYW5uZWwtb3BlbjogXCIgXiBVbml4LmVycm9yX21lc3NhZ2UgZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtb3BlbjogKHBhdGggbW9kZSlcIikpO1xuXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1jbG9zZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICAodHJ5IFVuaXguY2xvc2UgZmQgd2l0aCBfIC0+ICgpKTtcbiAgICAgIEhhc2h0YmwucmVtb3ZlIGNoYW5uZWxfdGFibGUgbmFtZTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtY2xvc2U6IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKG5hbWUsIG1heF9uKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbU3RyaW5nIG5dIC0+IChuLCAtMSlcbiAgICAgIHwgW1N0cmluZyBuOyBJbnRlZ2VyIG1dIC0+IChuLCBtKVxuICAgICAgfCBbU3RyaW5nIG47IE51bWJlciBtXSAtPiAobiwgaW50X29mX2Zsb2F0IG0pXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXJlYWQ6IChjaGFubmVsID9uPylcIilcbiAgICBpblxuICAgIGxldCAoZmQsIF8sIGVvZiwgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgbGV0IGNodW5rID0gODE5MiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgY2h1bmsgaW5cbiAgICBsZXQgYnVmZmVyID0gQnVmZmVyLmNyZWF0ZSBjaHVuayBpblxuICAgIGxldCB0b3RhbCA9IHJlZiAwIGluXG4gICAgbGV0IHN0b3AgPSByZWYgZmFsc2UgaW5cbiAgICB3aGlsZSBub3QgIXN0b3AgZG9cbiAgICAgIGxldCB3YW50ID0gaWYgbWF4X24gPCAwIHRoZW4gY2h1bmsgZWxzZSBtaW4gY2h1bmsgKG1heF9uIC0gIXRvdGFsKSBpblxuICAgICAgaWYgd2FudCA8PSAwIHRoZW4gc3RvcCA6PSB0cnVlXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIHRyeVxuICAgICAgICAgIGxldCByID0gVW5peC5yZWFkIGZkIGJ1ZiAwIHdhbnQgaW5cbiAgICAgICAgICBpZiByID0gMCB0aGVuIGJlZ2luIGVvZiA6PSB0cnVlOyBzdG9wIDo9IHRydWUgZW5kXG4gICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9zdWJieXRlcyBidWZmZXIgYnVmIDAgcjtcbiAgICAgICAgICAgIHRvdGFsIDo9ICF0b3RhbCArIHJcbiAgICAgICAgICBlbmRcbiAgICAgICAgd2l0aFxuICAgICAgICB8IFVuaXguVW5peF9lcnJvciAoVW5peC5FQUdBSU4sIF8sIF8pXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVXT1VMREJMT0NLLCBfLCBfKSAtPiBzdG9wIDo9IHRydWVcbiAgICAgIGVuZFxuICAgIGRvbmU7XG4gICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmZmVyKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXJlYWQtbGluZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgZW9mLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDgwIGluXG4gICAgICBsZXQgb25lID0gQnl0ZXMuY3JlYXRlIDEgaW5cbiAgICAgIGxldCBnb3RfZGF0YSA9IHJlZiBmYWxzZSBpblxuICAgICAgbGV0IHN0b3AgPSByZWYgZmFsc2UgaW5cbiAgICAgIHdoaWxlIG5vdCAhc3RvcCBkb1xuICAgICAgICB0cnlcbiAgICAgICAgICBsZXQgciA9IFVuaXgucmVhZCBmZCBvbmUgMCAxIGluXG4gICAgICAgICAgaWYgciA9IDAgdGhlbiBiZWdpbiBlb2YgOj0gdHJ1ZTsgc3RvcCA6PSB0cnVlIGVuZFxuICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgIGdvdF9kYXRhIDo9IHRydWU7XG4gICAgICAgICAgICBsZXQgYyA9IEJ5dGVzLmdldCBvbmUgMCBpblxuICAgICAgICAgICAgaWYgYyA9ICdcXG4nIHRoZW4gc3RvcCA6PSB0cnVlXG4gICAgICAgICAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBidWYgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB3aXRoXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVBR0FJTiwgXywgXylcbiAgICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRVdPVUxEQkxPQ0ssIF8sIF8pIC0+IHN0b3AgOj0gdHJ1ZVxuICAgICAgZG9uZTtcbiAgICAgIGlmICFnb3RfZGF0YSB0aGVuIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXJlYWQtbGluZTogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtd3JpdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCBiID0gQnl0ZXMub2Zfc3RyaW5nIHMgaW5cbiAgICAgIGxldCBuID0gQnl0ZXMubGVuZ3RoIGIgaW5cbiAgICAgIGxldCB3cml0dGVuID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICF3cml0dGVuIDwgbiBkb1xuICAgICAgICAodHJ5XG4gICAgICAgICAgbGV0IHcgPSBVbml4LndyaXRlIGZkIGIgIXdyaXR0ZW4gKG4gLSAhd3JpdHRlbikgaW5cbiAgICAgICAgICB3cml0dGVuIDo9ICF3cml0dGVuICsgd1xuICAgICAgICB3aXRoXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVBR0FJTiwgXywgXylcbiAgICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRVdPVUxEQkxPQ0ssIF8sIF8pIC0+XG4gICAgICAgICAgKCogc2hvcnQgd3JpdGUg4oCUIGxldCBjYWxsZXIgcmV0cnkgKilcbiAgICAgICAgICB3cml0dGVuIDo9IG4pXG4gICAgICBkb25lO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC13cml0ZTogKGNoYW5uZWwgc3RyaW5nKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLWZsdXNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+IGxldCBfID0gY2hhbl9nZXQgbmFtZSBpbiBOaWwgICgqIG5vIHVzZXJzcGFjZSBidWZmZXIgKilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLWZsdXNoOiAoY2hhbm5lbClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1zZWVrXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IChuYW1lLCBvZmZzZXQsIHdoZW5jZSkgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW1N0cmluZyBuOyBJbnRlZ2VyIG9dIC0+IChuLCBvLCBcInN0YXJ0XCIpXG4gICAgICB8IFtTdHJpbmcgbjsgTnVtYmVyIG9dIC0+IChuLCBpbnRfb2ZfZmxvYXQgbywgXCJzdGFydFwiKVxuICAgICAgfCBbU3RyaW5nIG47IEludGVnZXIgbzsgU3RyaW5nIHddIC0+IChuLCBvLCB3KVxuICAgICAgfCBbU3RyaW5nIG47IE51bWJlciBvOyBTdHJpbmcgd10gLT4gKG4sIGludF9vZl9mbG9hdCBvLCB3KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1zZWVrOiAoY2hhbm5lbCBvZmZzZXQgP3doZW5jZT8pXCIpXG4gICAgaW5cbiAgICBsZXQgKGZkLCBfLCBlb2YsIF8pID0gY2hhbl9nZXQgbmFtZSBpblxuICAgIGxldCBjbWQgPSBtYXRjaCB3aGVuY2Ugd2l0aFxuICAgICAgfCBcInN0YXJ0XCIgLT4gVW5peC5TRUVLX1NFVFxuICAgICAgfCBcImN1cnJlbnRcIiAtPiBVbml4LlNFRUtfQ1VSXG4gICAgICB8IFwiZW5kXCIgLT4gVW5peC5TRUVLX0VORFxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImNoYW5uZWwtc2VlazogaW52YWxpZCB3aGVuY2UgXCIgXiB3aGVuY2UpKVxuICAgIGluXG4gICAgbGV0IF8gPSBVbml4LmxzZWVrIGZkIG9mZnNldCBjbWQgaW5cbiAgICBlb2YgOj0gZmFsc2U7XG4gICAgTmlsKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtdGVsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICBJbnRlZ2VyIChVbml4LmxzZWVrIGZkIDAgVW5peC5TRUVLX0NVUilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXRlbGw6IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLWVvZj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCAoXywgXywgZW9mLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIEJvb2wgIWVvZlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtZW9mPzogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtYmxvY2tpbmc/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgKF8sIF8sIF8sIGJsb2NraW5nKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIEJvb2wgIWJsb2NraW5nXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1ibG9ja2luZz86IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXNldC1ibG9ja2luZyFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgQm9vbCBiXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgYmxvY2tpbmcpID0gY2hhbl9nZXQgbmFtZSBpblxuICAgICAgYmxvY2tpbmcgOj0gYjtcbiAgICAgICh0cnlcbiAgICAgICAgaWYgYiB0aGVuIFVuaXguY2xlYXJfbm9uYmxvY2sgZmRcbiAgICAgICAgZWxzZSBVbml4LnNldF9ub25ibG9jayBmZFxuICAgICAgd2l0aCBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtc2V0LWJsb2NraW5nITogKGNoYW5uZWwgYm9vbClcIikpO1xuXG4gICgqID09PSBFeGVjID09PSBydW4gYW4gZXh0ZXJuYWwgcHJvY2VzczsgY2FwdHVyZSBzdGRvdXQgKilcbiAgcmVnaXN0ZXIgXCJleGVjLXByb2Nlc3NcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgaXRlbXMgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW0xpc3QgeHNdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IHhzIH1dIC0+IHhzXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGVjLXByb2Nlc3M6IChjbWQtbGlzdClcIilcbiAgICBpblxuICAgIGxldCBhcmd2ID0gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICB8IFN0cmluZyBzIC0+IHNcbiAgICAgIHwgdiAtPiBTeF90eXBlcy5pbnNwZWN0IHZcbiAgICApIGl0ZW1zKSBpblxuICAgIGlmIEFycmF5Lmxlbmd0aCBhcmd2ID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiZXhlYzogZW1wdHkgY29tbWFuZFwiKTtcbiAgICBsZXQgKG91dF9yLCBvdXRfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgKGVycl9yLCBlcnJfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgcGlkID1cbiAgICAgIHRyeSBVbml4LmNyZWF0ZV9wcm9jZXNzIGFyZ3YuKDApIGFyZ3YgVW5peC5zdGRpbiBvdXRfdyBlcnJfd1xuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgIFVuaXguY2xvc2Ugb3V0X3I7IFVuaXguY2xvc2Ugb3V0X3c7XG4gICAgICAgIFVuaXguY2xvc2UgZXJyX3I7IFVuaXguY2xvc2UgZXJyX3c7XG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgIGluXG4gICAgVW5peC5jbG9zZSBvdXRfdztcbiAgICBVbml4LmNsb3NlIGVycl93O1xuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICAgIGxldCBlcnJidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgbGV0IGNodW5rID0gQnl0ZXMuY3JlYXRlIDQwOTYgaW5cbiAgICBsZXQgcmVhZF9hbGwgZmQgdGFyZ2V0ID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RvcCA9IHJlZiBmYWxzZSBpblxuICAgICAgICB3aGlsZSBub3QgIXN0b3AgZG9cbiAgICAgICAgICBsZXQgbiA9IFVuaXgucmVhZCBmZCBjaHVuayAwIChCeXRlcy5sZW5ndGggY2h1bmspIGluXG4gICAgICAgICAgaWYgbiA9IDAgdGhlbiBzdG9wIDo9IHRydWVcbiAgICAgICAgICBlbHNlIEJ1ZmZlci5hZGRfc3ViYnl0ZXMgdGFyZ2V0IGNodW5rIDAgblxuICAgICAgICBkb25lXG4gICAgICB3aXRoIF8gLT4gKClcbiAgICBpblxuICAgIHJlYWRfYWxsIG91dF9yIGJ1ZjtcbiAgICByZWFkX2FsbCBlcnJfciBlcnJidWY7XG4gICAgVW5peC5jbG9zZSBvdXRfcjtcbiAgICBVbml4LmNsb3NlIGVycl9yO1xuICAgIGxldCAoXywgc3RhdHVzKSA9IFVuaXgud2FpdHBpZCBbXSBwaWQgaW5cbiAgICBsZXQgZXhpdF9jb2RlID0gbWF0Y2ggc3RhdHVzIHdpdGhcbiAgICAgIHwgVW5peC5XRVhJVEVEIG4gLT4gblxuICAgICAgfCBVbml4LldTSUdOQUxFRCBfIHwgVW5peC5XU1RPUFBFRCBfIC0+IDFcbiAgICBpblxuICAgIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICAgIGxldCB0cmltbWVkID1cbiAgICAgIGlmIFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bU3RyaW5nLmxlbmd0aCBzIC0gMV0gPSAnXFxuJ1xuICAgICAgdGhlbiBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gMSkgZWxzZSBzXG4gICAgaW5cbiAgICBpZiBleGl0X2NvZGUgPD4gMCB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJleGVjOiBjaGlsZCBleGl0ZWQgXCIgXiBzdHJpbmdfb2ZfaW50IGV4aXRfY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgIF4gKGlmIEJ1ZmZlci5sZW5ndGggZXJyYnVmID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCI6IFwiIF4gQnVmZmVyLmNvbnRlbnRzIGVycmJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgXCJcIikpKVxuICAgIGVsc2UgU3RyaW5nIHRyaW1tZWQpO1xuXG4gICgqIGV4ZWMtcGlwZWxpbmU6IHRha2VzIGEgbGlzdCBvZiB3b3JkcyBsaWtlIFRjbCBgZXhlY2Agd291bGQgcmVjZWl2ZS5cbiAgICAgUmVjb2duaXplcyBgfGAgYXMgYSBzdGFnZSBzZXBhcmF0b3IgYW5kIGA+IGZpbGVgLCBgPj4gZmlsZWAsIGA8IGZpbGVgLFxuICAgICBgMj5AMWAgKHN0ZGVycuKGknN0ZG91dCksIGAyPiBmaWxlYC4gUmV0dXJucyB0cmltbWVkIHN0ZG91dCBvZiB0aGUgbGFzdFxuICAgICBzdGFnZTsgcmFpc2VzIEV2YWxfZXJyb3IgaWYgdGhlIGxhc3Qgc3RhZ2UgZXhpdHMgbm9uLXplcm8uICopXG4gIHJlZ2lzdGVyIFwiZXhlYy1waXBlbGluZVwiIChmdW4gYXJncyAtPlxuICAgIGxldCBpdGVtcyA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbTGlzdCB4c10gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0geHMgfV0gLT4geHNcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4ZWMtcGlwZWxpbmU6ICh3b3JkLWxpc3QpXCIpXG4gICAgaW5cbiAgICBsZXQgd29yZHMgPSBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgfCB2IC0+IFN4X3R5cGVzLmluc3BlY3QgdlxuICAgICkgaXRlbXMgaW5cbiAgICBpZiB3b3JkcyA9IFtdIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGVjOiBlbXB0eSBjb21tYW5kXCIpO1xuICAgIGxldCBzcGxpdF9zdGFnZXMgd3MgPVxuICAgICAgbGV0IHJlYyBsb29wIGFjYyBjdXIgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgICAgICB8IFwifFwiIDo6IHJlc3QgLT4gbG9vcCAoTGlzdC5yZXYgY3VyIDo6IGFjYykgW10gcmVzdFxuICAgICAgICB8IHcgOjogcmVzdCAtPiBsb29wIGFjYyAodyA6OiBjdXIpIHJlc3RcbiAgICAgIGluXG4gICAgICBsb29wIFtdIFtdIHdzXG4gICAgaW5cbiAgICBsZXQgZXh0cmFjdF9yZWRpcnMgd3MgPVxuICAgICAgbGV0IGluX3BhdGggPSByZWYgTm9uZSBpblxuICAgICAgbGV0IG91dF9wYXRoID0gcmVmIE5vbmUgaW5cbiAgICAgIGxldCBvdXRfYXBwZW5kID0gcmVmIGZhbHNlIGluXG4gICAgICBsZXQgZXJyX3BhdGggPSByZWYgTm9uZSBpblxuICAgICAgbGV0IG1lcmdlX2VyciA9IHJlZiBmYWxzZSBpblxuICAgICAgbGV0IGNsZWFuZWQgPSByZWYgW10gaW5cbiAgICAgIGxldCByZWMgbG9vcCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgfCBcIjxcIiA6OiBwIDo6IHJlc3QgLT4gaW5fcGF0aCA6PSBTb21lIHA7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiPlwiIDo6IHAgOjogcmVzdCAtPiBvdXRfcGF0aCA6PSBTb21lIHA7IG91dF9hcHBlbmQgOj0gZmFsc2U7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiPj5cIiA6OiBwIDo6IHJlc3QgLT4gb3V0X3BhdGggOj0gU29tZSBwOyBvdXRfYXBwZW5kIDo9IHRydWU7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiMj5AMVwiIDo6IHJlc3QgLT4gbWVyZ2VfZXJyIDo9IHRydWU7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiMj5cIiA6OiBwIDo6IHJlc3QgLT4gZXJyX3BhdGggOj0gU29tZSBwOyBsb29wIHJlc3RcbiAgICAgICAgfCB3IDo6IHJlc3QgLT4gY2xlYW5lZCA6PSB3IDo6ICFjbGVhbmVkOyBsb29wIHJlc3RcbiAgICAgIGluXG4gICAgICBsb29wIHdzO1xuICAgICAgKExpc3QucmV2ICFjbGVhbmVkLCAhaW5fcGF0aCwgIW91dF9wYXRoLCAhb3V0X2FwcGVuZCwgIWVycl9wYXRoLCAhbWVyZ2VfZXJyKVxuICAgIGluXG4gICAgbGV0IHN0YWdlcyA9IExpc3QubWFwIGV4dHJhY3RfcmVkaXJzIChzcGxpdF9zdGFnZXMgd29yZHMpIGluXG4gICAgaWYgc3RhZ2VzID0gW10gdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcImV4ZWM6IG5vIHN0YWdlc1wiKTtcbiAgICBsZXQgbiA9IExpc3QubGVuZ3RoIHN0YWdlcyBpblxuICAgIGxldCBwaXBlcyA9IEFycmF5LmluaXQgKG1heCAwIChuIC0gMSkpIChmdW4gXyAtPiBVbml4LnBpcGUgKCkpIGluXG4gICAgbGV0IChmaW5hbF9yLCBmaW5hbF93KSA9IFVuaXgucGlwZSAoKSBpblxuICAgIGxldCAoZXJyc3Rhc2hfciwgZXJyc3Rhc2hfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgcGlkcyA9IHJlZiBbXSBpblxuICAgIGxldCBjbG9zZV9zYWZlIGZkID0gdHJ5IFVuaXguY2xvc2UgZmQgd2l0aCBfIC0+ICgpIGluXG4gICAgbGV0IG9wZW5faW5fcmVkaXIgPSBmdW5jdGlvblxuICAgICAgfCBOb25lIC0+IFVuaXguc3RkaW5cbiAgICAgIHwgU29tZSBwYXRoIC0+XG4gICAgICAgICh0cnkgVW5peC5vcGVuZmlsZSBwYXRoIFtVbml4Lk9fUkRPTkxZXSAwbzY0NFxuICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IG9wZW4gPFwiIF4gcGF0aCBeIFwiOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpXG4gICAgaW5cbiAgICBsZXQgb3Blbl9vdXRfcmVkaXIgcGF0aCBhcHBlbmQgPVxuICAgICAgbGV0IGZsYWdzID0gVW5peC5PX1dST05MWSA6OiBVbml4Lk9fQ1JFQVQgOjogKGlmIGFwcGVuZCB0aGVuIFtVbml4Lk9fQVBQRU5EXSBlbHNlIFtVbml4Lk9fVFJVTkNdKSBpblxuICAgICAgdHJ5IFVuaXgub3BlbmZpbGUgcGF0aCBmbGFncyAwbzY0NFxuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IG9wZW4gPlwiIF4gcGF0aCBeIFwiOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSlcbiAgICBpblxuICAgIGxldCBzdGFnZXNfYXJyID0gQXJyYXkub2ZfbGlzdCBzdGFnZXMgaW5cbiAgICAodHJ5XG4gICAgICBBcnJheS5pdGVyaSAoZnVuIGkgKGNsZWFuZWQsIGlwLCBvcCwgYXBwLCBlcCwgbWVyZ2UpIC0+XG4gICAgICAgIGlmIGNsZWFuZWQgPSBbXSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiZXhlYzogZW1wdHkgc3RhZ2UgaW4gcGlwZWxpbmVcIik7XG4gICAgICAgIGxldCBhcmd2ID0gQXJyYXkub2ZfbGlzdCBjbGVhbmVkIGluXG4gICAgICAgIGxldCBzdGRpbl9mZCA9XG4gICAgICAgICAgaWYgaSA9IDAgdGhlbiBvcGVuX2luX3JlZGlyIGlwXG4gICAgICAgICAgZWxzZSBmc3QgcGlwZXMuKGkgLSAxKVxuICAgICAgICBpblxuICAgICAgICBsZXQgc3Rkb3V0X2ZkID1cbiAgICAgICAgICBpZiBpID0gbiAtIDEgdGhlblxuICAgICAgICAgICAgKG1hdGNoIG9wIHdpdGhcbiAgICAgICAgICAgICB8IE5vbmUgLT4gZmluYWxfd1xuICAgICAgICAgICAgIHwgU29tZSBwYXRoIC0+IG9wZW5fb3V0X3JlZGlyIHBhdGggYXBwKVxuICAgICAgICAgIGVsc2Ugc25kIHBpcGVzLihpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgc3RkZXJyX2ZkID1cbiAgICAgICAgICBpZiBtZXJnZSB0aGVuIHN0ZG91dF9mZFxuICAgICAgICAgIGVsc2UgKG1hdGNoIGVwIHdpdGhcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT4gaWYgaSA9IG4gLSAxIHRoZW4gZXJyc3Rhc2hfdyBlbHNlIFVuaXguc3RkZXJyXG4gICAgICAgICAgICAgICAgfCBTb21lIHBhdGggLT4gb3Blbl9vdXRfcmVkaXIgcGF0aCBmYWxzZSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHBpZCA9XG4gICAgICAgICAgdHJ5IFVuaXguY3JlYXRlX3Byb2Nlc3MgYXJndi4oMCkgYXJndiBzdGRpbl9mZCBzdGRvdXRfZmQgc3RkZXJyX2ZkXG4gICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJleGVjOiBcIiBeIGFyZ3YuKDApIF4gXCI6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgICAgICBpblxuICAgICAgICBwaWRzIDo9IHBpZCA6OiAhcGlkcztcbiAgICAgICAgaWYgaSA+IDAgdGhlbiBjbG9zZV9zYWZlIChmc3QgcGlwZXMuKGkgLSAxKSk7XG4gICAgICAgIGlmIGkgPCBuIC0gMSB0aGVuIGNsb3NlX3NhZmUgKHNuZCBwaXBlcy4oaSkpO1xuICAgICAgICBpZiBpID0gMCAmJiBpcCA8PiBOb25lIHRoZW4gY2xvc2Vfc2FmZSBzdGRpbl9mZDtcbiAgICAgICAgaWYgaSA9IG4gLSAxICYmIG9wIDw+IE5vbmUgdGhlbiBjbG9zZV9zYWZlIHN0ZG91dF9mZDtcbiAgICAgICAgaWYgbm90IG1lcmdlICYmIGVwIDw+IE5vbmUgdGhlbiBjbG9zZV9zYWZlIHN0ZGVycl9mZFxuICAgICAgKSBzdGFnZXNfYXJyXG4gICAgd2l0aCBlIC0+XG4gICAgICBjbG9zZV9zYWZlIGZpbmFsX3I7IGNsb3NlX3NhZmUgZmluYWxfdztcbiAgICAgIGNsb3NlX3NhZmUgZXJyc3Rhc2hfcjsgY2xvc2Vfc2FmZSBlcnJzdGFzaF93O1xuICAgICAgQXJyYXkuaXRlciAoZnVuIChhLGIpIC0+IGNsb3NlX3NhZmUgYTsgY2xvc2Vfc2FmZSBiKSBwaXBlcztcbiAgICAgIHJhaXNlIGUpO1xuICAgIGNsb3NlX3NhZmUgZmluYWxfdztcbiAgICBjbG9zZV9zYWZlIGVycnN0YXNoX3c7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gICAgbGV0IGVycmJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgY2h1bmsgPSBCeXRlcy5jcmVhdGUgNDA5NiBpblxuICAgIGxldCByZWFkX2FsbCBmZCB0YXJnZXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdG9wID0gcmVmIGZhbHNlIGluXG4gICAgICAgIHdoaWxlIG5vdCAhc3RvcCBkb1xuICAgICAgICAgIGxldCByID0gVW5peC5yZWFkIGZkIGNodW5rIDAgKEJ5dGVzLmxlbmd0aCBjaHVuaykgaW5cbiAgICAgICAgICBpZiByID0gMCB0aGVuIHN0b3AgOj0gdHJ1ZVxuICAgICAgICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJieXRlcyB0YXJnZXQgY2h1bmsgMCByXG4gICAgICAgIGRvbmVcbiAgICAgIHdpdGggXyAtPiAoKVxuICAgIGluXG4gICAgcmVhZF9hbGwgZmluYWxfciBidWY7XG4gICAgcmVhZF9hbGwgZXJyc3Rhc2hfciBlcnJidWY7XG4gICAgY2xvc2Vfc2FmZSBmaW5hbF9yO1xuICAgIGNsb3NlX3NhZmUgZXJyc3Rhc2hfcjtcbiAgICBsZXQgZXhpdF9jb2RlcyA9IExpc3QucmV2X21hcCAoZnVuIHBpZCAtPlxuICAgICAgbGV0IChfLCBzdCkgPSBVbml4LndhaXRwaWQgW10gcGlkIGluXG4gICAgICBtYXRjaCBzdCB3aXRoXG4gICAgICB8IFVuaXguV0VYSVRFRCBjIC0+IGNcbiAgICAgIHwgXyAtPiAxXG4gICAgKSAhcGlkcyBpblxuICAgIGxldCBmaW5hbF9jb2RlID0gbWF0Y2ggTGlzdC5yZXYgZXhpdF9jb2RlcyB3aXRoXG4gICAgICB8IFtdIC0+IDBcbiAgICAgIHwgbGFzdCA6OiBfIC0+IGxhc3RcbiAgICBpblxuICAgIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICAgIGxldCB0cmltbWVkID1cbiAgICAgIGlmIFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bU3RyaW5nLmxlbmd0aCBzIC0gMV0gPSAnXFxuJ1xuICAgICAgdGhlbiBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gMSkgZWxzZSBzXG4gICAgaW5cbiAgICBpZiBmaW5hbF9jb2RlIDw+IDAgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiZXhlYzogcGlwZWxpbmUgbGFzdCBzdGFnZSBleGl0ZWQgXCIgXiBzdHJpbmdfb2ZfaW50IGZpbmFsX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICBeIChpZiBCdWZmZXIubGVuZ3RoIGVycmJ1ZiA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiOiBcIiBeIEJ1ZmZlci5jb250ZW50cyBlcnJidWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiXCIpKSlcbiAgICBlbHNlIFN0cmluZyB0cmltbWVkKTtcblxuICAoKiA9PT0gU29ja2V0cyA9PT0gd3JhcHBpbmcgVW5peC5zb2NrZXQvY29ubmVjdC9iaW5kL2xpc3Rlbi9hY2NlcHQgKilcbiAgbGV0IHJlc29sdmVfaW5ldF9hZGRyIGhvc3QgPVxuICAgIGlmIGhvc3QgPSBcIlwiIHx8IGhvc3QgPSBcIjAuMC4wLjBcIiB0aGVuIFVuaXguaW5ldF9hZGRyX2FueVxuICAgIGVsc2UgaWYgaG9zdCA9IFwibG9jYWxob3N0XCIgdGhlbiBVbml4LmluZXRfYWRkcl9sb29wYmFja1xuICAgIGVsc2VcbiAgICAgIHRyeSBVbml4LmluZXRfYWRkcl9vZl9zdHJpbmcgaG9zdFxuICAgICAgd2l0aCBfIC0+XG4gICAgICAgIHRyeVxuICAgICAgICAgIGxldCBlbnRyeSA9IFVuaXguZ2V0aG9zdGJ5bmFtZSBob3N0IGluXG4gICAgICAgICAgaWYgQXJyYXkubGVuZ3RoIGVudHJ5LlVuaXguaF9hZGRyX2xpc3QgPSAwIHRoZW5cbiAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldDogY2Fubm90IHJlc29sdmUgXCIgXiBob3N0KSlcbiAgICAgICAgICBlbHNlIGVudHJ5LlVuaXguaF9hZGRyX2xpc3QuKDApXG4gICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldDogY2Fubm90IHJlc29sdmUgXCIgXiBob3N0KSlcbiAgaW5cbiAgbGV0IHBvcnRfb2YgdiA9IG1hdGNoIHYgd2l0aFxuICAgIHwgSW50ZWdlciBuIC0+IG5cbiAgICB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ja2V0OiBwb3J0IG11c3QgYmUgYSBudW1iZXJcIilcbiAgaW5cbiAgbGV0IGFsbG9jX2NoYW5fbmFtZSAoKSA9XG4gICAgbGV0IGlkID0gIWNoYW5uZWxfbmV4dF9pZCBpblxuICAgIGluY3IgY2hhbm5lbF9uZXh0X2lkO1xuICAgIFByaW50Zi5zcHJpbnRmIFwic29jayVkXCIgaWRcbiAgaW5cblxuICByZWdpc3RlciBcInNvY2tldC1jb25uZWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhvc3Q7IHBvcnRfdl0gLT5cbiAgICAgIGxldCBwb3J0ID0gcG9ydF9vZiBwb3J0X3YgaW5cbiAgICAgIGxldCBhZGRyID0gVW5peC5BRERSX0lORVQgKHJlc29sdmVfaW5ldF9hZGRyIGhvc3QsIHBvcnQpIGluXG4gICAgICBsZXQgc29jayA9IFVuaXguc29ja2V0IFVuaXguUEZfSU5FVCBVbml4LlNPQ0tfU1RSRUFNIDAgaW5cbiAgICAgICh0cnkgVW5peC5jb25uZWN0IHNvY2sgYWRkclxuICAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgKHRyeSBVbml4LmNsb3NlIHNvY2sgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1jb25uZWN0OiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgbGV0IG5hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIG5hbWUgKHNvY2ssIFwicndcIiwgcmVmIGZhbHNlLCByZWYgdHJ1ZSk7XG4gICAgICBTdHJpbmcgbmFtZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvY2tldC1jb25uZWN0OiAoaG9zdCBwb3J0KVwiKSk7XG5cbiAgKCogTm9uLWJsb2NraW5nIGNvbm5lY3Q6IHJldHVybnMgY2hhbm5lbCBpbW1lZGlhdGVseS4gQ29ubmVjdGlvbiBjb21wbGV0ZXNcbiAgICAgd2hlbiB0aGUgY2hhbm5lbCBiZWNvbWVzIHdyaXRhYmxlOyBxdWVyeSBjaGFubmVsLWFzeW5jLWVycm9yPyBhZnRlciB0b1xuICAgICBjb25maXJtIHN1Y2Nlc3Mgb3IgZ2V0IHRoZSBlcnJvci4gKilcbiAgcmVnaXN0ZXIgXCJzb2NrZXQtY29ubmVjdC1hc3luY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBob3N0OyBwb3J0X3ZdIC0+XG4gICAgICBsZXQgcG9ydCA9IHBvcnRfb2YgcG9ydF92IGluXG4gICAgICBsZXQgYWRkciA9IFVuaXguQUREUl9JTkVUIChyZXNvbHZlX2luZXRfYWRkciBob3N0LCBwb3J0KSBpblxuICAgICAgbGV0IHNvY2sgPSBVbml4LnNvY2tldCBVbml4LlBGX0lORVQgVW5peC5TT0NLX1NUUkVBTSAwIGluXG4gICAgICBVbml4LnNldF9ub25ibG9jayBzb2NrO1xuICAgICAgKHRyeSBVbml4LmNvbm5lY3Qgc29jayBhZGRyXG4gICAgICAgd2l0aFxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVJTlBST0dSRVNTLCBfLCBfKVxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVXT1VMREJMT0NLLCBfLCBfKSAtPiAoKVxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgKHRyeSBVbml4LmNsb3NlIHNvY2sgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1jb25uZWN0LWFzeW5jOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgbGV0IG5hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIG5hbWUgKHNvY2ssIFwicndcIiwgcmVmIGZhbHNlLCByZWYgZmFsc2UpO1xuICAgICAgU3RyaW5nIG5hbWVcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb2NrZXQtY29ubmVjdC1hc3luYzogKGhvc3QgcG9ydClcIikpO1xuXG4gICgqIEFmdGVyIGEgbm9uLWJsb2NraW5nIGNvbm5lY3QgY29tcGxldGVzIChjaGFubmVsIHdyaXRhYmxlKSwgY2hlY2sgd2hldGhlclxuICAgICB0aGUgY29ubmVjdCBzdWNjZWVkZWQuIFJldHVybnMgXCJcIiBvbiBzdWNjZXNzLCBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuICopXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1hc3luYy1lcnJvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICAodHJ5XG4gICAgICAgIGxldCBlcnIgPSBVbml4LmdldHNvY2tvcHRfZXJyb3IgZmQgaW5cbiAgICAgICAgbWF0Y2ggZXJyIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IFN0cmluZyBcIlwiXG4gICAgICAgIHwgU29tZSBlIC0+IFN0cmluZyAoVW5peC5lcnJvcl9tZXNzYWdlIGUpXG4gICAgICB3aXRoXG4gICAgICB8IFVuaXguVW5peF9lcnJvciAoZSwgXywgXykgLT4gU3RyaW5nIChVbml4LmVycm9yX21lc3NhZ2UgZSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1hc3luYy1lcnJvcjogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcInNvY2tldC1zZXJ2ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKGhvc3QsIHBvcnQpID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtwb3J0X3ZdIC0+IChcIlwiLCBwb3J0X29mIHBvcnRfdilcbiAgICAgIHwgW1N0cmluZyBoOyBwb3J0X3ZdIC0+IChoLCBwb3J0X29mIHBvcnRfdilcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvY2tldC1zZXJ2ZXI6IChwb3J0KSBvciAoaG9zdCBwb3J0KVwiKVxuICAgIGluXG4gICAgbGV0IGFkZHIgPSBVbml4LkFERFJfSU5FVCAocmVzb2x2ZV9pbmV0X2FkZHIgaG9zdCwgcG9ydCkgaW5cbiAgICBsZXQgc29jayA9IFVuaXguc29ja2V0IFVuaXguUEZfSU5FVCBVbml4LlNPQ0tfU1RSRUFNIDAgaW5cbiAgICBVbml4LnNldHNvY2tvcHQgc29jayBVbml4LlNPX1JFVVNFQUREUiB0cnVlO1xuICAgICh0cnkgVW5peC5iaW5kIHNvY2sgYWRkclxuICAgICB3aXRoIFVuaXguVW5peF9lcnJvciAoZSwgXywgXykgLT5cbiAgICAgICAodHJ5IFVuaXguY2xvc2Ugc29jayB3aXRoIF8gLT4gKCkpO1xuICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1zZXJ2ZXI6IGJpbmQ6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKSk7XG4gICAgVW5peC5saXN0ZW4gc29jayA4O1xuICAgIGxldCBuYW1lID0gYWxsb2NfY2hhbl9uYW1lICgpIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGNoYW5uZWxfdGFibGUgbmFtZSAoc29jaywgXCJzZXJ2ZXJcIiwgcmVmIGZhbHNlLCByZWYgdHJ1ZSk7XG4gICAgU3RyaW5nIG5hbWUpO1xuXG4gIHJlZ2lzdGVyIFwic29ja2V0LWFjY2VwdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChzb2NrLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCAoY2xpZW50X3NvY2ssIGNsaWVudF9hZGRyKSA9XG4gICAgICAgIHRyeSBVbml4LmFjY2VwdCBzb2NrXG4gICAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1hY2NlcHQ6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgICAgaW5cbiAgICAgIGxldCAoaG9zdF9zdHIsIHBvcnQpID0gbWF0Y2ggY2xpZW50X2FkZHIgd2l0aFxuICAgICAgICB8IFVuaXguQUREUl9JTkVUIChhZGRyLCBwKSAtPiAoVW5peC5zdHJpbmdfb2ZfaW5ldF9hZGRyIGFkZHIsIHApXG4gICAgICAgIHwgVW5peC5BRERSX1VOSVggcGF0aCAtPiAocGF0aCwgMClcbiAgICAgIGluXG4gICAgICBsZXQgY2xpZW50X25hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIGNsaWVudF9uYW1lIChjbGllbnRfc29jaywgXCJyd1wiLCByZWYgZmFsc2UsIHJlZiB0cnVlKTtcbiAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMyBpblxuICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjaGFubmVsXCIgKFN0cmluZyBjbGllbnRfbmFtZSk7XG4gICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImhvc3RcIiAoU3RyaW5nIGhvc3Rfc3RyKTtcbiAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicG9ydFwiIChJbnRlZ2VyIHBvcnQpO1xuICAgICAgRGljdCBkXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ja2V0LWFjY2VwdDogKHNlcnZlci1jaGFubmVsKVwiKSk7XG5cbiAgKCogaW8tc2VsZWN0LWNoYW5uZWxzOiAocmVhZC1saXN0IHdyaXRlLWxpc3QgdGltZW91dC1tcykg4oaSIHs6cmVhZGFibGUgWy4uLl0gOndyaXRhYmxlIFsuLi5dfVxuICAgICB0aW1lb3V0LW1zIDwgMCDihpIgYmxvY2sgaW5kZWZpbml0ZWx5OyAwIOKGkiBwb2xsLiBSZXR1cm5zIHJlYWR5IGNoYW5uZWwgbmFtZXMuICopXG4gIHJlZ2lzdGVyIFwiaW8tc2VsZWN0LWNoYW5uZWxzXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHRvX21zIHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgSW50ZWdlciBuIC0+IG5cbiAgICAgIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG5cbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlvLXNlbGVjdC1jaGFubmVsczogdGltZW91dCBtdXN0IGJlIGEgbnVtYmVyXCIpXG4gICAgaW5cbiAgICBsZXQgdG9fbGlzdCB2ID0gbWF0Y2ggdiB3aXRoXG4gICAgICB8IExpc3QgeHMgfCBMaXN0UmVmIHsgY29udGVudHMgPSB4cyB9IC0+IHhzXG4gICAgICB8IE5pbCAtPiBbXVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiBleHBlY3RlZCBsaXN0XCIpXG4gICAgaW5cbiAgICBsZXQgY2hhbl9uYW1lX29mIHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiBjaGFubmVsIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICBpblxuICAgIGxldCAocmVhZF9saXN0LCB3cml0ZV9saXN0LCB0aW1lb3V0X21zKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbcjsgdzsgdF0gLT4gKHRvX2xpc3QgciwgdG9fbGlzdCB3LCB0b19tcyB0KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiAocmVhZC1saXN0IHdyaXRlLWxpc3QgdGltZW91dC1tcylcIilcbiAgICBpblxuICAgIGxldCByZWFkX3BhaXJzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICBsZXQgbmFtZSA9IGNoYW5fbmFtZV9vZiB2IGluXG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW4gKG5hbWUsIGZkKSkgcmVhZF9saXN0IGluXG4gICAgbGV0IHdyaXRlX3BhaXJzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICBsZXQgbmFtZSA9IGNoYW5fbmFtZV9vZiB2IGluXG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW4gKG5hbWUsIGZkKSkgd3JpdGVfbGlzdCBpblxuICAgIGxldCByZWFkX2ZkcyA9IExpc3QubWFwIHNuZCByZWFkX3BhaXJzIGluXG4gICAgbGV0IHdyaXRlX2ZkcyA9IExpc3QubWFwIHNuZCB3cml0ZV9wYWlycyBpblxuICAgIGxldCB0aW1lb3V0ID0gaWYgdGltZW91dF9tcyA8IDAgdGhlbiAtMS4wIGVsc2UgZmxvYXRfb2ZfaW50IHRpbWVvdXRfbXMgLy4gMTAwMC4wIGluXG4gICAgbGV0IChyZWFkeV9yLCByZWFkeV93LCBfKSA9XG4gICAgICB0cnkgVW5peC5zZWxlY3QgcmVhZF9mZHMgd3JpdGVfZmRzIFtdIHRpbWVvdXRcbiAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChVbml4LkVJTlRSLCBfLCBfKSAtPiAoW10sIFtdLCBbXSlcbiAgICBpblxuICAgIGxldCBuYW1lc19vZiBwYWlycyByZWFkeSA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgKGZ1biAobiwgZmQpIC0+XG4gICAgICAgIGlmIExpc3QuZXhpc3RzIChmdW4gcmZkIC0+IHJmZCA9IGZkKSByZWFkeSB0aGVuIFNvbWUgKFN0cmluZyBuKSBlbHNlIE5vbmVcbiAgICAgICkgcGFpcnNcbiAgICBpblxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVhZGFibGVcIiAoTGlzdCAobmFtZXNfb2YgcmVhZF9wYWlycyByZWFkeV9yKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ3cml0YWJsZVwiIChMaXN0IChuYW1lc19vZiB3cml0ZV9wYWlycyByZWFkeV93KSk7XG4gICAgRGljdCBkKTtcblxuICAoKiA9PT0gQ2xvY2sgPT09ICopXG4gIHJlZ2lzdGVyIFwiY2xvY2stc2Vjb25kc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChVbml4LmdldHRpbWVvZmRheSAoKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xvY2stc2Vjb25kczogbm8gYXJnc1wiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjbG9jay1taWxsaXNlY29uZHNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoVW5peC5nZXR0aW1lb2ZkYXkgKCkgKi4gMTAwMC4wKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbG9jay1taWxsaXNlY29uZHM6IG5vIGFyZ3NcIikpO1xuXG4gIGxldCBmb3JtYXRfdG0gdG0gdHpfbGFiZWwgPVxuICAgIGZ1biBmbXQgLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggZm10IGluXG4gICAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhaSA8IG4gZG9cbiAgICAgICAgaWYgZm10LlshaV0gPSAnJScgJiYgIWkgKyAxIDwgbiB0aGVuIGJlZ2luXG4gICAgICAgICAgKG1hdGNoIGZtdC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgIHwgJ1knIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDRkXCIgKDE5MDAgKyB0bS5Vbml4LnRtX3llYXIpKVxuICAgICAgICAgICB8ICd5JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiICgoMTkwMCArIHRtLlVuaXgudG1feWVhcikgbW9kIDEwMCkpXG4gICAgICAgICAgIHwgJ20nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgKHRtLlVuaXgudG1fbW9uICsgMSkpXG4gICAgICAgICAgIHwgJ2QnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9tZGF5KVxuICAgICAgICAgICB8ICdlJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTJkXCIgIHRtLlVuaXgudG1fbWRheSlcbiAgICAgICAgICAgfCAnSCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIiUwMmRcIiB0bS5Vbml4LnRtX2hvdXIpXG4gICAgICAgICAgIHwgJ0knIC0+IGxldCBoID0gdG0uVW5peC50bV9ob3VyIG1vZCAxMiBpblxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiIChpZiBoID0gMCB0aGVuIDEyIGVsc2UgaCkpXG4gICAgICAgICAgIHwgJ3AnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoaWYgdG0uVW5peC50bV9ob3VyIDwgMTIgdGhlbiBcIkFNXCIgZWxzZSBcIlBNXCIpXG4gICAgICAgICAgIHwgJ00nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9taW4pXG4gICAgICAgICAgIHwgJ1MnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9zZWMpXG4gICAgICAgICAgIHwgJ2onIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDNkXCIgKHRtLlVuaXgudG1feWRheSArIDEpKVxuICAgICAgICAgICB8ICd3JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgdG0uVW5peC50bV93ZGF5KVxuICAgICAgICAgICB8ICdaJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgdHpfbGFiZWxcbiAgICAgICAgICAgfCAnYScgLT4gbGV0IGRheXMgPSBbfFwiU3VuXCI7XCJNb25cIjtcIlR1ZVwiO1wiV2VkXCI7XCJUaHVcIjtcIkZyaVwiO1wiU2F0XCJ8XSBpblxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgZGF5cy4odG0uVW5peC50bV93ZGF5KVxuICAgICAgICAgICB8ICdBJyAtPiBsZXQgZGF5cyA9IFt8XCJTdW5kYXlcIjtcIk1vbmRheVwiO1wiVHVlc2RheVwiO1wiV2VkbmVzZGF5XCI7XCJUaHVyc2RheVwiO1wiRnJpZGF5XCI7XCJTYXR1cmRheVwifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGRheXMuKHRtLlVuaXgudG1fd2RheSlcbiAgICAgICAgICAgfCAnYicgfCAnaCcgLT4gbGV0IG1vbnMgPSBbfFwiSmFuXCI7XCJGZWJcIjtcIk1hclwiO1wiQXByXCI7XCJNYXlcIjtcIkp1blwiO1wiSnVsXCI7XCJBdWdcIjtcIlNlcFwiO1wiT2N0XCI7XCJOb3ZcIjtcIkRlY1wifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG1vbnMuKHRtLlVuaXgudG1fbW9uKVxuICAgICAgICAgICB8ICdCJyAtPiBsZXQgbW9ucyA9IFt8XCJKYW51YXJ5XCI7XCJGZWJydWFyeVwiO1wiTWFyY2hcIjtcIkFwcmlsXCI7XCJNYXlcIjtcIkp1bmVcIjtcIkp1bHlcIjtcIkF1Z3VzdFwiO1wiU2VwdGVtYmVyXCI7XCJPY3RvYmVyXCI7XCJOb3ZlbWJlclwiO1wiRGVjZW1iZXJcInxdIGluXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBtb25zLih0bS5Vbml4LnRtX21vbilcbiAgICAgICAgICAgfCAnJScgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJSdcbiAgICAgICAgICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyUnOyBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpO1xuICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBmbXQuWyFpXTtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgZW5kXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBpblxuICByZWdpc3RlciBcImNsb2NrLWZvcm1hdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCAodCwgZm10LCB0eikgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW0ludGVnZXIgdF0gLT4gKHQsIFwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVlcIiwgXCJ1dGNcIilcbiAgICAgIHwgW0ludGVnZXIgdDsgU3RyaW5nIGZdIC0+ICh0LCBmLCBcInV0Y1wiKVxuICAgICAgfCBbSW50ZWdlciB0OyBTdHJpbmcgZjsgU3RyaW5nIHpdIC0+ICh0LCBmLCB6KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xvY2stZm9ybWF0OiAoc2Vjb25kcyBbZm9ybWF0IFt0el1dKVwiKVxuICAgIGluXG4gICAgbGV0IHRtID1cbiAgICAgIGlmIHR6ID0gXCJsb2NhbFwiIHRoZW4gVW5peC5sb2NhbHRpbWUgKGZsb2F0X29mX2ludCB0KVxuICAgICAgZWxzZSBVbml4LmdtdGltZSAoZmxvYXRfb2ZfaW50IHQpXG4gICAgaW5cbiAgICBsZXQgbGFiZWwgPSBpZiB0eiA9IFwibG9jYWxcIiB0aGVuIFwiXCIgZWxzZSBcIlVUQ1wiIGluXG4gICAgU3RyaW5nIChmb3JtYXRfdG0gdG0gbGFiZWwgZm10KSk7XG5cbiAgKCogY2xvY2stc2NhbjogcGFyc2UgYSBkYXRlIHN0cmluZyB3aXRoIGZvcm1hdCwgcmV0dXJuIHNlY29uZHMuXG4gICAgIFN1cHBvcnRzIHRoZSBzYW1lIGZvcm1hdCBzcGVjaWZpZXJzIGFzIGNsb2NrLWZvcm1hdCAoZml4ZWQtd2lkdGggb25lcykuXG4gICAgIHR6OiBcInV0Y1wiIChkZWZhdWx0KSBvciBcImxvY2FsXCIuICopXG4gIGxldCB0aW1lZ20gKHRtIDogVW5peC50bSkgPVxuICAgIGxldCBpc19sZWFwIHkgPSB5IG1vZCA0ID0gMCAmJiAoeSBtb2QgMTAwIDw+IDAgfHwgeSBtb2QgNDAwID0gMCkgaW5cbiAgICBsZXQgZGF5c19pbl9tb250aCA9IFt8MzE7Mjg7MzE7MzA7MzE7MzA7MzE7MzE7MzA7MzE7MzA7MzF8XSBpblxuICAgIGxldCB5ZWFyID0gdG0uVW5peC50bV95ZWFyICsgMTkwMCBpblxuICAgIGxldCBtb24gPSB0bS5Vbml4LnRtX21vbiBpblxuICAgIGxldCBtZGF5ID0gdG0uVW5peC50bV9tZGF5IGluXG4gICAgbGV0IHRvdGFsX2RheXMgPSByZWYgMCBpblxuICAgIGlmIHllYXIgPj0gMTk3MCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeSA9IDE5NzAgdG8geWVhciAtIDEgZG9cbiAgICAgICAgdG90YWxfZGF5cyA6PSAhdG90YWxfZGF5cyArIChpZiBpc19sZWFwIHkgdGhlbiAzNjYgZWxzZSAzNjUpXG4gICAgICBkb25lXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGZvciB5ID0geWVhciB0byAxOTY5IGRvXG4gICAgICAgIHRvdGFsX2RheXMgOj0gIXRvdGFsX2RheXMgLSAoaWYgaXNfbGVhcCB5IHRoZW4gMzY2IGVsc2UgMzY1KVxuICAgICAgZG9uZVxuICAgIGVuZDtcbiAgICBmb3IgbSA9IDAgdG8gbW9uIC0gMSBkb1xuICAgICAgdG90YWxfZGF5cyA6PSAhdG90YWxfZGF5cyArIGRheXNfaW5fbW9udGguKG0pO1xuICAgICAgaWYgbSA9IDEgJiYgaXNfbGVhcCB5ZWFyIHRoZW4gaW5jciB0b3RhbF9kYXlzXG4gICAgZG9uZTtcbiAgICB0b3RhbF9kYXlzIDo9ICF0b3RhbF9kYXlzICsgbWRheSAtIDE7XG4gICAgIXRvdGFsX2RheXMgKiA4NjQwMFxuICAgICsgdG0uVW5peC50bV9ob3VyICogMzYwMFxuICAgICsgdG0uVW5peC50bV9taW4gKiA2MFxuICAgICsgdG0uVW5peC50bV9zZWNcbiAgaW5cbiAgcmVnaXN0ZXIgXCJjbG9jay1zY2FuXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IChzdHIsIGZtdCwgdHopID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtTdHJpbmcgczsgU3RyaW5nIGZdIC0+IChzLCBmLCBcInV0Y1wiKVxuICAgICAgfCBbU3RyaW5nIHM7IFN0cmluZyBmOyBTdHJpbmcgel0gLT4gKHMsIGYsIHopXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbG9jay1zY2FuOiAoc3RyIGZtdCBbdHpdKVwiKVxuICAgIGluXG4gICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIGZtdCBhbmQgc24gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCB0bSA9IHJlZiB7IFVuaXgudG1feWVhciA9IDcwOyB0bV9tb24gPSAwOyB0bV9tZGF5ID0gMTtcbiAgICAgICAgICAgICAgICAgICB0bV9ob3VyID0gMDsgdG1fbWluID0gMDsgdG1fc2VjID0gMDtcbiAgICAgICAgICAgICAgICAgICB0bV93ZGF5ID0gMDsgdG1feWRheSA9IDA7IHRtX2lzZHN0ID0gZmFsc2UgfSBpblxuICAgIGxldCBpID0gcmVmIDAgYW5kIGogPSByZWYgMCBpblxuICAgIGxldCByZWFkX25fZGlnaXRzIGsgPVxuICAgICAgbGV0IHMgPSByZWYgXCJcIiBpblxuICAgICAgbGV0IGNudCA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhY250IDwgayAmJiAhaiA8IHNuICYmIHN0ci5bIWpdID49ICcwJyAmJiBzdHIuWyFqXSA8PSAnOScgZG9cbiAgICAgICAgcyA6PSAhcyBeIFN0cmluZy5tYWtlIDEgc3RyLlshal07XG4gICAgICAgIGluY3IgajsgaW5jciBjbnRcbiAgICAgIGRvbmU7XG4gICAgICBpZiAhcyA9IFwiXCIgdGhlbiAwIGVsc2UgaW50X29mX3N0cmluZyAhc1xuICAgIGluXG4gICAgbGV0IHNraXBfd3MgKCkgPVxuICAgICAgd2hpbGUgIWogPCBzbiAmJiAoc3RyLlshal0gPSAnICcgfHwgc3RyLlshal0gPSAnXFx0JykgZG8gaW5jciBqIGRvbmVcbiAgICBpblxuICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgaWYgZm10LlshaV0gPSAnJScgJiYgIWkgKyAxIDwgbiB0aGVuIGJlZ2luXG4gICAgICAgIChtYXRjaCBmbXQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgfCAnWScgLT4gdG0gOj0geyAhdG0gd2l0aCB0bV95ZWFyID0gcmVhZF9uX2RpZ2l0cyA0IC0gMTkwMCB9XG4gICAgICAgICB8ICd5JyAtPiBsZXQgeSA9IHJlYWRfbl9kaWdpdHMgMiBpblxuICAgICAgICAgICAgICAgICAgdG0gOj0geyAhdG0gd2l0aCB0bV95ZWFyID0gKGlmIHkgPCA3MCB0aGVuIDEwMCArIHkgZWxzZSB5KSB9XG4gICAgICAgICB8ICdtJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX21vbiA9IHJlYWRfbl9kaWdpdHMgMiAtIDEgfVxuICAgICAgICAgfCAnZCcgfCAnZScgLT4gc2tpcF93cyAoKTsgdG0gOj0geyAhdG0gd2l0aCB0bV9tZGF5ID0gcmVhZF9uX2RpZ2l0cyAyIH1cbiAgICAgICAgIHwgJ0gnIHwgJ0knIC0+IHRtIDo9IHsgIXRtIHdpdGggdG1faG91ciA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICdNJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX21pbiA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICdTJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX3NlYyA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICclJyAtPiBpZiAhaiA8IHNuICYmIHN0ci5bIWpdID0gJyUnIHRoZW4gaW5jciBqXG4gICAgICAgICB8IF8gLT4gKCkgICgqIHVuc3VwcG9ydGVkIHNwZWNpZmllciDigJQgc2tpcCAqKVxuICAgICAgICApO1xuICAgICAgICBpIDo9ICFpICsgMlxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgaWYgZm10LlshaV0gPSAnICcgdGhlbiBza2lwX3dzICgpXG4gICAgICAgIGVsc2UgaWYgIWogPCBzbiAmJiBzdHIuWyFqXSA9IGZtdC5bIWldIHRoZW4gaW5jciBqO1xuICAgICAgICBpbmNyIGlcbiAgICAgIGVuZFxuICAgIGRvbmU7XG4gICAgbGV0IHNlY3MgPVxuICAgICAgaWYgdHogPSBcImxvY2FsXCIgdGhlbiBpbnRfb2ZfZmxvYXQgKGZzdCAoVW5peC5ta3RpbWUgIXRtKSlcbiAgICAgIGVsc2UgdGltZWdtICF0bVxuICAgIGluXG4gICAgSW50ZWdlciBzZWNzKTtcblxuICAoKiA9PT0gRW52LWFzLXZhbHVlIChQaGFzZSA0KSA9PT0gKilcblxuICAoKiBlbnYtbG9va3VwOiAoZW52IGtleSkg4oaSIHZhbHVlIG9yIG5pbC4gIFdvcmtzIG9uIEVudiwgRGljdCwgb3IgTmlsLiAqKVxuICByZWdpc3RlciBcImVudi1sb29rdXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgdW53cmFwID0gZnVuY3Rpb25cbiAgICAgIHwgRW52IGUgLT4gZVxuICAgICAgfCBOaWwgLT4gbWFrZV9lbnYgKClcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1sb29rdXA6IGZpcnN0IGFyZyBtdXN0IGJlIGFuIGVudmlyb25tZW50XCIpIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZW52X3ZhbDsga2V5XSAtPlxuICAgICAgbGV0IGUgPSB1bndyYXAgZW52X3ZhbCBpblxuICAgICAgbGV0IGsgPSB2YWx1ZV90b19zdHJpbmcga2V5IGluXG4gICAgICBpZiBlbnZfaGFzIGUgayB0aGVuIGVudl9nZXQgZSBrIGVsc2UgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWxvb2t1cDogKGVudiBrZXkpXCIpKTtcblxuICAoKiBlbnYtZXh0ZW5kOiAoZW52IFtrZXkgdmFsIC4uLl0pIOKGkiBuZXcgY2hpbGQgZW52IHdpdGggb3B0aW9uYWwgYmluZGluZ3MuICopXG4gIHJlZ2lzdGVyIFwiZW52LWV4dGVuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZXh0ZW5kOiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJnXCIpXG4gICAgfCBlbnZfdmFsIDo6IHBhaXJzIC0+XG4gICAgICBsZXQgcGFyZW50X2VudiA9IG1hdGNoIGVudl92YWwgd2l0aFxuICAgICAgICB8IEVudiBlIC0+IGVcbiAgICAgICAgfCBOaWwgLT4gbWFrZV9lbnYgKClcbiAgICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWV4dGVuZDogZmlyc3QgYXJnIG11c3QgYmUgYW4gZW52aXJvbm1lbnRcIikgaW5cbiAgICAgIGxldCBjaGlsZCA9IGVudl9leHRlbmQgcGFyZW50X2VudiBpblxuICAgICAgbGV0IHJlYyBhZGRfYmluZGluZ3MgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgayA6OiB2IDo6IHJlc3QgLT4gaWdub3JlIChlbnZfYmluZCBjaGlsZCAodmFsdWVfdG9fc3RyaW5nIGspIHYpOyBhZGRfYmluZGluZ3MgcmVzdFxuICAgICAgICB8IFtfXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1leHRlbmQ6IG9kZCBudW1iZXIgb2Yga2V5LXZhbCBwYWlyc1wiKSBpblxuICAgICAgYWRkX2JpbmRpbmdzIHBhaXJzO1xuICAgICAgRW52IGNoaWxkKTtcblxuICAoKiBKSVQgY2FjaGUgY29udHJvbCAmIG9ic2VydmFiaWxpdHkg4oCUIGJhY2tlZCBieSByZWZzIGluIHN4X3R5cGVzLm1sIHRvXG4gICAgIGF2b2lkIGNyZWF0aW5nIGEgc3hfcHJpbWl0aXZlcyDihpIgc3hfdm0gZGVwZW5kZW5jeSBjeWNsZS4gc3hfdm0gcmVhZHNcbiAgICAgdGhlc2UgcmVmcyB0byBkZWNpZGUgd2hlbiB0byBKSVQuICopXG4gIHJlZ2lzdGVyIFwiaml0LXN0YXRzXCIgKGZ1biBfYXJncyAtPlxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidGhyZXNob2xkXCIgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X3RocmVzaG9sZCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnVkZ2V0XCIgICAgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X2J1ZGdldCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY2FjaGUtc2l6ZVwiICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAoU3hfdHlwZXMuaml0X2NhY2hlX3NpemUgKCkpKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb21waWxlZFwiICAgICAgICAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbXBpbGUtZmFpbGVkXCIgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9za2lwcGVkX2NvdW50KSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJiZWxvdy10aHJlc2hvbGRcIiAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfdGhyZXNob2xkX3NraXBwZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImV2aWN0ZWRcIiAgICAgICAgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50KSk7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJqaXQtc2V0LXRocmVzaG9sZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgbl0gLT4gU3hfdHlwZXMuaml0X3RocmVzaG9sZCA6PSBpbnRfb2ZfZmxvYXQgbjsgTmlsXG4gICAgfCBbSW50ZWdlciBuXSAtPiBTeF90eXBlcy5qaXRfdGhyZXNob2xkIDo9IG47IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImppdC1zZXQtdGhyZXNob2xkITogKG4pIHdoZXJlIG4gaXMgaW50ZWdlclwiKSk7XG4gIHJlZ2lzdGVyIFwiaml0LXNldC1idWRnZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIG5dIC0+IFN4X3R5cGVzLmppdF9idWRnZXQgOj0gaW50X29mX2Zsb2F0IG47IE5pbFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3hfdHlwZXMuaml0X2J1ZGdldCA6PSBuOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJqaXQtc2V0LWJ1ZGdldCE6IChuKSB3aGVyZSBuIGlzIGludGVnZXJcIikpO1xuICByZWdpc3RlciBcImppdC1yZXNldC1jYWNoZSFcIiAoZnVuIF9hcmdzIC0+XG4gICAgKCogUGhhc2UgMyBtYW51YWwgY2FjaGUgcmVzZXQg4oCUIGNsZWFyIGFsbCBjb21waWxlZCBWbUNsb3N1cmVzLlxuICAgICAgIEhvdCBwYXRocyB3aWxsIHJlLUpJVCBvbiBuZXh0IGNhbGwgKGFmdGVyIHJlLWhpdHRpbmcgdGhyZXNob2xkKS4gKilcbiAgICBRdWV1ZS5pdGVyIChmdW4gKF8sIHYpIC0+XG4gICAgICBtYXRjaCB2IHdpdGggTGFtYmRhIGwgLT4gbC5sX2NvbXBpbGVkIDwtIE5vbmUgfCBfIC0+ICgpXG4gICAgKSBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWU7XG4gICAgUXVldWUuY2xlYXIgU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlO1xuICAgIE5pbCk7XG4gIHJlZ2lzdGVyIFwiaml0LWV4Y2x1ZGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogTWFyayBmdW5jdGlvbiBuYW1lcyBhcyBpbnRlcnByZXQtb25seSAobmV2ZXIgSklULWNvbXBpbGVkKS4gQSBndWVzdFxuICAgICAgIGludGVycHJldGVyIGNhbGxzIHRoaXMgZm9yIGl0cyBjb250aW51YXRpb24tdXNpbmcgZGlzcGF0Y2ggY29yZS5cbiAgICAgICBBY2NlcHRzIHN0cmluZy9zeW1ib2wgbmFtZXM7IGEgdHJhaWxpbmcgXCIqXCIgbWFrZXMgaXQgYSBuYW1lc3BhY2UgcHJlZml4XG4gICAgICAgKGUuZy4gXCJlci0qXCIgZXhjbHVkZXMgZXZlcnkgZnVuY3Rpb24gd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBcImVyLVwiKSDigJRcbiAgICAgICB0aGUgcm9idXN0IHdheSB0byBkZWNsYXJlIGEgd2hvbGUgZ3Vlc3QgaW50ZXJwcmV0ZXIgY29yZS4gKilcbiAgICBMaXN0Lml0ZXIgKGZ1biBhIC0+XG4gICAgICBtYXRjaCBhIHdpdGhcbiAgICAgIHwgU3RyaW5nIG4gfCBTeW1ib2wgbiAtPlxuICAgICAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBuIGluXG4gICAgICAgIGlmIGxlbiA+IDAgJiYgbi5bbGVuIC0gMV0gPSAnKicgdGhlbiBiZWdpblxuICAgICAgICAgIGxldCBwcmVmaXggPSBTdHJpbmcuc3ViIG4gMCAobGVuIC0gMSkgaW5cbiAgICAgICAgICBpZiBub3QgKExpc3QubWVtIHByZWZpeCAhU3hfdHlwZXMuaml0X2V4Y2x1ZGVkX3ByZWZpeGVzKSB0aGVuXG4gICAgICAgICAgICBTeF90eXBlcy5qaXRfZXhjbHVkZWRfcHJlZml4ZXMgOj0gcHJlZml4IDo6ICFTeF90eXBlcy5qaXRfZXhjbHVkZWRfcHJlZml4ZXNcbiAgICAgICAgZW5kIGVsc2VcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgU3hfdHlwZXMuaml0X2V4Y2x1ZGVkIG4gKClcbiAgICAgIHwgXyAtPiAoKSkgYXJncztcbiAgICBOaWwpO1xuICByZWdpc3RlciBcImppdC1leGNsdWRlZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbl0gfCBbU3ltYm9sIG5dIC0+IEJvb2wgKFN4X3R5cGVzLmppdF9uYW1lX2V4Y2x1ZGVkIG4pXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImppdC1leGNsdWRlLWNhbGxlcnMtb2YhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogUmVnaXN0ZXIgY2FsbC9jYy1lc3RhYmxpc2hpbmcgZm9ybXMgKGUuZy4gY2wtcmVzdGFydC1jYXNlKS4gQW55IGZ1bmN0aW9uXG4gICAgICAgd2hvc2UgYnl0ZWNvZGUgcmVmZXJlbmNlcyBvbmUgb2YgdGhlc2UgaXMgaXRzZWxmIGludGVycHJldC1vbmx5IOKAlCBKSVRcbiAgICAgICB3b3VsZCBmb3JjZSB0aGUgZm9ybSBpbnRvIGEgbmVzdGVkIGNlay1ydW4gd2hlcmUgaXRzIGNvbnRpbnVhdGlvbiBjYW4ndFxuICAgICAgIGVzY2FwZS4gQSBndWVzdCBkZWNsYXJlcyBpdHMgY29uZGl0aW9uLXN5c3RlbSAvIGVzY2FwaW5nIGZvcm1zIGhlcmUuICopXG4gICAgTGlzdC5pdGVyIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoXG4gICAgICB8IFN0cmluZyBuIHwgU3ltYm9sIG4gLT4gSGFzaHRibC5yZXBsYWNlIFN4X3R5cGVzLmppdF9leGNsdWRlZF9jYWxsZXJfbmFtZXMgbiAoKVxuICAgICAgfCBfIC0+ICgpKSBhcmdzO1xuICAgIE5pbCk7XG4gIHJlZ2lzdGVyIFwiaml0LXJlc2V0LWNvdW50ZXJzIVwiIChmdW4gX2FyZ3MgLT5cbiAgICBTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQgOj0gMDtcbiAgICBTeF90eXBlcy5qaXRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF90aHJlc2hvbGRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50IDo9IDA7XG4gICAgTmlsKTtcblxuICAoKiBmZWQtc3ggaG9zdCBwcmltaXRpdmVzIOKAlCBwdXJlLU9DYW1sIGNyeXB0byAoV0FTTS1zYWZlKS4gKilcbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhMjU2XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyAoU3hfc2hhMi5zaGEyNTZfaGV4IHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY3J5cHRvLXNoYTI1NjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhNTEyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyAoU3hfc2hhMi5zaGE1MTJfaGV4IHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY3J5cHRvLXNoYTUxMjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhMy0yNTZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3RyaW5nIChTeF9zaGEzLnNoYTNfMjU2X2hleCBzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNyeXB0by1zaGEzLTI1NjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjYm9yLWVuY29kZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+XG4gICAgICAodHJ5IFN0cmluZyAoU3hfY2Jvci5lbmNvZGUgdilcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNib3ItZW5jb2RlOiAodmFsdWUpXCIpKTtcblxuICByZWdpc3RlciBcImNib3ItZGVjb2RlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+XG4gICAgICAodHJ5IFN4X2Nib3IuZGVjb2RlIHNcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNib3ItZGVjb2RlOiAoYnl0ZXMpXCIpKTtcblxuICByZWdpc3RlciBcImNpZC1mcm9tLWJ5dGVzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBjb2RlYzsgU3RyaW5nIG1oXSAtPlxuICAgICAgU3RyaW5nIChTeF9jaWQuY2lkdjEgY29kZWMgbWgpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2lkLWZyb20tYnl0ZXM6IChjb2RlYyBtdWx0aWhhc2gtYnl0ZXMpXCIpKTtcblxuICByZWdpc3RlciBcImNpZC1mcm9tLXN4XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT5cbiAgICAgICh0cnkgU3RyaW5nIChTeF9jaWQuY2lkX2Zyb21fc3ggdilcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNpZC1mcm9tLXN4OiAodmFsdWUpXCIpKTtcblxuICAoKiBWZXJpZnkgaXMgdG90YWw6IGFueSBtYWxmb3JtZWQgaW5wdXQgLT4gZmFsc2UsIG5ldmVyIHJhaXNlcy4gKilcbiAgcmVnaXN0ZXIgXCJlZDI1NTE5LXZlcmlmeVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwazsgU3RyaW5nIG1zZzsgU3RyaW5nIHNnXSAtPlxuICAgICAgQm9vbCAodHJ5IFN4X2VkMjU1MTkudmVyaWZ5IH5wdWJrZXk6cGsgfm1zZyB+c2lnXzpzZ1xuICAgICAgICAgICAgd2l0aCBfIC0+IGZhbHNlKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcblxuICByZWdpc3RlciBcInJzYS1zaGEyNTYtdmVyaWZ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNwa2k7IFN0cmluZyBtc2c7IFN0cmluZyBzZ10gLT5cbiAgICAgIEJvb2wgKHRyeSBTeF9yc2EudmVyaWZ5IH5zcGtpIH5tc2cgfnNpZ186c2cgd2l0aCBfIC0+IGZhbHNlKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9kaXYiLCJjYW1sX2VxdWFsIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9tb2QiLCJjYW1sX211bCIsImNhbWxfb2JqX2R1cCIsImNhbWxfcm91bmRfZmxvYXQiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N5c19maWxlX2V4aXN0cyIsImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0Zsb2F0IiwiU3RkbGliX0hhc2h0YmwiLCJTeF90eXBlcyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0xpc3QiLCJTeF9yc2EiLCJTeF9lZDI1NTE5IiwiU3hfY2lkIiwiU3hfY2JvciIsIlN4X3NoYTMiLCJTeF9zaGEyIiwiU3RkbGliX1F1ZXVlIiwiVW5peCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9GaWxlbmFtZSIsIlN4X3BhcnNlciIsIlJlIiwiUmVfUGNyZSIsIlN0ZGxpYl9VY2hhciIsIlN0ZGxpYl9TY2FuZiIsInByaW1pdGl2ZXMiLCJzeF9jYWxsX2ZuIiwicGFyYW0iLCJzeF90cmFtcG9saW5lX2ZuIiwidiIsInNjb3BlX3N0YWNrcyIsInNjb3BlX3RyYWNlIiwic2NvcGVfbG9nIiwic2NvcGVfdHJhY2VfZW5hYmxlIiwic2NvcGVfdHJhY2VfZGlzYWJsZSIsInNjb3BlX3RyYWNlX2RyYWluIiwibG9nIiwicmVxdWVzdF9jb29raWVzIiwic2NvcGVfY2xlYXJfYWxsIiwicmVnaXN0ZXIiLCJuYW1lIiwiZm4iLCJpc19wcmltaXRpdmUiLCJnZXRfcHJpbWl0aXZlIiwibWF0Y2giLCJ0cmFtcG9saW5lX2hvb2siLCJjc3RfRXhwZWN0ZWRfbnVtYmVyX2dvdCIsImFzX2ludCIsIm4iLCJhbGxfaW50cyIsImNzdCIsImNzdF9zaWduYWwiLCJjc3RfZGljdCIsImNzdF92YWx1ZSIsImFzX251bWJlciIsInQiLCJzIiwiZCIsImFzX3N0cmluZyIsImFzX2xpc3QiLCJsIiwiciIsImFzX2Jvb2wiLCJiIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJ0b19zdHJpbmciLCJyYXRfZ2NkIiwiYSIsImNzdF9yYXRpb25hbF9kaXZpc2lvbl9ieV96ZXJvIiwibWFrZV9yYXQiLCJzaWduIiwiZyIsInJuIiwicmQiLCJyYXRfb2ZfdmFsIiwiaGFzX3JhdGlvbmFsIiwiYXJncyIsImhhc19mbG9hdCIsInJhdF9hZGQiLCJiZCIsImJuIiwiYWQiLCJhbiIsInJhdF9zdWIiLCJyYXRfbXVsIiwicmF0X2RpdiIsImNzdF9kX2QiLCJjc3RfZyIsInN4X3dyaXRlX3ZhbCIsImJ1ZiIsImMiLCJrIiwiaXRlbXMiLCJzeF9kaXNwbGF5X3ZhbCIsImFjYyIsInRsIiwiaCIsInJlc3QiLCJ4IiwicGxhY2VzIiwiZmFjdG9yIiwic3VtIiwiaSIsImNvdW50IiwidG91MzIiLCJhaSIsImJpIiwiaGkiLCJsbyIsImJhc2UiLCJlIiwiaWdjZCIsImNzdF8wIiwiaW50X3RvX3JhZGl4IiwibmVnIiwiZ28iLCJjc3RfbnVtYmVyX3N0cmluZ19yYWRpeF9vdXRfb2YiLCJleG4iLCJzdGFydCIsIm1ha2VfcmF0aW9uYWxfdmFsIiwiY3N0X3MiLCJhcmciLCJzcGVjX3N0ciIsInR5cGVfY2hhciIsInRvX2ludCIsInRvX2Zsb2F0Iiwic3dpdGNoZXIiLCJmbXQiLCJuX3ZhbCIsImJvZHkiLCJpbnB1dCIsImxlbiIsImNzdF9jb25zdW1lZCIsImoiLCJmX3ZhbCIsInBhcnNlX2xlYWRpbmdfaW50IiwiZGVmYXVsdF92YWwiLCJjc3RfaG9zdF9oYW5kbGUiLCJzYWZlX2VxIiwieSIsImxhIiwiaGIiLCJoYSIsImVxIiwibGIiLCJuZWVkbGUiLCJoYXlzdGFjayIsInByZWZpeCIsInN1ZmZpeCIsInNsIiwieGwiLCJubCIsImhsIiwidGFyZ2V0IiwiZW5kX3YiLCJzdGFydF92IiwibGVuX3YiLCJzZXAiLCJwIiwicmUiLCJ0b19zdHIiLCJuZXdfcyIsIm9sZF9zIiwib2wiLCJoYXNfZGVjIiwiaGFzX2V4cCIsInBhdHRlcm4iLCJncm91cCIsImZ1bGwiLCJncm91cHMiLCJtYXRjaGVzIiwicmVzdWx0cyIsImNzdF9yZWdleF9yZXBsYWNlIiwicmVwbGFjZW1lbnQiLCJzdG9wIiwiY3N0X3JlZ2V4X3NwbGl0IiwiY3N0X2FyZ3MiLCJjc3RfbGVuIiwicGFpcnMiLCJ4cyIsImFsbCIsIml0ZW0iLCJmbGF0Iiwic3ViIiwic3RvcF92Iiwic3RlcF92Iiwic3QiLCJ0YWtlX3JhbmdlIiwiaWR4IiwibDEiLCJsMiIsInlzIiwidGFrZV9uIiwic2l6ZSIsInNlZW4iLCJyZXN1bHQiLCJrZXkiLCJkMiIsImtleXMiLCJzcmMiLCJkaWN0X3BhcnRzIiwiYXJyIiwiZWx0cyIsImNzdF9lcnJvciIsIm1zZyIsImNhdGNoX2ZuIiwidHJ5X2ZuIiwiaXNfY2xpZW50Iiwic3RvcmVfcmVnaXN0cnkiLCJpbml0X2ZuIiwic3RvcmUiLCJzdGF0ZSIsInNpZ19kIiwiY2FsbCIsImlkZW50aWNhbCIsImNhbGxfYW55IiwidHlwZXMiLCJpbml0IiwiZHN0Iiwic3JjX2l0ZW1zIiwiY3Rvcl9wYXJhbXMiLCJmaWVsZHMiLCJhcmdfbGlzdCIsInVpZCIsIm52IiwiY3N0X3BhcmFtIiwiY29udmVydGVyIiwiY29udmVydGVkIiwiZmlsbCIsImNzdF9vdXRfb2ZfYm91bmRzX2xlbmd0aCIsImNhcF9zdGFjayIsImNhcHMiLCJjYXBfc2V0IiwicHJldiIsImNhcCIsImNsYXVzZXMiLCJjc3RfVk1fdW5kZWZpbmVkIiwiY3N0X2RlcHRoIiwiY3N0X3Njb3BlX3B1c2giLCJ2YWx1ZSIsInN0YWNrIiwiY3N0X3Njb3BlX3BvcCIsImNzdF9mb3VuZCIsImNzdF9jb250ZXh0IiwiYWxsX2tleXMiLCJjc3RfY29sbGVjdGVkIiwiY3N0X2NsZWFyX2NvbGxlY3RlZCIsIm5ld192YWx1ZSIsInNpZyIsInRyYWNraW5nX2FjdGl2ZSIsInRyYWNraW5nX2RlcHMiLCJkZXBzIiwiYm9keV9mbiIsInUiLCJ1cGRhdGVfZm4iLCJkaXNwb3NlcnMiLCJydW5fdHJhY2tlZCIsImRlcCIsInN1YnNjcmliZXIiLCJuZXdfcmVzdWx0IiwiY3N0X3Njb3BlX2VtaXQiLCJjc3RfZW1pdHRlZCIsInRodW5rIiwicmVnZXhfdGFibGUiLCJjc3RfaWQiLCJtYWtlX3JlZ2V4X3ZhbHVlIiwiaWQiLCJzb3VyY2UiLCJmbGFncyIsInJlZ2V4X29mX3ZhbHVlIiwiY3N0X2dyb3VwcyIsImNzdF9pbnB1dCIsImNzdF9tYXRjaCIsImdyb3VwX3RvX2RpY3QiLCJyZWdleF9uZXh0X2lkIiwiY3N0X3JlZ2V4X2NvbXBpbGVfaW52YWxpZF9wYXR0Iiwib3B0cyIsInJ4IiwiZXhwYW5kIiwiZ2xvYmFsIiwicmVwbCIsImJlZm9yZSIsImFmdGVyX3N0YXJ0IiwiYWZ0ZXIiLCJjYWxsX2ZuIiwibWF0Y2hfc3RyIiwiZ3JvdXBzX2JlZm9yZSIsImFsbF9hcmdzIiwibWFrZV9yZWdleHBfdmFsdWUiLCJjb21waWxlZCIsImNzdF9lbmQiLCJjc3Rfc3RhcnQiLCJtYXRjaF9kaWN0IiwiYml0cyIsImh0IiwiZm91bmQiLCJlayIsImRlZmF1bHQkIiwic2VxX3RvX2xpc3QiLCJjaGFycyIsImNzdF9vdXRfb2ZfYm91bmRzIiwiY3N0X3NlcXVlbmNlX3JlZl9pbmRleCIsImNzdF9zZXF1ZW5jZV9yZWZfaW5kZXhfZF9vdXRfbyIsImxzdCIsInYxIiwiczIiLCJzMSIsInYyIiwieHMyIiwieHMxIiwic3RlcCIsImxvX2kiLCJoaV9pIiwiZ2Vuc3ltX2NvdW50ZXIiLCJjaGFyX2Rvd25jYXNlX2NwIiwiY3N0X3JlYWRfY2hhcl9leHBlY3RlZF9pbnB1dF9wIiwicG9zIiwiY3AiLCJjc3RfcGVla19jaGFyX2V4cGVjdGVkX2lucHV0X3AiLCJjc3RfcmVhZF9saW5lX2V4cGVjdGVkX2lucHV0X3AiLCJsaW5lIiwicmVhZF9wb3N0cHJvY2VzcyIsImZvcm0iLCJjc3RfZiIsImNzdF82ZiIsInByZWMiLCJzZXRfa2V5Iiwib3V0IiwiY3N0X291dF9vZl9yYW5nZSIsImJ5dGUiLCJkb19jb3B5IiwiYXQiLCJidWZzIiwidG90YWwiLCJieXRlc19saXN0IiwicGF0aCIsImljIiwibmFtZXMiLCJjb250ZW50Iiwib2MiLCJwYXQiLCJkaXIiLCJiYXNlX3BhdCIsImVudHJpZXMiLCJlbnRyeSIsInBuIiwic24iLCJwaSIsInNpIiwibmVnYXRlIiwibWF0Y2hlZCIsImMxIiwiYzIiLCJzdGF0X29yIiwiY3N0X2ZpbGUiLCJtayIsImNoYW5uZWxfdGFibGUiLCJjaGFuX2dldCIsImNoYW5uZWxfbmV4dF9pZCIsIm1vZGUiLCJmZCIsIm0iLCJtYXhfbiIsImVvZiIsImNodW5rIiwiYnVmZmVyIiwid2FudCIsIm9uZSIsImdvdF9kYXRhIiwid3JpdHRlbiIsInciLCJvIiwid2hlbmNlIiwib2Zmc2V0IiwiY21kIiwiYmxvY2tpbmciLCJjc3RfZXhlYyIsImNzdF9leGVjX2VtcHR5X2NvbW1hbmQiLCJhcmd2Iiwib3V0X3ciLCJvdXRfciIsImVycl93IiwiZXJyX3IiLCJwaWQiLCJlcnJidWYiLCJyZWFkX2FsbCIsInN0YXR1cyIsImV4aXRfY29kZSIsInRyaW1tZWQiLCJ3b3JkcyIsImV4dHJhY3RfcmVkaXJzIiwid3MiLCJjbGVhbmVkIiwibWVyZ2VfZXJyIiwiZXJyX3BhdGgiLCJvdXRfYXBwZW5kIiwib3V0X3BhdGgiLCJpbl9wYXRoIiwiY3VyIiwic3RhZ2VzIiwicGlwZXMiLCJmaW5hbF93IiwiZmluYWxfciIsImVycnN0YXNoX3ciLCJlcnJzdGFzaF9yIiwiY2xvc2Vfc2FmZSIsIm9wZW5fb3V0X3JlZGlyIiwiYXBwZW5kIiwic3RhZ2VzX2FyciIsInBpZHMiLCJtZXJnZSIsImVwIiwiYXBwIiwib3AiLCJpcCIsInN0ZGluX2ZkIiwic3Rkb3V0X2ZkIiwic3RkZXJyX2ZkIiwiZXhpdF9jb2RlcyIsImxhc3QiLCJmaW5hbF9jb2RlIiwicmVzb2x2ZV9pbmV0X2FkZHIiLCJob3N0IiwiY3N0X3NvY2tldF9jYW5ub3RfcmVzb2x2ZSIsInBvcnRfb2YiLCJhbGxvY19jaGFuX25hbWUiLCJjc3RfcnciLCJwb3J0X3YiLCJwb3J0IiwiYWRkciIsInNvY2siLCJlcnIiLCJjbGllbnRfYWRkciIsImNsaWVudF9zb2NrIiwiaG9zdF9zdHIiLCJjbGllbnRfbmFtZSIsInRvX2xpc3QiLCJjaGFuX25hbWVfb2YiLCJ0aW1lb3V0X21zIiwid3JpdGVfbGlzdCIsInJlYWRfbGlzdCIsInJlYWRfcGFpcnMiLCJ3cml0ZV9wYWlycyIsInJlYWRfZmRzIiwid3JpdGVfZmRzIiwidGltZW91dCIsInJlYWR5X3ciLCJyZWFkeV9yIiwibmFtZXNfb2YiLCJyZWFkeSIsInJmZCIsImNzdF8wMmQiLCJjc3RfTWF5IiwiY3N0X2xvY2FsIiwiY3N0X3V0YyIsInoiLCJ0eiIsInRtIiwidHpfbGFiZWwiLCJkYXlzIiwibW9ucyIsInN0ciIsInJlYWRfbl9kaWdpdHMiLCJjbnQiLCJza2lwX3dzIiwic2VjcyIsImlzX2xlYXAiLCJkYXlzX2luX21vbnRoIiwieWVhciIsIm1vbiIsIm1kYXkiLCJ0b3RhbF9kYXlzIiwiZW52X3ZhbCIsInBhcmVudF9lbnYiLCJjaGlsZCIsIm1oIiwiY29kZWMiLCJzZyIsInBrIiwic3BraSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFB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QUEsTUFDSztBQUFBLEtBQVU7QUFBQSxHQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ5ckl0QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjU2MzI4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9ydW50aW1lLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIFJ1bnRpbWUgaGVscGVycyBmb3IgdHJhbnNwaWxlZCBjb2RlLlxuXG4gICAgVGhlc2UgYnJpZGdlIHRoZSBnYXAgYmV0d2VlbiB0aGUgdHJhbnNwaWxlcidzIG91dHB1dCBhbmQgdGhlXG4gICAgZm91bmRhdGlvbiB0eXBlcy9wcmltaXRpdmVzLiBUaGUgdHJhbnNwaWxlZCBldmFsdWF0b3IgY2FsbHMgdGhlc2VcbiAgICBmdW5jdGlvbnMgZGlyZWN0bHkuICopXG5cbm9wZW4gU3hfdHlwZXNcblxuKCoqIEZhc3QgcGF0aCBlcXVhbGl0eSDigJQgc2FtZSBhcyBTeF9wcmltaXRpdmVzLnNhZmVfZXEgZm9yIHRoZSBjb21tb24gY2FzZXNcbiAgICB0aGF0IHNob3cgdXAgaW4gaG90IGRpc3BhdGNoIChzdHJpbmcgdnMgc3RyaW5nLCBldGMpLiBGYWxscyB0aHJvdWdoIHRvXG4gICAgdGhlIHJlZ2lzdGVyZWQgXCI9XCIgcHJpbWl0aXZlIGZvciBjb21wbGV4IGNhc2VzLiAqKVxubGV0IHJlYyBfZmFzdF9lcSBhIGIgPVxuICBpZiBhID09IGIgdGhlbiB0cnVlXG4gIGVsc2UgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4geCA9IHlcbiAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IGZsb2F0X29mX2ludCB4ID0geVxuICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4geCA9IGZsb2F0X29mX2ludCB5XG4gICgqIEV4YWN0IHJhdGlvbmFscyDigJQgbXVzdCBtYXRjaCB0aGUgXCI9XCIgcHJpbWl0aXZlIChzYWZlX2VxKS4gQ3Jvc3MtbXVsdGlwbHlcbiAgICAgZm9yIHJhdGlvbmFsL3JhdGlvbmFsOyBjb2VyY2UgZm9yIHJhdGlvbmFsL2ludCBhbmQgcmF0aW9uYWwvZmxvYXQuICopXG4gIHwgUmF0aW9uYWwgKGFuLCBhZCksIFJhdGlvbmFsIChibiwgYmQpIC0+IGFuICogYmQgPSBibiAqIGFkXG4gIHwgUmF0aW9uYWwgKG4sIGQpLCBJbnRlZ2VyIHkgLT4gbiA9IHkgKiBkXG4gIHwgSW50ZWdlciB4LCBSYXRpb25hbCAobiwgZCkgLT4geCAqIGQgPSBuXG4gIHwgUmF0aW9uYWwgKG4sIGQpLCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZCA9IHlcbiAgfCBOdW1iZXIgeCwgUmF0aW9uYWwgKG4sIGQpIC0+IHggPSBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZFxuICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gIHwgTmlsLCBOaWwgLT4gdHJ1ZVxuICB8IFN5bWJvbCB4LCBTeW1ib2wgeSAtPiB4ID0geVxuICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gIHwgKExpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9KSxcbiAgICAoTGlzdCBsYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxiIH0pIC0+XG4gICAgKHRyeSBMaXN0LmZvcl9hbGwyIF9mYXN0X2VxIGxhIGxiIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IGZhbHNlKVxuICB8IF8gLT4gZmFsc2VcblxuKCoqIENhbGwgYSByZWdpc3RlcmVkIHByaW1pdGl2ZSBieSBuYW1lLlxuICAgIEZhc3QgcGF0aCBmb3IgaG90IGRpc3BhdGNoIHByaW1pdGl2ZXMgKFs9XSwgWzxdLCBbPl0sIFs8PV0sIFs+PV0sIFtlbXB0eT9dLFxuICAgIFtmaXJzdF0sIFtyZXN0XSwgW2xlbl0pIHNraXBzIHRoZSBIYXNodGJsIGxvb2t1cCBlbnRpcmVseSDigJQgdGhlc2UgYXJlXG4gICAgY2FsbGVkIG1pbGxpb25zIG9mIHRpbWVzIGluIHRoZSBDRUsgW3N0ZXBfY29udGludWVdL1tzdGVwX2V2YWxdIGRpc3BhdGNoLiAqKVxubGV0IHByaW1fY2FsbCBuYW1lIGFyZ3MgPVxuICAoKiBIb3QgcGF0aDogbW9zdC1mcmVxdWVudGx5LWNhbGxlZCBwcmltaXRpdmVzIGJ5IHN0ZXBfY29udGludWUgZGlzcGF0Y2ggKilcbiAgbWF0Y2ggbmFtZSwgYXJncyB3aXRoXG4gIHwgXCI9XCIsIFthOyBiXSAtPiBCb29sIChfZmFzdF9lcSBhIGIpXG4gIHwgXCJlbXB0eT9cIiwgW0xpc3QgW11dIC0+IEJvb2wgdHJ1ZVxuICB8IFwiZW1wdHk/XCIsIFtMaXN0IF9dIC0+IEJvb2wgZmFsc2VcbiAgfCBcImVtcHR5P1wiLCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfV0gLT4gQm9vbCB0cnVlXG4gIHwgXCJlbXB0eT9cIiwgW0xpc3RSZWYgX10gLT4gQm9vbCBmYWxzZVxuICB8IFwiZW1wdHk/XCIsIFtOaWxdIC0+IEJvb2wgdHJ1ZVxuICB8IFwiZmlyc3RcIiwgW0xpc3QgKHggOjogXyldIC0+IHhcbiAgfCBcImZpcnN0XCIsIFtMaXN0IFtdXSAtPiBOaWxcbiAgfCBcImZpcnN0XCIsIFtMaXN0UmVmIHsgY29udGVudHMgPSAoeCA6OiBfKSB9XSAtPiB4XG4gIHwgXCJmaXJzdFwiLCBbTGlzdFJlZiBfXSAtPiBOaWxcbiAgfCBcImZpcnN0XCIsIFtOaWxdIC0+IE5pbFxuICB8IFwicmVzdFwiLCBbTGlzdCAoXyA6OiB4cyldIC0+IExpc3QgeHNcbiAgfCBcInJlc3RcIiwgW0xpc3QgW11dIC0+IExpc3QgW11cbiAgfCBcInJlc3RcIiwgW0xpc3RSZWYgeyBjb250ZW50cyA9IChfIDo6IHhzKSB9XSAtPiBMaXN0IHhzXG4gIHwgXCJyZXN0XCIsIFtMaXN0UmVmIF9dIC0+IExpc3QgW11cbiAgfCBcInJlc3RcIiwgW05pbF0gLT4gTGlzdCBbXVxuICB8IFwibGVuXCIsIFtMaXN0IGxdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoIGwpXG4gIHwgXCJsZW5cIiwgW0xpc3RSZWYgcl0gLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggIXIpXG4gIHwgXCJsZW5cIiwgW1N0cmluZyBzXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gIHwgXCJsZW5cIiwgW05pbF0gLT4gSW50ZWdlciAwXG4gIHwgXCI8XCIsIFtJbnRlZ2VyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA8IHkpXG4gIHwgXCI8XCIsIFtOdW1iZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKHggPCB5KVxuICB8IFwiPFwiLCBbSW50ZWdlciB4OyBOdW1iZXIgeV0gLT4gQm9vbCAoZmxvYXRfb2ZfaW50IHggPCB5KVxuICB8IFwiPFwiLCBbTnVtYmVyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA8IGZsb2F0X29mX2ludCB5KVxuICB8IFwiPlwiLCBbSW50ZWdlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPiB5KVxuICB8IFwiPlwiLCBbTnVtYmVyIHg7IE51bWJlciB5XSAtPiBCb29sICh4ID4geSlcbiAgfCBcIj5cIiwgW0ludGVnZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKGZsb2F0X29mX2ludCB4ID4geSlcbiAgfCBcIj5cIiwgW051bWJlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPiBmbG9hdF9vZl9pbnQgeSlcbiAgfCBcIjw9XCIsIFtJbnRlZ2VyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA8PSB5KVxuICB8IFwiPD1cIiwgW051bWJlciB4OyBOdW1iZXIgeV0gLT4gQm9vbCAoeCA8PSB5KVxuICB8IFwiPD1cIiwgW0ludGVnZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKGZsb2F0X29mX2ludCB4IDw9IHkpXG4gIHwgXCI8PVwiLCBbTnVtYmVyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA8PSBmbG9hdF9vZl9pbnQgeSlcbiAgfCBcIj49XCIsIFtJbnRlZ2VyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA+PSB5KVxuICB8IFwiPj1cIiwgW051bWJlciB4OyBOdW1iZXIgeV0gLT4gQm9vbCAoeCA+PSB5KVxuICB8IFwiPj1cIiwgW0ludGVnZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKGZsb2F0X29mX2ludCB4ID49IHkpXG4gIHwgXCI+PVwiLCBbTnVtYmVyIHg7IEludGVnZXIgeV0gLT4gQm9vbCAoeCA+PSBmbG9hdF9vZl9pbnQgeSlcbiAgfCBfIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgfCBTb21lIGYgLT4gZiBhcmdzXG4gICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVua25vd24gcHJpbWl0aXZlOiBcIiBeIG5hbWUpKVxuXG4oKiogQ29udmVydCBhbnkgU1ggdmFsdWUgdG8gYW4gT0NhbWwgc3RyaW5nIChpbnRlcm5hbCkuICopXG5sZXQgdmFsdWVfdG9fc3RyID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgTnVtYmVyIG4gLT4gU3hfdHlwZXMuZm9ybWF0X251bWJlciBuXG4gIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgfCBOaWwgLT4gXCJcIlxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4ga1xuICB8IHYgLT4gaW5zcGVjdCB2XG5cbigqKiBzeF90b19zdHJpbmcgcmV0dXJucyBhIHZhbHVlIChTdHJpbmcpIGZvciB0cmFuc3BpbGVkIGNvZGUuICopXG5sZXQgc3hfdG9fc3RyaW5nIHYgPSBTdHJpbmcgKHZhbHVlX3RvX3N0ciB2KVxuXG4oKiogU3RyaW5nIGNvbmNhdGVuYXRpb24gaGVscGVyIOKAlCBbc3hfc3RyXSB0YWtlcyBhIGxpc3Qgb2YgdmFsdWVzLiAqKVxubGV0IHN4X3N0ciBhcmdzID1cbiAgU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCB2YWx1ZV90b19zdHIgYXJncylcblxuKCoqIENvbnZlcnQgYSB2YWx1ZSB0byBhIGxpc3QuICopXG5sZXQgc3hfdG9fbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBsIC0+IGxcbiAgfCBMaXN0UmVmIHIgLT4gIXJcbiAgfCBOaWwgLT4gW11cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGxpc3QsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBDYWxsIGFuIFNYIGNhbGxhYmxlIChsYW1iZGEsIG5hdGl2ZSBmbiwgY29udGludWF0aW9uKS4gKilcbmxldCBzeF9jYWxsIGYgYXJncyA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJnc1xuICB8IFZtQ2xvc3VyZSBjbCAtPiAhU3hfdHlwZXMuX3ZtX2NhbGxfY2xvc3VyZV9yZWYgY2wgYXJnc1xuICB8IExhbWJkYSBfIC0+XG4gICAgIVN4X3R5cGVzLl9jZWtfZXZhbF9sYW1iZGFfcmVmIGYgYXJnc1xuICB8IENvbnRpbnVhdGlvbiAoaywgXykgLT5cbiAgICBrIChtYXRjaCBhcmdzIHdpdGggeCA6OiBfIC0+IHggfCBbXSAtPiBOaWwpXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSAtPlxuICAgIHJhaXNlIChFdmFsX2Vycm9yIFwiY2FsbGNjIGNvbnRpbnVhdGlvbnMgbXVzdCBiZSBpbnZva2VkIHRocm91Z2ggdGhlIENFSyBtYWNoaW5lXCIpXG4gIHwgXyAtPlxuICAgIGxldCBuYXJncyA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgICBsZXQgYXJnc19wcmV2aWV3ID0gaWYgbmFyZ3MgPSAwIHRoZW4gXCJcIiBlbHNlXG4gICAgICBsZXQgcyA9IFN0cmluZy5jb25jYXQgXCIsIFwiIChMaXN0Lm1hcCAoZnVuIGEgLT4gbGV0IHMgPSBpbnNwZWN0IGEgaW4gaWYgU3RyaW5nLmxlbmd0aCBzID4gNDAgdGhlbiBTdHJpbmcuc3ViIHMgMCA0MCBeIFwiLi5cIiBlbHNlIHMpIGFyZ3MpIGluXG4gICAgICBcIiB3aXRoIGFyZ3M9W1wiIF4gcyBeIFwiXVwiIGluXG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiTm90IGNhbGxhYmxlOiBcIiBeIGluc3BlY3QgZiBeIGFyZ3NfcHJldmlldykpXG5cbigqIEluaXRpYWxpemUgZm9yd2FyZCByZWYgc28gcHJpbWl0aXZlcyBjYW4gY2FsbCBTWCBmdW5jdGlvbnMgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuX3N4X2NhbGxfZm4gOj0gc3hfY2FsbFxuKCogVHJhbXBvbGluZSByZWYgaXMgc2V0IGJ5IHN4X3JlZi5tbCBhZnRlciBpdCdzIGxvYWRlZCAqKVxuXG4oKiogQXBwbHkgYSBmdW5jdGlvbiB0byBhIGxpc3Qgb2YgYXJncy4gKilcbmxldCBzeF9hcHBseSBmIGFyZ3NfbGlzdCA9XG4gIHN4X2NhbGwgZiAoc3hfdG9fbGlzdCBhcmdzX2xpc3QpXG5cbigqKiBDRUstc2FmZSBhcHBseSDigJQgY2F0Y2hlcyBFdmFsX2Vycm9yIGZyb20gbmF0aXZlIGZucyBhbmQgcmV0dXJucyBhbiBlcnJvclxuICAgIG1hcmtlciBkaWN0IGluc3RlYWQgb2YgcmFpc2luZy4gIFRoZSBDRUsgZXZhbHVhdG9yIGNoZWNrcyBmb3IgdGhpcyBhbmRcbiAgICBjb252ZXJ0cyB0byBhIHJhaXNlLWV2YWwgc3RhdGUgc28gZ3VhcmQvaGFuZGxlci1iaW5kIGNhbiBpbnRlcmNlcHQgaXQuXG4gICAgTm9uLW5hdGl2ZSBjYWxscyAobGFtYmRhLCBjb250aW51YXRpb24pIGRlbGVnYXRlIHRvIHN4X2FwcGx5IHVuY2hhbmdlZC4gKilcbmxldCBzeF9hcHBseV9jZWsgZiBhcmdzX2xpc3QgPVxuICBtYXRjaCBmIHdpdGhcbiAgfCBOYXRpdmVGbiBfIHwgVm1DbG9zdXJlIF8gLT5cbiAgICAodHJ5IHN4X2FwcGx5IGYgYXJnc19saXN0XG4gICAgIHdpdGhcbiAgICAgfCBDZWtQZXJmb3JtUmVxdWVzdCBfIGFzIGUgLT4gcmFpc2UgZVxuICAgICB8IGV4biAtPlxuICAgICAgICgqIENoZWNrIGlmIHRoaXMgaXMgYSBWTSBzdXNwZW5zaW9uIOKAlCByZXR1cm4gbWFya2VyIGRpY3Qgc29cbiAgICAgICAgICBjb250aW51ZV93aXRoX2NhbGwgY2FuIGJ1aWxkIGEgcHJvcGVyIHN1c3BlbmRlZCBDRUsgc3RhdGVcbiAgICAgICAgICB3aXRoIHZtLXJlc3VtZS1mcmFtZSBvbiB0aGUga29udC4gKilcbiAgICAgICAobWF0Y2ggIV92bV9zdXNwZW5zaW9uX3RvX2RpY3QgZXhuIHdpdGhcbiAgICAgICAgfCBTb21lIG1hcmtlciAtPiBtYXJrZXJcbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgKG1hdGNoIGV4biB3aXRoXG4gICAgICAgICAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDMgaW5cbiAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9fZXZhbF9lcnJvcl9fXCIgKEJvb2wgdHJ1ZSk7XG4gICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJtZXNzYWdlXCIgKFN0cmluZyBtc2cpO1xuICAgICAgICAgICAgIERpY3QgZFxuICAgICAgICAgICB8IF8gLT4gcmFpc2UgZXhuKSkpXG4gIHwgXyAtPiBzeF9hcHBseSBmIGFyZ3NfbGlzdFxuXG4oKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBldmFsLWVycm9yIG1hcmtlciBmcm9tIHN4X2FwcGx5X2Nlay4gKilcbmxldCBpc19ldmFsX2Vycm9yIHYgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIl9fZXZhbF9lcnJvcl9fXCIgd2l0aFxuICAgIHwgU29tZSAoQm9vbCB0cnVlKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcbiAgfCBfIC0+IGZhbHNlXG5cbigqKiBNdXRhYmxlIGFwcGVuZCDigJQgYWRkIGl0ZW0gdG8gYSBsaXN0IHJlZiBvciBhY2N1bXVsYXRvci5cbiAgICBJbiB0cmFuc3BpbGVkIGNvZGUsIGxpc3RzIHRoYXQgZ2V0IGFwcGVuZGVkIHRvIGFyZSBtdXRhYmxlIHJlZnMuICopXG5sZXQgc3hfYXBwZW5kX2IgbHN0IGl0ZW0gPVxuICBtYXRjaCBsc3Qgd2l0aFxuICB8IExpc3QgaXRlbXMgLT4gTGlzdCAoaXRlbXMgQCBbaXRlbV0pXG4gIHwgTGlzdFJlZiByIC0+IHIgOj0gIXIgQCBbaXRlbV07IGxzdCAgKCogbXV0YXRlIGluIHBsYWNlLCByZXR1cm4gc2FtZSByZWYgKilcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QsIGdvdCBcIiBeIHR5cGVfb2YgbHN0KSlcblxuKCoqIE11dGFibGUgZGljdC1zZXQg4oCUIHNldCBrZXkgaW4gZGljdCwgcmV0dXJuIHZhbHVlLiAqKVxubGV0IHN4X2RpY3Rfc2V0X2IgZCBrIHYgPVxuICBtYXRjaCBkLCBrIHdpdGhcbiAgfCBEaWN0IHRibCwgU3RyaW5nIGtleSAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGtleSB2OyB2XG4gIHwgRGljdCB0YmwsIEtleXdvcmQga2V5IC0+IEhhc2h0YmwucmVwbGFjZSB0Ymwga2V5IHY7IHZcbiAgfCBDZWtGcmFtZSBmLCBTdHJpbmcga2V5IC0+XG4gICAgKG1hdGNoIGtleSB3aXRoXG4gICAgIHwgXCJ2YWx1ZVwiIHwgXCJleHRyYVwiIHwgXCJoby10eXBlXCIgfCBcInNjaGVtZVwiIHwgXCJpbmRleGVkXCJcbiAgICAgfCBcInBoYXNlXCIgfCBcImhhcy1lZmZlY3RzXCIgfCBcIm1hdGNoLXZhbFwiIHwgXCJjdXJyZW50LWl0ZW1cIlxuICAgICB8IFwidXBkYXRlLWZuXCIgfCBcImhlYWQtbmFtZVwiIC0+IGYuY2ZfZXh0cmEgPC0gdjsgdlxuICAgICB8IFwicmVtYWluaW5nXCIgLT4gZi5jZl9yZW1haW5pbmcgPC0gdjsgdlxuICAgICB8IFwic3Vic2NyaWJlcnNcIiB8IFwicmVzdWx0c1wiIHwgXCJyYXctYXJnc1wiIC0+IGYuY2ZfcmVzdWx0cyA8LSB2OyB2XG4gICAgIHwgXCJlbWl0dGVkXCIgfCBcImVmZmVjdC1saXN0XCIgfCBcImZpcnN0LXJlbmRlclwiIHwgXCJleHRyYTJcIiAtPiBmLmNmX2V4dHJhMiA8LSB2OyB2XG4gICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJkaWN0LXNldCEgY2VrLWZyYW1lOiB1bmtub3duIGZpZWxkIFwiIF4ga2V5KSkpXG4gIHwgVm1GcmFtZSBmLCBTdHJpbmcga2V5IC0+XG4gICAgKG1hdGNoIGtleSB3aXRoXG4gICAgIHwgXCJpcFwiIC0+IGYudmZfaXAgPC0gdmFsX3RvX2ludCB2OyB2XG4gICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJkaWN0LXNldCEgdm0tZnJhbWU6IHVua25vd24gZmllbGQgXCIgXiBrZXkpKSlcbiAgfCBWbU1hY2hpbmUgbSwgU3RyaW5nIGtleSAtPlxuICAgIChtYXRjaCBrZXkgd2l0aFxuICAgICB8IFwic3BcIiAtPiBtLnZtX3NwIDwtIHZhbF90b19pbnQgdjsgdlxuICAgICB8IFwiZnJhbWVzXCIgLT4gbS52bV9mcmFtZXMgPC0gKG1hdGNoIHYgd2l0aCBMaXN0IGwgLT4gTGlzdC5tYXAgKGZ1biB4IC0+IG1hdGNoIHggd2l0aCBWbUZyYW1lIGYgLT4gZiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bTogZnJhbWVzIG11c3QgYmUgdm0tZnJhbWUgbGlzdFwiKSkgbCB8IF8gLT4gW10pOyB2XG4gICAgIHwgXCJzdGFja1wiIC0+IChtYXRjaCB2IHdpdGggTGlzdCBfIC0+IHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm06IHN0YWNrIG11c3QgYmUgYXJyYXlcIikpXG4gICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJkaWN0LXNldCEgdm0tbWFjaGluZTogdW5rbm93biBmaWVsZCBcIiBeIGtleSkpKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LXNldCE6IGV4cGVjdGVkIGRpY3QgYW5kIHN0cmluZyBrZXlcIilcblxuKCoqIEdldCBmcm9tIGRpY3Qgb3IgbGlzdC4gKilcbmxldCBnZXRfdmFsIGNvbnRhaW5lciBrZXkgPVxuICBtYXRjaCBjb250YWluZXIsIGtleSB3aXRoXG4gIHwgQ2VrU3RhdGUgcywgU3RyaW5nIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJjb250cm9sXCIgLT4gcy5jc19jb250cm9sIHwgXCJlbnZcIiAtPiBzLmNzX2VudlxuICAgICB8IFwia29udFwiIC0+IHMuY3Nfa29udCB8IFwicGhhc2VcIiAtPiBTdHJpbmcgcy5jc19waGFzZVxuICAgICB8IFwidmFsdWVcIiAtPiBzLmNzX3ZhbHVlIHwgXyAtPiBOaWwpXG4gIHwgQ2VrRnJhbWUgZiwgU3RyaW5nIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJ0eXBlXCIgLT4gU3RyaW5nIGYuY2ZfdHlwZSB8IFwiZW52XCIgLT4gZi5jZl9lbnZcbiAgICAgfCBcIm5hbWVcIiAtPiBmLmNmX25hbWUgfCBcImJvZHlcIiAtPiBmLmNmX2JvZHlcbiAgICAgfCBcInJlbWFpbmluZ1wiIC0+IGYuY2ZfcmVtYWluaW5nIHwgXCJmXCIgLT4gZi5jZl9mXG4gICAgIHwgXCJhcmdzXCIgLT4gZi5jZl9hcmdzIHwgXCJldmFsZWRcIiAtPiBmLmNmX2FyZ3NcbiAgICAgfCBcInJlc3VsdHNcIiAtPiBmLmNmX3Jlc3VsdHMgfCBcInJhdy1hcmdzXCIgLT4gZi5jZl9yZXN1bHRzXG4gICAgIHwgXCJ0aGVuXCIgLT4gZi5jZl9ib2R5IHwgXCJlbHNlXCIgLT4gZi5jZl9uYW1lXG4gICAgIHwgXCJoby10eXBlXCIgLT4gZi5jZl9leHRyYSB8IFwic2NoZW1lXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwiaW5kZXhlZFwiIC0+IGYuY2ZfZXh0cmEgfCBcInZhbHVlXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwicGhhc2VcIiAtPiBmLmNmX2V4dHJhIHwgXCJoYXMtZWZmZWN0c1wiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcIm1hdGNoLXZhbFwiIC0+IGYuY2ZfZXh0cmEgfCBcImN1cnJlbnQtaXRlbVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcInVwZGF0ZS1mblwiIC0+IGYuY2ZfZXh0cmEgfCBcImhlYWQtbmFtZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcImVtaXR0ZWRcIiAtPiBmLmNmX2V4dHJhMiB8IFwiZWZmZWN0LWxpc3RcIiAtPiBmLmNmX2V4dHJhMlxuICAgICB8IFwiZmlyc3QtcmVuZGVyXCIgLT4gZi5jZl9leHRyYTIgfCBcImZpbGVcIiAtPiBmLmNmX2VudlxuICAgICB8IFwiZXh0cmFcIiAtPiBmLmNmX2V4dHJhIHwgXCJleHRyYTJcIiAtPiBmLmNmX2V4dHJhMlxuICAgICB8IFwic3Vic2NyaWJlcnNcIiAtPiBmLmNmX3Jlc3VsdHNcbiAgICAgfCBcInByZXYtdHJhY2tpbmdcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJhZnRlci10aHVua1wiIC0+IGYuY2ZfZiAgICAgICAgKCogd2luZC1hZnRlciBmcmFtZSAqKVxuICAgICB8IFwid2luZGVycy1sZW5cIiAtPiBmLmNmX2V4dHJhICAgICgqIHdpbmQtYWZ0ZXIgZnJhbWUgKilcbiAgICAgfCBcImJvZHktcmVzdWx0XCIgLT4gZi5jZl9uYW1lICAgICAoKiB3aW5kLXJldHVybiBmcmFtZSAqKVxuICAgICB8IF8gLT4gTmlsKVxuICB8IFZtRnJhbWUgZiwgU3RyaW5nIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJpcFwiIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGYudmZfaXApXG4gICAgIHwgXCJjbG9zdXJlXCIgLT4gVm1DbG9zdXJlIGYudmZfY2xvc3VyZVxuICAgICB8IFwiYmFzZVwiIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGYudmZfYmFzZSlcbiAgICAgfCBcImxvY2FsLWNlbGxzXCIgLT4gTmlsICAoKiBvcGFxdWUg4oCUIGFjY2Vzc2VkIHZpYSBmcmFtZS1sb2NhbC1nZXQvc2V0ICopXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgVm1NYWNoaW5lIG0sIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwic3BcIiAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBtLnZtX3NwKVxuICAgICB8IFwic3RhY2tcIiAtPiBOaWwgICgqIG9wYXF1ZSDigJQgYWNjZXNzZWQgdmlhIHZtLXB1c2gvcG9wICopXG4gICAgIHwgXCJmcmFtZXNcIiAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIGYgLT4gVm1GcmFtZSBmKSBtLnZtX2ZyYW1lcylcbiAgICAgfCBcImdsb2JhbHNcIiAtPiBEaWN0IG0udm1fZ2xvYmFsc1xuICAgICB8IF8gLT4gTmlsKVxuICB8IFZtQ2xvc3VyZSBjbCwgU3RyaW5nIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJ2bS1jb2RlXCIgLT5cbiAgICAgICAoKiBSZXR1cm4gdm1fY29kZSBmaWVsZHMgYXMgYSBEaWN0LiAgVGhlIGJ5dGVjb2RlIGFuZCBjb25zdGFudHMgYXJyYXlzXG4gICAgICAgICAgYXJlIGxhemlseSBjb252ZXJ0ZWQgdG8gTGlzdHMgYW5kIGNhY2hlZCBvbiB0aGUgdm1fY29kZSByZWNvcmQgc29cbiAgICAgICAgICB0aGUgdHJhbnNwaWxlZCBWTSBsb29wICh3aGljaCByZS1kZXJpdmVzIGJjL2NvbnN0cyBlYWNoIGl0ZXJhdGlvbilcbiAgICAgICAgICBkb2Vzbid0IGFsbG9jYXRlIG9uIGV2ZXJ5IHN0ZXAuICopXG4gICAgICAgbGV0IGMgPSBjbC52bV9jb2RlIGluXG4gICAgICAgbGV0IGJjID0gbWF0Y2ggYy52Y19ieXRlY29kZV9saXN0IHdpdGhcbiAgICAgICAgIHwgU29tZSBsIC0+IGxcbiAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICBsZXQgbCA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIGkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkpIGMudmNfYnl0ZWNvZGUpIGluXG4gICAgICAgICAgIGMudmNfYnl0ZWNvZGVfbGlzdCA8LSBTb21lIGw7IGwgaW5cbiAgICAgICBsZXQgY29uc3RzID0gbWF0Y2ggYy52Y19jb25zdGFudHNfbGlzdCB3aXRoXG4gICAgICAgICB8IFNvbWUgbCAtPiBsXG4gICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgbGV0IGwgPSBBcnJheS50b19saXN0IGMudmNfY29uc3RhbnRzIGluXG4gICAgICAgICAgIGMudmNfY29uc3RhbnRzX2xpc3QgPC0gU29tZSBsOyBsIGluXG4gICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1ieXRlY29kZVwiIChMaXN0IGJjKTtcbiAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWNvbnN0YW50c1wiIChMaXN0IGNvbnN0cyk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1hcml0eVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjLnZjX2FyaXR5KSk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1yZXN0LWFyaXR5XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudmNfcmVzdF9hcml0eSkpO1xuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtbG9jYWxzXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudmNfbG9jYWxzKSk7XG4gICAgICAgRGljdCBkXG4gICAgIHwgXCJ2bS11cHZhbHVlc1wiIC0+XG4gICAgICAgTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gdXYgLT4gdXYudXZfdmFsdWUpIGNsLnZtX3VwdmFsdWVzKSlcbiAgICAgfCBcInZtLW5hbWVcIiAtPlxuICAgICAgIChtYXRjaCBjbC52bV9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gICAgIHwgXCJ2bS1nbG9iYWxzXCIgLT4gRGljdCBjbC52bV9lbnZfcmVmXG4gICAgIHwgXCJ2bS1jbG9zdXJlLWVudlwiIC0+XG4gICAgICAgKG1hdGNoIGNsLnZtX2Nsb3N1cmVfZW52IHdpdGggU29tZSBlIC0+IEVudiBlIHwgTm9uZSAtPiBOaWwpXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgRGljdCBkLCBTdHJpbmcgayAtPiBkaWN0X2dldCBkIGtcbiAgfCBEaWN0IGQsIEtleXdvcmQgayAtPiBkaWN0X2dldCBkIGtcbiAgfCBBZHRWYWx1ZSBhLCBTdHJpbmcgayB8IEFkdFZhbHVlIGEsIEtleXdvcmQgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcIl9hZHRcIiAgICAtPiBCb29sIHRydWVcbiAgICAgfCBcIl90eXBlXCIgICAtPiBTdHJpbmcgYS5hdl90eXBlXG4gICAgIHwgXCJfY3RvclwiICAgLT4gU3RyaW5nIGEuYXZfY3RvclxuICAgICB8IFwiX2ZpZWxkc1wiIC0+IExpc3QgKEFycmF5LnRvX2xpc3QgYS5hdl9maWVsZHMpXG4gICAgIHwgXyAgICAgICAgIC0+IE5pbClcbiAgfCAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSwgTnVtYmVyIG4gLT5cbiAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBuKSB3aXRoIF8gLT4gTmlsKVxuICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBJbnRlZ2VyIG4gLT5cbiAgICAodHJ5IExpc3QubnRoIGwgbiB3aXRoIF8gLT4gTmlsKVxuICB8IE5pbCwgXyAtPiBOaWwgICgqIG5pbC5hbnl0aGluZyDihpIgbmlsICopXG4gIHwgXywgXyAtPiBOaWwgICAgKCogdHlwZSBtaXNtYXRjaCDihpIgbmlsIChtYXRjaGVzIEpTL1B5dGhvbiBiZWhhdmlvcikgKilcblxuKCoqIFJlZ2lzdGVyIGdldCBhcyBhIHByaW1pdGl2ZSBvdmVycmlkZSDigJQgdHJhbnNwaWxlZCBjb2RlIGNhbGxzIChnZXQgZCBrKS4gKilcbmxldCAoKSA9XG4gIFN4X3ByaW1pdGl2ZXMucmVnaXN0ZXIgXCJnZXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtjOyBrXSAtPiBnZXRfdmFsIGMga1xuICAgIHwgW2M7IGs7IGRlZmF1bHRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCB2ID0gZ2V0X3ZhbCBjIGsgaW5cbiAgICAgICAgaWYgdiA9IE5pbCB0aGVuIGRlZmF1bHQgZWxzZSB2XG4gICAgICB3aXRoIF8gLT4gZGVmYXVsdClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZXQ6IDItMyBhcmdzXCIpKVxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFByaW1pdGl2ZSBhbGlhc2VzIOKAlCB0b3AtbGV2ZWwgZnVuY3Rpb25zIGNhbGxlZCBieSB0cmFuc3BpbGVkIGNvZGUgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIFRoZSB0cmFuc3BpbGVkIGV2YWx1YXRvciBjYWxscyBwcmltaXRpdmVzIGRpcmVjdGx5IGJ5IHRoZWlyIG1hbmdsZWRcbiAgICBPQ2FtbCBuYW1lLiBUaGVzZSBhbGlhc2VzIGRlbGVnYXRlIHRvIHRoZSBwcmltaXRpdmVzIHRhYmxlIHNvIHRoZVxuICAgIHRyYW5zcGlsZWQgY29kZSBjb21waWxlcyB3aXRob3V0IG5lZWRpbmcgW3ByaW1fY2FsbF0gZXZlcnl3aGVyZS4gKilcblxubGV0IF9wcmltIG5hbWUgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgfCBTb21lIGYgLT4gZiB8IE5vbmUgLT4gKGZ1biBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIk1pc3NpbmcgcHJpbTogXCIgXiBuYW1lKSkpXG5cbigqIENvbGxlY3Rpb24gb3BzICopXG5sZXQgZmlyc3QgYXJncyA9IF9wcmltIFwiZmlyc3RcIiBbYXJnc11cbmxldCByZXN0IGFyZ3MgPSBfcHJpbSBcInJlc3RcIiBbYXJnc11cbmxldCBsYXN0IGFyZ3MgPSBfcHJpbSBcImxhc3RcIiBbYXJnc11cbmxldCBudGggY29sbCBpID0gX3ByaW0gXCJudGhcIiBbY29sbDsgaV1cbmxldCBjb25zIHggbCA9IF9wcmltIFwiY29uc1wiIFt4OyBsXVxubGV0IGFwcGVuZCBhIGIgPSBfcHJpbSBcImFwcGVuZFwiIFthOyBiXVxubGV0IHJldmVyc2UgbCA9IF9wcmltIFwicmV2ZXJzZVwiIFtsXVxubGV0IGZsYXR0ZW4gbCA9IF9wcmltIFwiZmxhdHRlblwiIFtsXVxubGV0IGNvbmNhdCBhIGIgPSBfcHJpbSBcImNvbmNhdFwiIFthOyBiXVxubGV0IHNsaWNlIGEgYiA9IF9wcmltIFwic2xpY2VcIiBbYTsgYl1cbmxldCBsZW4gYSA9IF9wcmltIFwibGVuXCIgW2FdXG5sZXQgZ2V0IGEgYiA9IGdldF92YWwgYSBiXG5sZXQgc29ydCcgYSA9IF9wcmltIFwic29ydFwiIFthXVxubGV0IHJhbmdlJyBhID0gX3ByaW0gXCJyYW5nZVwiIFthXVxubGV0IHVuaXF1ZSBhID0gX3ByaW0gXCJ1bmlxdWVcIiBbYV1cbmxldCB6aXAgYSBiID0gX3ByaW0gXCJ6aXBcIiBbYTsgYl1cbmxldCB0YWtlIGEgYiA9IF9wcmltIFwidGFrZVwiIFthOyBiXVxubGV0IGRyb3AgYSBiID0gX3ByaW0gXCJkcm9wXCIgW2E7IGJdXG5cbigqIFByZWRpY2F0ZXMgKilcbmxldCBrZXl3b3JkX3AgYSA9IF9wcmltIFwia2V5d29yZD9cIiBbYV1cbmxldCBlbXB0eV9wIGEgPSBfcHJpbSBcImVtcHR5P1wiIFthXVxubGV0IG51bWJlcl9wIGEgPSBfcHJpbSBcIm51bWJlcj9cIiBbYV1cbmxldCBzdHJpbmdfcCBhID0gX3ByaW0gXCJzdHJpbmc/XCIgW2FdXG5sZXQgYm9vbGVhbl9wIGEgPSBfcHJpbSBcImJvb2xlYW4/XCIgW2FdXG5sZXQgbGlzdF9wIGEgPSBfcHJpbSBcImxpc3Q/XCIgW2FdXG5sZXQgZGljdF9wIGEgPSBfcHJpbSBcImRpY3Q/XCIgW2FdXG5sZXQgc3ltYm9sX3AgYSA9IF9wcmltIFwic3ltYm9sP1wiIFthXVxuXG4oKiBTdHJpbmcgb3BzICopXG5sZXQgc3RyJyBhcmdzID0gU3RyaW5nIChzeF9zdHIgYXJncylcbmxldCB1cHBlciBhID0gX3ByaW0gXCJ1cHBlclwiIFthXVxubGV0IHVwY2FzZSBhID0gX3ByaW0gXCJ1cGNhc2VcIiBbYV1cbmxldCBsb3dlciBhID0gX3ByaW0gXCJsb3dlclwiIFthXVxubGV0IGRvd25jYXNlIGEgPSBfcHJpbSBcImRvd25jYXNlXCIgW2FdXG5sZXQgdHJpbSBhID0gX3ByaW0gXCJ0cmltXCIgW2FdXG5sZXQgc3BsaXQgYSBiID0gX3ByaW0gXCJzcGxpdFwiIFthOyBiXVxubGV0IGpvaW4gYSBiID0gX3ByaW0gXCJqb2luXCIgW2E7IGJdXG5sZXQgcmVwbGFjZSBhIGIgYyA9IF9wcmltIFwicmVwbGFjZVwiIFthOyBiOyBjXVxubGV0IHN1YnN0cmluZyBhIGIgYyA9IF9wcmltIFwic3Vic3RyaW5nXCIgW2E7IGI7IGNdXG5cbigqIERpY3Qgb3BzICopXG5sZXQgYXNzb2MgZCBrIHYgPSBfcHJpbSBcImFzc29jXCIgW2Q7IGs7IHZdXG5sZXQgZGlzc29jIGQgayA9IF9wcmltIFwiZGlzc29jXCIgW2Q7IGtdXG5sZXQgbWVyZ2UnIGEgYiA9IF9wcmltIFwibWVyZ2VcIiBbYTsgYl1cbmxldCBrZXlzIGEgPSBfcHJpbSBcImtleXNcIiBbYV1cbmxldCB2YWxzIGEgPSBfcHJpbSBcInZhbHNcIiBbYV1cbmxldCBkaWN0X3NldCBhIGIgYyA9IF9wcmltIFwiZGljdC1zZXQhXCIgW2E7IGI7IGNdXG5sZXQgZGljdF9nZXQgYSBiID0gX3ByaW0gXCJkaWN0LWdldFwiIFthOyBiXVxubGV0IGRpY3RfZGVsZXRlIGEgYiA9IF9wcmltIFwiZGljdC1kZWxldGUhXCIgW2E7IGJdXG5cbigqIE1hdGggKilcbmxldCBhYnMnIGEgPSBfcHJpbSBcImFic1wiIFthXVxubGV0IHNxcnQnIGEgPSBfcHJpbSBcInNxcnRcIiBbYV1cbmxldCBwb3cnIGEgYiA9IF9wcmltIFwicG93XCIgW2E7IGJdXG5sZXQgZmxvb3InIGEgPSBfcHJpbSBcImZsb29yXCIgW2FdXG5sZXQgY2VpbCcgYSA9IF9wcmltIFwiY2VpbFwiIFthXVxubGV0IHJvdW5kJyBhID0gX3ByaW0gXCJyb3VuZFwiIFthXVxubGV0IG1pbicgYSBiID0gX3ByaW0gXCJtaW5cIiBbYTsgYl1cbmxldCBtYXgnIGEgYiA9IF9wcmltIFwibWF4XCIgW2E7IGJdXG5sZXQgY2xhbXAgYSBiIGMgPSBfcHJpbSBcImNsYW1wXCIgW2E7IGI7IGNdXG5cbigqIE1pc2MgKilcbmxldCBlcnJvciBtc2cgPSByYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIG1zZykpXG5cbigqIGluc3BlY3Qgd3JhcHBlciDigJQgcmV0dXJucyBTdHJpbmcgdmFsdWUgaW5zdGVhZCBvZiBPQ2FtbCBzdHJpbmcgKilcbmxldCBpbnNwZWN0IHYgPSBTdHJpbmcgKFN4X3R5cGVzLmluc3BlY3QgdilcbmxldCBhcHBseScgZiBhcmdzID0gc3hfYXBwbHkgZiBhcmdzXG5sZXQgc3ByZWFkX2F0dHJzIGEgPSBfcHJpbSBcInNwcmVhZC1hdHRyc1wiIFthXVxuXG5sZXQgc3hfY29udGV4dCBhIGIgPSBwcmltX2NhbGwgXCJjb250ZXh0XCIgW2E7IGJdXG5cbigqIFRyYW1wb2xpbmUg4oCUIGZvcndhcmQtZGVjbGFyZWQgaW4gc3hfcmVmLm1sLCBkZWxlZ2F0ZXMgdG8gQ0VLIGV2YWxfZXhwciAqKVxuKCogVGhpcyBpcyBhIHN0dWI7IHRoZSByZWFsIHRyYW1wb2xpbmUgaXMgd2lyZWQgdXAgaW4gc3hfcmVmLm1sIGFmdGVyIGV2YWxfZXhwciBpcyBkZWZpbmVkICopXG5sZXQgdHJhbXBvbGluZSB2ID0gdlxuXG4oKiBWYWx1ZS1yZXR1cm5pbmcgdHlwZSBwcmVkaWNhdGVzIOKAlCB0aGUgdHJhbnNwaWxlZCBjb2RlIHBhc3NlcyB0aGVzZSB0aHJvdWdoXG4gICBzeF90cnV0aHksIHNvIHRoZXkgbmVlZCB0byByZXR1cm4gQm9vbCwgbm90IE9DYW1sIGJvb2wuICopXG4oKiB0eXBlX29mIHJldHVybnMgdmFsdWUsIG5vdCBzdHJpbmcgKilcbmxldCB0eXBlX29mIHYgPSBTdHJpbmcgKFN4X3R5cGVzLnR5cGVfb2YgdilcblxuKCogRW52IG9wZXJhdGlvbnMg4oCUIGFjY2VwdCBFbnYtd3JhcHBlZCB2YWx1ZXMgYW5kIHZhbHVlIGtleXMuXG4gICBUaGUgdHJhbnNwaWxlZCBDRUsgbWFjaGluZSBzdG9yZXMgZW52cyBpbiBkaWN0cyBhcyBFbnYgdmFsdWVzLiAqKVxubGV0IHVud3JhcF9lbnYgPSBmdW5jdGlvblxuICB8IEVudiBlIC0+IGVcbiAgfCBEaWN0IGQgLT5cbiAgICAoKiBEaWN0IHVzZWQgYXMgZW52IOKAlCB3cmFwIGl0LiBOZWVkZWQgYnkgYWRhcHRlci1odG1sLnN4IHdoaWNoXG4gICAgICAgcGFzc2VzIGRpY3RzIGFzIGVudiBhcmdzIChlLmcuIGVtcHR5IHt9IGFzIGNhbGxlciBlbnYpLiAqKVxuICAgIGxldCBlID0gU3hfdHlwZXMubWFrZV9lbnYgKCkgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gaWdub3JlIChTeF90eXBlcy5lbnZfYmluZCBlIGsgdikpIGQ7XG4gICAgZVxuICB8IE5pbCAtPlxuICAgIFN4X3R5cGVzLm1ha2VfZW52ICgpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBlbnYsIGdvdCBcIiBeIFN4X3R5cGVzLnR5cGVfb2YgdikpXG5cbmxldCBlbnZfaGFzIGUgbmFtZSA9IEJvb2wgKFN4X3R5cGVzLmVudl9oYXMgKHVud3JhcF9lbnYgZSkgKHZhbHVlX3RvX3N0ciBuYW1lKSlcbmxldCBlbnZfZ2V0IGUgbmFtZSA9IFN4X3R5cGVzLmVudl9nZXQgKHVud3JhcF9lbnYgZSkgKHZhbHVlX3RvX3N0ciBuYW1lKVxubGV0IGVudl9iaW5kIGUgbmFtZSB2ID0gU3hfdHlwZXMuZW52X2JpbmQgKHVud3JhcF9lbnYgZSkgKHZhbHVlX3RvX3N0ciBuYW1lKSB2XG5sZXQgZW52X3NldCBlIG5hbWUgdiA9IFN4X3R5cGVzLmVudl9zZXQgKHVud3JhcF9lbnYgZSkgKHZhbHVlX3RvX3N0ciBuYW1lKSB2XG5cbmxldCBtYWtlX2VudiAoKSA9IEVudiAoU3hfdHlwZXMubWFrZV9lbnYgKCkpXG5sZXQgZW52X2V4dGVuZCBlID0gRW52IChTeF90eXBlcy5lbnZfZXh0ZW5kICh1bndyYXBfZW52IGUpKVxubGV0IGVudl9tZXJnZSBhIGIgPSBFbnYgKFN4X3R5cGVzLmVudl9tZXJnZSAodW53cmFwX2VudiBhKSAodW53cmFwX2VudiBiKSlcblxuKCogc2V0X2xhbWJkYV9uYW1lIHdyYXBwZXIg4oCUIGFjY2VwdHMgdmFsdWUsIGV4dHJhY3RzIHN0cmluZyAqKVxubGV0IHNldF9sYW1iZGFfbmFtZSBsIG4gPSBTeF90eXBlcy5zZXRfbGFtYmRhX25hbWUgbCAodmFsdWVfdG9fc3RyIG4pXG5cbmxldCBpc19uaWwgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX25pbCB2KVxubGV0IGlzX3RodW5rIHYgPSBCb29sIChTeF90eXBlcy5pc190aHVuayB2KVxubGV0IGlzX2xhbWJkYSB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfbGFtYmRhIHYpXG5sZXQgaXNfY29tcG9uZW50IHYgPSBCb29sIChTeF90eXBlcy5pc19jb21wb25lbnQgdilcbmxldCBpc19pc2xhbmQgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2lzbGFuZCB2KVxubGV0IGlzX21hY3JvIHYgPSBCb29sIChTeF90eXBlcy5pc19tYWNybyB2KVxubGV0IGlzX3NpZ25hbCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfc2lnbmFsIHYpXG5sZXQgaXNfY2FsbGFibGUgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2NhbGxhYmxlIHYpXG5sZXQgaXNfcHJpbWl0aXZlIG5hbWUgPSBCb29sIChTeF9wcmltaXRpdmVzLmlzX3ByaW1pdGl2ZSAodmFsdWVfdG9fc3RyIG5hbWUpKVxubGV0IGdldF9wcmltaXRpdmUgbmFtZSA9IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSAodmFsdWVfdG9fc3RyIG5hbWUpXG5cbigqIFN0dWJzIGZvciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBzeF9yZWYubWwg4oCUIHJlc29sdmVkIGF0IGxpbmsgdGltZSAqKVxuKCogVGhlc2UgYXJlIGZvcndhcmQtZGVjbGFyZWQgaGVyZTsgc3hfcmVmLm1sIGRlZmluZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMgKilcblxuKCogc3RyaXAtcHJlZml4ICopXG4oKiBTdHVicyBmb3IgZXZhbHVhdG9yIGZ1bmN0aW9ucyDigJQgZGVmaW5lZCBpbiBzeF9yZWYubWwgYnV0XG4gICBzb21ldGltZXMgcmVmZXJlbmNlZCBiZWZvcmUgdGhlaXIgZGVmaW5pdGlvbiB2aWEgZm9yd2FyZCBjYWxscy5cbiAgIFRoZXNlIGdldCBvdmVycmlkZGVuIGJ5IHRoZSBhY3R1YWwgdHJhbnNwaWxlZCBkZWZpbml0aW9ucy4gKilcblxubGV0IGZvcl9lYWNoX2luZGV4ZWQgZm4gY29sbCA9XG4gIExpc3QuaXRlcmkgKGZ1biBpIHggLT4gaWdub3JlIChzeF9jYWxsIGZuIFtOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgeF0pKSAoc3hfdG9fbGlzdCBjb2xsKTtcbiAgTmlsXG5cbigqIENvbnRpbnVhdGlvbiBzdXBwb3J0ICopXG5sZXQgY29udGludWF0aW9uX3AgdiA9IG1hdGNoIHYgd2l0aCBDb250aW51YXRpb24gKF8sIF8pIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxuXG5sZXQgbWFrZV9jZWtfY29udGludWF0aW9uIGNhcHR1cmVkIHJlc3Rfa29udCA9XG4gIGxldCBkYXRhID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICBIYXNodGJsLnJlcGxhY2UgZGF0YSBcImNhcHR1cmVkXCIgY2FwdHVyZWQ7XG4gIEhhc2h0YmwucmVwbGFjZSBkYXRhIFwicmVzdC1rb250XCIgcmVzdF9rb250O1xuICBDb250aW51YXRpb24gKChmdW4gdiAtPiB2KSwgU29tZSBkYXRhKVxuXG5sZXQgY29udGludWF0aW9uX2RhdGEgdiA9IG1hdGNoIHYgd2l0aFxuICB8IENvbnRpbnVhdGlvbiAoXywgU29tZSBkKSAtPiBEaWN0IGRcbiAgfCBDb250aW51YXRpb24gKF8sIE5vbmUpIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdCBhIGNvbnRpbnVhdGlvblwiKVxuXG4oKiBDYWxsY2MgKHVuZGVsaW1pdGVkKSBjb250aW51YXRpb24gc3VwcG9ydCAqKVxubGV0IGNhbGxjY19jb250aW51YXRpb25fcCB2ID0gbWF0Y2ggdiB3aXRoIENhbGxjY0NvbnRpbnVhdGlvbiAoXywgXykgLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlXG5cbmxldCBtYWtlX2NhbGxjY19jb250aW51YXRpb24gY2FwdHVyZWQgd2luZGVyc19sZW4gPVxuICBsZXQgbiA9IG1hdGNoIHdpbmRlcnNfbGVuIHdpdGggTnVtYmVyIGYgLT4gaW50X29mX2Zsb2F0IGYgfCBJbnRlZ2VyIG4gLT4gbiB8IF8gLT4gMCBpblxuICBDYWxsY2NDb250aW51YXRpb24gKHN4X3RvX2xpc3QgY2FwdHVyZWQsIG4pXG5cbmxldCBjYWxsY2NfY29udGludWF0aW9uX2RhdGEgdiA9IG1hdGNoIHYgd2l0aFxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiAoZnJhbWVzLCBfKSAtPiBMaXN0IGZyYW1lc1xuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBjYWxsY2MgY29udGludWF0aW9uXCIpXG5cbmxldCBjYWxsY2NfY29udGludWF0aW9uX3dpbmRlcnNfbGVuIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBDYWxsY2NDb250aW51YXRpb24gKF8sIG4pIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IG4pXG4gIHwgXyAtPiBOdW1iZXIgMC4wXG5cbigqIER5bmFtaWMgd2luZCDigJQgc2ltcGxpZmllZCBmb3IgT0NhbWwgKG5vIGFzeW5jKSAqKVxubGV0IGhvc3RfZXJyb3IgbXNnID1cbiAgcmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciBtc2cpKVxuXG5sZXQgaG9zdF93YXJuIG1zZyA9XG4gIHByZXJyX2VuZGxpbmUgKHZhbHVlX3RvX3N0ciBtc2cpO1xuICBOaWxcblxubGV0IGR5bmFtaWNfd2luZF9jYWxsIGJlZm9yZSBib2R5IGFmdGVyIF9lbnYgPVxuICBpZ25vcmUgKHN4X2NhbGwgYmVmb3JlIFtdKTtcbiAgbGV0IHJlc3VsdCA9IHN4X2NhbGwgYm9keSBbXSBpblxuICBpZ25vcmUgKHN4X2NhbGwgYWZ0ZXIgW10pO1xuICByZXN1bHRcblxuKCogU2NvcGUgc3RhY2sg4oCUIGFsbCBkZWxlZ2F0ZWQgdG8gcHJpbWl0aXZlcyByZWdpc3RlcmVkIGluIHN4X3NlcnZlci5tbCAqKVxubGV0IHNjb3BlX3B1c2ggbmFtZSB2YWx1ZSA9IHByaW1fY2FsbCBcInNjb3BlLXB1c2ghXCIgW25hbWU7IHZhbHVlXVxubGV0IHNjb3BlX3BvcCBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtcG9wIVwiIFtuYW1lXVxubGV0IHNjb3BlX3BlZWsgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLXBlZWtcIiBbbmFtZV1cbmxldCBzY29wZV9lbWl0IG5hbWUgdmFsdWUgPSBwcmltX2NhbGwgXCJzY29wZS1lbWl0IVwiIFtuYW1lOyB2YWx1ZV1cbmxldCBwcm92aWRlX3B1c2ggbmFtZSB2YWx1ZSA9IHByaW1fY2FsbCBcInNjb3BlLXB1c2ghXCIgW25hbWU7IHZhbHVlXVxubGV0IHByb3ZpZGVfcG9wIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1wb3AhXCIgW25hbWVdXG5cbigqIEN1c3RvbSBzcGVjaWFsIGZvcm1zIHJlZ2lzdHJ5IOKAlCBtdXRhYmxlIGRpY3QgKilcbmxldCBjdXN0b21fc3BlY2lhbF9mb3JtcyA9IERpY3QgKEhhc2h0YmwuY3JlYXRlIDQpXG5cbigqIHJlZ2lzdGVyLXNwZWNpYWwtZm9ybSEg4oCUIGFkZCBhIGhhbmRsZXIgdG8gdGhlIGN1c3RvbSByZWdpc3RyeSAqKVxubGV0IHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSBuYW1lIGhhbmRsZXIgPVxuICAobWF0Y2ggY3VzdG9tX3NwZWNpYWxfZm9ybXMgd2l0aFxuICAgfCBEaWN0IHRibCAtPiBIYXNodGJsLnJlcGxhY2UgdGJsICh2YWx1ZV90b19zdHIgbmFtZSkgaGFuZGxlcjsgaGFuZGxlclxuICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY3VzdG9tX3NwZWNpYWxfZm9ybXMgbm90IGEgZGljdFwiKSlcblxuKCogUmVuZGVyIGNoZWNrL2ZuIGhvb2tzIOKAlCBuaWwgYnkgZGVmYXVsdCwgc2V0IGJ5IHBsYXRmb3JtIGlmIG5lZWRlZCAqKVxubGV0IHJlbmRlcl9jaGVjayA9IE5pbFxubGV0IHJlbmRlcl9mbiA9IE5pbFxuXG4oKiBpcy1lbHNlLWNsYXVzZT8g4oCUIGNoZWNrIGlmIGEgY29uZC9jYXNlIHRlc3QgaXMgYW4gZWxzZSBtYXJrZXIgKilcbmxldCBpc19lbHNlX2NsYXVzZSB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgS2V5d29yZCBrIC0+IEJvb2wgKGsgPSBcImVsc2VcIiB8fCBrID0gXCJkZWZhdWx0XCIpXG4gIHwgU3ltYm9sIHMgLT4gQm9vbCAocyA9IFwiZWxzZVwiIHx8IHMgPSBcImRlZmF1bHRcIilcbiAgfCBCb29sIHRydWUgLT4gQm9vbCB0cnVlXG4gIHwgXyAtPiBCb29sIGZhbHNlXG5cbigqIFNpZ25hbCBhY2Nlc3NvcnMgKilcbmxldCBzaWduYWxfdmFsdWUgcyA9IG1hdGNoIHMgd2l0aFxuICB8IFNpZ25hbCBzaWcnIC0+IHNpZycuc192YWx1ZVxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidmFsdWVcIiB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdCBhIHNpZ25hbFwiKVxubGV0IHNpZ25hbF9hZGRfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSAhciBAIFtmXTsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0UmVmIChyZWYgKGl0ZW1zIEAgW2ZdKSkpOyBOaWxcbiAgICAgfCBfIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdFJlZiAocmVmIFtmXSkpOyBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IHNpZ25hbF9yZW1vdmVfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSAhcjsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSBpdGVtcykpOyBOaWxcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxuXG4oKiBJc2xhbmQgc2NvcGUgc3R1YnMg4oCUIGFjY2VwdCBib3RoIGJhcmUgT0NhbWwgZm5zIGFuZCBOYXRpdmVGbiB2YWx1ZXNcbiAgIGZyb20gdHJhbnNwaWxlZCBjb2RlIChOYXRpdmVGbiB3cmFwcGluZyBmb3IgdmFsdWUtc3RvcmFibGUgbGFtYmRhcykuICopXG5sZXQgd2l0aF9pc2xhbmRfc2NvcGUgX3JlZ2lzdGVyX2ZuIGJvZHlfZm4gPVxuICBtYXRjaCBib2R5X2ZuIHdpdGhcbiAgfCBOYXRpdmVGbiAoXywgZikgLT4gZiBbXVxuICB8IF8gLT4gTmlsXG5sZXQgcmVnaXN0ZXJfaW5fc2NvcGUgX2Rpc3Bvc2VfZm4gPSBOaWxcblxuKCogQ29tcG9uZW50IHR5cGUgYW5ub3RhdGlvbiBzdHViICopXG5sZXQgY29tcG9uZW50X3NldF9wYXJhbV90eXBlc19iIF9jb21wIF90eXBlcyA9IE5pbFxuXG4oKiBQYXJzZSBrZXl3b3JkIGFyZ3MgZnJvbSBhIGNhbGwg4oCUIHRoaXMgaXMgZGVmaW5lZCBpbiBldmFsdWF0b3Iuc3gsXG4gICB0aGUgdHJhbnNwaWxlZCB2ZXJzaW9uIHdpbGwgb3ZlcnJpZGUgdGhpcyBzdHViLiAqKVxuKCogRm9yd2FyZC1yZWZlcmVuY2Ugc3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMgdXNlZCBiZWZvcmUgZGVmaW5pdGlvbiAqKVxubGV0IHBhcnNlX2NvbXBfcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWw7IEJvb2wgZmFsc2VdXG5sZXQgcGFyc2VfbWFjcm9fcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWxdXG5cbmxldCBwYXJzZV9rZXl3b3JkX2FyZ3MgX3Jhd19hcmdzIF9lbnYgPVxuICAoKiBTdHViIOKAlCB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBpcyB0cmFuc3BpbGVkIGZyb20gZXZhbHVhdG9yLnN4ICopXG4gIExpc3QgW0RpY3QgKEhhc2h0YmwuY3JlYXRlIDApOyBMaXN0IFtdXVxuXG4oKiBNYWtlIGhhbmRsZXIgZGVmIOKAlCB1c2VkIGJ5IGN1c3RvbV9zcGVjaWFsX2Zvcm1zICopXG5sZXQgbWFrZV9oYW5kbGVyX2RlZiBuYW1lIHBhcmFtcyBib2R5IF9lbnYgPSBEaWN0IChsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJ0eXBlXCIgKFN0cmluZyBcImhhbmRsZXJcIik7IEhhc2h0YmwucmVwbGFjZSBkIFwibmFtZVwiIG5hbWU7IEhhc2h0YmwucmVwbGFjZSBkIFwicGFyYW1zXCIgcGFyYW1zOyBIYXNodGJsLnJlcGxhY2UgZCBcImJvZHlcIiBib2R5OyBkKVxubGV0IG1ha2VfcGFnZV9kZWYgbmFtZSBfb3B0cyA9IERpY3QgKGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpbiBIYXNodGJsLnJlcGxhY2UgZCBcInR5cGVcIiAoU3RyaW5nIFwicGFnZVwiKTsgSGFzaHRibC5yZXBsYWNlIGQgXCJuYW1lXCIgbmFtZTsgZClcblxuKCogc2ZfZGVmaGFuZGxlciDigJQgdXNlZCBieSBjdXN0b21fc3BlY2lhbF9mb3JtcyAqKVxubGV0IHNmX2RlZmhhbmRsZXIgYXJncyBlbnYgPVxuICBsZXQgbmFtZSA9IGZpcnN0IGFyZ3MgaW4gbGV0IHJlc3RfYXJncyA9IHJlc3QgYXJncyBpblxuICBtYWtlX2hhbmRsZXJfZGVmIG5hbWUgKGZpcnN0IHJlc3RfYXJncykgKG50aCByZXN0X2FyZ3MgKE51bWJlciAxLjApKSBlbnZcblxubGV0IHN0cmlwX3ByZWZpeCBzIHByZWZpeCA9XG4gIG1hdGNoIHMsIHByZWZpeCB3aXRoXG4gIHwgU3RyaW5nIHMsIFN0cmluZyBwIC0+XG4gICAgbGV0IHBsID0gU3RyaW5nLmxlbmd0aCBwIGluXG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzID49IHBsICYmIFN0cmluZy5zdWIgcyAwIHBsID0gcFxuICAgIHRoZW4gU3RyaW5nIChTdHJpbmcuc3ViIHMgcGwgKFN0cmluZy5sZW5ndGggcyAtIHBsKSlcbiAgICBlbHNlIFN0cmluZyBzXG4gIHwgXyAtPiBzXG5cbigqIGRlYnVnX2xvZyDigJQgbm8tb3AgaW4gcHJvZHVjdGlvbiwgdXNlZCBieSBDRUsgZXZhbHVhdG9yIGZvciBjb21wb25lbnQgd2FybmluZ3MgKilcbmxldCBkZWJ1Z19sb2cgXyBfID0gTmlsXG5cbigqIG11dGFibGVfbGlzdCDigJQgbXV0YWJsZSBsaXN0IGZvciBieXRlY29kZSBjb21waWxlciBwb29sIGVudHJpZXMgKilcbmxldCBtdXRhYmxlX2xpc3QgKCkgPSBMaXN0UmVmIChyZWYgW10pXG5cbigqIEpJVCB0cnktY2FsbCDigJQgcmVmIHNldCBieSBzeF9zZXJ2ZXIubWwgYWZ0ZXIgY29tcGlsZXIgbG9hZHMuXG4gICBSZXR1cm5zIE5pbCAobm8gSklUKSBvciB0aGUgcmVzdWx0IHZhbHVlLiBTcGVjIGNhbGxzIHRoaXMuICopXG5sZXQgX2ppdF90cnlfY2FsbF9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlIG9wdGlvbikgb3B0aW9uIHJlZiA9IHJlZiBOb25lXG5sZXQgX2ppdF9oaXQgPSByZWYgMFxubGV0IF9qaXRfbWlzcyA9IHJlZiAwXG5sZXQgX2ppdF9za2lwID0gcmVmIDBcbmxldCBqaXRfcmVzZXRfY291bnRlcnMgKCkgPSBfaml0X2hpdCA6PSAwOyBfaml0X21pc3MgOj0gMDsgX2ppdF9za2lwIDo9IDBcbigqIFNlbnRpbmVsIHZhbHVlIGZvciBcIkpJVCBza2lwcGVkIOKAlCBmYWxsIGJhY2sgdG8gQ0VLXCIuXG4gICBNdXN0IGJlIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFueSBsZWdpdGltYXRlIHJldHVybiB2YWx1ZSBpbmNsdWRpbmcgTmlsLlxuICAgV2UgdXNlIGEgdW5pcXVlIHRhZ2dlZCBkaWN0IHRoYXQgaXNfaml0X3NraXAgY2FuIGlkZW50aWZ5LiAqKVxubGV0IF9qaXRfc2tpcF9zZW50aW5lbCA9XG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMSBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcIl9faml0X3NraXBcIiAoQm9vbCB0cnVlKTtcbiAgRGljdCBkXG5cbmxldCBpc19qaXRfc2tpcCB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+IEhhc2h0YmwubWVtIGQgXCJfX2ppdF9za2lwXCJcbiAgfCBfIC0+IGZhbHNlXG5cbigqIFBsYXRmb3JtIGZ1bmN0aW9uIGZvciB0aGUgc3BlYzogKGppdC1za2lwPyB2KSDihpIgdHJhbnNwaWxlcyB0byBqaXRfc2tpcF9wICopXG5sZXQgaml0X3NraXBfcCB2ID0gQm9vbCAoaXNfaml0X3NraXAgdilcblxubGV0IGppdF90cnlfY2FsbCBmIGFyZ3MgPVxuICBtYXRjaCAhX2ppdF90cnlfY2FsbF9mbiB3aXRoXG4gIHwgTm9uZSAtPiBpbmNyIF9qaXRfc2tpcDsgX2ppdF9za2lwX3NlbnRpbmVsXG4gIHwgU29tZSBob29rIC0+XG4gICAgbWF0Y2ggZiB3aXRoXG4gICAgfCBMYW1iZGEgbCB3aGVuIGwubF9uYW1lIDw+IE5vbmUgLT5cbiAgICAgIGxldCBhcmdfbGlzdCA9IG1hdGNoIGFyZ3Mgd2l0aCBMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0gLT4gYSB8IF8gLT4gW10gaW5cbiAgICAgIChtYXRjaCBob29rIGYgYXJnX2xpc3Qgd2l0aCBTb21lIHJlc3VsdCAtPiBpbmNyIF9qaXRfaGl0OyByZXN1bHQgfCBOb25lIC0+IGluY3IgX2ppdF9taXNzOyBfaml0X3NraXBfc2VudGluZWwpXG4gICAgfCBfIC0+IGluY3IgX2ppdF9za2lwOyBfaml0X3NraXBfc2VudGluZWxcblxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfbXVsIiwiY2FtbF9zdHJpbmdfY29tcGFyZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX1N0cmluZyIsIlN4X3R5cGVzIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9BcnJheSIsImZhc3RfZXEiLCJhIiwiYiIsInkiLCJ4IiwiZCIsIm4iLCJsYSIsImFkIiwiYW4iLCJiZCIsImJuIiwibGIiLCJleG4iLCJjc3RfZW1wdHkiLCJjc3RfZmlyc3QiLCJjc3RfbGVuIiwiY3N0X3Jlc3QiLCJwcmltX2NhbGwiLCJuYW1lIiwiYXJncyIsInhzIiwicyIsImwiLCJyIiwibWF0Y2giLCJjc3QiLCJ2YWx1ZV90b19zdHIiLCJ2Iiwic3hfdG9fc3RyaW5nIiwic3hfc3RyIiwic3hfdG9fbGlzdCIsInN4X2NhbGwiLCJrIiwiZm4iLCJjbCIsIm5hcmdzIiwiYXJnc19wcmV2aWV3Iiwic3hfYXBwbHkiLCJhcmdzX2xpc3QiLCJjc3RfZXZhbF9lcnJvciIsInN4X2FwcGx5X2NlayIsImUiLCJtYXJrZXIiLCJtc2ciLCJpc19ldmFsX2Vycm9yIiwic3hfYXBwZW5kX2IiLCJsc3QiLCJpdGVtIiwiaXRlbXMiLCJjc3RfY3VycmVudF9pdGVtIiwiY3N0X2VmZmVjdF9saXN0IiwiY3N0X2VtaXR0ZWQiLCJjc3RfZXh0cmEiLCJjc3RfZXh0cmEyIiwiY3N0X2ZpcnN0X3JlbmRlciIsImNzdF9mcmFtZXMiLCJjc3RfaGFzX2VmZmVjdHMiLCJjc3RfaGVhZF9uYW1lIiwiY3N0X2hvX3R5cGUiLCJjc3RfaW5kZXhlZCIsImNzdF9pcCIsImNzdF9tYXRjaF92YWwiLCJjc3RfcGhhc2UiLCJjc3RfcmF3X2FyZ3MiLCJjc3RfcmVtYWluaW5nIiwiY3N0X3Jlc3VsdHMiLCJjc3Rfc2NoZW1lIiwiY3N0X3NwIiwiY3N0X3N0YWNrIiwiY3N0X3N1YnNjcmliZXJzIiwiY3N0X3VwZGF0ZV9mbiIsImNzdF92YWx1ZSIsInN4X2RpY3Rfc2V0X2IiLCJ0YmwiLCJrZXkiLCJzd2l0Y2gkIiwibSIsImNzdF9ib2R5IiwiY3N0X2Vsc2UiLCJjc3RfbmFtZSIsImNzdF90eXBlIiwiZ2V0X3ZhbCIsImNvbnRhaW5lciIsImNzdF9lbnYiLCJjIiwiYmMiLCJpIiwiY29uc3RzIiwidXYiLCJkZWZhdWx0JCIsInByaW0iLCJwYXJhbSIsImZpcnN0IiwicmVzdCIsImxhc3QiLCJudGgiLCJjb2xsIiwiY29ucyIsImFwcGVuZCIsInJldmVyc2UiLCJmbGF0dGVuIiwiY29uY2F0Iiwic2xpY2UiLCJsZW4iLCJnZXQiLCJzb3J0IiwicmFuZ2UiLCJ1bmlxdWUiLCJ6aXAiLCJ0YWtlIiwiZHJvcCIsImtleXdvcmRfcCIsImVtcHR5X3AiLCJudW1iZXJfcCIsInN0cmluZ19wIiwiYm9vbGVhbl9wIiwibGlzdF9wIiwiZGljdF9wIiwic3ltYm9sX3AiLCJzdHIiLCJ1cHBlciIsInVwY2FzZSIsImxvd2VyIiwiZG93bmNhc2UiLCJ0cmltIiwic3BsaXQiLCJqb2luIiwicmVwbGFjZSIsInN1YnN0cmluZyIsImFzc29jIiwiZGlzc29jIiwibWVyZ2UiLCJrZXlzIiwidmFscyIsImRpY3Rfc2V0IiwiZGljdF9nZXQiLCJkaWN0X2RlbGV0ZSIsImFicyIsInNxcnQiLCJwb3ciLCJmbG9vciIsImNlaWwiLCJyb3VuZCIsIm1pbiIsIm1heCIsImNsYW1wIiwiZXJyb3IiLCJpbnNwZWN0IiwiYXBwbHkiLCJzcHJlYWRfYXR0cnMiLCJzeF9jb250ZXh0IiwidHJhbXBvbGluZSIsInR5cGVfb2YiLCJ1bndyYXBfZW52IiwiZW52X2hhcyIsImVudl9nZXQiLCJlbnZfYmluZCIsImVudl9zZXQiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJlbnZfbWVyZ2UiLCJzZXRfbGFtYmRhX25hbWUiLCJpc19uaWwiLCJpc190aHVuayIsImlzX2xhbWJkYSIsImlzX2NvbXBvbmVudCIsImlzX2lzbGFuZCIsImlzX21hY3JvIiwiaXNfc2lnbmFsIiwiaXNfY2FsbGFibGUiLCJpc19wcmltaXRpdmUiLCJnZXRfcHJpbWl0aXZlIiwiZm9yX2VhY2hfaW5kZXhlZCIsImNvbnRpbnVhdGlvbl9wIiwibWFrZV9jZWtfY29udGludWF0aW9uIiwiY2FwdHVyZWQiLCJyZXN0X2tvbnQiLCJkYXRhIiwiY29udGludWF0aW9uX2RhdGEiLCJjYWxsY2NfY29udGludWF0aW9uX3AiLCJtYWtlX2NhbGxjY19jb250aW51YXRpb24iLCJ3aW5kZXJzX2xlbiIsImNhbGxjY19jb250aW51YXRpb25fZGF0YSIsImZyYW1lcyIsImNhbGxjY19jb250aW51YXRpb25fd2luZGVyc19sZSIsImhvc3RfZXJyb3IiLCJob3N0X3dhcm4iLCJkeW5hbWljX3dpbmRfY2FsbCIsImJlZm9yZSIsImJvZHkiLCJhZnRlciIsImVudiIsInJlc3VsdCIsImNzdF9zY29wZV9wdXNoIiwic2NvcGVfcHVzaCIsInZhbHVlIiwiY3N0X3Njb3BlX3BvcCIsInNjb3BlX3BvcCIsInNjb3BlX3BlZWsiLCJzY29wZV9lbWl0IiwicHJvdmlkZV9wdXNoIiwicHJvdmlkZV9wb3AiLCJjdXN0b21fc3BlY2lhbF9mb3JtcyIsInJlZ2lzdGVyX3NwZWNpYWxfZm9ybSIsImhhbmRsZXIiLCJpc19lbHNlX2NsYXVzZSIsImNzdF9kZWZhdWx0Iiwic2lnbmFsX3ZhbHVlIiwic2lnIiwic2lnbmFsX2FkZF9zdWJfYiIsInNpZ25hbF9yZW1vdmVfc3ViX2IiLCJ3aXRoX2lzbGFuZF9zY29wZSIsInJlZ2lzdGVyX2ZuIiwiYm9keV9mbiIsInJlZ2lzdGVyX2luX3Njb3BlIiwiZGlzcG9zZV9mbiIsImNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiIsImNvbXAiLCJ0eXBlcyIsInBhcnNlX2NvbXBfcGFyYW1zIiwicGFyYW1zIiwicGFyc2VfbWFjcm9fcGFyYW1zIiwicGFyc2Vfa2V5d29yZF9hcmdzIiwicmF3X2FyZ3MiLCJtYWtlX2hhbmRsZXJfZGVmIiwibWFrZV9wYWdlX2RlZiIsIm9wdHMiLCJzZl9kZWZoYW5kbGVyIiwicmVzdF9hcmdzIiwic3RyaXBfcHJlZml4IiwicHJlZml4IiwicCIsInBsIiwiZGVidWdfbG9nIiwibXV0YWJsZV9saXN0Iiwiaml0X2hpdCIsImppdF9taXNzIiwiaml0X3NraXAiLCJqaXRfcmVzZXRfY291bnRlcnMiLCJjc3Rfaml0X3NraXAiLCJpc19qaXRfc2tpcCIsImppdF9za2lwX3AiLCJqaXRfdHJ5X2NhbGxfZm4iLCJqaXRfc2tpcF9zZW50aW5lbCIsImppdF90cnlfY2FsbCIsImhvb2siLCJhcmdfbGlzdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQztBQUFBQSxJQ1lFLFlBQWU7QUFBQTtBQUFBO0FBQUEsS0FDViw0Q0FjUztBQUFBO0FBQUE7QUFBQSxLQWRUO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsSUFBQSxNQUFBQyxJQUFBO0FBQUEsUUFhZTtBQUFBO0FBQUEsWUFBQUEsTUFiZjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFELE1BQUEsTUFFcUI7QUFBQTtBQUFBLGVBQUFBLE1BRnJCLE1BSWtDO0FBQUE7QUFBQSxlQUFBRSxJQUpsQyxNQUFBQyxJQUFBLE1BVTJCO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUYsTUFWM0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBRCxNQUFBLE1BS3NDO0FBQUE7QUFBQSxlQUFBQSxNQUx0QyxNQUdtQjtBQUFBO0FBQUEs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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6bEI1QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjU3ODE4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9yZWYubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBzeF9yZWYubWwg4oCUIEF1dG8tZ2VuZXJhdGVkIGZyb20gU1ggc3BlYyBieSBob3N0cy9vY2FtbC9ib290c3RyYXAucHkgKilcbigqIERvIG5vdCBlZGl0IOKAlCByZWdlbmVyYXRlIHdpdGg6IHB5dGhvbjMgaG9zdHMvb2NhbWwvYm9vdHN0cmFwLnB5ICopXG5cbltAQEB3YXJuaW5nIFwiLTI2LTI3XCJdXG5cbm9wZW4gU3hfdHlwZXNcbm9wZW4gU3hfcnVudGltZVxuXG4oKiBUcmFtcG9saW5lIOKAlCBmb3J3YXJkIHJlZiwgcmVzb2x2ZWQgYWZ0ZXIgZXZhbF9leHByIGlzIGRlZmluZWQuICopXG5sZXQgdHJhbXBvbGluZV9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gdiAtPiB2KVxubGV0IHRyYW1wb2xpbmUgdiA9ICF0cmFtcG9saW5lX2ZuIHZcblxuKCogU3RlcCBsaW1pdCBmb3IgdGltZW91dCBkZXRlY3Rpb24g4oCUIHNldCB0byAwIHRvIGRpc2FibGUgKilcbmxldCBzdGVwX2xpbWl0IDogaW50IHJlZiA9IHJlZiAwXG5sZXQgc3RlcF9jb3VudCA6IGludCByZWYgPSByZWYgMFxuXG4oKiA9PT0gTXV0YWJsZSBnbG9iYWxzIOKAlCBiYWNraW5nIHJlZnMgZm9yIHRyYW5zcGlsZXIncyAhX3JlZiAvIF9yZWYgOj0gPT09ICopXG5sZXQgX3N0cmljdF9yZWYgPSByZWYgKEJvb2wgZmFsc2UpXG5sZXQgX3ByaW1fcGFyYW1fdHlwZXNfcmVmID0gcmVmIE5pbFxubGV0IF9sYXN0X2Vycm9yX2tvbnRfcmVmID0gcmVmIE5pbFxubGV0IF9wcm90b2NvbF9yZWdpc3RyeV8gPSBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKVxuXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSBldmFsdWF0b3IgKGZyYW1lcyArIGV2YWwgKyBDRUspID09PSAqKVxuXG4oKiBzZXEtdG8tbGlzdDogY29lcmNlIGxpc3QvdmVjdG9yL3N0cmluZy9uaWwgdG8gbGlzdCBmb3IgSE8gZGlzcGF0Y2ggKilcbmxldCBzZXFfdG9fbGlzdCB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgTmlsIC0+IExpc3QgW11cbiAgfCBMaXN0IF8gLT4gdlxuICB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdCBpdGVtc1xuICB8IFZlY3RvciBhcnIgLT4gTGlzdCAoQXJyYXkudG9fbGlzdCBhcnIpXG4gIHwgU3RyaW5nIHMgLT5cbiAgICBsZXQgY2hhcnMgPSByZWYgW10gaW5cbiAgICBTdHJpbmcuaXRlciAoZnVuIGMgLT4gY2hhcnMgOj0gU3RyaW5nIChTdHJpbmcubWFrZSAxIGMpIDo6ICFjaGFycykgcztcbiAgICBMaXN0IChMaXN0LnJldiAhY2hhcnMpXG4gIHwgXyAtPiB2XG5cbigqIG1ha2UtY2VrLXN0YXRlICopXG5sZXQgcmVjIG1ha2VfY2VrX3N0YXRlIGNvbnRyb2wgZW52IGtvbnQgPVxuICAoQ2VrU3RhdGUgeyBjc19jb250cm9sID0gY29udHJvbDsgY3NfZW52ID0gZW52OyBjc19rb250ID0ga29udDsgY3NfcGhhc2UgPSBcImV2YWxcIjsgY3NfdmFsdWUgPSBOaWwgfSlcblxuKCogbWFrZS1jZWstdmFsdWUgKilcbmFuZCBtYWtlX2Nla192YWx1ZSB2YWx1ZSBlbnYga29udCA9XG4gIChDZWtTdGF0ZSB7IGNzX2NvbnRyb2wgPSBOaWw7IGNzX2VudiA9IGVudjsgY3Nfa29udCA9IGtvbnQ7IGNzX3BoYXNlID0gXCJjb250aW51ZVwiOyBjc192YWx1ZSA9IHZhbHVlIH0pXG5cbigqIG1ha2UtY2VrLXN1c3BlbmRlZCAqKVxuYW5kIG1ha2VfY2VrX3N1c3BlbmRlZCByZXF1ZXN0IGVudiBrb250ID1cbiAgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiZW52XCIgZW52OyBIYXNodGJsLnJlcGxhY2UgX2QgXCJrb250XCIga29udDsgSGFzaHRibC5yZXBsYWNlIF9kIFwicGhhc2VcIiAoU3RyaW5nIFwiaW8tc3VzcGVuZGVkXCIpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJyZXF1ZXN0XCIgcmVxdWVzdDsgRGljdCBfZClcblxuKCogY2VrLXRlcm1pbmFsPyAqKVxuYW5kIGNla190ZXJtaW5hbF9wIHN0YXRlID1cbiAgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwicGhhc2VcIikpKTsgKFN0cmluZyBcImNvbnRpbnVlXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGVtcHR5X3AgKChnZXQgKHN0YXRlKSAoKFN0cmluZyBcImtvbnRcIikpKSkpKVxuXG4oKiBjZWstc3VzcGVuZGVkPyAqKVxuYW5kIGNla19zdXNwZW5kZWRfcCBzdGF0ZSA9XG4gIChwcmltX2NhbGwgXCI9XCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcInBoYXNlXCIpKSk7IChTdHJpbmcgXCJpby1zdXNwZW5kZWRcIildKVxuXG4oKiBjZWstY29udHJvbCAqKVxuYW5kIGNla19jb250cm9sIHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImNvbnRyb2xcIikpKVxuXG4oKiBjZWstZW52ICopXG5hbmQgY2VrX2VudiBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJlbnZcIikpKVxuXG4oKiBjZWsta29udCAqKVxuYW5kIGNla19rb250IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImtvbnRcIikpKVxuXG4oKiBjZWstcGhhc2UgKilcbmFuZCBjZWtfcGhhc2UgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwicGhhc2VcIikpKVxuXG4oKiBjZWstaW8tcmVxdWVzdCAqKVxuYW5kIGNla19pb19yZXF1ZXN0IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcInJlcXVlc3RcIikpKVxuXG4oKiBjZWstdmFsdWUgKilcbmFuZCBjZWtfdmFsdWUgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwidmFsdWVcIikpKVxuXG4oKiBtYWtlLWlmLWZyYW1lICopXG5hbmQgbWFrZV9pZl9mcmFtZSB0aGVuX2V4cHIgZWxzZV9leHByIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImlmXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IGVsc2VfZXhwcjsgY2ZfYm9keSA9IHRoZW5fZXhwcjsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utd2hlbi1mcmFtZSAqKVxuYW5kIG1ha2Vfd2hlbl9mcmFtZSBib2R5X2V4cHJzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIndoZW5cIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gYm9keV9leHByczsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtYmVnaW4tZnJhbWUgKilcbmFuZCBtYWtlX2JlZ2luX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJiZWdpblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWxldC1mcmFtZSAqKVxuYW5kIG1ha2VfbGV0X2ZyYW1lIG5hbWUgcmVtYWluaW5nIGJvZHkgbG9jYWwgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJsZXRcIjsgY2ZfZW52ID0gbG9jYWw7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gYm9keTsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGVmaW5lLWZyYW1lICopXG5hbmQgbWFrZV9kZWZpbmVfZnJhbWUgbmFtZSBlbnYgaGFzX2VmZmVjdHMgZWZmZWN0X2xpc3QgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZWZpbmVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IGhhc19lZmZlY3RzOyBjZl9leHRyYTIgPSBlZmZlY3RfbGlzdCB9KVxuXG4oKiBtYWtlLWRlZmluZS1mb3JlaWduLWZyYW1lICopXG5hbmQgbWFrZV9kZWZpbmVfZm9yZWlnbl9mcmFtZSBuYW1lIHNwZWMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZGVmaW5lLWZvcmVpZ25cIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utc2V0LWZyYW1lICopXG5hbmQgbWFrZV9zZXRfZnJhbWUgbmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtYXJnLWZyYW1lICopXG5hbmQgbWFrZV9hcmdfZnJhbWUgZiBldmFsZWQgcmVtYWluaW5nIGVudiByYXdfYXJncyBoZWFkX25hbWUgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhcmdcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gZXZhbGVkOyBjZl9yZXN1bHRzID0gcmF3X2FyZ3M7IGNmX2V4dHJhID0gKGxldCBfb3IgPSBoZWFkX25hbWUgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCk7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhbGwtZnJhbWUgKilcbmFuZCBtYWtlX2NhbGxfZnJhbWUgZiBhcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhbGxcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBmOyBjZl9hcmdzID0gYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbmQtZnJhbWUgKilcbmFuZCBtYWtlX2NvbmRfZnJhbWUgcmVtYWluaW5nIGVudiBzY2hlbWVfcCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gc2NoZW1lX3A7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbmQtYXJyb3ctZnJhbWUgKilcbmFuZCBtYWtlX2NvbmRfYXJyb3dfZnJhbWUgdGVzdF92YWx1ZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJjb25kLWFycm93XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IHRlc3RfdmFsdWU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhc2UtZnJhbWUgKilcbmFuZCBtYWtlX2Nhc2VfZnJhbWUgbWF0Y2hfdmFsIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJjYXNlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IG1hdGNoX3ZhbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtdGhyZWFkLWZyYW1lICopXG5hbmQgbWFrZV90aHJlYWRfZnJhbWUgcmVtYWluaW5nIGVudiBtb2RlIG5hbWUgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ0aHJlYWRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IG1vZGU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiB0aHJlYWQtaW5zZXJ0LWFyZyAqKVxuYW5kIHRocmVhZF9pbnNlcnRfYXJnIGZvcm0gdmFsdWUgZmVudiA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmb3JtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKGV2YWxfZXhwciAoKGNvbnMgKChmaXJzdCAoZm9ybSkpKSAoKGNvbnMgKChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IHZhbHVlXSkpICgocmVzdCAoZm9ybSkpKSkpKSkgKGZlbnYpKSBlbHNlIChldmFsX2V4cHIgKChMaXN0IFtmb3JtOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pXSkpIChmZW52KSkpXG5cbigqIHRocmVhZC1pbnNlcnQtYXJnLWxhc3QgKilcbmFuZCB0aHJlYWRfaW5zZXJ0X2FyZ19sYXN0IGZvcm0gdmFsdWUgZmVudiA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmb3JtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKGV2YWxfZXhwciAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtmb3JtOyAoTGlzdCBbKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgdmFsdWVdKV0pXSkpIChmZW52KSkgZWxzZSAoZXZhbF9leHByICgoTGlzdCBbZm9ybTsgKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgdmFsdWVdKV0pKSAoZmVudikpKVxuXG4oKiBtYWtlLW1hcC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2ZyYW1lIGYgcmVtYWluaW5nIHJlc3VsdHMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwibWFwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gKEJvb2wgZmFsc2UpOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1tYXAtaW5kZXhlZC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2luZGV4ZWRfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSAoQm9vbCB0cnVlKTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtbXVsdGktbWFwLWZyYW1lICopXG5hbmQgbWFrZV9tdWx0aV9tYXBfZnJhbWUgZiByZW1haW5pbmdfbGlzdHMgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtdWx0aS1tYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmdfbGlzdHM7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWZpbHRlci1mcmFtZSAqKVxuYW5kIG1ha2VfZmlsdGVyX2ZyYW1lIGYgcmVtYWluaW5nIHJlc3VsdHMgY3VycmVudF9pdGVtIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImZpbHRlclwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IGN1cnJlbnRfaXRlbTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtcmVkdWNlLWZyYW1lICopXG5hbmQgbWFrZV9yZWR1Y2VfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicmVkdWNlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWZvci1lYWNoLWZyYW1lICopXG5hbmQgbWFrZV9mb3JfZWFjaF9mcmFtZSBmIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJmb3ItZWFjaFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zb21lLWZyYW1lICopXG5hbmQgbWFrZV9zb21lX2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNvbWVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZXZlcnktZnJhbWUgKilcbmFuZCBtYWtlX2V2ZXJ5X2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImV2ZXJ5XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNjb3BlLWZyYW1lICopXG5hbmQgbWFrZV9zY29wZV9mcmFtZSBuYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzY29wZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1wcm92aWRlLWZyYW1lICopXG5hbmQgbWFrZV9wcm92aWRlX2ZyYW1lIG5hbWUgdmFsdWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInByb3ZpZGVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gKExpc3QgW10pOyBjZl9leHRyYSA9IHZhbHVlOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1iaW5kLWZyYW1lICopXG5hbmQgbWFrZV9iaW5kX2ZyYW1lIGJvZHkgZW52IHByZXZfdHJhY2tpbmcgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJiaW5kXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IGJvZHk7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBwcmV2X3RyYWNraW5nOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1wcm92aWRlLXNldC1mcmFtZSAqKVxuYW5kIG1ha2VfcHJvdmlkZV9zZXRfZnJhbWUgbmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJwcm92aWRlLXNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zY29wZS1hY2MtZnJhbWUgKilcbmFuZCBtYWtlX3Njb3BlX2FjY19mcmFtZSBuYW1lIHZhbHVlIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzY29wZS1hY2NcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IChsZXQgX29yID0gdmFsdWUgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCk7IGNmX2V4dHJhMiA9IChMaXN0IFtdKSB9KVxuXG4oKiBtYWtlLXJlc2V0LWZyYW1lICopXG5hbmQgbWFrZV9yZXNldF9mcmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZXNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWRpY3QtZnJhbWUgKilcbmFuZCBtYWtlX2RpY3RfZnJhbWUgcmVtYWluaW5nIHJlc3VsdHMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZGljdFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1hbmQtZnJhbWUgKilcbmFuZCBtYWtlX2FuZF9mcmFtZSByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiYW5kXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utb3ItZnJhbWUgKilcbmFuZCBtYWtlX29yX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJvclwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWR5bmFtaWMtd2luZC1mcmFtZSAqKVxuYW5kIG1ha2VfZHluYW1pY193aW5kX2ZyYW1lIHBoYXNlIGJvZHlfdGh1bmsgYWZ0ZXJfdGh1bmsgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZHluYW1pYy13aW5kXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gYWZ0ZXJfdGh1bms7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gcGhhc2U7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJlYWN0aXZlLXJlc2V0LWZyYW1lICopXG5hbmQgbWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSBlbnYgdXBkYXRlX2ZuIGZpcnN0X3JlbmRlcl9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicmVhY3RpdmUtcmVzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdXBkYXRlX2ZuOyBjZl9leHRyYTIgPSBmaXJzdF9yZW5kZXJfcCB9KVxuXG4oKiBtYWtlLWNhbGxjYy1mcmFtZSAqKVxuYW5kIG1ha2VfY2FsbGNjX2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhbGxjY1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXdpbmQtYWZ0ZXItZnJhbWUgKilcbmFuZCBtYWtlX3dpbmRfYWZ0ZXJfZnJhbWUgYWZ0ZXJfdGh1bmsgd2luZGVyc19sZW4gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2luZC1hZnRlclwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IGFmdGVyX3RodW5rOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IHdpbmRlcnNfbGVuOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS13aW5kLXJldHVybi1mcmFtZSAqKVxuYW5kIG1ha2Vfd2luZF9yZXR1cm5fZnJhbWUgYm9keV9yZXN1bHQgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2luZC1yZXR1cm5cIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gYm9keV9yZXN1bHQ7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWRlcmVmLWZyYW1lICopXG5hbmQgbWFrZV9kZXJlZl9mcmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZXJlZlwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWhvLXNldHVwLWZyYW1lICopXG5hbmQgbWFrZV9ob19zZXR1cF9mcmFtZSBob190eXBlIHJlbWFpbmluZ19hcmdzIGV2YWxlZF9hcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImhvLXNldHVwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nX2FyZ3M7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBldmFsZWRfYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBob190eXBlOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1jb21wLXRyYWNlLWZyYW1lICopXG5hbmQgbWFrZV9jb21wX3RyYWNlX2ZyYW1lIG5hbWUgZmlsZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbXAtdHJhY2VcIjsgY2ZfZW52ID0gZmlsZTsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBrb250LWNvbGxlY3QtY29tcC10cmFjZSAqKVxuYW5kIGtvbnRfY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAoY29ucyAoKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiZmlsZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpbGVcIikpKTsgSGFzaHRibC5yZXBsYWNlIF9kIFwibmFtZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgRGljdCBfZCkpICgoa29udF9jb2xsZWN0X2NvbXBfdHJhY2UgKChyZXN0IChrb250KSkpKSkpIGVsc2UgKGtvbnRfY29sbGVjdF9jb21wX3RyYWNlICgocmVzdCAoa29udCkpKSkpKSlcblxuKCogbWFrZS1oYW5kbGVyLWZyYW1lICopXG5hbmQgbWFrZV9oYW5kbGVyX2ZyYW1lIGhhbmRsZXJzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJoYW5kbGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gaGFuZGxlcnM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZXN0YXJ0LWZyYW1lICopXG5hbmQgbWFrZV9yZXN0YXJ0X2ZyYW1lIHJlc3RhcnRzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZXN0YXJ0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gcmVzdGFydHM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zaWduYWwtcmV0dXJuLWZyYW1lICopXG5hbmQgbWFrZV9zaWduYWxfcmV0dXJuX2ZyYW1lIGVudiBzYXZlZF9rb250ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic2lnbmFsLXJldHVyblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IHNhdmVkX2tvbnQ7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yYWlzZS1ldmFsLWZyYW1lICopXG5hbmQgbWFrZV9yYWlzZV9ldmFsX2ZyYW1lIGVudiBjb250aW51YWJsZV9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicmFpc2UtZXZhbFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBjb250aW51YWJsZV9wOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yYWlzZS1ndWFyZC1mcmFtZSAqKVxuYW5kIG1ha2VfcmFpc2VfZ3VhcmRfZnJhbWUgZW52IHNhdmVkX2tvbnQgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyYWlzZS1ndWFyZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHNhdmVkX2tvbnQ7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1wZXJmb3JtLWZyYW1lICopXG5hbmQgbWFrZV9wZXJmb3JtX2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInBlcmZvcm1cIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS12bS1yZXN1bWUtZnJhbWUgKilcbmFuZCBtYWtlX3ZtX3Jlc3VtZV9mcmFtZSByZXN1bWVfZm4gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwidm0tcmVzdW1lXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gcmVzdW1lX2ZuOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtaW1wb3J0LWZyYW1lICopXG5hbmQgbWFrZV9pbXBvcnRfZnJhbWUgaW1wb3J0X3NldCByZW1haW5pbmdfc2V0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJpbXBvcnRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmdfc2V0czsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IGltcG9ydF9zZXQ7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1wYXJhbWV0ZXJpemUtZnJhbWUgKilcbmFuZCBtYWtlX3BhcmFtZXRlcml6ZV9mcmFtZSByZW1haW5pbmcgY3VycmVudF9wYXJhbSByZXN1bHRzIGJvZHkgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicGFyYW1ldGVyaXplXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IGJvZHk7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGN1cnJlbnRfcGFyYW07IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIGZpbmQtbWF0Y2hpbmctaGFuZGxlciAqKVxuYW5kIGZpbmRfbWF0Y2hpbmdfaGFuZGxlciBoYW5kbGVycyBjb25kaXRpb24gPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaGFuZGxlcnMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IHBhaXIgPSAoZmlyc3QgKGhhbmRsZXJzKSkgaW4gKGxldCBwcmVkID0gKGZpcnN0IChwYWlyKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGNla19jYWxsIChwcmVkKSAoKExpc3QgW2NvbmRpdGlvbl0pKSkpIHRoZW4gaGFuZGxlcl9mbiBlbHNlIChmaW5kX21hdGNoaW5nX2hhbmRsZXIgKChyZXN0IChoYW5kbGVycykpKSAoY29uZGl0aW9uKSkpKSkpXG5cbigqIGtvbnQtZmluZC1oYW5kbGVyICopXG5hbmQga29udF9maW5kX2hhbmRsZXIga29udCBjb25kaXRpb24gPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcImhhbmRsZXJcIildKSkgdGhlbiAobGV0IG1hdGNoJyA9IChmaW5kX21hdGNoaW5nX2hhbmRsZXIgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSkgKGNvbmRpdGlvbikpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKG1hdGNoJykpKSB0aGVuIChrb250X2ZpbmRfaGFuZGxlciAoKHJlc3QgKGtvbnQpKSkgKGNvbmRpdGlvbikpIGVsc2UgbWF0Y2gnKSkgZWxzZSAoa29udF9maW5kX2hhbmRsZXIgKChyZXN0IChrb250KSkpIChjb25kaXRpb24pKSkpKVxuXG4oKiBrb250LXVud2luZC10by1oYW5kbGVyICopXG5hbmQga29udF91bndpbmRfdG9faGFuZGxlciBrb250IGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiaGFuZGxlclwiIE5pbDsgSGFzaHRibC5yZXBsYWNlIF9kIFwia29udFwiIGtvbnQ7IERpY3QgX2QpIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIGxldCByZXN0X2sgPSAocmVzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgbWF0Y2gnID0gKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfdW53aW5kX3RvX2hhbmRsZXIgKHJlc3RfaykgKGNvbmRpdGlvbikpIGVsc2UgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiaGFuZGxlclwiIG1hdGNoJzsgSGFzaHRibC5yZXBsYWNlIF9kIFwia29udFwiIGtvbnQ7IERpY3QgX2QpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcIndpbmQtYWZ0ZXJcIildKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuICghX3dpbmRlcnNfcmVmKSk7IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIndpbmRlcnMtbGVuXCIpKSldKSkgdGhlbiAoX3dpbmRlcnNfcmVmIDo9IChyZXN0ICghX3dpbmRlcnNfcmVmKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoY2VrX2NhbGwgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImFmdGVyLXRodW5rXCIpKSkpICgoTGlzdCBbXSkpKSkgaW4gKGtvbnRfdW53aW5kX3RvX2hhbmRsZXIgKHJlc3RfaykgKGNvbmRpdGlvbikpKSkgZWxzZSAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkpKSkpXG5cbigqIHdpbmQtZXNjYXBlLXRvICopXG5hbmQgd2luZF9lc2NhcGVfdG8gdGFyZ2V0X2xlbiA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKCFfd2luZGVyc19yZWYpKTsgdGFyZ2V0X2xlbl0pKSB0aGVuIChsZXQgYWZ0ZXJfdGh1bmsgPSAoZmlyc3QgKCFfd2luZGVyc19yZWYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoX3dpbmRlcnNfcmVmIDo9IChyZXN0ICghX3dpbmRlcnNfcmVmKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChjZWtfY2FsbCAoYWZ0ZXJfdGh1bmspICgoTGlzdCBbXSkpKSkgaW4gKHdpbmRfZXNjYXBlX3RvICh0YXJnZXRfbGVuKSkpKSkgZWxzZSBOaWwpXG5cbigqIGZpbmQtbmFtZWQtcmVzdGFydCAqKVxuYW5kIGZpbmRfbmFtZWRfcmVzdGFydCByZXN0YXJ0cyBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RhcnRzKSkpIHRoZW4gTmlsIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAocmVzdGFydHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKGVudHJ5KSk7IG5hbWVdKSkgdGhlbiBlbnRyeSBlbHNlIChmaW5kX25hbWVkX3Jlc3RhcnQgKChyZXN0IChyZXN0YXJ0cykpKSAobmFtZSkpKSkpXG5cbigqIGtvbnQtZmluZC1yZXN0YXJ0ICopXG5hbmQga29udF9maW5kX3Jlc3RhcnQga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZXN0YXJ0XCIpXSkpIHRoZW4gKGxldCBtYXRjaCcgPSAoZmluZF9uYW1lZF9yZXN0YXJ0ICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpIGVsc2UgKExpc3QgW21hdGNoJzsgZnJhbWU7IChyZXN0IChrb250KSldKSkpIGVsc2UgKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGZyYW1lLXR5cGUgKilcbmFuZCBmcmFtZV90eXBlIGYgPVxuICAoZ2V0IChmKSAoKFN0cmluZyBcInR5cGVcIikpKVxuXG4oKiBrb250LXB1c2ggKilcbmFuZCBrb250X3B1c2ggZnJhbWUga29udCA9XG4gIChjb25zIChmcmFtZSkgKGtvbnQpKVxuXG4oKiBrb250LXRvcCAqKVxuYW5kIGtvbnRfdG9wIGtvbnQgPVxuICAoZmlyc3QgKGtvbnQpKVxuXG4oKiBrb250LXBvcCAqKVxuYW5kIGtvbnRfcG9wIGtvbnQgPVxuICAocmVzdCAoa29udCkpXG5cbigqIGtvbnQtZW1wdHk/ICopXG5hbmQga29udF9lbXB0eV9wIGtvbnQgPVxuICAoZW1wdHlfcCAoa29udCkpXG5cbigqIGtvbnQtY2FwdHVyZS10by1yZXNldCAqKVxuYW5kIGtvbnRfY2FwdHVyZV90b19yZXNldCBrb250ID1cbiAgKGxldCByZWMgc2NhbiA9IChmdW4gayBjYXB0dXJlZCAtPiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJzaGlmdCB3aXRob3V0IGVuY2xvc2luZyByZXNldFwiKSkpKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGspKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicmVzZXRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSkgdGhlbiAoTGlzdCBbY2FwdHVyZWQ7IChyZXN0IChrKSldKSBlbHNlIChzY2FuICgocmVzdCAoaykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjYXB0dXJlZDsgKExpc3QgW2ZyYW1lXSldKSkpKSkpKSBpbiAoc2NhbiAoa29udCkgKChMaXN0IFtdKSkpKVxuXG4oKiBrb250LXB1c2gtcHJvdmlkZXMgKilcbmFuZCBrb250X3B1c2hfcHJvdmlkZXMgcGFpcnMgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGFpcnMpKSkgdGhlbiBrb250IGVsc2UgKGxldCBwYWlyID0gKGZpcnN0IChwYWlycykpIGluIChrb250X3B1c2hfcHJvdmlkZXMgKChyZXN0IChwYWlycykpKSAoZW52KSAoKGNvbnMgKChtYWtlX3Byb3ZpZGVfZnJhbWUgKChmaXJzdCAocGFpcikpKSAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkpXG5cbigqIGtvbnQtZmluZC1wcm92aWRlICopXG5hbmQga29udF9maW5kX3Byb3ZpZGUga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpOyBuYW1lXSkpKSB0aGVuIGZyYW1lIGVsc2UgKGtvbnRfZmluZF9wcm92aWRlICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGtvbnQtZmluZC1zY29wZS1hY2MgKilcbmFuZCBrb250X2ZpbmRfc2NvcGVfYWNjIGtvbnQgbmFtZSA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwic2NvcGUtYWNjXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpOyBuYW1lXSkpKSB0aGVuIGZyYW1lIGVsc2UgKGtvbnRfZmluZF9zY29wZV9hY2MgKChyZXN0IChrb250KSkpIChuYW1lKSkpKSlcblxuKCogaGFzLXJlYWN0aXZlLXJlc2V0LWZyYW1lPyAqKVxuYW5kIGhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlICgoZmlyc3QgKGtvbnQpKSkpOyAoU3RyaW5nIFwicmVhY3RpdmUtcmVzZXRcIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChoYXNfcmVhY3RpdmVfcmVzZXRfZnJhbWVfcCAoKHJlc3QgKGtvbnQpKSkpKSlcblxuKCoga29udC1jYXB0dXJlLXRvLXJlYWN0aXZlLXJlc2V0ICopXG5hbmQga29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IGtvbnQgPVxuICAobGV0IHJlYyBzY2FuID0gKGZ1biBrIGNhcHR1cmVkIC0+IChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInJlYWN0aXZlIGRlcmVmIHdpdGhvdXQgZW5jbG9zaW5nIHJlYWN0aXZlLXJlc2V0XCIpKSkpIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoaykpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicmVhY3RpdmUtcmVzZXRcIildKSkgdGhlbiAoTGlzdCBbY2FwdHVyZWQ7IGZyYW1lOyAocmVzdCAoaykpXSkgZWxzZSAoc2NhbiAoKHJlc3QgKGspKSkgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbY2FwdHVyZWQ7IChMaXN0IFtmcmFtZV0pXSkpKSkpKSkgaW4gKHNjYW4gKGtvbnQpICgoTGlzdCBbXSkpKSlcblxuKCogKmN1c3RvbS1zcGVjaWFsLWZvcm1zKiAqKVxuYW5kIGN1c3RvbV9zcGVjaWFsX2Zvcm1zID1cbiAgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuXG4oKiByZWdpc3Rlci1zcGVjaWFsLWZvcm0hICopXG5hbmQgcmVnaXN0ZXJfc3BlY2lhbF9mb3JtIG5hbWUgaGFuZGxlciA9XG4gIChzeF9kaWN0X3NldF9iIGN1c3RvbV9zcGVjaWFsX2Zvcm1zIG5hbWUgaGFuZGxlcilcblxuKCogKnJlbmRlci1jaGVjayogKilcbmFuZCByZW5kZXJfY2hlY2sgPVxuICBOaWxcblxuKCogKnJlbmRlci1mbiogKilcbmFuZCByZW5kZXJfZm4gPVxuICBOaWxcblxuKCogKmJpbmQtdHJhY2tpbmcqICopXG5hbmQgX2JpbmRfdHJhY2tpbmdfcmVmID0gcmVmIE5pbFxuYW5kIF9iaW5kX3RyYWNraW5nXyA9XG4gIE5pbFxuXG4oKiAqcHJvdmlkZS1iYXRjaC1kZXB0aCogKilcbmFuZCBfcHJvdmlkZV9iYXRjaF9kZXB0aF9yZWYgPSByZWYgKE51bWJlciAwLjApXG5hbmQgX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfID1cbiAgKE51bWJlciAwLjApXG5cbigqICpwcm92aWRlLWJhdGNoLXF1ZXVlKiAqKVxuYW5kIF9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiA9IHJlZiAoTGlzdCBbXSlcbmFuZCBfcHJvdmlkZV9iYXRjaF9xdWV1ZV8gPVxuICAoTGlzdCBbXSlcblxuKCogKnByb3ZpZGUtc3Vic2NyaWJlcnMqICopXG5hbmQgX3Byb3ZpZGVfc3Vic2NyaWJlcnNfcmVmID0gcmVmIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcbmFuZCBfcHJvdmlkZV9zdWJzY3JpYmVyc18gPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqICp3aW5kZXJzKiAqKVxuYW5kIF93aW5kZXJzX3JlZiA9IHJlZiAoTGlzdCBbXSlcbmFuZCBfd2luZGVyc18gPVxuICAoTGlzdCBbXSlcblxuKCogKmxpYnJhcnktcmVnaXN0cnkqICopXG5hbmQgX2xpYnJhcnlfcmVnaXN0cnlfID1cbiAgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuXG4oKiBsaWJyYXJ5LW5hbWUta2V5ICopXG5hbmQgbGlicmFyeV9uYW1lX2tleSBzcGVjID1cbiAgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIi5cIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChzKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChzKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW3NdKSkpKSAoc3hfdG9fbGlzdCBzcGVjKSkpXSlcblxuKCogbGlicmFyeS1sb2FkZWQ/ICopXG5hbmQgbGlicmFyeV9sb2FkZWRfcCBzcGVjID1cbiAgKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW19saWJyYXJ5X3JlZ2lzdHJ5XzsgKGxpYnJhcnlfbmFtZV9rZXkgKHNwZWMpKV0pXG5cbigqIGxpYnJhcnktZXhwb3J0cyAqKVxuYW5kIGxpYnJhcnlfZXhwb3J0cyBzcGVjID1cbiAgKGxldCBlbnRyeSA9IChnZXQgKF9saWJyYXJ5X3JlZ2lzdHJ5XykgKChsaWJyYXJ5X25hbWVfa2V5IChzcGVjKSkpKSBpbiAoaWYgc3hfdHJ1dGh5IChlbnRyeSkgdGhlbiAoZ2V0IChlbnRyeSkgKChTdHJpbmcgXCJleHBvcnRzXCIpKSkgZWxzZSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSlcblxuKCogcmVnaXN0ZXItbGlicmFyeSAqKVxuYW5kIHJlZ2lzdGVyX2xpYnJhcnkgc3BlYyBleHBvcnRzID1cbiAgKHN4X2RpY3Rfc2V0X2IgX2xpYnJhcnlfcmVnaXN0cnlfIChsaWJyYXJ5X25hbWVfa2V5IChzcGVjKSkgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDEgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiZXhwb3J0c1wiIGV4cG9ydHM7IERpY3QgX2QpKVxuXG4oKiAqaW8tcmVnaXN0cnkqICopXG5hbmQgX2lvX3JlZ2lzdHJ5XyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogaW8tcmVnaXN0ZXIhICopXG5hbmQgaW9fcmVnaXN0ZXJfYiBuYW1lIHNwZWMgPVxuICAoc3hfZGljdF9zZXRfYiBfaW9fcmVnaXN0cnlfIG5hbWUgc3BlYylcblxuKCogaW8tcmVnaXN0ZXJlZD8gKilcbmFuZCBpb19yZWdpc3RlcmVkX3AgbmFtZSA9XG4gIChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtfaW9fcmVnaXN0cnlfOyBuYW1lXSlcblxuKCogaW8tbG9va3VwICopXG5hbmQgaW9fbG9va3VwIG5hbWUgPVxuICAoZ2V0IChfaW9fcmVnaXN0cnlfKSAobmFtZSkpXG5cbigqIGlvLW5hbWVzICopXG5hbmQgaW9fbmFtZXMgKCkgPVxuICAocHJpbV9jYWxsIFwia2V5c1wiIFtfaW9fcmVnaXN0cnlfXSlcblxuKCogKmZvcmVpZ24tcmVnaXN0cnkqICopXG5hbmQgX2ZvcmVpZ25fcmVnaXN0cnlfID1cbiAgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuXG4oKiBmb3JlaWduLXJlZ2lzdGVyISAqKVxuYW5kIGZvcmVpZ25fcmVnaXN0ZXJfYiBuYW1lIHNwZWMgPVxuICAoc3hfZGljdF9zZXRfYiBfZm9yZWlnbl9yZWdpc3RyeV8gbmFtZSBzcGVjKVxuXG4oKiBmb3JlaWduLXJlZ2lzdGVyZWQ/ICopXG5hbmQgZm9yZWlnbl9yZWdpc3RlcmVkX3AgbmFtZSA9XG4gIChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtfZm9yZWlnbl9yZWdpc3RyeV87IG5hbWVdKVxuXG4oKiBmb3JlaWduLWxvb2t1cCAqKVxuYW5kIGZvcmVpZ25fbG9va3VwIG5hbWUgPVxuICAoZ2V0IChfZm9yZWlnbl9yZWdpc3RyeV8pIChuYW1lKSlcblxuKCogZm9yZWlnbi1uYW1lcyAqKVxuYW5kIGZvcmVpZ25fbmFtZXMgKCkgPVxuICAocHJpbV9jYWxsIFwia2V5c1wiIFtfZm9yZWlnbl9yZWdpc3RyeV9dKVxuXG4oKiBmb3JlaWduLXBhcnNlLXBhcmFtcyAqKVxuYW5kIGZvcmVpZ25fcGFyc2VfcGFyYW1zIHBhcmFtX2xpc3QgPVxuICAobGV0IHJlc3VsdCcgPSAoTGlzdCBbXSkgaW4gbGV0IGkgPSAoTnVtYmVyIDAuMCkgaW4gbGV0IGl0ZW1zID0gKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAocGFyYW1fbGlzdCkpKSB0aGVuIHBhcmFtX2xpc3QgZWxzZSAoTGlzdCBbXSkpIGluIChmb3JlaWduX3BhcnNlX3BhcmFtc19sb29wIChpdGVtcykgKHJlc3VsdCcpKSlcblxuKCogZm9yZWlnbi1wYXJzZS1rd2FyZ3MhICopXG5hbmQgZm9yZWlnbl9wYXJzZV9rd2FyZ3NfYiBzcGVjIHJlbWFpbmluZyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChrZXl3b3JkX3AgKChmaXJzdCAocmVtYWluaW5nKSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHNwZWMgKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZW1haW5pbmcpKSkpIChsZXQgdiA9IChudGggKHJlbWFpbmluZykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChrZXl3b3JkX3AgKHYpKSkgdGhlbiAoa2V5d29yZF9uYW1lICh2KSkgZWxzZSB2KSkpKSBpbiAoZm9yZWlnbl9wYXJzZV9rd2FyZ3NfYiAoc3BlYykgKChyZXN0ICgocmVzdCAocmVtYWluaW5nKSkpKSkpKSBlbHNlIE5pbClcblxuKCogZm9yZWlnbi1yZXNvbHZlLWJpbmRpbmcgKilcbmFuZCBmb3JlaWduX3Jlc29sdmVfYmluZGluZyBiaW5kaW5nX3N0ciA9XG4gIChsZXQgcGFydHMgPSAocHJpbV9jYWxsIFwic3BsaXRcIiBbYmluZGluZ19zdHI7IChTdHJpbmcgXCIuXCIpXSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjw9XCIgWyhsZW4gKHBhcnRzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcIm1ldGhvZFwiIGJpbmRpbmdfc3RyOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJvYmplY3RcIiBOaWw7IERpY3QgX2QpIGVsc2UgKGxldCBtZXRob2QnID0gKGxhc3QgKHBhcnRzKSkgaW4gbGV0IG9iaiA9IChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCIuXCIpOyAocmV2ZXJzZSAoKHJlc3QgKChyZXZlcnNlIChwYXJ0cykpKSkpKV0pIGluIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcIm1ldGhvZFwiIG1ldGhvZCc7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm9iamVjdFwiIG9iajsgRGljdCBfZCkpKSlcblxuKCogZm9yZWlnbi1jaGVjay1hcmdzICopXG5hbmQgZm9yZWlnbl9jaGVja19hcmdzIG5hbWUgcGFyYW1zIGFyZ3MgPVxuICAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChwYXJhbXMpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoYXJncykpOyAobGVuIChwYXJhbXMpKV0pKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJmb3JlaWduIFwiKTsgbmFtZTsgKFN0cmluZyBcIjogZXhwZWN0ZWQgXCIpOyAobGVuIChwYXJhbXMpKTsgKFN0cmluZyBcIiBhcmdzLCBnb3QgXCIpOyAobGVuIChhcmdzKSldKSkpKSkgZWxzZSBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gaSAtPiBpZ25vcmUgKChsZXQgc3BlYyA9IChudGggKHBhcmFtcykgKGkpKSBpbiBsZXQgdmFsJyA9IChudGggKGFyZ3MpIChpKSkgaW4gbGV0IGV4cGVjdGVkID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJ0eXBlXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZDsgKFN0cmluZyBcImFueVwiKV0pKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKCh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKGV4cGVjdGVkKSkpKSkpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJmb3JlaWduIFwiKTsgbmFtZTsgKFN0cmluZyBcIjogYXJnICdcIik7IChnZXQgKHNwZWMpICgoU3RyaW5nIFwibmFtZVwiKSkpOyAoU3RyaW5nIFwiJyBleHBlY3RlZCBcIik7IGV4cGVjdGVkOyAoU3RyaW5nIFwiLCBnb3QgXCIpOyAodHlwZV9vZiAodmFsJykpXSkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwibWluXCIgWyhsZW4gKHBhcmFtcykpOyAobGVuIChhcmdzKSldKV0pKTsgTmlsKSlcblxuKCogZm9yZWlnbi1idWlsZC1sYW1iZGEgKilcbmFuZCBmb3JlaWduX2J1aWxkX2xhbWJkYSBzcGVjID1cbiAgKGxldCBuYW1lID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gbGV0IG1vZGUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbc3BlYzsgKFN0cmluZyBcInJldHVybnNcIildKSkgdGhlbiAobGV0IHIgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInJldHVybnNcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtyOyAoU3RyaW5nIFwicHJvbWlzZVwiKV0pKSB0aGVuIChTdHJpbmcgXCJhc3luY1wiKSBlbHNlIChTdHJpbmcgXCJzeW5jXCIpKSkgZWxzZSAoU3RyaW5nIFwic3luY1wiKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbW9kZTsgKFN0cmluZyBcImFzeW5jXCIpXSkpIHRoZW4gKExpc3QgWyhTeW1ib2wgXCJmblwiKTsgKExpc3QgWyhTeW1ib2wgXCImcmVzdFwiKTsgKFN5bWJvbCBcIl9fZmZpLWFyZ3NfX1wiKV0pOyAoTGlzdCBbKFN5bWJvbCBcInBlcmZvcm1cIik7IChMaXN0IFsoU3ltYm9sIFwiZm9yZWlnbi1kaXNwYXRjaFwiKTsgKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgbmFtZV0pOyAoU3ltYm9sIFwiX19mZmktYXJnc19fXCIpXSldKV0pIGVsc2UgKExpc3QgWyhTeW1ib2wgXCJmblwiKTsgKExpc3QgWyhTeW1ib2wgXCImcmVzdFwiKTsgKFN5bWJvbCBcIl9fZmZpLWFyZ3NfX1wiKV0pOyAoTGlzdCBbKFN5bWJvbCBcImZvcmVpZ24tZGlzcGF0Y2hcIik7IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IG5hbWVdKTsgKFN5bWJvbCBcIl9fZmZpLWFyZ3NfX1wiKV0pXSkpKVxuXG4oKiBzZi1kZWZpbmUtZm9yZWlnbiAqKVxuYW5kIHNmX2RlZmluZV9mb3JlaWduIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgcGFyYW1fbGlzdCA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgc3BlYyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Igc3BlYyAoU3RyaW5nIFwibmFtZVwiKSBuYW1lKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Igc3BlYyAoU3RyaW5nIFwicGFyYW1zXCIpIChmb3JlaWduX3BhcnNlX3BhcmFtcyAocGFyYW1fbGlzdCkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGZvcmVpZ25fcGFyc2Vfa3dhcmdzX2IgKHNwZWMpICgocmVzdCAoKHJlc3QgKGFyZ3MpKSkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JlaWduX3JlZ2lzdGVyX2IgKG5hbWUpIChzcGVjKSkpIGluIHNwZWMpKSkpKVxuXG4oKiBzdGVwLXNmLWRlZmluZS1mb3JlaWduICopXG5hbmQgc3RlcF9zZl9kZWZpbmVfZm9yZWlnbiBhcmdzIGVudiBrb250ID1cbiAgKGxldCBzcGVjID0gKHNmX2RlZmluZV9mb3JlaWduIChhcmdzKSAoZW52KSkgaW4gbGV0IG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKChmaXJzdCAoYXJncykpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGVsc2UgKGZpcnN0IChhcmdzKSkpIGluIGxldCBsYW1iZGFfZXhwciA9IChmb3JlaWduX2J1aWxkX2xhbWJkYSAoc3BlYykpIGluIChtYWtlX2Nla19zdGF0ZSAobGFtYmRhX2V4cHIpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kZWZpbmVfZm9yZWlnbl9mcmFtZSAobmFtZSkgKHNwZWMpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBmb3JlaWduLWRpc3BhdGNoICopXG5hbmQgZm9yZWlnbl9kaXNwYXRjaCBuYW1lIGFyZ3MgPVxuICAobGV0IHNwZWMgPSAoZm9yZWlnbl9sb29rdXAgKG5hbWUpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzcGVjKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiZm9yZWlnbi1kaXNwYXRjaDogdW5rbm93biBmb3JlaWduIGZ1bmN0aW9uICdcIik7IG5hbWU7IChTdHJpbmcgXCInXCIpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCBwYXJhbXMgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInBhcmFtc1wiKSkpIGluIGxldCBiaW5kaW5nID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJqc1wiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JlaWduX2NoZWNrX2FyZ3MgKG5hbWUpICgoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChwYXJhbXMpKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSBwYXJhbXMpKSAoYXJncykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChiaW5kaW5nKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiZm9yZWlnbiBcIik7IG5hbWU7IChTdHJpbmcgXCI6IG5vIGJpbmRpbmcgZm9yIGN1cnJlbnQgcGxhdGZvcm1cIildKSkpKSkgZWxzZSAobGV0IHJlc29sdmVkID0gKGZvcmVpZ25fcmVzb2x2ZV9iaW5kaW5nIChiaW5kaW5nKSkgaW4gbGV0IG9ial9uYW1lID0gKGdldCAocmVzb2x2ZWQpICgoU3RyaW5nIFwib2JqZWN0XCIpKSkgaW4gbGV0IG1ldGhvZCcgPSAoZ2V0IChyZXNvbHZlZCkgKChTdHJpbmcgXCJtZXRob2RcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfcHJpbWl0aXZlICgoU3RyaW5nIFwiaG9zdC1jYWxsXCIpKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAob2JqX25hbWUpKSkgdGhlbiAoc3hfYXBwbHkgKGdldF9wcmltaXRpdmUgKChTdHJpbmcgXCJob3N0LWNhbGxcIikpKSAocHJpbV9jYWxsIFwiY29uY2F0XCIgWyhMaXN0IFtOaWw7IG1ldGhvZCddKTsgYXJnc10pKSBlbHNlIChsZXQgb2JqID0gKGNla19jYWxsICgoZ2V0X3ByaW1pdGl2ZSAoKFN0cmluZyBcImhvc3QtZ2xvYmFsXCIpKSkpIChMaXN0IFtvYmpfbmFtZV0pKSBpbiAoc3hfYXBwbHkgKGdldF9wcmltaXRpdmUgKChTdHJpbmcgXCJob3N0LWNhbGxcIikpKSAocHJpbV9jYWxsIFwiY29uY2F0XCIgWyhMaXN0IFtvYmo7IG1ldGhvZCddKTsgYXJnc10pKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiZm9yZWlnbiBcIik7IG5hbWU7IChTdHJpbmcgXCI6IGhvc3QtY2FsbCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm1cIildKSkpKSkpKSkpKSkpXG5cbigqIGZvcmVpZ24tcGFyc2UtcGFyYW1zLWxvb3AgKilcbmFuZCBmb3JlaWduX3BhcnNlX3BhcmFtc19sb29wIGl0ZW1zIGFjYyA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChpdGVtcykpKSB0aGVuIGFjYyBlbHNlIChsZXQgaXRlbSA9IChmaXJzdCAoaXRlbXMpKSBpbiBsZXQgcmVzdF9pdGVtcyA9IChyZXN0IChpdGVtcykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfaXRlbXMpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGtleXdvcmRfcCAoKGZpcnN0IChyZXN0X2l0ZW1zKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlc3RfaXRlbXMpKSkpOyAoU3RyaW5nIFwiYXNcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9pdGVtcykpOyAoTnVtYmVyIDIuMCldKSkpKSkgdGhlbiAoZm9yZWlnbl9wYXJzZV9wYXJhbXNfbG9vcCAoKHJlc3QgKChyZXN0IChyZXN0X2l0ZW1zKSkpKSkgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbYWNjOyAoTGlzdCBbKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwidHlwZVwiIChsZXQgdCA9IChudGggKHJlc3RfaXRlbXMpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoa2V5d29yZF9wICh0KSkpIHRoZW4gKGtleXdvcmRfbmFtZSAodCkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFt0XSkpKSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm5hbWVcIiAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKGl0ZW0pKSkgdGhlbiAoc3ltYm9sX25hbWUgKGl0ZW0pKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbaXRlbV0pKSk7IERpY3QgX2QpXSldKSkpIGVsc2UgKGZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AgKHJlc3RfaXRlbXMpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2FjYzsgKExpc3QgWyhDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImFueVwiOyBjZl9lbnYgPSBOaWw7IGNmX25hbWUgPSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKGl0ZW0pKSkgdGhlbiAoc3ltYm9sX25hbWUgKGl0ZW0pKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbaXRlbV0pKSk7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KV0pXSkpKSkpKVxuXG4oKiBzdGVwLXNmLWlvICopXG5hbmQgc3RlcF9zZl9pbyBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGlvX2FyZ3MgPSAocmVzdCAoYXJncykpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlvX3JlZ2lzdGVyZWRfcCAobmFtZSkpKSkpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJpbzogdW5rbm93biBvcGVyYXRpb24gJ1wiKTsgbmFtZTsgKFN0cmluZyBcIicg4oCUIG5vdCBpbiAqaW8tcmVnaXN0cnkqXCIpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoY29ucyAoKFN5bWJvbCBcInBlcmZvcm1cIikpICgoTGlzdCBbKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiYXJnc1wiIGlvX2FyZ3M7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm9wXCIgbmFtZTsgRGljdCBfZCldKSkpKSAoZW52KSAoa29udCkpKSlcblxuKCogKnN0cmljdCogKilcbmFuZCBfc3RyaWN0X3JlZiA9IHJlZiAoQm9vbCBmYWxzZSlcbmFuZCBfc3RyaWN0XyA9XG4gIChCb29sIGZhbHNlKVxuXG4oKiBzZXQtc3RyaWN0ISAqKVxuYW5kIHNldF9zdHJpY3RfYiB2YWwnID1cbiAgKF9zdHJpY3RfcmVmIDo9IHZhbCc7IE5pbClcblxuKCogKnByaW0tcGFyYW0tdHlwZXMqICopXG5hbmQgX3ByaW1fcGFyYW1fdHlwZXNfcmVmID0gcmVmIE5pbFxuYW5kIF9wcmltX3BhcmFtX3R5cGVzXyA9XG4gIE5pbFxuXG4oKiBzZXQtcHJpbS1wYXJhbS10eXBlcyEgKilcbmFuZCBzZXRfcHJpbV9wYXJhbV90eXBlc19iIHR5cGVzID1cbiAgKF9wcmltX3BhcmFtX3R5cGVzX3JlZiA6PSB0eXBlczsgTmlsKVxuXG4oKiB2YWx1ZS1tYXRjaGVzLXR5cGU/ICopXG5hbmQgdmFsdWVfbWF0Y2hlc190eXBlX3AgdmFsJyBleHBlY3RlZF90eXBlID1cbiAgKGxldCBfbWF0Y2hfdmFsID0gZXhwZWN0ZWRfdHlwZSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYW55XCIpXSkpIHRoZW4gKEJvb2wgdHJ1ZSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibnVtYmVyXCIpXSkpIHRoZW4gKG51bWJlcl9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic3RyaW5nXCIpXSkpIHRoZW4gKHN0cmluZ19wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYm9vbGVhblwiKV0pKSB0aGVuIChib29sZWFuX3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJuaWxcIildKSkgdGhlbiAoaXNfbmlsICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGlzdFwiKV0pKSB0aGVuIChsaXN0X3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkaWN0XCIpXSkpIHRoZW4gKGRpY3RfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxhbWJkYVwiKV0pKSB0aGVuIChpc19sYW1iZGEgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3RyaW5nX3AgKGV4cGVjdGVkX3R5cGUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiZW5kcy13aXRoP1wiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwiP1wiKV0pKSkgdGhlbiAobGV0IF9vciA9IChpc19uaWwgKHZhbCcpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2V4cGVjdGVkX3R5cGU7IChOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi1cIiBbKHByaW1fY2FsbCBcInN0cmluZy1sZW5ndGhcIiBbZXhwZWN0ZWRfdHlwZV0pOyAoTnVtYmVyIDEuMCldKV0pKSkpIGVsc2UgKEJvb2wgdHJ1ZSkpKSkpKSkpKSkpKSlcblxuKCogc3RyaWN0LWNoZWNrLWFyZ3MgKilcbmFuZCBzdHJpY3RfY2hlY2tfYXJncyBuYW1lIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgIV9wcmltX3BhcmFtX3R5cGVzX3JlZikpIHRoZW4gKGxldCBzcGVjID0gKGdldCAoIV9wcmltX3BhcmFtX3R5cGVzX3JlZikgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5IChzcGVjKSB0aGVuIChsZXQgcG9zaXRpb25hbCA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicG9zaXRpb25hbFwiKSkpIGluIGxldCByZXN0X3R5cGUgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInJlc3QtdHlwZVwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKHBvc2l0aW9uYWwpIHRoZW4gKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IGlkeCA9IChmaXJzdCAocGFpcikpIGluIGxldCBwYXJhbSA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcF9uYW1lID0gKGZpcnN0IChwYXJhbSkpIGluIGxldCBwX3R5cGUgPSAobnRoIChwYXJhbSkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgW2lkeDsgKGxlbiAoYXJncykpXSkpIHRoZW4gKGxldCB2YWwnID0gKG50aCAoYXJncykgKGlkeCkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAocF90eXBlKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlR5cGUgZXJyb3I6IFwiKTsgbmFtZTsgKFN0cmluZyBcIiBleHBlY3RlZCBcIik7IHBfdHlwZTsgKFN0cmluZyBcIiBmb3IgcGFyYW0gXCIpOyBwX25hbWU7IChTdHJpbmcgXCIsIGdvdCBcIik7ICh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCIgKFwiKTsgKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpOyAoU3RyaW5nIFwiKVwiKV0pKSkpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSBwIC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHBdKSkgKHN4X3RvX2xpc3QgcG9zaXRpb25hbCkpKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSByZXN0X3R5cGUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuICgobGV0IF9vciA9IHBvc2l0aW9uYWwgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChMaXN0IFtdKSkpKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgaWR4ID0gKGZpcnN0IChwYWlyKSkgaW4gbGV0IHZhbCcgPSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpIChyZXN0X3R5cGUpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVHlwZSBlcnJvcjogXCIpOyBuYW1lOyAoU3RyaW5nIFwiIGV4cGVjdGVkIFwiKTsgcmVzdF90eXBlOyAoU3RyaW5nIFwiIGZvciByZXN0IGFyZyBcIik7IGlkeDsgKFN0cmluZyBcIiwgZ290IFwiKTsgKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcIiAoXCIpOyAoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSk7IChTdHJpbmcgXCIpXCIpXSkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB2IC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHZdKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChsZW4gKChsZXQgX29yID0gcG9zaXRpb25hbCBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKExpc3QgW10pKSkpXSkpKSkpOyBOaWwpIGVsc2UgTmlsKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpXG5cbigqIGJpbmQtbGFtYmRhLXBhcmFtcyAqKVxuYW5kIGJpbmRfbGFtYmRhX3BhcmFtcyBwYXJhbXMgYXJncyBsb2NhbCA9XG4gIChsZXQgcmVzdF9pZHggPSAocHJpbV9jYWxsIFwiaW5kZXgtb2ZcIiBbcGFyYW1zOyAoU3RyaW5nIFwiJnJlc3RcIildKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobnVtYmVyX3AgKHJlc3RfaWR4KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbcmVzdF9pZHg7IChsZW4gKHBhcmFtcykpXSkpKSB0aGVuIChsZXQgcG9zaXRpb25hbCA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtwYXJhbXM7IChOdW1iZXIgMC4wKTsgcmVzdF9pZHhdKSBpbiBsZXQgcmVzdF9uYW1lID0gKG50aCAocGFyYW1zKSAoKHByaW1fY2FsbCBcIitcIiBbcmVzdF9pZHg7IChOdW1iZXIgMS4wKV0pKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGZvcl9lYWNoX2luZGV4ZWQgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtpOyBwXSAtPiAoZnVuIGkgcCAtPiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFtpOyAobGVuIChhcmdzKSldKSkgdGhlbiAobnRoIChhcmdzKSAoaSkpIGVsc2UgTmlsKSkpIGkgcCB8IF8gLT4gTmlsKSkpIChwb3NpdGlvbmFsKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHJlc3RfbmFtZSkgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyByZXN0X2lkeF0pKSB0aGVuIChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyByZXN0X2lkeF0pIGVsc2UgKExpc3QgW10pKSkpIGluIChCb29sIHRydWUpKSkpIGVsc2UgKEJvb2wgZmFsc2UpKSlcblxuKCogY2FsbC1sYW1iZGEgKilcbmFuZCBjYWxsX2xhbWJkYSBmIGFyZ3MgY2FsbGVyX2VudiA9XG4gIChsZXQgcGFyYW1zID0gKGxhbWJkYV9wYXJhbXMgKGYpKSBpbiBsZXQgbG9jYWwgPSAoZW52X21lcmdlICgobGFtYmRhX2Nsb3N1cmUgKGYpKSkgKGNhbGxlcl9lbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChiaW5kX2xhbWJkYV9wYXJhbXMgKHBhcmFtcykgKGFyZ3MpIChsb2NhbCkpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsobGV0IF9vciA9IChsYW1iZGFfbmFtZSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoU3RyaW5nIFwibGFtYmRhXCIpKTsgKFN0cmluZyBcIiBleHBlY3RzIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbcGFyYW1zOyBhcmdzXSkpOyBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAobGVuIChhcmdzKSldKSk7IE5pbCkpKSBlbHNlIE5pbCkpIGluIChtYWtlX3RodW5rICgobGFtYmRhX2JvZHkgKGYpKSkgKGxvY2FsKSkpKVxuXG4oKiBjYWxsLWNvbXBvbmVudCAqKVxuYW5kIGNhbGxfY29tcG9uZW50IGNvbXAgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBwYXJzZWQgPSAocGFyc2Vfa2V5d29yZF9hcmdzIChyYXdfYXJncykgKGVudikpIGluIGxldCBrd2FyZ3MgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoY29tcCkpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobGV0IF9vciA9IChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChjb21wKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoY29tcCkpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgY2hpbGRyZW4pIGVsc2UgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChjb21wb25lbnRfYm9keSAoY29tcCkpKSAobG9jYWwpKSkpKVxuXG4oKiBwYXJzZS1rZXl3b3JkLWFyZ3MgKilcbmFuZCBwYXJzZV9rZXl3b3JkX2FyZ3MgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBrd2FyZ3MgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBjaGlsZHJlbiA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgaSA9IChOdW1iZXIgMC4wKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBhcmcgLT4gKGxldCBpZHggPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSkgaW4gbGV0IHNraXAgPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJza2lwXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2tpcCkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCBmYWxzZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYXJnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKTsgKGxlbiAocmF3X2FyZ3MpKV0pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBrd2FyZ3MgKGtleXdvcmRfbmFtZSAoYXJnKSkgKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJhd19hcmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKSkpKSAoZW52KSkpKSkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIHRydWUpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKV0pKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChjaGlsZHJlbiA6PSBzeF9hcHBlbmRfYiAhY2hpbGRyZW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGFyZykgKGVudikpKSk7IE5pbCkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSldKSkpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpXCIpKSAoTnVtYmVyIDAuMCk7IEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJza2lwXCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCByYXdfYXJncykpKSBpbiAoTGlzdCBba3dhcmdzOyAhY2hpbGRyZW5dKSkpXG5cbigqIGNvbmQtc2NoZW1lPyAqKVxuYW5kIGNvbmRfc2NoZW1lX3AgY2xhdXNlcyA9XG4gIChCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGMpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGMpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGMpKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGMpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgobnRoIChjKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcIj0+XCIpXSkpKSkpKSkgKHN4X3RvX2xpc3QgY2xhdXNlcykpKVxuXG4oKiBpcy1lbHNlLWNsYXVzZT8gKilcbmFuZCBpc19lbHNlX2NsYXVzZSB0ZXN0ID1cbiAgKGxldCBfb3IgPSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVzdCkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKHRlc3QpKTsgKFN0cmluZyBcImVsc2VcIildKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh0ZXN0KSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAodGVzdCkpOyAoU3RyaW5nIFwiZWxzZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHRlc3QpKTsgKFN0cmluZyBcIjplbHNlXCIpXSkpKSlcblxuKCogc2YtbmFtZWQtbGV0ICopXG5hbmQgc2ZfbmFtZWRfbGV0IGFyZ3MgZW52ID1cbiAgKGxldCBsb29wX25hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkgaW4gbGV0IGJpbmRpbmdzID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMi4wKV0pIGluIGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IGluaXRzID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBiaW5kaW5nIC0+IGlnbm9yZSAoKGxldCAoKSA9IGlnbm9yZSAoKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmcpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGJpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChiaW5kaW5nKSkpOyBOaWwpKSBpbiAoaW5pdHMgOj0gc3hfYXBwZW5kX2IgIWluaXRzIChudGggKGJpbmRpbmcpICgoTnVtYmVyIDEuMCkpKTsgTmlsKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIHBhaXJfaWR4IC0+IChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSkgZWxzZSAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKTsgTmlsKSkgaW4gKGluaXRzIDo9IHN4X2FwcGVuZF9iICFpbml0cyAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pXSkpKTsgTmlsKSkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpKSBpbiAobGV0IGxvb3BfYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHkpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGZpcnN0IChib2R5KSkgZWxzZSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiYmVnaW5cIikpKSkgKGJvZHkpKSkgaW4gbGV0IGxvb3BfZm4gPSAobWFrZV9sYW1iZGEgKCFwYXJhbXMpIChsb29wX2JvZHkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2V0X2xhbWJkYV9uYW1lIGxvb3BfZm4gKHN4X3RvX3N0cmluZyBsb29wX25hbWUpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIChsYW1iZGFfY2xvc3VyZSAobG9vcF9mbikpIChzeF90b19zdHJpbmcgbG9vcF9uYW1lKSBsb29wX2ZuKSkgaW4gKGxldCBpbml0X3ZhbHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAoZW52KSkpKSkgKHN4X3RvX2xpc3QgIWluaXRzKSkpIGluIChjZWtfY2FsbCAobG9vcF9mbikgKGluaXRfdmFscykpKSkpKSkpXG5cbigqIHNmLWxhbWJkYSAqKVxuYW5kIHNmX2xhbWJkYSBhcmdzIGVudiA9XG4gIChsZXQgcGFyYW1zX2V4cHIgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgYm9keV9leHBycyA9IChyZXN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5X2V4cHJzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keV9leHBycykpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5X2V4cHJzKSkpIGluIGxldCBwYXJhbV9uYW1lcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHAgLT4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwKSk7IChOdW1iZXIgMy4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChwKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChwKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImFzXCIpXSkpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHApKSkpIGVsc2UgcCkpKSAoc3hfdG9fbGlzdCBwYXJhbXNfZXhwcikpKSBpbiAobWFrZV9sYW1iZGEgKHBhcmFtX25hbWVzKSAoYm9keSkgKGVudikpKVxuXG4oKiBzZi1kZWZjb21wICopXG5hbmQgc2ZfZGVmY29tcCBhcmdzIGVudiA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcGFyYW1zX3JhdyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChsYXN0IChhcmdzKSkgaW4gbGV0IGNvbXBfbmFtZSA9IChzdHJpcF9wcmVmaXggKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgKChTdHJpbmcgXCJ+XCIpKSkgaW4gbGV0IHBhcnNlZCA9IChwYXJzZV9jb21wX3BhcmFtcyAocGFyYW1zX3JhdykpIGluIGxldCBwYXJhbXMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBoYXNfY2hpbGRyZW4gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcGFyYW1fdHlwZXMgPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgYWZmaW5pdHkgPSAoZGVmY29tcF9rd2FyZyAoYXJncykgKChTdHJpbmcgXCJhZmZpbml0eVwiKSkgKChTdHJpbmcgXCJhdXRvXCIpKSkgaW4gKGxldCBjb21wID0gKG1ha2VfY29tcG9uZW50IChjb21wX25hbWUpIChwYXJhbXMpIChoYXNfY2hpbGRyZW4pIChib2R5KSAoZW52KSAoYWZmaW5pdHkpKSBpbiBsZXQgZWZmZWN0cyA9IChkZWZjb21wX2t3YXJnIChhcmdzKSAoKFN0cmluZyBcImVmZmVjdHNcIikpIChOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKHBhcmFtX3R5cGVzKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKChwcmltX2NhbGwgXCJrZXlzXCIgW3BhcmFtX3R5cGVzXSkpKSkpKSkpKSB0aGVuIChjb21wb25lbnRfc2V0X3BhcmFtX3R5cGVzX2IgKGNvbXApIChwYXJhbV90eXBlcykpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsIChlZmZlY3RzKSkpKSkpKSB0aGVuIChsZXQgZWZmZWN0X2xpc3QgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZWZmZWN0cykpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSB0aGVuIChMaXN0IChMaXN0Lm1hcCAoZnVuIGUgLT4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGUpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoZSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtlXSkpKSkgKHN4X3RvX2xpc3QgZWZmZWN0cykpKSBlbHNlIChMaXN0IFsoU3RyaW5nIChzeF9zdHIgW2VmZmVjdHNdKSldKSkgaW4gbGV0IGVmZmVjdF9hbm5zID0gKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpKSB0aGVuIChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpKSBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGVmZmVjdF9hbm5zIChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSBlZmZlY3RfbGlzdCkpIGluIChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpIGVmZmVjdF9hbm5zKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSB0aGVuIChjb21wb25lbnRfc2V0X2ZpbGVfYiAoY29tcCkgKChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwiKmN1cnJlbnQtZmlsZSpcIikpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgY29tcCkpIGluIGNvbXApKSkpKSlcblxuKCogZGVmY29tcC1rd2FyZyAqKVxuYW5kIGRlZmNvbXBfa3dhcmcgYXJncyBrZXkgZGVmYXVsdCA9XG4gIChsZXQgZW5kJyA9IChwcmltX2NhbGwgXCItXCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkgaW4gbGV0IHJlc3VsdCcgPSByZWYgKGRlZmF1bHQpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBpIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGFyZ3MpIChpKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChhcmdzKSAoaSkpKSk7IGtleV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgWyhwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMS4wKV0pOyBlbmQnXSkpKSkgdGhlbiAobGV0IHZhbCcgPSAobnRoIChhcmdzKSAoKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSkpKSBpbiAocmVzdWx0JyA6PSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pKSB0aGVuIChrZXl3b3JkX25hbWUgKHZhbCcpKSBlbHNlIHZhbCcpOyBOaWwpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAyLjApOyBlbmQnOyAoTnVtYmVyIDEuMCldKSk7IE5pbCkpIGluICFyZXN1bHQnKSlcblxuKCogcGFyc2UtY29tcC1wYXJhbXMgKilcbmFuZCBwYXJzZV9jb21wX3BhcmFtcyBwYXJhbXNfZXhwciA9XG4gIChsZXQgcGFyYW1zID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBwYXJhbV90eXBlcyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gbGV0IGhhc19jaGlsZHJlbiA9IHJlZiAoKEJvb2wgZmFsc2UpKSBpbiBsZXQgaW5fa2V5ID0gcmVmICgoQm9vbCBmYWxzZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwKSk7IChOdW1iZXIgMy4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHApKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiYXNcIildKSkpKSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHApKSkpIGluIGxldCBwdHlwZSA9IChudGggKHApICgoTnVtYmVyIDIuMCkpKSBpbiAobGV0IHR5cGVfdmFsID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHB0eXBlKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHB0eXBlKSkgZWxzZSBwdHlwZSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICghaGFzX2NoaWxkcmVuKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgbmFtZTsgTmlsKSkgaW4gKHN4X2RpY3Rfc2V0X2IgcGFyYW1fdHlwZXMgbmFtZSB0eXBlX3ZhbCkpIGVsc2UgTmlsKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChzeW1ib2xfbmFtZSAocCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCIma2V5XCIpXSkpIHRoZW4gKGluX2tleSA6PSAoQm9vbCB0cnVlKTsgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCImcmVzdFwiKV0pKSB0aGVuIChoYXNfY2hpbGRyZW4gOj0gKEJvb2wgdHJ1ZSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiJmNoaWxkcmVuXCIpXSkpIHRoZW4gKGhhc19jaGlsZHJlbiA6PSAoQm9vbCB0cnVlKTsgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKCFoYXNfY2hpbGRyZW4pIHRoZW4gTmlsIGVsc2UgKGlmIHN4X3RydXRoeSAoIWluX2tleSkgdGhlbiAocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgbmFtZTsgTmlsKSBlbHNlIChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpKSkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCBwYXJhbXNfZXhwcik7IE5pbCkpIGluIChMaXN0IFshcGFyYW1zOyAhaGFzX2NoaWxkcmVuOyBwYXJhbV90eXBlc10pKSlcblxuKCogc2YtZGVmaXNsYW5kICopXG5hbmQgc2ZfZGVmaXNsYW5kIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwYXJhbXNfcmF3ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5X2V4cHJzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMi4wKV0pIGluIGxldCBib2R5ID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keV9leHBycykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAoZmlyc3QgKGJvZHlfZXhwcnMpKSBlbHNlIChjb25zICgobWFrZV9zeW1ib2wgKChTdHJpbmcgXCJiZWdpblwiKSkpKSAoYm9keV9leHBycykpKSBpbiBsZXQgY29tcF9uYW1lID0gKHN0cmlwX3ByZWZpeCAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoKFN0cmluZyBcIn5cIikpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX2NvbXBfcGFyYW1zIChwYXJhbXNfcmF3KSkgaW4gbGV0IHBhcmFtcyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGhhc19jaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIChsZXQgaXNsYW5kID0gKG1ha2VfaXNsYW5kIChjb21wX25hbWUpIChwYXJhbXMpIChoYXNfY2hpbGRyZW4pIChib2R5KSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSB0aGVuIChjb21wb25lbnRfc2V0X2ZpbGVfYiAoaXNsYW5kKSAoKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBpc2xhbmQpKSBpbiBpc2xhbmQpKSkpXG5cbigqIGRlZmlvLXBhcnNlLWt3YXJncyEgKilcbmFuZCBkZWZpb19wYXJzZV9rd2FyZ3NfYiBzcGVjIHJlbWFpbmluZyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChrZXl3b3JkX3AgKChmaXJzdCAocmVtYWluaW5nKSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHNwZWMgKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZW1haW5pbmcpKSkpIChudGggKHJlbWFpbmluZykgKChOdW1iZXIgMS4wKSkpKSkgaW4gKGRlZmlvX3BhcnNlX2t3YXJnc19iIChzcGVjKSAoKHJlc3QgKChyZXN0IChyZW1haW5pbmcpKSkpKSkpIGVsc2UgTmlsKVxuXG4oKiBzZi1kZWZpbyAqKVxuYW5kIHNmX2RlZmlvIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHNwZWMgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHNwZWMgKFN0cmluZyBcIm5hbWVcIikgbmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChkZWZpb19wYXJzZV9rd2FyZ3NfYiAoc3BlYykgKChyZXN0IChhcmdzKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlvX3JlZ2lzdGVyX2IgKG5hbWUpIChzcGVjKSkpIGluIHNwZWMpKSkpXG5cbigqIHNmLWRlZm1hY3JvICopXG5hbmQgc2ZfZGVmbWFjcm8gYXJncyBlbnYgPVxuICAobGV0IG5hbWVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHBhcmFtc19yYXcgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHkgPSAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHBhcnNlZCA9IChwYXJzZV9tYWNyb19wYXJhbXMgKHBhcmFtc19yYXcpKSBpbiBsZXQgcGFyYW1zID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgcmVzdF9wYXJhbSA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIChsZXQgbWFjID0gKG1ha2VfbWFjcm8gKHBhcmFtcykgKHJlc3RfcGFyYW0pIChib2R5KSAoZW52KSAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgbWFjKSkgaW4gbWFjKSkpXG5cbigqIHBhcnNlLW1hY3JvLXBhcmFtcyAqKVxuYW5kIHBhcnNlX21hY3JvX3BhcmFtcyBwYXJhbXNfZXhwciA9XG4gIChsZXQgcGFyYW1zID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCByZXN0X3BhcmFtID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0LmZvbGRfbGVmdCAoZnVuIHN0YXRlIHAgLT4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAocCkpOyAoU3RyaW5nIFwiJnJlc3RcIildKSkpIHRoZW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwiaW4tcmVzdFwiKTsgKEJvb2wgdHJ1ZSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChnZXQgKHN0YXRlKSAoKFN0cmluZyBcImluLXJlc3RcIikpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgocmVzdF9wYXJhbSA6PSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwKSkgZWxzZSBwKTsgTmlsKSkgaW4gc3RhdGUpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHApKSBlbHNlIHApOyBOaWwpKSBpbiBzdGF0ZSkpKSkgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDEgaW4gSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcImluLXJlc3RcIikpIChCb29sIGZhbHNlKTsgIERpY3QgX2QpIChzeF90b19saXN0IHBhcmFtc19leHByKSkpIGluIChMaXN0IFshcGFyYW1zOyAhcmVzdF9wYXJhbV0pKSlcblxuKCogcXEtZXhwYW5kICopXG5hbmQgcXFfZXhwYW5kIHRlbXBsYXRlIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHRlbXBsYXRlKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpKSkpKSB0aGVuIHRlbXBsYXRlIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHRlbXBsYXRlKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgKGxldCBoZWFkID0gKGZpcnN0ICh0ZW1wbGF0ZSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKGhlYWQpKTsgKFN0cmluZyBcInVucXVvdGVcIildKSkpIHRoZW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHRlbXBsYXRlKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgKExpc3QuZm9sZF9sZWZ0IChmdW4gcmVzdWx0JyBpdGVtIC0+IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChpdGVtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoaXRlbSkpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChpdGVtKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKGZpcnN0IChpdGVtKSkpKTsgKFN0cmluZyBcInNwbGljZS11bnF1b3RlXCIpXSkpKSkpIHRoZW4gKGxldCBzcGxpY2VkID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGl0ZW0pICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHNwbGljZWQpKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiY29uY2F0XCIgW3Jlc3VsdCc7IHNwbGljZWRdKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHNwbGljZWQpKSkgdGhlbiByZXN1bHQnIGVsc2UgKHByaW1fY2FsbCBcImNvbmNhdFwiIFtyZXN1bHQnOyAoTGlzdCBbc3BsaWNlZF0pXSkpKSkgZWxzZSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW3Jlc3VsdCc7IChMaXN0IFsocXFfZXhwYW5kIChpdGVtKSAoZW52KSldKV0pKSkgKExpc3QgW10pIChzeF90b19saXN0IHRlbXBsYXRlKSkpKSkpXG5cbigqIHNmLWxldHJlYyAqKVxuYW5kIHNmX2xldHJlYyBhcmdzIGVudiA9XG4gIChsZXQgYmluZGluZ3MgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgYm9keSA9IChyZXN0IChhcmdzKSkgaW4gbGV0IGxvY2FsID0gKGVudl9leHRlbmQgKGVudikpIGluIGxldCBuYW1lcyA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgdmFsX2V4cHJzID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBiaW5kaW5nIC0+IGlnbm9yZSAoKGxldCB2bmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmcpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGJpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChiaW5kaW5nKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChuYW1lcyA6PSBzeF9hcHBlbmRfYiAhbmFtZXMgdm5hbWU7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2YWxfZXhwcnMgOj0gc3hfYXBwZW5kX2IgIXZhbF9leHBycyAobnRoIChiaW5kaW5nKSAoKE51bWJlciAxLjApKSk7IE5pbCkpIGluIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHZuYW1lKSBOaWwpKSkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpIGVsc2UgKExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBwYWlyX2lkeCAtPiAobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpIGVsc2UgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkgaW4gbGV0IHZhbF9leHByID0gKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKV0pKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKG5hbWVzIDo9IHN4X2FwcGVuZF9iICFuYW1lcyB2bmFtZTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZhbF9leHBycyA6PSBzeF9hcHBlbmRfYiAhdmFsX2V4cHJzIHZhbF9leHByOyBOaWwpKSBpbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyB2bmFtZSkgTmlsKSkpKSkgTmlsIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCIvXCIgWyhsZW4gKGJpbmRpbmdzKSk7IChOdW1iZXIgMi4wKV0pXSkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChsZXQgdmFsdWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGxvY2FsKSkpKSkgKHN4X3RvX2xpc3QgIXZhbF9leHBycykpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChmaXJzdCAocGFpcikpKSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFshbmFtZXM7IHZhbHVlc10pKTsgTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIHZhbCcgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhICh2YWwnKSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIG4gLT4gaWdub3JlICgoZW52X2JpbmQgKGxhbWJkYV9jbG9zdXJlICh2YWwnKSkgKHN4X3RvX3N0cmluZyBuKSAoZW52X2dldCAobG9jYWwpIChuKSkpKSkgKHN4X3RvX2xpc3QgIW5hbWVzKTsgTmlsKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCB2YWx1ZXMpOyBOaWwpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBlIC0+IGlnbm9yZSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChsb2NhbCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbYm9keTsgKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiZGVjXCIgWyhsZW4gKGJvZHkpKV0pXSkpOyBOaWwpKSBpbiAobWFrZV90aHVuayAoKGxhc3QgKGJvZHkpKSkgKGxvY2FsKSkpKSkpXG5cbigqIHN0ZXAtc2YtbGV0cmVjICopXG5hbmQgc3RlcF9zZl9sZXRyZWMgYXJncyBlbnYga29udCA9XG4gIChsZXQgdGhrID0gKHNmX2xldHJlYyAoYXJncykgKGVudikpIGluIChtYWtlX2Nla19zdGF0ZSAoKHRodW5rX2V4cHIgKHRoaykpKSAoKHRodW5rX2VudiAodGhrKSkpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtZHluYW1pYy13aW5kICopXG5hbmQgc3RlcF9zZl9keW5hbWljX3dpbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgYmVmb3JlID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgYm9keSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBhZnRlciA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChjZWtfY2FsbCAoYmVmb3JlKSAoKExpc3QgW10pKSkpIGluIChsZXQgd2luZGVyc19sZW4gPSAobGVuICghX3dpbmRlcnNfcmVmKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKF93aW5kZXJzX3JlZiA6PSAoY29ucyAoYWZ0ZXIpICghX3dpbmRlcnNfcmVmKSk7IE5pbCkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGJvZHkpICgoTGlzdCBbXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV93aW5kX2FmdGVyX2ZyYW1lIChhZnRlcikgKHdpbmRlcnNfbGVuKSAoZW52KSkpIChrb250KSkpKSkpKSlcblxuKCogc2Ytc2NvcGUgKilcbmFuZCBzZl9zY29wZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3QgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAxLjApXSkgaW4gbGV0IHZhbCcgPSByZWYgKE5pbCkgaW4gbGV0IGJvZHlfZXhwcnMgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc3QpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocmVzdCkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0KSkpKTsgKFN0cmluZyBcInZhbHVlXCIpXSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgodmFsJyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocmVzdCkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKTsgTmlsKSkgaW4gKGJvZHlfZXhwcnMgOj0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3Q7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5X2V4cHJzIDo9IHJlc3Q7IE5pbCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKCF2YWwnKSkpIGluIChsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKChyZXN1bHQnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAoZW52KSkpKTsgTmlsKSkpIChzeF90b19saXN0ICFib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSkpKVxuXG4oKiBzZi1wcm92aWRlICopXG5hbmQgc2ZfcHJvdmlkZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keV9leHBycyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKHZhbCcpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgocmVzdWx0JyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSk7IE5pbCkpKSAoc3hfdG9fbGlzdCBib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSlcblxuKCogZXhwYW5kLW1hY3JvICopXG5hbmQgZXhwYW5kX21hY3JvIG1hYyByYXdfYXJncyBlbnYgPVxuICAobGV0IGJvZHkgPSAobWFjcm9fYm9keSAobWFjKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wIChib2R5KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChib2R5KSk7IChTdHJpbmcgXCJfX3N5bnRheC1ydWxlcy1ib2R5X19cIildKSkpIHRoZW4gKGxldCBjbG9zdXJlID0gKG1hY3JvX2Nsb3N1cmUgKG1hYykpIGluIChzeW50YXhfcnVsZXNfZXhwYW5kICgoZW52X2dldCAoY2xvc3VyZSkgKChTdHJpbmcgXCJfX3NyLWxpdGVyYWxzXCIpKSkpICgoZW52X2dldCAoY2xvc3VyZSkgKChTdHJpbmcgXCJfX3NyLXJ1bGVzXCIpKSkpIChyYXdfYXJncykpKSBlbHNlIChsZXQgbG9jYWwgPSAoZW52X21lcmdlICgobWFjcm9fY2xvc3VyZSAobWFjKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChmaXJzdCAocGFpcikpKSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSk7IChsZW4gKHJhd19hcmdzKSldKSkgdGhlbiAobnRoIChyYXdfYXJncykgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSBwIC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW3A7IGldKSkgKHN4X3RvX2xpc3QgKG1hY3JvX3BhcmFtcyAobWFjKSkpKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobWFjcm9fcmVzdF9wYXJhbSAobWFjKSkpIHRoZW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKG1hY3JvX3Jlc3RfcGFyYW0gKG1hYykpKSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmF3X2FyZ3M7IChsZW4gKChtYWNyb19wYXJhbXMgKG1hYykpKSldKSkgZWxzZSBOaWwpKSBpbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG1hY3JvX2JvZHkgKG1hYykpKSAobG9jYWwpKSkpKSkpKSlcblxuKCogY2VrLXN0ZXAtbG9vcCAqKVxuYW5kIGNla19zdGVwX2xvb3Agc3RhdGUgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChjZWtfdGVybWluYWxfcCAoc3RhdGUpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGNla19zdXNwZW5kZWRfcCAoc3RhdGUpKSkpIHRoZW4gc3RhdGUgZWxzZSAoY2VrX3N0ZXBfbG9vcCAoKGNla19zdGVwIChzdGF0ZSkpKSkpXG5cbigqIGNlay1ydW4gKilcbmFuZCBjZWtfcnVuIHN0YXRlID1cbiAgKGxldCBmaW5hbCA9IChjZWtfc3RlcF9sb29wIChzdGF0ZSkpIGluIChpZiBzeF90cnV0aHkgKChjZWtfc3VzcGVuZGVkX3AgKGZpbmFsKSkpIHRoZW4gKG1hdGNoICFfY2VrX2lvX3N1c3BlbmRfaG9vayB3aXRoIFNvbWUgaG9vayAtPiBob29rIGZpbmFsIHwgTm9uZSAtPiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiSU8gc3VzcGVuc2lvbiBpbiBub24tSU8gY29udGV4dFwiKSkpKSkgZWxzZSAoY2VrX3ZhbHVlIChmaW5hbCkpKSlcblxuKCogY2VrLXJlc3VtZSAqKVxuYW5kIGNla19yZXN1bWUgc3VzcGVuZGVkX3N0YXRlIHJlc3VsdCcgPVxuICAoY2VrX3N0ZXBfbG9vcCAoKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoKGNla19lbnYgKHN1c3BlbmRlZF9zdGF0ZSkpKSAoKGNla19rb250IChzdXNwZW5kZWRfc3RhdGUpKSkpKSlcblxuKCogY2VrLXN0ZXAgKilcbmFuZCBjZWtfc3RlcCBzdGF0ZSA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhjZWtfcGhhc2UgKHN0YXRlKSk7IChTdHJpbmcgXCJldmFsXCIpXSkpIHRoZW4gKHN0ZXBfZXZhbCAoc3RhdGUpKSBlbHNlIChzdGVwX2NvbnRpbnVlIChzdGF0ZSkpKVxuXG4oKiBzdGVwLWV2YWwgKilcbmFuZCBzdGVwX2V2YWwgc3RhdGUgPVxuICAobGV0IGV4cHIgPSAoY2VrX2NvbnRyb2wgKHN0YXRlKSkgaW4gbGV0IGVudiA9IChjZWtfZW52IChzdGF0ZSkpIGluIGxldCBrb250ID0gKGNla19rb250IChzdGF0ZSkpIGluIChsZXQgX21hdGNoX3ZhbCA9ICh0eXBlX29mIChleHByKSkgaW4gKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibnVtYmVyXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3RyaW5nXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiYm9vbGVhblwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm5pbFwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ltYm9sXCIpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChleHByKSkgaW4gKGxldCB2YWwnID0gKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKG5hbWUpKSkgdGhlbiAoZW52X2dldCAoZW52KSAobmFtZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX3ByaW1pdGl2ZSAobmFtZSkpKSB0aGVuIChnZXRfcHJpbWl0aXZlIChuYW1lKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwidHJ1ZVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZhbHNlXCIpXSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm5pbFwiKV0pKSB0aGVuIE5pbCBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuZGVmaW5lZCBzeW1ib2w6IFwiKTsgbmFtZV0pKSkpKSkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19uaWwgKHZhbCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW25hbWU7IChTdHJpbmcgXCJ+XCIpXSkpKSB0aGVuIChkZWJ1Z19sb2cgKChTdHJpbmcgXCJDb21wb25lbnQgbm90IGZvdW5kOlwiKSkgKG5hbWUpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsJykgKGVudikgKGtvbnQpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImtleXdvcmRcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChrZXl3b3JkX25hbWUgKGV4cHIpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImRpY3RcIikgdGhlbiAobGV0IGtzID0gKHByaW1fY2FsbCBcImtleXNcIiBbZXhwcl0pIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3Rfa2V5ID0gKGZpcnN0IChrcykpIGluIGxldCByZW1haW5pbmdfZW50cmllcyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gayAtPiBpZ25vcmUgKChyZW1haW5pbmdfZW50cmllcyA6PSBzeF9hcHBlbmRfYiAhcmVtYWluaW5nX2VudHJpZXMgKExpc3QgW2s7IChnZXQgKGV4cHIpIChrKSldKTsgTmlsKSkpIChzeF90b19saXN0IChyZXN0IChrcykpKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChleHByKSAoZmlyc3Rfa2V5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kaWN0X2ZyYW1lICghcmVtYWluaW5nX2VudHJpZXMpICgoTGlzdCBbKExpc3QgW2ZpcnN0X2tleV0pXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImxpc3RcIikgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKHN0ZXBfZXZhbF9saXN0IChleHByKSAoZW52KSAoa29udCkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSkpKSkpKSkpKSlcblxuKCogc3RlcC1zZi1yYWlzZSAqKVxuYW5kIHN0ZXBfc2ZfcmFpc2UgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9yYWlzZV9ldmFsX2ZyYW1lIChlbnYpICgoQm9vbCBmYWxzZSkpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtZ3VhcmQgKilcbmFuZCBzdGVwX3NmX2d1YXJkIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHZhcl9jbGF1c2VzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCB2YXIgPSAoZmlyc3QgKHZhcl9jbGF1c2VzKSkgaW4gbGV0IGNsYXVzZXMgPSAocmVzdCAodmFyX2NsYXVzZXMpKSBpbiBsZXQgc2VudGluZWwgPSAobWFrZV9zeW1ib2wgKChTdHJpbmcgXCJfX2d1YXJkLXJlcmFpc2VfX1wiKSkpIGluIChzdGVwX2V2YWxfbGlzdCAoKExpc3QgWyhTeW1ib2wgXCJsZXRcIik7IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpOyAoY29ucyAoKFN5bWJvbCBcImNhbGwvY2NcIikpICgoTGlzdCBbKGNvbnMgKChTeW1ib2wgXCJmblwiKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcIl9fZ3VhcmQta1wiKV0pKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiaGFuZGxlci1iaW5kXCIpKSAoKGNvbnMgKChMaXN0IFsoTGlzdCBbKGNvbnMgKChTeW1ib2wgXCJmblwiKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcIl9cIildKSkgKChMaXN0IFsoQm9vbCB0cnVlKV0pKSkpKTsgKGNvbnMgKChTeW1ib2wgXCJmblwiKSkgKChjb25zICgoTGlzdCBbdmFyXSkpICgoTGlzdCBbKExpc3QgWyhTeW1ib2wgXCJfX2d1YXJkLWtcIik7IChjb25zICgoU3ltYm9sIFwiY29uZFwiKSkgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbY2xhdXNlczsgKExpc3QgWyhMaXN0IFsoU3ltYm9sIFwiZWxzZVwiKTsgKExpc3QgWyhTeW1ib2wgXCJsaXN0XCIpOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyBzZW50aW5lbF0pOyB2YXJdKV0pXSldKSkpXSldKSkpKSldKV0pKSAoKExpc3QgWyhMaXN0IFsoU3ltYm9sIFwiX19ndWFyZC1rXCIpOyAoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAoYm9keSkpXSldKSkpKSldKSkpKSldKSkpXSldKTsgKExpc3QgWyhTeW1ib2wgXCJpZlwiKTsgKExpc3QgWyhTeW1ib2wgXCJhbmRcIik7IChMaXN0IFsoU3ltYm9sIFwibGlzdD9cIik7IChTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKV0pOyAoTGlzdCBbKFN5bWJvbCBcIj1cIik7IChMaXN0IFsoU3ltYm9sIFwibGVuXCIpOyAoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIildKTsgKE51bWJlciAyLjApXSk7IChMaXN0IFsoU3ltYm9sIFwiPVwiKTsgKExpc3QgWyhTeW1ib2wgXCJmaXJzdFwiKTsgKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpXSk7IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IHNlbnRpbmVsXSldKV0pOyAoTGlzdCBbKFN5bWJvbCBcInJhaXNlXCIpOyAoTGlzdCBbKFN5bWJvbCBcIm50aFwiKTsgKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpOyAoTnVtYmVyIDEuMCldKV0pOyAoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIildKV0pKSAoZW52KSAoa29udCkpKVxuXG4oKiBzdGVwLXNmLWNhbGxjYyAqKVxuYW5kIHN0ZXBfc2ZfY2FsbGNjIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY2FsbGNjX2ZyYW1lIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtY2FzZSAqKVxuYW5kIHN0ZXBfc2ZfY2FzZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2Nhc2VfZnJhbWUgKE5pbCkgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtbGV0LW1hdGNoICopXG5hbmQgc3RlcF9zZl9sZXRfbWF0Y2ggYXJncyBlbnYga29udCA9XG4gIChsZXQgcGF0dGVybiA9IChmaXJzdCAoYXJncykpIGluIGxldCBleHByID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKHJlc3QgKChyZXN0IChhcmdzKSkpKSBpbiAoc3RlcF9zZl9tYXRjaCAoKExpc3QgW2V4cHI7IChMaXN0IFtwYXR0ZXJuOyAoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAoYm9keSkpXSldKSkgKGVudikgKGtvbnQpKSlcblxuKCogc3RlcC1ldmFsLWxpc3QgKilcbmFuZCBzdGVwX2V2YWxfbGlzdCBleHByIGVudiBrb250ID1cbiAgKGxldCBoZWFkID0gKGZpcnN0IChleHByKSkgaW4gbGV0IGFyZ3MgPSAocmVzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcImxhbWJkYVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSkpKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoZXhwcikpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfbWFwX2ZyYW1lIChOaWwpICgocmVzdCAoZXhwcikpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChoZWFkKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gbmFtZSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaWZcIildKSkgdGhlbiAoc3RlcF9zZl9pZiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ3aGVuXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfd2hlbiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjb25kXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfY29uZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjYXNlXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfY2FzZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJhbmRcIildKSkgdGhlbiAoc3RlcF9zZl9hbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwib3JcIildKSkgdGhlbiAoc3RlcF9zZl9vciAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJsZXRcIildKSkgdGhlbiAoc3RlcF9zZl9sZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0KlwiKV0pKSB0aGVuIChzdGVwX3NmX2xldCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJsYW1iZGFcIildKSkgdGhlbiAoc3RlcF9zZl9sYW1iZGEgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZm5cIildKSkgdGhlbiAoc3RlcF9zZl9sYW1iZGEgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZGVmaW5lIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmNvbXBcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChzZl9kZWZjb21wIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaXNsYW5kXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaXNsYW5kIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmbWFjcm9cIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChzZl9kZWZtYWNybyAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmlvXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaW8gKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpbmUtZm9yZWlnblwiKV0pKSB0aGVuIChzdGVwX3NmX2RlZmluZV9mb3JlaWduIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImlvXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfaW8gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYmVnaW5cIildKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkb1wiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGxpc3RfcCAoKGZpcnN0IChhcmdzKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wICgoZmlyc3QgKGFyZ3MpKSkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wICgoZmlyc3QgKChmaXJzdCAoYXJncykpKSkpKSkpKSkgdGhlbiAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHRlc3RfY2xhdXNlID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKHJlc3QgKChyZXN0IChhcmdzKSkpKSBpbiBsZXQgdmFycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGIgLT4gKGZpcnN0IChiKSkpIChzeF90b19saXN0IGJpbmRpbmdzKSkpIGluIGxldCBpbml0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGIgLT4gKG50aCAoYikgKChOdW1iZXIgMS4wKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSBpbiBsZXQgc3RlcHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGIpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG50aCAoYikgKChOdW1iZXIgMi4wKSkpIGVsc2UgKGZpcnN0IChiKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSBpbiBsZXQgdGVzdCA9IChmaXJzdCAodGVzdF9jbGF1c2UpKSBpbiBsZXQgcmVzdWx0JyA9IChyZXN0ICh0ZXN0X2NsYXVzZSkpIGluIChzdGVwX2V2YWxfbGlzdCAoKGNvbnMgKChTeW1ib2wgXCJsZXRcIikpICgoY29ucyAoKFN5bWJvbCBcIl9fZG8tbG9vcFwiKSkgKChjb25zICgoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChMaXN0IFsoZmlyc3QgKGIpKTsgKG50aCAoYikgKChOdW1iZXIgMS4wKSkpXSkpIChzeF90b19saXN0IGJpbmRpbmdzKSkpKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiaWZcIikpICgoY29ucyAodGVzdCkgKChjb25zICgoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdWx0JykpKSB0aGVuIE5pbCBlbHNlIChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpIChyZXN1bHQnKSkpKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2JvZHk7IChMaXN0IFsoY29ucyAoKFN5bWJvbCBcIl9fZG8tbG9vcFwiKSkgKHN0ZXBzKSldKV0pKSldKSkpKSkpKV0pKSkpKSkpKSAoZW52KSAoa29udCkpKSBlbHNlIChzdGVwX3NmX2JlZ2luIChhcmdzKSAoZW52KSAoa29udCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJndWFyZFwiKV0pKSB0aGVuIChzdGVwX3NmX2d1YXJkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInF1b3RlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJxdWFzaXF1b3RlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgocXFfZXhwYW5kICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIi0+XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfdGhyZWFkX2ZpcnN0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIi0+PlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9sYXN0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInw+XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfdGhyZWFkX2xhc3QgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYXMtPlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9hcyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzZXQhXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2V0X2IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0cmVjXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0cmVjIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlc2V0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmVzZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2hpZnRcIildKSkgdGhlbiAoc3RlcF9zZl9zaGlmdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZXJlZlwiKV0pKSB0aGVuIChzdGVwX3NmX2RlcmVmIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNjb3BlXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2NvcGUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pKSB0aGVuIChzdGVwX3NmX3Byb3ZpZGUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVla1wiKV0pKSB0aGVuIChzdGVwX3NmX3BlZWsgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicHJvdmlkZSFcIildKSkgdGhlbiAoc3RlcF9zZl9wcm92aWRlX2IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29udGV4dFwiKV0pKSB0aGVuIChzdGVwX3NmX2NvbnRleHQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYmluZFwiKV0pKSB0aGVuIChzdGVwX3NmX2JpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZW1pdCFcIildKSkgdGhlbiAoc3RlcF9zZl9lbWl0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImVtaXR0ZWRcIildKSkgdGhlbiAoc3RlcF9zZl9lbWl0dGVkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImhhbmRsZXItYmluZFwiKV0pKSB0aGVuIChzdGVwX3NmX2hhbmRsZXJfYmluZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZXN0YXJ0LWNhc2VcIildKSkgdGhlbiAoc3RlcF9zZl9yZXN0YXJ0X2Nhc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2lnbmFsLWNvbmRpdGlvblwiKV0pKSB0aGVuIChzdGVwX3NmX3NpZ25hbCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbnZva2UtcmVzdGFydFwiKV0pKSB0aGVuIChzdGVwX3NmX2ludm9rZV9yZXN0YXJ0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm1hdGNoXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbWF0Y2ggKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0LW1hdGNoXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0X21hdGNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImR5bmFtaWMtd2luZFwiKV0pKSB0aGVuIChzdGVwX3NmX2R5bmFtaWNfd2luZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAoc3RlcF9ob19tYXAgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwLWluZGV4ZWRcIildKSkgdGhlbiAoc3RlcF9ob19tYXBfaW5kZXhlZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAoc3RlcF9ob19maWx0ZXIgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKHN0ZXBfaG9fcmVkdWNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAoc3RlcF9ob19zb21lIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5P1wiKV0pKSB0aGVuIChzdGVwX2hvX2V2ZXJ5IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpIHRoZW4gKHN0ZXBfaG9fZm9yX2VhY2ggKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmFpc2VcIildKSkgdGhlbiAoc3RlcF9zZl9yYWlzZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyYWlzZS1jb250aW51YWJsZVwiKV0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9yYWlzZV9ldmFsX2ZyYW1lIChlbnYpICgoQm9vbCB0cnVlKSkpKSAoa29udCkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FsbC9jY1wiKV0pKSB0aGVuIChzdGVwX3NmX2NhbGxjYyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb25cIildKSkgdGhlbiAoc3RlcF9zZl9jYWxsY2MgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVyZm9ybVwiKV0pKSB0aGVuIChzdGVwX3NmX3BlcmZvcm0gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLWxpYnJhcnlcIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmVfbGlicmFyeSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbXBvcnRcIildKSkgdGhlbiAoc3RlcF9zZl9pbXBvcnQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLXJlY29yZC10eXBlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaW5lX3JlY29yZF90eXBlIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLXByb3RvY29sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaW5lX3Byb3RvY29sIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW1wbGVtZW50XCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfaW1wbGVtZW50IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGFyYW1ldGVyaXplXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcGFyYW1ldGVyaXplIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInN5bnRheC1ydWxlc1wiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX3N5bnRheF9ydWxlcyAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1zeW50YXhcIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbY3VzdG9tX3NwZWNpYWxfZm9ybXM7IG5hbWVdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpIChuYW1lKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChjZWtfY2FsbCAoKGdldCAoY3VzdG9tX3NwZWNpYWxfZm9ybXMpIChuYW1lKSkpIChMaXN0IFthcmdzOyBlbnZdKSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZW52X2hhcyAoZW52KSAobmFtZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19tYWNybyAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkpKSkgdGhlbiAobGV0IG1hYyA9IChlbnZfZ2V0IChlbnYpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZXhwYW5kX21hY3JvIChtYWMpIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gcmVuZGVyX2NoZWNrIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKG5hbWUpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGNla19jYWxsIChyZW5kZXJfY2hlY2spIChMaXN0IFtleHByOyBlbnZdKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChjZWtfY2FsbCAocmVuZGVyX2ZuKSAoTGlzdCBbZXhwcjsgZW52XSkpKSAoZW52KSAoa29udCkpIGVsc2UgKHN0ZXBfZXZhbF9jYWxsIChoZWFkKSAoYXJncykgKGVudikgKGtvbnQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpIGVsc2UgKHN0ZXBfZXZhbF9jYWxsIChoZWFkKSAoYXJncykgKGVudikgKGtvbnQpKSkpKVxuXG4oKiBrb250LWV4dHJhY3QtcHJvdmlkZXMgKilcbmFuZCBrb250X2V4dHJhY3RfcHJvdmlkZXMga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKExpc3QgW10pIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIGxldCByZXN0X2ZyYW1lcyA9IChrb250X2V4dHJhY3RfcHJvdmlkZXMgKChyZXN0IChrb250KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAoY29ucyAoKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicHJvdmlkZVwiOyBjZl9lbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKTsgY2ZfbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gKExpc3QgW10pOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gKExpc3QgW10pOyBjZl9leHRyYSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSk7IGNmX2V4dHJhMiA9IE5pbCB9KSkgKHJlc3RfZnJhbWVzKSkgZWxzZSByZXN0X2ZyYW1lcykpKVxuXG4oKiBmaXJlLXByb3ZpZGUtc3Vic2NyaWJlcnMgKilcbmFuZCBmaXJlX3Byb3ZpZGVfc3Vic2NyaWJlcnMgbmFtZSA9XG4gIChsZXQgc3VicyA9IChnZXQgKCFfcHJvdmlkZV9zdWJzY3JpYmVyc19yZWYpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gc3VicyBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChzdWJzKSkpKSkpKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFshX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmOyAoTnVtYmVyIDAuMCldKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gc3ViIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgWyFfcHJvdmlkZV9iYXRjaF9xdWV1ZV9yZWY7IHN1Yl0pKSkpKSkgdGhlbiAoX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIDo9IHN4X2FwcGVuZF9iICFfcHJvdmlkZV9iYXRjaF9xdWV1ZV9yZWYgc3ViOyBOaWwpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IHN1YnMpOyBOaWwpIGVsc2UgKExpc3QuaXRlciAoZnVuIHN1YiAtPiBpZ25vcmUgKChjZWtfY2FsbCAoc3ViKSAoKExpc3QgW05pbF0pKSkpKSAoc3hfdG9fbGlzdCBzdWJzKTsgTmlsKSkgZWxzZSBOaWwpKVxuXG4oKiBiYXRjaC1iZWdpbiEgKilcbmFuZCBiYXRjaF9iZWdpbl9iICgpID1cbiAgKF9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZiA6PSAocHJpbV9jYWxsIFwiK1wiIFshX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmOyAoTnVtYmVyIDEuMCldKTsgTmlsKVxuXG4oKiBiYXRjaC1lbmQhICopXG5hbmQgYmF0Y2hfZW5kX2IgKCkgPVxuICAobGV0ICgpID0gaWdub3JlICgoX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmIDo9IChwcmltX2NhbGwgXCItXCIgWyFfcHJvdmlkZV9iYXRjaF9kZXB0aF9yZWY7IChOdW1iZXIgMS4wKV0pOyBOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFshX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmOyAoTnVtYmVyIDAuMCldKSkgdGhlbiAobGV0IHF1ZXVlID0gIV9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiBpbiAobGV0ICgpID0gaWdub3JlICgoX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIDo9IChMaXN0IFtdKTsgTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIHN1YiAtPiBpZ25vcmUgKChjZWtfY2FsbCAoc3ViKSAoKExpc3QgW05pbF0pKSkpKSAoc3hfdG9fbGlzdCBxdWV1ZSk7IE5pbCkpKSBlbHNlIE5pbCkpXG5cbigqIHN0ZXAtc2YtYmluZCAqKVxuYW5kIHN0ZXBfc2ZfYmluZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBib2R5ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHByZXYgPSAhX2JpbmRfdHJhY2tpbmdfcmVmIGluIChsZXQgKCkgPSBpZ25vcmUgKChfYmluZF90cmFja2luZ19yZWYgOj0gKExpc3QgW10pOyBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9iaW5kX2ZyYW1lIChib2R5KSAoZW52KSAocHJldikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLXBhcmFtZXRlcml6ZSAqKVxuYW5kIHN0ZXBfc2ZfcGFyYW1ldGVyaXplIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX25pbCAoYmluZGluZ3MpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGVtcHR5X3AgKGJpbmRpbmdzKSkpKSB0aGVuIChzdGVwX3NmX2JlZ2luIChib2R5KSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9wYWlyID0gKGZpcnN0IChiaW5kaW5ncykpIGluIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChmaXJzdF9wYWlyKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9wYXJhbWV0ZXJpemVfZnJhbWUgKGJpbmRpbmdzKSAoTmlsKSAoKExpc3QgW10pKSAoYm9keSkgKGVudikpKSAoa29udCkpKSkpKSlcblxuKCogc3ludGF4LXJ1bGVzLW1hdGNoICopXG5hbmQgc3ludGF4X3J1bGVzX21hdGNoIHBhdHRlcm4gZm9ybSBsaXRlcmFscyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAocGF0dGVybikpOyAoU3RyaW5nIFwiX1wiKV0pKSkgdGhlbiAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFtsaXRlcmFsczsgKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSldKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wIChmb3JtKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSk7IChzeW1ib2xfbmFtZSAoZm9ybSkpXSkpKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChwYXR0ZXJuKSkpIHRoZW4gKGxldCBkID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBkIChzeW1ib2xfbmFtZSAocGF0dGVybikpIGZvcm0pKSBpbiBkKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGVtcHR5X3AgKHBhdHRlcm4pKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAoZm9ybSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChlbXB0eV9wIChmb3JtKSkpKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKGZvcm0pKSkpIHRoZW4gKHN5bnRheF9ydWxlc19tYXRjaF9saXN0IChwYXR0ZXJuKSAoKE51bWJlciAwLjApKSAoZm9ybSkgKChOdW1iZXIgMC4wKSkgKGxpdGVyYWxzKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyBmb3JtXSkpIHRoZW4gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBlbHNlIE5pbCkpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtbWF0Y2gtbGlzdCAqKVxuYW5kIHN5bnRheF9ydWxlc19tYXRjaF9saXN0IHBhdHRlcm4gcGkgZm9ybSBmaSBsaXRlcmFscyA9XG4gIChsZXQgcGxlbiA9IChsZW4gKHBhdHRlcm4pKSBpbiBsZXQgZmxlbiA9IChsZW4gKGZvcm0pKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbcGk7IHBsZW5dKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPj1cIiBbZmk7IGZsZW5dKSkpIHRoZW4gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFtwaTsgcGxlbl0pKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI8XCIgWyhwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDEuMCldKTsgcGxlbl0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChzeW1ib2xfcCAoKG50aCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDEuMCldKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgobnRoIChwYXR0ZXJuKSAoKHByaW1fY2FsbCBcIitcIiBbcGk7IChOdW1iZXIgMS4wKV0pKSkpKTsgKFN0cmluZyBcIi4uLlwiKV0pKSkpIHRoZW4gKGxldCBzdWJfcGF0ID0gKG50aCAocGF0dGVybikgKHBpKSkgaW4gbGV0IHJlc3RfcGF0X2NvdW50ID0gKHByaW1fY2FsbCBcIi1cIiBbcGxlbjsgKHByaW1fY2FsbCBcIitcIiBbcGk7IChOdW1iZXIgMi4wKV0pXSkgaW4gbGV0IGF2YWlsYWJsZSA9IChwcmltX2NhbGwgXCItXCIgW2ZsZW47IGZpXSkgaW4gbGV0IG5fZWxsaXBzaXMgPSAocHJpbV9jYWxsIFwiLVwiIFsocHJpbV9jYWxsIFwiLVwiIFtmbGVuOyBmaV0pOyAocHJpbV9jYWxsIFwiLVwiIFtwbGVuOyAocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAyLjApXSldKV0pIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgW25fZWxsaXBzaXM7IChOdW1iZXIgMC4wKV0pKSB0aGVuIE5pbCBlbHNlIChsZXQgZWxsaXBzaXNfZm9ybXMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbZm9ybTsgZmk7IChwcmltX2NhbGwgXCIrXCIgW2ZpOyBuX2VsbGlwc2lzXSldKSBpbiBsZXQgc3ViX2JpbmRpbmdzID0gKExpc3QgKExpc3QubWFwIChmdW4gZiAtPiAoc3ludGF4X3J1bGVzX21hdGNoIChzdWJfcGF0KSAoZikgKGxpdGVyYWxzKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJzbGljZVwiIFtmb3JtOyBmaTsgKHByaW1fY2FsbCBcIitcIiBbZmk7IG5fZWxsaXBzaXNdKV0pKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbc3ViX2JpbmRpbmdzOyBOaWxdKSkgdGhlbiBOaWwgZWxzZSAobGV0IHJlc3RfcmVzdWx0ID0gKHN5bnRheF9ydWxlc19tYXRjaF9saXN0IChwYXR0ZXJuKSAoKHByaW1fY2FsbCBcIitcIiBbcGk7IChOdW1iZXIgMi4wKV0pKSAoZm9ybSkgKChwcmltX2NhbGwgXCIrXCIgW2ZpOyBuX2VsbGlwc2lzXSkpIChsaXRlcmFscykpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHJlc3RfcmVzdWx0KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBtZXJnZWQgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBiIC0+IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChsZXQgZXhpc3RpbmcgPSAoZGljdF9nZXQgKG1lcmdlZCkgKGtleSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGV4aXN0aW5nKSkpIHRoZW4gKHN4X2RpY3Rfc2V0X2IgbWVyZ2VkIGtleSAoTGlzdCBbKGdldCAoYikgKGtleSkpXSkpIGVsc2UgKHN4X2RpY3Rfc2V0X2IgbWVyZ2VkIGtleSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2V4aXN0aW5nOyAoTGlzdCBbKGdldCAoYikgKGtleSkpXSldKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW2JdKSk7IE5pbCkpKSAoc3hfdG9fbGlzdCBzdWJfYmluZGluZ3MpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgbWVyZ2VkIGtleSAoZ2V0IChyZXN0X3Jlc3VsdCkgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW3Jlc3RfcmVzdWx0XSkpOyBOaWwpKSBpbiBtZXJnZWQpKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbZmk7IGZsZW5dKSkgdGhlbiBOaWwgZWxzZSAobGV0IHN1Yl9yZXN1bHQgPSAoc3ludGF4X3J1bGVzX21hdGNoICgobnRoIChwYXR0ZXJuKSAocGkpKSkgKChudGggKGZvcm0pIChmaSkpKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzdWJfcmVzdWx0KSkpIHRoZW4gTmlsIGVsc2UgKGxldCByZXN0X3Jlc3VsdCA9IChzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDEuMCldKSkgKGZvcm0pICgocHJpbV9jYWxsIFwiK1wiIFtmaTsgKE51bWJlciAxLjApXSkpIChsaXRlcmFscykpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHJlc3RfcmVzdWx0KSkpIHRoZW4gTmlsIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHJlc3RfcmVzdWx0IGtleSAoZ2V0IChzdWJfcmVzdWx0KSAoa2V5KSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcImtleXNcIiBbc3ViX3Jlc3VsdF0pKTsgTmlsKSkgaW4gcmVzdF9yZXN1bHQpKSkpKSkpKSkpXG5cbigqIHN5bnRheC1ydWxlcy1maW5kLXZhciAqKVxuYW5kIHN5bnRheF9ydWxlc19maW5kX3ZhciB0ZW1wbGF0ZSBiaW5kaW5ncyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAodGVtcGxhdGUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbYmluZGluZ3M7IChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKChnZXQgKGJpbmRpbmdzKSAoKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpKSkpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsaXN0X3AgKHRlbXBsYXRlKSkpIHRoZW4gKExpc3QuZm9sZF9sZWZ0IChmdW4gZm91bmQgdCAtPiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmb3VuZCkpKSB0aGVuIChzeW50YXhfcnVsZXNfZmluZF92YXIgKHQpIChiaW5kaW5ncykpIGVsc2UgZm91bmQpKSBOaWwgKHN4X3RvX2xpc3QgdGVtcGxhdGUpKSBlbHNlIE5pbCkpXG5cbigqIHN5bnRheC1ydWxlcy1maW5kLWFsbC12YXJzICopXG5hbmQgc3ludGF4X3J1bGVzX2ZpbmRfYWxsX3ZhcnMgdGVtcGxhdGUgYmluZGluZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKHRlbXBsYXRlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2JpbmRpbmdzOyAoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wICgoZ2V0IChiaW5kaW5ncykgKChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSkpKSkpKSkgdGhlbiAoTGlzdCBbKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wICh0ZW1wbGF0ZSkpKSB0aGVuIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB0IC0+IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbYWNjOyAoc3ludGF4X3J1bGVzX2ZpbmRfYWxsX3ZhcnMgKHQpIChiaW5kaW5ncykpXSkpIChMaXN0IFtdKSAoc3hfdG9fbGlzdCB0ZW1wbGF0ZSkpIGVsc2UgKExpc3QgW10pKSlcblxuKCogc3ludGF4LXJ1bGVzLWluc3RhbnRpYXRlICopXG5hbmQgc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlIHRlbXBsYXRlIGJpbmRpbmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wICh0ZW1wbGF0ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtiaW5kaW5nczsgKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpXSkpKSB0aGVuIChnZXQgKGJpbmRpbmdzKSAoKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChsaXN0X3AgKHRlbXBsYXRlKSkpKSkpKSB0aGVuIHRlbXBsYXRlIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHRlbXBsYXRlKSkpIHRoZW4gdGVtcGxhdGUgZWxzZSAoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlX2xpc3QgKHRlbXBsYXRlKSAoKE51bWJlciAwLjApKSAoYmluZGluZ3MpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtaW5zdGFudGlhdGUtbGlzdCAqKVxuYW5kIHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0IHRlbXBsYXRlIGkgYmluZGluZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbaTsgKGxlbiAodGVtcGxhdGUpKV0pKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZWxlbSA9IChudGggKHRlbXBsYXRlKSAoaSkpIGluIGxldCBoYXNfZWxsaXBzaXMgPSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKTsgKGxlbiAodGVtcGxhdGUpKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChzeW1ib2xfcCAoKG50aCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgobnRoICh0ZW1wbGF0ZSkgKChwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMS4wKV0pKSkpKTsgKFN0cmluZyBcIi4uLlwiKV0pKSkgaW4gKGlmIHN4X3RydXRoeSAoaGFzX2VsbGlwc2lzKSB0aGVuIChsZXQgYWxsX3ZhcnMgPSAoc3ludGF4X3J1bGVzX2ZpbmRfYWxsX3ZhcnMgKGVsZW0pIChiaW5kaW5ncykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhbGxfdmFycykpKSB0aGVuIChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDIuMCldKSkgKGJpbmRpbmdzKSkgZWxzZSAobGV0IGNvdW50ID0gKGxlbiAoKGdldCAoYmluZGluZ3MpICgoZmlyc3QgKGFsbF92YXJzKSkpKSkpIGluIGxldCBleHBhbmRlZCA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGlkeCAtPiAobGV0IGIgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiBiIGtleSAoZ2V0IChiaW5kaW5ncykgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW2JpbmRpbmdzXSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gdmFyX25hbWUgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiBiIHZhcl9uYW1lIChudGggKChnZXQgKGJpbmRpbmdzKSAodmFyX25hbWUpKSkgKGlkeCkpKSkpIChzeF90b19saXN0IGFsbF92YXJzKTsgTmlsKSkgaW4gKHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZSAoZWxlbSkgKGIpKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgW2NvdW50XSkpKSkgaW4gbGV0IHJlc3RfcmVzdWx0ID0gKHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0ICh0ZW1wbGF0ZSkgKChwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMi4wKV0pKSAoYmluZGluZ3MpKSBpbiAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2V4cGFuZGVkOyByZXN0X3Jlc3VsdF0pKSkpIGVsc2UgKGNvbnMgKChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUgKGVsZW0pIChiaW5kaW5ncykpKSAoKHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0ICh0ZW1wbGF0ZSkgKChwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMS4wKV0pKSAoYmluZGluZ3MpKSkpKSkpXG5cbigqIHN5bnRheC1ydWxlcy1leHBhbmQgKilcbmFuZCBzeW50YXhfcnVsZXNfZXhwYW5kIGxpdGVyYWxzIHJ1bGVzIGZvcm0gPVxuICAobGV0IGZ1bGxfZm9ybSA9IChjb25zICgobWFrZV9zeW1ib2wgKChTdHJpbmcgXCJfXCIpKSkpIChmb3JtKSkgaW4gKHN5bnRheF9ydWxlc190cnlfcnVsZXMgKGxpdGVyYWxzKSAocnVsZXMpIChmdWxsX2Zvcm0pKSlcblxuKCogc3ludGF4LXJ1bGVzLXRyeS1ydWxlcyAqKVxuYW5kIHN5bnRheF9ydWxlc190cnlfcnVsZXMgbGl0ZXJhbHMgcnVsZXMgZnVsbF9mb3JtID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJ1bGVzKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwic3ludGF4LXJ1bGVzOiBubyBwYXR0ZXJuIG1hdGNoZWQgZm9yIFwiKTsgKGluc3BlY3QgKGZ1bGxfZm9ybSkpXSkpKSkpIGVsc2UgKGxldCBydWxlID0gKGZpcnN0IChydWxlcykpIGluIGxldCBwYXR0ZXJuID0gKGZpcnN0IChydWxlKSkgaW4gbGV0IHRlbXBsYXRlID0gKG50aCAocnVsZSkgKChOdW1iZXIgMS4wKSkpIGluIChsZXQgYmluZGluZ3MgPSAoc3ludGF4X3J1bGVzX21hdGNoIChwYXR0ZXJuKSAoZnVsbF9mb3JtKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKGJpbmRpbmdzKSkpKSkpKSB0aGVuIChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUgKHRlbXBsYXRlKSAoYmluZGluZ3MpKSBlbHNlIChzeW50YXhfcnVsZXNfdHJ5X3J1bGVzIChsaXRlcmFscykgKChyZXN0IChydWxlcykpKSAoZnVsbF9mb3JtKSkpKSkpXG5cbigqIHNmLXN5bnRheC1ydWxlcyAqKVxuYW5kIHNmX3N5bnRheF9ydWxlcyBhcmdzIGVudiA9XG4gIChsZXQgbGl0ZXJhbHMgPSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChzKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChzKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW3NdKSkpKSAoc3hfdG9fbGlzdCAoZmlyc3QgKGFyZ3MpKSkpKSBlbHNlIChMaXN0IFtdKSkgaW4gbGV0IHJ1bGVzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0IGNsb3N1cmUgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGNsb3N1cmUgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiX19zci1saXRlcmFsc1wiKSkgbGl0ZXJhbHMpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgY2xvc3VyZSAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJfX3NyLXJ1bGVzXCIpKSBydWxlcykpIGluIChtYWtlX21hY3JvICgoTGlzdCBbXSkpICgoU3RyaW5nIFwiX19zci1mb3JtXCIpKSAoKFN5bWJvbCBcIl9fc3ludGF4LXJ1bGVzLWJvZHlfX1wiKSkgKGNsb3N1cmUpICgoU3RyaW5nIFwic3ludGF4LXJ1bGVzXCIpKSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lLWxpYnJhcnkgKilcbmFuZCBzdGVwX3NmX2RlZmluZV9saWJyYXJ5IGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGxpYl9zcGVjID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGRlY2xzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0IGxpYl9lbnYgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gbGV0IGV4cG9ydHMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IGJvZHlfZm9ybXMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGRlY2wgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChkZWNsKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZGVjbCkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoc3ltYm9sX3AgKChmaXJzdCAoZGVjbCkpKSkpKSkgdGhlbiAobGV0IGtpbmQgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoZGVjbCkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2luZDsgKFN0cmluZyBcImV4cG9ydFwiKV0pKSB0aGVuIChleHBvcnRzIDo9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbIWV4cG9ydHM7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChzKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChzKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW3NdKSkpKSAoc3hfdG9fbGlzdCAocmVzdCAoZGVjbCkpKSkpXSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtraW5kOyAoU3RyaW5nIFwiaW1wb3J0XCIpXSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIGltcG9ydF9zZXQgLT4gaWdub3JlICgoYmluZF9pbXBvcnRfc2V0IChpbXBvcnRfc2V0KSAobGliX2VudikpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGRlY2wpKSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtraW5kOyAoU3RyaW5nIFwiYmVnaW5cIildKSkgdGhlbiAoYm9keV9mb3JtcyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyFib2R5X2Zvcm1zOyAocmVzdCAoZGVjbCkpXSk7IE5pbCkgZWxzZSBOaWwpKSkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IGRlY2xzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGZvcm0gLT4gaWdub3JlICgoZXZhbF9leHByIChmb3JtKSAobGliX2VudikpKSkgKHN4X3RvX2xpc3QgIWJvZHlfZm9ybXMpOyBOaWwpKSBpbiAobGV0IGV4cG9ydF9kaWN0ID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gbmFtZSAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChsaWJfZW52KSAobmFtZSkpKSB0aGVuIChzeF9kaWN0X3NldF9iIGV4cG9ydF9kaWN0IG5hbWUgKGVudl9nZXQgKGxpYl9lbnYpIChuYW1lKSkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0ICFleHBvcnRzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlZ2lzdGVyX2xpYnJhcnkgKGxpYl9zcGVjKSAoZXhwb3J0X2RpY3QpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpKSkpKSkpXG5cbigqIGJpbmQtaW1wb3J0LXNldCAqKVxuYW5kIGJpbmRfaW1wb3J0X3NldCBpbXBvcnRfc2V0IGVudiA9XG4gIChsZXQgaGVhZCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKGltcG9ydF9zZXQpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChpbXBvcnRfc2V0KSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChzeW1ib2xfcCAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSBlbHNlIE5pbCkgaW4gKGxldCBsaWJfc3BlYyA9IChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcIm9ubHlcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwiZXhjZXB0XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInByZWZpeFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwicmVuYW1lXCIpXSkpKSkpIHRoZW4gKG50aCAoaW1wb3J0X3NldCkgKChOdW1iZXIgMS4wKSkpIGVsc2UgaW1wb3J0X3NldCkgaW4gKGxldCBleHBvcnRzID0gKGxpYnJhcnlfZXhwb3J0cyAobGliX3NwZWMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwib25seVwiKV0pKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBzIC0+IGlnbm9yZSAoKGxldCBpZCA9IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocykpKSB0aGVuIChzeW1ib2xfbmFtZSAocykpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtzXSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbZXhwb3J0czsgaWRdKSkgdGhlbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgaWQpIChnZXQgKGV4cG9ydHMpIChpZCkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKChyZXN0IChpbXBvcnRfc2V0KSkpKSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwicHJlZml4XCIpXSkpIHRoZW4gKGxldCBwZnggPSAoU3RyaW5nIChzeF9zdHIgWyhudGggKGltcG9ydF9zZXQpICgoTnVtYmVyIDIuMCkpKV0pKSBpbiAoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChTdHJpbmcgKHN4X3N0ciBbcGZ4OyBrZXldKSkpIChnZXQgKGV4cG9ydHMpIChrZXkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtleHBvcnRzXSkpOyBOaWwpKSBlbHNlIChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcga2V5KSAoZ2V0IChleHBvcnRzKSAoa2V5KSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcImtleXNcIiBbZXhwb3J0c10pKTsgTmlsKSkpKSkpXG5cbigqIHN0ZXAtc2YtaW1wb3J0ICopXG5hbmQgc3RlcF9zZl9pbXBvcnQgYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGltcG9ydF9zZXQgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcmVzdF9zZXRzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0IGxpYl9zcGVjID0gKGxldCBoZWFkID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAoaW1wb3J0X3NldCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKGltcG9ydF9zZXQpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHN5bWJvbF9wICgoZmlyc3QgKGltcG9ydF9zZXQpKSkpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGltcG9ydF9zZXQpKSkpIGVsc2UgTmlsKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJvbmx5XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcImV4Y2VwdFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJwcmVmaXhcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInJlbmFtZVwiKV0pKSkpKSB0aGVuIChudGggKGltcG9ydF9zZXQpICgoTnVtYmVyIDEuMCkpKSBlbHNlIGltcG9ydF9zZXQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGlicmFyeV9sb2FkZWRfcCAobGliX3NwZWMpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoYmluZF9pbXBvcnRfc2V0IChpbXBvcnRfc2V0KSAoZW52KSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZXN0X3NldHMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChzdGVwX3NmX2ltcG9ydCAocmVzdF9zZXRzKSAoZW52KSAoa29udCkpKSkgZWxzZSAobWFrZV9jZWtfc3VzcGVuZGVkICgobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJsaWJyYXJ5XCIgbGliX3NwZWM7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm9wXCIgKFN0cmluZyBcImltcG9ydFwiKTsgRGljdCBfZCkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9pbXBvcnRfZnJhbWUgKGltcG9ydF9zZXQpIChyZXN0X3NldHMpIChlbnYpKSkgKGtvbnQpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLXBlcmZvcm0gKilcbmFuZCBzdGVwX3NmX3BlcmZvcm0gYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInBlcmZvcm0gcmVxdWlyZXMgYW4gSU8gcmVxdWVzdCBhcmd1bWVudFwiKSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9wZXJmb3JtX2ZyYW1lIChlbnYpKSkgKGtvbnQpKSkpKVxuXG5cbigqIHNmLWRlZmluZS1yZWNvcmQtdHlwZSAqKVxuYW5kIHNmX2RlZmluZV9yZWNvcmRfdHlwZSBhcmdzIGVudiA9XG4gIChsZXQgdHlwZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgY3Rvcl9zcGVjID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBwcmVkX3N5bSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgZmllbGRfc3BlY3MgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAzLjApXSkgaW4gKGxldCByYXdfbmFtZSA9IChzeW1ib2xfbmFtZSAodHlwZV9zeW0pKSBpbiAobGV0IHR5cGVfbmFtZSA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbcmF3X25hbWU7IChTdHJpbmcgXCI8XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcImVuZHMtd2l0aD9cIiBbcmF3X25hbWU7IChTdHJpbmcgXCI+XCIpXSkpKSB0aGVuIChwcmltX2NhbGwgXCJzbGljZVwiIFtyYXdfbmFtZTsgKE51bWJlciAxLjApOyAocHJpbV9jYWxsIFwiLVwiIFsobGVuIChyYXdfbmFtZSkpOyAoTnVtYmVyIDEuMCldKV0pIGVsc2UgcmF3X25hbWUpIGluIGxldCBjdG9yX25hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoY3Rvcl9zcGVjKSkpKSBpbiBsZXQgY3Rvcl9wYXJhbXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IChzeW1ib2xfbmFtZSAocykpKSAoc3hfdG9fbGlzdCAocmVzdCAoY3Rvcl9zcGVjKSkpKSkgaW4gbGV0IHByZWRfbmFtZSA9IChzeW1ib2xfbmFtZSAocHJlZF9zeW0pKSBpbiBsZXQgZmllbGRfbmFtZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBmcyAtPiAoc3ltYm9sX25hbWUgKChmaXJzdCAoZnMpKSkpKSAoc3hfdG9fbGlzdCBmaWVsZF9zcGVjcykpKSBpbiAobGV0IHJ0ZF91aWQgPSAobWFrZV9ydGQgKHR5cGVfbmFtZSkgKGZpZWxkX25hbWVzKSAoY3Rvcl9wYXJhbXMpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgY3Rvcl9uYW1lKSAobWFrZV9yZWNvcmRfY29uc3RydWN0b3IgKHJ0ZF91aWQpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyBwcmVkX25hbWUpIChtYWtlX3JlY29yZF9wcmVkaWNhdGUgKHJ0ZF91aWQpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JfZWFjaF9pbmRleGVkICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbaWR4OyBmc10gLT4gKGZ1biBpZHggZnMgLT4gKGxldCBhY2Nlc3Nvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgobnRoIChmcykgKChOdW1iZXIgMS4wKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGFjY2Vzc29yX25hbWUpIChtYWtlX3JlY29yZF9hY2Nlc3NvciAoaWR4KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoZnMpKTsgKE51bWJlciAzLjApXSkpIHRoZW4gKGxldCBtdXRhdG9yX25hbWUgPSAoc3ltYm9sX25hbWUgKChudGggKGZzKSAoKE51bWJlciAyLjApKSkpKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgbXV0YXRvcl9uYW1lKSAobWFrZV9yZWNvcmRfbXV0YXRvciAoaWR4KSkpKSBlbHNlIE5pbCkpKSkgaWR4IGZzIHwgXyAtPiBOaWwpKSkgKGZpZWxkX3NwZWNzKSkpIGluIE5pbCkpKSkpKSlcblxuKCogc2YtZGVmaW5lLXByb3RvY29sICopXG5hbmQgc2ZfZGVmaW5lX3Byb3RvY29sIGFyZ3MgZW52ID1cbiAgKGxldCBwcm90b19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBtZXRob2Rfc3BlY3MgPSAocmVzdCAoYXJncykpIGluIChsZXQgKCkgPSBpZ25vcmUgKChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiKnByb3RvY29sLXJlZ2lzdHJ5KlwiKSkgX3Byb3RvY29sX3JlZ2lzdHJ5XykpIGluIChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwic2F0aXNmaWVzP1wiKSkgKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW3BuYW1lOyB2YWwnXSAtPiAoZnVuIHBuYW1lIHZhbCcgLT4gKHNhdGlzZmllc19wIChwbmFtZSkgKHZhbCcpKSkgcG5hbWUgdmFsJyB8IF8gLT4gTmlsKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgX3Byb3RvY29sX3JlZ2lzdHJ5XyBwcm90b19uYW1lIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAzIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcImltcGxzXCIgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTsgSGFzaHRibC5yZXBsYWNlIF9kIFwibWV0aG9kc1wiIChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiYXJpdHlcIiAobGVuIChzcGVjKSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm5hbWVcIiAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSk7IERpY3QgX2QpKSAoc3hfdG9fbGlzdCBtZXRob2Rfc3BlY3MpKSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm5hbWVcIiBwcm90b19uYW1lOyBEaWN0IF9kKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBzcGVjIC0+IGlnbm9yZSAoKGxldCBtZXRob2RfbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChzcGVjKSkpKSBpbiBsZXQgcGFyYW1zID0gKHJlc3QgKHNwZWMpKSBpbiBsZXQgcG5hbWUgPSBwcm90b19uYW1lIGluIChsZXQgc2VsZl9zeW0gPSAoZmlyc3QgKHBhcmFtcykpIGluIGxldCBsb29rdXBfZXhwciA9IChMaXN0IFsoU3ltYm9sIFwiZ2V0XCIpOyAoTGlzdCBbKFN5bWJvbCBcImdldFwiKTsgKExpc3QgWyhTeW1ib2wgXCJnZXRcIik7IChMaXN0IFsoU3ltYm9sIFwiZ2V0XCIpOyAoU3ltYm9sIFwiKnByb3RvY29sLXJlZ2lzdHJ5KlwiKTsgcG5hbWVdKTsgKFN0cmluZyBcImltcGxzXCIpXSk7IChMaXN0IFsoU3ltYm9sIFwidHlwZS1vZlwiKTsgc2VsZl9zeW1dKV0pOyBtZXRob2RfbmFtZV0pIGluIChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyBtZXRob2RfbmFtZSkgKGV2YWxfZXhwciAoKExpc3QgWyhTeW1ib2wgXCJmblwiKTsgcGFyYW1zOyAoTGlzdCBbKFN5bWJvbCBcImxldFwiKTsgKExpc3QgWyhMaXN0IFsoU3ltYm9sIFwiX2ltcGxcIik7IGxvb2t1cF9leHByXSldKTsgKExpc3QgWyhTeW1ib2wgXCJpZlwiKTsgKExpc3QgWyhTeW1ib2wgXCJuaWw/XCIpOyAoU3ltYm9sIFwiX2ltcGxcIildKTsgKExpc3QgWyhTeW1ib2wgXCJlcnJvclwiKTsgKFN0cmluZyAoc3hfc3RyIFtwbmFtZTsgKFN0cmluZyBcIi5cIik7IG1ldGhvZF9uYW1lOyAoU3RyaW5nIFwiOiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgdHlwZVwiKV0pKV0pOyAoY29ucyAoKFN5bWJvbCBcIl9pbXBsXCIpKSAocGFyYW1zKSldKV0pXSkpIChlbnYpKSkpKSkpIChzeF90b19saXN0IG1ldGhvZF9zcGVjcyk7IE5pbCkpIGluIE5pbCkpKSlcblxuKCogc2YtaW1wbGVtZW50ICopXG5hbmQgc2ZfaW1wbGVtZW50IGFyZ3MgZW52ID1cbiAgKGxldCBwcm90b19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCByYXdfdHlwZV9uYW1lID0gKHN5bWJvbF9uYW1lICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKSBpbiBsZXQgdHlwZV9uYW1lID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jhd190eXBlX25hbWU7IChOdW1iZXIgMS4wKTsgKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAocmF3X3R5cGVfbmFtZSkpOyAoTnVtYmVyIDEuMCldKV0pIGluIGxldCBtZXRob2RfZGVmcyA9IChyZXN0ICgocmVzdCAoYXJncykpKSkgaW4gKGxldCBwcm90byA9IChnZXQgKF9wcm90b2NvbF9yZWdpc3RyeV8pIChwcm90b19uYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAocHJvdG8pKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIHByb3RvY29sOiBcIik7IHByb3RvX25hbWVdKSkpKSkgZWxzZSAobGV0IGltcGxzID0gKGdldCAocHJvdG8pICgoU3RyaW5nIFwiaW1wbHNcIikpKSBpbiBsZXQgdHlwZV9pbXBscyA9IChsZXQgX29yID0gKGdldCAoaW1wbHMpICh0eXBlX25hbWUpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIG1ldGhvZF9kZWYgLT4gaWdub3JlICgobGV0IG1uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKG1ldGhvZF9kZWYpKSkpIGluIGxldCBwcm90b19tZXRob2QgPSAoZmlyc3QgKChMaXN0IChMaXN0LmZpbHRlciAoZnVuIG0gLT4gc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChtKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgbW5hbWVdKSkpIChzeF90b19saXN0IChnZXQgKHByb3RvKSAoKFN0cmluZyBcIm1ldGhvZHNcIikpKSkpKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHByb3RvX21ldGhvZCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVua25vd24gbWV0aG9kIFwiKTsgbW5hbWU7IChTdHJpbmcgXCIgaW4gcHJvdG9jb2wgXCIpOyBwcm90b19uYW1lXSkpKSkpIGVsc2UgKGxldCBhcml0eSA9IChnZXQgKHByb3RvX21ldGhvZCkgKChTdHJpbmcgXCJhcml0eVwiKSkpIGluIGxldCBwYXJhbXMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbbWV0aG9kX2RlZjsgKE51bWJlciAxLjApOyBhcml0eV0pIGluIGxldCBib2R5ID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAobWV0aG9kX2RlZikpOyAocHJpbV9jYWxsIFwiK1wiIFthcml0eTsgKE51bWJlciAxLjApXSldKSkgdGhlbiAobnRoIChtZXRob2RfZGVmKSAoYXJpdHkpKSBlbHNlIChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpICgocHJpbV9jYWxsIFwic2xpY2VcIiBbbWV0aG9kX2RlZjsgYXJpdHldKSkpKSBpbiAoc3hfZGljdF9zZXRfYiB0eXBlX2ltcGxzIG1uYW1lIChldmFsX2V4cHIgKChMaXN0IFsoU3ltYm9sIFwiZm5cIik7IHBhcmFtczsgYm9keV0pKSAoZW52KSkpKSkpKSkgKHN4X3RvX2xpc3QgbWV0aG9kX2RlZnMpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBpbXBscyB0eXBlX25hbWUgdHlwZV9pbXBscykpIGluIE5pbCkpKSkpKVxuXG4oKiBzYXRpc2ZpZXM/ICopXG5hbmQgc2F0aXNmaWVzX3AgcHJvdG9fbmFtZSB2YWx1ZSA9XG4gIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHJlY29yZF9wICh2YWx1ZSkpKSkpKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAobGV0IHByb3RvID0gKGdldCAoX3Byb3RvY29sX3JlZ2lzdHJ5XykgKChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocHJvdG9fbmFtZSkpKSB0aGVuIChzeW1ib2xfbmFtZSAocHJvdG9fbmFtZSkpIGVsc2UgcHJvdG9fbmFtZSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChwcm90bykpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAoKGdldCAoKGdldCAocHJvdG8pICgoU3RyaW5nIFwiaW1wbHNcIikpKSkgKCh0eXBlX29mICh2YWx1ZSkpKSkpKSkpKSkpKSlcblxuKCogY2hlY2stbWF0Y2gtZXhoYXVzdGl2ZW5lc3MgKilcbmFuZCBjaGVja19tYXRjaF9leGhhdXN0aXZlbmVzcyBjbGF1c2VzID1cbiAgKGxldCB3YXJuaW5ncyA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgcGF0dGVybnMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChmaXJzdCAoYykpKSAoc3hfdG9fbGlzdCBjbGF1c2VzKSkpIGluIGxldCBoYXNfd2lsZGNhcmQgPSAoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBwIC0+IHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wIChwKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoQm9vbCB0cnVlKV0pKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChCb29sIGZhbHNlKV0pKSkpKSkpKSkgKHN4X3RvX2xpc3QgcGF0dGVybnMpKSkgaW4gbGV0IGhhc19lbHNlID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChTdHJpbmcgXCJlbHNlXCIpXSkpKSAoc3hfdG9fbGlzdCBwYXR0ZXJucykpKSBpbiBsZXQgaGFzX3RydWUgPSAoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBwIC0+IHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcDsgKEJvb2wgdHJ1ZSldKSkpIChzeF90b19saXN0IHBhdHRlcm5zKSkpIGluIGxldCBoYXNfZmFsc2UgPSAoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBwIC0+IHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcDsgKEJvb2wgZmFsc2UpXSkpKSAoc3hfdG9fbGlzdCBwYXR0ZXJucykpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKGhhc193aWxkY2FyZCkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfZWxzZSkpKSkpKSB0aGVuICh3YXJuaW5ncyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyF3YXJuaW5nczsgKExpc3QgWyhTdHJpbmcgXCJtYXRjaCBtYXkgYmUgbm9uLWV4aGF1c3RpdmUgKG5vIHdpbGRjYXJkIG9yIDplbHNlIHBhdHRlcm4pXCIpXSldKTsgTmlsKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsZXQgX29yID0gaGFzX3RydWUgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIGhhc19mYWxzZSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSBoYXNfdHJ1ZSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBoYXNfZmFsc2UpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKGhhc193aWxkY2FyZCkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfZWxzZSkpKSkpKSkpIHRoZW4gKHdhcm5pbmdzIDo9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbIXdhcm5pbmdzOyAoTGlzdCBbKGlmIHN4X3RydXRoeSAoaGFzX3RydWUpIHRoZW4gKFN0cmluZyBcIm1hdGNoIG9uIGJvb2xlYW4gbWlzc2luZyBmYWxzZSBjYXNlXCIpIGVsc2UgKFN0cmluZyBcIm1hdGNoIG9uIGJvb2xlYW4gbWlzc2luZyB0cnVlIGNhc2VcIikpXSldKTsgTmlsKSBlbHNlIE5pbCkpIGluICF3YXJuaW5ncykpKVxuXG4oKiBtYXRjaC1maW5kLWNsYXVzZSAqKVxuYW5kIG1hdGNoX2ZpbmRfY2xhdXNlIHZhbCcgY2xhdXNlcyBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY2xhdXNlcykpKSB0aGVuIE5pbCBlbHNlIChsZXQgY2xhdXNlID0gKGZpcnN0IChjbGF1c2VzKSkgaW4gbGV0IHBhdHRlcm4gPSAoZmlyc3QgKGNsYXVzZSkpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGxvY2FsID0gKGVudl9leHRlbmQgKGVudikpIGluIChpZiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuIChwYXR0ZXJuKSAodmFsJykgKGxvY2FsKSkpIHRoZW4gKExpc3QgW2xvY2FsOyBib2R5XSkgZWxzZSAobWF0Y2hfZmluZF9jbGF1c2UgKHZhbCcpICgocmVzdCAoY2xhdXNlcykpKSAoZW52KSkpKSlcblxuKCogbWF0Y2gtcGF0dGVybiAqKVxuYW5kIG1hdGNoX3BhdHRlcm4gcGF0dGVybiB2YWx1ZSBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyAoU3ltYm9sIFwiX1wiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHBhdHRlcm4pKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGZpcnN0IChwYXR0ZXJuKSk7IChTeW1ib2wgXCI/XCIpXSkpKSkgdGhlbiAobGV0IHByZWQgPSAoZXZhbF9leHByICgobnRoIChwYXR0ZXJuKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSBpbiAoY2VrX2NhbGwgKHByZWQpICgoTGlzdCBbdmFsdWVdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChwYXR0ZXJuKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAocGF0dGVybikpOyAoU3ltYm9sIFwicXVvdGVcIildKSkpKSB0aGVuIChwcmltX2NhbGwgXCI9XCIgW3ZhbHVlOyAobnRoIChwYXR0ZXJuKSAoKE51bWJlciAxLjApKSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocGF0dGVybikpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKHBhdHRlcm4pKSkgdmFsdWUpKSBpbiAoQm9vbCB0cnVlKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGF0dGVybikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoc3ltYm9sX3AgKChmaXJzdCAocGF0dGVybikpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGRpY3RfcCAodmFsdWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0ICh2YWx1ZSkgKChTdHJpbmcgXCJfYWR0XCIpKSkpKSkpKSB0aGVuIChsZXQgY3Rvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHBhdHRlcm4pKSkpIGluIGxldCBmaWVsZF9wYXR0ZXJucyA9IChyZXN0IChwYXR0ZXJuKSkgaW4gbGV0IGZpZWxkcyA9IChnZXQgKHZhbHVlKSAoKFN0cmluZyBcIl9maWVsZHNcIikpKSBpbiAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0ICh2YWx1ZSkgKChTdHJpbmcgXCJfY3RvclwiKSkpOyBjdG9yX25hbWVdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChmaWVsZF9wYXR0ZXJucykpOyAobGVuIChmaWVsZHMpKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBwYWlyIC0+IHN4X3RydXRoeSAoKG1hdGNoX3BhdHRlcm4gKChmaXJzdCAocGFpcikpKSAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgW2ZpZWxkX3BhdHRlcm5zOyBmaWVsZHNdKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZGljdF9wICh2YWx1ZSkpKSkgdGhlbiAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gayAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZ2V0IChwYXR0ZXJuKSAoaykpKSAoKGdldCAodmFsdWUpIChrKSkpIChlbnYpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW3BhdHRlcm5dKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAobGlzdF9wICh2YWx1ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbcGF0dGVybjsgKFN5bWJvbCBcIiZyZXN0XCIpXSkpKSkgdGhlbiAobGV0IHJlc3RfaWR4ID0gKHByaW1fY2FsbCBcImluZGV4LW9mXCIgW3BhdHRlcm47IChTeW1ib2wgXCImcmVzdFwiKV0pIGluIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuICh2YWx1ZSkpOyByZXN0X2lkeF0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBwYWlyIC0+IHN4X3RydXRoeSAoKG1hdGNoX3BhdHRlcm4gKChmaXJzdCAocGFpcikpKSAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgWyhwcmltX2NhbGwgXCJzbGljZVwiIFtwYXR0ZXJuOyAoTnVtYmVyIDAuMCk7IHJlc3RfaWR4XSk7IChwcmltX2NhbGwgXCJzbGljZVwiIFt2YWx1ZTsgKE51bWJlciAwLjApOyByZXN0X2lkeF0pXSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCByZXN0X25hbWUgPSAobnRoIChwYXR0ZXJuKSAoKHByaW1fY2FsbCBcIitcIiBbcmVzdF9pZHg7IChOdW1iZXIgMS4wKV0pKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChzeW1ib2xfbmFtZSAocmVzdF9uYW1lKSkpIChwcmltX2NhbGwgXCJzbGljZVwiIFt2YWx1ZTsgcmVzdF9pZHhdKSkpIGluIChCb29sIHRydWUpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxpc3RfcCAodmFsdWUpKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwYXR0ZXJuKSk7IChsZW4gKHZhbHVlKSldKSkpKSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGxldCBwYWlycyA9IChwcmltX2NhbGwgXCJ6aXBcIiBbcGF0dGVybjsgdmFsdWVdKSBpbiAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gcGFpciAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZmlyc3QgKHBhaXIpKSkgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgcGFpcnMpKSkpKSBlbHNlIChwcmltX2NhbGwgXCI9XCIgW3BhdHRlcm47IHZhbHVlXSkpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLW1hdGNoICopXG5hbmQgc3RlcF9zZl9tYXRjaCBhcmdzIGVudiBrb250ID1cbiAgKGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgY2xhdXNlcyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAobWF0Y2hfY2hlY2tfZXhoYXVzdGl2ZW5lc3MgdmFsJyBjbGF1c2VzIGVudikgaW4gKGxldCByZXN1bHQnID0gKG1hdGNoX2ZpbmRfY2xhdXNlICh2YWwnKSAoY2xhdXNlcykgKGVudikpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHJlc3VsdCcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIm1hdGNoOiBubyBjbGF1c2UgbWF0Y2hlZCBcIik7IChpbnNwZWN0ICh2YWwnKSldKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9yYWlzZV9ldmFsX2ZyYW1lIChlbnYpICgoQm9vbCBmYWxzZSkpKSkgKGtvbnQpKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgobnRoIChyZXN1bHQnKSAoKE51bWJlciAxLjApKSkpICgoZmlyc3QgKHJlc3VsdCcpKSkgKGtvbnQpKSkpKSlcblxuKCogbWF0Y2gtY2hlY2stZXhoYXVzdGl2ZW5lc3Mg4oCUIFN0ZXAgOCBoYW5kLXBhdGNoZWQgaW50byBzeF9yZWYubWwgKilcbmFuZCBtYXRjaF9jaGVja19leGhhdXN0aXZlbmVzcyB2YWwnIGNsYXVzZXMgZW52ID1cbiAgbGV0IGlzX2Vsc2VfcGF0IHAgPVxuICAgIG1hdGNoIHAgd2l0aFxuICAgIHwgU3ltYm9sIFwiX1wiIHwgU3ltYm9sIFwiZWxzZVwiIC0+IHRydWVcbiAgICB8IEtleXdvcmQgXCJlbHNlXCIgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBsZXQgY2xhdXNlX2lzX2Vsc2UgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBMaXN0IChwIDo6IF8pIC0+IGlzX2Vsc2VfcGF0IHBcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbGV0IGNsYXVzZV9jdG9yX25hbWUgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBMaXN0IChMaXN0IChTeW1ib2wgbiA6OiBfKSA6OiBfKSAtPiBTb21lIG5cbiAgICB8IF8gLT4gTm9uZVxuICBpblxuICBsZXQgdHlwZV9uYW1lX29wdCA9IG1hdGNoIHZhbCcgd2l0aFxuICAgIHwgQWR0VmFsdWUgYSAtPiBTb21lIGEuYXZfdHlwZVxuICAgIHwgRGljdCBkIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX2FkdFwiIHdpdGhcbiAgICAgICB8IFNvbWUgKEJvb2wgdHJ1ZSkgLT5cbiAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfdHlwZVwiIHdpdGhcbiAgICAgICAgICB8IFNvbWUgKFN0cmluZyBzKSAtPiBTb21lIHNcbiAgICAgICAgICB8IF8gLT4gTm9uZSlcbiAgICAgICB8IF8gLT4gTm9uZSlcbiAgICB8IF8gLT4gTm9uZVxuICBpblxuICBtYXRjaCB0eXBlX25hbWVfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgdHlwZV9uYW1lIC0+XG4gICAgICAgaWYgbm90IChzeF90cnV0aHkgKGVudl9oYXMgZW52IChTdHJpbmcgXCIqYWR0LXJlZ2lzdHJ5KlwiKSkpIHRoZW4gTmlsXG4gICAgICAgZWxzZVxuICAgICAgICAgbGV0IHJlZ2lzdHJ5ID0gZW52X2dldCBlbnYgKFN0cmluZyBcIiphZHQtcmVnaXN0cnkqXCIpIGluXG4gICAgICAgICBsZXQgcmVnaXN0ZXJlZCA9IG1hdGNoIHJlZ2lzdHJ5IHdpdGhcbiAgICAgICAgICAgfCBEaWN0IHIgLT5cbiAgICAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCByIHR5cGVfbmFtZSB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSAoTGlzdCBjdG9ycykgLT4gU29tZSBjdG9yc1xuICAgICAgICAgICAgICB8IF8gLT4gTm9uZSlcbiAgICAgICAgICAgfCBfIC0+IE5vbmUgaW5cbiAgICAgICAgIChtYXRjaCByZWdpc3RlcmVkIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTmlsXG4gICAgICAgICAgfCBTb21lIGN0b3JfdmFscyAtPlxuICAgICAgICAgICAgbGV0IGNsYXVzZXNfbGlzdCA9IG1hdGNoIGNsYXVzZXMgd2l0aCBMaXN0IHhzIC0+IHhzIHwgXyAtPiBbXSBpblxuICAgICAgICAgICAgaWYgTGlzdC5leGlzdHMgY2xhdXNlX2lzX2Vsc2UgY2xhdXNlc19saXN0IHRoZW4gTmlsXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjbGF1c2VfY3RvcnMgPSBMaXN0LmZpbHRlcl9tYXAgY2xhdXNlX2N0b3JfbmFtZSBjbGF1c2VzX2xpc3QgaW5cbiAgICAgICAgICAgICAgbGV0IHJlZ2lzdGVyZWRfbmFtZXMgPSBMaXN0LmZpbHRlcl9tYXAgKGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGN0b3JfdmFscyBpblxuICAgICAgICAgICAgICBsZXQgbWlzc2luZyA9IExpc3QuZmlsdGVyIChmdW4gYyAtPiBub3QgKExpc3QubWVtIGMgY2xhdXNlX2N0b3JzKSkgcmVnaXN0ZXJlZF9uYW1lcyBpblxuICAgICAgICAgICAgICBpZiBtaXNzaW5nID0gW10gdGhlbiBOaWxcbiAgICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICAgIGlmIG5vdCAoc3hfdHJ1dGh5IChlbnZfaGFzIGVudiAoU3RyaW5nIFwiKmFkdC13YXJuZWQqXCIpKSkgdGhlblxuICAgICAgICAgICAgICAgICAgaWdub3JlIChlbnZfYmluZCBlbnYgKFN0cmluZyBcIiphZHQtd2FybmVkKlwiKSAoRGljdCAoSGFzaHRibC5jcmVhdGUgNCkpKTtcbiAgICAgICAgICAgICAgICBsZXQgd2FybmVkID0gZW52X2dldCBlbnYgKFN0cmluZyBcIiphZHQtd2FybmVkKlwiKSBpblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0eXBlX25hbWUgXiBcInxcIiBeIFN0cmluZy5jb25jYXQgXCIsXCIgbWlzc2luZyBpblxuICAgICAgICAgICAgICAgIGxldCBhbHJlYWR5ID0gbWF0Y2ggd2FybmVkIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgRGljdCB3IC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHcga2V5IHdpdGggU29tZSAoQm9vbCB0cnVlKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHwgXyAtPiBmYWxzZSBpblxuICAgICAgICAgICAgICAgIGlmIGFscmVhZHkgdGhlbiBOaWxcbiAgICAgICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgICAgICAobWF0Y2ggd2FybmVkIHdpdGhcbiAgICAgICAgICAgICAgICAgICB8IERpY3QgdyAtPiBIYXNodGJsLnJlcGxhY2UgdyBrZXkgKEJvb2wgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICB8IF8gLT4gKCkpO1xuICAgICAgICAgICAgICAgICAgbGV0IG1zZyA9IFwiW3N4XSBtYXRjaDogbm9uLWV4aGF1c3RpdmUg4oCUIFwiIF4gdHlwZV9uYW1lIF4gXCI6IG1pc3NpbmcgXCIgXiBTdHJpbmcuY29uY2F0IFwiLCBcIiBtaXNzaW5nIGluXG4gICAgICAgICAgICAgICAgICBpZ25vcmUgKGhvc3Rfd2FybiAoU3RyaW5nIG1zZykpO1xuICAgICAgICAgICAgICAgICAgTmlsXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICAgIGVuZClcblxuKCogc3RlcC1zZi1oYW5kbGVyLWJpbmQgKilcbmFuZCBzdGVwX3NmX2hhbmRsZXJfYmluZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBoYW5kbGVyX3NwZWNzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBoYW5kbGVycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKHNwZWMpKSkgKGVudikpKSk7ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChzcGVjKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpXSkpIChzeF90b19saXN0IGhhbmRsZXJfc3BlY3MpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lIChoYW5kbGVycykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1yZXN0YXJ0LWNhc2UgKilcbmFuZCBzdGVwX3NmX3Jlc3RhcnRfY2FzZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBib2R5ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3RhcnRfc3BlY3MgPSAocmVzdCAoYXJncykpIGluIGxldCByZXN0YXJ0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyhpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChzcGVjKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgZWxzZSAoZmlyc3QgKHNwZWMpKSk7IChudGggKHNwZWMpICgoTnVtYmVyIDEuMCkpKTsgKG50aCAoc3BlYykgKChOdW1iZXIgMi4wKSkpXSkpIChzeF90b19saXN0IHJlc3RhcnRfc3BlY3MpKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzdGFydF9mcmFtZSAocmVzdGFydHMpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNpZ25hbCAqKVxuYW5kIHN0ZXBfc2Zfc2lnbmFsIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGNvbmRpdGlvbiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAoa29udF9maW5kX2hhbmRsZXIgKGtvbnQpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5oYW5kbGVkIGNvbmRpdGlvbjogXCIpOyAoaW5zcGVjdCAoY29uZGl0aW9uKSldKSkpKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChoYW5kbGVyX2ZuKSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoZW52KSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSAoZW52KSAoa29udCkpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWludm9rZS1yZXN0YXJ0ICopXG5hbmQgc3RlcF9zZl9pbnZva2VfcmVzdGFydCBhcmdzIGVudiBrb250ID1cbiAgKGxldCByZXN0YXJ0X25hbWUgPSAobGV0IHJuID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkpIGluIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocm4pKSkgdGhlbiAoc3ltYm9sX25hbWUgKHJuKSkgZWxzZSBybikpIGluIGxldCByZXN0YXJ0X2FyZyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZm91bmQgPSAoa29udF9maW5kX3Jlc3RhcnQgKGtvbnQpIChyZXN0YXJ0X25hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmb3VuZCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vIHJlc3RhcnQgbmFtZWQ6IFwiKTsgKGluc3BlY3QgKHJlc3RhcnRfbmFtZSkpXSkpKSkpIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAoZm91bmQpKSBpbiBsZXQgcmVzdGFydF9mcmFtZSA9IChudGggKGZvdW5kKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHJlc3Rfa29udCA9IChudGggKGZvdW5kKSAoKE51bWJlciAyLjApKSkgaW4gKGxldCBwYXJhbXMgPSAobnRoIChlbnRyeSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKG50aCAoZW50cnkpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcmVzdGFydF9lbnYgPSAoZW52X2V4dGVuZCAoKGdldCAocmVzdGFydF9mcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhcmFtcykpKSkpKSkgdGhlbiAoZW52X2JpbmQgcmVzdGFydF9lbnYgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhcmFtcykpKSByZXN0YXJ0X2FyZykgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChyZXN0YXJ0X2VudikgKHJlc3Rfa29udCkpKSkpKSlcblxuKCogc3RlcC1zZi1pZiAqKVxuYW5kIHN0ZXBfc2ZfaWYgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9pZl9mcmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXdoZW4gKilcbmFuZCBzdGVwX3NmX3doZW4gYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV93aGVuX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWJlZ2luICopXG5hbmQgc3RlcF9zZl9iZWdpbiBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWxldCAqKVxuYW5kIHN0ZXBfc2ZfbGV0IGFyZ3MgZW52IGtvbnQgPVxuICBsZXQgcGFpcnMgPSByZWYgTmlsIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGFyZ3MpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbmFtZWRfbGV0IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYmluZGluZ3MpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9iaW5kaW5nID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKGZpcnN0IChiaW5kaW5ncykpIGVsc2UgKExpc3QgWyhmaXJzdCAoYmluZGluZ3MpKTsgKG50aCAoYmluZGluZ3MpICgoTnVtYmVyIDEuMCkpKV0pKSBpbiBsZXQgcmVzdF9iaW5kaW5ncyA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChyZXN0IChiaW5kaW5ncykpIGVsc2UgKGxldCBwYWlycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIGkgLT4gKHBhaXJzIDo9IHN4X2FwcGVuZF9iICFwYWlycyAoTGlzdCBbKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtpOyAoTnVtYmVyIDIuMCldKSkpOyAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbaTsgKE51bWJlciAyLjApXSldKSkpXSk7IE5pbCkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAxLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpIGluICFwYWlycykpKSBpbiAobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChmaXJzdF9iaW5kaW5nKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2xldF9mcmFtZSAodm5hbWUpIChyZXN0X2JpbmRpbmdzKSAoYm9keSkgKGxvY2FsKSkpIChrb250KSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lICopXG5hbmQgc3RlcF9zZl9kZWZpbmUgYXJncyBlbnYga29udCA9XG4gICgqIERlc3VnYXIgc2hvcnRoYW5kOiAoZGVmaW5lIChuYW1lIHAgLi4uKSBib2R5KSAtPiAoZGVmaW5lIG5hbWUgKGZuIChwIC4uLikgYm9keSkpICopXG4gIGxldCBhcmdzID0gbWF0Y2ggZmlyc3QgYXJncyB3aXRoXG4gICAgfCBMaXN0IChmbl9uYW1lIDo6IHBhcmFtcykgLT5cbiAgICAgIGxldCBib2R5X3BhcnRzID0gc3hfdG9fbGlzdCAocmVzdCBhcmdzKSBpblxuICAgICAgbGV0IGxhbWJkYV9leHByID0gTGlzdCAoU3ltYm9sIFwiZm5cIiA6OiBMaXN0IHBhcmFtcyA6OiBib2R5X3BhcnRzKSBpblxuICAgICAgTGlzdCBbZm5fbmFtZTsgbGFtYmRhX2V4cHJdXG4gICAgfCBfIC0+IGFyZ3NcbiAgaW5cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBoYXNfZWZmZWN0cyA9IChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgNC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImVmZmVjdHNcIildKSkpIGluIGxldCB2YWxfaWR4ID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciA0LjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiZWZmZWN0c1wiKV0pKSkpIHRoZW4gKE51bWJlciAzLjApIGVsc2UgKE51bWJlciAxLjApKSBpbiBsZXQgZWZmZWN0X2xpc3QgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDQuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJlZmZlY3RzXCIpXSkpKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKHZhbF9pZHgpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2RlZmluZV9mcmFtZSAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoZW52KSAoaGFzX2VmZmVjdHMpIChlZmZlY3RfbGlzdCkpKSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2Ytc2V0ISAqKVxuYW5kIHN0ZXBfc2Zfc2V0X2IgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2V0X2ZyYW1lICgoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtYW5kICopXG5hbmQgc3RlcF9zZl9hbmQgYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9hbmRfZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLW9yICopXG5hbmQgc3RlcF9zZl9vciBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9vcl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2YtY29uZCAqKVxuYW5kIHN0ZXBfc2ZfY29uZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBzY2hlbWVfcCA9IChjb25kX3NjaGVtZV9wIChhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoc2NoZW1lX3ApIHRoZW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgY2xhdXNlID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHRlc3QgPSAoZmlyc3QgKGNsYXVzZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKHRlc3QpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChhcmdzKSAoZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICh0ZXN0KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAoYXJncykgKGVudikgKChCb29sIGZhbHNlKSkpKSAoa29udCkpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1maXJzdCAqKVxuYW5kIHN0ZXBfc2ZfdGhyZWFkX2ZpcnN0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSAoKFN0cmluZyBcImZpcnN0XCIpKSAoTmlsKSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1sYXN0ICopXG5hbmQgc3RlcF9zZl90aHJlYWRfbGFzdCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikgKChTdHJpbmcgXCJsYXN0XCIpKSAoTmlsKSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1hcyAqKVxuYW5kIHN0ZXBfc2ZfdGhyZWFkX2FzIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGluaXQgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgbmFtZSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgZm9ybXMgPSAocmVzdCAoKHJlc3QgKGFyZ3MpKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoaW5pdCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoZm9ybXMpIChlbnYpICgoU3RyaW5nIFwiYXNcIikpIChuYW1lKSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1sYW1iZGEgKilcbmFuZCBzdGVwX3NmX2xhbWJkYSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbGFtYmRhIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSlcblxuKCogc3RlcC1zZi1zY29wZSAqKVxuYW5kIHN0ZXBfc2Zfc2NvcGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3RfYXJncyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgdmFsJyA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keSA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9hcmdzKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh2YWwnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0X2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5IDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0X2FyZ3M7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5IDo9IHJlc3RfYXJnczsgTmlsKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICghYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKCFib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9hY2NfZnJhbWUgKG5hbWUpICghdmFsJykgKChyZXN0ICghYm9keSkpKSAoZW52KSkpIChrb250KSkpKSkpKVxuXG4oKiBzdGVwLXNmLXByb3ZpZGUgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKHZhbCcpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChuYW1lKSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9wcm92aWRlX2ZyYW1lIChuYW1lKSAodmFsJykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpXG5cbigqIHN0ZXAtc2YtY29udGV4dCAqKVxuYW5kIHN0ZXBfc2ZfY29udGV4dCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgZGVmYXVsdF92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIE5pbCkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9wcm92aWRlIChrb250KSAobmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKCFfYmluZF90cmFja2luZ19yZWYpIHRoZW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgWyFfYmluZF90cmFja2luZ19yZWY7IG5hbWVdKSkpKSkpIHRoZW4gKF9iaW5kX3RyYWNraW5nX3JlZiA6PSBzeF9hcHBlbmRfYiAhX2JpbmRfdHJhY2tpbmdfcmVmIG5hbWU7IE5pbCkgZWxzZSBOaWwpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgobGV0IHN2ID0gKHNjb3BlX3BlZWsgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzdikpKSB0aGVuIChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkgZWxzZSBkZWZhdWx0X3ZhbCkgZWxzZSBzdikpKSAoZW52KSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1wZWVrICopXG5hbmQgc3RlcF9zZl9wZWVrIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBkZWZhdWx0X3ZhbCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZnJhbWUgPSAoa29udF9maW5kX3Byb3ZpZGUgKGtvbnQpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5IChmcmFtZSkgdGhlbiAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCJwZWVrXCIpKSkpIHRoZW4gKHN4X2FwcGx5IChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwicGVla1wiKSkpIChMaXN0IFtuYW1lOyBkZWZhdWx0X3ZhbF0pKSBlbHNlIGRlZmF1bHRfdmFsKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcHJvdmlkZSEgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGVfYiBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Byb3ZpZGVfc2V0X2ZyYW1lIChuYW1lKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1lbWl0ICopXG5hbmQgc3RlcF9zZl9lbWl0IGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9zY29wZV9hY2MgKGtvbnQpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZnJhbWUgKFN0cmluZyBcImVtaXR0ZWRcIikgKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSk7IChMaXN0IFt2YWwnXSldKSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwic2NvcGUtZW1pdCFcIikpKSkgdGhlbiAoc3hfYXBwbHkgKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCJzY29wZS1lbWl0IVwiKSkpIChMaXN0IFtuYW1lOyB2YWwnXSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1lbWl0dGVkICopXG5hbmQgc3RlcF9zZl9lbWl0dGVkIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfc2NvcGVfYWNjIChrb250KSAobmFtZSkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpIHRoZW4gKHN4X2FwcGx5IChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpIChMaXN0IFtuYW1lXSkpIGVsc2UgKExpc3QgW10pKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcmVzZXQgKilcbmFuZCBzdGVwX3NmX3Jlc2V0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzZXRfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1zaGlmdCAqKVxuYW5kIHN0ZXBfc2Zfc2hpZnQgYXJncyBlbnYga29udCA9XG4gIChsZXQga19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBib2R5ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBjYXB0dXJlZF9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkID0gKGZpcnN0IChjYXB0dXJlZF9yZXN1bHQpKSBpbiBsZXQgcmVzdF9rb250ID0gKG50aCAoY2FwdHVyZWRfcmVzdWx0KSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBrID0gKG1ha2VfY2VrX2NvbnRpbnVhdGlvbiAoY2FwdHVyZWQpIChyZXN0X2tvbnQpKSBpbiAobGV0IHNoaWZ0X2VudiA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgc2hpZnRfZW52IChzeF90b19zdHJpbmcga19uYW1lKSBrKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoc2hpZnRfZW52KSAocmVzdF9rb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVyZWYgKilcbmFuZCBzdGVwX3NmX2RlcmVmIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGVyZWZfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogY2VrLWNhbGwgKilcbmFuZCBjZWtfY2FsbCBmIGFyZ3MgPVxuICAobGV0IGEgPSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChhcmdzKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgYXJncykgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX2xhbWJkYSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfY2FsbGFibGUgKGYpKSkpIHRoZW4gKGNla19ydW4gKChjb250aW51ZV93aXRoX2NhbGwgKGYpIChhKSAoKG1ha2VfZW52ICgpKSkgKGEpICgoTGlzdCBbXSkpKSkpIGVsc2UgTmlsKSkpXG5cbigqIHJlYWN0aXZlLXNoaWZ0LWRlcmVmICopXG5hbmQgcmVhY3RpdmVfc2hpZnRfZGVyZWYgc2lnJyBlbnYga29udCA9XG4gIChsZXQgc2Nhbl9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkX2ZyYW1lcyA9IChmaXJzdCAoc2Nhbl9yZXN1bHQpKSBpbiBsZXQgcmVzZXRfZnJhbWUgPSAobnRoIChzY2FuX3Jlc3VsdCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCByZW1haW5pbmdfa29udCA9IChudGggKHNjYW5fcmVzdWx0KSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHVwZGF0ZV9mbiA9IChnZXQgKHJlc2V0X2ZyYW1lKSAoKFN0cmluZyBcInVwZGF0ZS1mblwiKSkpIGluIChsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN1Yl9kaXNwb3NlcnMgOj0gKExpc3QgW10pOyBOaWwpKSBpbiAobGV0IG5ld19yZXNldCA9IChtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIChlbnYpICh1cGRhdGVfZm4pICgoQm9vbCBmYWxzZSkpKSBpbiBsZXQgbmV3X2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW25ld19yZXNldF0pOyByZW1haW5pbmdfa29udF0pIGluICh3aXRoX2lzbGFuZF9zY29wZSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2RdIC0+IChmdW4gZCAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKHN1Yl9kaXNwb3NlcnMgOj0gc3hfYXBwZW5kX2IgIXN1Yl9kaXNwb3NlcnMgZDsgTmlsKSkgZCB8IF8gLT4gTmlsKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChuZXdfa29udCkpKSkpICgpKSkpKSkpKSkgKCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX2FkZF9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlZ2lzdGVyX2luX3Njb3BlICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX3JlbW92ZV9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkpICgpKSkpKSkgaW4gKGxldCBpbml0aWFsX2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW3Jlc2V0X2ZyYW1lXSk7IHJlbWFpbmluZ19rb250XSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChpbml0aWFsX2tvbnQpKSkpKSkpKVxuXG4oKiBzdGVwLWV2YWwtY2FsbCAqKVxuYW5kIHN0ZXBfZXZhbF9jYWxsIGhlYWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgaG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChoZWFkKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoaGVhZCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoTmlsKSAoKExpc3QgW10pKSAoYXJncykgKGVudikgKGFyZ3MpIChobmFtZSkpKSAoa29udCkpKSkpXG5cbigqIGhvLWZvcm0tbmFtZT8gKilcbmFuZCBob19mb3JtX25hbWVfcCBuYW1lID1cbiAgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpKSkpKSlcblxuKCogaG8tZm4/ICopXG5hbmQgaG9fZm5fcCB2ID1cbiAgKGxldCBfb3IgPSAoaXNfY2FsbGFibGUgKHYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2xhbWJkYSAodikpKVxuXG4oKiBoby1zd2FwLWFyZ3MgKilcbmFuZCBob19zd2FwX2FyZ3MgaG9fdHlwZSBldmFsZWQgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBhID0gKGZpcnN0IChldmFsZWQpKSBpbiBsZXQgYiA9IChudGggKGV2YWxlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGhvX2ZuX3AgKGEpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2ZuX3AgKGIpKSkpIHRoZW4gKExpc3QgW2I7IChudGggKGV2YWxlZCkgKChOdW1iZXIgMi4wKSkpOyBhXSkgZWxzZSBldmFsZWQpKSBlbHNlIChsZXQgYSA9IChmaXJzdCAoZXZhbGVkKSkgaW4gbGV0IGIgPSAobnRoIChldmFsZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChob19mbl9wIChhKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChob19mbl9wIChiKSkpKSB0aGVuIChMaXN0IFtiOyBhXSkgZWxzZSBldmFsZWQpKSlcblxuKCogaG8tc2V0dXAtZGlzcGF0Y2ggKilcbmFuZCBob19zZXR1cF9kaXNwYXRjaCBob190eXBlIGV2YWxlZCBlbnYga29udCA9XG4gIChsZXQgb3JkZXJlZCA9IChob19zd2FwX2FyZ3MgKGhvX3R5cGUpIChldmFsZWQpKSBpbiAobGV0IGYgPSAoZmlyc3QgKG9yZGVyZWQpKSBpbiAobGV0IF9tYXRjaF92YWwgPSBob190eXBlIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChvcmRlcmVkKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChsZXQgY29sbHMgPSAocmVzdCAob3JkZXJlZCkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChMaXN0LmV4aXN0cyAoZnVuIGMgLT4gc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYykpKSkgKHN4X3RvX2xpc3QgY29sbHMpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGhlYWRzID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAoZmlyc3QgKGMpKSkgKHN4X3RvX2xpc3QgY29sbHMpKSkgaW4gbGV0IHRhaWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAocmVzdCAoYykpKSAoc3hfdG9fbGlzdCBjb2xscykpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChmKSAoaGVhZHMpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9tdWx0aV9tYXBfZnJhbWUgKGYpICh0YWlscykgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSkgZWxzZSAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gc2VxX3RvX2xpc3QgKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhOdW1iZXIgMC4wKTsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2ZpbHRlcl9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpICgoZmlyc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGluaXQgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAyLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGluaXQpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW2luaXQ7IChmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9yZWR1Y2VfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBjb2xsID0gc2VxX3RvX2xpc3QgKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2V2ZXJ5X2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgY29sbCA9IHNlcV90b19saXN0IChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKGNvbGwpKV0pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZm9yX2VhY2hfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBITyB0eXBlOiBcIik7IGhvX3R5cGVdKSkpKSkpKSkpKSkpKSkpXG5cbigqIHN0ZXAtaG8tbWFwICopXG5hbmQgc3RlcF9ob19tYXAgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcIm1hcFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tbWFwLWluZGV4ZWQgKilcbmFuZCBzdGVwX2hvX21hcF9pbmRleGVkIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZmlsdGVyICopXG5hbmQgc3RlcF9ob19maWx0ZXIgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImZpbHRlclwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tcmVkdWNlICopXG5hbmQgc3RlcF9ob19yZWR1Y2UgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcInJlZHVjZVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tc29tZSAqKVxuYW5kIHN0ZXBfaG9fc29tZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwic29tZVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZXZlcnkgKilcbmFuZCBzdGVwX2hvX2V2ZXJ5IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJldmVyeVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZm9yLWVhY2ggKilcbmFuZCBzdGVwX2hvX2Zvcl9lYWNoIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJmb3ItZWFjaFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtY29udGludWUgKilcbmFuZCBzdGVwX2NvbnRpbnVlIHN0YXRlID1cbiAgKGxldCB2YWx1ZSA9IChjZWtfdmFsdWUgKHN0YXRlKSkgaW4gbGV0IGVudiA9IChjZWtfZW52IChzdGF0ZSkpIGluIGxldCBrb250ID0gKGNla19rb250IChzdGF0ZSkpIGluIChpZiBzeF90cnV0aHkgKChrb250X2VtcHR5X3AgKGtvbnQpKSkgdGhlbiBzdGF0ZSBlbHNlIChsZXQgZnJhbWUgPSAoa29udF90b3AgKGtvbnQpKSBpbiBsZXQgcmVzdF9rID0gKGtvbnRfcG9wIChrb250KSkgaW4gbGV0IGZ0ID0gKGZyYW1lX3R5cGUgKGZyYW1lKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gZnQgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ0aGVuXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIndoZW5cIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSB2YWx1ZSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKHZhbHVlKSkpKSkpKSkgdGhlbiAobGV0IGJvZHkgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJib2R5XCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keSkpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYm9keSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGJvZHkpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKHJlc3RfaykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJiZWdpblwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgbG9jYWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHRfYmluZGluZyA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAobmV4dF9iaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2JpbmRpbmcpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfbGV0X2ZyYW1lICh2bmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGJvZHkpIChsb2NhbCkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IGhhc19lZmZlY3RzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaGFzLWVmZmVjdHNcIikpKSBpbiBsZXQgZWZmZWN0X2xpc3QgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlZmZlY3QtbGlzdFwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19sYW1iZGEgKHZhbHVlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX25pbCAoKGxhbWJkYV9uYW1lICh2YWx1ZSkpKSkpKSB0aGVuIChzZXRfbGFtYmRhX25hbWUgdmFsdWUgKHN4X3RvX3N0cmluZyBuYW1lKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZmVudiAoc3hfdG9fc3RyaW5nIG5hbWUpIHZhbHVlKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoaGFzX2VmZmVjdHMpIHRoZW4gKGxldCBlZmZlY3RfbmFtZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKGUpKSBlbHNlIGUpKSAoc3hfdG9fbGlzdCBlZmZlY3RfbGlzdCkpKSBpbiBsZXQgZWZmZWN0X2FubnMgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZmVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpKSB0aGVuIChlbnZfZ2V0IChmZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkgZWxzZSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBlZmZlY3RfYW5ucyBuYW1lIGVmZmVjdF9uYW1lcykpIGluIChlbnZfYmluZCBmZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSBlZmZlY3RfYW5ucykpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1mb3JlaWduXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2xhbWJkYSAodmFsdWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaXNfbmlsICgobGFtYmRhX25hbWUgKHZhbHVlKSkpKSkpIHRoZW4gKHNldF9sYW1iZGFfbmFtZSB2YWx1ZSAoc3hfdG9fc3RyaW5nIG5hbWUpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBmZW52IChzeF90b19zdHJpbmcgbmFtZSkgdmFsdWUpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfc2V0IGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImFuZFwiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX2FuZF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm9yXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGVudikgKHJlc3RfaykpIGVsc2UgKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCBmYWxzZSkpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX29yX2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgc2NoZW1lX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChzY2hlbWVfcCkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobGV0IGNsYXVzZSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoY2xhdXNlKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiPT5cIildKSkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAyLjApKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9hcnJvd19mcmFtZSAodmFsdWUpIChmZW52KSkpIChyZXN0X2spKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSkpIGVsc2UgKGxldCBuZXh0X2NsYXVzZXMgPSAocmVzdCAocmVtYWluaW5nKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKG5leHRfY2xhdXNlcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X2NsYXVzZSA9IChmaXJzdCAobmV4dF9jbGF1c2VzKSkgaW4gbGV0IG5leHRfdGVzdCA9IChmaXJzdCAobmV4dF9jbGF1c2UpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dF9jbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAobmV4dF90ZXN0KSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKG5leHRfY2xhdXNlcykgKGZlbnYpICgoQm9vbCB0cnVlKSkpKSAocmVzdF9rKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChyZW1haW5pbmcpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dCA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZW1haW5pbmc7IChOdW1iZXIgMi4wKTsgKGxlbiAocmVtYWluaW5nKSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChuZXh0KSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dCkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlIChuZXh0X3Rlc3QpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAobmV4dCkgKGZlbnYpICgoQm9vbCBmYWxzZSkpKSkgKHJlc3RfaykpKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNhc2VcIildKSkgdGhlbiAobGV0IG1hdGNoX3ZhbCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm1hdGNoLXZhbFwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKG1hdGNoX3ZhbCkpKSB0aGVuIChzZl9jYXNlX3N0ZXBfbG9vcCAodmFsdWUpIChyZW1haW5pbmcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoc2ZfY2FzZV9zdGVwX2xvb3AgKG1hdGNoX3ZhbCkgKHJlbWFpbmluZykgKGZlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInRocmVhZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgbW9kZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV4dHJhXCIpKSkgaW4gbGV0IGJpbmRfbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgZm9ybSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHJlc3RfZm9ybXMgPSAocmVzdCAocmVtYWluaW5nKSkgaW4gbGV0IG5ld19rb250ID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKChyZXN0IChyZW1haW5pbmcpKSkpKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikgKG1vZGUpIChiaW5kX25hbWUpKSkgKHJlc3RfaykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFttb2RlOyAoU3RyaW5nIFwiYXNcIildKSkgdGhlbiAobGV0IG5ld19lbnYgPSAoZW52X2V4dGVuZCAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBuZXdfZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChiaW5kX25hbWUpKSkgdmFsdWUpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGZvcm0pIChuZXdfZW52KSAobmV3X2tvbnQpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChmb3JtKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGZvcm0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2Zvcm1fbmFtZV9wICgoc3ltYm9sX25hbWUgKChmaXJzdCAoZm9ybSkpKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChjb25zICgoZmlyc3QgKGZvcm0pKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pKSAoKHJlc3QgKGZvcm0pKSkpKSkpIChmZW52KSAobmV3X2tvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW21vZGU7IChTdHJpbmcgXCJsYXN0XCIpXSkpIHRoZW4gKGxldCByZXN1bHQnID0gKHRocmVhZF9pbnNlcnRfYXJnX2xhc3QgKGZvcm0pICh2YWx1ZSkgKGZlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9mb3JtcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV90aHJlYWRfZnJhbWUgKHJlc3RfZm9ybXMpIChmZW52KSAobW9kZSkgKGJpbmRfbmFtZSkpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGxldCByZXN1bHQnID0gKHRocmVhZF9pbnNlcnRfYXJnIChmb3JtKSAodmFsdWUpIChmZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfZm9ybXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChyZXN0X2Zvcm1zKSAoZmVudikgKG1vZGUpIChiaW5kX25hbWUpKSkgKHJlc3RfaykpKSkpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJhcmdcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IGV2YWxlZCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCByYXdfYXJncyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJhdy1hcmdzXCIpKSkgaW4gbGV0IGhuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaGVhZC1uYW1lXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBobmFtZSkpIHRoZW4gKHN0cmljdF9jaGVja19hcmdzIChobmFtZSkgKChMaXN0IFtdKSkpIGVsc2UgTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChjb250aW51ZV93aXRoX2NhbGwgKHZhbHVlKSAoKExpc3QgW10pKSAoZmVudikgKHJhd19hcmdzKSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYXJnX2ZyYW1lICh2YWx1ZSkgKChMaXN0IFtdKSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyYXdfYXJncykgKGhuYW1lKSkpIChyZXN0X2spKSkpKSkgZWxzZSAobGV0IG5ld19ldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2V2YWxlZDsgKExpc3QgW3ZhbHVlXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gIV9zdHJpY3RfcmVmIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIGhuYW1lKSkgdGhlbiAoc3RyaWN0X2NoZWNrX2FyZ3MgKGhuYW1lKSAobmV3X2V2YWxlZCkpIGVsc2UgTmlsKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKG5ld19ldmFsZWQpIChmZW52KSAocmF3X2FyZ3MpIChyZXN0X2spKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYXJnX2ZyYW1lIChmKSAobmV3X2V2YWxlZCkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyYXdfYXJncykgKGhuYW1lKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkaWN0XCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbGFzdF9yZXN1bHQgPSAobGFzdCAocmVzdWx0cykpIGluIGxldCBjb21wbGV0ZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN1bHRzOyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCJkZWNcIiBbKGxlbiAocmVzdWx0cykpXSldKTsgKExpc3QgWyhMaXN0IFsoZmlyc3QgKGxhc3RfcmVzdWx0KSk7IHZhbHVlXSldKV0pIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobGV0IGQgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZCAoZmlyc3QgKHBhaXIpKSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSkgKHN4X3RvX2xpc3QgY29tcGxldGVkKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChkKSAoZmVudikgKHJlc3RfaykpKSkgZWxzZSAobGV0IG5leHRfZW50cnkgPSAoZmlyc3QgKHJlbWFpbmluZykpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dF9lbnRyeSkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2RpY3RfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbY29tcGxldGVkOyAoTGlzdCBbKExpc3QgWyhmaXJzdCAobmV4dF9lbnRyeSkpXSldKV0pKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaG8tc2V0dXBcIildKSkgdGhlbiAobGV0IGhvX3R5cGUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJoby10eXBlXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpOyAoTGlzdCBbdmFsdWVdKV0pIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChob19zZXR1cF9kaXNwYXRjaCAoaG9fdHlwZSkgKGV2YWxlZCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoaG9fdHlwZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGV2YWxlZCkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZXNldFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZXJlZlwiKV0pKSB0aGVuIChsZXQgdmFsJyA9IHZhbHVlIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfc2lnbmFsICh2YWwnKSkpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsJykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChoYXNfcmVhY3RpdmVfcmVzZXRfZnJhbWVfcCAocmVzdF9rKSkpIHRoZW4gKHJlYWN0aXZlX3NoaWZ0X2RlcmVmICh2YWwnKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGxldCBjdHggPSAoc3hfY29udGV4dCAoKFN0cmluZyBcInN4LXJlYWN0aXZlXCIpKSAoTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoY3R4KSB0aGVuIChsZXQgZGVwX2xpc3QgPSByZWYgKChnZXQgKGN0eCkgKChTdHJpbmcgXCJkZXBzXCIpKSkpIGluIGxldCBub3RpZnlfZm4gPSAoZ2V0IChjdHgpICgoU3RyaW5nIFwibm90aWZ5XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgWyFkZXBfbGlzdDsgdmFsJ10pKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZGVwX2xpc3QgOj0gc3hfYXBwZW5kX2IgIWRlcF9saXN0IHZhbCc7IE5pbCkpIGluIChzaWduYWxfYWRkX3N1Yl9iICh2YWwnKSAobm90aWZ5X2ZuKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlICh2YWwnKSkpIChmZW52KSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKGxldCB1cGRhdGVfZm4gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ1cGRhdGUtZm5cIikpKSBpbiBsZXQgZmlyc3RfcCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpcnN0LXJlbmRlclwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHVwZGF0ZV9mbiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKGZpcnN0X3ApKSkpKSkgdGhlbiAoY2VrX2NhbGwgKHVwZGF0ZV9mbikgKChMaXN0IFt2YWx1ZV0pKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9mcmFtZSAobmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkgZWxzZSAobGV0IG5ld19mcmFtZSA9IChtYWtlX3Byb3ZpZGVfZnJhbWUgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgbmV3X2ZyYW1lIChTdHJpbmcgXCJzdWJzY3JpYmVyc1wiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzdWJzY3JpYmVyc1wiKSkpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKG5ld19mcmFtZSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImJpbmRcIildKSkgdGhlbiAobGV0IHRyYWNrZWQgPSAhX2JpbmRfdHJhY2tpbmdfcmVmIGluIGxldCBib2R5ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYm9keVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IHByZXYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJwcmV2LXRyYWNraW5nXCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKF9iaW5kX3RyYWNraW5nX3JlZiA6PSBwcmV2OyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZmlyZV9rb250XSAtPiAoZnVuIGZpcmVfa29udCAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZmVudikgKChMaXN0IFtdKSkpKSkpIGZpcmVfa29udCB8IF8gLT4gTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIG5hbWUgLT4gaWdub3JlICgobGV0IGV4aXN0aW5nID0gKGdldCAoIV9wcm92aWRlX3N1YnNjcmliZXJzX3JlZikgKG5hbWUpKSBpbiAoc3hfZGljdF9zZXRfYiAhX3Byb3ZpZGVfc3Vic2NyaWJlcnNfcmVmIG5hbWUgKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoaWYgc3hfdHJ1dGh5IChleGlzdGluZykgdGhlbiBleGlzdGluZyBlbHNlIChMaXN0IFtdKSk7IChMaXN0IFtzdWJzY3JpYmVyXSldKSkpKSkgKHN4X3RvX2xpc3QgdHJhY2tlZCk7IE5pbCkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInByb3ZpZGUtc2V0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IHRhcmdldCA9IChrb250X2ZpbmRfcHJvdmlkZSAocmVzdF9rKSAobmFtZSkpIGluIChsZXQgb2xkX3ZhbCA9IChpZiBzeF90cnV0aHkgKHRhcmdldCkgdGhlbiAoZ2V0ICh0YXJnZXQpICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIChzY29wZV9wZWVrIChuYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKHRhcmdldCkgdGhlbiAoc3hfZGljdF9zZXRfYiB0YXJnZXQgKFN0cmluZyBcInZhbHVlXCIpIHZhbHVlKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKG5hbWUpICh2YWx1ZSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29sZF92YWw7IHZhbHVlXSkpKSkpKSB0aGVuIChmaXJlX3Byb3ZpZGVfc3Vic2NyaWJlcnMgKG5hbWUpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2NvcGUtYWNjXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChsZXQgbmV3X2ZyYW1lID0gKG1ha2Vfc2NvcGVfYWNjX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG5ld19mcmFtZSAoU3RyaW5nIFwiZW1pdHRlZFwiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpKSBpbiBuZXdfZnJhbWUpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBpbmRleGVkID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaW5kZXhlZFwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCBuZXdfcmVzdWx0cyA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbcmVzdWx0czsgKExpc3QgW3ZhbHVlXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChuZXdfcmVzdWx0cykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgY2FsbF9hcmdzID0gKGlmIHN4X3RydXRoeSAoaW5kZXhlZCkgdGhlbiAoTGlzdCBbKGxlbiAobmV3X3Jlc3VsdHMpKTsgKGZpcnN0IChyZW1haW5pbmcpKV0pIGVsc2UgKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgaW4gbGV0IG5leHRfZnJhbWUgPSAoaWYgc3hfdHJ1dGh5IChpbmRleGVkKSB0aGVuIChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpIChmZW52KSkgZWxzZSAobWFrZV9tYXBfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChuZXdfcmVzdWx0cykgKGZlbnYpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKGNhbGxfYXJncykgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoIChuZXh0X2ZyYW1lKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZmlsdGVyXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgY3VycmVudF9pdGVtID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiY3VycmVudC1pdGVtXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0IG5ld19yZXN1bHRzID0gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtyZXN1bHRzOyAoTGlzdCBbY3VycmVudF9pdGVtXSldKSBlbHNlIHJlc3VsdHMpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZmlsdGVyX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW3ZhbHVlOyAoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVkdWNlX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2Zvcl9lYWNoX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9ldmVyeV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVzdGFydFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzaWduYWwtcmV0dXJuXCIpXSkpIHRoZW4gKGxldCBzYXZlZF9rb250ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwic2F2ZWQta29udFwiKSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHNhdmVkX2tvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29tcC10cmFjZVwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjb25kLWFycm93XCIpXSkpIHRoZW4gKGxldCB0ZXN0X3ZhbHVlID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibWF0Y2gtdmFsXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoY29udGludWVfd2l0aF9jYWxsICh2YWx1ZSkgKChMaXN0IFt0ZXN0X3ZhbHVlXSkpIChmZW52KSAoKExpc3QgW3Rlc3RfdmFsdWVdKSkgKHJlc3RfaykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ3aW5kLWFmdGVyXCIpXSkpIHRoZW4gKGxldCBhZnRlcl90aHVuayA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImFmdGVyLXRodW5rXCIpKSkgaW4gbGV0IHdpbmRlcnNfbGVuID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwid2luZGVycy1sZW5cIikpKSBpbiBsZXQgYm9keV9yZXN1bHQgPSB2YWx1ZSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKCFfd2luZGVyc19yZWYpKTsgd2luZGVyc19sZW5dKSkgdGhlbiAoX3dpbmRlcnNfcmVmIDo9IChyZXN0ICghX3dpbmRlcnNfcmVmKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChhZnRlcl90aHVuaykgKChMaXN0IFtdKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV93aW5kX3JldHVybl9mcmFtZSAoYm9keV9yZXN1bHQpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwid2luZC1yZXR1cm5cIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHktcmVzdWx0XCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJhaXNlLWV2YWxcIildKSkgdGhlbiAobGV0IGNvbmRpdGlvbiA9IHZhbHVlIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IGNvbnRpbnVhYmxlX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiBsZXQgdW53aW5kX3Jlc3VsdCA9IChrb250X3Vud2luZF90b19oYW5kbGVyIChyZXN0X2spIChjb25kaXRpb24pKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChnZXQgKHVud2luZF9yZXN1bHQpICgoU3RyaW5nIFwiaGFuZGxlclwiKSkpIGluIGxldCB1bndvdW5kX2sgPSAoZ2V0ICh1bndpbmRfcmVzdWx0KSAoKFN0cmluZyBcImtvbnRcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IHVud291bmRfazsgTmlsKSkgaW4gKGhvc3RfZXJyb3IgKChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuaGFuZGxlZCBleGNlcHRpb246IFwiKTsgKGluc3BlY3QgKGNvbmRpdGlvbikpXSkpKSkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoaGFuZGxlcl9mbikgKChMaXN0IFtjb25kaXRpb25dKSkgKGZlbnYpICgoTGlzdCBbY29uZGl0aW9uXSkpICgoaWYgc3hfdHJ1dGh5IChjb250aW51YWJsZV9wKSB0aGVuIChrb250X3B1c2ggKChtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUgKGZlbnYpICh1bndvdW5kX2spKSkgKHVud291bmRfaykpIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZ3VhcmRfZnJhbWUgKGZlbnYpICh1bndvdW5kX2spKSkgKHVud291bmRfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmFpc2UtZ3VhcmRcIildKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoX2xhc3RfZXJyb3Jfa29udF9yZWYgOj0gcmVzdF9rOyBOaWwpKSBpbiAoaG9zdF9lcnJvciAoKFN0cmluZyBcImV4Y2VwdGlvbiBoYW5kbGVyIHJldHVybmVkIGZyb20gbm9uLWNvbnRpbnVhYmxlIHJhaXNlXCIpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm11bHRpLW1hcFwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IG5ld19yZXN1bHRzID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZXN1bHRzXCIpKSk7IChMaXN0IFt2YWx1ZV0pXSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGVtcHR5X3AgKGMpKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBoZWFkcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKGZpcnN0IChjKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSBpbiBsZXQgdGFpbHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChyZXN0IChjKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChmKSAoaGVhZHMpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfbXVsdGlfbWFwX2ZyYW1lIChmKSAodGFpbHMpIChuZXdfcmVzdWx0cykgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FsbGNjXCIpXSkpIHRoZW4gKGxldCBrID0gKG1ha2VfY2FsbGNjX2NvbnRpbnVhdGlvbiAocmVzdF9rKSAoKGxlbiAoIV93aW5kZXJzX3JlZikpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAodmFsdWUpICgoTGlzdCBba10pKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoTGlzdCBba10pKSAocmVzdF9rKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInZtLXJlc3VtZVwiKV0pKSB0aGVuIChsZXQgcmVzdW1lX2ZuID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIChsZXQgcmVzdWx0JyA9IChzeF9hcHBseSByZXN1bWVfZm4gKExpc3QgW3ZhbHVlXSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHJlc3VsdCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl9fdm1fc3VzcGVuZGVkXCIpKSkpKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoa29udF9wdXNoICgobWFrZV92bV9yZXN1bWVfZnJhbWUgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVzdW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpKSAocmVzdF9rKSkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAocmVzdF9rKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVyZm9ybVwiKV0pKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKHZhbHVlKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbXBvcnRcIildKSkgdGhlbiAobGV0IGltcG9ydF9zZXQgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJhcmdzXCIpKSkgaW4gbGV0IHJlbWFpbmluZ19zZXRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoYmluZF9pbXBvcnRfc2V0IChpbXBvcnRfc2V0KSAoZmVudikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nX3NldHMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChzdGVwX3NmX2ltcG9ydCAocmVtYWluaW5nX3NldHMpIChmZW52KSAocmVzdF9rKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGFyYW1ldGVyaXplXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgY3VycmVudF9wYXJhbSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGN1cnJlbnRfcGFyYW0pKSkgdGhlbiAobGV0IHBhcmFtX29iaiA9IHZhbHVlIGluIGxldCB2YWxfZXhwciA9IChudGggKChmaXJzdCAocmVtYWluaW5nKSkpICgoTnVtYmVyIDEuMCkpKSBpbiAobWFrZV9jZWtfc3RhdGUgKHZhbF9leHByKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX3BhcmFtZXRlcml6ZV9mcmFtZSAocmVtYWluaW5nKSAocGFyYW1fb2JqKSAocmVzdWx0cykgKGJvZHkpIChmZW52KSkpIChyZXN0X2spKSkpKSBlbHNlIChsZXQgY29udmVydGVkX3ZhbCA9IHZhbHVlIGluIGxldCBuZXdfcmVzdWx0cyA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbcmVzdWx0czsgKExpc3QgWyhMaXN0IFsocGFyYW1ldGVyX3VpZCAoY3VycmVudF9wYXJhbSkpOyBjb252ZXJ0ZWRfdmFsXSldKV0pIGluIGxldCByZXN0X2JpbmRpbmdzID0gKHJlc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZXN0X2JpbmRpbmdzKSkpIHRoZW4gKGxldCBib2R5X2V4cHIgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keSkpIGVsc2UgKGNvbnMgKChTeW1ib2wgXCJiZWdpblwiKSkgKGJvZHkpKSkgaW4gbGV0IHByb3ZpZGVfa29udCA9IChrb250X3B1c2hfcHJvdmlkZXMgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGluIChtYWtlX2Nla19zdGF0ZSAoYm9keV9leHByKSAoZmVudikgKHByb3ZpZGVfa29udCkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0ICgoZmlyc3QgKHJlc3RfYmluZGluZ3MpKSkpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX3BhcmFtZXRlcml6ZV9mcmFtZSAocmVzdF9iaW5kaW5ncykgKE5pbCkgKG5ld19yZXN1bHRzKSAoYm9keSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IHJlc3RfazsgTmlsKSkgaW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBmcmFtZSB0eXBlOiBcIik7IGZ0XSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKVxuXG4oKiBjb250aW51ZS13aXRoLWNhbGwgKilcbmFuZCBjb250aW51ZV93aXRoX2NhbGwgZiBhcmdzIGVudiByYXdfYXJncyBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHBhcmFtZXRlcl9wIChmKSkpIHRoZW4gKGxldCB1aWQgPSAocGFyYW1ldGVyX3VpZCAoZikpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfcHJvdmlkZSAoa29udCkgKHVpZCkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIChwYXJhbWV0ZXJfZGVmYXVsdCAoZikpKSkgKGVudikgKGtvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoY2FsbGNjX2NvbnRpbnVhdGlvbl9wIChmKSkpIHRoZW4gKGxldCBhcmcgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgY2FwdHVyZWQgPSAoY2FsbGNjX2NvbnRpbnVhdGlvbl9kYXRhIChmKSkgaW4gbGV0IHdfbGVuID0gKGNhbGxjY19jb250aW51YXRpb25fd2luZGVyc19sZW4gKGYpKSBpbiAobGV0ICgpID0gaWdub3JlICgod2luZF9lc2NhcGVfdG8gKHdfbGVuKSkpIGluIChtYWtlX2Nla192YWx1ZSAoYXJnKSAoZW52KSAoY2FwdHVyZWQpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGNvbnRpbnVhdGlvbl9wIChmKSkpIHRoZW4gKGxldCBhcmcgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgY29udF9kYXRhID0gKGNvbnRpbnVhdGlvbl9kYXRhIChmKSkgaW4gKGxldCBjYXB0dXJlZCA9IChnZXQgKGNvbnRfZGF0YSkgKChTdHJpbmcgXCJjYXB0dXJlZFwiKSkpIGluIChsZXQgcmVzdWx0JyA9IChjZWtfcnVuICgobWFrZV9jZWtfdmFsdWUgKGFyZykgKGVudikgKGNhcHR1cmVkKSkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChlbnYpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfY2FsbGFibGUgKGYpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfY29tcG9uZW50IChmKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX2lzbGFuZCAoZikpKSkpKSkpKSkgdGhlbiAobGV0IHJlc3VsdCcgPSAoc3hfYXBwbHlfY2VrIChmKSAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChpc19ldmFsX2Vycm9yIHJlc3VsdCcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwibWVzc2FnZVwiKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHJlc3VsdCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl9fdm1fc3VzcGVuZGVkXCIpKSkpKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfdm1fcmVzdW1lX2ZyYW1lICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcInJlc3VtZVwiKSkpKSAoZW52KSkpIChrb250KSkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGVudikgKGtvbnQpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChiaW5kX2xhbWJkYV9wYXJhbXMgKHBhcmFtcykgKGFyZ3MpIChsb2NhbCkpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsobGV0IF9vciA9IChsYW1iZGFfbmFtZSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoU3RyaW5nIFwibGFtYmRhXCIpKTsgKFN0cmluZyBcIiBleHBlY3RzIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbcGFyYW1zOyBhcmdzXSkpOyBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAobGVuIChhcmdzKSldKSk7IE5pbCkpKSBlbHNlIE5pbCkpIGluIChsZXQgaml0X3Jlc3VsdCA9IChqaXRfdHJ5X2NhbGwgKGYpIChhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGppdF9za2lwX3AgKGppdF9yZXN1bHQpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChsYW1iZGFfYm9keSAoZikpKSAobG9jYWwpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChqaXRfcmVzdWx0KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAoaml0X3Jlc3VsdCkgKChTdHJpbmcgXCJfX3ZtX3N1c3BlbmRlZFwiKSkpKSkgdGhlbiAobWFrZV9jZWtfc3VzcGVuZGVkICgoZ2V0IChqaXRfcmVzdWx0KSAoKFN0cmluZyBcInJlcXVlc3RcIikpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3ZtX3Jlc3VtZV9mcmFtZSAoKGdldCAoaml0X3Jlc3VsdCkgKChTdHJpbmcgXCJyZXN1bWVcIikpKSkgKGVudikpKSAoa29udCkpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKGppdF9yZXN1bHQpIChsb2NhbCkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAoaXNfY29tcG9uZW50IChmKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChpc19pc2xhbmQgKGYpKSkpIHRoZW4gKGxldCBwYXJzZWQgPSAocGFyc2Vfa2V5d29yZF9hcmdzIChyYXdfYXJncykgKGVudikpIGluIGxldCBrd2FyZ3MgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoZikpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobGV0IF9vciA9IChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChmKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoZikpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgY2hpbGRyZW4pIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoY29tcG9uZW50X2JvZHkgKGYpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfY29tcF90cmFjZV9mcmFtZSAoKGNvbXBvbmVudF9uYW1lIChmKSkpICgoY29tcG9uZW50X2ZpbGUgKGYpKSkpKSAoa29udCkpKSkpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJOb3QgY2FsbGFibGU6IFwiKTsgKGluc3BlY3QgKGYpKV0pKSkpKSkpKSkpKVxuXG4oKiBzZi1jYXNlLXN0ZXAtbG9vcCAqKVxuYW5kIHNmX2Nhc2Vfc3RlcF9sb29wIG1hdGNoX3ZhbCBjbGF1c2VzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoY2xhdXNlcykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdF92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbWF0Y2hfdmFsOyB0ZXN0X3ZhbF0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChzZl9jYXNlX3N0ZXBfbG9vcCAobWF0Y2hfdmFsKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2NsYXVzZXM7IChOdW1iZXIgMi4wKV0pKSAoZW52KSAoa29udCkpKSkpKSlcblxuKCogZXZhbC1leHByLWNlayAqKVxuYW5kIGV2YWxfZXhwcl9jZWsgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG4oKiB0cmFtcG9saW5lLWNlayAqKVxuYW5kIHRyYW1wb2xpbmVfY2VrIHZhbCcgPVxuICAoaWYgc3hfdHJ1dGh5ICgoaXNfdGh1bmsgKHZhbCcpKSkgdGhlbiAoZXZhbF9leHByX2NlayAoKHRodW5rX2V4cHIgKHZhbCcpKSkgKCh0aHVua19lbnYgKHZhbCcpKSkpIGVsc2UgdmFsJylcblxuKCogbWFrZS1jb3JvdXRpbmUgKilcbmFuZCBtYWtlX2Nvcm91dGluZSB0aHVuayA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvcm91dGluZVwiOyBjZl9lbnYgPSBOaWw7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBldmFsLWV4cHIgKilcbmFuZCBldmFsX2V4cHIgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG5cbigqIFdpcmUgdXAgdHJhbXBvbGluZSB0byByZXNvbHZlIHRodW5rcyB2aWEgdGhlIENFSyBtYWNoaW5lICopXG5sZXQgKCkgPSB0cmFtcG9saW5lX2ZuIDo9IChmdW4gdiAtPlxuICBtYXRjaCB2IHdpdGhcbiAgfCBUaHVuayAoZXhwciwgZW52KSAtPiBldmFsX2V4cHIgZXhwciAoRW52IGVudilcbiAgfCBfIC0+IHYpXG5cbigqIFdpcmUgdXAgdGhlIHByaW1pdGl2ZXMgdHJhbXBvbGluZSBzbyBjYWxsX2FueSBpbiBITyBmb3JtcyByZXNvbHZlcyBUaHVua3MgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gOj0gIXRyYW1wb2xpbmVfZm5cblxuKCogT3ZlcnJpZGUgcmVjdXJzaXZlIGNla19ydW4gd2l0aCBpdGVyYXRpdmUgbG9vcC5cbiAgIE9uIGVycm9yLCBjYXB0dXJlIHRoZSBrb250IGZyb20gdGhlIGxhc3Qgc3RhdGUgZm9yIGNvbXAtdHJhY2UuICopXG5sZXQgY2VrX3J1bl9pdGVyYXRpdmUgc3RhdGUgPVxuICBsZXQgcyA9IHJlZiBzdGF0ZSBpblxuICAodHJ5XG4gICAgd2hpbGUgbm90IChtYXRjaCBjZWtfdGVybWluYWxfcCAhcyB3aXRoIEJvb2wgdHJ1ZSAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcbiAgICAgICAmJiBub3QgKG1hdGNoIGNla19zdXNwZW5kZWRfcCAhcyB3aXRoIEJvb2wgdHJ1ZSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgZG9cbiAgICAgIHMgOj0gY2VrX3N0ZXAgIXNcbiAgICBkb25lO1xuICAgIChtYXRjaCBjZWtfc3VzcGVuZGVkX3AgIXMgd2l0aFxuICAgICB8IEJvb2wgdHJ1ZSAtPlxuICAgICAgICgqIFByb3BhZ2F0ZSBzdXNwZW5zaW9uIHZpYSB0aGUgT0NhbWwtc2lkZSBob29rIHNvIGl0IGNvbnZlcnRzIHRvXG4gICAgICAgICAgVm1TdXNwZW5kZWQgYW5kIGZsb3dzIHRvIHRoZSBvdXRlciBkcml2ZXIgKHZhbHVlX3RvX2pzIC8gcmVzdW1lXG4gICAgICAgICAgY2FsbGJhY2spLiBXaXRob3V0IHRoZSBob29rIChwdXJlIENFSyBoYXJuZXNzKSwga2VlcCB0aGUgbGVnYWN5XG4gICAgICAgICAgZXJyb3Igc28gdGVzdCBydW5uZXJzIHN1cmZhY2UgdGhlIG1pc3VzZS4gKilcbiAgICAgICAobWF0Y2ggIV9jZWtfaW9fc3VzcGVuZF9ob29rIHdpdGhcbiAgICAgICAgfCBTb21lIGhvb2sgLT4gaG9vayAhc1xuICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIpKVxuICAgICB8IF8gLT4gY2VrX3ZhbHVlICFzKVxuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgX2xhc3RfZXJyb3Jfa29udF9yZWYgOj0gY2VrX2tvbnQgIXM7XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgbXNnKSlcblxuKCogQ29sbGVjdCBjb21wb25lbnQgdHJhY2UgZnJvbSBhIGtvbnQgdmFsdWUgKilcbmxldCBjb2xsZWN0X2NvbXBfdHJhY2Uga29udCA9XG4gIGxldCB0cmFjZSA9IHJlZiBbXSBpblxuICBsZXQgayA9IHJlZiBrb250IGluXG4gIHdoaWxlIChtYXRjaCAhayB3aXRoIExpc3QgKF86Ol8pIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBkb1xuICAgIChtYXRjaCAhayB3aXRoXG4gICAgIHwgTGlzdCAoZnJhbWUgOjogcmVzdCkgLT5cbiAgICAgICAobWF0Y2ggZnJhbWUgd2l0aFxuICAgICAgICB8IENla0ZyYW1lIGYgd2hlbiBmLmNmX3R5cGUgPSBcImNvbXAtdHJhY2VcIiAtPlxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZi5jZl9uYW1lIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCI/XCIgaW5cbiAgICAgICAgICBsZXQgZmlsZSA9IG1hdGNoIGYuY2ZfZW52IHdpdGggU3RyaW5nIHMgLT4gcyB8IE5pbCAtPiBcIlwiIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgdHJhY2UgOj0gKG5hbWUsIGZpbGUpIDo6ICF0cmFjZVxuICAgICAgICB8IERpY3QgZCB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ0eXBlXCIgd2l0aCBTb21lIChTdHJpbmcgXCJjb21wLXRyYWNlXCIpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwibmFtZVwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiP1wiIGluXG4gICAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJmaWxlXCIgd2l0aCBTb21lIChTdHJpbmcgcykgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIHRyYWNlIDo9IChuYW1lLCBmaWxlKSA6OiAhdHJhY2VcbiAgICAgICAgfCBfIC0+ICgpKTtcbiAgICAgICBrIDo9IExpc3QgcmVzdFxuICAgICB8IF8gLT4gayA6PSBMaXN0IFtdKVxuICBkb25lO1xuICBMaXN0LnJldiAhdHJhY2VcblxuKCogRm9ybWF0IGEgY29tcC10cmFjZSBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nICopXG5sZXQgZm9ybWF0X2NvbXBfdHJhY2UgdHJhY2UgPVxuICBtYXRjaCB0cmFjZSB3aXRoXG4gIHwgW10gLT4gXCJcIlxuICB8IGVudHJpZXMgLT5cbiAgICBsZXQgbGluZXMgPSBMaXN0Lm1hcGkgKGZ1biBpIChuYW1lLCBmaWxlKSAtPlxuICAgICAgbGV0IHByZWZpeCA9IGlmIGkgPSAwIHRoZW4gXCIgIGluIFwiIGVsc2UgXCIgIGNhbGxlZCBmcm9tIFwiIGluXG4gICAgICBpZiBmaWxlID0gXCJcIiB0aGVuIHByZWZpeCBeIFwiflwiIF4gbmFtZVxuICAgICAgZWxzZSBwcmVmaXggXiBcIn5cIiBeIG5hbWUgXiBcIiAoXCIgXiBmaWxlIF4gXCIpXCJcbiAgICApIGVudHJpZXMgaW5cbiAgICBcIlxuXCIgXiBTdHJpbmcuY29uY2F0IFwiXG5cIiBsaW5lc1xuXG4oKiBFbmhhbmNlIGFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBjb21wb25lbnQgdHJhY2UgKilcbmxldCBlbmhhbmNlX2Vycm9yX3dpdGhfdHJhY2UgbXNnID1cbiAgbGV0IHRyYWNlID0gY29sbGVjdF9jb21wX3RyYWNlICFfbGFzdF9lcnJvcl9rb250X3JlZiBpblxuICBfbGFzdF9lcnJvcl9rb250X3JlZiA6PSBOaWw7XG4gIG1zZyBeIChmb3JtYXRfY29tcF90cmFjZSB0cmFjZSlcblxuKCogSGFuZC13cml0dGVuIHNmX2RlZmluZV90eXBlIOKAlCBza2lwcGVkIGZyb20gdHJhbnNwaWxlIGJlY2F1c2UgdGhlIHNwZWMgdXNlc1xuICAgJnJlc3QgcGFyYW1zIGFuZCBlbXB0eS1kaWN0IGxpdGVyYWxzIHRoYXQgdGhlIHRyYW5zcGlsZXIgY2FuJ3QgZW1pdCBjbGVhbmx5LlxuICAgSW1wbGVtZW50czogKGRlZmluZS10eXBlIE5hbWUgKEN0b3IxIGYxIGYyKSAoQ3RvcjIgZjMpIC4uLilcbiAgIENyZWF0ZXMgY29uc3RydWN0b3IgZm5zLCBOYW1lPy9DdG9yPyBwcmVkaWNhdGVzLCBDdG9yLWZpZWxkIGFjY2Vzc29ycyxcbiAgIGFuZCByZWNvcmRzIGN0b3JzIGluICphZHQtcmVnaXN0cnkqLiAqKVxubGV0IHNmX2RlZmluZV90eXBlIGFyZ3MgZW52X3ZhbCA9XG4gIGxldCBpdGVtcyA9IChtYXRjaCBhcmdzIHdpdGggTGlzdCBsIC0+IGwgfCBfIC0+IFtdKSBpblxuICBsZXQgdHlwZV9zeW0gPSBMaXN0Lm50aCBpdGVtcyAwIGluXG4gIGxldCB0eXBlX25hbWUgPSB2YWx1ZV90b19zdHJpbmcgdHlwZV9zeW0gaW5cbiAgbGV0IGN0b3Jfc3BlY3MgPSBMaXN0LnRsIGl0ZW1zIGluXG4gIGxldCBlbnZfaGFzX3YgayA9IHN4X3RydXRoeSAoZW52X2hhcyBlbnZfdmFsIChTdHJpbmcgaykpIGluXG4gIGxldCBlbnZfYmluZF92IGsgdiA9IGlnbm9yZSAoZW52X2JpbmQgZW52X3ZhbCAoU3RyaW5nIGspIHYpIGluXG4gIGxldCBlbnZfZ2V0X3YgayA9IGVudl9nZXQgZW52X3ZhbCAoU3RyaW5nIGspIGluXG4gIGlmIG5vdCAoZW52X2hhc192IFwiKmFkdC1yZWdpc3RyeSpcIikgdGhlblxuICAgIGVudl9iaW5kX3YgXCIqYWR0LXJlZ2lzdHJ5KlwiIChEaWN0IChIYXNodGJsLmNyZWF0ZSA4KSk7XG4gIGxldCByZWdpc3RyeSA9IGVudl9nZXRfdiBcIiphZHQtcmVnaXN0cnkqXCIgaW5cbiAgbGV0IGN0b3JfbmFtZXMgPSBMaXN0Lm1hcCAoZnVuIHNwZWMgLT5cbiAgICAobWF0Y2ggc3BlYyB3aXRoIExpc3QgKHN5bSA6OiBfKSAtPiBTdHJpbmcgKHZhbHVlX3RvX3N0cmluZyBzeW0pIHwgXyAtPiBOaWwpXG4gICkgY3Rvcl9zcGVjcyBpblxuICAobWF0Y2ggcmVnaXN0cnkgd2l0aCBEaWN0IGQgLT4gSGFzaHRibC5yZXBsYWNlIGQgdHlwZV9uYW1lIChMaXN0IGN0b3JfbmFtZXMpIHwgXyAtPiAoKSk7XG4gIGVudl9iaW5kX3YgKHR5cGVfbmFtZSBeIFwiP1wiKVxuICAgIChOYXRpdmVGbiAodHlwZV9uYW1lIF4gXCI/XCIsIGZ1biBwYXJncyAtPlxuICAgICAgKG1hdGNoIHBhcmdzIHdpdGhcbiAgICAgIHwgW3ZdIC0+XG4gICAgICAgIChtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBBZHRWYWx1ZSBhIC0+IEJvb2wgKGEuYXZfdHlwZSA9IHR5cGVfbmFtZSlcbiAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICB8IF8gLT4gQm9vbCBmYWxzZSkpKTtcbiAgTGlzdC5pdGVyIChmdW4gc3BlYyAtPlxuICAgIChtYXRjaCBzcGVjIHdpdGhcbiAgICB8IExpc3QgKHN5bSA6OiBmaWVsZHMpIC0+XG4gICAgICBsZXQgY24gPSB2YWx1ZV90b19zdHJpbmcgc3ltIGluXG4gICAgICBsZXQgZmllbGRfbmFtZXMgPSBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgZmllbGRzIGluXG4gICAgICBsZXQgYXJpdHkgPSBMaXN0Lmxlbmd0aCBmaWVsZHMgaW5cbiAgICAgIGVudl9iaW5kX3YgY25cbiAgICAgICAgKE5hdGl2ZUZuIChjbiwgZnVuIGN0b3JfYXJncyAtPlxuICAgICAgICAgIGlmIExpc3QubGVuZ3RoIGN0b3JfYXJncyA8PiBhcml0eSB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlczogZXhwZWN0ZWQgJWQgYXJncywgZ290ICVkXCJcbiAgICAgICAgICAgICAgY24gYXJpdHkgKExpc3QubGVuZ3RoIGN0b3JfYXJncykpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIEFkdFZhbHVlIHtcbiAgICAgICAgICAgICAgYXZfdHlwZSA9IHR5cGVfbmFtZTtcbiAgICAgICAgICAgICAgYXZfY3RvciA9IGNuO1xuICAgICAgICAgICAgICBhdl9maWVsZHMgPSBBcnJheS5vZl9saXN0IGN0b3JfYXJncztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgIGVudl9iaW5kX3YgKGNuIF4gXCI/XCIpXG4gICAgICAgIChOYXRpdmVGbiAoY24gXiBcIj9cIiwgZnVuIHBhcmdzIC0+XG4gICAgICAgICAgKG1hdGNoIHBhcmdzIHdpdGhcbiAgICAgICAgICB8IFt2XSAtPlxuICAgICAgICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBBZHRWYWx1ZSBhIC0+IEJvb2wgKGEuYXZfY3RvciA9IGNuKVxuICAgICAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpKSk7XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaWR4IGZuYW1lIC0+XG4gICAgICAgIGVudl9iaW5kX3YgKGNuIF4gXCItXCIgXiBmbmFtZSlcbiAgICAgICAgICAoTmF0aXZlRm4gKGNuIF4gXCItXCIgXiBmbmFtZSwgZnVuIHBhcmdzIC0+XG4gICAgICAgICAgICAobWF0Y2ggcGFyZ3Mgd2l0aFxuICAgICAgICAgICAgfCBbdl0gLT5cbiAgICAgICAgICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgICB8IEFkdFZhbHVlIGEgLT5cbiAgICAgICAgICAgICAgICBpZiBpZHggPCBBcnJheS5sZW5ndGggYS5hdl9maWVsZHMgdGhlbiBhLmF2X2ZpZWxkcy4oaWR4KVxuICAgICAgICAgICAgICAgIGVsc2UgcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBpbmRleCBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBub3QgYW4gQURUXCIpKSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoY24gXiBcIi1cIiBeIGZuYW1lIF4gXCI6IGV4cGVjdGVkIDEgYXJnXCIpKSkpKVxuICAgICAgKSBmaWVsZF9uYW1lc1xuICAgIHwgXyAtPiAoKSlcbiAgKSBjdG9yX3NwZWNzO1xuICBOaWxcblxuKCogUmVnaXN0ZXIgZGVmaW5lLXR5cGUgdmlhIGN1c3RvbV9zcGVjaWFsX2Zvcm1zIHNvIHRoZSBDRUsgZGlzcGF0Y2ggZmluZHMgaXQuXG4gICBUaGUgdG9wLWxldmVsIChyZWdpc3Rlci1zcGVjaWFsLWZvcm0hIC4uLikgaW4gc3BlYy9ldmFsdWF0b3Iuc3ggaXMgbm90IGFcbiAgIGRlZmluZSBhbmQgdGhlcmVmb3JlIGlzIG5vdCB0cmFuc3BpbGVkOyB3ZSB3aXJlIGl0IHVwIGhlcmUgaW5zdGVhZC4gKilcbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWZpbmUtdHlwZVwiKVxuICAoTmF0aXZlRm4gKFwiZGVmaW5lLXR5cGVcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWZpbmVfdHlwZSBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxuKCogTXVsdGlwbGUgdmFsdWVzIOKAlCBoZWxwZXJzIHNoYXJlZCBieSBsZXQtdmFsdWVzLCBkZWZpbmUtdmFsdWVzICopXG5sZXQgbWFrZV92YWx1ZXNfZGljdCB2cyA9XG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcIl92YWx1ZXNcIiAoQm9vbCB0cnVlKTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJfbGlzdFwiIChMaXN0IHZzKTtcbiAgRGljdCBkXG5cbmxldCB2YWx1ZXNfdG9fbGlzdCByZXN1bHQgPVxuICBtYXRjaCByZXN1bHQgd2l0aFxuICB8IERpY3QgZCB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfdmFsdWVzXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfbGlzdFwiIHdpdGggU29tZSAoTGlzdCBsKSAtPiBsIHwgXyAtPiBbcmVzdWx0XSlcbiAgfCBfIC0+IFtyZXN1bHRdXG5cbigqIChsZXQtdmFsdWVzICgoKGEgYikgZXhwcikgLi4uKSBib2R5Li4uKSAqKVxubGV0IHNmX2xldF92YWx1ZXMgYXJncyBlbnZfdmFsID1cbiAgbGV0IGl0ZW1zID0gbWF0Y2ggYXJncyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgY2xhdXNlcyA9IG1hdGNoIExpc3QubnRoX29wdCBpdGVtcyAwIHdpdGggU29tZSAoTGlzdCBsKSAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgYm9keSA9IGlmIExpc3QubGVuZ3RoIGl0ZW1zID4gMSB0aGVuIExpc3QudGwgaXRlbXMgZWxzZSBbXSBpblxuICBsZXQgbG9jYWxfZW52ID0gZW52X2V4dGVuZCBlbnZfdmFsIGluXG4gIExpc3QuaXRlciAoZnVuIGNsYXVzZSAtPlxuICAgIGxldCBuYW1lcyA9IChtYXRjaCBjbGF1c2Ugd2l0aCBMaXN0IChMaXN0IG5zIDo6IF8pIC0+IG5zIHwgXyAtPiBbXSkgaW5cbiAgICBsZXQgdmFsX2V4cHIgPSAobWF0Y2ggY2xhdXNlIHdpdGggTGlzdCAoXyA6OiBlIDo6IF8pIC0+IGUgfCBfIC0+IE5pbCkgaW5cbiAgICBsZXQgcmVzdWx0ID0gZXZhbF9leHByIHZhbF9leHByIGxvY2FsX2VudiBpblxuICAgIGxldCB2cyA9IHZhbHVlc190b19saXN0IHJlc3VsdCBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpZHggbmFtZSAtPlxuICAgICAgbGV0IG4gPSAobWF0Y2ggbmFtZSB3aXRoIFN5bWJvbCBzIC0+IHMgfCBTdHJpbmcgcyAtPiBzIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgbmFtZSkgaW5cbiAgICAgIGxldCB2ID0gaWYgaWR4IDwgTGlzdC5sZW5ndGggdnMgdGhlbiBMaXN0Lm50aCB2cyBpZHggZWxzZSBOaWwgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWxfZW52IChTdHJpbmcgbikgdilcbiAgICApIG5hbWVzXG4gICkgY2xhdXNlcztcbiAgbGV0IGxhc3RfdmFsID0gcmVmIE5pbCBpblxuICBMaXN0Lml0ZXIgKGZ1biBlIC0+IGxhc3RfdmFsIDo9IGV2YWxfZXhwciBlIGxvY2FsX2VudikgYm9keTtcbiAgIWxhc3RfdmFsXG5cbigqIChkZWZpbmUtdmFsdWVzIChhIGIgLi4uKSBleHByKSAqKVxubGV0IHNmX2RlZmluZV92YWx1ZXMgYXJncyBlbnZfdmFsID1cbiAgbGV0IGl0ZW1zID0gbWF0Y2ggYXJncyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgbmFtZXMgPSAobWF0Y2ggTGlzdC5udGhfb3B0IGl0ZW1zIDAgd2l0aCBTb21lIChMaXN0IGwpIC0+IGwgfCBfIC0+IFtdKSBpblxuICBsZXQgdmFsX2V4cHIgPSAobWF0Y2ggTGlzdC5udGhfb3B0IGl0ZW1zIDEgd2l0aCBTb21lIGUgLT4gZSB8IE5vbmUgLT4gTmlsKSBpblxuICBsZXQgcmVzdWx0ID0gZXZhbF9leHByIHZhbF9leHByIGVudl92YWwgaW5cbiAgbGV0IHZzID0gdmFsdWVzX3RvX2xpc3QgcmVzdWx0IGluXG4gIExpc3QuaXRlcmkgKGZ1biBpZHggbmFtZSAtPlxuICAgIGxldCBuID0gKG1hdGNoIG5hbWUgd2l0aCBTeW1ib2wgcyAtPiBzIHwgU3RyaW5nIHMgLT4gcyB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nIG5hbWUpIGluXG4gICAgbGV0IHYgPSBpZiBpZHggPCBMaXN0Lmxlbmd0aCB2cyB0aGVuIExpc3QubnRoIHZzIGlkeCBlbHNlIE5pbCBpblxuICAgIGlnbm9yZSAoZW52X2JpbmQgZW52X3ZhbCAoU3RyaW5nIG4pIHYpXG4gICkgbmFtZXM7XG4gIE5pbFxuXG5sZXQgKCkgPSBpZ25vcmUgKHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIFwibGV0LXZhbHVlc1wiKVxuICAoTmF0aXZlRm4gKFwibGV0LXZhbHVlc1wiLCBmdW4gY2FsbF9hcmdzIC0+XG4gICAgbWF0Y2ggY2FsbF9hcmdzIHdpdGhcbiAgICB8IFthcmdzOyBlbnZdIC0+IHNmX2xldF92YWx1ZXMgYXJncyBlbnZcbiAgICB8IF8gLT4gTmlsKSkpXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWZpbmUtdmFsdWVzXCIpXG4gIChOYXRpdmVGbiAoXCJkZWZpbmUtdmFsdWVzXCIsIGZ1biBjYWxsX2FyZ3MgLT5cbiAgICBtYXRjaCBjYWxsX2FyZ3Mgd2l0aFxuICAgIHwgW2FyZ3M7IGVudl0gLT4gc2ZfZGVmaW5lX3ZhbHVlcyBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxuKCogUGhhc2UgOTogUHJvbWlzZXMg4oCUIGRlbGF5L2ZvcmNlL2RlbGF5LWZvcmNlL21ha2UtcHJvbWlzZS9wcm9taXNlPyAqKVxuXG5sZXQgbWFrZV9wcm9taXNlX2RpY3QgPyhpdGVyYXRpdmU9ZmFsc2UpIHRodW5rID1cbiAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSBkIFwiX3Byb21pc2VcIiAoQm9vbCB0cnVlKTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJmb3JjZWRcIiAoQm9vbCBmYWxzZSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidGh1bmtcIiB0aHVuaztcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIE5pbDtcbiAgaWYgaXRlcmF0aXZlIHRoZW4gSGFzaHRibC5yZXBsYWNlIGQgXCJfaXRlcmF0aXZlXCIgKEJvb2wgdHJ1ZSk7XG4gIERpY3QgZFxuXG5sZXQgc2ZfZGVsYXkgYXJncyBlbnZfdmFsID1cbiAgbGV0IGV4cHIgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCAoZSA6OiBfKSAtPiBlIHwgXyAtPiBOaWwgaW5cbiAgbGV0IHRodW5rID0gbWFrZV9sYW1iZGEgKExpc3QgW10pIGV4cHIgZW52X3ZhbCBpblxuICBtYWtlX3Byb21pc2VfZGljdCB0aHVua1xuXG5sZXQgc2ZfZGVsYXlfZm9yY2UgYXJncyBlbnZfdmFsID1cbiAgbGV0IGV4cHIgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCAoZSA6OiBfKSAtPiBlIHwgXyAtPiBOaWwgaW5cbiAgbGV0IHRodW5rID0gbWFrZV9sYW1iZGEgKExpc3QgW10pIGV4cHIgZW52X3ZhbCBpblxuICBtYWtlX3Byb21pc2VfZGljdCB+aXRlcmF0aXZlOnRydWUgdGh1bmtcblxubGV0IGlzX3Byb21pc2UgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX3Byb21pc2VcIiB3aXRoIFNvbWUgKEJvb2wgdHJ1ZSkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgcmVjIGZvcmNlX3Byb21pc2UgcCA9XG4gIGlmIG5vdCAoaXNfcHJvbWlzZSBwKSB0aGVuIHBcbiAgZWxzZSBtYXRjaCBwIHdpdGhcbiAgfCBEaWN0IGQgLT5cbiAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZm9yY2VkXCIgd2l0aFxuICAgICB8IFNvbWUgKEJvb2wgdHJ1ZSkgLT5cbiAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidmFsdWVcIiB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwpXG4gICAgIHwgXyAtPlxuICAgICAgIGxldCB0aHVuayA9IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ0aHVua1wiIHdpdGggU29tZSB0IC0+IHQgfCBOb25lIC0+IE5pbCkgaW5cbiAgICAgICBsZXQgcmVzdWx0ID0gY2VrX2NhbGwgdGh1bmsgKExpc3QgW10pIGluXG4gICAgICAgbGV0IGl0ZXJhdGl2ZSA9IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfaXRlcmF0aXZlXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBpblxuICAgICAgIGxldCBmaW5hbF92YWwgPSBpZiBpdGVyYXRpdmUgJiYgaXNfcHJvbWlzZSByZXN1bHQgdGhlbiBmb3JjZV9wcm9taXNlIHJlc3VsdCBlbHNlIHJlc3VsdCBpblxuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiZm9yY2VkXCIgKEJvb2wgdHJ1ZSk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIGZpbmFsX3ZhbDtcbiAgICAgICBmaW5hbF92YWwpXG4gIHwgXyAtPiBwXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWxheVwiKVxuICAoTmF0aXZlRm4gKFwiZGVsYXlcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWxheSBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxubGV0ICgpID0gaWdub3JlIChyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gKFN0cmluZyBcImRlbGF5LWZvcmNlXCIpXG4gIChOYXRpdmVGbiAoXCJkZWxheS1mb3JjZVwiLCBmdW4gY2FsbF9hcmdzIC0+XG4gICAgbWF0Y2ggY2FsbF9hcmdzIHdpdGhcbiAgICB8IFthcmdzOyBlbnZdIC0+IHNmX2RlbGF5X2ZvcmNlIGFyZ3MgZW52XG4gICAgfCBfIC0+IE5pbCkpKVxuXG5cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9lcXVhbCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3VwZGF0ZV9kdW1teSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMyIsImExIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfcnVudGltZSIsIlN4X3R5cGVzIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliIiwiU3RkbGliX1ByaW50ZiIsIlN0ZGxpYl9BcnJheSIsIlN4X3ByaW1pdGl2ZXMiLCJ0cmFtcG9saW5lX2ZuIiwidiIsInRyYW1wb2xpbmUiLCJwcm90b2NvbF9yZWdpc3RyeSIsInNlcV90b19saXN0IiwicyIsImNoYXJzIiwiYyIsIml0ZW1zIiwiYXJyIiwiY3N0X2V2YWwiLCJtYWtlX2Nla19zdGF0ZSIsImNvbnRyb2wiLCJlbnYiLCJrb250IiwiY3N0X2NvbnRpbnVlIiwibWFrZV9jZWtfdmFsdWUiLCJ2YWx1ZSIsImNzdF9lbnYiLCJjc3RfaW9fc3VzcGVuZGVkIiwiY3N0X2tvbnQiLCJjc3RfcGhhc2UiLCJjc3RfcmVxdWVzdCIsIm1ha2VfY2VrX3N1c3BlbmRlZCIsInJlcXVlc3QiLCJkIiwiY3N0IiwiY2VrX3Rlcm1pbmFsX3AiLCJzdGF0ZSIsImFuZCIsImNla19zdXNwZW5kZWRfcCIsImNla19jb250cm9sIiwiY2VrX2VudiIsImNla19rb250IiwiY2VrX3BoYXNlIiwiY2VrX2lvX3JlcXVlc3QiLCJjc3RfdmFsdWUiLCJjZWtfdmFsdWUiLCJjc3RfaWYiLCJtYWtlX2lmX2ZyYW1lIiwidGhlbl9leHByIiwiZWxzZV9leHByIiwiY3N0X3doZW4iLCJtYWtlX3doZW5fZnJhbWUiLCJib2R5X2V4cHJzIiwiY3N0X2JlZ2luIiwibWFrZV9iZWdpbl9mcmFtZSIsInJlbWFpbmluZyIsImNzdF9sZXQiLCJtYWtlX2xldF9mcmFtZSIsIm5hbWUiLCJib2R5IiwibG9jYWwiLCJjc3RfZGVmaW5lIiwibWFrZV9kZWZpbmVfZnJhbWUiLCJoYXNfZWZmZWN0cyIsImVmZmVjdF9saXN0IiwiY3N0X2RlZmluZV9mb3JlaWduIiwibWFrZV9kZWZpbmVfZm9yZWlnbl9mcmFtZSIsInNwZWMiLCJjc3Rfc2V0IiwibWFrZV9zZXRfZnJhbWUiLCJjc3RfYXJnIiwibWFrZV9hcmdfZnJhbWUiLCJldmFsZWQiLCJyYXdfYXJncyIsImhlYWRfbmFtZSIsIm1ha2VfY2FsbF9mcmFtZSIsImFyZ3MiLCJjc3RfY29uZCIsIm1ha2VfY29uZF9mcmFtZSIsInNjaGVtZV9wIiwiY3N0X2NvbmRfYXJyb3ciLCJtYWtlX2NvbmRfYXJyb3dfZnJhbWUiLCJ0ZXN0X3ZhbHVlIiwiY3N0X2Nhc2UiLCJtYWtlX2Nhc2VfZnJhbWUiLCJtYXRjaF92YWwiLCJjc3RfdGhyZWFkIiwibWFrZV90aHJlYWRfZnJhbWUiLCJtb2RlIiwiY3N0X2xpc3QiLCJjc3RfcXVvdGUiLCJ0aHJlYWRfaW5zZXJ0X2FyZyIsImZvcm0iLCJmZW52IiwiY3N0X2FwcGVuZCIsInRocmVhZF9pbnNlcnRfYXJnX2xhc3QiLCJjc3RfbWFwIiwibWFrZV9tYXBfZnJhbWUiLCJyZXN1bHRzIiwibWFrZV9tYXBfaW5kZXhlZF9mcmFtZSIsImNzdF9tdWx0aV9tYXAiLCJtYWtlX211bHRpX21hcF9mcmFtZSIsInJlbWFpbmluZ19saXN0cyIsImNzdF9maWx0ZXIiLCJtYWtlX2ZpbHRlcl9mcmFtZSIsImN1cnJlbnRfaXRlbSIsImNzdF9yZWR1Y2UiLCJtYWtlX3JlZHVjZV9mcmFtZSIsImNzdF9mb3JfZWFjaCIsIm1ha2VfZm9yX2VhY2hfZnJhbWUiLCJjc3Rfc29tZSIsIm1ha2Vfc29tZV9mcmFtZSIsImNzdF9ldmVyeSIsIm1ha2VfZXZlcnlfZnJhbWUiLCJjc3Rfc2NvcGUiLCJtYWtlX3Njb3BlX2ZyYW1lIiwiY3N0X3Byb3ZpZGUiLCJtYWtlX3Byb3ZpZGVfZnJhbWUiLCJjc3RfYmluZCIsIm1ha2VfYmluZF9mcmFtZSIsInByZXZfdHJhY2tpbmciLCJjc3RfcHJvdmlkZV9zZXQiLCJtYWtlX3Byb3ZpZGVfc2V0X2ZyYW1lIiwiY3N0X3Njb3BlX2FjYyIsIm1ha2Vfc2NvcGVfYWNjX2ZyYW1lIiwiY3N0X3Jlc2V0IiwibWFrZV9yZXNldF9mcmFtZSIsImNzdF9kaWN0IiwibWFrZV9kaWN0X2ZyYW1lIiwiY3N0X2FuZCIsIm1ha2VfYW5kX2ZyYW1lIiwiY3N0X29yIiwibWFrZV9vcl9mcmFtZSIsImNzdF9keW5hbWljX3dpbmQiLCJtYWtlX2R5bmFtaWNfd2luZF9mcmFtZSIsInBoYXNlIiwiYm9keV90aHVuayIsImFmdGVyX3RodW5rIiwiY3N0X3JlYWN0aXZlX3Jlc2V0IiwibWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSIsInVwZGF0ZV9mbiIsImZpcnN0X3JlbmRlcl9wIiwiY3N0X2NhbGxjYyIsIm1ha2VfY2FsbGNjX2ZyYW1lIiwiY3N0X3dpbmRfYWZ0ZXIiLCJtYWtlX3dpbmRfYWZ0ZXJfZnJhbWUiLCJ3aW5kZXJzX2xlbiIsImNzdF93aW5kX3JldHVybiIsIm1ha2Vfd2luZF9yZXR1cm5fZnJhbWUiLCJib2R5X3Jlc3VsdCIsImNzdF9kZXJlZiIsIm1ha2VfZGVyZWZfZnJhbWUiLCJjc3RfaG9fc2V0dXAiLCJtYWtlX2hvX3NldHVwX2ZyYW1lIiwiaG9fdHlwZSIsInJlbWFpbmluZ19hcmdzIiwiZXZhbGVkX2FyZ3MiLCJjc3RfY29tcF90cmFjZSIsIm1ha2VfY29tcF90cmFjZV9mcmFtZSIsImZpbGUiLCJjc3RfZmlsZSIsImNzdF9uYW1lIiwia29udF9jb2xsZWN0X2NvbXBfdHJhY2UiLCJmcmFtZSIsImNzdF9oYW5kbGVyIiwibWFrZV9oYW5kbGVyX2ZyYW1lIiwiaGFuZGxlcnMiLCJjc3RfcmVzdGFydCIsIm1ha2VfcmVzdGFydF9mcmFtZSIsInJlc3RhcnRzIiwiY3N0X3NpZ25hbF9yZXR1cm4iLCJtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUiLCJzYXZlZF9rb250IiwiY3N0X3JhaXNlX2V2YWwiLCJtYWtlX3JhaXNlX2V2YWxfZnJhbWUiLCJjb250aW51YWJsZV9wIiwiY3N0X3JhaXNlX2d1YXJkIiwibWFrZV9yYWlzZV9ndWFyZF9mcmFtZSIsImNzdF9wZXJmb3JtIiwibWFrZV9wZXJmb3JtX2ZyYW1lIiwiY3N0X3ZtX3Jlc3VtZSIsIm1ha2Vfdm1fcmVzdW1lX2ZyYW1lIiwicmVzdW1lX2ZuIiwiY3N0X2ltcG9ydCIsIm1ha2VfaW1wb3J0X2ZyYW1lIiwiaW1wb3J0X3NldCIsInJlbWFpbmluZ19zZXRzIiwiY3N0X3BhcmFtZXRlcml6ZSIsIm1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIiwiY3VycmVudF9wYXJhbSIsImZpbmRfbWF0Y2hpbmdfaGFuZGxlciIsImNvbmRpdGlvbiIsInBhaXIiLCJwcmVkIiwiaGFuZGxlcl9mbiIsImNzdF9mIiwia29udF9maW5kX2hhbmRsZXIiLCJtYXRjaCIsImNzdF9hZnRlcl90aHVuayIsImNzdF93aW5kZXJzX2xlbiIsIndpbmRlcnNfcmVmIiwia29udF91bndpbmRfdG9faGFuZGxlciIsInJlc3RfayIsIndpbmRfZXNjYXBlX3RvIiwidGFyZ2V0X2xlbiIsImZpbmRfbmFtZWRfcmVzdGFydCIsImVudHJ5Iiwia29udF9maW5kX3Jlc3RhcnQiLCJjc3RfdHlwZSIsImZyYW1lX3R5cGUiLCJrb250X3B1c2giLCJrb250X3RvcCIsImtvbnRfcG9wIiwia29udF9lbXB0eV9wIiwiY2FwdHVyZWQiLCJrb250X2NhcHR1cmVfdG9fcmVzZXQiLCJrIiwib3IiLCJrb250X3B1c2hfcHJvdmlkZXMiLCJwYWlycyIsImtvbnRfZmluZF9wcm92aWRlIiwia29udF9maW5kX3Njb3BlX2FjYyIsImhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIiwia29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwiY3N0X2pvaW4iLCJsaWJyYXJ5X25hbWVfa2V5IiwiY3N0X2hhc19rZXkiLCJsaWJyYXJ5X3JlZ2lzdHJ5IiwibGlicmFyeV9sb2FkZWRfcCIsImNzdF9leHBvcnRzIiwibGlicmFyeV9leHBvcnRzIiwicmVnaXN0ZXJfbGlicmFyeSIsImV4cG9ydHMiLCJpb19yZWdpc3RyeSIsImlvX3JlZ2lzdGVyX2IiLCJpb19yZWdpc3RlcmVkX3AiLCJpb19sb29rdXAiLCJjc3Rfa2V5cyIsImlvX25hbWVzIiwicGFyYW0iLCJmb3JlaWduX3JlZ2lzdHJ5IiwiZm9yZWlnbl9yZWdpc3Rlcl9iIiwiZm9yZWlnbl9yZWdpc3RlcmVkX3AiLCJmb3JlaWduX2xvb2t1cCIsImZvcmVpZ25fbmFtZXMiLCJyZXN1bHQiLCJmb3JlaWduX3BhcnNlX3BhcmFtcyIsInBhcmFtX2xpc3QiLCJmb3JlaWduX3BhcnNlX2t3YXJnc19iIiwiY3N0X21ldGhvZCIsImNzdF9vYmplY3QiLCJmb3JlaWduX3Jlc29sdmVfYmluZGluZyIsImJpbmRpbmdfc3RyIiwicGFydHMiLCJtZXRob2QiLCJvYmoiLCJjc3RfYXJnc19nb3QiLCJjc3RfZ290IiwiY3N0X2V4cGVjdGVkIiwiY3N0X2FueSIsImNzdF9mb3JlaWduIiwiY3N0X3JhbmdlIiwiZm9yZWlnbl9jaGVja19hcmdzIiwicGFyYW1zIiwiaSIsInZhbCIsImV4cGVjdGVkIiwiY3N0X3Jlc3QiLCJjc3RfZmZpX2FyZ3MiLCJjc3RfYXN5bmMiLCJjc3RfZm4iLCJjc3RfZm9yZWlnbl9kaXNwYXRjaCIsImNzdF9yZXR1cm5zIiwiY3N0X3N5bmMiLCJmb3JlaWduX2J1aWxkX2xhbWJkYSIsInIiLCJjc3RfcGFyYW1zIiwic2ZfZGVmaW5lX2ZvcmVpZ24iLCJzdGVwX3NmX2RlZmluZV9mb3JlaWduIiwibGFtYmRhX2V4cHIiLCJjc3RfY29uY2F0IiwiY3N0X2hvc3RfY2FsbCIsImZvcmVpZ25fZGlzcGF0Y2giLCJiaW5kaW5nIiwicmVzb2x2ZWQiLCJvYmpfbmFtZSIsImNzdF9hcyIsImZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AiLCJhY2MiLCJpdGVtIiwicmVzdF9pdGVtcyIsInQiLCJjc3RfYXJncyIsImNzdF9vcCIsInN0ZXBfc2ZfaW8iLCJpb19hcmdzIiwic3RyaWN0X3JlZiIsInNldF9zdHJpY3RfYiIsInByaW1fcGFyYW1fdHlwZXNfcmVmIiwic2V0X3ByaW1fcGFyYW1fdHlwZXNfYiIsInR5cGVzIiwiY3N0X2Jvb2xlYW4iLCJjc3RfZW5kc193aXRoIiwiY3N0X2tleXdvcmQiLCJjc3RfbGFtYmRhIiwiY3N0X25pbCIsImNzdF9udW1iZXIiLCJjc3Rfc2xpY2UiLCJjc3Rfc3RyaW5nIiwiY3N0X3N5bWJvbCIsInZhbHVlX21hdGNoZXNfdHlwZV9wIiwiZXhwZWN0ZWRfdHlwZSIsImNzdF9UeXBlX2Vycm9yIiwic3RyaWN0X2NoZWNrX2FyZ3MiLCJwb3NpdGlvbmFsIiwicmVzdF90eXBlIiwicCIsImlkeCIsInBfbmFtZSIsInBfdHlwZSIsImNzdF9pbmRleF9vZiIsImJpbmRfbGFtYmRhX3BhcmFtcyIsInJlc3RfaWR4IiwicmVzdF9uYW1lIiwiY3N0X2V4cGVjdHMiLCJjc3RfemlwIiwiY2FsbF9sYW1iZGEiLCJjYWxsZXJfZW52IiwiY3N0X2NoaWxkcmVuIiwiY2FsbF9jb21wb25lbnQiLCJjb21wIiwicGFyc2VkIiwia3dhcmdzIiwiY2hpbGRyZW4iLCJjc3RfYXNzb2MiLCJjc3RfaSIsImNzdF9pbmMiLCJjc3Rfc2tpcCIsInBhcnNlX2tleXdvcmRfYXJncyIsImFyZyIsInNraXAiLCJjb25kX3NjaGVtZV9wIiwiY2xhdXNlcyIsImNzdF9lbHNlIiwiaXNfZWxzZV9jbGF1c2UiLCJ0ZXN0Iiwic2ZfbmFtZWRfbGV0IiwibG9vcF9uYW1lIiwiYmluZGluZ3MiLCJpbml0cyIsInBhaXJfaWR4IiwibG9vcF9ib2R5IiwibG9vcF9mbiIsImluaXRfdmFscyIsImUiLCJzZl9sYW1iZGEiLCJwYXJhbXNfZXhwciIsInBhcmFtX25hbWVzIiwiY3N0X2N1cnJlbnRfZmlsZSIsImNzdF9lZmZlY3RfYW5ub3RhdGlvbnMiLCJjc3RfZWZmZWN0cyIsInNmX2RlZmNvbXAiLCJuYW1lX3N5bSIsInBhcmFtc19yYXciLCJjb21wX25hbWUiLCJoYXNfY2hpbGRyZW4iLCJwYXJhbV90eXBlcyIsImFmZmluaXR5IiwiZWZmZWN0cyIsImVmZmVjdF9hbm5zIiwiZGVmY29tcF9rd2FyZyIsImtleSIsImRlZmF1bHQkIiwiZW5kIiwicGFyc2VfY29tcF9wYXJhbXMiLCJpbl9rZXkiLCJwdHlwZSIsInR5cGVfdmFsIiwic2ZfZGVmaXNsYW5kIiwiaXNsYW5kIiwiZGVmaW9fcGFyc2Vfa3dhcmdzX2IiLCJzZl9kZWZpbyIsInNmX2RlZm1hY3JvIiwicmVzdF9wYXJhbSIsIm1hYyIsImNzdF9pbl9yZXN0IiwicGFyc2VfbWFjcm9fcGFyYW1zIiwicXFfZXhwYW5kIiwidGVtcGxhdGUiLCJoZWFkIiwic3BsaWNlZCIsImNzdF9kZWMiLCJzZl9sZXRyZWMiLCJuYW1lcyIsInZhbF9leHBycyIsInZuYW1lIiwidmFsX2V4cHIiLCJ2YWx1ZXMiLCJuIiwic3RlcF9zZl9sZXRyZWMiLCJ0aGsiLCJzdGVwX3NmX2R5bmFtaWNfd2luZCIsImJlZm9yZSIsImFmdGVyIiwic2Zfc2NvcGUiLCJyZXN0Iiwic2ZfcHJvdmlkZSIsImNzdF9zcl9saXRlcmFscyIsImNzdF9zcl9ydWxlcyIsImNzdF9zeW50YXhfcnVsZXNfYm9keSIsImV4cGFuZF9tYWNybyIsImNsb3N1cmUiLCJjZWtfc3RlcF9sb29wIiwiY3N0X0lPX3N1c3BlbnNpb25faW5fbm9uX0lPX2NvIiwiY2VrX3J1biIsImZpbmFsIiwiaG9vayIsImNla19yZXN1bWUiLCJzdXNwZW5kZWRfc3RhdGUiLCJjZWtfc3RlcCIsImNzdF9zdGFydHNfd2l0aCIsInN0ZXBfZXZhbCIsImV4cHIiLCJrcyIsImZpcnN0X2tleSIsInJlbWFpbmluZ19lbnRyaWVzIiwic3RlcF9zZl9yYWlzZSIsImNzdF9ndWFyZF9rIiwiY3N0X2d1YXJkX3Jlc3VsdCIsImNzdF9jYWxsX2NjIiwiY3N0X2ZpcnN0IiwiY3N0X2hhbmRsZXJfYmluZCIsImNzdF9yYWlzZSIsInN0ZXBfc2ZfZ3VhcmQiLCJjb3VudGVyIiwidmFyX2NsYXVzZXMiLCJ2YXIkIiwic2VudGluZWwiLCJzdGVwX3NmX2NhbGxjYyIsInN0ZXBfc2ZfY2FzZSIsInN0ZXBfc2ZfbGV0X21hdGNoIiwicGF0dGVybiIsImNzdF9kb19sb29wIiwiY3N0X2VtaXR0ZWQiLCJjc3RfbWFwX2luZGV4ZWQiLCJjc3RfcGVlayIsImNzdF9zeW50YXhfcnVsZXMiLCJyZW5kZXJfY2hlY2siLCJyZW5kZXJfZm4iLCJzdGVwX2V2YWxfbGlzdCIsInRlc3RfY2xhdXNlIiwiYiIsInN0ZXBzIiwia29udF9leHRyYWN0X3Byb3ZpZGVzIiwicmVzdF9mcmFtZXMiLCJjc3RfY29udGFpbnMiLCJwcm92aWRlX2JhdGNoX2RlcHRoX3JlZiIsInByb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIiwicHJvdmlkZV9zdWJzY3JpYmVyc19yZWYiLCJmaXJlX3Byb3ZpZGVfc3Vic2NyaWJlcnMiLCJzdWJzIiwic3ViIiwiYmF0Y2hfYmVnaW5fYiIsImJhdGNoX2VuZF9iIiwicXVldWUiLCJiaW5kX3RyYWNraW5nX3JlZiIsInN0ZXBfc2ZfYmluZCIsInByZXYiLCJzdGVwX3NmX3BhcmFtZXRlcml6ZSIsImZpcnN0X3BhaXIiLCJzeW50YXhfcnVsZXNfbWF0Y2giLCJsaXRlcmFscyIsInN5bnRheF9ydWxlc19tYXRjaF9saXN0IiwicGkiLCJmaSIsInBsZW4iLCJmbGVuIiwic3ViX3BhdCIsIm5fZWxsaXBzaXMiLCJzdWJfYmluZGluZ3MiLCJyZXN0X3Jlc3VsdCIsIm1lcmdlZCIsImV4aXN0aW5nIiwic3ViX3Jlc3VsdCIsInN5bnRheF9ydWxlc19maW5kX3ZhciIsImZvdW5kIiwic3ludGF4X3J1bGVzX2ZpbmRfYWxsX3ZhcnMiLCJzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUiLCJzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCIsImVsZW0iLCJoYXNfZWxsaXBzaXMiLCJhbGxfdmFycyIsImNvdW50IiwiZXhwYW5kZWQiLCJ2YXJfbmFtZSIsInN5bnRheF9ydWxlc19leHBhbmQiLCJydWxlcyIsImZ1bGxfZm9ybSIsInN5bnRheF9ydWxlc190cnlfcnVsZXMiLCJydWxlIiwic2Zfc3ludGF4X3J1bGVzIiwic3RlcF9zZl9kZWZpbmVfbGlicmFyeSIsImxpYl9zcGVjIiwiZGVjbHMiLCJsaWJfZW52IiwiYm9keV9mb3JtcyIsImRlY2wiLCJraW5kIiwiZXhwb3J0X2RpY3QiLCJjc3RfZXhjZXB0IiwiY3N0X29ubHkiLCJjc3RfcHJlZml4IiwiY3N0X3JlbmFtZSIsImJpbmRfaW1wb3J0X3NldCIsImlkIiwicGZ4Iiwic3RlcF9zZl9pbXBvcnQiLCJyZXN0X3NldHMiLCJzdGVwX3NmX3BlcmZvcm0iLCJzZl9kZWZpbmVfcmVjb3JkX3R5cGUiLCJ0eXBlX3N5bSIsImN0b3Jfc3BlYyIsInByZWRfc3ltIiwiZmllbGRfc3BlY3MiLCJyYXdfbmFtZSIsInR5cGVfbmFtZSIsImN0b3JfbmFtZSIsImN0b3JfcGFyYW1zIiwicHJlZF9uYW1lIiwiZmllbGRfbmFtZXMiLCJmcyIsInJ0ZF91aWQiLCJhY2Nlc3Nvcl9uYW1lIiwibXV0YXRvcl9uYW1lIiwiY3N0X3Byb3RvY29sX3JlZ2lzdHJ5IiwiY3N0X2ltcGwiLCJjc3RfYXJpdHkiLCJjc3RfZ2V0IiwiY3N0X2ltcGxzIiwiY3N0X21ldGhvZHMiLCJzZl9kZWZpbmVfcHJvdG9jb2wiLCJwcm90b19uYW1lIiwibWV0aG9kX3NwZWNzIiwicG5hbWUiLCJtZXRob2RfbmFtZSIsInNlbGZfc3ltIiwic2ZfaW1wbGVtZW50IiwicmF3X3R5cGVfbmFtZSIsIm1ldGhvZF9kZWZzIiwicHJvdG8iLCJpbXBscyIsInR5cGVfaW1wbHMiLCJtZXRob2RfZGVmIiwibW5hbWUiLCJtIiwicHJvdG9fbWV0aG9kIiwiYXJpdHkiLCJzYXRpc2ZpZXNfcCIsIndhcm5pbmdzIiwiY2hlY2tfbWF0Y2hfZXhoYXVzdGl2ZW5lc3MiLCJwYXR0ZXJucyIsImhhc193aWxkY2FyZCIsImhhc19lbHNlIiwiaGFzX3RydWUiLCJoYXNfZmFsc2UiLCJtYXRjaF9maW5kX2NsYXVzZSIsImNsYXVzZSIsImNzdF9hZHQiLCJtYXRjaF9wYXR0ZXJuIiwiZmllbGRfcGF0dGVybnMiLCJmaWVsZHMiLCJzdGVwX3NmX21hdGNoIiwiY3N0X2FkdF9yZWdpc3RyeSIsImNzdF9hZHRfd2FybmVkIiwibWF0Y2hfY2hlY2tfZXhoYXVzdGl2ZW5lc3MiLCJjbGF1c2VfaXNfZWxzZSIsImNsYXVzZV9jdG9yX25hbWUiLCJ0eXBlX25hbWVfb3B0IiwiYSIsInJlZ2lzdHJ5IiwiY3RvcnMiLCJyZWdpc3RlcmVkIiwiY3Rvcl92YWxzIiwieHMiLCJjbGF1c2VzX2xpc3QiLCJjbGF1c2VfY3RvcnMiLCJyZWdpc3RlcmVkX25hbWVzIiwibWlzc2luZyIsIndhcm5lZCIsInciLCJhbHJlYWR5IiwibXNnIiwic3RlcF9zZl9oYW5kbGVyX2JpbmQiLCJoYW5kbGVyX3NwZWNzIiwic3RlcF9zZl9yZXN0YXJ0X2Nhc2UiLCJyZXN0YXJ0X3NwZWNzIiwic3RlcF9zZl9zaWduYWwiLCJzdGVwX3NmX2ludm9rZV9yZXN0YXJ0Iiwicm4iLCJyZXN0YXJ0X25hbWUiLCJyZXN0YXJ0X2FyZyIsInJlc3RhcnRfZnJhbWUiLCJyZXN0X2tvbnQiLCJyZXN0YXJ0X2VudiIsInN0ZXBfc2ZfaWYiLCJzdGVwX3NmX3doZW4iLCJzdGVwX3NmX2JlZ2luIiwic3RlcF9zZl9sZXQiLCJmaXJzdF9iaW5kaW5nIiwicmVzdF9iaW5kaW5ncyIsInN0ZXBfc2ZfZGVmaW5lIiwiZm5fbmFtZSIsImJvZHlfcGFydHMiLCJ2YWxfaWR4Iiwic3RlcF9zZl9zZXRfYiIsInN0ZXBfc2ZfYW5kIiwic3RlcF9zZl9vciIsInN0ZXBfc2ZfY29uZCIsInN0ZXBfc2ZfdGhyZWFkX2ZpcnN0IiwiY3N0X2xhc3QiLCJzdGVwX3NmX3RocmVhZF9sYXN0Iiwic3RlcF9zZl90aHJlYWRfYXMiLCJpbml0IiwiZm9ybXMiLCJzdGVwX3NmX2xhbWJkYSIsInN0ZXBfc2Zfc2NvcGUiLCJyZXN0X2FyZ3MiLCJzdGVwX3NmX3Byb3ZpZGUiLCJzdGVwX3NmX2NvbnRleHQiLCJkZWZhdWx0X3ZhbCIsInN2Iiwic3RlcF9zZl9wZWVrIiwic3RlcF9zZl9wcm92aWRlX2IiLCJjc3Rfc2NvcGVfZW1pdCIsInN0ZXBfc2ZfZW1pdCIsInN0ZXBfc2ZfZW1pdHRlZCIsInN0ZXBfc2ZfcmVzZXQiLCJzdGVwX3NmX3NoaWZ0Iiwia19uYW1lIiwiY2FwdHVyZWRfcmVzdWx0Iiwic2hpZnRfZW52Iiwic3RlcF9zZl9kZXJlZiIsImNla19jYWxsIiwiY3N0X3VwZGF0ZV9mbiIsInJlYWN0aXZlX3NoaWZ0X2RlcmVmIiwic2lnIiwic2Nhbl9yZXN1bHQiLCJjYXB0dXJlZF9mcmFtZXMiLCJyZXNldF9mcmFtZSIsInJlbWFpbmluZ19rb250Iiwic3Vic2NyaWJlciIsIm5ld19yZXNldCIsIm5ld19rb250IiwiaW5pdGlhbF9rb250Iiwic3RlcF9ldmFsX2NhbGwiLCJobmFtZSIsImhvX2Zvcm1fbmFtZV9wIiwiaG9fZm5fcCIsImhvX3N3YXBfYXJncyIsImhvX3NldHVwX2Rpc3BhdGNoIiwib3JkZXJlZCIsImNvbGxzIiwiaGVhZHMiLCJ0YWlscyIsImNvbGwiLCJzdGVwX2hvX21hcCIsInN0ZXBfaG9fbWFwX2luZGV4ZWQiLCJzdGVwX2hvX2ZpbHRlciIsInN0ZXBfaG9fcmVkdWNlIiwic3RlcF9ob19zb21lIiwic3RlcF9ob19ldmVyeSIsInN0ZXBfaG9fZm9yX2VhY2giLCJjc3Rfdm1fc3VzcGVuZGVkIiwiY3N0X2JvZHkiLCJjc3RfZXZhbGVkIiwiY3N0X21hdGNoX3ZhbCIsImNzdF9yZW1haW5pbmciLCJjc3RfcmVzdWx0cyIsImNzdF9yZXN1bWUiLCJjc3Rfc2NoZW1lIiwiY3N0X3N1YnNjcmliZXJzIiwibGFzdF9lcnJvcl9rb250X3JlZiIsInN0ZXBfY29udGludWUiLCJjb252ZXJ0ZWRfdmFsIiwibmV4dF9iaW5kaW5nIiwiZWZmZWN0X25hbWVzIiwibmV4dCIsIm5leHRfdGVzdCIsIm5leHRfY2xhdXNlcyIsIm5leHRfY2xhdXNlIiwiYmluZF9uYW1lIiwicmVzdF9mb3JtcyIsIm5ld19lbnYiLCJuZXdfZXZhbGVkIiwibGFzdF9yZXN1bHQiLCJjb21wbGV0ZWQiLCJuZXh0X2VudHJ5IiwiY3R4IiwiZGVwX2xpc3QiLCJub3RpZnlfZm4iLCJmaXJzdF9wIiwibmV3X2ZyYW1lIiwidHJhY2tlZCIsInRhcmdldCIsIm9sZF92YWwiLCJpbmRleGVkIiwibmV3X3Jlc3VsdHMiLCJjYWxsX2FyZ3MiLCJuZXh0X2ZyYW1lIiwidW53aW5kX3Jlc3VsdCIsInVud291bmRfayIsImJvZHlfZXhwciIsInByb3ZpZGVfa29udCIsImNvbnRpbnVlX3dpdGhfY2FsbCIsInVpZCIsIndfbGVuIiwiY29udF9kYXRhIiwiaml0X3Jlc3VsdCIsInNmX2Nhc2Vfc3RlcF9sb29wIiwidGVzdF92YWwiLCJldmFsX2V4cHJfY2VrIiwidHJhbXBvbGluZV9jZWsiLCJtYWtlX2Nvcm91dGluZSIsInRodW5rIiwiZXZhbF9leHByIiwicHJvdmlkZV9zdWJzY3JpYmVycyIsImNla19ydW5faXRlcmF0aXZlIiwiZXhuIiwiY29sbGVjdF9jb21wX3RyYWNlIiwidHJhY2UiLCJmb3JtYXRfY29tcF90cmFjZSIsImxpbmVzIiwicHJlZml4IiwiZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIiwic2ZfZGVmaW5lX3R5cGUiLCJlbnZfdmFsIiwibCIsImN0b3Jfc3BlY3MiLCJlbnZfYmluZF92IiwiY3Rvcl9uYW1lcyIsInN5bSIsInBhcmdzIiwiY24iLCJjdG9yX2FyZ3MiLCJmbmFtZSIsImNzdF9kZWZpbmVfdHlwZSIsImNzdF92YWx1ZXMiLCJtYWtlX3ZhbHVlc19kaWN0IiwidnMiLCJ2YWx1ZXNfdG9fbGlzdCIsInNmX2xldF92YWx1ZXMiLCJsb2NhbF9lbnYiLCJucyIsImxhc3RfdmFsIiwic2ZfZGVmaW5lX3ZhbHVlcyIsImNzdF9sZXRfdmFsdWVzIiwiY3N0X2RlZmluZV92YWx1ZXMiLCJjc3RfaXRlcmF0aXZlIiwiY3N0X3Byb21pc2UiLCJjc3RfZm9yY2VkIiwiY3N0X3RodW5rIiwibWFrZV9wcm9taXNlX2RpY3QiLCJvcHQiLCJpdGVyYXRpdmUiLCJzZl9kZWxheSIsInNmX2RlbGF5X2ZvcmNlIiwiaXNfcHJvbWlzZSIsImZvcmNlX3Byb21pc2UiLCJmaW5hbF92YWwiLCJjc3RfZGVsYXkiLCJjc3RfZGVsYXlfZm9yY2UiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUUsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQSxhQUFBQyxHQ1N5RCxTQUFDO0FBQUEsWUFBQUMsV0FBQUQsR0FDdkMsc0NBQWdCO0FBQUE7QUFBQSxJQUFBRSxvQkFVSjtBQUFBLFFBQWtCO0FBQUEsWUFBQUMsWUFBQUg7QUFBQUEsSUFRL0Msc0NBQ1M7QUFBQTtBQUFBLEtBRFQ7QUFBQTtBQUFBLFlBQUFJLElBQUEsTUFBQUMsUUFNRTtBQUFBLFFBQ0E7QUFBQTtBQUFBLG1CQUFBQztBQUFBQSxlQUFBLElBQXNDO0FBQUE7QUFBQSxXQUFpQjtBQUFBLFVBQVU7QUFBQTtBQUFBLFFBQzVELGdEQUFpQjtB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QUMsc0JBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUE7QUFBQTtBQUFBLE9BQUg7QUFBQSxNQUFHO0FBQUEsR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHB4Q2pCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NjY2MjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ZtLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIFNYIGJ5dGVjb2RlIFZNIOKAlCBzdGFjay1iYXNlZCBpbnRlcnByZXRlci5cblxuICAgIEV4ZWN1dGVzIGJ5dGVjb2RlIHByb2R1Y2VkIGJ5IGNvbXBpbGVyLnN4LlxuICAgIERlc2lnbmVkIGZvciBzcGVlZDogYXJyYXktYmFzZWQgc3RhY2ssIGRpcmVjdCBkaXNwYXRjaCxcbiAgICBubyBhbGxvY2F0aW9uIHBlciBzdGVwICh1bmxpa2UgdGhlIENFSyBtYWNoaW5lKS5cblxuICAgIFRoaXMgaXMgdGhlIHBsYXRmb3JtLW5hdGl2ZSBleGVjdXRpb24gZW5naW5lLiBUaGUgc2FtZSBieXRlY29kZVxuICAgIHJ1bnMgb24gYWxsIHBsYXRmb3JtcyAoT0NhbWwsIEpTLCBXQVNNKS5cblxuICAgIFZNIHR5cGVzICh2bV9jb2RlLCB2bV91cHZhbHVlX2NlbGwsIHZtX2Nsb3N1cmUpIGFyZSBkZWZpbmVkIGluXG4gICAgc3hfdHlwZXMubWwgdG8gc2hhcmUgdGhlIG11dHVhbCByZWN1cnNpb24gYmxvY2sgd2l0aCBbdmFsdWVdLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBDYWxsIGZyYW1lIOKAlCBvbmUgcGVyIGZ1bmN0aW9uIGludm9jYXRpb24uICopXG50eXBlIGZyYW1lID0ge1xuICBjbG9zdXJlICAgOiB2bV9jbG9zdXJlO1xuICBtdXRhYmxlIGlwIDogaW50O1xuICBiYXNlICAgICAgOiBpbnQ7ICAoKiBiYXNlIGluZGV4IGluIHZhbHVlIHN0YWNrIGZvciBsb2NhbHMgKilcbiAgbG9jYWxfY2VsbHMgOiAoaW50LCB2bV91cHZhbHVlX2NlbGwpIEhhc2h0YmwudDsgICgqIHNsb3Qg4oaSIHNoYXJlZCBjZWxsIGZvciBjYXB0dXJlZCBsb2NhbHMgKilcbn1cblxuKCoqIEV4Y2VwdGlvbiBoYW5kbGVyIGVudHJ5IG9uIHRoZSBoYW5kbGVyIHN0YWNrLiAqKVxudHlwZSBoYW5kbGVyX2VudHJ5ID0ge1xuICBoX2NhdGNoX2lwICAgIDogaW50OyAgICAoKiBJUCB0byBqdW1wIHRvIHdoZW4gZXhjZXB0aW9uIGlzIHJhaXNlZCAqKVxuICBoX2ZyYW1lX2RlcHRoIDogaW50OyAgICAoKiBudW1iZXIgb2YgZnJhbWVzIHdoZW4gaGFuZGxlciB3YXMgcHVzaGVkICopXG4gIGhfc3AgICAgICAgICAgOiBpbnQ7ICAgICgqIHN0YWNrIHBvaW50ZXIgd2hlbiBoYW5kbGVyIHdhcyBwdXNoZWQgKilcbiAgaF9mcmFtZSAgICAgICA6IGZyYW1lOyAgKCogdGhlIGZyYW1lIHRoYXQgcHVzaGVkIHRoZSBoYW5kbGVyICopXG59XG5cbigqKiBWTSBzdGF0ZS4gKilcbnR5cGUgdm0gPSB7XG4gIG11dGFibGUgc3RhY2sgIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgc3AgICAgIDogaW50O1xuICBtdXRhYmxlIGZyYW1lcyA6IGZyYW1lIGxpc3Q7XG4gIGdsb2JhbHMgICAgICAgIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudDsgICgqIGxpdmUgcmVmZXJlbmNlIHRvIGtlcm5lbCBlbnYgKilcbiAgbXV0YWJsZSBwZW5kaW5nX2NlayA6IHZhbHVlIG9wdGlvbjsgICgqIHN1c3BlbmRlZCBDRUsgc3RhdGUgZnJvbSBDb21wb25lbnQvTGFtYmRhIGNhbGwgKilcbiAgbXV0YWJsZSBoYW5kbGVyX3N0YWNrIDogaGFuZGxlcl9lbnRyeSBsaXN0OyAgKCogZXhjZXB0aW9uIGhhbmRsZXIgc3RhY2sgKilcbiAgbXV0YWJsZSByZXVzZV9zdGFjayA6IChmcmFtZSBsaXN0ICogaW50KSBsaXN0OyAgKCogc2F2ZWQgY2FsbF9jbG9zdXJlX3JldXNlIGNvbnRpbnVhdGlvbnMgKilcbn1cblxuKCoqIFJhaXNlZCB3aGVuIE9QX1BFUkZPUk0gaXMgZXhlY3V0ZWQuIENhcnJpZXMgdGhlIElPIHJlcXVlc3QgZGljdFxuICAgIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgVk0gKHdoaWNoIGlzIGluIGEgcmVzdW1hYmxlIHN0YXRlOlxuICAgIGlwIHBhc3QgT1BfUEVSRk9STSwgc3RhY2sgcmVhZHkgZm9yIGEgcmVzdWx0IHB1c2gpLiAqKVxuZXhjZXB0aW9uIFZtU3VzcGVuZGVkIG9mIHZhbHVlICogdm1cblxuKCoqIFJhaXNlZCBieSB0aGUgZXh0ZW5zaW9uIGRpc3BhdGNoIGZhbGx0aHJvdWdoIHdoZW4gYW4gb3Bjb2RlIGluIHRoZVxuICAgIGV4dGVuc2lvbiByYW5nZSAo4omlIDIwMCkgaXMgZW5jb3VudGVyZWQgd2l0aCBubyBoYW5kbGVyIHJlZ2lzdGVyZWQuXG4gICAgQ2FycmllcyB0aGUgb2ZmZW5kaW5nIG9wY29kZSBpZC4gU2VlIHBsYW5zL3N4LXZtLW9wY29kZS1leHRlbnNpb24ubWQuICopXG5leGNlcHRpb24gSW52YWxpZF9vcGNvZGUgb2YgaW50XG5cbigqIFJlZ2lzdGVyIHRoZSBWTSBzdXNwZW5zaW9uIGNvbnZlcnRlciBzbyBzeF9ydW50aW1lLnN4X2FwcGx5X2NlayBjYW5cbiAgIGNhdGNoIFZtU3VzcGVuZGVkIGFuZCBjb252ZXJ0IGl0IHRvIENla1BlcmZvcm1SZXF1ZXN0IHdpdGhvdXQgYVxuICAgZGlyZWN0IGRlcGVuZGVuY3kgb24gdGhpcyBtb2R1bGUuICopXG5sZXQgKCkgPSBTeF90eXBlcy5fY29udmVydF92bV9zdXNwZW5zaW9uIDo9IChmdW4gZXhuIC0+XG4gIG1hdGNoIGV4biB3aXRoXG4gIHwgVm1TdXNwZW5kZWQgKHJlcXVlc3QsIF92bSkgLT4gcmFpc2UgKENla1BlcmZvcm1SZXF1ZXN0IHJlcXVlc3QpXG4gIHwgXyAtPiAoKSlcblxuXG4oKiogRm9yd2FyZCByZWZlcmVuY2UgZm9yIEpJVCBjb21waWxhdGlvbiDigJQgc2V0IGFmdGVyIGRlZmluaXRpb24uICopXG5sZXQgaml0X2NvbXBpbGVfcmVmIDogKGxhbWJkYSAtPiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50IC0+IHZtX2Nsb3N1cmUgb3B0aW9uKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gTm9uZSlcblxuKCoqIEZvcndhcmQgcmVmZXJlbmNlIGZvciBleHRlbnNpb24gb3Bjb2RlIGRpc3BhdGNoIOKAlCBQaGFzZSBCIGluc3RhbGxzIHRoZVxuICAgIHJlYWwgcmVnaXN0cnkncyBkaXNwYXRjaCBmdW5jdGlvbiBoZXJlIGF0IG1vZHVsZSBpbml0LiBVbnRpbCB0aGVuLCBhbnlcbiAgICBvcGNvZGUgaW4gdGhlIGV4dGVuc2lvbiByYW5nZSByYWlzZXMgW0ludmFsaWRfb3Bjb2RlXS4gU2FtZSBmb3J3YXJkLXJlZlxuICAgIHBhdHRlcm4gYXMgW2ppdF9jb21waWxlX3JlZl0gYWJvdmU7IGtlZXBzIFtTeF92bV9leHRlbnNpb25zXSBmcmVlIHRvXG4gICAgZGVwZW5kIG9uIFtTeF92bV0ncyBbdm1dIC8gW2ZyYW1lXSB0eXBlcyB3aXRob3V0IGEgY3ljbGUuICopXG5sZXQgZXh0ZW5zaW9uX2Rpc3BhdGNoX3JlZiA6IChpbnQgLT4gdm0gLT4gZnJhbWUgLT4gdW5pdCkgcmVmID1cbiAgcmVmIChmdW4gb3AgX3ZtIF9mcmFtZSAtPiByYWlzZSAoSW52YWxpZF9vcGNvZGUgb3ApKVxuXG4oKiogRm9yd2FyZCByZWZlcmVuY2UgZm9yIGV4dGVuc2lvbiBvcGNvZGUg4oaSIG5hbWUgbG9va3VwLCB1c2VkIGJ5XG4gICAgW29wY29kZV9uYW1lXSAvIFtkaXNhc3NlbWJsZV0gZm9yIGh1bWFuLXJlYWRhYmxlIGRpc2Fzc2VtYmx5LiAgVGhlXG4gICAgcmVnaXN0cnkgaW5zdGFsbHMgYSByZWFsIGxvb2t1cCBhdCBtb2R1bGUgaW5pdDsgZGVmYXVsdCByZXR1cm5zXG4gICAgW05vbmVdICh0aGVuIFtvcGNvZGVfbmFtZV0gZmFsbHMgYmFjayB0byBcIlVOS05PV05fblwiKS4gKilcbmxldCBleHRlbnNpb25fb3Bjb2RlX25hbWVfcmVmIDogKGludCAtPiBzdHJpbmcgb3B0aW9uKSByZWYgPVxuICByZWYgKGZ1biBfIC0+IE5vbmUpXG5cbigqIEpJVCB0aHJlc2hvbGQgYW5kIGNvdW50ZXJzIGxpdmUgaW4gU3hfdHlwZXMgc28gcHJpbWl0aXZlcyBjYW4gcmVhZCB0aGVtXG4gICB3aXRob3V0IGNyZWF0aW5nIGEgc3hfcHJpbWl0aXZlcyDihpIgc3hfdm0gZGVwZW5kZW5jeSBjeWNsZS4gKilcblxuKCoqIFNlbnRpbmVsIGNsb3N1cmUgaW5kaWNhdGluZyBKSVQgY29tcGlsYXRpb24gd2FzIGF0dGVtcHRlZCBhbmQgZmFpbGVkLlxuICAgIFByZXZlbnRzIHJldHJ5aW5nIGNvbXBpbGF0aW9uIG9uIGV2ZXJ5IGNhbGwuICopXG5sZXQgaml0X2ZhaWxlZF9zZW50aW5lbCA9IHtcbiAgdm1fY29kZSA9IHsgdmNfYXJpdHkgPSAtMTsgdmNfcmVzdF9hcml0eSA9IC0xOyB2Y19sb2NhbHMgPSAwOyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF07XG4gICAgICAgICAgICAgIHZjX2J5dGVjb2RlX2xpc3QgPSBOb25lOyB2Y19jb25zdGFudHNfbGlzdCA9IE5vbmUgfTtcbiAgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcIl9faml0X2ZhaWxlZF9fXCI7IHZtX2Vudl9yZWYgPSBIYXNodGJsLmNyZWF0ZSAwOyB2bV9jbG9zdXJlX2VudiA9IE5vbmVcbn1cblxubGV0IGlzX2ppdF9mYWlsZWQgY2wgPSBjbC52bV9jb2RlLnZjX2FyaXR5ID0gLTFcblxuKCoqIEN1cnJlbnQgYWN0aXZlIFZNIOKAlCBhbGxvd3MgSE8gcHJpbWl0aXZlcyAobWFwLCBmaWx0ZXIsIGZvci1lYWNoLCBzb21lKVxuICAgIHRvIGNhbGwgVm1DbG9zdXJlIGNhbGxiYWNrcyBvbiB0aGUgc2FtZSBWTSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBUaGlzIGlzIGNyaXRpY2FsOiBjcmVhdGluZyBhIG5ldyBWTSBwZXIgY2FsbGJhY2sgbG9zZXMgdGhlIGNhbGxpbmcgVk0nc1xuICAgIHN0YWNrL2ZyYW1lIGNvbnRleHQsIGNhdXNpbmcgdXB2YWx1ZS1jYXB0dXJlZCBob3N0IG9iamVjdHMgdG8gYmVjb21lXG4gICAgaW5hY2Nlc3NpYmxlLiAqKVxubGV0IF9hY3RpdmVfdm0gOiB2bSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxubGV0IGNyZWF0ZSBnbG9iYWxzID1cbiAgeyBzdGFjayA9IEFycmF5Lm1ha2UgNDA5NiBOaWw7IHNwID0gMDsgZnJhbWVzID0gW107IGdsb2JhbHM7IHBlbmRpbmdfY2VrID0gTm9uZTsgaGFuZGxlcl9zdGFjayA9IFtdOyByZXVzZV9zdGFjayA9IFtdIH1cblxuKCoqIFN0YWNrIG9wcyDigJQgaW5saW5lZCBmb3Igc3BlZWQuICopXG5sZXQgcHVzaCB2bSB2ID1cbiAgaWYgdm0uc3AgPj0gQXJyYXkubGVuZ3RoIHZtLnN0YWNrIHRoZW4gYmVnaW5cbiAgICBsZXQgbnMgPSBBcnJheS5tYWtlICh2bS5zcCAqIDIpIE5pbCBpblxuICAgIEFycmF5LmJsaXQgdm0uc3RhY2sgMCBucyAwIHZtLnNwO1xuICAgIHZtLnN0YWNrIDwtIG5zXG4gIGVuZDtcbiAgdm0uc3RhY2suKHZtLnNwKSA8LSB2O1xuICB2bS5zcCA8LSB2bS5zcCArIDFcblxubGV0W0BpbmxpbmVdIHBvcCB2bSA9XG4gIHZtLnNwIDwtIHZtLnNwIC0gMTtcbiAgdm0uc3RhY2suKHZtLnNwKVxuXG5sZXRbQGlubGluZV0gcGVlayB2bSA9IHZtLnN0YWNrLih2bS5zcCAtIDEpXG5cbigqKiBSZWFkIG9wZXJhbmRzLiAqKVxubGV0W0BpbmxpbmVdIHJlYWRfdTggZiA9XG4gIGxldCB2ID0gZi5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYuaXApIGluXG4gIGYuaXAgPC0gZi5pcCArIDE7IHZcblxubGV0W0BpbmxpbmVdIHJlYWRfdTE2IGYgPVxuICBsZXQgbG8gPSBmLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi5pcCkgaW5cbiAgbGV0IGhpID0gZi5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYuaXAgKyAxKSBpblxuICBmLmlwIDwtIGYuaXAgKyAyO1xuICBsbyBsb3IgKGhpIGxzbCA4KVxuXG5sZXRbQGlubGluZV0gcmVhZF9pMTYgZiA9XG4gIGxldCB2ID0gcmVhZF91MTYgZiBpblxuICBpZiB2ID49IDMyNzY4IHRoZW4gdiAtIDY1NTM2IGVsc2UgdlxuXG4oKiogV3JhcCBhIFZNIGNsb3N1cmUgYXMgYW4gU1ggdmFsdWUgKE5hdGl2ZUZuKS4gKilcbmxldCBjbG9zdXJlX3RvX3ZhbHVlIGNsID1cbiAgTmF0aXZlRm4gKFwidm06XCIgXiAobWF0Y2ggY2wudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcImFub25cIiksXG4gICAgZnVuIGFyZ3MgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk1fQ0xPU1VSRV9DQUxMOlwiIF4gU3RyaW5nLmNvbmNhdCBcIixcIiAoTGlzdC5tYXAgU3hfcnVudGltZS52YWx1ZV90b19zdHIgYXJncykpKSlcbiAgKCogUGxhY2Vob2xkZXIg4oCUIGFjdHVhbCBjYWxscyBnbyB0aHJvdWdoIHZtX2NhbGwgYmVsb3cgKilcblxuKCoqIFBhcnNlIGtleXdvcmQgYXJncyBmcm9tIGFuIGV2YWx1YXRlZCBhcmdzIGxpc3QuXG4gICAgVGhlIGNvbXBpbGVyIGNvbnZlcnRzIDprZXl3b3JkIHRvIGl0cyBzdHJpbmcgbmFtZSwgc28gd2UgbmVlZCB0aGVcbiAgICBjb21wb25lbnQncyBwYXJhbSBsaXN0IHRvIGlkZW50aWZ5IHdoaWNoIHN0cmluZ3MgYXJlIGtleXdvcmQgbmFtZXMuXG4gICAgUmV0dXJucyAoa3dhcmdzX2hhc2h0YmwsIGNoaWxkcmVuX2xpc3QpLiAqKVxubGV0IHBhcnNlX2tleXdvcmRfYXJncyBwYXJhbXMgYXJncyA9XG4gIGxldCBwYXJhbV9zZXQgPSBIYXNodGJsLmNyZWF0ZSAoTGlzdC5sZW5ndGggcGFyYW1zKSBpblxuICBMaXN0Lml0ZXIgKGZ1biBwIC0+IEhhc2h0YmwucmVwbGFjZSBwYXJhbV9zZXQgcCB0cnVlKSBwYXJhbXM7XG4gIGxldCBrd2FyZ3MgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gIGxldCBjaGlsZHJlbiA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICB8IChTdHJpbmcgayB8IEtleXdvcmQgaykgOjogdiA6OiByZXN0IHdoZW4gSGFzaHRibC5tZW0gcGFyYW1fc2V0IGsgLT5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBrd2FyZ3MgayB2OyBnbyByZXN0XG4gICAgfCB2IDo6IHJlc3QgLT4gY2hpbGRyZW4gOj0gdiA6OiAhY2hpbGRyZW47IGdvIHJlc3RcbiAgICB8IFtdIC0+ICgpXG4gIGluXG4gIGdvIGFyZ3M7XG4gIChrd2FyZ3MsIExpc3QucmV2ICFjaGlsZHJlbilcblxubGV0IF92bV9jb21wX2ppdF9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2NvbXBfY2VrX2NvdW50ID0gcmVmIDBcbmxldCBfdm1faW5zbl9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2NhbGxfY291bnQgPSByZWYgMFxubGV0IF92bV9jZWtfY291bnQgPSByZWYgMFxubGV0IHZtX3Jlc2V0X2NvdW50ZXJzICgpID0gX3ZtX2luc25fY291bnQgOj0gMDsgX3ZtX2NhbGxfY291bnQgOj0gMDsgX3ZtX2Nla19jb3VudCA6PSAwO1xuICBfdm1fY29tcF9qaXRfY291bnQgOj0gMDsgX3ZtX2NvbXBfY2VrX2NvdW50IDo9IDBcbmxldCB2bV9yZXBvcnRfY291bnRlcnMgKCkgPVxuICBQcmludGYuZXByaW50ZiBcIlt2bS1wZXJmXSBpbnNucz0lZCBjYWxscz0lZCBjZWtfZmFsbGJhY2tzPSVkIGNvbXBfaml0PSVkIGNvbXBfY2VrPSVkXFxuJSFcIlxuICAgICFfdm1faW5zbl9jb3VudCAhX3ZtX2NhbGxfY291bnQgIV92bV9jZWtfY291bnQgIV92bV9jb21wX2ppdF9jb3VudCAhX3ZtX2NvbXBfY2VrX2NvdW50XG5cbigqKiBHbG9iYWwgZmxhZzogdHJ1ZSB3aGlsZSBhIEpJVCBjb21waWxhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbiAgICBQcmV2ZW50cyB0aGUgSklUIGhvb2sgZnJvbSBpbnRlcmNlcHRpbmcgY2FsbHMgZHVyaW5nIGNvbXBpbGF0aW9uLFxuICAgIHdoaWNoIHdvdWxkIGNhdXNlIGluZmluaXRlIGNhc2NhZGVzIChjb21waWxpbmcgdGhlIGNvbXBpbGVyKS4gKilcbmxldCBfaml0X2NvbXBpbGluZyA9IHJlZiBmYWxzZVxuXG4oKiogUHVzaCBhIFZNIGNsb3N1cmUgZnJhbWUgb250byB0aGUgY3VycmVudCBWTSDigJQgbm8gbmV3IFZNIGFsbG9jYXRpb24uXG4gICAgVGhpcyBpcyB0aGUgZmFzdCBwYXRoIGZvciBpbnRyYS1WTSBjbG9zdXJlIGNhbGxzLiAqKVxubGV0IHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzID1cbiAgbGV0IGZyYW1lID0geyBjbG9zdXJlID0gY2w7IGlwID0gMDsgYmFzZSA9IHZtLnNwOyBsb2NhbF9jZWxscyA9IEhhc2h0YmwuY3JlYXRlIDQgfSBpblxuICBsZXQgcmVzdF9hcml0eSA9IGNsLnZtX2NvZGUudmNfcmVzdF9hcml0eSBpblxuICBpZiByZXN0X2FyaXR5ID49IDAgdGhlbiBiZWdpblxuICAgICgqICZyZXN0IGZ1bmN0aW9uOiBwdXNoIHBvc2l0aW9uYWwgYXJncywgY29sbGVjdCByZW1haW5kZXIgaW50byBhIGxpc3QuXG4gICAgICAgRm9yIChmbiAoYSBiICZyZXN0IGMpIGJvZHkpIHdpdGggcmVzdF9hcml0eT0yOlxuICAgICAgICAgc2xvdHM6IDA9YSwgMT1iLCAyPWMgKHRoZSByZXN0IGxpc3QpICopXG4gICAgbGV0IG5hcmdzID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIGxldCByZWMgcHVzaF9hcmdzIGkgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPlxuICAgICAgICBmb3IgXyA9IGkgdG8gcmVzdF9hcml0eSAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZTtcbiAgICAgICAgcHVzaCB2bSAoTGlzdCBbXSlcbiAgICAgIHwgYSA6OiByZW1haW5pbmcgLT5cbiAgICAgICAgaWYgaSA8IHJlc3RfYXJpdHkgdGhlbiAocHVzaCB2bSBhOyBwdXNoX2FyZ3MgKGkgKyAxKSByZW1haW5pbmcpXG4gICAgICAgIGVsc2UgcHVzaCB2bSAoTGlzdCAoYSA6OiByZW1haW5pbmcpKVxuICAgIGluXG4gICAgcHVzaF9hcmdzIDAgYXJncztcbiAgICBsZXQgdXNlZCA9IChpZiBuYXJncyA+IHJlc3RfYXJpdHkgdGhlbiByZXN0X2FyaXR5ICsgMSBlbHNlIG5hcmdzICsgMSkgaW5cbiAgICBmb3IgXyA9IHVzZWQgdG8gY2wudm1fY29kZS52Y19sb2NhbHMgLSAxIGRvIHB1c2ggdm0gTmlsIGRvbmVcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biBhIC0+IHB1c2ggdm0gYSkgYXJncztcbiAgICBmb3IgXyA9IExpc3QubGVuZ3RoIGFyZ3MgdG8gY2wudm1fY29kZS52Y19sb2NhbHMgLSAxIGRvIHB1c2ggdm0gTmlsIGRvbmVcbiAgZW5kO1xuICB2bS5mcmFtZXMgPC0gZnJhbWUgOjogdm0uZnJhbWVzXG5cbigqKiBDb252ZXJ0IGNvbXBpbGVyIG91dHB1dCAoU1ggZGljdCkgdG8gYSB2bV9jb2RlIG9iamVjdC4gKilcbmxldCBjb2RlX2Zyb21fdmFsdWUgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgICgqIEFjY2VwdCBib3RoIGNvbXBpbGVyIG91dHB1dCBrZXlzIChieXRlY29kZS9jb25zdGFudHMvYXJpdHkpIGFuZFxuICAgICAgIFNYIHZtLWNvZGUga2V5cyAodmMtYnl0ZWNvZGUvdmMtY29uc3RhbnRzL3ZjLWFyaXR5KSAqKVxuICAgIGxldCBmaW5kMiBrMSBrMiA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBrMSB3aXRoXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHIgfCBOb25lIC0+IEhhc2h0YmwuZmluZF9vcHQgZCBrMiBpblxuICAgIGxldCBiY19saXN0ID0gbWF0Y2ggZmluZDIgXCJieXRlY29kZVwiIFwidmMtYnl0ZWNvZGVcIiB3aXRoXG4gICAgICB8IFNvbWUgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSkgLT5cbiAgICAgICAgQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IG1hdGNoIHggd2l0aFxuICAgICAgICAgIHwgSW50ZWdlciBuIC0+IG4gfCBOdW1iZXIgbiAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gMCkgbClcbiAgICAgIHwgXyAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZW50cmllcyA9IG1hdGNoIGZpbmQyIFwiY29uc3RhbnRzXCIgXCJ2Yy1jb25zdGFudHNcIiB3aXRoXG4gICAgICB8IFNvbWUgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSkgLT4gQXJyYXkub2ZfbGlzdCBsXG4gICAgICB8IF8gLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGNvbnN0YW50cyA9IEFycmF5Lm1hcCAoZnVuIGVudHJ5IC0+XG4gICAgICBtYXRjaCBlbnRyeSB3aXRoXG4gICAgICB8IERpY3QgZWQgd2hlbiBIYXNodGJsLm1lbSBlZCBcImJ5dGVjb2RlXCIgfHwgSGFzaHRibC5tZW0gZWQgXCJ2Yy1ieXRlY29kZVwiIC0+IGVudHJ5XG4gICAgICB8IF8gLT4gZW50cnlcbiAgICApIGVudHJpZXMgaW5cbiAgICBsZXQgYXJpdHkgPSBtYXRjaCBmaW5kMiBcImFyaXR5XCIgXCJ2Yy1hcml0eVwiIHdpdGhcbiAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwXG4gICAgaW5cbiAgICBsZXQgcmVzdF9hcml0eSA9IG1hdGNoIGZpbmQyIFwicmVzdC1hcml0eVwiIFwidmMtcmVzdC1hcml0eVwiIHdpdGhcbiAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAtMVxuICAgIGluXG4gICAgKCogQ29tcHV0ZSBsb2NhbHMgZnJvbSBieXRlY29kZTogc2NhbiBmb3IgaGlnaGVzdCBMT0NBTF9HRVQvTE9DQUxfU0VUIHNsb3QuXG4gICAgICAgVGhlIGNvbXBpbGVyJ3MgYXJpdHkgbWF5IHVuZGVyY291bnQgd2hlbiBuZXN0ZWQgbGV0cyBhZGQgbWFueSBsb2NhbHMuICopXG4gICAgbGV0IG1heF9sb2NhbCA9IHJlZiAoYXJpdHkgLSAxKSBpblxuICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYmNfbGlzdCBpblxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhaSA8IGxlbiBkb1xuICAgICAgbGV0IG9wID0gYmNfbGlzdC4oIWkpIGluXG4gICAgICBpZiAob3AgPSAxNiAoKiBMT0NBTF9HRVQgKikgfHwgb3AgPSAxNyAoKiBMT0NBTF9TRVQgKikpICYmICFpICsgMSA8IGxlbiB0aGVuXG4gICAgICAgIChsZXQgc2xvdCA9IGJjX2xpc3QuKCFpICsgMSkgaW5cbiAgICAgICAgIGlmIHNsb3QgPiAhbWF4X2xvY2FsIHRoZW4gbWF4X2xvY2FsIDo9IHNsb3Q7XG4gICAgICAgICBpIDo9ICFpICsgMilcbiAgICAgIGVsc2UgaWYgb3AgPSAxOCAoKiBVUFZBTFVFX0dFVCAqKSB8fCBvcCA9IDE5ICgqIFVQVkFMVUVfU0VUICopXG4gICAgICAgICAgIHx8IG9wID0gOCAoKiBKVU1QX0lGX0ZBTFNFICopIHx8IG9wID0gMzMgKCogSlVNUF9JRl9GQUxTRV91MTYgKilcbiAgICAgICAgICAgfHwgb3AgPSAzNCAoKiBKVU1QX0lGX1RSVUUgKikgdGhlblxuICAgICAgICBpIDo9ICFpICsgMlxuICAgICAgZWxzZSBpZiBvcCA9IDEgKCogQ09OU1QgKikgfHwgb3AgPSAyMCAoKiBHTE9CQUxfR0VUICopIHx8IG9wID0gMjEgKCogR0xPQkFMX1NFVCAqKVxuICAgICAgICAgICB8fCBvcCA9IDMyICgqIEpVTVAgKikgfHwgb3AgPSA1MSAoKiBDTE9TVVJFICopIHx8IG9wID0gNTIgKCogQ0FMTF9QUklNICopXG4gICAgICAgICAgIHx8IG9wID0gNjQgKCogTUFLRV9MSVNUICopIHx8IG9wID0gNjUgKCogTUFLRV9ESUNUICopIHRoZW5cbiAgICAgICAgaSA6PSAhaSArIDMgICgqIHUxNiBvcGVyYW5kICopXG4gICAgICBlbHNlXG4gICAgICAgIGkgOj0gIWkgKyAxXG4gICAgZG9uZTtcbiAgICBsZXQgbG9jYWxzID0gIW1heF9sb2NhbCArIDEgKyAxNiBpbiAgKCogKzE2IGhlYWRyb29tIGZvciB0ZW1wb3JhcmllcyAqKVxuICAgIHsgdmNfYXJpdHkgPSBhcml0eTsgdmNfcmVzdF9hcml0eSA9IHJlc3RfYXJpdHk7IHZjX2xvY2FscyA9IGxvY2FscztcbiAgICAgIHZjX2J5dGVjb2RlID0gYmNfbGlzdDsgdmNfY29uc3RhbnRzID0gY29uc3RhbnRzO1xuICAgICAgdmNfYnl0ZWNvZGVfbGlzdCA9IE5vbmU7IHZjX2NvbnN0YW50c19saXN0ID0gTm9uZSB9XG4gIHwgXyAtPiB7IHZjX2FyaXR5ID0gMDsgdmNfcmVzdF9hcml0eSA9IC0xOyB2Y19sb2NhbHMgPSAxNjsgdmNfYnl0ZWNvZGUgPSBbfHxdOyB2Y19jb25zdGFudHMgPSBbfHxdO1xuICAgICAgICAgICB2Y19ieXRlY29kZV9saXN0ID0gTm9uZTsgdmNfY29uc3RhbnRzX2xpc3QgPSBOb25lIH1cblxuKCoqIEpJVC1jb21waWxlIGEgY29tcG9uZW50IG9yIGlzbGFuZCBib2R5LlxuICAgIFdyYXBzIGJvZHkgYXMgKGZuIChwYXJhbTEgcGFyYW0yIC4uLiBbY2hpbGRyZW5dKSBib2R5KSBhbmQgY29tcGlsZXMuXG4gICAgUmV0dXJucyBTb21lIHZtX2Nsb3N1cmUgb24gc3VjY2VzcywgTm9uZSBvbiBmYWlsdXJlLiAqKVxubGV0IGppdF9jb21waWxlX2NvbXAgfm5hbWUgfnBhcmFtcyB+aGFzX2NoaWxkcmVuIH5ib2R5IH5jbG9zdXJlIGdsb2JhbHMgPVxuICB0cnlcbiAgICBsZXQgX2NvbXBpbGVfZm4gPSB0cnkgSGFzaHRibC5maW5kIGdsb2JhbHMgXCJjb21waWxlXCJcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiSklUOiBjb21waWxlciBub3QgbG9hZGVkXCIpIGluXG4gICAgbGV0IHBhcmFtX25hbWVzID0gcGFyYW1zIEAgKGlmIGhhc19jaGlsZHJlbiB0aGVuIFtcImNoaWxkcmVuXCJdIGVsc2UgW10pIGluXG4gICAgbGV0IHBhcmFtX3N5bXMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3ltYm9sIHMpIHBhcmFtX25hbWVzKSBpblxuICAgIGxldCBmbl9leHByID0gTGlzdCBbU3ltYm9sIFwiZm5cIjsgcGFyYW1fc3ltczsgYm9keV0gaW5cbiAgICBsZXQgcXVvdGVkID0gTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgZm5fZXhwcl0gaW5cbiAgICBsZXQgY29tcGlsZV9lbnYgPSBTeF90eXBlcy5lbnZfZXh0ZW5kIChTeF90eXBlcy5tYWtlX2VudiAoKSkgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIGNvbXBpbGVfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gaykgdikgZ2xvYmFscztcbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbU3ltYm9sIFwiY29tcGlsZVwiOyBxdW90ZWRdKSAoRW52IGNvbXBpbGVfZW52KSBpblxuICAgIChtYXRjaCByZXN1bHQgd2l0aFxuICAgIHwgRGljdCBkIHdoZW4gSGFzaHRibC5tZW0gZCBcImJ5dGVjb2RlXCIgLT5cbiAgICAgIGxldCBvdXRlcl9jb2RlID0gY29kZV9mcm9tX3ZhbHVlIHJlc3VsdCBpblxuICAgICAgbGV0IGJjID0gb3V0ZXJfY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIGJjID49IDQgJiYgYmMuKDApID0gNTEgKCogT1BfQ0xPU1VSRSAqKSB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBpZHggPSBiYy4oMSkgbG9yIChiYy4oMikgbHNsIDgpIGluXG4gICAgICAgIGlmIGlkeCA8IEFycmF5Lmxlbmd0aCBvdXRlcl9jb2RlLnZjX2NvbnN0YW50cyB0aGVuXG4gICAgICAgICAgbGV0IGlubmVyX3ZhbCA9IG91dGVyX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIGluXG4gICAgICAgICAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgaW5uZXJfdmFsIGluXG4gICAgICAgICAgU29tZSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07XG4gICAgICAgICAgICAgICAgIHZtX25hbWUgPSBTb21lIG5hbWU7IHZtX2Vudl9yZWYgPSBnbG9iYWxzO1xuICAgICAgICAgICAgICAgICB2bV9jbG9zdXJlX2VudiA9IFNvbWUgY2xvc3VyZSB9XG4gICAgICAgIGVsc2UgTm9uZVxuICAgICAgZW5kIGVsc2UgTm9uZVxuICAgIHwgXyAtPiBOb25lKVxuICB3aXRoIGUgLT5cbiAgICBQcmludGYuZXByaW50ZiBcIltqaXQtY29tcF0gRkFJTCAlczogJXNcXG4lIVwiIG5hbWUgKFByaW50ZXhjLnRvX3N0cmluZyBlKTtcbiAgICBOb25lXG5cbigqKiBDYWxsIGFuIFNYIHZhbHVlIHZpYSBDRUssIGRldGVjdGluZyBzdXNwZW5zaW9uIGluc3RlYWQgb2YgZXJyb3JpbmcuXG4gICAgUmV0dXJucyB0aGUgcmVzdWx0IHZhbHVlLCBvciByYWlzZXMgVm1TdXNwZW5kZWQgaWYgQ0VLIHN1c3BlbmRzLlxuICAgIFNhdmVzIHRoZSBzdXNwZW5kZWQgQ0VLIHN0YXRlIGluIHZtLnBlbmRpbmdfY2VrIGZvciBsYXRlciByZXN1bWUuICopXG5sZXQgY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIGFyZ3MgPVxuICBpbmNyIF92bV9jZWtfY291bnQ7XG4gICgqIFJlbW92ZWQgZGVidWcgdHJhY2UgKilcbiAgbGV0IGEgPSBtYXRjaCBhcmdzIHdpdGggTmlsIC0+IFtdIHwgTGlzdCBsIC0+IGwgfCBfIC0+IFthcmdzXSBpblxuICAoKiBSZXBsYWNlIF9hY3RpdmVfdm0gd2l0aCBhbiBlbXB0eSBpc29sYXRpb24gVk0gc28gY2FsbF9jbG9zdXJlX3JldXNlXG4gICAgIGluc2lkZSB0aGUgQ0VLIHB1c2hlcyBvbnRvIGFuIGVtcHR5IGZyYW1lIHN0YWNrIHJhdGhlciB0aGFuIHRoZSBjYWxsZXIncy5cbiAgICAgV2l0aG91dCB0aGlzLCBhIFZtQ2xvc3VyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIENFSyAoZS5nLiBocy13YWl0KVxuICAgICBtZXJnZXMgZnJhbWVzIHdpdGggdGhlIGNhbGxlcidzIFZNIChlLmcuIGRvLXJlcGVhdCksIGFuZCBvbiByZXN1bWVcbiAgICAgdGhlIFZNIHNraXBzIHRoZSBDRUsncyByZW1haW5pbmcgY29udGludWF0aW9uICh3cm9uZyBtdXRhdGlvbiBvcmRlcikuXG4gICAgIFVzaW5nIFNvbWUoaXNvbGF0aW9uKSByYXRoZXIgdGhhbiBOb25lIGtlZXBzIHRoZSBjYWxsX2Nsb3N1cmVfcmV1c2VcbiAgICAgXCJTb21lXCIgcGF0aCB3aGljaCBwcmVzZXJ2ZXMgZXhjZXB0aW9uIGlkZW50aXR5IGluIGpzX29mX29jYW1sLiAqKVxuICBsZXQgc2F2ZWRfYWN0aXZlID0gIV9hY3RpdmVfdm0gaW5cbiAgX2FjdGl2ZV92bSA6PSBTb21lIChjcmVhdGUgdm0uZ2xvYmFscyk7XG4gIGxldCBzdGF0ZSA9IFN4X3JlZi5jb250aW51ZV93aXRoX2NhbGwgZiAoTGlzdCBhKSAoRW52IChTeF90eXBlcy5tYWtlX2VudiAoKSkpIChMaXN0IGEpIChMaXN0IFtdKSBpblxuICBsZXQgZmluYWwgPSBTeF9yZWYuY2VrX3N0ZXBfbG9vcCBzdGF0ZSBpblxuICBfYWN0aXZlX3ZtIDo9IHNhdmVkX2FjdGl2ZTtcbiAgbWF0Y2ggU3hfcnVudGltZS5nZXRfdmFsIGZpbmFsIChTdHJpbmcgXCJwaGFzZVwiKSB3aXRoXG4gIHwgU3RyaW5nIFwiaW8tc3VzcGVuZGVkXCIgLT5cbiAgICB2bS5wZW5kaW5nX2NlayA8LSBTb21lIGZpbmFsO1xuICAgIHJhaXNlIChWbVN1c3BlbmRlZCAoU3hfcnVudGltZS5nZXRfdmFsIGZpbmFsIChTdHJpbmcgXCJyZXF1ZXN0XCIpLCB2bSkpXG4gIHwgXyAtPiBTeF9yZWYuY2VrX3ZhbHVlIGZpbmFsXG5cbigqKiBFeGVjdXRlIGEgY2xvc3VyZSB3aXRoIGFyZ3VtZW50cyDigJQgY3JlYXRlcyBhIGZyZXNoIFZNLlxuICAgIFVzZWQgZm9yIGVudHJ5IHBvaW50czogSklUIExhbWJkYSBjYWxscywgbW9kdWxlIGV4ZWN1dGlvbiwgY3Jvc3MtYm91bmRhcnkuICopXG5sZXQgcmVjIGNhbGxfY2xvc3VyZSBjbCBhcmdzIGdsb2JhbHMgPVxuICBpbmNyIF92bV9jYWxsX2NvdW50O1xuICBsZXQgcHJldl92bSA9ICFfYWN0aXZlX3ZtIGluXG4gIGxldCB2bSA9IGNyZWF0ZSBnbG9iYWxzIGluXG4gIF9hY3RpdmVfdm0gOj0gU29tZSB2bTtcbiAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3M7XG4gICh0cnkgcnVuIHZtIHdpdGggZSAtPiBfYWN0aXZlX3ZtIDo9IHByZXZfdm07IHJhaXNlIGUpO1xuICBfYWN0aXZlX3ZtIDo9IHByZXZfdm07XG4gIHBvcCB2bVxuXG4oKiogQ2FsbCBhIFZtQ2xvc3VyZSBvbiB0aGUgYWN0aXZlIFZNIGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSBjcmVhdGUgYSBuZXcgb25lLlxuICAgIFRoaXMgaXMgdGhlIHBhdGggdXNlZCBieSBITyBwcmltaXRpdmVzIChtYXAsIGZpbHRlciwgZm9yLWVhY2gsIHNvbWUpIHNvXG4gICAgY2FsbGJhY2tzIHJ1biBvbiB0aGUgc2FtZSBWTSwgYXZvaWRpbmcgcGVyLWNhbGwgVk0gYWxsb2NhdGlvbiBvdmVyaGVhZC4gKilcbmFuZCBjYWxsX2Nsb3N1cmVfcmV1c2UgY2wgYXJncyA9XG4gIG1hdGNoICFfYWN0aXZlX3ZtIHdpdGhcbiAgfCBTb21lIHZtIC0+XG4gICAgbGV0IHNhdmVkX3NwID0gdm0uc3AgaW5cbiAgICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJncztcbiAgICBsZXQgc2F2ZWRfZnJhbWVzID0gTGlzdC50bCB2bS5mcmFtZXMgaW5cbiAgICB2bS5mcmFtZXMgPC0gW0xpc3QuaGQgdm0uZnJhbWVzXTtcbiAgICBsZXQgcmVzdWx0ID1cbiAgICAgICh0cnkgcnVuIHZtO1xuICAgICAgICAoKiBOb3JtYWwgY29tcGxldGlvbjogcmVzdWx0IHNpdHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgIE9QX1JFVFVSTiBub3JtYWxseSBsZWF2ZXMgc3AgPSBzYXZlZF9zcCArIDEsIGJ1dCB0aGVcbiAgICAgICAgICAgYnl0ZWNvZGUtZXhoYXVzdGVkIHBhdGggKG9yIGEgY2FsbGVlIHRoYXQgcmV0dXJucyBhIGNsb3N1cmUgd2hvc2VcbiAgICAgICAgICAgb3duIFJFVFVSTiBsZWF2ZXMgZXh0cmEgc3RhY2sgcmVzaWR1ZSkgY2FuIGxlYXZlIHNwIGluY29uc2lzdGVudC5cbiAgICAgICAgICAgUmVhZCB0aGUgcmVzdWx0IGF0IHRoZSBleHBlY3RlZCBzbG90LiAqKVxuICAgICAgICBpZiB2bS5zcCA+IHNhdmVkX3NwIHRoZW4gdm0uc3RhY2suKHZtLnNwIC0gMSkgZWxzZSBOaWxcbiAgICAgICB3aXRoXG4gICAgICAgfCBWbVN1c3BlbmRlZCAocmVxLCBfKSBhcyBlIC0+XG4gICAgICAgICAobWF0Y2ggIVN4X3R5cGVzLl9jZWtfaW9fcmVzb2x2ZXIgd2l0aFxuICAgICAgICAgIHwgU29tZSByZXNvbHZlciAtPlxuICAgICAgICAgICAgKCogU2VydmluZyBwYXRoOiBhIGBwZXJmb3JtYCBmaXJlZCBpbnNpZGUgdGhpcyBITy1wcmltaXRpdmVcbiAgICAgICAgICAgICAgIGNhbGxiYWNrIChtYXAvZmlsdGVyL3JlZHVjZS9mb3ItZWFjaC/igKYpLiBUaGUgcHJpbWl0aXZlJ3MgbmF0aXZlXG4gICAgICAgICAgICAgICBPQ2FtbCBsb29wIHNpdHMgYmV0d2VlbiB1cyBhbmQgdGhlIHJlc3VtZSBwb2ludCwgc28gd2UgQ0FOTk9UXG4gICAgICAgICAgICAgICB1bndpbmQgaXQgYW5kIHJlc3VtZSBsYXRlciAodGhlIGxvb3Agc3RhdGUgd291bGQgYmUgbG9zdCBhbmQgdGhlXG4gICAgICAgICAgICAgICByZW1haW5pbmcgZWxlbWVudHMgZHJvcHBlZCDigJQgY29ycnVwdGluZyB0aGUgc3RhY2sgc28gdGhlIG5leHRcbiAgICAgICAgICAgICAgIENBTExfUFJJTSBzZWVzIHdyb25nIGFyZ3MpLiBJbnN0ZWFkIHJlc29sdmUgdGhlIGNhbGxiYWNrJ3MgSU9cbiAgICAgICAgICAgICAgIGlubGluZSBhbmQgcnVuIGl0IHRvIGNvbXBsZXRpb24gcmlnaHQgaGVyZSwgcmV0dXJuaW5nIGl0cyB2YWx1ZVxuICAgICAgICAgICAgICAgdG8gdGhlIG5hdGl2ZSBsb29wIGV4YWN0bHkgYXMgYSBub24tc3VzcGVuZGluZyBjYWxsYmFjayB3b3VsZC5cbiAgICAgICAgICAgICAgIHJldXNlX3N0YWNrIGlzIGlzb2xhdGVkIHNvIGFuIG91dGVyIHN1c3BlbnNpb24ncyBzYXZlZFxuICAgICAgICAgICAgICAgY29udGludWF0aW9ucyBhcmVuJ3QgY29uc3VtZWQgYnkgdGhpcyBuZXN0ZWQgcmVzdW1lLiAqKVxuICAgICAgICAgICAgbGV0IHNhdmVkX3JldXNlID0gdm0ucmV1c2Vfc3RhY2sgaW5cbiAgICAgICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIFtdO1xuICAgICAgICAgICAgbGV0IHJlYyBzZXR0bGUgcmVxID1cbiAgICAgICAgICAgICAgbGV0IHIgPSByZXNvbHZlciByZXEgTmlsIGluXG4gICAgICAgICAgICAgICh0cnkgcmVzdW1lX3ZtIHZtIHJcbiAgICAgICAgICAgICAgIHdpdGggVm1TdXNwZW5kZWQgKHJlcTIsIF8pIC0+IHNldHRsZSByZXEyKVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBjYiA9IHNldHRsZSByZXEgaW5cbiAgICAgICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIHNhdmVkX3JldXNlO1xuICAgICAgICAgICAgY2JcbiAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICgqIENFSy1kcml2ZW4gcGF0aCAobm8gc3luY2hyb25vdXMgcmVzb2x2ZXIpOiBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmdcbiAgICAgICAgICAgICAgIGJlaGF2aW91ciDigJQgc2F2ZSB0aGUgY2FsbGVyJ3MgY29udGludWF0aW9uIG9uIHRoZSByZXVzZSBzdGFjayBhbmRcbiAgICAgICAgICAgICAgIHJlLXJhaXNlIHNvIHJlc3VtZV92bSByZXN0b3JlcyBpdCBhZnRlciB0aGUgY2FsbGJhY2sgZmluaXNoZXMuXG4gICAgICAgICAgICAgICBET04nVCBtZXJnZSBmcmFtZXMg4oCUIHRoYXQgY29ycnVwdHMgdGhlIGZyYW1lIGNoYWluLiAqKVxuICAgICAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gKHNhdmVkX2ZyYW1lcywgc2F2ZWRfc3ApIDo6IHZtLnJldXNlX3N0YWNrO1xuICAgICAgICAgICAgcmFpc2UgZSlcbiAgICAgICB8IGUgLT5cbiAgICAgICAgIHZtLmZyYW1lcyA8LSBzYXZlZF9mcmFtZXM7XG4gICAgICAgICB2bS5zcCA8LSBzYXZlZF9zcDtcbiAgICAgICAgIHJhaXNlIGUpXG4gICAgaW5cbiAgICB2bS5mcmFtZXMgPC0gc2F2ZWRfZnJhbWVzO1xuICAgIHZtLnNwIDwtIHNhdmVkX3NwO1xuICAgIHJlc3VsdFxuICB8IE5vbmUgLT5cbiAgICBjYWxsX2Nsb3N1cmUgY2wgYXJncyBjbC52bV9lbnZfcmVmXG5cbigqKiBDYWxsIGEgdmFsdWUgYXMgYSBmdW5jdGlvbiDigJQgZGlzcGF0Y2ggYnkgdHlwZS5cbiAgICBWbUNsb3N1cmU6IHB1c2hlcyBmcmFtZSBvbiBjdXJyZW50IFZNIChmYXN0IGludHJhLVZNIHBhdGgpLlxuICAgIExhbWJkYTogdHJpZXMgSklUIHRoZW4gZmFsbHMgYmFjayB0byBDRUsuXG4gICAgTmF0aXZlRm46IGNhbGxzIGRpcmVjdGx5LiAqKVxuYW5kIHZtX2NhbGwgdm0gZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgVm1DbG9zdXJlIGNsIC0+XG4gICAgKCogRmFzdCBwYXRoOiBwdXNoIGZyYW1lIG9uIGN1cnJlbnQgVk0g4oCUIG5vIGFsbG9jYXRpb24sIGVuYWJsZXMgVENPICopXG4gICAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3NcbiAgfCBOYXRpdmVGbiAoX25hbWUsIGZuKSAtPlxuICAgIGxldCByZXN1bHQgPSBmbiBhcmdzIGluXG4gICAgcHVzaCB2bSByZXN1bHRcbiAgfCBMYW1iZGEgbCAtPlxuICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICAgKCogQ2FjaGVkIGJ5dGVjb2RlIOKAlCBwdXNoIGZyYW1lIG9uIGN1cnJlbnQgVk0gKilcbiAgICAgICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJnc1xuICAgICB8IFNvbWUgXyAtPlxuICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSlcbiAgICAgfCBOb25lIC0+XG4gICAgICAgaWYgbC5sX25hbWUgPD4gTm9uZVxuICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgIGwubF9jYWxsX2NvdW50IDwtIGwubF9jYWxsX2NvdW50ICsgMTtcbiAgICAgICAgIGlmIGwubF9jYWxsX2NvdW50ID49ICFTeF90eXBlcy5qaXRfdGhyZXNob2xkICYmICFTeF90eXBlcy5qaXRfYnVkZ2V0ID4gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGppdF9mYWlsZWRfc2VudGluZWw7XG4gICAgICAgICAgIG1hdGNoICFqaXRfY29tcGlsZV9yZWYgbCB2bS5nbG9iYWxzIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgICAgaW5jciBTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQ7XG4gICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICAgKCogUGhhc2UgMiBMUlU6IHRyYWNrIHRoaXMgY29tcGlsZWQgbGFtYmRhOyBpZiBjYWNoZSBleGNlZWRzIGJ1ZGdldCxcbiAgICAgICAgICAgICAgICBldmljdCB0aGUgb2xkZXN0IGJ5IGNsZWFyaW5nIGl0cyBsX2NvbXBpbGVkIHNsb3QuICopXG4gICAgICAgICAgICAgUXVldWUuYWRkIChsLmxfdWlkLCBMYW1iZGEgbCkgU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlO1xuICAgICAgICAgICAgIHdoaWxlIFF1ZXVlLmxlbmd0aCBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWUgPiAhU3hfdHlwZXMuaml0X2J1ZGdldCBkb1xuICAgICAgICAgICAgICAgKG1hdGNoIFF1ZXVlLnBvcCBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWUgd2l0aFxuICAgICAgICAgICAgICAgIHwgKF8sIExhbWJkYSBldl9sKSAtPiBldl9sLmxfY29tcGlsZWQgPC0gTm9uZTsgaW5jciBTeF90eXBlcy5qaXRfZXZpY3RlZF9jb3VudFxuICAgICAgICAgICAgICAgIHwgXyAtPiAoKSlcbiAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgIGluY3IgU3hfdHlwZXMuaml0X3NraXBwZWRfY291bnQ7XG4gICAgICAgICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKVxuICAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICAgaW5jciBTeF90eXBlcy5qaXRfdGhyZXNob2xkX3NraXBwZWRfY291bnQ7XG4gICAgICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSlcbiAgICAgICAgIGVuZFxuICAgICAgIGVuZFxuICAgICAgIGVsc2VcbiAgICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSkpXG4gIHwgQ29tcG9uZW50IGMgLT5cbiAgICBsZXQgKGt3YXJncywgY2hpbGRyZW4pID0gcGFyc2Vfa2V5d29yZF9hcmdzIGMuY19wYXJhbXMgYXJncyBpblxuICAgICgqIEdldCBvciBjb21waWxlIHRoZSBjb21wb25lbnQgYm9keSAqKVxuICAgIGxldCBjb21waWxlZCA9IG1hdGNoIGMuY19jb21waWxlZCB3aXRoXG4gICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+IFNvbWUgY2xcbiAgICAgIHwgU29tZSBfIC0+IE5vbmVcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBjLmNfY29tcGlsZWQgPC0gU29tZSBqaXRfZmFpbGVkX3NlbnRpbmVsO1xuICAgICAgICBsZXQgcmVzdWx0ID0gaml0X2NvbXBpbGVfY29tcCB+bmFtZTpjLmNfbmFtZSB+cGFyYW1zOmMuY19wYXJhbXNcbiAgICAgICAgICB+aGFzX2NoaWxkcmVuOmMuY19oYXNfY2hpbGRyZW4gfmJvZHk6Yy5jX2JvZHlcbiAgICAgICAgICB+Y2xvc3VyZTpjLmNfY2xvc3VyZSB2bS5nbG9iYWxzIGluXG4gICAgICAgIChtYXRjaCByZXN1bHQgd2l0aCBTb21lIGNsIC0+IGMuY19jb21waWxlZCA8LSBTb21lIGNsIHwgTm9uZSAtPiAoKSk7XG4gICAgICAgIHJlc3VsdFxuICAgIGluXG4gICAgKG1hdGNoIGNvbXBpbGVkIHdpdGhcbiAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgaW5jciBfdm1fY29tcF9qaXRfY291bnQ7XG4gICAgICAgKCogQnVpbGQgcG9zaXRpb25hbCBhcmdzOiBrZXl3b3JkIHBhcmFtcyBpbiBvcmRlciwgdGhlbiBjaGlsZHJlbiAqKVxuICAgICAgIGxldCBjYWxsX2FyZ3MgPSBMaXN0Lm1hcCAoZnVuIHAgLT5cbiAgICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQga3dhcmdzIHAgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsXG4gICAgICAgKSBjLmNfcGFyYW1zIGluXG4gICAgICAgbGV0IGNhbGxfYXJncyA9IGlmIGMuY19oYXNfY2hpbGRyZW5cbiAgICAgICAgIHRoZW4gY2FsbF9hcmdzIEAgW0xpc3QgY2hpbGRyZW5dXG4gICAgICAgICBlbHNlIGNhbGxfYXJncyBpblxuICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGNhbGxfYXJncyBjbC52bV9lbnZfcmVmKVxuICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICBpbmNyIF92bV9jZWtfY291bnQ7IGluY3IgX3ZtX2NvbXBfY2VrX2NvdW50O1xuICAgICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSkpXG4gICAgIHwgTm9uZSAtPlxuICAgICAgIGluY3IgX3ZtX2Nla19jb3VudDsgaW5jciBfdm1fY29tcF9jZWtfY291bnQ7XG4gICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKSlcbiAgfCBJc2xhbmQgaSAtPlxuICAgIGxldCAoa3dhcmdzLCBjaGlsZHJlbikgPSBwYXJzZV9rZXl3b3JkX2FyZ3MgaS5pX3BhcmFtcyBhcmdzIGluXG4gICAgbGV0IGNvbXBpbGVkID0gbWF0Y2ggaS5pX2NvbXBpbGVkIHdpdGhcbiAgICAgIHwgU29tZSBjbCB3aGVuIG5vdCAoaXNfaml0X2ZhaWxlZCBjbCkgLT4gU29tZSBjbFxuICAgICAgfCBTb21lIF8gLT4gTm9uZVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIGkuaV9jb21waWxlZCA8LSBTb21lIGppdF9mYWlsZWRfc2VudGluZWw7XG4gICAgICAgIGxldCByZXN1bHQgPSBqaXRfY29tcGlsZV9jb21wIH5uYW1lOmkuaV9uYW1lIH5wYXJhbXM6aS5pX3BhcmFtc1xuICAgICAgICAgIH5oYXNfY2hpbGRyZW46aS5pX2hhc19jaGlsZHJlbiB+Ym9keTppLmlfYm9keVxuICAgICAgICAgIH5jbG9zdXJlOmkuaV9jbG9zdXJlIHZtLmdsb2JhbHMgaW5cbiAgICAgICAgKG1hdGNoIHJlc3VsdCB3aXRoIFNvbWUgY2wgLT4gaS5pX2NvbXBpbGVkIDwtIFNvbWUgY2wgfCBOb25lIC0+ICgpKTtcbiAgICAgICAgcmVzdWx0XG4gICAgaW5cbiAgICAobWF0Y2ggY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICBpbmNyIF92bV9jb21wX2ppdF9jb3VudDtcbiAgICAgICBsZXQgY2FsbF9hcmdzID0gTGlzdC5tYXAgKGZ1biBwIC0+XG4gICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGt3YXJncyBwIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbFxuICAgICAgICkgaS5pX3BhcmFtcyBpblxuICAgICAgIGxldCBjYWxsX2FyZ3MgPSBpZiBpLmlfaGFzX2NoaWxkcmVuXG4gICAgICAgICB0aGVuIGNhbGxfYXJncyBAIFtMaXN0IGNoaWxkcmVuXVxuICAgICAgICAgZWxzZSBjYWxsX2FyZ3MgaW5cbiAgICAgICAodHJ5IHB1c2ggdm0gKGNhbGxfY2xvc3VyZSBjbCBjYWxsX2FyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgaW5jciBfdm1fY2VrX2NvdW50OyBpbmNyIF92bV9jb21wX2Nla19jb3VudDtcbiAgICAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpKVxuICAgICB8IE5vbmUgLT5cbiAgICAgICBpbmNyIF92bV9jZWtfY291bnQ7IGluY3IgX3ZtX2NvbXBfY2VrX2NvdW50O1xuICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSkpXG4gIHwgXyAtPlxuICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNOiBub3QgY2FsbGFibGU6IFwiIF4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgZikpXG5cbigqKiBNYWluIGV4ZWN1dGlvbiBsb29wIOKAlCBpdGVyYXRpdmUgKG5vIE9DYW1sIHN0YWNrIGdyb3d0aCkuXG4gICAgVm1DbG9zdXJlIGNhbGxzIHB1c2ggZnJhbWVzOyB0aGUgbG9vcCBwaWNrcyB0aGVtIHVwLlxuICAgIE9QX1RBSUxfQ0FMTCArIFZtQ2xvc3VyZSA9IHRydWUgVENPOiBkcm9wIGZyYW1lLCBwdXNoIG5ldywgbG9vcC4gKilcbmFuZCBydW4gdm0gPVxuICB3aGlsZSB2bS5mcmFtZXMgPD4gW10gZG9cbiAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aFxuICAgIHwgW10gLT4gKCkgICgqIGd1YXJkIGhhbmRsZWQgYnkgd2hpbGUgY29uZGl0aW9uICopXG4gICAgfCBmcmFtZSA6OiByZXN0X2ZyYW1lcyAtPlxuICAgICAgbGV0IGJjID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBsZXQgY29uc3RzID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cyBpblxuICAgICAgaWYgZnJhbWUuaXAgPj0gQXJyYXkubGVuZ3RoIGJjIHRoZW4gYmVnaW5cbiAgICAgICAgKCogQnl0ZWNvZGUgZXhoYXVzdGVkIHdpdGhvdXQgZXhwbGljaXQgUkVUVVJOIOKAlCBwb3AgZnJhbWUgbGlrZSBSRVRVUk4gKilcbiAgICAgICAgbGV0IGZuX25hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCI/XCIgaW5cbiAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbdm1dIFdBUk46IGJ5dGVjb2RlIGV4aGF1c3RlZCB3aXRob3V0IFJFVFVSTiBpbiAlcyAoYmFzZT0lZCBzcD0lZCBmcmFtZXM9JWQpXFxuJSFcIlxuICAgICAgICAgIGZuX25hbWUgZnJhbWUuYmFzZSB2bS5zcCAoTGlzdC5sZW5ndGggcmVzdF9mcmFtZXMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gaWYgdm0uc3AgPiBmcmFtZS5iYXNlIHRoZW4gcG9wIHZtIGVsc2UgTmlsIGluXG4gICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lcztcbiAgICAgICAgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgaWYgcmVzdF9mcmFtZXMgPD4gW10gdGhlbiBwdXNoIHZtIHJlc3VsdFxuICAgICAgICAoKiBJZiBubyBtb3JlIGZyYW1lcywgcmVzdWx0IHN0YXlzIG9uIHN0YWNrIGZvciBjYWxsX2Nsb3N1cmUgdG8gcG9wICopXG4gICAgICBlbmRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IHNhdmVkX2lwID0gZnJhbWUuaXAgaW5cbiAgICAgICAgbGV0IG9wID0gYmMuKGZyYW1lLmlwKSBpblxuICAgICAgICBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIDE7XG4gICAgICAgIGluY3IgX3ZtX2luc25fY291bnQ7XG4gICAgICAgICgqIENoZWNrIHRpbWVvdXQg4oCUIGNvbXBhcmUgVk0gaW5zdHJ1Y3Rpb24gY291bnQgYWdhaW5zdCBzdGVwIGxpbWl0ICopXG4gICAgICAgIGlmICFfdm1faW5zbl9jb3VudCBsYW5kIDB4RkZGRiA9IDAgJiYgIVN4X3JlZi5zdGVwX2xpbWl0ID4gMFxuICAgICAgICAgICAmJiAhX3ZtX2luc25fY291bnQgPiAhU3hfcmVmLnN0ZXBfbGltaXQgdGhlblxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIFwiVElNRU9VVDogc3RlcCBsaW1pdCBleGNlZWRlZFwiKTtcbiAgICAgICAgKHRyeSBtYXRjaCBvcCB3aXRoXG4gICAgICAgICgqIC0tLS0gQ29uc3RhbnRzIC0tLS0gKilcbiAgICAgICAgfCAxICgqIE9QX0NPTlNUICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgaWYgaWR4ID49IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVk06IENPTlNUIGluZGV4ICVkIG91dCBvZiBib3VuZHMgKHBvb2wgc2l6ZSAlZClcIlxuICAgICAgICAgICAgICBpZHggKEFycmF5Lmxlbmd0aCBjb25zdHMpKSk7XG4gICAgICAgICAgcHVzaCB2bSBjb25zdHMuKGlkeClcbiAgICAgICAgfCAyICgqIE9QX05JTCAqKSAgIC0+IHB1c2ggdm0gTmlsXG4gICAgICAgIHwgMyAoKiBPUF9UUlVFICopICAtPiBwdXNoIHZtIChCb29sIHRydWUpXG4gICAgICAgIHwgNCAoKiBPUF9GQUxTRSAqKSAtPiBwdXNoIHZtIChCb29sIGZhbHNlKVxuICAgICAgICB8IDUgKCogT1BfUE9QICopICAgLT4gaWdub3JlIChwb3Agdm0pXG4gICAgICAgIHwgNiAoKiBPUF9EVVAgKikgICAtPiBwdXNoIHZtIChwZWVrIHZtKVxuICAgICAgICB8IDcgKCogT1BfU1dBUCAqKSAgLT5cbiAgICAgICAgICBsZXQgYSA9IHBvcCB2bSBpbiBsZXQgYiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gYTsgcHVzaCB2bSBiXG5cbiAgICAgICAgKCogLS0tLSBWYXJpYWJsZSBhY2Nlc3MgLS0tLSAqKVxuICAgICAgICB8IDE2ICgqIE9QX0xPQ0FMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICBsZXQgaWR4ID0gZnJhbWUuYmFzZSArIHNsb3QgaW5cbiAgICAgICAgICAgICAgaWYgaWR4ID49IHZtLnNwIHRoZW5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgIFwiVk06IExPQ0FMX0dFVCBzbG90PSVkIGJhc2U9JWQgc3A9JWQgb3V0IG9mIGJvdW5kc1wiIHNsb3QgZnJhbWUuYmFzZSB2bS5zcCkpO1xuICAgICAgICAgICAgICB2bS5zdGFjay4oaWR4KVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgIHwgMTcgKCogT1BfTE9DQUxfU0VUICopIC0+XG4gICAgICAgICAgbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgKCogV3JpdGUgdG8gc2hhcmVkIGNlbGwgaWYgY2FwdHVyZWQsIGVsc2UgdG8gc3RhY2sgKilcbiAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZSA8LSB2XG4gICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgIHwgMTggKCogT1BfVVBWQUxVRV9HRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGlmIGlkeCA+PSBBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgXCJWTTogVVBWQUxVRV9HRVQgaWR4PSVkIG91dCBvZiBib3VuZHMgKGhhdmUgJWQpXCIgaWR4XG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcykpKTtcbiAgICAgICAgICBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWVcbiAgICAgICAgfCAxOSAoKiBPUF9VUFZBTFVFX1NFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgIHwgMjAgKCogT1BfR0xPQkFMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICgqIENoZWNrIGNsb3N1cmUgZW52IGZpcnN0IChtYXRjaGVzIE9QX0dMT0JBTF9TRVQgcHJpb3JpdHkpICopXG4gICAgICAgICAgbGV0IGlkID0gU3hfdHlwZXMuaW50ZXJuIG5hbWUgaW5cbiAgICAgICAgICBsZXQgZm91bmRfaW5fZW52ID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZW52IC0+XG4gICAgICAgICAgICAgIGxldCByZWMgZW52X2xvb2t1cCBlID1cbiAgICAgICAgICAgICAgICB0cnkgU29tZSAoSGFzaHRibC5maW5kIGUuYmluZGluZ3MgaWQpXG4gICAgICAgICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICAgIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9sb29rdXAgcCB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgICAgICBpbiBlbnZfbG9va3VwIGVudlxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCB2ID0gbWF0Y2ggZm91bmRfaW5fZW52IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgIHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZVxuICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgKCogVHJ5IHJlc29sdmUgaG9vayDigJQgbG9hZHMgdGhlIGxpYnJhcnkgdGhhdCBleHBvcnRzIHRoaXMgc3ltYm9sICopXG4gICAgICAgICAgICAgICAgICAodHJ5XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNvbHZlX2ZuID0gSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgXCJfX3Jlc29sdmUtc3ltYm9sXCIgaW5cbiAgICAgICAgICAgICAgICAgICAgaWdub3JlIChTeF9ydW50aW1lLnN4X2NhbGwgcmVzb2x2ZV9mbiBbU3RyaW5nIG5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG5hbWUpKVxuICAgICAgICAgICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG5hbWUpKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICB8IDIxICgqIE9QX0dMT0JBTF9TRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAoKiBXcml0ZSB0byBjbG9zdXJlIGVudiBpZiB0aGUgbmFtZSBleGlzdHMgdGhlcmUgKG11dGFibGUgY2xvc3VyZSB2YXJzKSAqKVxuICAgICAgICAgIGxldCB3cml0dGVuID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZW52IC0+XG4gICAgICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgICAgICAgICAgaWYgSGFzaHRibC5tZW0gZS5iaW5kaW5ncyBpZCB0aGVuXG4gICAgICAgICAgICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgKHBlZWsgdm0pOyB0cnVlKVxuICAgICAgICAgICAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZF9lbnYgcCB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICAgICAgaW4gZmluZF9lbnYgZW52XG4gICAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCB3cml0dGVuIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSB2O1xuICAgICAgICAgICAgKG1hdGNoICFTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIHdpdGggU29tZSBmIC0+IGYgbmFtZSB2IHwgTm9uZSAtPiAoKSlcbiAgICAgICAgICBlbmRcblxuICAgICAgICAoKiAtLS0tIENvbnRyb2wgZmxvdyAtLS0tICopXG4gICAgICAgIHwgMzIgKCogT1BfSlVNUCAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgIHwgMzMgKCogT1BfSlVNUF9JRl9GQUxTRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgbm90IChzeF90cnV0aHkgdikgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICB8IDM0ICgqIE9QX0pVTVBfSUZfVFJVRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuXG4gICAgICAgICgqIC0tLS0gRXhjZXB0aW9uIGhhbmRsaW5nIC0tLS0gKilcbiAgICAgICAgfCAzNSAoKiBPUF9QVVNIX0hBTkRMRVIgKikgLT5cbiAgICAgICAgICBsZXQgY2F0Y2hfb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgZW50cnkgPSB7XG4gICAgICAgICAgICBoX2NhdGNoX2lwID0gZnJhbWUuaXAgKyBjYXRjaF9vZmZzZXQ7XG4gICAgICAgICAgICBoX2ZyYW1lX2RlcHRoID0gTGlzdC5sZW5ndGggdm0uZnJhbWVzO1xuICAgICAgICAgICAgaF9zcCA9IHZtLnNwO1xuICAgICAgICAgICAgaF9mcmFtZSA9IGZyYW1lO1xuICAgICAgICAgIH0gaW5cbiAgICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIGVudHJ5IDo6IHZtLmhhbmRsZXJfc3RhY2tcbiAgICAgICAgfCAzNiAoKiBPUF9QT1BfSEFORExFUiAqKSAtPlxuICAgICAgICAgIChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGhcbiAgICAgICAgICAgfCBfIDo6IHJlc3QgLT4gdm0uaGFuZGxlcl9zdGFjayA8LSByZXN0XG4gICAgICAgICAgIHwgW10gLT4gKCkpXG4gICAgICAgIHwgMzcgKCogT1BfUkFJU0UgKikgLT5cbiAgICAgICAgICBsZXQgZXhuX3ZhbCA9IHBvcCB2bSBpblxuICAgICAgICAgIChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGhcbiAgICAgICAgICAgfCBlbnRyeSA6OiByZXN0IC0+XG4gICAgICAgICAgICAgdm0uaGFuZGxlcl9zdGFjayA8LSByZXN0O1xuICAgICAgICAgICAgICgqIFVud2luZCBmcmFtZXMgdG8gdGhlIGhhbmRsZXIncyBkZXB0aCAqKVxuICAgICAgICAgICAgIHdoaWxlIExpc3QubGVuZ3RoIHZtLmZyYW1lcyA+IGVudHJ5LmhfZnJhbWVfZGVwdGggZG9cbiAgICAgICAgICAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoXG4gICAgICAgICAgICAgICB8IF8gOjogZnMgLT4gdm0uZnJhbWVzIDwtIGZzXG4gICAgICAgICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAoKiBSZXN0b3JlIHN0YWNrIHBvaW50ZXIgYW5kIGp1bXAgdG8gY2F0Y2ggKilcbiAgICAgICAgICAgICB2bS5zcCA8LSBlbnRyeS5oX3NwO1xuICAgICAgICAgICAgIGVudHJ5LmhfZnJhbWUuaXAgPC0gZW50cnkuaF9jYXRjaF9pcDtcbiAgICAgICAgICAgICBwdXNoIHZtIGV4bl92YWxcbiAgICAgICAgICAgfCBbXSAtPlxuICAgICAgICAgICAgICgqIE5vIGhhbmRsZXIg4oCUIHJhaXNlIE9DYW1sIGV4Y2VwdGlvbiBmb3IgQ0VLIHRvIGNhdGNoICopXG4gICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVW5oYW5kbGVkIGV4Y2VwdGlvbjogJXNcIlxuICAgICAgICAgICAgICAgKFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGV4bl92YWwpKSkpXG5cbiAgICAgICAgKCogLS0tLSBGdW5jdGlvbiBjYWxscyAtLS0tICopXG4gICAgICAgIHwgNDggKCogT1BfQ0FMTCAqKSAtPlxuICAgICAgICAgIGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBsZXQgYXJnc19saXN0ID0gTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykgaW5cbiAgICAgICAgICB2bV9jYWxsIHZtIGYgYXJnc19saXN0XG4gICAgICAgICAgKCogTG9vcCBjb250aW51ZXMg4oCUIGlmIFZtQ2xvc3VyZSwgbmV3IGZyYW1lIHJ1bnMgbmV4dCBpdGVyYXRpb24gKilcbiAgICAgICAgfCA0OSAoKiBPUF9UQUlMX0NBTEwgKikgLT5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IGFyZ3NfbGlzdCA9IExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpIGluXG4gICAgICAgICAgKCogRHJvcCBjdXJyZW50IGZyYW1lLCByZXVzZSBzdGFjayBzcGFjZSDigJQgdHJ1ZSBUQ08gZm9yIFZtQ2xvc3VyZSAqKVxuICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lcztcbiAgICAgICAgICB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgIHZtX2NhbGwgdm0gZiBhcmdzX2xpc3RcbiAgICAgICAgfCA1MCAoKiBPUF9SRVRVUk4gKikgLT5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcG9wIHZtIGluXG4gICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzO1xuICAgICAgICAgIHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgICAgcHVzaCB2bSByZXN1bHRcbiAgICAgICAgICAoKiBMb29wIGNvbnRpbnVlcyB3aXRoIGNhbGxlciBmcmFtZSAqKVxuICAgICAgICB8IDUxICgqIE9QX0NMT1NVUkUgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBpZiBpZHggPj0gQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogQ0xPU1VSRSBpZHggJWQgPj0gY29uc3RzICVkXCIgaWR4IChBcnJheS5sZW5ndGggY29uc3RzKSkpO1xuICAgICAgICAgIGxldCBjb2RlX3ZhbCA9IGNvbnN0cy4oaWR4KSBpblxuICAgICAgICAgIGxldCBjb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gICAgICAgICAgKCogUmVhZCB1cHZhbHVlIGRlc2NyaXB0b3JzIGZyb20gYnl0ZWNvZGUgKilcbiAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb2RlX3ZhbCB3aXRoXG4gICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgKEludGVnZXIgbikgLT4gblxuICAgICAgICAgICAgICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuXG4gICAgICAgICAgICAgICAgfCBfIC0+IDApXG4gICAgICAgICAgICB8IF8gLT4gMFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICgqIENhcHR1cmUgZnJvbSBlbmNsb3NpbmcgZnJhbWUncyBsb2NhbCBzbG90LlxuICAgICAgICAgICAgICAgICBDcmVhdGUgYSBzaGFyZWQgY2VsbCDigJQgYm90aCBwYXJlbnQgYW5kIGNsb3N1cmVcbiAgICAgICAgICAgICAgICAgcmVhZC93cml0ZSB0aHJvdWdoIHRoaXMgY2VsbC4gKilcbiAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmcgICgqIHJldXNlIGV4aXN0aW5nIGNlbGwgKilcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICAgICAgICAgICAgY1xuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICBlbmQgZWxzZVxuICAgICAgICAgICAgICAoKiBDYXB0dXJlIGZyb20gZW5jbG9zaW5nIGZyYW1lJ3MgdXB2YWx1ZSDigJQgYWxyZWFkeSBhIHNoYXJlZCBjZWxsICopXG4gICAgICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICkgaW5cbiAgICAgICAgICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSB2bS5nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgfSBpblxuICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjbClcbiAgICAgICAgfCA1MiAoKiBPUF9DQUxMX1BSSU0gKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IExpc3QuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgKCogUmVzb2x2ZSB0aHVua3Mg4oCUIHRoZSBDRUsgZXZhbHVhdG9yIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAgICAgdmlhIHRyYW1wb2xpbmUsIGJ1dCB0aGUgVk0gbXVzdCBkbyBpdCBleHBsaWNpdGx5IGJlZm9yZVxuICAgICAgICAgICAgIHBhc3NpbmcgYXJncyB0byBwcmltaXRpdmVzLiAqKVxuICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgVGh1bmsgXyAtPiAhU3hfcHJpbWl0aXZlcy5fc3hfdHJhbXBvbGluZV9mbiB2XG4gICAgICAgICAgICB8IF8gLT4gdikgYXJncyBpblxuICAgICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICgqIFNpbmdsZSBsb29rdXA6IHZtLmdsb2JhbHMgaXMgdGhlIHNvbGUgc291cmNlIG9mIHRydXRoLlxuICAgICAgICAgICAgICAgICBQcmltaXRpdmVzIGFyZSBzZWVkZWQgaW50byB2bS5nbG9iYWxzIGF0IGluaXQgYXMgTmF0aXZlRm4gdmFsdWVzLlxuICAgICAgICAgICAgICAgICBPUF9ERUZJTkUgYW5kIHJlZ2lzdGVyTmF0aXZlIG5hdHVyYWxseSBvdmVycmlkZSB0aGVtLiAqKVxuICAgICAgICAgICAgICBsZXQgZm5fdmFsID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICAoKiBGYWxsYmFjayB0byBTeF9wcmltaXRpdmVzIOKAlCBwcmltaXRpdmVzIHJlZ2lzdGVyZWQgQUZURVIgSklUXG4gICAgICAgICAgICAgICAgICAgc2V0dXAgKGUuZy4gaG9zdC1nbG9iYWwsIGhvc3QtZ2V0IHJlZ2lzdGVyZWQgaW5zaWRlIHRoZSB0ZXN0XG4gICAgICAgICAgICAgICAgICAgcnVubmVyJ3MgYmluZC9yZWdpc3RlciBwYXRoKSBhcmUgbm90IGluIHZtLmdsb2JhbHMuICopXG4gICAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lXG4gICAgICAgICAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogdW5rbm93biBwcmltaXRpdmUgXCIgXiBuYW1lKSlcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgKG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgICAgICAgICAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJnc1xuICAgICAgICAgICAgICAgfCBWbUNsb3N1cmUgXyB8IExhbWJkYSBfIHwgQ29tcG9uZW50IF8gfCBJc2xhbmQgXyAtPlxuICAgICAgICAgICAgICAgICBTeF9yZWYuY2VrX2NhbGwgZm5fdmFsIChMaXN0IGFyZ3MpXG4gICAgICAgICAgICAgICB8IF8gLT4gTmlsKVxuICAgICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlcyAoaW4gQ0FMTF9QUklNIFxcXCIlc1xcXCIgd2l0aCAlZCBhcmdzKVwiXG4gICAgICAgICAgICAgICAgbXNnIG5hbWUgYXJnYykpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBwdXNoIHZtIHJlc3VsdFxuXG4gICAgICAgICgqIC0tLS0gQ29sbGVjdGlvbnMgLS0tLSAqKVxuICAgICAgICB8IDY0ICgqIE9QX0xJU1QgKikgLT5cbiAgICAgICAgICBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBpdGVtcyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgIHB1c2ggdm0gKExpc3QgaXRlbXMpXG4gICAgICAgIHwgNjUgKCogT1BfRElDVCAqKSAtPlxuICAgICAgICAgIGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICAgICAgICAgIGZvciBfID0gMSB0byBjb3VudCBkb1xuICAgICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGxldCBrID0gcG9wIHZtIGluXG4gICAgICAgICAgICBsZXQga2V5ID0gbWF0Y2ggayB3aXRoIFN0cmluZyBzIC0+IHMgfCBLZXl3b3JkIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgayBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQga2V5IHZcbiAgICAgICAgICBkb25lO1xuICAgICAgICAgIHB1c2ggdm0gKERpY3QgZClcblxuICAgICAgICAoKiAtLS0tIFN0cmluZyBvcHMgLS0tLSAqKVxuICAgICAgICB8IDE0NCAoKiBPUF9TVFJfQ09OQ0FUICopIC0+XG4gICAgICAgICAgbGV0IGNvdW50ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCBwYXJ0cyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgIGxldCBzID0gU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBwYXJ0cykgaW5cbiAgICAgICAgICBwdXNoIHZtIChTdHJpbmcgcylcblxuICAgICAgICAoKiAtLS0tIERlZmluZSAtLS0tICopXG4gICAgICAgIHwgMTI4ICgqIE9QX0RFRklORSAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSB2bS5nbG9iYWxzIG5hbWUgdjtcbiAgICAgICAgICAobWF0Y2ggIVN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgd2l0aFxuICAgICAgICAgICB8IFNvbWUgZiAtPiBmIG5hbWUgdiB8IE5vbmUgLT4gKCkpXG5cbiAgICAgICAgKCogLS0tLSBJbmxpbmUgcHJpbWl0aXZlcyAtLS0tXG4gICAgICAgICAgIEZhc3QgcGF0aCBmb3IgY29tbW9uIHR5cGVzOyBmYWxsYmFjayB0byBhY3R1YWwgcHJpbWl0aXZlXG4gICAgICAgICAgIGZvciBlZGdlIGNhc2VzICh0eXBlIGNvZXJjaW9uLCB0aHVua3MsIFJhd0hUTUwsIGV0Yy4pXG4gICAgICAgICAgIHRvIGd1YXJhbnRlZSBiZWhhdmlvcmFsIHBhcml0eSB3aXRoIENBTExfUFJJTS4gKilcbiAgICAgICAgfCAxNjAgKCogT1BfQUREICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4gSW50ZWdlciAoeCArIHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggKy4geSlcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCB4ICsuIHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4gTnVtYmVyICh4ICsuIGZsb2F0X29mX2ludCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiK1wiKSBbYTsgYl0pXG4gICAgICAgIHwgMTYxICgqIE9QX1NVQiAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IEludGVnZXIgKHggLSB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC0uIHkpXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgeCAtLiB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IE51bWJlciAoeCAtLiBmbG9hdF9vZl9pbnQgeSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi1cIikgW2E7IGJdKVxuICAgICAgICB8IDE2MiAoKiBPUF9NVUwgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiBJbnRlZ2VyICh4ICogeSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAqLiB5KVxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IHggKi4geSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiBOdW1iZXIgKHggKi4gZmxvYXRfb2ZfaW50IHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCIqXCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjMgKCogT1BfRElWICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgd2hlbiB5IDw+IDAgJiYgeCBtb2QgeSA9IDAgLT4gSW50ZWdlciAoeCAvIHkpXG4gICAgICAgICAgICAoKiBOb24tZGl2aXNpYmxlIEludGVnZXIvSW50ZWdlciArIGFueSBSYXRpb25hbCBvcGVyYW5kIGRlbGVnYXRlIHRvXG4gICAgICAgICAgICAgICB0aGUgXCIvXCIgcHJpbWl0aXZlIChzaW5nbGUgc291cmNlIG9mIHRydXRoKTogKC8gNSAyKT0yLjUgZmxvYXQsXG4gICAgICAgICAgICAgICAoLyAxLzIgMik9MS80IHJhdGlvbmFsLiBLZWVwaW5nIHRoZSBWTSBpbiBsb2Nrc3RlcCB3aXRoIHRoZVxuICAgICAgICAgICAgICAgcHJpbWl0aXZlIGF2b2lkcyBkaXZlcmdpbmcgZnJvbSB0aGUgQ0VLIGludGVycHJldGVyLiAqKVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC8uIHkpXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgeCAvLiB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IE51bWJlciAoeCAvLiBmbG9hdF9vZl9pbnQgeSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi9cIikgW2E7IGJdKVxuICAgICAgICB8IDE2NCAoKiBPUF9FUSAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgKCogVHJpdmlhbCBzY2FsYXIgY2FzZXMgaW5saW5lOyBldmVyeXRoaW5nIGVsc2UgKFJhdGlvbmFsLCBEaWN0LFxuICAgICAgICAgICAgIFJlY29yZCwgVmVjdG9yLCBMaXN0UmVmLCBuZXN0ZWQgbGlzdHMpIGRlbGVnYXRlcyB0byB0aGUgXCI9XCJcbiAgICAgICAgICAgICBwcmltaXRpdmUgc28gVk0gZXF1YWxpdHkgbWF0Y2hlcyBDRUsgZXhhY3RseS4gX2Zhc3RfZXEgaXMgYVxuICAgICAgICAgICAgIHN0cmlwcGVkLWRvd24gc3Vic2V0IGFuZCBtdXN0IG5vdCBiZSB0aGUgc291cmNlIG9mIHRydXRoIGhlcmUuICopXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IEJvb2wgKHggPSB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoeCA9IHkpXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoZmxvYXRfb2ZfaW50IHggPSB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IEJvb2wgKHggPSBmbG9hdF9vZl9pbnQgeSlcbiAgICAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IEJvb2wgKHggPSB5KVxuICAgICAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiBCb29sICh4ID0geSlcbiAgICAgICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IEJvb2wgKHggPSB5KVxuICAgICAgICAgICAgfCBLZXl3b3JkIHgsIEtleXdvcmQgeSAtPiBCb29sICh4ID0geSlcbiAgICAgICAgICAgIHwgTmlsLCBOaWwgLT4gQm9vbCB0cnVlXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCI9XCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjUgKCogT1BfTFQgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiBCb29sICh4IDwgeSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IEJvb2wgKGZsb2F0X29mX2ludCB4IDwgeSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiBCb29sICh4IDwgZmxvYXRfb2ZfaW50IHkpXG4gICAgICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiBCb29sICh4IDwgeSlcbiAgICAgICAgICAgIHwgXyAtPiBTeF9ydW50aW1lLnByaW1fY2FsbCBcIjxcIiBbYTsgYl0pXG4gICAgICAgIHwgMTY2ICgqIE9QX0dUICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4gQm9vbCAoeCA+IHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4ID4geSlcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBCb29sIChmbG9hdF9vZl9pbnQgeCA+IHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4gQm9vbCAoeCA+IGZsb2F0X29mX2ludCB5KVxuICAgICAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4gQm9vbCAoeCA+IHkpXG4gICAgICAgICAgICB8IF8gLT4gU3hfcnVudGltZS5wcmltX2NhbGwgXCI+XCIgW2E7IGJdKVxuICAgICAgICB8IDE2NyAoKiBPUF9OT1QgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IHYpKSlcbiAgICAgICAgfCAxNjggKCogT1BfTEVOICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IEludGVnZXIgKExpc3QubGVuZ3RoIGwpXG4gICAgICAgICAgICB8IFN0cmluZyBzIC0+IEludGVnZXIgKFN0cmluZy5sZW5ndGggcylcbiAgICAgICAgICAgIHwgRGljdCBkIC0+IEludGVnZXIgKEhhc2h0YmwubGVuZ3RoIGQpXG4gICAgICAgICAgICB8IE5pbCAtPiBJbnRlZ2VyIDBcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImxlblwiKSBbdl0pXG4gICAgICAgIHwgMTY5ICgqIE9QX0ZJUlNUICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTGlzdCAoeCA6OiBfKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IHggOjogXyB9IC0+IHhcbiAgICAgICAgICAgIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gfCBOaWwgLT4gTmlsXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJmaXJzdFwiKSBbdl0pXG4gICAgICAgIHwgMTcwICgqIE9QX1JFU1QgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBMaXN0IChfIDo6IHhzKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfSAtPiBMaXN0IHhzXG4gICAgICAgICAgICB8IExpc3QgW10gfCBMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9IHwgTmlsIC0+IExpc3QgW11cbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcInJlc3RcIikgW3ZdKVxuICAgICAgICB8IDE3MSAoKiBPUF9OVEggKikgLT5cbiAgICAgICAgICBsZXQgbiA9IHBvcCB2bSBhbmQgY29sbCA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwsIG4gd2l0aFxuICAgICAgICAgICAgfCAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSwgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgKHRyeSBMaXN0Lm50aCBsIChpbnRfb2ZfZmxvYXQgZikgd2l0aCBfIC0+IE5pbClcbiAgICAgICAgICAgIHwgU3RyaW5nIHMsIE51bWJlciBmIC0+XG4gICAgICAgICAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IGYgaW5cbiAgICAgICAgICAgICAgaWYgaSA+PSAwICYmIGkgPCBTdHJpbmcubGVuZ3RoIHMgdGhlbiBTdHJpbmcgKFN0cmluZy5tYWtlIDEgcy5baV0pXG4gICAgICAgICAgICAgIGVsc2UgTmlsXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJudGhcIikgW2NvbGw7IG5dKVxuICAgICAgICB8IDE3MiAoKiBPUF9DT05TICopIC0+XG4gICAgICAgICAgbGV0IGNvbGwgPSBwb3Agdm0gYW5kIHggPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsIHdpdGhcbiAgICAgICAgICAgIHwgTGlzdCBsIC0+IExpc3QgKHggOjogbClcbiAgICAgICAgICAgIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IExpc3QgKHggOjogbClcbiAgICAgICAgICAgIHwgTmlsIC0+IExpc3QgW3hdXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJjb25zXCIpIFt4OyBjb2xsXSlcbiAgICAgICAgfCAxNzMgKCogT1BfTkVHICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHggLT4gTnVtYmVyICgtLngpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCItXCIpIFt2XSlcbiAgICAgICAgfCAxNzQgKCogT1BfSU5DICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHggLT4gTnVtYmVyICh4ICsuIDEuMClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImluY1wiKSBbdl0pXG4gICAgICAgIHwgMTc1ICgqIE9QX0RFQyAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4IC0+IE51bWJlciAoeCAtLiAxLjApXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJkZWNcIikgW3ZdKVxuXG4gICAgICAgICgqIC0tLS0gSU8gU3VzcGVuc2lvbiAtLS0tICopXG4gICAgICAgIHwgMTEyICgqIE9QX1BFUkZPUk0gKikgLT5cbiAgICAgICAgICBsZXQgcmVxdWVzdCA9IHBvcCB2bSBpblxuICAgICAgICAgIHJhaXNlIChWbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pKVxuXG4gICAgICAgICgqIC0tLS0gRXh0ZW5zaW9uIGRpc3BhdGNoIGZhbGx0aHJvdWdoIC0tLS1cbiAgICAgICAgICAgT3Bjb2RlIHBhcnRpdGlvbiAoc2VlIHBsYW5zL3N4LXZtLW9wY29kZS1leHRlbnNpb24ubWQpOlxuICAgICAgICAgICAgIDAgICAgICAgcmVzZXJ2ZWQgLyBOT1BcbiAgICAgICAgICAgICAxLTE5OSAgIGNvcmUgb3Bjb2RlcyAoY3VycmVudCBjZWlsaW5nIDE3NSA9IE9QX0RFQylcbiAgICAgICAgICAgICAyMDAtMjQ3IGV4dGVuc2lvbiBvcGNvZGVzIChyZWdpc3RlcmVkIHZpYSBTeF92bV9leHRlbnNpb25zKVxuICAgICAgICAgICAgIDI0OC0yNTUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24gLyBtdWx0aS1ieXRlXG4gICAgICAgICAgIEFueSBvcGNvZGUg4omlIDIwMCByb3V0ZXMgdGhyb3VnaCB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqKVxuICAgICAgICB8IG9wIHdoZW4gb3AgPj0gMjAwIC0+ICFleHRlbnNpb25fZGlzcGF0Y2hfcmVmIG9wIHZtIGZyYW1lXG5cbiAgICAgICAgfCBvcGNvZGUgLT5cbiAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogdW5rbm93biBvcGNvZGUgJWQgYXQgaXA9JWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSAoZnJhbWUuaXAgLSAxKSkpXG4gICAgICAgIHdpdGggSW52YWxpZF9hcmd1bWVudCBtc2cgLT5cbiAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgXCJWTTogJXMgYXQgaXA9JWQgb3A9JWQgaW4gJXMgKGJhc2U9JWQgc3A9JWQgYmNfbGVuPSVkIGNvbnN0cz0lZClcIlxuICAgICAgICAgICAgbXNnIHNhdmVkX2lwIG9wIGZuX25hbWUgZnJhbWUuYmFzZSB2bS5zcFxuICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBiYykgKEFycmF5Lmxlbmd0aCBjb25zdHMpKSkpXG4gICAgICBlbmRcbiAgZG9uZVxuXG4oKiogUmVzdW1lIGEgc3VzcGVuZGVkIFZNIGJ5IHB1c2hpbmcgdGhlIElPIHJlc3VsdCBhbmQgY29udGludWluZy5cbiAgICBNYXkgcmFpc2UgVm1TdXNwZW5kZWQgYWdhaW4gaWYgdGhlIFZNIGhpdHMgYW5vdGhlciBPUF9QRVJGT1JNLlxuXG4gICAgQWZ0ZXIgdGhlIGNhbGxiYWNrIGZpbmlzaGVzLCByZXN0b3JlcyBhbnkgY2FsbF9jbG9zdXJlX3JldXNlXG4gICAgY29udGludWF0aW9ucyBzYXZlZCBvbiB2bS5yZXVzZV9zdGFjayAoaW5uZXJtb3N0IGZpcnN0KS4gKilcbmFuZCByZXN1bWVfdm0gdm0gcmVzdWx0ID1cbiAgKCogVGhlIHJlc3VtZWQgZXhlY3V0aW9uIHJ1bnMgb24gW3ZtXTsgSE8gcHJpbWl0aXZlcyAobWFwL2ZpbHRlci/igKYpIGNhbGxlZFxuICAgICBkdXJpbmcgdGhlIHJlc3VtZSByZWFjaCBmb3IgWyFfYWN0aXZlX3ZtXSB0byBydW4gdGhlaXIgY2FsbGJhY2tzIG9uIHRoZVxuICAgICBzYW1lIHN0YWNrLiBjYWxsX2Nsb3N1cmUgcmVzdG9yZWQgW19hY3RpdmVfdm1dIHRvIHRoZSAqY2FsbGVyKiB3aGVuIHRoZVxuICAgICBvcmlnaW5hbCBWbVN1c3BlbmRlZCB1bndvdW5kIHRocm91Z2ggaXQsIHNvIHdpdGhvdXQgcmUtYXNzZXJ0aW5nIGl0IGhlcmVcbiAgICAgdGhlIHJlc3VtZWQgcnVuJ3MgY2FsbGJhY2tzIGxhbmQgb24gdGhlIHdyb25nIFZNIChvciBhbGxvY2F0ZSBhIGZyZXNoXG4gICAgIG9uZSksIGNvcnJ1cHRpbmcgdGhlIHN0YWNrLiBNaXJyb3IgY2FsbF9jbG9zdXJlJ3Mgc2F2ZS9zZXQvcmVzdG9yZS4gKilcbiAgbGV0IHByZXZfYWN0aXZlID0gIV9hY3RpdmVfdm0gaW5cbiAgX2FjdGl2ZV92bSA6PSBTb21lIHZtO1xuICBsZXQgcmVzdG9yZSAoKSA9IF9hY3RpdmVfdm0gOj0gcHJldl9hY3RpdmUgaW5cbiAgKHRyeVxuICAobWF0Y2ggdm0ucGVuZGluZ19jZWsgd2l0aFxuICAgfCBTb21lIGNla19zdGF0ZSAtPlxuICAgICB2bS5wZW5kaW5nX2NlayA8LSBOb25lO1xuICAgICBsZXQgZmluYWwgPSBTeF9yZWYuY2VrX3Jlc3VtZSBjZWtfc3RhdGUgcmVzdWx0IGluXG4gICAgIChtYXRjaCBTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgICAgIHwgU3RyaW5nIFwiaW8tc3VzcGVuZGVkXCIgLT5cbiAgICAgICAgdm0ucGVuZGluZ19jZWsgPC0gU29tZSBmaW5hbDtcbiAgICAgICAgcmFpc2UgKFZtU3VzcGVuZGVkIChTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIHZtKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwdXNoIHZtIChTeF9yZWYuY2VrX3ZhbHVlIGZpbmFsKSlcbiAgIHwgTm9uZSAtPlxuICAgICBwdXNoIHZtIHJlc3VsdCk7XG4gICh0cnkgcnVuIHZtXG4gICB3aXRoXG4gICB8IFZtU3VzcGVuZGVkIF8gYXMgZSAtPlxuICAgICAoKiBSZS1zdXNwZW5zaW9uIGR1cmluZyByZXN1bWU6IHRoZSBWTSBoaXQgYW5vdGhlciBwZXJmb3JtLiAqKVxuICAgICByYWlzZSBlXG4gICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICgqIEVycm9yIGR1cmluZyByZXN1bWVkIGV4ZWN1dGlvbi4gSWYgdGhlIFZNIGhhcyBhIGhhbmRsZXIgb24gaXRzXG4gICAgICAgIGhhbmRsZXJfc3RhY2ssIGRpc3BhdGNoIHRvIGl0IChzYW1lIGFzIE9QX1JBSVNFKS4gVGhpcyBlbmFibGVzXG4gICAgICAgIHRyeS9jYXRjaCBhY3Jvc3MgYXN5bmMgcGVyZm9ybS9yZXN1bWUgYm91bmRhcmllcyDigJQgdGhlIGhhbmRsZXJcbiAgICAgICAgd2FzIHB1c2hlZCBiZWZvcmUgdGhlIHBlcmZvcm0gYW5kIHN1cnZpdmVzIG9uIHRoZSB2bSBzdHJ1Y3QuICopXG4gICAgIChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGhcbiAgICAgIHwgZW50cnkgOjogcmVzdCAtPlxuICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIHJlc3Q7XG4gICAgICAgIHdoaWxlIExpc3QubGVuZ3RoIHZtLmZyYW1lcyA+IGVudHJ5LmhfZnJhbWVfZGVwdGggZG9cbiAgICAgICAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aCBfIDo6IGZzIC0+IHZtLmZyYW1lcyA8LSBmcyB8IFtdIC0+ICgpXG4gICAgICAgIGRvbmU7XG4gICAgICAgIHZtLnNwIDwtIGVudHJ5Lmhfc3A7XG4gICAgICAgIGVudHJ5LmhfZnJhbWUuaXAgPC0gZW50cnkuaF9jYXRjaF9pcDtcbiAgICAgICAgcHVzaCB2bSAoU3RyaW5nIG1zZyk7XG4gICAgICAgIHJ1biB2bVxuICAgICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBtc2cpKSk7XG4gICgqIENsZWFyIHJldXNlX3N0YWNrIOKAlCBhbnkgZW50cmllcyBoZXJlIGFyZSBzdGFsZSBmcm9tIHRoZSBvcmlnaW5hbFxuICAgICBzdXNwZW5zaW9uIGFuZCBkb24ndCBhcHBseSB0byB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIFZNIGp1c3RcbiAgICAgY29tcGxldGVkIGl0cyBleGVjdXRpb24gc3VjY2Vzc2Z1bGx5LiAqKVxuICB2bS5yZXVzZV9zdGFjayA8LSBbXTtcbiAgKCogUmVzdG9yZSBjYWxsX2Nsb3N1cmVfcmV1c2UgY29udGludWF0aW9ucyBzYXZlZCBkdXJpbmcgc3VzcGVuc2lvbi5cbiAgICAgcmV1c2Vfc3RhY2sgaXMgaW4gY2F0Y2ggb3JkZXIgKG91dGVybW9zdCBmaXJzdCBmcm9tIHByZXBlbmQpIOKAlFxuICAgICByZXZlcnNlIHRvIGdldCBpbm5lcm1vc3QgZmlyc3QsIG1hdGNoaW5nIGNhbGxiYWNr4oaSY2FsbGVyIHVud2luZGluZy4gKilcbiAgbGV0IHJlYyByZXN0b3JlX3JldXNlIHBlbmRpbmcgPVxuICAgIG1hdGNoIHBlbmRpbmcgd2l0aFxuICAgIHwgW10gLT4gKClcbiAgICB8IChzYXZlZF9mcmFtZXMsIHNhdmVkX3NwKSA6OiByZXN0IC0+XG4gICAgICBsZXQgY2FsbGJhY2tfcmVzdWx0ID0gcG9wIHZtIGluXG4gICAgICB2bS5mcmFtZXMgPC0gc2F2ZWRfZnJhbWVzO1xuICAgICAgKCogUmVzdG9yZSBzcCB0byB0aGUgdmFsdWUgY2FwdHVyZWQgYmVmb3JlIHRoZSBzdXNwZW5kZWQgY2FsbGVlIHdhc1xuICAgICAgICAgcHVzaGVkLiBUaGUgY2FsbGVlJ3MgbG9jYWxzL3RlbXBzIG1heSBzdGlsbCBiZSBvbiB0aGUgc3RhY2sgYWJvdmVcbiAgICAgICAgIHNhdmVkX3NwOyB3aXRob3V0IHRoaXMgcmVzZXQsIHN1YnNlcXVlbnQgTE9DQUxfR0VUL1NFVCBpbiB0aGVcbiAgICAgICAgIGNhbGxlciBmcmFtZSAoZS5nLiBsZXRyZWMgc2libGluZyBiaW5kaW5ncyB3YWl0aW5nIG9uIHRoZSBjYWxsKVxuICAgICAgICAgc2VlIHN0YWxlIGNhbGxlZSBkYXRhIGluc3RlYWQgb2YgdGhlaXIgb3duIHNsb3RzLiBNaXJyb3JzIHRoZVxuICAgICAgICAgT1BfUkVUVVJOK3NwLXJlc2V0IHNlbWFudGljcyB0aGF0IHN5bmMgYGNhbGxfY2xvc3VyZV9yZXVzZWBcbiAgICAgICAgIHJlbGllcyBvbiBmb3IgY2xlYW4gY2FsbGVyLWZyYW1lIHN0YXRlLiAqKVxuICAgICAgaWYgc2F2ZWRfc3AgPCB2bS5zcCB0aGVuIHZtLnNwIDwtIHNhdmVkX3NwO1xuICAgICAgcHVzaCB2bSBjYWxsYmFja19yZXN1bHQ7XG4gICAgICAodHJ5XG4gICAgICAgIHJ1biB2bTtcbiAgICAgICAgKCogQ2hlY2sgZm9yIG5ldyByZXVzZSBlbnRyaWVzIGFkZGVkIGJ5IG5lc3RlZCBjYWxsX2Nsb3N1cmVfcmV1c2UgKilcbiAgICAgICAgbGV0IG5ld19wZW5kaW5nID0gTGlzdC5yZXYgdm0ucmV1c2Vfc3RhY2sgaW5cbiAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gW107XG4gICAgICAgIHJlc3RvcmVfcmV1c2UgKG5ld19wZW5kaW5nIEAgcmVzdClcbiAgICAgIHdpdGggVm1TdXNwZW5kZWQgXyBhcyBlIC0+XG4gICAgICAgICgqIFJlLXN1c3BlbnNpb246IHNhdmUgdW5wcm9jZXNzZWQgZW50cmllcyBiYWNrIGZvciBuZXh0IHJlc3VtZS5cbiAgICAgICAgICAgcmVzdCBpcyBpbm5lcm1vc3QtZmlyc3Q7IHZtLnJldXNlX3N0YWNrIGlzIG91dGVybW9zdC1maXJzdC5cbiAgICAgICAgICAgQ29tYmluZSBzbyBuZXh0IHJlc3VtZSdzIHJldmVyc2FsIHlpZWxkczogbmV3X2lubmVyLCBvbGRfaW5uZXLihpJvdXRlci4gKilcbiAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gKExpc3QucmV2IHJlc3QpIEAgdm0ucmV1c2Vfc3RhY2s7XG4gICAgICAgIHJhaXNlIGUpXG4gIGluXG4gIGxldCBwZW5kaW5nID0gTGlzdC5yZXYgdm0ucmV1c2Vfc3RhY2sgaW5cbiAgdm0ucmV1c2Vfc3RhY2sgPC0gW107XG4gIHJlc3RvcmVfcmV1c2UgcGVuZGluZztcbiAgbGV0IHIgPSBwb3Agdm0gaW5cbiAgcmVzdG9yZSAoKTsgclxuICB3aXRoIGUgLT4gcmVzdG9yZSAoKTsgcmFpc2UgZSlcblxuKCoqIEV4ZWN1dGUgYSBjb21waWxlZCBtb2R1bGUgKHRvcC1sZXZlbCBieXRlY29kZSkuICopXG5sZXQgZXhlY3V0ZV9tb2R1bGUgY29kZSBnbG9iYWxzID1cbiAgbGV0IGNsID0geyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcIm1vZHVsZVwiOyB2bV9lbnZfcmVmID0gZ2xvYmFsczsgdm1fY2xvc3VyZV9lbnYgPSBOb25lIH0gaW5cbiAgbGV0IHZtID0gY3JlYXRlIGdsb2JhbHMgaW5cbiAgbGV0IGZyYW1lID0geyBjbG9zdXJlID0gY2w7IGlwID0gMDsgYmFzZSA9IDA7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGZvciBfID0gMCB0byBjb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZTtcbiAgdm0uZnJhbWVzIDwtIFtmcmFtZV07XG4gIHJ1biB2bTtcbiAgcG9wIHZtXG5cbigqKiBFeGVjdXRlIG1vZHVsZSwgY2F0Y2hpbmcgVm1TdXNwZW5kZWQgbG9jYWxseSAoc2FtZSBjb21waWxhdGlvbiB1bml0KS5cbiAgICBSZXR1cm5zIFtPayByZXN1bHRdIG9yIFtFcnJvciAocmVxdWVzdCwgdm0pXSBmb3IgaW1wb3J0IHN1c3BlbnNpb24uXG4gICAgTmVlZGVkIGJlY2F1c2UganNfb2Zfb2NhbWwgY2FuJ3QgY2F0Y2ggZXhjZXB0aW9ucyBhY3Jvc3MgbW9kdWxlIGJvdW5kYXJpZXMuICopXG5sZXQgZXhlY3V0ZV9tb2R1bGVfc2FmZSBjb2RlIGdsb2JhbHMgPVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gZXhlY3V0ZV9tb2R1bGUgY29kZSBnbG9iYWxzIGluXG4gICAgT2sgcmVzdWx0XG4gIHdpdGggVm1TdXNwZW5kZWQgKHJlcXVlc3QsIHZtKSAtPlxuICAgIEVycm9yIChyZXF1ZXN0LCB2bSlcblxuXG4oKiogezEgTGF6eSBKSVQgY29tcGlsYXRpb259ICopXG5cbigqKiBDb21waWxlIGEgbGFtYmRhIG9yIGNvbXBvbmVudCBib2R5IHRvIGJ5dGVjb2RlIHVzaW5nIHRoZSBTWCBjb21waWxlci5cbiAgICBJbnZva2VzIFtjb21waWxlXSBmcm9tIHNwZWMvY29tcGlsZXIuc3ggdmlhIHRoZSBDRUsgbWFjaGluZS5cbiAgICBSZXR1cm5zIGEgW3ZtX2Nsb3N1cmVdIHJlYWR5IGZvciBleGVjdXRpb24sIG9yIFtOb25lXSBvbiBmYWlsdXJlXG4gICAgKHNhZmUgZmFsbGJhY2sgdG8gQ0VLIGludGVycHJldGF0aW9uKS5cblxuICAgIFRoZSBjb21waWxhdGlvbiBjb3N0IGlzIGEgc2luZ2xlIENFSyBldmFsdWF0aW9uIG9mIHRoZSBjb21waWxlciDigJRcbiAgICBtaWNyb3NlY29uZHMgcGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBpbiB0aGUgbGFtYmRhL2NvbXBvbmVudFxuICAgIHJlY29yZCBzbyBzdWJzZXF1ZW50IGNhbGxzIGdvIHN0cmFpZ2h0IHRvIHRoZSBWTS4gKilcbigqIEZ1bmN0aW9ucyB3aG9zZSBKSVQgYnl0ZWNvZGUgaXMga25vd24gYnJva2VuIChzZWUgcHJvamVjdF9qaXRfYnl0ZWNvZGVfYnVnKTpcbiAgIHBhcnNlciBjb21iaW5hdG9ycyBkcm9wIGludGVybWVkaWF0ZSByZXN1bHRzLCB0aGUgaHlwZXJzY3JpcHQgcGFyc2UvY29tcGlsZVxuICAgc3RhY2sgY29ycnVwdHMgQVNUcyB3aGVuIGNvbXBpbGVkLCBhbmQgdGVzdC1vcmNoZXN0cmF0aW9uIGhlbHBlcnMgaGF2ZVxuICAgY2FsbC1jb3VudC9hcmctc2hhcGUgbWlzbWF0Y2hlcyB2cyBDRUsuIFRoZXNlIG11c3QgcnVuIHVuZGVyIENFSy4gKilcbmxldCBfaml0X2lzX2Jyb2tlbl9uYW1lIG4gPVxuICAoKiBQYXJzZXIgY29tYmluYXRvcnMgKilcbiAgbiA9IFwicGFyc2UtYmluZFwiIHx8IG4gPSBcInNlcVwiIHx8IG4gPSBcInNlcTJcIiB8fCBuID0gXCJtYW55XCIgfHwgbiA9IFwibWFueTFcIlxuICB8fCBuID0gXCJzYXRpc2Z5XCIgfHwgbiA9IFwiZm1hcFwiIHx8IG4gPSBcImFsdFwiIHx8IG4gPSBcImFsdDJcIlxuICB8fCBuID0gXCJza2lwLWxlZnRcIiB8fCBuID0gXCJza2lwLXJpZ2h0XCIgfHwgbiA9IFwic2tpcC1tYW55XCIgfHwgbiA9IFwib3B0aW9uYWxcIlxuICB8fCBuID0gXCJiZXR3ZWVuXCIgfHwgbiA9IFwic2VwLWJ5XCIgfHwgbiA9IFwic2VwLWJ5MVwiIHx8IG4gPSBcInBhcnNlLWNoYXJcIlxuICB8fCBuID0gXCJwYXJzZS1zdHJpbmdcIiB8fCBuID0gXCJsYXp5LXBhcnNlclwiIHx8IG4gPSBcImxhYmVsXCJcbiAgfHwgbiA9IFwibm90LWZvbGxvd2VkLWJ5XCIgfHwgbiA9IFwibG9vay1haGVhZFwiXG4gICgqIEh5cGVyc2NyaXB0IG9yY2hlc3RyYXRvcnMg4oCUIGNhbGwgcGFyc2VyIGNvbWJpbmF0b3JzICopXG4gIHx8IG4gPSBcImhzLXRva2VuaXplXCIgfHwgbiA9IFwiaHMtcGFyc2VcIiB8fCBuID0gXCJocy1jb21waWxlXCJcbiAgfHwgbiA9IFwiaHMtdG8tc3hcIiB8fCBuID0gXCJocy10by1zeC1mcm9tLXNvdXJjZVwiXG4gICgqIFRlc3Qgb3JjaGVzdHJhdGlvbiBoZWxwZXJzICopXG4gIHx8IG4gPSBcImV2YWwtaHNcIiB8fCBuID0gXCJldmFsLWhzLWlubmVyXCIgfHwgbiA9IFwiZXZhbC1ocy13aXRoLW1lXCJcbiAgfHwgbiA9IFwicnVuLWhzLWZpeHR1cmVcIlxuICAoKiBMYXJnZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIHdob3NlIEpJVCBjb21waWxlIGV4Y2VlZHMgdGhlIDVzIHRlc3RcbiAgICAgZGVhZGxpbmUg4oCUIHR3LXJlc29sdmUtc3R5bGUsIHR3LXJlc29sdmUtbGF5b3V0LCBncmFwaHFsIHBhcnNlLiAqKVxuICB8fCBuID0gXCJ0dy1yZXNvbHZlLXN0eWxlXCIgfHwgbiA9IFwidHctcmVzb2x2ZS1sYXlvdXRcIlxuICB8fCBuID0gXCJncWwtd3M/XCIgfHwgbiA9IFwiZ3FsLXBhcnNlLXRva2Vuc1wiIHx8IG4gPSBcImdxbC1leGVjdXRlLW9wZXJhdGlvblwiXG4gICgqIEh5cGVyc2NyaXB0IGxvb3AgcnVudGltZTogdXNlcyBgZ3VhcmRgIHRvIGNhdGNoIGhzLWJyZWFrL2hzLWNvbnRpbnVlXG4gICAgIGV4Y2VwdGlvbnMuIEpJVC1jb21waWxlZCBndWFyZCBkcm9wcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgc3VjaCB0aGF0XG4gICAgIGJyZWFrIHByb3BhZ2F0ZXMgb3V0IG9mIHRoZSBjbGljayBoYW5kbGVyIGluc3RlYWQgb2YgZXhpdGluZyB0aGUgbG9vcC5cbiAgICAgU2VlIGhzLXVwc3RyZWFtLXJlcGVhdC9ocy11cHN0cmVhbS1wdXQgdGVzdHMuICopXG4gIHx8IG4gPSBcImhzLXJlcGVhdC10aW1lc1wiIHx8IG4gPSBcImhzLXJlcGVhdC1mb3JldmVyXCJcbiAgfHwgbiA9IFwiaHMtcmVwZWF0LXdoaWxlXCIgfHwgbiA9IFwiaHMtcmVwZWF0LXVudGlsXCJcbiAgfHwgbiA9IFwiaHMtZm9yLWVhY2hcIiB8fCBuID0gXCJocy1wdXQhXCJcblxuKCoqIFNjYW4gYnl0ZWNvZGUgZm9yIGFueSBleHRlbnNpb24gb3Bjb2RlICjiiaUgMjAwLCB0aGUgcmVnaXN0cnknc1xuICAgIFtTeF92bV9leHRlbnNpb25zLmV4dGVuc2lvbl9taW5dKS4gV2Fsa3Mgb3BlcmFuZCBieXRlcyBjb3JyZWN0bHlcbiAgICBzbyB2YWx1ZXMgdGhhdCBoYXBwZW4gdG8gYmUg4omlMjAwIChlLmcuIGEgQ09OU1QgdTE2IGluZGV4IHBvaW50aW5nXG4gICAgaW50byBhIGxhcmdlIHBvb2wpIGRvIG5vdCB0cmlnZ2VyIGZhbHNlIHBvc2l0aXZlcy4gQ0xPU1VSRSdzXG4gICAgZHluYW1pYyB1cHZhbHVlIGRlc2NyaXB0b3JzIGFyZSByZWFkIGZyb20gdGhlIGNvbnN0YW50IHBvb2wgZW50cnlcbiAgICBhdCB0aGUgc2FtZSBpbmRleCBpdCBwdXNoZXMuXG5cbiAgICBVc2VkIGJ5IFtqaXRfY29tcGlsZV9sYW1iZGFdIChQaGFzZSBFIG9mIHRoZSBvcGNvZGUtZXh0ZW5zaW9uXG4gICAgcGxhbik6IGEgbGFtYmRhIHdob3NlIGNvbXBpbGVkIGJvZHkgY29udGFpbnMgYW55IGV4dGVuc2lvbiBvcGNvZGVcbiAgICBpcyByb3V0ZWQgdGhyb3VnaCBpbnRlcnByZXRhdGlvbiByYXRoZXIgdGhhbiBKSVQuICBFeHRlbnNpb25zXG4gICAgaW50ZXJwcmV0IHRoZWlyIG9wY29kZXMgdmlhIHRoZSByZWdpc3RyeTsgdGhlIEpJVCBkb2VzIG5vdFxuICAgIGN1cnJlbnRseSBrbm93IGhvdyB0byBjb21waWxlIHRoZW0uXG5cbiAgICBPcGVyYW5kLXNpemUgbG9naWMgbWlycm9ycyBbb3Bjb2RlX29wZXJhbmRfc2l6ZV0gKHdoaWNoIGlzIGRlZmluZWRcbiAgICBsYXRlciwgaW4gdGhlIGRpc2Fzc2VtYmx5IHNlY3Rpb24pOyBpbmxpbmVkIGhlcmUgc28gdGhpcyBoZWxwZXIgY2FuXG4gICAgc2l0IGJlZm9yZSBbaml0X2NvbXBpbGVfbGFtYmRhXSBpbiB0aGUgZmlsZS4gKilcbmxldCBieXRlY29kZV9maW5kX29wY29kZSAocHJlZCA6IGludCAtPiBib29sKSAoYmMgOiBpbnQgYXJyYXkpIChjb25zdHMgOiB2YWx1ZSBhcnJheSkgPVxuICBsZXQgY29yZV9vcGVyYW5kX3NpemUgPSBmdW5jdGlvblxuICAgIHwgMSB8IDIwIHwgMjEgfCA2NCB8IDY1IHwgMTI4IC0+IDIgICgqIHUxNiAqKVxuICAgIHwgMTYgfCAxNyB8IDE4IHwgMTkgfCA0OCB8IDQ5IHwgMTQ0IC0+IDEgICgqIHU4ICopXG4gICAgfCAzMiB8IDMzIHwgMzQgfCAzNSAtPiAyICAoKiBpMTYgKilcbiAgICB8IDUyIC0+IDMgICgqIENBTExfUFJJTTogdTE2ICsgdTggKilcbiAgICB8IF8gLT4gMFxuICBpblxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGJjIGluXG4gIGxldCBpcCA9IHJlZiAwIGluXG4gIGxldCBmb3VuZCA9IHJlZiBmYWxzZSBpblxuICB3aGlsZSBub3QgIWZvdW5kICYmICFpcCA8IGxlbiBkb1xuICAgIGxldCBvcCA9IGJjLighaXApIGluXG4gICAgaWYgcHJlZCBvcCB0aGVuIGZvdW5kIDo9IHRydWVcbiAgICBlbHNlIGJlZ2luXG4gICAgICBpcCA6PSAhaXAgKyAxO1xuICAgICAgbGV0IGV4dHJhID0gbWF0Y2ggb3Agd2l0aFxuICAgICAgICB8IDUxICgqIENMT1NVUkUgKikgd2hlbiAhaXAgKyAxIDwgbGVuIC0+XG4gICAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW5cbiAgICAgICAgICBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgICBsZXQgaWR4ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgICAgICAgICBsZXQgdXZfY291bnQgPVxuICAgICAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuXG4gICAgICAgICAgICAgIChtYXRjaCBjb25zdHMuKGlkeCkgd2l0aFxuICAgICAgICAgICAgICAgfCBEaWN0IGQgLT5cbiAgICAgICAgICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgKEludGVnZXIgbikgLT4gblxuICAgICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG5cbiAgICAgICAgICAgICAgICAgIHwgXyAtPiAwKVxuICAgICAgICAgICAgICAgfCBfIC0+IDApXG4gICAgICAgICAgICBlbHNlIDBcbiAgICAgICAgICBpblxuICAgICAgICAgIDIgKyB1dl9jb3VudCAqIDJcbiAgICAgICAgfCBfIC0+IGNvcmVfb3BlcmFuZF9zaXplIG9wXG4gICAgICBpblxuICAgICAgaXAgOj0gIWlwICsgZXh0cmFcbiAgICBlbmRcbiAgZG9uZTtcbiAgIWZvdW5kXG5cbmxldCBieXRlY29kZV91c2VzX2V4dGVuc2lvbl9vcGNvZGVzIGJjIGNvbnN0cyA9XG4gIGJ5dGVjb2RlX2ZpbmRfb3Bjb2RlIChmdW4gb3AgLT4gb3AgPj0gMjAwKSBiYyBjb25zdHNcblxuKCoqIFRydWUgaWYgW2NvZGVdIOKAlCBvciBhbnkgY2xvc3VyZSBuZXN0ZWQgaW4gaXRzIGNvbnN0YW50IHBvb2wg4oCUIGluc3RhbGxzIGFuXG4gICAgZXhjZXB0aW9uIGhhbmRsZXIgKE9QX1BVU0hfSEFORExFUiA9IDM1KSwgaS5lLiBjb250YWlucyBhIGBndWFyZGAgL1xuICAgIGBoYW5kbGVyLWJpbmRgIC8gZHJlYW0tY2F0Y2ggZm9ybS4gVGhlIFZNJ3MgUFVTSF9IQU5ETEVSIG9ubHkgaW50ZXJjZXB0cyBhXG4gICAgVk0tbGV2ZWwgUkFJU0UgKG9wY29kZSAzNyk7IGl0IGRvZXMgTk9UIGNhdGNoIHRoZSBPQ2FtbCBbRXZhbF9lcnJvcl0gdGhhdFxuICAgIHRoZSBgZXJyb3JgIHByaW1pdGl2ZSB0aHJvd3MgZnJvbSBpbnNpZGUgYSBDQUxML0NBTExfUFJJTSBpbiBhIGNhbGxlZVxuICAgIGZyYW1lLiBTbyBhIEpJVC1jb21waWxlZCBndWFyZCBzaWxlbnRseSBmYWlscyB0byBjYXRjaCB0aHJvd24gZXJyb3JzICh0aGV5XG4gICAgZXNjYXBlIGFjcm9zcyB0aGUgSklUIGZyYW1lKS5cblxuICAgIFRoZSBzY2FuIGlzIFJFQ1VSU0lWRTogYSBjdXJyaWVkIGhpZ2hlci1vcmRlciBmdW5jdGlvbiAoZS5nLiBEcmVhbSdzXG4gICAgYGRyZWFtLWNhdGNoLXdpdGggPSAoZm4gKG9uLWVycm9yKSAoZm4gKG5leHQpIChmbiAocmVxKSAoZ3VhcmQgLi4uKSkpKWApXG4gICAgaGFzIG5vIFBVU0hfSEFORExFUiBpbiBpdHMgb3duIGJvZHkg4oCUIHRoZSBndWFyZCBsaXZlcyBpbiBhIG5lc3RlZFxuICAgIGBPUF9DTE9TVVJFYCB3aG9zZSBjb2RlIHNpdHMgaW4gdGhlIGNvbnN0YW50IHBvb2wuIEpJVC1jb21waWxpbmcgdGhlIG91dGVyXG4gICAgZnVuY3Rpb24gd291bGQgbWludCB0aGF0IGlubmVyIGd1YXJkIGFzIGEgVm1DbG9zdXJlIHdpdGggdGhlIGJyb2tlbiBWTVxuICAgIGhhbmRsZXIuIERlc2NlbmRpbmcgaW50byBuZXN0ZWQgY2xvc3VyZSBjb2RlcyBjYXRjaGVzIHRoaXMsIHNvIHRoZSB3aG9sZVxuICAgIGNsb3N1cmUgZmFtaWx5IHJ1bnMgb24gdGhlIENFSyAod2hvc2UgZ3VhcmQgY2F0Y2hlcyBjb3JyZWN0bHkpLiBDb3ZlcnNcbiAgICBkcmVhbS1jYXRjaC13aXRoLCBob3N0IHdyYXAtZXJyb3JzLCBhbmQgZXZlcnkgZ3VhcmQgdXNlciBjZW50cmFsbHkuICopXG5sZXQgcmVjIGNvZGVfdXNlc19oYW5kbGVyIGNvZGUgPVxuICBieXRlY29kZV9maW5kX29wY29kZSAoZnVuIG9wIC0+IG9wID0gMzUpIGNvZGUudmNfYnl0ZWNvZGUgY29kZS52Y19jb25zdGFudHNcbiAgfHwgQXJyYXkuZXhpc3RzIChmdW4gYyAtPlxuICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgIHwgRGljdCBkIHdoZW4gSGFzaHRibC5tZW0gZCBcImJ5dGVjb2RlXCIgfHwgSGFzaHRibC5tZW0gZCBcInZjLWJ5dGVjb2RlXCIgLT5cbiAgICAgICAgICh0cnkgY29kZV91c2VzX2hhbmRsZXIgKGNvZGVfZnJvbV92YWx1ZSBjKSB3aXRoIF8gLT4gZmFsc2UpXG4gICAgICAgfCBfIC0+IGZhbHNlKSBjb2RlLnZjX2NvbnN0YW50c1xuXG4oKiogVHJ1ZSBpZiBbY29kZV0g4oCUIG9yIGFueSBuZXN0ZWQgY2xvc3VyZSBjb2RlIOKAlCByZWZlcmVuY2VzIChpbiBpdHMgY29uc3RhbnRcbiAgICBwb29sLCBhcyBhIEdMT0JBTF9HRVQvQ0FMTCBuYW1lKSBhIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgaW5cbiAgICBbU3hfdHlwZXMuaml0X2V4Y2x1ZGVkX2NhbGxlcl9uYW1lc10gKGEgY2FsbC9jYy1lc3RhYmxpc2hpbmcgZm9ybSBsaWtlXG4gICAgQ29tbW9uLUxpc3AncyBjbC1yZXN0YXJ0LWNhc2UvY2wtaGFuZGxlci1jYXNlKS4gU3VjaCBhIGNhbGxlciBtdXN0IHJ1biBvblxuICAgIHRoZSBDRUsgc28gdGhlIGNvbnRpbnVhdGlvbiBjYXB0dXJlZCBpbnNpZGUgdGhlIGNhbGxlZCBmb3JtIGNhbiBlc2NhcGUuXG4gICAgVGhlIGNvbnN0YW50LXBvb2wgc3RyaW5nIElTIHRoZSByZWZlcmVuY2VkIHN5bWJvbCBuYW1lLCBzbyBtZW1iZXJzaGlwIGlzIGFcbiAgICBkaXJlY3QgbG9va3VwOyByZWN1cnNlIGludG8gbmVzdGVkIGNsb3N1cmUgY29kZXMuIFNraXBwZWQgZW50aXJlbHkgKG5vXG4gICAgSGFzaHRibCB3YWxrKSB3aGVuIG5vIGVzY2FwaW5nIGZvcm1zIGFyZSByZWdpc3RlcmVkLiAqKVxubGV0IHJlYyBjb2RlX3JlZnNfZXNjYXBpbmdfY2FsbGVyIGNvZGUgPVxuICBBcnJheS5leGlzdHMgKGZ1biBjIC0+XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBTdHJpbmcgcyAtPiBIYXNodGJsLm1lbSBTeF90eXBlcy5qaXRfZXhjbHVkZWRfY2FsbGVyX25hbWVzIHNcbiAgICB8IERpY3QgZCB3aGVuIEhhc2h0YmwubWVtIGQgXCJieXRlY29kZVwiIHx8IEhhc2h0YmwubWVtIGQgXCJ2Yy1ieXRlY29kZVwiIC0+XG4gICAgICAodHJ5IGNvZGVfcmVmc19lc2NhcGluZ19jYWxsZXIgKGNvZGVfZnJvbV92YWx1ZSBjKSB3aXRoIF8gLT4gZmFsc2UpXG4gICAgfCBfIC0+IGZhbHNlKSBjb2RlLnZjX2NvbnN0YW50c1xuXG5sZXQgaml0X2NvbXBpbGVfbGFtYmRhIChsIDogbGFtYmRhKSBnbG9iYWxzID1cbiAgbGV0IGZuX25hbWUgPSBtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIjxhbm9uPlwiIGluXG4gIGlmICFfaml0X2NvbXBpbGluZyB0aGVuIChcbiAgICAoKiBBbHJlYWR5IGNvbXBpbGluZyDigJQgcHJldmVudCBjYXNjYWRlLiBUaGUgQ0VLIHdpbGwgaGFuZGxlIHRoaXMgY2FsbC4gKilcbiAgICBOb25lXG4gICkgZWxzZSBpZiBMaXN0Lm1lbSBcIiZrZXlcIiBsLmxfcGFyYW1zIHx8IExpc3QubWVtIFwiOmFzXCIgbC5sX3BhcmFtcyB0aGVuIChcbiAgICAoKiAma2V5LzphcyByZXF1aXJlIGNvbXBsZXggcnVudGltZSBhcmd1bWVudCBwcm9jZXNzaW5nIHRoYXQgdGhlIGNvbXBpbGVyXG4gICAgICAgZG9lc24ndCBlbWl0LiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBydW4gdmlhIENFSy4gKilcbiAgICBOb25lXG4gICkgZWxzZSBpZiBsLmxfbmFtZSA9IE5vbmUgfHwgbC5sX2Nsb3N1cmUuU3hfdHlwZXMucGFyZW50IDw+IE5vbmUgdGhlbiAoXG4gICAgKCogQW5vbnltb3VzIG9yIG5lc3RlZCBsYW1iZGFzOiBza2lwIEpJVC4gTmVzdGVkIGRlZmluZXMgZ2V0IHJlLWNyZWF0ZWRcbiAgICAgICBvbiBlYWNoIG91dGVyIGNhbGwsIHNvIHBlci1jYWxsIGNvbXBpbGUgY29zdCBpcyBwdXJlIG92ZXJoZWFkLiAqKVxuICAgIE5vbmVcbiAgKSBlbHNlIGlmIF9qaXRfaXNfYnJva2VuX25hbWUgZm5fbmFtZSB0aGVuIChcbiAgICBOb25lXG4gICkgZWxzZSBpZiBTeF90eXBlcy5qaXRfbmFtZV9leGNsdWRlZCBmbl9uYW1lIHRoZW4gKFxuICAgICgqIEd1ZXN0LWRlY2xhcmVkIGludGVycHJldC1vbmx5IGZ1bmN0aW9uIChjb250aW51YXRpb24tdXNpbmcgZGlzcGF0Y2hcbiAgICAgICBjb3JlLCBvciBhIHdob2xlIG5hbWVzcGFjZSB2aWEgcHJlZml4KS4gUnVuIG9uIHRoZSBDRUs7IHRoZSBzdGFjayBWTVxuICAgICAgIGNhbid0IGVzY2FwZSB0aHJvdWdoIGEgQ0VLIGNvbnRpbnVhdGlvbiBhbmQgbWF5IG1pc2NvbXBpbGUgZGVlcCBBU1RcbiAgICAgICByZWN1cnNpb24gaW50byBhIG5vbi10ZXJtaW5hdGluZyBsb29wLiBTZWUgU3hfdHlwZXMuaml0X2V4Y2x1ZGVkIC9cbiAgICAgICBqaXRfZXhjbHVkZWRfcHJlZml4ZXMuICopXG4gICAgTm9uZVxuICApIGVsc2VcbiAgdHJ5XG4gICAgX2ppdF9jb21waWxpbmcgOj0gdHJ1ZTtcbiAgICBsZXQgY29tcGlsZV9mbiA9IHRyeSBIYXNodGJsLmZpbmQgZ2xvYmFscyBcImNvbXBpbGVcIlxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gKF9qaXRfY29tcGlsaW5nIDo9IGZhbHNlOyByYWlzZSAoRXZhbF9lcnJvciBcIkpJVDogY29tcGlsZXIgbm90IGxvYWRlZFwiKSkgaW5cbiAgICBsZXQgcGFyYW1fc3ltcyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTeW1ib2wgcykgbC5sX3BhcmFtcykgaW5cbiAgICBsZXQgZm5fZXhwciA9IExpc3QgW1N5bWJvbCBcImZuXCI7IHBhcmFtX3N5bXM7IGwubF9ib2R5XSBpblxuICAgIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBmbl9leHByXSBpblxuICAgICgqIEZhc3QgcGF0aDogaWYgY29tcGlsZSBoYXMgYnl0ZWNvZGUsIGNhbGwgaXQgZGlyZWN0bHkgdmlhIHRoZSBWTS5cbiAgICAgICBBbGwgaGVscGVyIGNhbGxzIChjb21waWxlLWV4cHIsIGVtaXQtYnl0ZSwgZXRjLikgaGFwcGVuIGluc2lkZSB0aGVcbiAgICAgICBzYW1lIFZNIGV4ZWN1dGlvbiDigJQgbm8gcGVyLWNhbGwgVk0gYWxsb2NhdGlvbiBvdmVyaGVhZC4gKilcbiAgICBsZXQgcmVzdWx0ID0gbWF0Y2ggY29tcGlsZV9mbiB3aXRoXG4gICAgfCBMYW1iZGEgeyBsX2NvbXBpbGVkID0gU29tZSBjbDsgXyB9IHdoZW4gbm90IChpc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgY2FsbF9jbG9zdXJlIGNsIFtmbl9leHByXSBnbG9iYWxzXG4gICAgfCBfIC0+XG4gICAgICBpZ25vcmUgY29tcGlsZV9mbjtcbiAgICAgIGxldCBjb21waWxlX2VudiA9IFN4X3R5cGVzLmVudl9leHRlbmQgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IEhhc2h0YmwucmVwbGFjZSBjb21waWxlX2Vudi5iaW5kaW5ncyAoU3hfdHlwZXMuaW50ZXJuIGspIHYpIGdsb2JhbHM7XG4gICAgICBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtTeW1ib2wgXCJjb21waWxlXCI7IHF1b3RlZF0pIChFbnYgY29tcGlsZV9lbnYpXG4gICAgaW5cbiAgICBfaml0X2NvbXBpbGluZyA6PSBmYWxzZTtcbiAgICAoKiBNZXJnZSBjbG9zdXJlIGJpbmRpbmdzIGludG8gZWZmZWN0aXZlX2dsb2JhbHMgc28gR0xPQkFMX0dFVCByZXNvbHZlc1xuICAgICAgIHZhcmlhYmxlcyBmcm9tIGxldC9kZWZpbmUgYmxvY2tzLiBUaGUgY29tcGlsZXIgZW1pdHMgR0xPQkFMX0dFVCBmb3JcbiAgICAgICBmcmVlIHZhcmlhYmxlczsgdGhlIFZNIHJlc29sdmVzIHRoZW0gZnJvbSB2bV9lbnZfcmVmLiAqKVxuICAgIGxldCBlZmZlY3RpdmVfZ2xvYmFscyA9XG4gICAgICBpZiBIYXNodGJsLmxlbmd0aCBsLmxfY2xvc3VyZS5TeF90eXBlcy5iaW5kaW5ncyA+IDAgdGhlbiBiZWdpblxuICAgICAgICBsZXQgbWVyZ2VkID0gSGFzaHRibC5jb3B5IGdsb2JhbHMgaW5cbiAgICAgICAgbGV0IHJlYyBtZXJnZV9lbnYgZW52ID1cbiAgICAgICAgICBIYXNodGJsLml0ZXIgKGZ1biBpZCB2IC0+XG4gICAgICAgICAgICBsZXQgbmFtZSA9IFN4X3R5cGVzLnVuaW50ZXJuIGlkIGluXG4gICAgICAgICAgICBpZiBub3QgKEhhc2h0YmwubWVtIG1lcmdlZCBuYW1lKSB0aGVuXG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBtZXJnZWQgbmFtZSB2KSBlbnYuU3hfdHlwZXMuYmluZGluZ3M7XG4gICAgICAgICAgbWF0Y2ggZW52LlN4X3R5cGVzLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBtZXJnZV9lbnYgcCB8IE5vbmUgLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbWVyZ2VfZW52IGwubF9jbG9zdXJlO1xuICAgICAgICBtZXJnZWRcbiAgICAgIGVuZCBlbHNlIGdsb2JhbHNcbiAgICBpblxuICAgIChtYXRjaCByZXN1bHQgd2l0aFxuICAgIHwgRGljdCBkIHdoZW4gSGFzaHRibC5tZW0gZCBcImJ5dGVjb2RlXCIgfHwgSGFzaHRibC5tZW0gZCBcInZjLWJ5dGVjb2RlXCIgLT5cbiAgICAgIGxldCBvdXRlcl9jb2RlID0gY29kZV9mcm9tX3ZhbHVlIHJlc3VsdCBpblxuICAgICAgbGV0IGJjID0gb3V0ZXJfY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIGJjID49IDQgJiYgYmMuKDApID0gNTEgKCogT1BfQ0xPU1VSRSAqKSB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBpZHggPSBiYy4oMSkgbG9yIChiYy4oMikgbHNsIDgpIGluXG4gICAgICAgIGlmIGlkeCA8IEFycmF5Lmxlbmd0aCBvdXRlcl9jb2RlLnZjX2NvbnN0YW50cyB0aGVuXG4gICAgICAgICAgbGV0IGlubmVyX3ZhbCA9IG91dGVyX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIGluXG4gICAgICAgICAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgaW5uZXJfdmFsIGluXG4gICAgICAgICAgKCogUGhhc2UgRTogaWYgdGhlIGlubmVyIGxhbWJkYSdzIGJ5dGVjb2RlIGNvbnRhaW5zIGFueVxuICAgICAgICAgICAgIGV4dGVuc2lvbiBvcGNvZGUgKOKJpTIwMCksIHNraXAgSklUIGFuZCBsZXQgdGhlIGxhbWJkYSBydW5cbiAgICAgICAgICAgICBpbnRlcnByZXRlZCB2aWEgQ0VLLiBFeHRlbnNpb24gb3Bjb2RlcyBkaXNwYXRjaCBjb3JyZWN0bHlcbiAgICAgICAgICAgICB0aHJvdWdoIHRoZSBWTSdzIHJlZ2lzdHJ5IGZhbGx0aHJvdWdoLCBidXQgdGhlIEpJVCBoYXMgbm9cbiAgICAgICAgICAgICBrbm93bGVkZ2Ugb2YgdGhlbSBhbmQgc2hvdWxkbid0IGNsYWltIG93bmVyc2hpcC4gKilcbiAgICAgICAgICBpZiBieXRlY29kZV91c2VzX2V4dGVuc2lvbl9vcGNvZGVzIGNvZGUudmNfYnl0ZWNvZGUgY29kZS52Y19jb25zdGFudHMgdGhlbiBiZWdpblxuICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBieXRlY29kZSB1c2VzIGV4dGVuc2lvbiBvcGNvZGVzIChpbnRlcnByZXQtb25seSBpbiB2MSlcXG4lIVwiXG4gICAgICAgICAgICAgIGZuX25hbWU7XG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZW5kIGVsc2UgaWYgY29kZV91c2VzX2hhbmRsZXIgY29kZSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAoKiBndWFyZCAvIGhhbmRsZXItYmluZCAocG9zc2libHkgaW4gYSBuZXN0ZWQgY2xvc3VyZSk6IFZNXG4gICAgICAgICAgICAgICBQVVNIX0hBTkRMRVIgZG9lc24ndCBjYXRjaCB0aGUgYGVycm9yYCBwcmltaXRpdmUncyBPQ2FtbFxuICAgICAgICAgICAgICAgZXhjZXB0aW9uIGFjcm9zcyBmcmFtZXMg4oCUIHJ1biBvbiB0aGUgQ0VLLiAqKVxuICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBpbnN0YWxscyBhbiBleGNlcHRpb24gaGFuZGxlciAoZ3VhcmQpIOKAlCBpbnRlcnByZXQtb25seVxcbiUhXCJcbiAgICAgICAgICAgICAgZm5fbmFtZTtcbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICBlbmQgZWxzZSBpZiBIYXNodGJsLmxlbmd0aCBTeF90eXBlcy5qaXRfZXhjbHVkZWRfY2FsbGVyX25hbWVzID4gMFxuICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVfcmVmc19lc2NhcGluZ19jYWxsZXIgY29kZSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAoKiBDYWxscyBhIGNhbGwvY2MtZXN0YWJsaXNoaW5nIGZvcm0gKGUuZy4gY2wtcmVzdGFydC1jYXNlKTogbXVzdFxuICAgICAgICAgICAgICAgcnVuIG9uIHRoZSBDRUsgc28gdGhlIGNhcHR1cmVkIGNvbnRpbnVhdGlvbiBjYW4gZXNjYXBlLiAqKVxuICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBjYWxscyBhIGNhbGwvY2MtZXN0YWJsaXNoaW5nIGZvcm0g4oCUIGludGVycHJldC1vbmx5XFxuJSFcIlxuICAgICAgICAgICAgICBmbl9uYW1lO1xuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVuZCBlbHNlXG4gICAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgICB2bV9uYW1lID0gbC5sX25hbWU7IHZtX2Vudl9yZWYgPSBlZmZlY3RpdmVfZ2xvYmFsczsgdm1fY2xvc3VyZV9lbnYgPSBTb21lIGwubF9jbG9zdXJlIH1cbiAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gRkFJTCAlczogY2xvc3VyZSBpbmRleCAlZCBvdXQgb2YgYm91bmRzIChwb29sPSVkKVxcbiUhXCJcbiAgICAgICAgICAgIGZuX25hbWUgaWR4IChBcnJheS5sZW5ndGggb3V0ZXJfY29kZS52Y19jb25zdGFudHMpO1xuICAgICAgICAgIE5vbmVcbiAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAodHJ5XG4gICAgICAgICAgbGV0IHZhbHVlID0gZXhlY3V0ZV9tb2R1bGUgb3V0ZXJfY29kZSBnbG9iYWxzIGluXG4gICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBSRVNPTFZFRCAlczogJXMgKGJjWzBdPSVkKVxcbiUhXCJcbiAgICAgICAgICAgIGZuX25hbWUgKHR5cGVfb2YgdmFsdWUpIChpZiBBcnJheS5sZW5ndGggYmMgPiAwIHRoZW4gYmMuKDApIGVsc2UgLTEpO1xuICAgICAgICAgIE5vbmVcbiAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBub24tY2xvc3VyZSBleGVjdXRpb24gZmFpbGVkIChiY1swXT0lZCwgbGVuPSVkKVxcbiUhXCJcbiAgICAgICAgICAgIGZuX25hbWUgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSkgKEFycmF5Lmxlbmd0aCBiYyk7XG4gICAgICAgICAgTm9uZSlcbiAgICAgIGVuZFxuICAgIHwgXyAtPlxuICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiBjb21waWxlciByZXR1cm5lZCAlc1xcbiUhXCIgZm5fbmFtZSAodHlwZV9vZiByZXN1bHQpO1xuICAgICAgTm9uZSlcbiAgd2l0aCBlIC0+XG4gICAgX2ppdF9jb21waWxpbmcgOj0gZmFsc2U7XG4gICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlc1xcbiUhXCIgZm5fbmFtZSAoUHJpbnRleGMudG9fc3RyaW5nIGUpO1xuICAgIE5vbmVcblxuKCogV2lyZSB1cCBmb3J3YXJkIHJlZmVyZW5jZXMgKilcbmxldCAoKSA9IGppdF9jb21waWxlX3JlZiA6PSBqaXRfY29tcGlsZV9sYW1iZGFcbmxldCAoKSA9IF92bV9jYWxsX2Nsb3N1cmVfcmVmIDo9IChmdW4gY2wgYXJncyAtPiBjYWxsX2Nsb3N1cmVfcmV1c2UgY2wgYXJncylcbmxldCAoKSA9IF92bV9zdXNwZW5zaW9uX3RvX2RpY3QgOj0gKGZ1biBleG4gLT5cbiAgbWF0Y2ggZXhuIHdpdGhcbiAgfCBWbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgKCogU25hcHNob3QgcGVuZGluZ19jZWsgYW5kIHJldXNlX3N0YWNrIE5PVyDigJQgYSBuZXN0ZWQgY2VrX2NhbGxfb3Jfc3VzcGVuZFxuICAgICAgIG9uIHRoZSBzYW1lIFZNIG1heSBvdmVyd3JpdGUgdGhlbSBiZWZvcmUgb3VyIHJlc3VtZSBmdW5jdGlvbiBpcyBjYWxsZWQuICopXG4gICAgbGV0IHNhdmVkX2NlayA9IHZtLnBlbmRpbmdfY2VrIGluXG4gICAgbGV0IHNhdmVkX3JldXNlID0gdm0ucmV1c2Vfc3RhY2sgaW5cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDMgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9fdm1fc3VzcGVuZGVkXCIgKEJvb2wgdHJ1ZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJyZXF1ZXN0XCIgcmVxdWVzdDtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInJlc3VtZVwiIChOYXRpdmVGbiAoXCJ2bS1yZXN1bWVcIiwgZnVuIGFyZ3MgLT5cbiAgICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbcmVzdWx0XSAtPlxuICAgICAgICAoKiBSZXN0b3JlIHNhdmVkIHN0YXRlIGJlZm9yZSByZXN1bWluZyDigJQgbWF5IGhhdmUgYmVlbiBvdmVyd3JpdHRlblxuICAgICAgICAgICBieSBhIG5lc3RlZCBzdXNwZW5zaW9uIG9uIHRoZSBzYW1lIFZNLiAqKVxuICAgICAgICB2bS5wZW5kaW5nX2NlayA8LSBzYXZlZF9jZWs7XG4gICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIHNhdmVkX3JldXNlO1xuICAgICAgICAodHJ5IHJlc3VtZV92bSB2bSByZXN1bHRcbiAgICAgICAgIHdpdGggZXhuMiAtPlxuICAgICAgICAgICBtYXRjaCAhX3ZtX3N1c3BlbnNpb25fdG9fZGljdCBleG4yIHdpdGhcbiAgICAgICAgICAgfCBTb21lIG1hcmtlciAtPiBtYXJrZXJcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIGV4bjIpXG4gICAgICB8IF8gLT4gTmlsKSk7XG4gICAgU29tZSAoRGljdCBkKVxuICB8IF8gLT4gTm9uZSlcbigqIEhvb2s6IHdoZW4gZXZhbF9leHByIChjZWtfcnVuX2l0ZXJhdGl2ZSkgZW5jb3VudGVycyBhIENFSyBzdXNwZW5zaW9uLFxuICAgY29udmVydCBpdCB0byBWbVN1c3BlbmRlZCBzbyBpdCBwcm9wYWdhdGVzIHRvIHRoZSBvdXRlciBoYW5kbGVyXG4gICAodmFsdWVfdG9fanMgd3JhcHBlciwgX2RyaXZlQXN5bmMsIGV0Yy4pLiBXaXRob3V0IHRoaXMsIHBlcmZvcm1cbiAgIGluc2lkZSBuZXN0ZWQgZXZhbF9leHByIGNhbGxzIChldmVudCBoYW5kbGVyIOKGkiB0cmFtcG9saW5lIOKGkiBldmFsX2V4cHIpXG4gICBnZXRzIHN3YWxsb3dlZCBhcyBcIklPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHRcIi4gKilcbmxldCAoKSA9IF9jZWtfaW9fc3VzcGVuZF9ob29rIDo9IFNvbWUgKGZ1biBzdXNwZW5kZWRfc3RhdGUgLT5cbiAgbGV0IHJlcXVlc3QgPSBTeF9yZWYuY2VrX2lvX3JlcXVlc3Qgc3VzcGVuZGVkX3N0YXRlIGluXG4gIGxldCB2bSA9IGNyZWF0ZSAhX2RlZmF1bHRfdm1fZ2xvYmFscyBpblxuICB2bS5wZW5kaW5nX2NlayA8LSBTb21lIHN1c3BlbmRlZF9zdGF0ZTtcbiAgKCogVHJhbnNmZXIgcmV1c2Vfc3RhY2sgZnJvbSB0aGUgYWN0aXZlIFZNIHNvIHJlc3VtZV92bSBjYW4gcmVzdG9yZVxuICAgICBjYWxsZXIgZnJhbWVzIHNhdmVkIGJ5IGNhbGxfY2xvc3VyZV9yZXVzZSBkdXJpbmcgdGhlIHN1c3BlbnNpb24gY2hhaW4uICopXG4gIChtYXRjaCAhX2FjdGl2ZV92bSB3aXRoXG4gICB8IFNvbWUgYWN0aXZlIHdoZW4gYWN0aXZlLnJldXNlX3N0YWNrIDw+IFtdIC0+XG4gICAgIHZtLnJldXNlX3N0YWNrIDwtIGFjdGl2ZS5yZXVzZV9zdGFjaztcbiAgICAgYWN0aXZlLnJldXNlX3N0YWNrIDwtIFtdXG4gICB8IF8gLT4gKCkpO1xuICByYWlzZSAoVm1TdXNwZW5kZWQgKHJlcXVlc3QsIHZtKSkpXG5cbmxldCAoKSA9IF9jZWtfZXZhbF9sYW1iZGFfcmVmIDo9IChmdW4gZiBhcmdzIC0+XG4gIGxldCBzdGF0ZSA9IFN4X3JlZi5jb250aW51ZV93aXRoX2NhbGwgZiAoTGlzdCBhcmdzKSAoRW52IChtYWtlX2VudiAoKSkpIChMaXN0IGFyZ3MpIChMaXN0IFtdKSBpblxuICBsZXQgZmluYWwgPSBTeF9yZWYuY2VrX3N0ZXBfbG9vcCBzdGF0ZSBpblxuICBtYXRjaCBTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgICgqIENyZWF0ZSBhIHN0dWIgVk0gdG8gY2FycnkgdGhlIHN1c3BlbmRlZCBDRUsgc3RhdGUuXG4gICAgICAgcmVzdW1lX3ZtIHdpbGw6IGNla19yZXN1bWUg4oaSIHB1c2ggcmVzdWx0IOKGkiBydW4gKG5vLW9wLCBubyBmcmFtZXMpIOKGkiBwb3AgKilcbiAgICBsZXQgdm0gPSBjcmVhdGUgKEhhc2h0YmwuY3JlYXRlIDApIGluXG4gICAgdm0ucGVuZGluZ19jZWsgPC0gU29tZSBmaW5hbDtcbiAgICAoKiBUcmFuc2ZlciByZXVzZV9zdGFjayBmcm9tIGFjdGl2ZSBWTSAqKVxuICAgIChtYXRjaCAhX2FjdGl2ZV92bSB3aXRoXG4gICAgIHwgU29tZSBhY3RpdmUgd2hlbiBhY3RpdmUucmV1c2Vfc3RhY2sgPD4gW10gLT5cbiAgICAgICB2bS5yZXVzZV9zdGFjayA8LSBhY3RpdmUucmV1c2Vfc3RhY2s7XG4gICAgICAgYWN0aXZlLnJldXNlX3N0YWNrIDwtIFtdXG4gICAgIHwgXyAtPiAoKSk7XG4gICAgcmFpc2UgKFZtU3VzcGVuZGVkIChTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIHZtKSlcbiAgfCBfIC0+IFN4X3JlZi5jZWtfdmFsdWUgZmluYWwpXG5cblxuKCoqIHsxIERlYnVnZ2luZyAvIGludHJvc3BlY3Rpb259ICopXG5cbigqKiBNYXAgb3Bjb2RlIGludGVnZXIgdG8gaHVtYW4tcmVhZGFibGUgbmFtZS4gKilcbmxldCBvcGNvZGVfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgMSAtPiBcIkNPTlNUXCIgfCAyIC0+IFwiTklMXCIgfCAzIC0+IFwiVFJVRVwiIHwgNCAtPiBcIkZBTFNFXCJcbiAgfCA1IC0+IFwiUE9QXCIgfCA2IC0+IFwiRFVQXCIgfCA3IC0+IFwiU1dBUFwiXG4gIHwgMTYgLT4gXCJMT0NBTF9HRVRcIiB8IDE3IC0+IFwiTE9DQUxfU0VUXCJcbiAgfCAxOCAtPiBcIlVQVkFMVUVfR0VUXCIgfCAxOSAtPiBcIlVQVkFMVUVfU0VUXCJcbiAgfCAyMCAtPiBcIkdMT0JBTF9HRVRcIiB8IDIxIC0+IFwiR0xPQkFMX1NFVFwiXG4gIHwgMzIgLT4gXCJKVU1QXCIgfCAzMyAtPiBcIkpVTVBfSUZfRkFMU0VcIiB8IDM0IC0+IFwiSlVNUF9JRl9UUlVFXCJcbiAgfCAzNSAtPiBcIlBVU0hfSEFORExFUlwiIHwgMzYgLT4gXCJQT1BfSEFORExFUlwiIHwgMzcgLT4gXCJSQUlTRVwiXG4gIHwgNDggLT4gXCJDQUxMXCIgfCA0OSAtPiBcIlRBSUxfQ0FMTFwiIHwgNTAgLT4gXCJSRVRVUk5cIlxuICB8IDUxIC0+IFwiQ0xPU1VSRVwiIHwgNTIgLT4gXCJDQUxMX1BSSU1cIlxuICB8IDY0IC0+IFwiTElTVFwiIHwgNjUgLT4gXCJESUNUXCJcbiAgfCAxMjggLT4gXCJERUZJTkVcIlxuICB8IDE0NCAtPiBcIlNUUl9DT05DQVRcIlxuICB8IDE2MCAtPiBcIkFERFwiIHwgMTYxIC0+IFwiU1VCXCIgfCAxNjIgLT4gXCJNVUxcIiB8IDE2MyAtPiBcIkRJVlwiXG4gIHwgMTY0IC0+IFwiRVFcIiB8IDE2NSAtPiBcIkxUXCIgfCAxNjYgLT4gXCJHVFwiIHwgMTY3IC0+IFwiTk9UXCJcbiAgfCAxNjggLT4gXCJMRU5cIiB8IDE2OSAtPiBcIkZJUlNUXCIgfCAxNzAgLT4gXCJSRVNUXCIgfCAxNzEgLT4gXCJOVEhcIlxuICB8IDE3MiAtPiBcIkNPTlNcIiB8IDE3MyAtPiBcIk5FR1wiIHwgMTc0IC0+IFwiSU5DXCIgfCAxNzUgLT4gXCJERUNcIlxuICB8IG4gLT5cbiAgICAoKiBFeHRlbnNpb24gb3Bjb2RlcyAo4omlMjAwKSBnZXQgdGhlaXIgaHVtYW4tcmVhZGFibGUgbmFtZSBmcm9tIHRoZVxuICAgICAgIHJlZ2lzdHJ5OyBkZWZhdWx0cyB0byBVTktOT1dOX24gaWYgdGhlIGV4dGVuc2lvbiBpc24ndCBsb2FkZWQuICopXG4gICAgKG1hdGNoICFleHRlbnNpb25fb3Bjb2RlX25hbWVfcmVmIG4gd2l0aFxuICAgICB8IFNvbWUgbmFtZSAtPiBuYW1lXG4gICAgIHwgTm9uZSAtPiBQcmludGYuc3ByaW50ZiBcIlVOS05PV05fJWRcIiBuKVxuXG4oKiogTnVtYmVyIG9mIGV4dHJhIG9wZXJhbmQgYnl0ZXMgY29uc3VtZWQgYnkgZWFjaCBvcGNvZGUuXG4gICAgUmV0dXJucyAoZm9ybWF0LCB0b3RhbF9ieXRlcykgd2hlcmUgZm9ybWF0IGRlc2NyaWJlcyB0aGUgb3BlcmFuZCB0eXBlcy4gKilcbmxldCBvcGNvZGVfb3BlcmFuZF9zaXplID0gZnVuY3Rpb25cbiAgfCAxICgqIENPTlNUICopIHwgMjAgKCogR0xPQkFMX0dFVCAqKSB8IDIxICgqIEdMT0JBTF9TRVQgKilcbiAgfCA2NCAoKiBMSVNUICopIHwgNjUgKCogRElDVCAqKSB8IDEyOCAoKiBERUZJTkUgKikgLT4gMiAgKCogdTE2ICopXG4gIHwgMTYgKCogTE9DQUxfR0VUICopIHwgMTcgKCogTE9DQUxfU0VUICopXG4gIHwgMTggKCogVVBWQUxVRV9HRVQgKikgfCAxOSAoKiBVUFZBTFVFX1NFVCAqKVxuICB8IDQ4ICgqIENBTEwgKikgfCA0OSAoKiBUQUlMX0NBTEwgKilcbiAgfCAxNDQgKCogU1RSX0NPTkNBVCAqKSAtPiAxICAoKiB1OCAqKVxuICB8IDMyICgqIEpVTVAgKikgfCAzMyAoKiBKVU1QX0lGX0ZBTFNFICopIHwgMzQgKCogSlVNUF9JRl9UUlVFICopXG4gIHwgMzUgKCogUFVTSF9IQU5ETEVSICopIC0+IDIgICgqIGkxNiAqKVxuICB8IDUxICgqIENMT1NVUkUgKikgLT4gMiAgKCogdTE2IGZvciBjb25zdGFudCBpbmRleDsgdXB2YWx1ZSBkZXNjcmlwdG9ycyBmb2xsb3cgZHluYW1pY2FsbHkgKilcbiAgfCA1MiAoKiBDQUxMX1BSSU0gKikgLT4gMyAgKCogdTE2ICsgdTggKilcbiAgfCBfIC0+IDAgICgqIG5vIG9wZXJhbmQgKilcblxuKCoqIFRyYWNlIGEgc2luZ2xlIGV4ZWN1dGlvbiDigJQgY29tcGlsZSArIHJ1biwgY29sbGVjdGluZyB0cmFjZSBlbnRyaWVzLlxuICAgIEVhY2ggZW50cnkgaXMgYSBkaWN0IHdpdGggOm9wY29kZSwgOnN0YWNrLCA6ZGVwdGguICopXG5sZXQgdHJhY2VfcnVuIHNyYyBnbG9iYWxzID1cbiAgKCogQ29tcGlsZSAqKVxuICBsZXQgY29tcGlsZV9mbiA9IHRyeSBIYXNodGJsLmZpbmQgZ2xvYmFscyBcImNvbXBpbGVcIlxuICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidHJhY2U6IGNvbXBpbGVyIG5vdCBsb2FkZWRcIikgaW5cbiAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgbGV0IGV4cHIgPSBtYXRjaCBleHBycyB3aXRoIFtlXSAtPiBlIHwgXyAtPiBMaXN0IChTeW1ib2wgXCJkb1wiIDo6IGV4cHJzKSBpblxuICBsZXQgcXVvdGVkID0gTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgZXhwcl0gaW5cbiAgbGV0IGNvZGVfdmFsID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbY29tcGlsZV9mbjsgcXVvdGVkXSkgKEVudiAobWFrZV9lbnYgKCkpKSBpblxuICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwidHJhY2VcIjtcbiAgICAgICAgICAgICB2bV9lbnZfcmVmID0gZ2xvYmFsczsgdm1fY2xvc3VyZV9lbnYgPSBOb25lIH0gaW5cbiAgbGV0IHZtID0gY3JlYXRlIGdsb2JhbHMgaW5cbiAgbGV0IGZyYW1lMCA9IHsgY2xvc3VyZSA9IGNsOyBpcCA9IDA7IGJhc2UgPSAwOyBsb2NhbF9jZWxscyA9IEhhc2h0YmwuY3JlYXRlIDQgfSBpblxuICBmb3IgXyA9IDAgdG8gY29kZS52Y19sb2NhbHMgLSAxIGRvIHB1c2ggdm0gTmlsIGRvbmU7XG4gIHZtLmZyYW1lcyA8LSBbZnJhbWUwXTtcbiAgKCogUnVuIHdpdGggdHJhY2luZyAqKVxuICBsZXQgdHJhY2UgPSByZWYgW10gaW5cbiAgbGV0IG1heF9zdGVwcyA9IDEwMDAwIGluXG4gIGxldCBzdGVwcyA9IHJlZiAwIGluXG4gICh0cnlcbiAgICB3aGlsZSB2bS5mcmFtZXMgPD4gW10gJiYgIXN0ZXBzIDwgbWF4X3N0ZXBzIGRvXG4gICAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aFxuICAgICAgfCBbXSAtPiAoKVxuICAgICAgfCBmcmFtZSA6OiBfIC0+XG4gICAgICAgIGxldCBiYyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgICBpZiBmcmFtZS5pcCA+PSBBcnJheS5sZW5ndGggYmMgdGhlblxuICAgICAgICAgIHZtLmZyYW1lcyA8LSBbXVxuICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgbGV0IG9wID0gYmMuKGZyYW1lLmlwKSBpblxuICAgICAgICAgICgqIFNuYXBzaG90IHN0YWNrIHRvcCA1ICopXG4gICAgICAgICAgbGV0IHN0YWNrX3NuYXAgPSBMaXN0LmluaXQgKG1pbiA1IHZtLnNwKSAoZnVuIGkgLT5cbiAgICAgICAgICAgIGxldCB2ID0gdm0uc3RhY2suKHZtLnNwIC0gMSAtIGkpIGluXG4gICAgICAgICAgICBTdHJpbmcgKFN4X3R5cGVzLmluc3BlY3QgdikpIGluXG4gICAgICAgICAgbGV0IGVudHJ5ID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9wY29kZVwiIChTdHJpbmcgKG9wY29kZV9uYW1lIG9wKSk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwic3RhY2tcIiAoTGlzdCBzdGFja19zbmFwKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJkZXB0aFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggdm0uZnJhbWVzKSkpO1xuICAgICAgICAgIHRyYWNlIDo9IERpY3QgZW50cnkgOjogIXRyYWNlO1xuICAgICAgICAgIGluY3Igc3RlcHM7XG4gICAgICAgICAgKCogRXhlY3V0ZSBvbmUgc3RlcCDigJQgdXNlIHRoZSBtYWluIHJ1biBsb29wIGZvciAxIHN0ZXAuXG4gICAgICAgICAgICAgV2UgZG8gdGhpcyBieSBzYXZpbmcgdGhlIHN0YXRlIGFuZCBydW5uaW5nIHRoZSBvcmlnaW5hbCBkaXNwYXRjaC4gKilcbiAgICAgICAgICBsZXQgc2F2ZWRfaXAgPSBmcmFtZS5pcCBpblxuICAgICAgICAgIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgMTtcbiAgICAgICAgICBsZXQgcmVzdF9mcmFtZXMgPSBMaXN0LnRsIHZtLmZyYW1lcyBpblxuICAgICAgICAgICh0cnkgbWF0Y2ggb3Agd2l0aFxuICAgICAgICAgIHwgMSAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW4gcHVzaCB2bSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpXG4gICAgICAgICAgfCAyIC0+IHB1c2ggdm0gTmlsXG4gICAgICAgICAgfCAzIC0+IHB1c2ggdm0gKEJvb2wgdHJ1ZSlcbiAgICAgICAgICB8IDQgLT4gcHVzaCB2bSAoQm9vbCBmYWxzZSlcbiAgICAgICAgICB8IDUgLT4gaWdub3JlIChwb3Agdm0pXG4gICAgICAgICAgfCA2IC0+IHB1c2ggdm0gKHBlZWsgdm0pXG4gICAgICAgICAgfCA3IC0+IGxldCBhID0gcG9wIHZtIGluIGxldCBiID0gcG9wIHZtIGluIHB1c2ggdm0gYTsgcHVzaCB2bSBiXG4gICAgICAgICAgfCAxNiAtPiBsZXQgc2xvdCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZVxuICAgICAgICAgICAgICB8IE5vbmUgLT4gdm0uc3RhY2suKGZyYW1lLmJhc2UgKyBzbG90KSBpblxuICAgICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgICAgfCAxNyAtPiBsZXQgc2xvdCA9IHJlYWRfdTggZnJhbWUgaW4gbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlIDwtIHZcbiAgICAgICAgICAgICB8IE5vbmUgLT4gdm0uc3RhY2suKGZyYW1lLmJhc2UgKyBzbG90KSA8LSB2KVxuICAgICAgICAgIHwgMTggLT4gbGV0IGlkeCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZVxuICAgICAgICAgIHwgMTkgLT4gbGV0IGlkeCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWUgPC0gcGVlayB2bVxuICAgICAgICAgIHwgMjAgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBsZXQgdiA9IHRyeSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICAgIHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZSB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpIGluXG4gICAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgICB8IDIxIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSAocGVlayB2bSlcbiAgICAgICAgICB8IDMyIC0+IGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICAgIHwgMzMgLT4gbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBpZiBub3QgKHN4X3RydXRoeSB2KSB0aGVuIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgICAgfCAzNCAtPiBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGlmIHN4X3RydXRoeSB2IHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgICB8IDM1IC0+IGxldCBjYXRjaF9vZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgICAgdm0uaGFuZGxlcl9zdGFjayA8LSB7IGhfY2F0Y2hfaXAgPSBmcmFtZS5pcCArIGNhdGNoX29mZnNldDtcbiAgICAgICAgICAgICAgaF9mcmFtZV9kZXB0aCA9IExpc3QubGVuZ3RoIHZtLmZyYW1lczsgaF9zcCA9IHZtLnNwO1xuICAgICAgICAgICAgICBoX2ZyYW1lID0gZnJhbWUgfSA6OiB2bS5oYW5kbGVyX3N0YWNrXG4gICAgICAgICAgfCAzNiAtPiAobWF0Y2ggdm0uaGFuZGxlcl9zdGFjayB3aXRoIF8gOjogciAtPiB2bS5oYW5kbGVyX3N0YWNrIDwtIHIgfCBbXSAtPiAoKSlcbiAgICAgICAgICB8IDM3IC0+IGxldCBleG5fdmFsID0gcG9wIHZtIGluXG4gICAgICAgICAgICAobWF0Y2ggdm0uaGFuZGxlcl9zdGFjayB3aXRoXG4gICAgICAgICAgICAgfCBlbnRyeSA6OiByZXN0IC0+XG4gICAgICAgICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIHJlc3Q7XG4gICAgICAgICAgICAgICB3aGlsZSBMaXN0Lmxlbmd0aCB2bS5mcmFtZXMgPiBlbnRyeS5oX2ZyYW1lX2RlcHRoIGRvXG4gICAgICAgICAgICAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoIF8gOjogZnMgLT4gdm0uZnJhbWVzIDwtIGZzIHwgW10gLT4gKCkgZG9uZTtcbiAgICAgICAgICAgICAgIHZtLnNwIDwtIGVudHJ5Lmhfc3A7IGVudHJ5LmhfZnJhbWUuaXAgPC0gZW50cnkuaF9jYXRjaF9pcDtcbiAgICAgICAgICAgICAgIHB1c2ggdm0gZXhuX3ZhbFxuICAgICAgICAgICAgIHwgW10gLT4gdm0uZnJhbWVzIDwtIFtdKVxuICAgICAgICAgIHwgNDggLT4gbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtX2NhbGwgdm0gZiAoTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykpXG4gICAgICAgICAgfCA0OSAtPiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzOyB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgICAgdm1fY2FsbCB2bSBmIChMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSlcbiAgICAgICAgICB8IDUwIC0+IGxldCByZXN1bHQgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lczsgdm0uc3AgPC0gZnJhbWUuYmFzZTsgcHVzaCB2bSByZXN1bHRcbiAgICAgICAgICB8IDUxIC0+ICgqIENMT1NVUkUg4oCUIHNraXAgZm9yIHRyYWNlLCBqdXN0IGFkdmFuY2UgcGFzdCB1cHZhbHVlIGRlc2NyaXB0b3JzICopXG4gICAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBjb2RlX3ZhbDIgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIGluXG4gICAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb2RlX3ZhbDIgd2l0aFxuICAgICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgblxuICAgICAgICAgICAgICAgICAgfCBfIC0+IDApXG4gICAgICAgICAgICAgIHwgXyAtPiAwIGluXG4gICAgICAgICAgICBsZXQgdXB2YWx1ZXMgPSBBcnJheS5pbml0IHV2X2NvdW50IChmdW4gXyAtPlxuICAgICAgICAgICAgICBsZXQgaXNfbG9jYWwgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgICAgaWYgaXNfbG9jYWwgPSAxIHRoZW4gYmVnaW5cbiAgICAgICAgICAgICAgICBsZXQgY2VsbCA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgaW5kZXggd2l0aFxuICAgICAgICAgICAgICAgICAgfCBTb21lIGV4aXN0aW5nIC0+IGV4aXN0aW5nXG4gICAgICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGMgPSB7IHV2X3ZhbHVlID0gdm0uc3RhY2suKGZyYW1lLmJhc2UgKyBpbmRleCkgfSBpblxuICAgICAgICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZnJhbWUubG9jYWxfY2VsbHMgaW5kZXggYzsgYyBpblxuICAgICAgICAgICAgICAgIGNlbGxcbiAgICAgICAgICAgICAgZW5kIGVsc2UgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaW5kZXgpXG4gICAgICAgICAgICApIGluXG4gICAgICAgICAgICBsZXQgaW5uZXJfY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbDIgaW5cbiAgICAgICAgICAgIGxldCBjID0geyB2bV9jb2RlID0gaW5uZXJfY29kZTsgdm1fdXB2YWx1ZXMgPSB1cHZhbHVlczsgdm1fbmFtZSA9IE5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSB2bS5nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgfSBpblxuICAgICAgICAgICAgcHVzaCB2bSAoVm1DbG9zdXJlIGMpXG4gICAgICAgICAgfCA1MiAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW4gbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBsZXQgYXJncyA9IExpc3QuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgICBsZXQgZm5fdmFsID0gdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lIHdpdGggXyAtPlxuICAgICAgICAgICAgICB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNOiB1bmtub3duIHByaW1pdGl2ZSBcIiBeIG5hbWUpKSBpblxuICAgICAgICAgICAgKG1hdGNoIGZuX3ZhbCB3aXRoIE5hdGl2ZUZuIChfLCBmbikgLT4gcHVzaCB2bSAoZm4gYXJncykgfCBfIC0+IHB1c2ggdm0gTmlsKVxuICAgICAgICAgIHwgNjQgLT4gbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBpdGVtcyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgICAgcHVzaCB2bSAoTGlzdCBpdGVtcylcbiAgICAgICAgICB8IDY1IC0+IGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIGNvdW50IGluXG4gICAgICAgICAgICBmb3IgXyA9IDEgdG8gY291bnQgZG8gbGV0IHYgPSBwb3Agdm0gaW4gbGV0IGsgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgICAgbGV0IGtleSA9IG1hdGNoIGsgd2l0aCBTdHJpbmcgcyAtPiBzIHwgS2V5d29yZCBzIC0+IHMgfCBfIC0+IFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGsgaW5cbiAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQga2V5IHYgZG9uZTtcbiAgICAgICAgICAgIHB1c2ggdm0gKERpY3QgZClcbiAgICAgICAgICB8IDEyOCAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSB2bS5nbG9iYWxzIG5hbWUgKHBlZWsgdm0pXG4gICAgICAgICAgfCAxNDQgLT4gbGV0IGNvdW50ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IHBhcnRzID0gTGlzdC5pbml0IGNvdW50IChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgICBwdXNoIHZtIChTdHJpbmcgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgU3hfcnVudGltZS52YWx1ZV90b19zdHIgcGFydHMpKSlcbiAgICAgICAgICB8IDE2MCAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggKy4geSkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE2MSAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLS4geSkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE2MiAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggKi4geSkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE2MyAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLy4geSkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE2NCAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpbiBwdXNoIHZtIChCb29sIChhID0gYikpXG4gICAgICAgICAgfCAxNjUgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoeCA8IHkpIHwgXyAtPiBCb29sIGZhbHNlKVxuICAgICAgICAgIHwgMTY2IC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPiB5KSB8IF8gLT4gQm9vbCBmYWxzZSlcbiAgICAgICAgICB8IDE2NyAtPiBsZXQgdiA9IHBvcCB2bSBpbiBwdXNoIHZtIChCb29sIChub3QgKHN4X3RydXRoeSB2KSkpXG4gICAgICAgICAgfCAxNjggLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgICB8IExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbCkpXG4gICAgICAgICAgICAgIHwgU3RyaW5nIHMgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpXG4gICAgICAgICAgICAgIHwgXyAtPiBOdW1iZXIgMC4wKVxuICAgICAgICAgIHwgMTY5IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTGlzdCAoeCA6OiBfKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IHggOjogXyB9IC0+IHggfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE3MCAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICAgIHwgTGlzdCAoXyA6OiB4cykgfCBMaXN0UmVmIHsgY29udGVudHMgPSBfIDo6IHhzIH0gLT4gTGlzdCB4cyB8IF8gLT4gTGlzdCBbXSlcbiAgICAgICAgICB8IDE3MSAtPiBsZXQgbiA9IHBvcCB2bSBhbmQgY29sbCA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCwgbiB3aXRoXG4gICAgICAgICAgICAgIHwgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSksIE51bWJlciBmIC0+XG4gICAgICAgICAgICAgICAgKHRyeSBMaXN0Lm50aCBsIChpbnRfb2ZfZmxvYXQgZikgd2l0aCBfIC0+IE5pbCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE3MiAtPiBsZXQgY29sbCA9IHBvcCB2bSBhbmQgeCA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCB3aXRoIExpc3QgbCAtPiBMaXN0ICh4IDo6IGwpIHwgXyAtPiBMaXN0IFt4XSlcbiAgICAgICAgICB8IDE3MyAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIE51bWJlciB4IC0+IE51bWJlciAoLS54KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTc0IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTnVtYmVyIHggLT4gTnVtYmVyICh4ICsuIDEuMCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE3NSAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIE51bWJlciB4IC0+IE51bWJlciAoeCAtLiAxLjApIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgICAgd2l0aCBlIC0+XG4gICAgICAgICAgICBsZXQgXyA9IGUgaW5cbiAgICAgICAgICAgIGlnbm9yZSBzYXZlZF9pcDtcbiAgICAgICAgICAgICgqIE9uIGVycm9yIGR1cmluZyB0cmFjZSwganVzdCBzdG9wICopXG4gICAgICAgICAgICB2bS5mcmFtZXMgPC0gW10pXG4gICAgICAgIGVuZFxuICAgIGRvbmVcbiAgd2l0aCBfIC0+ICgpKTtcbiAgTGlzdCAoTGlzdC5yZXYgIXRyYWNlKVxuXG4oKiogRGlzYXNzZW1ibGUgYSB2bV9jb2RlIGludG8gYSBsaXN0IG9mIGluc3RydWN0aW9uIGRpY3RzLiAqKVxubGV0IGRpc2Fzc2VtYmxlIChjb2RlIDogdm1fY29kZSkgPVxuICBsZXQgYmMgPSBjb2RlLnZjX2J5dGVjb2RlIGluXG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYmMgaW5cbiAgbGV0IGNvbnN0cyA9IGNvZGUudmNfY29uc3RhbnRzIGluXG4gIGxldCBpbnN0cnMgPSByZWYgW10gaW5cbiAgbGV0IGlwID0gcmVmIDAgaW5cbiAgd2hpbGUgIWlwIDwgbGVuIGRvXG4gICAgbGV0IG9mZnNldCA9ICFpcCBpblxuICAgIGxldCBvcCA9IGJjLighaXApIGluXG4gICAgaXAgOj0gIWlwICsgMTtcbiAgICBsZXQgbmFtZSA9IG9wY29kZV9uYW1lIG9wIGluXG4gICAgbGV0IG9wZXJhbmRzID0gcmVmIFtdIGluXG4gICAgKG1hdGNoIG9wIHdpdGhcbiAgICB8IDEgKCogQ09OU1QgKikgfCAyMCAoKiBHTE9CQUxfR0VUICopIHwgMjEgKCogR0xPQkFMX1NFVCAqKVxuICAgIHwgMTI4ICgqIERFRklORSAqKSAtPlxuICAgICAgaWYgIWlwICsgMSA8IGxlbiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsbyA9IGJjLighaXApIGluIGxldCBoaSA9IGJjLighaXAgKyAxKSBpblxuICAgICAgICBsZXQgaWR4ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgICAgICAgaXAgOj0gIWlwICsgMjtcbiAgICAgICAgbGV0IGNvbnN0X3N0ciA9IGlmIGlkeCA8IEFycmF5Lmxlbmd0aCBjb25zdHNcbiAgICAgICAgICB0aGVuIFN4X3R5cGVzLmluc3BlY3QgY29uc3RzLihpZHgpIGVsc2UgXCI/XCIgaW5cbiAgICAgICAgb3BlcmFuZHMgOj0gW051bWJlciAoZmxvYXRfb2ZfaW50IGlkeCk7IFN0cmluZyBjb25zdF9zdHJdXG4gICAgICBlbmRcbiAgICB8IDY0ICgqIExJU1QgKikgfCA2NSAoKiBESUNUICopIHwgNTEgKCogQ0xPU1VSRSAqKSAtPlxuICAgICAgaWYgIWlwICsgMSA8IGxlbiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsbyA9IGJjLighaXApIGluIGxldCBoaSA9IGJjLighaXAgKyAxKSBpblxuICAgICAgICBsZXQgaWR4ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgICAgICAgaXAgOj0gIWlwICsgMjtcbiAgICAgICAgb3BlcmFuZHMgOj0gW051bWJlciAoZmxvYXRfb2ZfaW50IGlkeCldO1xuICAgICAgICAoKiBGb3IgQ0xPU1VSRSwgc2tpcCB1cHZhbHVlIGRlc2NyaXB0b3JzICopXG4gICAgICAgIGlmIG9wID0gNTEgJiYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuIGJlZ2luXG4gICAgICAgICAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGhcbiAgICAgICAgICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ1cHZhbHVlLWNvdW50XCIgd2l0aFxuICAgICAgICAgICAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG5cbiAgICAgICAgICAgICAgICB8IF8gLT4gMClcbiAgICAgICAgICAgIHwgXyAtPiAwIGluXG4gICAgICAgICAgaXAgOj0gIWlwICsgdXZfY291bnQgKiAyXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgICB8IDE4ICgqIFVQVkFMVUVfR0VUICopIHwgMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgICB8IDQ4ICgqIENBTEwgKikgfCA0OSAoKiBUQUlMX0NBTEwgKilcbiAgICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+XG4gICAgICBpZiAhaXAgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgdiA9IGJjLighaXApIGluIGlwIDo9ICFpcCArIDE7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCB2KV1cbiAgICAgIGVuZFxuICAgIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IHJhdyA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGxldCBzaWduZWQgPSBpZiByYXcgPj0gMzI3NjggdGhlbiByYXcgLSA2NTUzNiBlbHNlIHJhdyBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgc2lnbmVkKV1cbiAgICAgIGVuZFxuICAgIHwgNTIgKCogQ0FMTF9QUklNICopIC0+XG4gICAgICBpZiAhaXAgKyAyIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBsZXQgYXJnYyA9IGJjLighaXAgKyAyKSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAzO1xuICAgICAgICBsZXQgcHJpbV9uYW1lID0gaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0c1xuICAgICAgICAgIHRoZW4gKG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiKSBlbHNlIFwiP1wiIGluXG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpOyBTdHJpbmcgcHJpbV9uYW1lOyBOdW1iZXIgKGZsb2F0X29mX2ludCBhcmdjKV1cbiAgICAgIGVuZFxuICAgIHwgXyAtPiAoKSk7XG4gICAgbGV0IGVudHJ5ID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9mZnNldFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBvZmZzZXQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvcGNvZGVcIiAoU3RyaW5nIG5hbWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9wZXJhbmRzXCIgKExpc3QgIW9wZXJhbmRzKTtcbiAgICBpbnN0cnMgOj0gRGljdCBlbnRyeSA6OiAhaW5zdHJzXG4gIGRvbmU7XG4gIGxldCByZXN1bHQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJhcml0eVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2RlLnZjX2FyaXR5KSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJudW1fbG9jYWxzXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGNvZGUudmNfbG9jYWxzKSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJjb25zdGFudHNcIiAoTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gdiAtPiBTdHJpbmcgKFN4X3R5cGVzLmluc3BlY3QgdikpIGNvbnN0cykpKTtcbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcImJ5dGVjb2RlXCIgKExpc3QgKExpc3QucmV2ICFpbnN0cnMpKTtcbiAgRGljdCByZXN1bHRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZnJlc2hfb29faWQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiY2FtbF9jYWxsOCIsImE1IiwiYTYiLCJhNyIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfTGlzdCIsIlN4X3R5cGVzIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfUXVldWUiLCJTdGRsaWIiLCJTeF9ydW50aW1lIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9QcmludGYiLCJTeF9yZWYiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0FycmF5IiwiU3hfcGFyc2VyIiwiU3RkbGliX1ByaW50ZXhjIiwiVm1TdXNwZW5kZWQiLCJJbnZhbGlkX29wY29kZSIsImV4biIsInJlcXVlc3QiLCJqaXRfY29tcGlsZV9yZWYiLCJwYXJhbSIsImV4dGVuc2lvbl9kaXNwYXRjaF9yZWYiLCJvcCIsInZtIiwiZnJhbWUiLCJleHRlbnNpb25fb3Bjb2RlX25hbWVfcmVmIiwiaml0X2ZhaWxlZF9zZW50aW5lbCIsImlzX2ppdF9mYWlsZWQiLCJjbCIsImNyZWF0ZSIsImdsb2JhbHMiLCJwdXNoIiwidiIsIm5zIiwicG9wIiwicGVlayIsInJlYWRfdTgiLCJyZWFkX3UxNiIsImxvIiwiaGkiLCJyZWFkX2kxNiIsImNsb3N1cmVfdG9fdmFsdWUiLCJtYXRjaCIsImFyZ3MiLCJuIiwicGFyc2Vfa2V5d29yZF9hcmdzIiwicGFyYW1zIiwicGFyYW1fc2V0IiwicCIsImt3YXJncyIsImNoaWxkcmVuIiwiayIsInJlc3QiLCJ2bV9jb21wX2ppdF9jb3VudCIsInZtX2NvbXBfY2VrX2NvdW50Iiwidm1faW5zbl9jb3VudCIsInZtX2NhbGxfY291bnQiLCJ2bV9jZWtfY291bnQiLCJ2bV9yZXNldF9jb3VudGVycyIsInZtX3JlcG9ydF9jb3VudGVycyIsInB1c2hfY2xvc3VyZV9mcmFtZSIsInJlc3RfYXJpdHkiLCJuYXJncyIsImkiLCJyZW1haW5pbmciLCJhIiwiZm9yJCIsInVzZWQiLCJjc3RfYXJpdHkiLCJjc3RfYnl0ZWNvZGUiLCJjc3RfY29uc3RhbnRzIiwiY3N0X3ZjX2J5dGVjb2RlIiwiY29kZV9mcm9tX3ZhbHVlIiwiZCIsImZpbmQyIiwiazEiLCJrMiIsInIiLCJsIiwieCIsImJjX2xpc3QiLCJlbnRyaWVzIiwiY29uc3RhbnRzIiwiZW50cnkiLCJlZCIsImFyaXR5IiwibGVuIiwibWF4X2xvY2FsIiwibG9jYWxzIiwic2xvdCIsImNzdCIsImNzdF9KSVRfY29tcGlsZXJfbm90X2xvYWRlZCIsImNzdF9jb21waWxlIiwiY3N0X2ZuIiwiY3N0X3F1b3RlIiwiaml0X2NvbXBpbGVfY29tcCIsIm5hbWUiLCJoYXNfY2hpbGRyZW4iLCJib2R5IiwiY2xvc3VyZSIsInBhcmFtX25hbWVzIiwicGFyYW1fc3ltcyIsInMiLCJmbl9leHByIiwiY29tcGlsZV9lbnYiLCJyZXN1bHQiLCJvdXRlcl9jb2RlIiwiYmMiLCJpZHgiLCJpbm5lcl92YWwiLCJjb2RlIiwiZSIsImNzdF9pb19zdXNwZW5kZWQiLCJjc3RfcGhhc2UiLCJjc3RfcmVxdWVzdCIsImFjdGl2ZV92bSIsImNla19jYWxsX29yX3N1c3BlbmQiLCJzYXZlZF9hY3RpdmUiLCJzdGF0ZSIsImZpbmFsIiwiY2FsbF9jbG9zdXJlIiwicHJldl92bSIsImNhbGxfY2xvc3VyZV9yZXVzZSIsInNhdmVkX3NwIiwic2F2ZWRfZnJhbWVzIiwicmVxIiwicmVzb2x2ZXIiLCJzYXZlZF9yZXVzZSIsImNiIiwicmVxMiIsInZtX2NhbGwiLCJldl9sIiwiYyIsImNvbXBpbGVkIiwiY2FsbF9hcmdzIiwiZm4iLCJjc3RfYmFzZSIsImNzdF9hdF9pcCIsImNzdF9zcCIsImNzdF9WTV91bmRlZmluZWQiLCJjc3RfVk1fdW5rbm93bl9wcmltaXRpdmUiLCJjc3RfdXB2YWx1ZV9jb3VudCIsInJ1biIsInJlc3RfZnJhbWVzIiwiY29uc3RzIiwiZm5fbmFtZSIsInNhdmVkX2lwIiwic3dpdGNoZXIiLCJjb3VudCIsInBhcnRzIiwiYiIsInkiLCJ4cyIsImNvbGwiLCJjZWxsIiwiaWQiLCJlbnYiLCJmb3VuZF9pbl9lbnYiLCJyZXNvbHZlX2ZuIiwid3JpdHRlbiIsIm9mZnNldCIsImNhdGNoX29mZnNldCIsImV4bl92YWwiLCJmcyIsImFyZ2MiLCJhcmdzX2xpc3QiLCJjb2RlX3ZhbCIsInV2X2NvdW50IiwidXB2YWx1ZXMiLCJpc19sb2NhbCIsImluZGV4IiwiZXhpc3RpbmciLCJmbl92YWwiLCJtc2ciLCJpdGVtcyIsImtleSIsInJlc3VtZV92bSIsInByZXZfYWN0aXZlIiwicmVzdG9yZSIsImNla19zdGF0ZSIsInJlc3RvcmVfcmV1c2UiLCJwZW5kaW5nIiwiY2FsbGJhY2tfcmVzdWx0IiwibmV3X3BlbmRpbmciLCJleGVjdXRlX21vZHVsZSIsImV4ZWN1dGVfbW9kdWxlX3NhZmUiLCJqaXRfaXNfYnJva2VuX25hbWUiLCJieXRlY29kZV9maW5kX29wY29kZSIsInByZWQiLCJmb3VuZCIsImlwIiwiZXh0cmEiLCJieXRlY29kZV91c2VzX2V4dGVuc2lvbl9vcGNvZGUiLCJjb2RlX3VzZXNfaGFuZGxlciIsImNvZGVfcmVmc19lc2NhcGluZ19jYWxsZXIiLCJjc3Rfaml0X0ZBSUwiLCJjc3Rfaml0X1NLSVAiLCJqaXRfY29tcGlsaW5nIiwiaml0X2NvbXBpbGVfbGFtYmRhIiwiY29tcGlsZV9mbiIsIm1lcmdlZCIsImVmZmVjdGl2ZV9nbG9iYWxzIiwidmFsdWUiLCJzYXZlZF9jZWsiLCJleG4yIiwibWFya2VyIiwic3VzcGVuZGVkX3N0YXRlIiwiYWN0aXZlIiwib3Bjb2RlX25hbWUiLCJvcGNvZGVfb3BlcmFuZF9zaXplIiwiY3N0X29wY29kZSIsInRyYWNlX3J1biIsInNyYyIsImV4cHJzIiwiZXhwciIsInF1b3RlZCIsImZyYW1lMCIsInRyYWNlIiwic3RlcHMiLCJzdGFja19zbmFwIiwiY29kZV92YWwyIiwiaW5uZXJfY29kZSIsImRpc2Fzc2VtYmxlIiwiaW5zdHJzIiwib3BlcmFuZHMiLCJwcmltX25hbWUiLCJyYXciLCJzaWduZWQiLCJjb25zdF9zdHIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQU4sR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFSLEdBQUFDLElBQUFFLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBVixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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QUFBLFNBQUFzQyxZQUFqQjtBQUFBO0FBQUEsWUFBQUEsWUFEUDtBQUFBLFdBQUFKLGFBRXNDLHVDQUFBbEMsT0FBQTtBQUFBO0FBQUE7QUFBQSxNQXVCeEM7QUFBQTtBQUFBLFFBQUE5SixJQUNVO0FBQUEsUUFBQWdNLGFBc0JaO0FBQUEsUUFBQWxDLE9BQUE7QUFBQTtBQUFBLFdBQUFrQyxhQXZCRSxVQUFBbEMsT0FBQTtBQUFBO0FBQUEsU0FBQTNHLFFBdUJVO0FBQUEsS0FDWjtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FBaUQ7QUFBQTtBQUFBO0FBQUEsUUFBQXNCLFNBR3RDO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUEsT0FDd0Q7QUFBQSx3QkFBQXpFLEdBQTRCLHVDQUFvQjtBQUFBLFNBQS9EO0FBQUEsSUFBekM7QUFBQSxZQUN3QztBQUFBLElBQXhDO0FBQUEsSUFBMkQ7QUFBQSxHQUNoRDtBQUFBLEdBemxEdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR2RnBGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzAzMjEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ZtX3JlZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3ZtX3JlZi5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBsaWIvdm0uc3ggKilcbigqIERvIG5vdCBlZGl0IOKAlCByZWdlbmVyYXRlIHdpdGg6IHB5dGhvbjMgaG9zdHMvb2NhbWwvYm9vdHN0cmFwX3ZtLnB5ICopXG5cbltAQEB3YXJuaW5nIFwiLTI2LTI3LTM5XCJdXG5cbm9wZW4gU3hfdHlwZXNcbm9wZW4gU3hfcnVudGltZVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGb3J3YXJkIHJlZmVyZW5jZXMgZm9yIENFSyBpbnRlcm9wXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBjZWtfY2FsbCA9IFN4X3JlZi5jZWtfY2FsbFxubGV0IGV2YWxfZXhwciA9IFN4X3JlZi5ldmFsX2V4cHJcbmxldCB0cmFtcG9saW5lIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBUaHVuayAoZXhwciwgZW52KSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgb3RoZXIgLT4gb3RoZXJcblxuKCogU1ggTGlzdCDihpIgT0NhbWwgbGlzdCAqKVxubGV0IHRvX29jYW1sX2xpc3QgdiA9IG1hdGNoIHYgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IF8gLT4gW3ZdXG5cbigqIHN0ciBhcyBOYXRpdmVGbiB2YWx1ZSDigJQgdHJhbnNwaWxlZCBjb2RlIHBhc3NlcyBpdCB0byBzeF9hcHBseSAqKVxubGV0IHN0ciA9IE5hdGl2ZUZuIChcInN0clwiLCBmdW4gYXJncyAtPiBTdHJpbmcgKHN4X3N0ciBhcmdzKSlcblxuKCogUHJpbWl0aXZlIGNhbGwgZGlzcGF0Y2gg4oCUIHRyYW5zcGlsZWQgY29kZSB1c2VzIHRoaXMgZm9yIENBTExfUFJJTSAqKVxubGV0IGNhbGxfcHJpbWl0aXZlIG5hbWUgYXJncyA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgcHJpbV9jYWxsIG4gKHRvX29jYW1sX2xpc3QgYXJncylcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUHJlYW1ibGU6IDQ4IG5hdGl2ZSBPQ2FtbCBmdW5jdGlvbnMgZm9yIFZNIHR5cGUgYWNjZXNzLlxuICAgVGhlc2UgYXJlIFNLSVBQRUQgZnJvbSB0cmFuc3BpbGF0aW9uIOKAlCB0aGUgdHJhbnNwaWxlZCBsb2dpY1xuICAgZnVuY3Rpb25zIGNhbGwgdGhlbSBmb3IgYWxsIHR5cGUgY29uc3RydWN0aW9uIGFuZCBmaWVsZCBhY2Nlc3MuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIC0tLSBVbndyYXAgaGVscGVycyAtLS0gKilcbmxldCB1bndyYXBfdm0gdiA9IG1hdGNoIHYgd2l0aCBWbU1hY2hpbmUgbSAtPiBtIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdCBhIHZtXCIpXG5sZXQgdW53cmFwX2ZyYW1lIHYgPSBtYXRjaCB2IHdpdGggVm1GcmFtZSBmIC0+IGYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgZnJhbWVcIilcbmxldCB1bndyYXBfY2xvc3VyZSB2ID0gbWF0Y2ggdiB3aXRoIFZtQ2xvc3VyZSBjIC0+IGMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgY2xvc3VyZVwiKVxuXG4oKiAtLS0gVXB2YWx1ZSBjZWxscyAoaW50ZXJuYWwgdG8gcHJlYW1ibGUg4oCUIG5ldmVyIFNYIHZhbHVlcykgLS0tICopXG5sZXQgX21ha2VfdXZfY2VsbCB2IDogdm1fdXB2YWx1ZV9jZWxsID0geyB1dl92YWx1ZSA9IHYgfVxubGV0IF91dl9nZXQgKGMgOiB2bV91cHZhbHVlX2NlbGwpID0gYy51dl92YWx1ZVxubGV0IF91dl9zZXQgKGMgOiB2bV91cHZhbHVlX2NlbGwpIHYgPSBjLnV2X3ZhbHVlIDwtIHZcblxuKCogU1gtZmFjaW5nIHN0dWJzIChpbiBza2lwIHNldCwgbmV2ZXIgY2FsbGVkIGZyb20gdHJhbnNwaWxlZCBjb2RlKSAqKVxubGV0IG1ha2VfdXB2YWx1ZV9jZWxsIHYgPSBOaWxcbmxldCB1dl9nZXQgXyA9IE5pbFxubGV0IHV2X3NldF9iIF8gXyA9IE5pbFxuXG4oKiAtLS0gVk0gY29kZSBjb25zdHJ1Y3Rpb24gLS0tICopXG5sZXQgY29kZV9mcm9tX3ZhbHVlIHYgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgdlxuXG5sZXQgbWFrZV92bV9jb2RlIGFyaXR5IGxvY2FscyBieXRlY29kZSBjb25zdGFudHMgPVxuICAoKiBCdWlsZCBhIERpY3QgdGhhdCBjb2RlX2Zyb21fdmFsdWUgY2FuIHBhcnNlICopXG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcImFyaXR5XCIgYXJpdHk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwiYnl0ZWNvZGVcIiBieXRlY29kZTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdGFudHNcIiBjb25zdGFudHM7XG4gIERpY3QgZFxuXG4oKiAtLS0gVk0gY2xvc3VyZSAtLS0gKilcbmxldCBtYWtlX3ZtX2Nsb3N1cmUgY29kZSB1cHZhbHVlcyBuYW1lIGdsb2JhbHMgY2xvc3VyZV9lbnYgPVxuICBsZXQgdXYgPSBtYXRjaCB1cHZhbHVlcyB3aXRoXG4gICAgfCBMaXN0IGwgLT4gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biB2IC0+IHsgdXZfdmFsdWUgPSB2IH0pIGwpXG4gICAgfCBfIC0+IFt8fF0gaW5cbiAgVm1DbG9zdXJlIHsgdm1fY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlO1xuICAgICAgICAgICAgICB2bV91cHZhbHVlcyA9IHV2O1xuICAgICAgICAgICAgICB2bV9uYW1lID0gKG1hdGNoIG5hbWUgd2l0aCBTdHJpbmcgcyAtPiBTb21lIHMgfCBOaWwgLT4gTm9uZSB8IF8gLT4gTm9uZSk7XG4gICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSAobWF0Y2ggZ2xvYmFscyB3aXRoIERpY3QgZCAtPiBkIHwgXyAtPiBIYXNodGJsLmNyZWF0ZSAwKTtcbiAgICAgICAgICAgICAgdm1fY2xvc3VyZV9lbnYgPSAobWF0Y2ggY2xvc3VyZV9lbnYgd2l0aCBFbnYgZSAtPiBTb21lIGUgfCBfIC0+IE5vbmUpIH1cblxuKCogLS0tIFZNIGZyYW1lIC0tLSAqKVxubGV0IG1ha2Vfdm1fZnJhbWUgY2xvc3VyZSBiYXNlID1cbiAgbGV0IGNsID0gdW53cmFwX2Nsb3N1cmUgY2xvc3VyZSBpblxuICBWbUZyYW1lIHsgdmZfY2xvc3VyZSA9IGNsOyB2Zl9pcCA9IDA7XG4gICAgICAgICAgICB2Zl9iYXNlID0gdmFsX3RvX2ludCBiYXNlO1xuICAgICAgICAgICAgdmZfbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH1cblxuKCogLS0tIFZNIG1hY2hpbmUgLS0tICopXG5sZXQgbWFrZV92bSBnbG9iYWxzID1cbiAgbGV0IGcgPSBtYXRjaCBnbG9iYWxzIHdpdGggRGljdCBkIC0+IGQgfCBfIC0+IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgVm1NYWNoaW5lIHsgdm1fc3RhY2sgPSBBcnJheS5tYWtlIDQwOTYgTmlsOyB2bV9zcCA9IDA7XG4gICAgICAgICAgICAgIHZtX2ZyYW1lcyA9IFtdOyB2bV9nbG9iYWxzID0gZzsgdm1fcGVuZGluZ19jZWsgPSBOb25lIH1cblxuKCogLS0tIFN0YWNrIG9wcyAtLS0gKilcbmxldCB2bV9wdXNoIHZtX3ZhbCB2ID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGlmIG0udm1fc3AgPj0gQXJyYXkubGVuZ3RoIG0udm1fc3RhY2sgdGhlbiBiZWdpblxuICAgIGxldCBucyA9IEFycmF5Lm1ha2UgKG0udm1fc3AgKiAyKSBOaWwgaW5cbiAgICBBcnJheS5ibGl0IG0udm1fc3RhY2sgMCBucyAwIG0udm1fc3A7XG4gICAgbS52bV9zdGFjayA8LSBuc1xuICBlbmQ7XG4gIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIHY7XG4gIG0udm1fc3AgPC0gbS52bV9zcCArIDE7XG4gIE5pbFxuXG5sZXQgdm1fcG9wIHZtX3ZhbCA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICBtLnZtX3N0YWNrLihtLnZtX3NwKVxuXG5sZXQgdm1fcGVlayB2bV92YWwgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbS52bV9zdGFjay4obS52bV9zcCAtIDEpXG5cbigqIC0tLSBGcmFtZSBvcGVyYW5kIHJlYWRpbmcgLS0tICopXG5sZXQgZnJhbWVfcmVhZF91OCBmcmFtZV92YWwgPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHYgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCkgaW5cbiAgZi52Zl9pcCA8LSBmLnZmX2lwICsgMTtcbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgdilcblxubGV0IGZyYW1lX3JlYWRfdTE2IGZyYW1lX3ZhbCA9XG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgbG8gPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCkgaW5cbiAgbGV0IGhpID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXAgKyAxKSBpblxuICBmLnZmX2lwIDwtIGYudmZfaXAgKyAyO1xuICBOdW1iZXIgKGZsb2F0X29mX2ludCAobG8gbG9yIChoaSBsc2wgOCkpKVxuXG5sZXQgZnJhbWVfcmVhZF9pMTYgZnJhbWVfdmFsID1cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGxldCBsbyA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpblxuICBsZXQgaGkgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCArIDEpIGluXG4gIGYudmZfaXAgPC0gZi52Zl9pcCArIDI7XG4gIGxldCB2ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgKGlmIHYgPj0gMzI3NjggdGhlbiB2IC0gNjU1MzYgZWxzZSB2KSlcblxuKCogLS0tIExvY2FsIHZhcmlhYmxlIGFjY2VzcyAtLS0gKilcbmxldCBmcmFtZV9sb2NhbF9nZXQgdm1fdmFsIGZyYW1lX3ZhbCBzbG90ID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgaWR4ID0gZi52Zl9iYXNlICsgdmFsX3RvX2ludCBzbG90IGluXG4gICgqIENoZWNrIGZvciBzaGFyZWQgdXB2YWx1ZSBjZWxsICopXG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZi52Zl9sb2NhbF9jZWxscyAodmFsX3RvX2ludCBzbG90KSB3aXRoXG4gIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgfCBOb25lIC0+IG0udm1fc3RhY2suKGlkeClcblxubGV0IGZyYW1lX2xvY2FsX3NldCB2bV92YWwgZnJhbWVfdmFsIHNsb3QgdiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHMgPSB2YWxfdG9faW50IHNsb3QgaW5cbiAgKCogSWYgc2xvdCBoYXMgYSBzaGFyZWQgY2VsbCwgd3JpdGUgdGhyb3VnaCBjZWxsICopXG4gIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGYudmZfbG9jYWxfY2VsbHMgcyB3aXRoXG4gICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlIDwtIHZcbiAgIHwgTm9uZSAtPiBtLnZtX3N0YWNrLihmLnZmX2Jhc2UgKyBzKSA8LSB2KTtcbiAgTmlsXG5cbigqIC0tLSBVcHZhbHVlIGFjY2VzcyAtLS0gKilcbmxldCBmcmFtZV91cHZhbHVlX2dldCBmcmFtZV92YWwgaWR4ID1cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGYudmZfY2xvc3VyZS52bV91cHZhbHVlcy4odmFsX3RvX2ludCBpZHgpLnV2X3ZhbHVlXG5cbmxldCBmcmFtZV91cHZhbHVlX3NldCBmcmFtZV92YWwgaWR4IHYgPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgZi52Zl9jbG9zdXJlLnZtX3VwdmFsdWVzLih2YWxfdG9faW50IGlkeCkudXZfdmFsdWUgPC0gdjtcbiAgTmlsXG5cbigqIC0tLSBGaWVsZCBhY2Nlc3NvcnMgLS0tICopXG5sZXQgZnJhbWVfaXAgZiA9IGxldCBmciA9IHVud3JhcF9mcmFtZSBmIGluIE51bWJlciAoZmxvYXRfb2ZfaW50IGZyLnZmX2lwKVxubGV0IGZyYW1lX3NldF9pcF9iIGYgdiA9IGxldCBmciA9IHVud3JhcF9mcmFtZSBmIGluIGZyLnZmX2lwIDwtIHZhbF90b19pbnQgdjsgTmlsXG5sZXQgZnJhbWVfYmFzZSBmID0gbGV0IGZyID0gdW53cmFwX2ZyYW1lIGYgaW4gTnVtYmVyIChmbG9hdF9vZl9pbnQgZnIudmZfYmFzZSlcbmxldCBmcmFtZV9jbG9zdXJlIGYgPSBsZXQgZnIgPSB1bndyYXBfZnJhbWUgZiBpbiBWbUNsb3N1cmUgZnIudmZfY2xvc3VyZVxuXG5sZXQgY2xvc3VyZV9jb2RlIGNsID0gbGV0IGMgPSB1bndyYXBfY2xvc3VyZSBjbCBpblxuICAoKiBSZXR1cm4gYXMgRGljdCBmb3IgY29kZV9ieXRlY29kZS9jb2RlX2NvbnN0YW50cy9jb2RlX2xvY2FscyAqKVxuICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1ieXRlY29kZVwiIChMaXN0IChBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biBpIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpKSBjLnZtX2NvZGUudmNfYnl0ZWNvZGUpKSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtY29uc3RhbnRzXCIgKExpc3QgKEFycmF5LnRvX2xpc3QgYy52bV9jb2RlLnZjX2NvbnN0YW50cykpO1xuICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWFyaXR5XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudm1fY29kZS52Y19hcml0eSkpO1xuICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWxvY2Fsc1wiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjLnZtX2NvZGUudmNfbG9jYWxzKSk7XG4gIERpY3QgZFxuXG5sZXQgY2xvc3VyZV91cHZhbHVlcyBjbCA9IGxldCBjID0gdW53cmFwX2Nsb3N1cmUgY2wgaW5cbiAgTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gY2VsbCAtPiBjZWxsLnV2X3ZhbHVlKSBjLnZtX3VwdmFsdWVzKSlcblxubGV0IGNsb3N1cmVfZW52IGNsID0gbWF0Y2ggY2wgd2l0aFxuICB8IFZtQ2xvc3VyZSBjIC0+IChtYXRjaCBjLnZtX2Nsb3N1cmVfZW52IHdpdGggU29tZSBlIC0+IEVudiBlIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IGNvZGVfYnl0ZWNvZGUgY29kZSA9IGdldF92YWwgY29kZSAoU3RyaW5nIFwidmMtYnl0ZWNvZGVcIilcbmxldCBjb2RlX2NvbnN0YW50cyBjb2RlID0gZ2V0X3ZhbCBjb2RlIChTdHJpbmcgXCJ2Yy1jb25zdGFudHNcIilcbmxldCBjb2RlX2xvY2FscyBjb2RlID0gZ2V0X3ZhbCBjb2RlIChTdHJpbmcgXCJ2Yy1sb2NhbHNcIilcblxubGV0IHZtX3NwIHYgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluIE51bWJlciAoZmxvYXRfb2ZfaW50IG0udm1fc3ApXG5sZXQgdm1fc2V0X3NwX2IgdiBzID0gbGV0IG0gPSB1bndyYXBfdm0gdiBpbiBtLnZtX3NwIDwtIHZhbF90b19pbnQgczsgTmlsXG5sZXQgdm1fc3RhY2sgdiA9IGxldCBfbSA9IHVud3JhcF92bSB2IGluIE5pbCAgKCogb3BhcXVlIOKAlCB1c2Ugdm1fcHVzaC9wb3AgKilcbmxldCB2bV9zZXRfc3RhY2tfYiB2IF9zID0gTmlsXG5sZXQgdm1fZnJhbWVzIHYgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluIExpc3QgKExpc3QubWFwIChmdW4gZiAtPiBWbUZyYW1lIGYpIG0udm1fZnJhbWVzKVxubGV0IHZtX3NldF9mcmFtZXNfYiB2IGZzID0gbGV0IG0gPSB1bndyYXBfdm0gdiBpblxuICBtLnZtX2ZyYW1lcyA8LSAobWF0Y2ggZnMgd2l0aFxuICAgIHwgTGlzdCBsIC0+IExpc3QubWFwIHVud3JhcF9mcmFtZSBsXG4gICAgfCBfIC0+IFtdKTtcbiAgTmlsXG5sZXQgdm1fZ2xvYmFsc19yZWYgdiA9IGxldCBtID0gdW53cmFwX3ZtIHYgaW4gRGljdCBtLnZtX2dsb2JhbHNcblxuKCogLS0tIEdsb2JhbCB2YXJpYWJsZSBhY2Nlc3MgLS0tICopXG5sZXQgdm1fZ2xvYmFsX2dldCB2bV92YWwgZnJhbWVfdmFsIG5hbWUgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgKCogQ2hlY2sgY2xvc3VyZSBlbnYgZmlyc3QgKG1hdGNoZXMgdm1fZ2xvYmFsX3NldCBwcmlvcml0eSkgKilcbiAgbGV0IGZvdW5kX2luX2VudiA9IG1hdGNoIGYudmZfY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgfCBTb21lIGVudiAtPlxuICAgICAgbGV0IGlkID0gaW50ZXJuIG4gaW5cbiAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZS5iaW5kaW5ncyBpZCB3aXRoXG4gICAgICAgIHwgU29tZSB2IC0+IFNvbWUgdlxuICAgICAgICB8IE5vbmUgLT4gKG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmRfZW52IHAgfCBOb25lIC0+IE5vbmUpXG4gICAgICBpbiBmaW5kX2VudiBlbnZcbiAgICB8IE5vbmUgLT4gTm9uZVxuICBpblxuICBtYXRjaCBmb3VuZF9pbl9lbnYgd2l0aFxuICB8IFNvbWUgdiAtPiB2XG4gIHwgTm9uZSAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgbS52bV9nbG9iYWxzIG4gd2l0aFxuICAgIHwgU29tZSB2IC0+IHZcbiAgICB8IE5vbmUgLT5cbiAgICAgIHRyeSBwcmltX2NhbGwgbiBbXSB3aXRoIF8gLT5cbiAgICAgIG1hdGNoICFfc3ltYm9sX3Jlc29sdmVfaG9vayB3aXRoXG4gICAgICB8IFNvbWUgaG9vayAtPlxuICAgICAgICAobWF0Y2ggaG9vayBuIHdpdGhcbiAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbikpKVxuICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuKSlcblxubGV0IHZtX2dsb2JhbF9zZXQgdm1fdmFsIGZyYW1lX3ZhbCBuYW1lIHYgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgKCogV3JpdGUgdG8gY2xvc3VyZSBlbnYgaWYgbmFtZSBleGlzdHMgdGhlcmUgKilcbiAgbGV0IHdyaXR0ZW4gPSBtYXRjaCBmLnZmX2Nsb3N1cmUudm1fY2xvc3VyZV9lbnYgd2l0aFxuICAgIHwgU29tZSBlbnYgLT5cbiAgICAgIGxldCBpZCA9IGludGVybiBuIGluXG4gICAgICBsZXQgcmVjIGZpbmRfZW52IGUgPVxuICAgICAgICBpZiBIYXNodGJsLm1lbSBlLmJpbmRpbmdzIGlkIHRoZW5cbiAgICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdjsgdHJ1ZSlcbiAgICAgICAgZWxzZSBtYXRjaCBlLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBmaW5kX2VudiBwIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgaW4gZmluZF9lbnYgZW52XG4gICAgfCBOb25lIC0+IGZhbHNlXG4gIGluXG4gIGlmIG5vdCB3cml0dGVuIHRoZW4gYmVnaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgbS52bV9nbG9iYWxzIG4gdjtcbiAgICAobWF0Y2ggIV92bV9nbG9iYWxfc2V0X2hvb2sgd2l0aCBTb21lIGYgLT4gZiBuIHYgfCBOb25lIC0+ICgpKVxuICBlbmQ7XG4gIE5pbFxuXG4oKiAtLS0gRnJhbWUgcHVzaCAtLS0gKilcbmxldCB2bV9wdXNoX2ZyYW1lIHZtX3ZhbCBjbG9zdXJlX3ZhbCBhcmdzID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBjbCA9IHVud3JhcF9jbG9zdXJlIGNsb3N1cmVfdmFsIGluXG4gIGxldCBmID0geyB2Zl9jbG9zdXJlID0gY2w7IHZmX2lwID0gMDsgdmZfYmFzZSA9IG0udm1fc3A7IHZmX2xvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGxldCBhcmdfbGlzdCA9IHRvX29jYW1sX2xpc3QgYXJncyBpblxuICBMaXN0Lml0ZXIgKGZ1biBhIC0+XG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gYTsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICApIGFyZ19saXN0O1xuICAoKiBQYWQgcmVtYWluaW5nIGxvY2FscyAqKVxuICBmb3IgXyA9IExpc3QubGVuZ3RoIGFyZ19saXN0IHRvIGNsLnZtX2NvZGUudmNfbG9jYWxzIC0gMSBkb1xuICAgIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIE5pbDsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICBkb25lO1xuICBtLnZtX2ZyYW1lcyA8LSBmIDo6IG0udm1fZnJhbWVzO1xuICBOaWxcblxuKCogLS0tIENsb3N1cmUgdHlwZSBjaGVjayAtLS0gKilcbmxldCB2bV9jbG9zdXJlX3AgdiA9IG1hdGNoIHYgd2l0aCBWbUNsb3N1cmUgXyAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCogLS0tIENsb3N1cmUgY3JlYXRpb24gKHVwdmFsdWUgY2FwdHVyZSkgLS0tICopXG5sZXQgdm1fY3JlYXRlX2Nsb3N1cmUgdm1fdmFsIGZyYW1lX3ZhbCBjb2RlX3ZhbCA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ1cHZhbHVlLWNvdW50XCIgd2l0aFxuICAgICAgICB8IFNvbWUgKEludGVnZXIgbikgLT4gblxuICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgblxuICAgICAgICB8IF8gLT4gMClcbiAgICB8IF8gLT4gMFxuICBpblxuICBsZXQgdXB2YWx1ZXMgPSBBcnJheS5pbml0IHV2X2NvdW50IChmdW4gXyAtPlxuICAgIGxldCBpc19sb2NhbCA9IGxldCB2ID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXApIGluIGYudmZfaXAgPC0gZi52Zl9pcCArIDE7IHYgaW5cbiAgICBsZXQgaW5kZXggPSBsZXQgdiA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpbiBmLnZmX2lwIDwtIGYudmZfaXAgKyAxOyB2IGluXG4gICAgaWYgaXNfbG9jYWwgPSAxIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZi52Zl9sb2NhbF9jZWxscyBpbmRleCB3aXRoXG4gICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmdcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IHsgdXZfdmFsdWUgPSBtLnZtX3N0YWNrLihmLnZmX2Jhc2UgKyBpbmRleCkgfSBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgZi52Zl9sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICBjXG4gICAgZW5kIGVsc2VcbiAgICAgIGYudmZfY2xvc3VyZS52bV91cHZhbHVlcy4oaW5kZXgpXG4gICkgaW5cbiAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgVm1DbG9zdXJlIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gdXB2YWx1ZXM7IHZtX25hbWUgPSBOb25lO1xuICAgICAgICAgICAgICB2bV9lbnZfcmVmID0gbS52bV9nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGYudmZfY2xvc3VyZS52bV9jbG9zdXJlX2VudiB9XG5cbigqIC0tLSBKSVQgc2VudGluZWwgLS0tICopXG5sZXQgX2ppdF9mYWlsZWRfc2VudGluZWwgPSB7XG4gIHZtX2NvZGUgPSB7IHZjX2FyaXR5ID0gLTE7IHZjX3Jlc3RfYXJpdHkgPSAtMTsgdmNfbG9jYWxzID0gMDsgdmNfYnl0ZWNvZGUgPSBbfHxdOyB2Y19jb25zdGFudHMgPSBbfHxdO1xuICAgICAgICAgICAgICB2Y19ieXRlY29kZV9saXN0ID0gTm9uZTsgdmNfY29uc3RhbnRzX2xpc3QgPSBOb25lIH07XG4gIHZtX3VwdmFsdWVzID0gW3x8XTsgdm1fbmFtZSA9IFNvbWUgXCJfX2ppdF9mYWlsZWRfX1wiOyB2bV9lbnZfcmVmID0gSGFzaHRibC5jcmVhdGUgMDsgdm1fY2xvc3VyZV9lbnYgPSBOb25lXG59XG5sZXQgX2lzX2ppdF9mYWlsZWQgY2wgPSBjbC52bV9jb2RlLnZjX2FyaXR5ID0gLTFcblxuKCogLS0tIExhbWJkYSBhY2Nlc3NvcnMgLS0tICopXG5sZXQgaXNfbGFtYmRhIHYgPSBtYXRjaCB2IHdpdGggTGFtYmRhIF8gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlXG5sZXQgbGFtYmRhX2NvbXBpbGVkIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBMYW1iZGEgbCAtPiAobWF0Y2ggbC5sX2NvbXBpbGVkIHdpdGggU29tZSBjIC0+IFZtQ2xvc3VyZSBjIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcbmxldCBsYW1iZGFfc2V0X2NvbXBpbGVkX2IgdiBjID0gbWF0Y2ggdiB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGMgd2l0aFxuICAgIHwgVm1DbG9zdXJlIGNsIC0+IGwubF9jb21waWxlZCA8LSBTb21lIGNsOyBOaWxcbiAgICB8IFN0cmluZyBcImppdC1mYWlsZWRcIiAtPiBsLmxfY29tcGlsZWQgPC0gU29tZSBfaml0X2ZhaWxlZF9zZW50aW5lbDsgTmlsXG4gICAgfCBfIC0+IGwubF9jb21waWxlZCA8LSBOb25lOyBOaWwpXG4gIHwgXyAtPiBOaWxcbmxldCBsYW1iZGFfbmFtZSB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxuKCogLS0tIENFSyBjYWxsIHdpdGggc3VzcGVuc2lvbiBhd2FyZW5lc3MgLS0tICopXG5sZXQgY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzID1cbiAgbGV0IGEgPSB0b19vY2FtbF9saXN0IGFyZ3MgaW5cbiAgbGV0IHN0YXRlID0gU3hfcmVmLmNvbnRpbnVlX3dpdGhfY2FsbCBmIChMaXN0IGEpIChFbnYgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSkgKExpc3QgYSkgKExpc3QgW10pIGluXG4gIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlIGluXG4gIG1hdGNoIGdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICAgIG0udm1fcGVuZGluZ19jZWsgPC0gU29tZSBmaW5hbDtcbiAgICByYWlzZSAoU3hfdm0uVm1TdXNwZW5kZWQgKGdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIFN4X3ZtLmNyZWF0ZSBtLnZtX2dsb2JhbHMpKVxuICB8IF8gLT4gU3hfcmVmLmNla192YWx1ZSBmaW5hbFxuXG4oKiAtLS0gRW52IHdhbGtpbmcgKGZvciBnbG9iYWwgdmFyaWFibGUgcmVzb2x1dGlvbikgLS0tICopXG5sZXQgcmVjIGVudl93YWxrIGVudiBuYW1lID1cbiAgbWF0Y2ggZW52IHdpdGhcbiAgfCBFbnYgZSAtPlxuICAgIGxldCBpZCA9IGludGVybiAodmFsdWVfdG9fc3RyaW5nIG5hbWUpIGluXG4gICAgbGV0IHJlYyBmaW5kIGUgPVxuICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBlLmJpbmRpbmdzIGlkIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgIHwgTm9uZSAtPiAobWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZCBwIHwgTm9uZSAtPiBOaWwpXG4gICAgaW4gZmluZCBlXG4gIHwgTmlsIC0+IE5pbFxuICB8IF8gLT4gTmlsXG5cbmxldCBlbnZfd2Fsa19zZXRfYiBlbnYgbmFtZSB2YWx1ZSA9XG4gIG1hdGNoIGVudiB3aXRoXG4gIHwgRW52IGUgLT5cbiAgICBsZXQgaWQgPSBpbnRlcm4gKHZhbHVlX3RvX3N0cmluZyBuYW1lKSBpblxuICAgIGxldCByZWMgZmluZCBlID1cbiAgICAgIGlmIEhhc2h0YmwubWVtIGUuYmluZGluZ3MgaWQgdGhlblxuICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdmFsdWU7IHRydWUpXG4gICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmQgcCB8IE5vbmUgLT4gZmFsc2VcbiAgICBpblxuICAgIGlmIGZpbmQgZSB0aGVuIE5pbCBlbHNlIE5pbFxuICB8IF8gLT4gTmlsXG5cbigqIC0tLSBBY3RpdmUgVk0gdHJhY2tpbmcgKG1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlKSAtLS0gKilcbmxldCBfYWN0aXZlX3ZtIDogdm1fbWFjaGluZSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogRm9yd2FyZCByZWYg4oCUIHJlc29sdmVkIGFmdGVyIHRyYW5zcGlsZWQgbGV0IHJlYyBibG9jayAqKVxubGV0IF92bV9ydW5fZm4gOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gLT4gTmlsKVxubGV0IF92bV9jYWxsX2ZuIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biBfIF8gXyAtPiBOaWwpXG5cbigqIHZtLWNhbGwtY2xvc3VyZTogY3JlYXRlcyBmcmVzaCBWTSwgcnVucyBjbG9zdXJlLCByZXR1cm5zIHJlc3VsdCAqKVxubGV0IHZtX2NhbGxfY2xvc3VyZSBjbG9zdXJlX3ZhbCBhcmdzIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB1bndyYXBfY2xvc3VyZSBjbG9zdXJlX3ZhbCBpblxuICBsZXQgcHJldl92bSA9ICFfYWN0aXZlX3ZtIGluXG4gIGxldCBnID0gbWF0Y2ggZ2xvYmFscyB3aXRoIERpY3QgZCAtPiBkIHwgXyAtPiBIYXNodGJsLmNyZWF0ZSAwIGluXG4gIGxldCBtID0geyB2bV9zdGFjayA9IEFycmF5Lm1ha2UgNDA5NiBOaWw7IHZtX3NwID0gMDtcbiAgICAgICAgICAgIHZtX2ZyYW1lcyA9IFtdOyB2bV9nbG9iYWxzID0gZzsgdm1fcGVuZGluZ19jZWsgPSBOb25lIH0gaW5cbiAgbGV0IHZtX3ZhbCA9IFZtTWFjaGluZSBtIGluXG4gIF9hY3RpdmVfdm0gOj0gU29tZSBtO1xuICBpZ25vcmUgKHZtX3B1c2hfZnJhbWUgdm1fdmFsIGNsb3N1cmVfdmFsIGFyZ3MpO1xuICAodHJ5IGlnbm9yZSAoIV92bV9ydW5fZm4gdm1fdmFsKSB3aXRoIGUgLT4gX2FjdGl2ZV92bSA6PSBwcmV2X3ZtOyByYWlzZSBlKTtcbiAgX2FjdGl2ZV92bSA6PSBwcmV2X3ZtO1xuICB2bV9wb3Agdm1fdmFsXG5cbigqIC0tLSBKSVQgZGlzcGF0Y2ggKHBsYXRmb3JtLXNwZWNpZmljKSAtLS0gKilcbmxldCB0cnlfaml0X2NhbGwgdm1fdmFsIGYgYXJncyA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBtYXRjaCBmIHdpdGhcbiAgfCBMYW1iZGEgbCAtPlxuICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKF9pc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICh0cnkgdm1fcHVzaCB2bV92YWwgKHZtX2NhbGxfY2xvc3VyZSAoVm1DbG9zdXJlIGNsKSBhcmdzIChEaWN0IGNsLnZtX2Vudl9yZWYpKVxuICAgICAgICB3aXRoIF8gLT4gdm1fcHVzaCB2bV92YWwgKGNla19jYWxsX29yX3N1c3BlbmQgdm1fdmFsIGYgYXJncykpXG4gICAgIHwgU29tZSBfIC0+XG4gICAgICAgdm1fcHVzaCB2bV92YWwgKGNla19jYWxsX29yX3N1c3BlbmQgdm1fdmFsIGYgYXJncylcbiAgICAgfCBOb25lIC0+XG4gICAgICAgaWYgbC5sX25hbWUgPD4gTm9uZSB0aGVuIGJlZ2luXG4gICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSBfaml0X2ZhaWxlZF9zZW50aW5lbDtcbiAgICAgICAgIG1hdGNoICFTeF92bS5qaXRfY29tcGlsZV9yZWYgbCBtLnZtX2dsb2JhbHMgd2l0aFxuICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGNsO1xuICAgICAgICAgICAodHJ5IHZtX3B1c2ggdm1fdmFsICh2bV9jYWxsX2Nsb3N1cmUgKFZtQ2xvc3VyZSBjbCkgYXJncyAoRGljdCBjbC52bV9lbnZfcmVmKSlcbiAgICAgICAgICAgIHdpdGggXyAtPiB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKSlcbiAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKVxuICAgICAgIGVuZCBlbHNlXG4gICAgICAgICB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKSlcbiAgfCBfIC0+IHZtX3B1c2ggdm1fdmFsIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MpXG5cbigqIC0tLSBDb2xsZWN0aW9uIGhlbHBlcnMgLS0tICopXG5sZXQgY29sbGVjdF9uX2Zyb21fc3RhY2sgdm1fdmFsIG4gPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IGNvdW50ID0gdmFsX3RvX2ludCBuIGluXG4gIGxldCByZXN1bHQgPSByZWYgW10gaW5cbiAgZm9yIF8gPSAxIHRvIGNvdW50IGRvXG4gICAgbS52bV9zcCA8LSBtLnZtX3NwIC0gMTtcbiAgICByZXN1bHQgOj0gbS52bV9zdGFjay4obS52bV9zcCkgOjogIXJlc3VsdFxuICBkb25lO1xuICBMaXN0ICFyZXN1bHRcblxubGV0IGNvbGxlY3Rfbl9wYWlycyB2bV92YWwgbiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgY291bnQgPSB2YWxfdG9faW50IG4gaW5cbiAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICAgIGxldCB2ID0gbS52bV9zdGFjay4obS52bV9zcCkgaW5cbiAgICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICAgIGxldCBrID0gdmFsdWVfdG9fc3RyaW5nIG0udm1fc3RhY2suKG0udm1fc3ApIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGQgayB2XG4gIGRvbmU7XG4gIERpY3QgZFxuXG5sZXQgcGFkX25fbmlscyB2bV92YWwgbiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgY291bnQgPSB2YWxfdG9faW50IG4gaW5cbiAgZm9yIF8gPSAxIHRvIGNvdW50IGRvXG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gTmlsO1xuICAgIG0udm1fc3AgPC0gbS52bV9zcCArIDFcbiAgZG9uZTtcbiAgTmlsXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSBsaWIvdm0uc3ggPT09ICopXG4oKiB2bS1jYWxsICopXG5sZXQgcmVjIHZtX2NhbGwgdm0gZiBhcmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKHZtX2Nsb3N1cmVfcCAoZikpKSB0aGVuICh2bV9wdXNoX2ZyYW1lICh2bSkgKGYpIChhcmdzKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHRyeV9qaXRfY2FsbCAodm0pIChmKSAoYXJncykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZikpOyAoU3RyaW5nIFwiY29tcG9uZW50XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmKSk7IChTdHJpbmcgXCJpc2xhbmRcIildKSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKGNla19jYWxsX29yX3N1c3BlbmQgKHZtKSAoZikgKGFyZ3MpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX2NhbGxhYmxlIChmKSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHN4X2FwcGx5IGYgYXJncykpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNOiBub3QgY2FsbGFibGU6IFwiKTsgKHR5cGVfb2YgKGYpKV0pKSkpKSkpKSlcblxuKCogdm0tcmVzb2x2ZS1oby1mb3JtICopXG5hbmQgdm1fcmVzb2x2ZV9ob19mb3JtIHZtIG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKExpc3QuaXRlciAoZnVuIHggLT4gaWdub3JlICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCk7IE5pbCkpIGYgY29sbCB8IF8gLT4gTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGNvbGxdIC0+IChmdW4gZiBjb2xsIC0+IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFt4XSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBjb2xsXSAtPiAoZnVuIGYgY29sbCAtPiAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB4IC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFtpOyB4XSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKExpc3QgKExpc3QuZmlsdGVyIChmdW4geCAtPiBzeF90cnV0aHkgKCh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbeF0pKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInJlZHVjZVwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBpbml0OyBjb2xsXSAtPiAoZnVuIGYgaW5pdCBjb2xsIC0+IChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+ICh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbYWNjOyB4XSkpKSkgaW5pdCAoc3hfdG9fbGlzdCBjb2xsKSkpIGYgaW5pdCBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzb21lXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGNvbGxdIC0+IChmdW4gZiBjb2xsIC0+IChCb29sIChMaXN0LmV4aXN0cyAoZnVuIHggLT4gc3hfdHJ1dGh5ICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHggLT4gc3hfdHJ1dGh5ICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNIHVuZGVmaW5lZDogXCIpOyBuYW1lXSkpKSkpKSkpKSkpKVxuXG4oKiB2bS1jYWxsLWV4dGVybmFsICopXG5hbmQgdm1fY2FsbF9leHRlcm5hbCB2bSBmIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgodm1fY2xvc3VyZV9wIChmKSkpIHRoZW4gKHZtX2NhbGxfY2xvc3VyZSAoZikgKGFyZ3MpICgodm1fZ2xvYmFsc19yZWYgKHZtKSkpKSBlbHNlIChjZWtfY2FsbCAoZikgKGFyZ3MpKSlcblxuKCogdm0tcnVuICopXG5hbmQgdm1fcnVuIHZtID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKFN0cmluZyBcIkV4ZWN1dGUgYnl0ZWNvZGUgdW50aWwgYWxsIGZyYW1lcyBhcmUgY29uc3VtZWQuXCIpKSBpbiAobGV0IHJlYyBsb29wID0gKGZ1biAoKSAtPiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wICgodm1fZnJhbWVzICh2bSkpKSkpKSkpKSB0aGVuIChsZXQgZnJhbWUgPSAoZmlyc3QgKCh2bV9mcmFtZXMgKHZtKSkpKSBpbiBsZXQgcmVzdF9mcmFtZXMgPSAocmVzdCAoKHZtX2ZyYW1lcyAodm0pKSkpIGluIChsZXQgYmMgPSAoY29kZV9ieXRlY29kZSAoKGNsb3N1cmVfY29kZSAoKGZyYW1lX2Nsb3N1cmUgKGZyYW1lKSkpKSkpIGluIGxldCBjb25zdHMgPSAoY29kZV9jb25zdGFudHMgKChjbG9zdXJlX2NvZGUgKChmcmFtZV9jbG9zdXJlIChmcmFtZSkpKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGZyYW1lX2lwIChmcmFtZSkpOyAobGVuIChiYykpXSkpIHRoZW4gKHZtX3NldF9mcmFtZXNfYiAodm0pICgoTGlzdCBbXSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKCh2bV9zdGVwICh2bSkgKGZyYW1lKSAocmVzdF9mcmFtZXMpIChiYykgKGNvbnN0cykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsICgoZ2V0ICgodm1fZ2xvYmFsc19yZWYgKHZtKSkpICgoU3RyaW5nIFwiX19pb19yZXF1ZXN0XCIpKSkpKSkgdGhlbiAobG9vcCAoKSkgZWxzZSBOaWwpKSkpKSBlbHNlIE5pbCkpIGluIChsb29wICgpKSkpXG5cbigqIHZtLXN0ZXAgKilcbmFuZCB2bV9zdGVwIHZtIGZyYW1lIHJlc3RfZnJhbWVzIGJjIGNvbnN0cyA9XG4gIChsZXQgb3AgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gKHZtX3B1c2ggKHZtKSAoKG50aCAoY29uc3RzKSAoaWR4KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAyLjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAzLjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKEJvb2wgdHJ1ZSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDQuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgoQm9vbCBmYWxzZSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDUuMCldKSkgdGhlbiAodm1fcG9wICh2bSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNi4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKCh2bV9wZWVrICh2bSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNi4wKV0pKSB0aGVuIChsZXQgc2xvdCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluICh2bV9wdXNoICh2bSkgKChmcmFtZV9sb2NhbF9nZXQgKHZtKSAoZnJhbWUpIChzbG90KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNy4wKV0pKSB0aGVuIChsZXQgc2xvdCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIChmcmFtZV9sb2NhbF9zZXQgKHZtKSAoZnJhbWUpIChzbG90KSAoKHZtX3BlZWsgKHZtKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxOC4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGZyYW1lX3VwdmFsdWVfZ2V0IChmcmFtZSkgKGlkeCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTkuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIChmcmFtZV91cHZhbHVlX3NldCAoZnJhbWUpIChpZHgpICgodm1fcGVlayAodm0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDIwLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAodm1fcHVzaCAodm0pICgodm1fZ2xvYmFsX2dldCAodm0pIChmcmFtZSkgKG5hbWUpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDIxLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAodm1fZ2xvYmFsX3NldCAodm0pIChmcmFtZSkgKG5hbWUpICgodm1fcGVlayAodm0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDMyLjApXSkpIHRoZW4gKGxldCBvZmZzZXQgPSAoZnJhbWVfcmVhZF9pMTYgKGZyYW1lKSkgaW4gKGZyYW1lX3NldF9pcF9iIChmcmFtZSkgKChwcmltX2NhbGwgXCIrXCIgWyhmcmFtZV9pcCAoZnJhbWUpKTsgb2Zmc2V0XSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAzMy4wKV0pKSB0aGVuIChsZXQgb2Zmc2V0ID0gKGZyYW1lX3JlYWRfaTE2IChmcmFtZSkpIGluIGxldCB2ID0gKHZtX3BvcCAodm0pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHYpKSkpKSB0aGVuIChmcmFtZV9zZXRfaXBfYiAoZnJhbWUpICgocHJpbV9jYWxsIFwiK1wiIFsoZnJhbWVfaXAgKGZyYW1lKSk7IG9mZnNldF0pKSkgZWxzZSBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDM0LjApXSkpIHRoZW4gKGxldCBvZmZzZXQgPSAoZnJhbWVfcmVhZF9pMTYgKGZyYW1lKSkgaW4gbGV0IHYgPSAodm1fcG9wICh2bSkpIGluIChpZiBzeF90cnV0aHkgKHYpIHRoZW4gKGZyYW1lX3NldF9pcF9iIChmcmFtZSkgKChwcmltX2NhbGwgXCIrXCIgWyhmcmFtZV9pcCAoZnJhbWUpKTsgb2Zmc2V0XSkpKSBlbHNlIE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNDguMCldKSkgdGhlbiAobGV0IGFyZ2MgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gbGV0IGYgPSAodm1fcG9wICh2bSkpIGluICh2bV9jYWxsICh2bSkgKGYpIChhcmdzKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNDkuMCldKSkgdGhlbiAobGV0IGFyZ2MgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gbGV0IGYgPSAodm1fcG9wICh2bSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2bV9zZXRfZnJhbWVzX2IgKHZtKSAocmVzdF9mcmFtZXMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZtX3NldF9zcF9iICh2bSkgKChmcmFtZV9iYXNlIChmcmFtZSkpKSkpIGluICh2bV9jYWxsICh2bSkgKGYpIChhcmdzKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA1MC4wKV0pKSB0aGVuIChsZXQgcmVzdWx0JyA9ICh2bV9wb3AgKHZtKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZtX3NldF9mcmFtZXNfYiAodm0pIChyZXN0X2ZyYW1lcykpKSBpbiAobGV0ICgpID0gaWdub3JlICgodm1fc2V0X3NwX2IgKHZtKSAoKGZyYW1lX2Jhc2UgKGZyYW1lKSkpKSkgaW4gKHZtX3B1c2ggKHZtKSAocmVzdWx0JykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNTEuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgY29kZV92YWwgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAobGV0IGNsID0gKHZtX2NyZWF0ZV9jbG9zdXJlICh2bSkgKGZyYW1lKSAoY29kZV92YWwpKSBpbiAodm1fcHVzaCAodm0pIChjbCkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA1Mi4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBhcmdjID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGNhbGxfcHJpbWl0aXZlIChuYW1lKSAoYXJncykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNjQuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBpdGVtcyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChjb3VudCkpIGluICh2bV9wdXNoICh2bSkgKGl0ZW1zKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNjUuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBkID0gKGNvbGxlY3Rfbl9wYWlycyAodm0pIChjb3VudCkpIGluICh2bV9wdXNoICh2bSkgKGQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNDQuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gbGV0IHBhcnRzID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGNvdW50KSkgaW4gKHZtX3B1c2ggKHZtKSAoKHN4X2FwcGx5IHN0ciBwYXJ0cykpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxMjguMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgbmFtZSA9IChudGggKGNvbnN0cykgKGlkeCkpIGluIChzeF9kaWN0X3NldF9iICh2bV9nbG9iYWxzX3JlZiAodm0pKSBuYW1lICh2bV9wZWVrICh2bSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjAuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiK1wiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjEuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiLVwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjIuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiKlwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjMuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiL1wiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjQuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPVwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjUuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPFwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjYuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPlwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjcuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgoQm9vbCAobm90IChzeF90cnV0aHkgKCh2bV9wb3AgKHZtKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjguMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgobGVuICgodm1fcG9wICh2bSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2OS4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChmaXJzdCAoKHZtX3BvcCAodm0pKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzAuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgocmVzdCAoKHZtX3BvcCAodm0pKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzEuMCldKSkgdGhlbiAobGV0IG4gPSAodm1fcG9wICh2bSkpIGluIGxldCBjb2xsID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgobnRoIChjb2xsKSAobikpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTcyLjApXSkpIHRoZW4gKGxldCBjb2xsID0gKHZtX3BvcCAodm0pKSBpbiBsZXQgeCA9ICh2bV9wb3AgKHZtKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGNvbnMgKHgpIChjb2xsKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzMuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiLVwiIFsoTnVtYmVyIDAuMCk7ICh2bV9wb3AgKHZtKSldKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTc0LjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHByaW1fY2FsbCBcImluY1wiIFsodm1fcG9wICh2bSkpXSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3NS4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCJkZWNcIiBbKHZtX3BvcCAodm0pKV0pKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxMTIuMCldKSkgdGhlbiAobGV0IHJlcXVlc3QgPSAodm1fcG9wICh2bSkpIGluIChzeF9kaWN0X3NldF9iICh2bV9nbG9iYWxzX3JlZiAodm0pKSAoU3RyaW5nIFwiX19pb19yZXF1ZXN0XCIpIHJlcXVlc3QpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNOiB1bmtub3duIG9wY29kZSBcIik7IG9wXSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpXG5cblxuXG4oKiBXaXJlIGZvcndhcmQgcmVmZXJlbmNlcyB0byB0cmFuc3BpbGVkIGZ1bmN0aW9ucyAqKVxubGV0ICgpID0gX3ZtX3J1bl9mbiA6PSB2bV9ydW5cbmxldCAoKSA9IF92bV9jYWxsX2ZuIDo9IHZtX2NhbGxcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUHVibGljIEFQSSDigJQgbWF0Y2hlcyBTeF92bSBpbnRlcmZhY2UgZm9yIGRyb3AtaW4gcmVwbGFjZW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIEJ1aWxkIGEgc3VzcGVuc2lvbiBkaWN0IGZyb20gX19pb19yZXF1ZXN0IGluIGdsb2JhbHMuICopXG5sZXQgY2hlY2tfaW9fc3VzcGVuc2lvbiBnbG9iYWxzIHZtX3ZhbCA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFscyBcIl9faW9fcmVxdWVzdFwiIHdpdGhcbiAgfCBTb21lIHJlcSB3aGVuIHN4X3RydXRoeSByZXEgLT5cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInN1c3BlbmRlZFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwib3BcIiAoU3RyaW5nIFwiaW1wb3J0XCIpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVxdWVzdFwiIHJlcTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZtXCIgdm1fdmFsO1xuICAgIFNvbWUgKERpY3QgZClcbiAgfCBfIC0+IE5vbmVcblxuKCoqIEV4ZWN1dGUgYSBjb21waWxlZCBtb2R1bGUg4oCUIGVudHJ5IHBvaW50IGZvciBsb2FkLXN4YmMsIGNvbXBpbGUtYmxvYi5cbiAgICBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUsIG9yIGEgc3VzcGVuc2lvbiBkaWN0IGlmIE9QX1BFUkZPUk0gZmlyZWQuICopXG5sZXQgZXhlY3V0ZV9tb2R1bGUgKGNvZGUgOiB2bV9jb2RlKSAoZ2xvYmFscyA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQpID1cbiAgbGV0IGNsID0geyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcIm1vZHVsZVwiO1xuICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgbSA9IHsgdm1fc3RhY2sgPSBBcnJheS5tYWtlIDQwOTYgTmlsOyB2bV9zcCA9IDA7XG4gICAgICAgICAgICB2bV9mcmFtZXMgPSBbXTsgdm1fZ2xvYmFscyA9IGdsb2JhbHM7IHZtX3BlbmRpbmdfY2VrID0gTm9uZSB9IGluXG4gIGxldCB2bV92YWwgPSBWbU1hY2hpbmUgbSBpblxuICBsZXQgZnJhbWUgPSB7IHZmX2Nsb3N1cmUgPSBjbDsgdmZfaXAgPSAwOyB2Zl9iYXNlID0gMDsgdmZfbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkb1xuICAgIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIE5pbDsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICBkb25lO1xuICBtLnZtX2ZyYW1lcyA8LSBbZnJhbWVdO1xuICBpZ25vcmUgKHZtX3J1biB2bV92YWwpO1xuICBtYXRjaCBjaGVja19pb19zdXNwZW5zaW9uIGdsb2JhbHMgdm1fdmFsIHdpdGhcbiAgfCBTb21lIHN1c3BlbnNpb24gLT4gc3VzcGVuc2lvblxuICB8IE5vbmUgLT4gdm1fcG9wIHZtX3ZhbFxuXG4oKiogUmVzdW1lIGEgc3VzcGVuZGVkIG1vZHVsZS4gQ2xlYXJzIF9faW9fcmVxdWVzdCwgcHVzaGVzIG5pbCwgcmUtcnVucy4gKilcbmxldCByZXN1bWVfbW9kdWxlIChzdXNwZW5kZWQgOiB2YWx1ZSkgPVxuICBtYXRjaCBzdXNwZW5kZWQgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIGxldCB2bV92YWwgPSBIYXNodGJsLmZpbmQgZCBcInZtXCIgaW5cbiAgICBsZXQgZ2xvYmFscyA9IG1hdGNoIHZtX3ZhbCB3aXRoXG4gICAgICB8IFZtTWFjaGluZSBtIC0+IG0udm1fZ2xvYmFsc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVzdW1lX21vZHVsZTogZXhwZWN0ZWQgVm1NYWNoaW5lXCIpIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbHMgXCJfX2lvX3JlcXVlc3RcIiBOaWw7XG4gICAgaWdub3JlICh2bV9wdXNoIHZtX3ZhbCBOaWwpO1xuICAgIGlnbm9yZSAodm1fcnVuIHZtX3ZhbCk7XG4gICAgKG1hdGNoIGNoZWNrX2lvX3N1c3BlbnNpb24gZ2xvYmFscyB2bV92YWwgd2l0aFxuICAgICB8IFNvbWUgc3VzcGVuc2lvbiAtPiBzdXNwZW5zaW9uXG4gICAgIHwgTm9uZSAtPiB2bV9wb3Agdm1fdmFsKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXN1bWVfbW9kdWxlOiBleHBlY3RlZCBzdXNwZW5zaW9uIGRpY3RcIilcblxuKCoqIEV4ZWN1dGUgYSBjbG9zdXJlIHdpdGggYXJncyDigJQgZW50cnkgcG9pbnQgZm9yIEpJVCBMYW1iZGEgY2FsbHMuICopXG5sZXQgY2FsbF9jbG9zdXJlIChjbCA6IHZtX2Nsb3N1cmUpIChhcmdzIDogdmFsdWUgbGlzdCkgKGdsb2JhbHMgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50KSA9XG4gIHZtX2NhbGxfY2xvc3VyZSAoVm1DbG9zdXJlIGNsKSAoTGlzdCBhcmdzKSAoRGljdCBnbG9iYWxzKVxuXG4oKiogUmVleHBvcnQgY29kZV9mcm9tX3ZhbHVlIGZvciBjYWxsZXJzICopXG5sZXQgY29kZV9mcm9tX3ZhbHVlID0gY29kZV9mcm9tX3ZhbHVlXG5cbigqKiBSZWV4cG9ydCBqaXQgcmVmcyAqKVxubGV0IGppdF9jb21waWxlX3JlZiA9IFN4X3ZtLmppdF9jb21waWxlX3JlZlxubGV0IGppdF9mYWlsZWRfc2VudGluZWwgPSBfaml0X2ZhaWxlZF9zZW50aW5lbFxubGV0IGlzX2ppdF9mYWlsZWQgPSBfaXNfaml0X2ZhaWxlZFxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN4X3R5cGVzIiwiU3hfcnVudGltZSIsIlN0ZGxpYl9MaXN0IiwiU3hfdm0iLCJTeF9yZWYiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWIiLCJjZWtfY2FsbCIsImV2YWxfZXhwciIsInRyYW1wb2xpbmUiLCJ2IiwiZW52IiwiZXhwciIsInRvX29jYW1sX2xpc3QiLCJsIiwic3RyIiwiYXJncyIsImNhbGxfcHJpbWl0aXZlIiwibmFtZSIsIm4iLCJ1bndyYXBfdm0iLCJtIiwidW53cmFwX2ZyYW1lIiwidW53cmFwX2Nsb3N1cmUiLCJjIiwibWFrZV91dl9jZWxsIiwidXZfZ2V0IiwidXZfc2V0IiwibWFrZV91cHZhbHVlX2NlbGwiLCJwYXJhbSIsInV2X3NldF9iIiwiY29kZV9mcm9tX3ZhbHVlIiwibWFrZV92bV9jb2RlIiwiYXJpdHkiLCJsb2NhbHMiLCJieXRlY29kZSIsImNvbnN0YW50cyIsImQiLCJtYWtlX3ZtX2Nsb3N1cmUiLCJjb2RlIiwidXB2YWx1ZXMiLCJnbG9iYWxzIiwiY2xvc3VyZV9lbnYiLCJ1diIsImUiLCJzIiwibWFrZV92bV9mcmFtZSIsImNsb3N1cmUiLCJiYXNlIiwiY2wiLCJtYWtlX3ZtIiwiZyIsInZtX3B1c2giLCJ2bV92YWwiLCJucyIsInZtX3BvcCIsInZtX3BlZWsiLCJmcmFtZV9yZWFkX3U4IiwiZnJhbWVfdmFsIiwiZnJhbWVfcmVhZF91MTYiLCJsbyIsImhpIiwiZnJhbWVfcmVhZF9pMTYiLCJmcmFtZV9sb2NhbF9nZXQiLCJzbG90IiwiaWR4IiwibWF0Y2giLCJjZWxsIiwiZnJhbWVfbG9jYWxfc2V0IiwiZnJhbWVfdXB2YWx1ZV9nZXQiLCJmcmFtZV91cHZhbHVlX3NldCIsImZyYW1lX2lwIiwiZnIiLCJmcmFtZV9zZXRfaXBfYiIsImZyYW1lX2Jhc2UiLCJmcmFtZV9jbG9zdXJlIiwiY3N0X3ZjX2J5dGVjb2RlIiwiY3N0X3ZjX2NvbnN0YW50cyIsImNzdF92Y19sb2NhbHMiLCJjbG9zdXJlX2NvZGUiLCJpIiwiY2xvc3VyZV91cHZhbHVlcyIsImNvZGVfYnl0ZWNvZGUiLCJjb2RlX2NvbnN0YW50cyIsImNvZGVfbG9jYWxzIiwidm1fc3AiLCJ2bV9zZXRfc3BfYiIsInZtX3N0YWNrIiwidm1fc2V0X3N0YWNrX2IiLCJ2bV9mcmFtZXMiLCJ2bV9zZXRfZnJhbWVzX2IiLCJmcyIsInZtX2dsb2JhbHNfcmVmIiwiY3N0X1ZNX3VuZGVmaW5lZCIsInZtX2dsb2JhbF9nZXQiLCJpZCIsImZvdW5kX2luX2VudiIsInAiLCJleG4iLCJob29rIiwidm1fZ2xvYmFsX3NldCIsIndyaXR0ZW4iLCJ2bV9wdXNoX2ZyYW1lIiwiY2xvc3VyZV92YWwiLCJhcmdfbGlzdCIsImEiLCJmb3IkIiwidm1fY2xvc3VyZV9wIiwidm1fY3JlYXRlX2Nsb3N1cmUiLCJjb2RlX3ZhbCIsInV2X2NvdW50IiwiaXNfbG9jYWwiLCJpbmRleCIsImV4aXN0aW5nIiwiaml0X2ZhaWxlZF9zZW50aW5lbCIsImlzX2ppdF9mYWlsZWQiLCJpc19sYW1iZGEiLCJsYW1iZGFfY29tcGlsZWQiLCJsYW1iZGFfc2V0X2NvbXBpbGVkX2IiLCJsYW1iZGFfbmFtZSIsImNzdF9yZXF1ZXN0IiwiY2VrX2NhbGxfb3Jfc3VzcGVuZCIsInN0YXRlIiwiZmluYWwiLCJlbnZfd2FsayIsImVudl93YWxrX3NldF9iIiwidmFsdWUiLCJ2bV9ydW5fZm4iLCJ2bV9jYWxsX2ZuIiwiYWN0aXZlX3ZtIiwidm1fY2FsbF9jbG9zdXJlIiwicHJldl92bSIsInRyeV9qaXRfY2FsbCIsImNvbGxlY3Rfbl9mcm9tX3N0YWNrIiwiY291bnQiLCJyZXN1bHQiLCJjb2xsZWN0X25fcGFpcnMiLCJrIiwicGFkX25fbmlscyIsImNzdCIsInZtX2NhbGwiLCJ2bSIsIm9yIiwidm1fcmVzb2x2ZV9ob19mb3JtIiwiY29sbCIsIngiLCJpbml0IiwiYWNjIiwidm1fY2FsbF9leHRlcm5hbCIsImNzdF9pb19yZXF1ZXN0Iiwidm1fcnVuIiwiZnJhbWUiLCJyZXN0X2ZyYW1lcyIsImJjIiwiY29uc3RzIiwidm1fc3RlcCIsIm9wIiwib2Zmc2V0IiwiYXJnYyIsIml0ZW1zIiwicGFydHMiLCJiIiwicmVxdWVzdCIsImNzdF92bSIsImNoZWNrX2lvX3N1c3BlbnNpb24iLCJyZXEiLCJleGVjdXRlX21vZHVsZSIsInN1c3BlbnNpb24iLCJyZXN1bWVfbW9kdWxlIiwic3VzcGVuZGVkIiwiY2FsbF9jbG9zdXJlIiwiaml0X2NvbXBpbGVfcmVmIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxX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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDFTcEYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3MTY1OCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcmVuZGVyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogc3hfcmVuZGVyLm1sIOKAlCBBdXRvLWdlbmVyYXRlZCBmcm9tIHNwZWMvcmVuZGVyLnN4ICsgd2ViL2FkYXB0ZXItaHRtbC5zeCAqKVxuKCogRG8gbm90IGVkaXQg4oCUIHJlZ2VuZXJhdGUgd2l0aDogcHl0aG9uMyBob3N0cy9vY2FtbC9ib290c3RyYXBfcmVuZGVyLnB5ICopXG5cbltAQEB3YXJuaW5nIFwiLTI2LTI3XCJdXG5cbm9wZW4gU3hfdHlwZXNcbm9wZW4gU3hfcnVudGltZVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQbGF0Zm9ybSBiaW5kaW5ncyDigJQgbmF0aXZlIE9DYW1sIGZvciBwZXJmb3JtYW5jZSBhbmQgdHlwZSBhY2Nlc3MgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBldmFsX2V4cHIgZXhwciBlbnYgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52XG5sZXQgY29uZF9zY2hlbWVfcCA9IFN4X3JlZi5jb25kX3NjaGVtZV9wXG5cbigqIFByaW1pdGl2ZSB3cmFwcGVycyBuZWVkZWQgYXMgZGlyZWN0IE9DYW1sIGZ1bmN0aW9ucyAqKVxubGV0IHJhd19odG1sX2NvbnRlbnQgdiA9IG1hdGNoIHYgd2l0aCBSYXdIVE1MIHMgLT4gU3RyaW5nIHMgfCBfIC0+IFN0cmluZyBcIlwiXG5sZXQgbWFrZV9yYXdfaHRtbCB2ID0gbWF0Y2ggdiB3aXRoIFN0cmluZyBzIC0+IFJhd0hUTUwgcyB8IF8gLT4gTmlsXG5sZXQgc2NvcGVfZW1pdCB2MSB2MiA9IHByaW1fY2FsbCBcInNjb3BlLWVtaXQhXCIgW3YxOyB2Ml1cbmxldCBpbml0IHYgPSBwcmltX2NhbGwgXCJpbml0XCIgW3ZdXG5sZXQgZGljdF9oYXMgYSBiID0gcHJpbV9jYWxsIFwiZGljdC1oYXM/XCIgW2E7IGJdXG5sZXQgZGljdF9nZXQgYSBiID0gcHJpbV9jYWxsIFwiZGljdC1nZXRcIiBbYTsgYl1cbmxldCBpc19jb21wb25lbnQgdiA9IHByaW1fY2FsbCBcImNvbXBvbmVudD9cIiBbdl1cbmxldCBpc19pc2xhbmQgdiA9IHByaW1fY2FsbCBcImlzbGFuZD9cIiBbdl1cbmxldCBpc19tYWNybyB2ID0gcHJpbV9jYWxsIFwibWFjcm8/XCIgW3ZdXG5sZXQgaXNfbGFtYmRhIHYgPSBwcmltX2NhbGwgXCJsYW1iZGE/XCIgW3ZdXG5sZXQgaXNfbmlsIHYgPSBwcmltX2NhbGwgXCJuaWw/XCIgW3ZdXG5cbigqIEZvcndhcmQgcmVmcyBmb3Igd2ViLXNwZWNpZmljIHJlbmRlcmVycyDigJQgc2V0IGluIEZJWFVQUyBvciBieSBjYWxsZXIgKilcbmxldCByZW5kZXJfaHRtbF9sYWtlX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gXyBfIC0+IFN0cmluZyBcIlwiKVxubGV0IHJlbmRlcl9odG1sX21hcnNoX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gXyBfIC0+IFN0cmluZyBcIlwiKVxubGV0IHJlbmRlcl9odG1sX2lzbGFuZF9yZWYgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gXyBfIC0+IFN0cmluZyBcIlwiKVxuXG5sZXQgcmVuZGVyX2h0bWxfbGFrZSBhcmdzIGVudiA9ICFyZW5kZXJfaHRtbF9sYWtlX3JlZiBhcmdzIGVudlxubGV0IHJlbmRlcl9odG1sX21hcnNoIGFyZ3MgZW52ID0gIXJlbmRlcl9odG1sX21hcnNoX3JlZiBhcmdzIGVudlxubGV0IHJlbmRlcl9odG1sX2lzbGFuZCBjb21wIGFyZ3MgZW52ID0gIXJlbmRlcl9odG1sX2lzbGFuZF9yZWYgY29tcCBhcmdzIGVudlxubGV0IGNla19jYWxsID0gU3hfcmVmLmNla19jYWxsXG5cbmxldCB0cmFtcG9saW5lIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBUaHVuayAoZXhwciwgZW52KSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgb3RoZXIgLT4gb3RoZXJcblxubGV0IGV4cGFuZF9tYWNybyBtIGFyZ3NfdmFsIF9lbnYgPSBtYXRjaCBtIHdpdGhcbiAgfCBNYWNybyBtYWMgLT5cbiAgICBsZXQgYXJncyA9IG1hdGNoIGFyZ3NfdmFsIHdpdGggTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IGwgfCBfIC0+IFtdIGluXG4gICAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCAoRW52IG1hYy5tX2Nsb3N1cmUpIGluXG4gICAgbGV0IHJlYyBiaW5kX3BhcmFtcyBwcyBhcycgPSBtYXRjaCBwcywgYXMnIHdpdGhcbiAgICAgIHwgW10sIHJlc3QgLT5cbiAgICAgICAgKG1hdGNoIG1hYy5tX3Jlc3RfcGFyYW0gd2l0aFxuICAgICAgICAgfCBTb21lIHJwIC0+IGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgKFN0cmluZyBycCkgKExpc3QgcmVzdCkpXG4gICAgICAgICB8IE5vbmUgLT4gKCkpXG4gICAgICB8IHAgOjogcHNfcmVzdCwgYSA6OiBhc19yZXN0IC0+XG4gICAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCBhKTtcbiAgICAgICAgYmluZF9wYXJhbXMgcHNfcmVzdCBhc19yZXN0XG4gICAgICB8IF8gOjogXywgW10gLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgTmlsKSkgKExpc3QucmV2IHBzKVxuICAgIGluXG4gICAgYmluZF9wYXJhbXMgKExpc3QubWFwIChmdW4gcCAtPiBTdHJpbmcgcCkgbWFjLm1fcGFyYW1zKSBhcmdzO1xuICAgIFN4X3JlZi5ldmFsX2V4cHIgbWFjLm1fYm9keSBsb2NhbFxuICB8IF8gLT4gTmlsXG5cbigqKiB0cnktY2F0Y2g6IHdyYXBzIGEgdHJ5IGJvZHkgZm4gYW5kIGNhdGNoIGhhbmRsZXIgZm4uXG4gICAgTWFwcyB0byBPQ2FtbCBleGNlcHRpb24gaGFuZGxpbmcuICopXG5sZXQgdHJ5X2NhdGNoIHRyeV9mbiBjYXRjaF9mbiA9XG4gIHRyeSBzeF9jYWxsIHRyeV9mbiBbXVxuICB3aXRoXG4gIHwgU3hfdm0uVm1TdXNwZW5kZWQgXyBhcyBlIC0+IHJhaXNlIGVcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBzeF9jYWxsIGNhdGNoX2ZuIFtTdHJpbmcgbXNnXVxuICB8IGUgLT4gc3hfY2FsbCBjYXRjaF9mbiBbU3RyaW5nIChQcmludGV4Yy50b19zdHJpbmcgZSldXG5cbigqKiBzZXQtcmVuZGVyLWFjdGl2ZSEg4oCUIG5vLW9wIG9uIE9DYW1sIChhbHdheXMgYWN0aXZlKS4gKilcbmxldCBzZXRfcmVuZGVyX2FjdGl2ZV9iIF92ID0gTmlsXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBlcmZvcm1hbmNlLWNyaXRpY2FsOiBuYXRpdmUgQnVmZmVyLWJhc2VkIEhUTUwgZXNjYXBpbmcgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFRhZyByZWdpc3RyaWVzIOKAlCBuYXRpdmUgc3RyaW5nIGxpc3RzIGZvciBjYWxsZXJzLCB2YWx1ZSBMaXN0cyBmb3IgU1ggICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgYm9vbGVhbl9hdHRyc19zZXQgPSBbXG4gIFwiYXN5bmNcIjsgXCJhdXRvZm9jdXNcIjsgXCJhdXRvcGxheVwiOyBcImNoZWNrZWRcIjsgXCJjb250cm9sc1wiOyBcImRlZmF1bHRcIjtcbiAgXCJkZWZlclwiOyBcImRpc2FibGVkXCI7IFwiZm9ybW5vdmFsaWRhdGVcIjsgXCJoaWRkZW5cIjsgXCJpbmVydFwiOyBcImlzbWFwXCI7XG4gIFwibG9vcFwiOyBcIm11bHRpcGxlXCI7IFwibXV0ZWRcIjsgXCJub21vZHVsZVwiOyBcIm5vdmFsaWRhdGVcIjsgXCJvcGVuXCI7XG4gIFwicGxheXNpbmxpbmVcIjsgXCJyZWFkb25seVwiOyBcInJlcXVpcmVkXCI7IFwicmV2ZXJzZWRcIjsgXCJzZWxlY3RlZFwiXG5dXG5sZXQgaXNfYm9vbGVhbl9hdHRyIG5hbWUgPSBMaXN0Lm1lbSBuYW1lIGJvb2xlYW5fYXR0cnNfc2V0XG5cbmxldCBodG1sX3RhZ3NfbGlzdCA9IFtcbiAgXCJodG1sXCI7IFwiaGVhZFwiOyBcImJvZHlcIjsgXCJ0aXRsZVwiOyBcIm1ldGFcIjsgXCJsaW5rXCI7IFwic2NyaXB0XCI7IFwic3R5bGVcIjsgXCJub3NjcmlwdFwiO1xuICBcImhlYWRlclwiOyBcIm5hdlwiOyBcIm1haW5cIjsgXCJzZWN0aW9uXCI7IFwiYXJ0aWNsZVwiOyBcImFzaWRlXCI7IFwiZm9vdGVyXCI7XG4gIFwiaDFcIjsgXCJoMlwiOyBcImgzXCI7IFwiaDRcIjsgXCJoNVwiOyBcImg2XCI7IFwiaGdyb3VwXCI7XG4gIFwiZGl2XCI7IFwicFwiOyBcImJsb2NrcXVvdGVcIjsgXCJwcmVcIjsgXCJmaWd1cmVcIjsgXCJmaWdjYXB0aW9uXCI7IFwiYWRkcmVzc1wiOyBcImhyXCI7XG4gIFwidWxcIjsgXCJvbFwiOyBcImxpXCI7IFwiZGxcIjsgXCJkdFwiOyBcImRkXCI7IFwibWVudVwiOyBcImRldGFpbHNcIjsgXCJzdW1tYXJ5XCI7IFwiZGlhbG9nXCI7XG4gIFwiYVwiOyBcInNwYW5cIjsgXCJlbVwiOyBcInN0cm9uZ1wiOyBcInNtYWxsXCI7IFwiYlwiOyBcImlcIjsgXCJ1XCI7IFwic1wiOyBcInN1YlwiOyBcInN1cFwiO1xuICBcIm1hcmtcIjsgXCJhYmJyXCI7IFwiY2l0ZVwiOyBcImNvZGVcIjsgXCJrYmRcIjsgXCJzYW1wXCI7IFwidmFyXCI7IFwidGltZVwiOyBcImJyXCI7IFwid2JyXCI7XG4gIFwidGFibGVcIjsgXCJ0aGVhZFwiOyBcInRib2R5XCI7IFwidGZvb3RcIjsgXCJ0clwiOyBcInRoXCI7IFwidGRcIjsgXCJjYXB0aW9uXCI7IFwiY29sZ3JvdXBcIjsgXCJjb2xcIjtcbiAgXCJmb3JtXCI7IFwiaW5wdXRcIjsgXCJ0ZXh0YXJlYVwiOyBcInNlbGVjdFwiOyBcIm9wdGlvblwiOyBcIm9wdGdyb3VwXCI7IFwiYnV0dG9uXCI7IFwibGFiZWxcIjtcbiAgXCJmaWVsZHNldFwiOyBcImxlZ2VuZFwiOyBcImRhdGFsaXN0XCI7IFwib3V0cHV0XCI7XG4gIFwiaW1nXCI7IFwidmlkZW9cIjsgXCJhdWRpb1wiOyBcInNvdXJjZVwiOyBcInBpY3R1cmVcIjsgXCJjYW52YXNcIjsgXCJpZnJhbWVcIjtcbiAgXCJzdmdcIjsgXCJwYXRoXCI7IFwiY2lyY2xlXCI7IFwicmVjdFwiOyBcImxpbmVcIjsgXCJwb2x5bGluZVwiOyBcInBvbHlnb25cIjsgXCJlbGxpcHNlXCI7XG4gIFwiZ1wiOyBcImRlZnNcIjsgXCJ1c2VcIjsgXCJ0ZXh0XCI7IFwidHNwYW5cIjsgXCJjbGlwUGF0aFwiOyBcIm1hc2tcIjsgXCJwYXR0ZXJuXCI7XG4gIFwibGluZWFyR3JhZGllbnRcIjsgXCJyYWRpYWxHcmFkaWVudFwiOyBcInN0b3BcIjsgXCJmaWx0ZXJcIjtcbiAgXCJmZUdhdXNzaWFuQmx1clwiOyBcImZlT2Zmc2V0XCI7IFwiZmVCbGVuZFwiOyBcImZlQ29sb3JNYXRyaXhcIjsgXCJmZUNvbXBvc2l0ZVwiO1xuICBcImZlTWVyZ2VcIjsgXCJmZU1lcmdlTm9kZVwiOyBcImZlVHVyYnVsZW5jZVwiOyBcImZlQ29tcG9uZW50VHJhbnNmZXJcIjtcbiAgXCJmZUZ1bmNSXCI7IFwiZmVGdW5jR1wiOyBcImZlRnVuY0JcIjsgXCJmZUZ1bmNBXCI7IFwiZmVEaXNwbGFjZW1lbnRNYXBcIjsgXCJmZUZsb29kXCI7XG4gIFwiZmVJbWFnZVwiOyBcImZlTW9ycGhvbG9neVwiOyBcImZlU3BlY3VsYXJMaWdodGluZ1wiOyBcImZlRGlmZnVzZUxpZ2h0aW5nXCI7XG4gIFwiZmVQb2ludExpZ2h0XCI7IFwiZmVTcG90TGlnaHRcIjsgXCJmZURpc3RhbnRMaWdodFwiO1xuICBcImFuaW1hdGVcIjsgXCJhbmltYXRlVHJhbnNmb3JtXCI7IFwiZm9yZWlnbk9iamVjdFwiOyBcInRlbXBsYXRlXCI7IFwic2xvdFwiXG5dXG5sZXQgaHRtbF90YWdzID0gaHRtbF90YWdzX2xpc3QgICgqIGNhbGxlcnMgZXhwZWN0IHN0cmluZyBsaXN0ICopXG5sZXQgaHRtbF90YWdzX3ZhbCA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaHRtbF90YWdzX2xpc3QpXG5cbmxldCB2b2lkX2VsZW1lbnRzX2xpc3QgPSBbXG4gIFwiYXJlYVwiOyBcImJhc2VcIjsgXCJiclwiOyBcImNvbFwiOyBcImVtYmVkXCI7IFwiaHJcIjsgXCJpbWdcIjsgXCJpbnB1dFwiO1xuICBcImxpbmtcIjsgXCJtZXRhXCI7IFwicGFyYW1cIjsgXCJzb3VyY2VcIjsgXCJ0cmFja1wiOyBcIndiclwiXG5dXG5sZXQgdm9pZF9lbGVtZW50cyA9IHZvaWRfZWxlbWVudHNfbGlzdCAgKCogY2FsbGVycyBleHBlY3Qgc3RyaW5nIGxpc3QgKilcbmxldCB2b2lkX2VsZW1lbnRzX3ZhbCA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgdm9pZF9lbGVtZW50c19saXN0KVxuXG5sZXQgYm9vbGVhbl9hdHRycyA9IGJvb2xlYW5fYXR0cnNfc2V0ICAoKiBjYWxsZXJzIGV4cGVjdCBzdHJpbmcgbGlzdCAqKVxubGV0IGJvb2xlYW5fYXR0cnNfdmFsID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBib29sZWFuX2F0dHJzX3NldClcblxuKCogTmF0aXZlIGVzY2FwZSBmb3IgaW50ZXJuYWwgdXNlIOKAlCByZXR1cm5zIHJhdyBPQ2FtbCBzdHJpbmcgKilcbmxldCBlc2NhcGVfaHRtbF9yYXcgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIFN0cmluZy5pdGVyIChmdW5jdGlvblxuICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZhbXA7XCJcbiAgICB8ICc8JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImbHQ7XCJcbiAgICB8ICc+JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImZ3Q7XCJcbiAgICB8ICdcIicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJnF1b3Q7XCJcbiAgICB8IGMgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjKSBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbigqIGVzY2FwZV9odG1sOiBuYXRpdmUgc3RyaW5nIC0+IHN0cmluZyBmb3IgY2FsbGVycyAqKVxubGV0IGVzY2FwZV9odG1sID0gZXNjYXBlX2h0bWxfcmF3XG5cbigqIGVzY2FwZV9odG1sX3ZhbCAvIGVzY2FwZV9hdHRyX3ZhbCDigJQgdGFrZSBhIHZhbHVlLCByZXR1cm4gU3RyaW5nIHZhbHVlIChmb3IgdHJhbnNwaWxlZCBjb2RlKSAqKVxubGV0IGVzY2FwZV9odG1sX3ZhbCB2ID1cbiAgbGV0IHMgPSBtYXRjaCB2IHdpdGggU3RyaW5nIHMgLT4gcyB8IHYgLT4gdmFsdWVfdG9fc3RyaW5nIHYgaW5cbiAgU3RyaW5nIChlc2NhcGVfaHRtbF9yYXcgcylcblxubGV0IGVzY2FwZV9hdHRyX3ZhbCB2ID0gZXNjYXBlX2h0bWxfdmFsIHZcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUGVyZm9ybWFuY2UtY3JpdGljYWw6IG5hdGl2ZSBhdHRyaWJ1dGUgcmVuZGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IHJlbmRlcl9hdHRycyBhdHRycyA9IG1hdGNoIGF0dHJzIHdpdGhcbiAgfCBEaWN0IGQgLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPlxuICAgICAgaWYgaXNfYm9vbGVhbl9hdHRyIGsgdGhlbiBiZWdpblxuICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGtcbiAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiB2IDw+IE5pbCB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPVxcXCJcIjtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChlc2NhcGVfaHRtbF9yYXcgKHZhbHVlX3RvX3N0cmluZyB2KSk7XG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICAgICAgZW5kKSBkO1xuICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgfCBfIC0+IFN0cmluZyBcIlwiXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEZvcndhcmQgcmVmIOKAlCB1c2VkIGJ5IHNldHVwX3JlbmRlcl9lbnYgYW5kIGJ1ZmZlciByZW5kZXJlciAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IHJlbmRlcl90b19odG1sX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gX2V4cHIgX2VudiAtPiBTdHJpbmcgXCJcIilcblxuKCogc2NvcGUtZW1pdHRlZCBpcyBhIHByaW0gYWxpYXMgKilcbmxldCBzY29wZV9lbWl0dGVkIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1lbWl0dGVkXCIgW25hbWVdXG5cbigqIFJFTkRFUl9IVE1MX0ZPUk1TIOKAlCBsaXN0IG9mIHNwZWNpYWwgZm9ybSBuYW1lcyBoYW5kbGVkIGJ5IGRpc3BhdGNoLWh0bWwtZm9ybSAqKVxubGV0IHJlbmRlcl9odG1sX2Zvcm1zID0gTGlzdCBbXG4gIFN0cmluZyBcImlmXCI7IFN0cmluZyBcIndoZW5cIjsgU3RyaW5nIFwiY29uZFwiOyBTdHJpbmcgXCJjYXNlXCI7XG4gIFN0cmluZyBcImxldFwiOyBTdHJpbmcgXCJsZXQqXCI7IFN0cmluZyBcImxldHJlY1wiO1xuICBTdHJpbmcgXCJiZWdpblwiOyBTdHJpbmcgXCJkb1wiO1xuICBTdHJpbmcgXCJkZWZpbmVcIjsgU3RyaW5nIFwiZGVmY29tcFwiOyBTdHJpbmcgXCJkZWZtYWNyb1wiOyBTdHJpbmcgXCJkZWZpc2xhbmRcIjtcbiAgU3RyaW5nIFwiZGVmcGFnZVwiOyBTdHJpbmcgXCJkZWZoYW5kbGVyXCI7IFN0cmluZyBcImRlZnF1ZXJ5XCI7IFN0cmluZyBcImRlZmFjdGlvblwiO1xuICBTdHJpbmcgXCJkZWZyZWxhdGlvblwiOyBTdHJpbmcgXCJkZWZ0eXBlXCI7IFN0cmluZyBcImRlZmVmZmVjdFwiOyBTdHJpbmcgXCJkZWZzdHlsZVwiO1xuICBTdHJpbmcgXCJtYXBcIjsgU3RyaW5nIFwibWFwLWluZGV4ZWRcIjsgU3RyaW5nIFwiZmlsdGVyXCI7IFN0cmluZyBcImZvci1lYWNoXCI7XG4gIFN0cmluZyBcInNjb3BlXCI7IFN0cmluZyBcInByb3ZpZGVcIlxuXVxuXG5cbigqID09PSBUcmFuc3BpbGVkIGZyb20gcmVuZGVyIHNwZWMgKyBhZGFwdGVyID09PSAqKVxuKCogKmRlZmluaXRpb24tZm9ybS1leHRlbnNpb25zKiAqKVxubGV0IHJlYyBfZGVmaW5pdGlvbl9mb3JtX2V4dGVuc2lvbnNfID1cbiAgKExpc3QgW10pXG5cbigqIGRlZmluaXRpb24tZm9ybT8gKilcbmFuZCBkZWZpbml0aW9uX2Zvcm1fcCBuYW1lID1cbiAgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmaW5lXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmNvbXBcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmaXNsYW5kXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZm1hY3JvXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZnN0eWxlXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZnR5cGVcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmZWZmZWN0XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbX2RlZmluaXRpb25fZm9ybV9leHRlbnNpb25zXzsgbmFtZV0pKSkpKSkpKVxuXG4oKiBwYXJzZS1lbGVtZW50LWFyZ3MgKilcbmFuZCBwYXJzZV9lbGVtZW50X2FyZ3MgYXJncyBlbnYgPVxuICAobGV0IGF0dHJzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgY2hpbGRyZW4gPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgYXJnIC0+IChsZXQgc2tpcCA9IChnZXQgKHN0YXRlKSAoKFN0cmluZyBcInNraXBcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChza2lwKSB0aGVuIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIGZhbHNlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChhcmcpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pOyAobGVuIChhcmdzKSldKSkpIHRoZW4gKGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pKSkpIChlbnYpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGF0dHJzIChrZXl3b3JkX25hbWUgKGFyZykpIHZhbCcpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCB0cnVlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGNoaWxkcmVuIDo9IHN4X2FwcGVuZF9iICFjaGlsZHJlbiBhcmc7IE5pbCkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSkpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpXCIpKSAoTnVtYmVyIDAuMCk7IEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJza2lwXCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCBhcmdzKSkpIGluIChMaXN0IFthdHRyczsgIWNoaWxkcmVuXSkpKVxuXG4oKiBldmFsLWNvbmQgKilcbmFuZCBldmFsX2NvbmQgY2xhdXNlcyBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgoY29uZF9zY2hlbWVfcCAoY2xhdXNlcykpKSB0aGVuIChldmFsX2NvbmRfc2NoZW1lIChjbGF1c2VzKSAoZW52KSkgZWxzZSAoZXZhbF9jb25kX2Nsb2p1cmUgKGNsYXVzZXMpIChlbnYpKSlcblxuKCogZXZhbC1jb25kLXNjaGVtZSAqKVxuYW5kIGV2YWxfY29uZF9zY2hlbWUgY2xhdXNlcyBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY2xhdXNlcykpKSB0aGVuIE5pbCBlbHNlIChsZXQgY2xhdXNlID0gKGZpcnN0IChjbGF1c2VzKSkgaW4gbGV0IHRlc3QgPSAoZmlyc3QgKGNsYXVzZSkpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlICh0ZXN0KSkpIHRoZW4gYm9keSBlbHNlIChpZiBzeF90cnV0aHkgKCh0cmFtcG9saW5lICgoZXZhbF9leHByICh0ZXN0KSAoZW52KSkpKSkgdGhlbiBib2R5IGVsc2UgKGV2YWxfY29uZF9zY2hlbWUgKChyZXN0IChjbGF1c2VzKSkpIChlbnYpKSkpKSlcblxuKCogZXZhbC1jb25kLWNsb2p1cmUgKilcbmFuZCBldmFsX2NvbmRfY2xvanVyZSBjbGF1c2VzIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgWyhsZW4gKGNsYXVzZXMpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gTmlsIGVsc2UgKGxldCB0ZXN0ID0gKGZpcnN0IChjbGF1c2VzKSkgaW4gbGV0IGJvZHkgPSAobnRoIChjbGF1c2VzKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlICh0ZXN0KSkpIHRoZW4gYm9keSBlbHNlIChpZiBzeF90cnV0aHkgKCh0cmFtcG9saW5lICgoZXZhbF9leHByICh0ZXN0KSAoZW52KSkpKSkgdGhlbiBib2R5IGVsc2UgKGV2YWxfY29uZF9jbG9qdXJlICgocHJpbV9jYWxsIFwic2xpY2VcIiBbY2xhdXNlczsgKE51bWJlciAyLjApXSkpIChlbnYpKSkpKSlcblxuKCogcHJvY2Vzcy1iaW5kaW5ncyAqKVxuYW5kIHByb2Nlc3NfYmluZGluZ3MgYmluZGluZ3MgZW52ID1cbiAgKGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwYWlyKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHBhaXIpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChsZXQgbmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHBhaXIpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHBhaXIpKSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFsoZmlyc3QgKHBhaXIpKV0pKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgbmFtZSkgKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSkpKSkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSkgaW4gbG9jYWwpKVxuXG4oKiBpcy1yZW5kZXItZXhwcj8gKilcbmFuZCBpc19yZW5kZXJfZXhwcl9wIGV4cHIgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGV4cHIpKTsgKFN0cmluZyBcImxpc3RcIildKSkpKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChlbXB0eV9wIChleHByKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgaCA9IChmaXJzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGgpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSkpKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAobGV0IG4gPSAoc3ltYm9sX25hbWUgKGgpKSBpbiAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW247IChTdHJpbmcgXCI8PlwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW247IChTdHJpbmcgXCJyYXchXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcInN0YXJ0cy13aXRoP1wiIFtuOyAoU3RyaW5nIFwiflwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbbjsgKFN0cmluZyBcImh0bWw6XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFtodG1sX3RhZ3NfdmFsOyBuXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+XCIgWyhwcmltX2NhbGwgXCJpbmRleC1vZlwiIFtuOyAoU3RyaW5nIFwiLVwiKV0pOyAoTnVtYmVyIDAuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPlwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMS4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSkpKSkpKSkpKSkpXG5cbigqIG1lcmdlLXNwcmVhZC1hdHRycyAqKVxuYW5kIG1lcmdlX3NwcmVhZF9hdHRycyB0YXJnZXQgc3ByZWFkX2RpY3QgPVxuICAoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKGxldCB2YWwnID0gKGRpY3RfZ2V0IChzcHJlYWRfZGljdCkgKGtleSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2tleTsgKFN0cmluZyBcImNsYXNzXCIpXSkpIHRoZW4gKGxldCBleGlzdGluZyA9IChkaWN0X2dldCAodGFyZ2V0KSAoKFN0cmluZyBcImNsYXNzXCIpKSkgaW4gKHN4X2RpY3Rfc2V0X2IgdGFyZ2V0IChTdHJpbmcgXCJjbGFzc1wiKSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSBleGlzdGluZyBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2V4aXN0aW5nOyAoU3RyaW5nIFwiXCIpXSkpKSkpKSkgdGhlbiAoU3RyaW5nIChzeF9zdHIgW2V4aXN0aW5nOyAoU3RyaW5nIFwiIFwiKTsgdmFsJ10pKSBlbHNlIHZhbCcpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtrZXk7IChTdHJpbmcgXCJzdHlsZVwiKV0pKSB0aGVuIChsZXQgZXhpc3RpbmcgPSAoZGljdF9nZXQgKHRhcmdldCkgKChTdHJpbmcgXCJzdHlsZVwiKSkpIGluIChzeF9kaWN0X3NldF9iIHRhcmdldCAoU3RyaW5nIFwic3R5bGVcIikgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gZXhpc3RpbmcgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleGlzdGluZzsgKFN0cmluZyBcIlwiKV0pKSkpKSkpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFtleGlzdGluZzsgKFN0cmluZyBcIjtcIik7IHZhbCddKSkgZWxzZSB2YWwnKSkpIGVsc2UgKHN4X2RpY3Rfc2V0X2IgdGFyZ2V0IGtleSB2YWwnKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW3NwcmVhZF9kaWN0XSkpOyBOaWwpXG5cbigqIHJlbmRlci10by1odG1sICopXG5hbmQgcmVuZGVyX3RvX2h0bWwgZXhwciBlbnYgPVxuICAobGV0ICgpID0gaWdub3JlICgoc2V0X3JlbmRlcl9hY3RpdmVfYiAoKEJvb2wgdHJ1ZSkpKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gKHR5cGVfb2YgKGV4cHIpKSBpbiAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJuaWxcIikgdGhlbiAoU3RyaW5nIFwiXCIpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3RyaW5nXCIpIHRoZW4gKGVzY2FwZV9odG1sX3ZhbCAoZXhwcikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibnVtYmVyXCIpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFtleHByXSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiYm9vbGVhblwiKSB0aGVuIChpZiBzeF90cnV0aHkgKGV4cHIpIHRoZW4gKFN0cmluZyBcInRydWVcIikgZWxzZSAoU3RyaW5nIFwiZmFsc2VcIikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibGlzdFwiKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKFN0cmluZyBcIlwiKSBlbHNlIChyZW5kZXJfbGlzdF90b19odG1sIChleHByKSAoZW52KSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ltYm9sXCIpIHRoZW4gKHJlbmRlcl92YWx1ZV90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImtleXdvcmRcIikgdGhlbiAoZXNjYXBlX2h0bWxfdmFsICgoa2V5d29yZF9uYW1lIChleHByKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInJhdy1odG1sXCIpIHRoZW4gKHJhd19odG1sX2NvbnRlbnQgKGV4cHIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInNwcmVhZFwiKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9lbWl0ICgoU3RyaW5nIFwiZWxlbWVudC1hdHRyc1wiKSkgKChzcHJlYWRfYXR0cnMgKGV4cHIpKSkpKSBpbiAoU3RyaW5nIFwiXCIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInRodW5rXCIpIHRoZW4gKHJlbmRlcl90b19odG1sICgodGh1bmtfZXhwciAoZXhwcikpKSAoKHRodW5rX2VudiAoZXhwcikpKSkgZWxzZSAocmVuZGVyX3ZhbHVlX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpKSkpKSkpKSkpKSkpXG5cbigqIHJlbmRlci12YWx1ZS10by1odG1sICopXG5hbmQgcmVuZGVyX3ZhbHVlX3RvX2h0bWwgdmFsJyBlbnYgPVxuICAobGV0IF9tYXRjaF92YWwgPSAodHlwZV9vZiAodmFsJykpIGluIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm5pbFwiKSB0aGVuIChTdHJpbmcgXCJcIikgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzdHJpbmdcIikgdGhlbiAoZXNjYXBlX2h0bWxfdmFsICh2YWwnKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJudW1iZXJcIikgdGhlbiAoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJib29sZWFuXCIpIHRoZW4gKGlmIHN4X3RydXRoeSAodmFsJykgdGhlbiAoU3RyaW5nIFwidHJ1ZVwiKSBlbHNlIChTdHJpbmcgXCJmYWxzZVwiKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJsaXN0XCIpIHRoZW4gKHJlbmRlcl9saXN0X3RvX2h0bWwgKHZhbCcpIChlbnYpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInJhdy1odG1sXCIpIHRoZW4gKHJhd19odG1sX2NvbnRlbnQgKHZhbCcpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInNwcmVhZFwiKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9lbWl0ICgoU3RyaW5nIFwiZWxlbWVudC1hdHRyc1wiKSkgKChzcHJlYWRfYXR0cnMgKHZhbCcpKSkpKSBpbiAoU3RyaW5nIFwiXCIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInRodW5rXCIpIHRoZW4gKHJlbmRlcl90b19odG1sICgodGh1bmtfZXhwciAodmFsJykpKSAoKHRodW5rX2VudiAodmFsJykpKSkgZWxzZSAoZXNjYXBlX2h0bWxfdmFsICgoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSkpKSkpKSkpKSkpKVxuXG4oKiByZW5kZXItaHRtbC1mb3JtPyAqKVxuYW5kIHJlbmRlcl9odG1sX2Zvcm1fcCBuYW1lID1cbiAgKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFtyZW5kZXJfaHRtbF9mb3JtczsgbmFtZV0pXG5cbigqIHJlbmRlci1saXN0LXRvLWh0bWwgKilcbmFuZCByZW5kZXJfbGlzdF90b19odG1sIGV4cHIgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGV4cHIpKSkgdGhlbiAoU3RyaW5nIFwiXCIpIGVsc2UgKGxldCBoZWFkID0gKGZpcnN0IChleHByKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpKSkpKSB0aGVuIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHJlbmRlcl92YWx1ZV90b19odG1sICh4KSAoZW52KSkpIChzeF90b19saXN0IGV4cHIpKSldKSBlbHNlIChsZXQgbmFtZSA9IChzeW1ib2xfbmFtZSAoaGVhZCkpIGluIGxldCBhcmdzID0gKHJlc3QgKGV4cHIpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiPD5cIildKSkgdGhlbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IChyZW5kZXJfdG9faHRtbCAoeCkgKGVudikpKSAoc3hfdG9fbGlzdCBhcmdzKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicmF3IVwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKFN0cmluZyAoc3hfc3RyIFsodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoeCkgKGVudikpKSldKSkpIChzeF90b19saXN0IGFyZ3MpKSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJsYWtlXCIpXSkpIHRoZW4gKHJlbmRlcl9odG1sX2xha2UgKGFyZ3MpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXJzaFwiKV0pKSB0aGVuIChyZW5kZXJfaHRtbF9tYXJzaCAoYXJncykgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImVycm9yLWJvdW5kYXJ5XCIpXSkpIHRoZW4gKGxldCBoYXNfZmFsbGJhY2sgPSAocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMS4wKV0pIGluIChsZXQgYm9keV9leHBycyA9IChpZiBzeF90cnV0aHkgKGhhc19mYWxsYmFjaykgdGhlbiAocmVzdCAoYXJncykpIGVsc2UgYXJncykgaW4gbGV0IGZhbGxiYWNrX2V4cHIgPSAoaWYgc3hfdHJ1dGh5IChoYXNfZmFsbGJhY2spIHRoZW4gKGZpcnN0IChhcmdzKSkgZWxzZSBOaWwpIGluIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjxkaXYgZGF0YS1zeC1ib3VuZGFyeT1cXFwidHJ1ZVxcXCI+XCIpOyAodHJ5X2NhdGNoICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IChyZW5kZXJfdG9faHRtbCAoeCkgKGVudikpKSAoc3hfdG9fbGlzdCBib2R5X2V4cHJzKSkpXSkpICgpKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZXJyXSAtPiAoZnVuIGVyciAtPiAobGV0IHNhZmVfZXJyID0gKHByaW1fY2FsbCBcInJlcGxhY2VcIiBbKHByaW1fY2FsbCBcInJlcGxhY2VcIiBbKFN0cmluZyAoc3hfc3RyIFtlcnJdKSk7IChTdHJpbmcgXCI8XCIpOyAoU3RyaW5nIFwiJmx0O1wiKV0pOyAoU3RyaW5nIFwiPlwiKTsgKFN0cmluZyBcIiZndDtcIildKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSBmYWxsYmFja19leHByIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAoZmFsbGJhY2tfZXhwcikpKSkpKSkpIHRoZW4gKHRyeV9jYXRjaCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IChmdW4gKCkgLT4gKHJlbmRlcl90b19odG1sICgoTGlzdCBbKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGZhbGxiYWNrX2V4cHIpIChlbnYpKSkpOyBlcnI7IE5pbF0pKSAoZW52KSkpICgpKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZTJdIC0+IChmdW4gZTIgLT4gKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPGRpdiBjbGFzcz1cXFwic3gtcmVuZGVyLWVycm9yXFxcIiBzdHlsZT1cXFwiY29sb3I6cmVkO2ZvbnQtc2l6ZTowLjg3NXJlbTtwYWRkaW5nOjAuNXJlbTtib3JkZXI6MXB4IHNvbGlkIHJlZDtib3JkZXItcmFkaXVzOjAuMjVyZW07bWFyZ2luOjAuNXJlbSAwO1xcXCI+UmVuZGVyIGVycm9yOiBcIik7IHNhZmVfZXJyOyAoU3RyaW5nIFwiPC9kaXY+XCIpXSkpKSBlMiB8IF8gLT4gTmlsKSkpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjxkaXYgY2xhc3M9XFxcInN4LXJlbmRlci1lcnJvclxcXCIgc3R5bGU9XFxcImNvbG9yOnJlZDtmb250LXNpemU6MC44NzVyZW07cGFkZGluZzowLjVyZW07Ym9yZGVyOjFweCBzb2xpZCByZWQ7Ym9yZGVyLXJhZGl1czowLjI1cmVtO21hcmdpbjowLjVyZW0gMDtcXFwiPlJlbmRlciBlcnJvcjogXCIpOyBzYWZlX2VycjsgKFN0cmluZyBcIjwvZGl2PlwiKV0pKSkpKSBlcnIgfCBfIC0+IE5pbCkpKSk7IChTdHJpbmcgXCI8L2Rpdj5cIildKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInBvcnRhbFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicHJvbWlzZS1kZWxheWVkXCIpXSkpKSB0aGVuIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHJlbmRlcl90b19odG1sICh4KSAoZW52KSkpIChzeF90b19saXN0IGFyZ3MpKSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbaHRtbF90YWdzX3ZhbDsgbmFtZV0pKSB0aGVuIChyZW5kZXJfaHRtbF9lbGVtZW50IChuYW1lKSAoYXJncykgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcInN0YXJ0cy13aXRoP1wiIFtuYW1lOyAoU3RyaW5nIFwiflwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChlbnZfaGFzIChlbnYpIChuYW1lKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX2lzbGFuZCAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkpKSkpIHRoZW4gKHJlbmRlcl9odG1sX2lzbGFuZCAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkgKGFyZ3MpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbbmFtZTsgKFN0cmluZyBcIn5cIildKSkgdGhlbiAobGV0IHZhbCcgPSAoZW52X2dldCAoZW52KSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19jb21wb25lbnQgKHZhbCcpKSkgdGhlbiAocmVuZGVyX2h0bWxfY29tcG9uZW50ICh2YWwnKSAoYXJncykgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX21hY3JvICh2YWwnKSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgoZXhwYW5kX21hY3JvICh2YWwnKSAoYXJncykgKGVudikpKSAoZW52KSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8IS0tIHVua25vd24gY29tcG9uZW50OiBcIik7IG5hbWU7IChTdHJpbmcgXCIgLS0+XCIpXSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHJlbmRlcl9odG1sX2Zvcm1fcCAobmFtZSkpKSB0aGVuIChkaXNwYXRjaF9odG1sX2Zvcm0gKG5hbWUpIChleHByKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZW52X2hhcyAoZW52KSAobmFtZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19tYWNybyAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkpKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChleHBhbmRfbWFjcm8gKChlbnZfZ2V0IChlbnYpIChuYW1lKSkpIChhcmdzKSAoZW52KSkpIChlbnYpKSBlbHNlIChyZW5kZXJfdmFsdWVfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkpKSkpKSkpKSkpKSkpKSlcblxuKCogZGlzcGF0Y2gtaHRtbC1mb3JtICopXG5hbmQgZGlzcGF0Y2hfaHRtbF9mb3JtIG5hbWUgZXhwciBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiaWZcIildKSkgdGhlbiAobGV0IGNvbmRfdmFsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoY29uZF92YWwpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAzLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoKE51bWJlciAzLjApKSkpIChlbnYpKSBlbHNlIChTdHJpbmcgXCJcIikpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwid2hlblwiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkpKSkpKSB0aGVuIChTdHJpbmcgXCJcIikgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMy4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkgZWxzZSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpIC0+IChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKGkpKSkgKGVudikpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAyLjApOyAobGVuIChleHByKSldKSkpKV0pKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChsZXQgYnJhbmNoID0gKGV2YWxfY29uZCAoKHJlc3QgKGV4cHIpKSkgKGVudikpIGluIChpZiBzeF90cnV0aHkgKGJyYW5jaCkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKGJyYW5jaCkgKGVudikpIGVsc2UgKFN0cmluZyBcIlwiKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImNhc2VcIildKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldHJlY1wiKV0pKSB0aGVuIChsZXQgYmluZGluZ3MgPSAobnRoIChleHByKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHkgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbZXhwcjsgKE51bWJlciAyLjApXSkgaW4gbGV0IGxvY2FsID0gKGVudl9leHRlbmQgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGxldCBwbmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHBhaXIpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHBhaXIpKSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFsoZmlyc3QgKHBhaXIpKV0pKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcG5hbWUpIE5pbCkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgcG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChwYWlyKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChwYWlyKSkpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbKGZpcnN0IChwYWlyKSldKSkpIGluIChlbnZfc2V0IGxvY2FsIChzeF90b19zdHJpbmcgcG5hbWUpICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkpKSkpKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYm9keSkpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAobG9jYWwpKSkpKSkgKHN4X3RvX2xpc3QgKGluaXQgKGJvZHkpKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAocmVuZGVyX3RvX2h0bWwgKChsYXN0IChib2R5KSkpIChsb2NhbCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGV0KlwiKV0pKSkgdGhlbiAobGV0IGxvY2FsID0gKHByb2Nlc3NfYmluZGluZ3MgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAzLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChsb2NhbCkpIGVsc2UgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaSAtPiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpIChpKSkpIChsb2NhbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAyLjApOyAobGVuIChleHByKSldKSkpKV0pKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJiZWdpblwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZG9cIildKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpIGVsc2UgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaSAtPiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpIChpKSkpIChlbnYpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMS4wKTsgKGxlbiAoZXhwcikpXSkpKSldKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZGVmaW5pdGlvbl9mb3JtX3AgKG5hbWUpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIGluIChTdHJpbmcgXCJcIikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcFwiKV0pKSB0aGVuIChsZXQgZiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBjb2xsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaXRlbSAtPiAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHJlbmRlcl9sYW1iZGFfaHRtbCAoZikgKChMaXN0IFtpdGVtXSkpIChlbnYpKSBlbHNlIChyZW5kZXJfdG9faHRtbCAoKHN4X2FwcGx5IGYgKExpc3QgW2l0ZW1dKSkpIChlbnYpKSkpIChzeF90b19saXN0IGNvbGwpKSldKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwLWluZGV4ZWRcIildKSkgdGhlbiAobGV0IGYgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgY29sbCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSkpIGluIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIGl0ZW0gLT4gbGV0IGkgPSBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHJlbmRlcl9sYW1iZGFfaHRtbCAoZikgKChMaXN0IFtpOyBpdGVtXSkpIChlbnYpKSBlbHNlIChyZW5kZXJfdG9faHRtbCAoKHN4X2FwcGx5IGYgKExpc3QgW2k7IGl0ZW1dKSkpIChlbnYpKSkpIChzeF90b19saXN0IGNvbGwpKSldKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZmlsdGVyXCIpXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgZiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBjb2xsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaXRlbSAtPiAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHJlbmRlcl9sYW1iZGFfaHRtbCAoZikgKChMaXN0IFtpdGVtXSkpIChlbnYpKSBlbHNlIChyZW5kZXJfdG9faHRtbCAoKHN4X2FwcGx5IGYgKExpc3QgW2l0ZW1dKSkpIChlbnYpKSkpIChzeF90b19saXN0IGNvbGwpKSldKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic2NvcGVcIildKSkgdGhlbiAobGV0IHNjb3BlX25hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgcmVzdF9hcmdzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2V4cHI7IChOdW1iZXIgMi4wKV0pIGluIGxldCBzY29wZV92YWwgPSByZWYgKE5pbCkgaW4gbGV0IGJvZHlfZXhwcnMgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc3RfYXJncykpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChmaXJzdCAocmVzdF9hcmdzKSkpKTsgKFN0cmluZyBcInZhbHVlXCIpXSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfdmFsIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0X2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5X2V4cHJzIDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0X2FyZ3M7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5X2V4cHJzIDo9IHJlc3RfYXJnczsgTmlsKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChzY29wZV9uYW1lKSAoIXNjb3BlX3ZhbCkpKSBpbiAobGV0IHJlc3VsdCcgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuICghYm9keV9leHBycykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChmaXJzdCAoIWJvZHlfZXhwcnMpKSkgKGVudikpIGVsc2UgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAocmVuZGVyX3RvX2h0bWwgKGUpIChlbnYpKSkgKHN4X3RvX2xpc3QgIWJvZHlfZXhwcnMpKSldKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAoc2NvcGVfbmFtZSkpKSBpbiByZXN1bHQnKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pKSB0aGVuIChsZXQgcHJvdl9uYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IHByb3ZfdmFsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gbGV0IGJvZHlfc3RhcnQgPSAoTnVtYmVyIDMuMCkgaW4gbGV0IGJvZHlfY291bnQgPSAocHJpbV9jYWxsIFwiLVwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMy4wKV0pIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChwcm92X25hbWUpIChwcm92X3ZhbCkpKSBpbiAobGV0IHJlc3VsdCcgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtib2R5X2NvdW50OyAoTnVtYmVyIDEuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpIChib2R5X3N0YXJ0KSkpIChlbnYpKSBlbHNlIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGkgLT4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoaSkpKSAoZW52KSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFtib2R5X3N0YXJ0OyAocHJpbV9jYWxsIFwiK1wiIFtib2R5X3N0YXJ0OyBib2R5X2NvdW50XSldKSkpKV0pKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChwcm92X25hbWUpKSkgaW4gcmVzdWx0JykpKSkgZWxzZSAocmVuZGVyX3ZhbHVlX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpKSkpKSkpKSkpKSkpKSlcblxuKCogcmVuZGVyLWxhbWJkYS1odG1sICopXG5hbmQgcmVuZGVyX2xhbWJkYV9odG1sIGYgYXJncyBlbnYgPVxuICAobGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yX2VhY2hfaW5kZXhlZCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2k7IHBdIC0+IChmdW4gaSBwIC0+IChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChudGggKGFyZ3MpIChpKSkpKSBpIHAgfCBfIC0+IE5pbCkpKSAoKGxhbWJkYV9wYXJhbXMgKGYpKSkpKSBpbiAocmVuZGVyX3RvX2h0bWwgKChsYW1iZGFfYm9keSAoZikpKSAobG9jYWwpKSkpXG5cbigqIHJlbmRlci1odG1sLWNvbXBvbmVudCAqKVxuYW5kIHJlbmRlcl9odG1sX2NvbXBvbmVudCBjb21wIGFyZ3MgZW52ID1cbiAgKGxldCBrd2FyZ3MgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBjaGlsZHJlbiA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBhcmcgLT4gKGxldCBza2lwID0gKGdldCAoc3RhdGUpICgoU3RyaW5nIFwic2tpcFwiKSkpIGluIChpZiBzeF90cnV0aHkgKHNraXApIHRoZW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgZmFsc2UpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGFyZykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgWyhwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSk7IChsZW4gKGFyZ3MpKV0pKSkgdGhlbiAobGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSkpKSkgKGVudikpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Iga3dhcmdzIChrZXl3b3JkX25hbWUgKGFyZykpIHZhbCcpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCB0cnVlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGNoaWxkcmVuIDo9IHN4X2FwcGVuZF9iICFjaGlsZHJlbiBhcmc7IE5pbCkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSkpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpXCIpKSAoTnVtYmVyIDAuMCk7IEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJza2lwXCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCBhcmdzKSkpIGluIChsZXQgbG9jYWwgPSAoZW52X21lcmdlICgoY29tcG9uZW50X2Nsb3N1cmUgKGNvbXApKSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgKGlmIHN4X3RydXRoeSAoKGRpY3RfaGFzIChrd2FyZ3MpIChwKSkpIHRoZW4gKGRpY3RfZ2V0IChrd2FyZ3MpIChwKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChjb21wKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoY29tcCkpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgKG1ha2VfcmF3X2h0bWwgKChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKHJlbmRlcl90b19odG1sIChjKSAoZW52KSkpIChzeF90b19saXN0ICFjaGlsZHJlbikpKV0pKSkpIGVsc2UgTmlsKSkgaW4gKHJlbmRlcl90b19odG1sICgoY29tcG9uZW50X2JvZHkgKGNvbXApKSkgKGxvY2FsKSkpKSkpKVxuXG4oKiByZW5kZXItaHRtbC1lbGVtZW50ICopXG5hbmQgcmVuZGVyX2h0bWxfZWxlbWVudCB0YWcgYXJncyBlbnYgPVxuICAobGV0IHBhcnNlZCA9IChwYXJzZV9lbGVtZW50X2FyZ3MgKGFyZ3MpIChlbnYpKSBpbiBsZXQgYXR0cnMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBpc192b2lkID0gKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFt2b2lkX2VsZW1lbnRzX3ZhbDsgdGFnXSkgaW4gKGlmIHN4X3RydXRoeSAoaXNfdm9pZCkgdGhlbiAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8XCIpOyB0YWc7IChyZW5kZXJfYXR0cnMgKGF0dHJzKSk7IChTdHJpbmcgXCIgLz5cIildKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAoKFN0cmluZyBcImVsZW1lbnQtYXR0cnNcIikpIChOaWwpKSkgaW4gKGxldCBjb250ZW50ID0gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAocmVuZGVyX3RvX2h0bWwgKGMpIChlbnYpKSkgKHN4X3RvX2xpc3QgY2hpbGRyZW4pKSldKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gc3ByZWFkX2RpY3QgLT4gaWdub3JlICgobWVyZ2Vfc3ByZWFkX2F0dHJzIChhdHRycykgKHNwcmVhZF9kaWN0KSkpKSAoc3hfdG9fbGlzdCAoc2NvcGVfZW1pdHRlZCAoKFN0cmluZyBcImVsZW1lbnQtYXR0cnNcIikpKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKChTdHJpbmcgXCJlbGVtZW50LWF0dHJzXCIpKSkpIGluIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjxcIik7IHRhZzsgKHJlbmRlcl9hdHRycyAoYXR0cnMpKTsgKFN0cmluZyBcIj5cIik7IGNvbnRlbnQ7IChTdHJpbmcgXCI8L1wiKTsgdGFnOyAoU3RyaW5nIFwiPlwiKV0pKSkpKSkpKVxuXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogV2lyZSB1cCBmb3J3YXJkIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0ICgpID0gcmVuZGVyX3RvX2h0bWxfcmVmIDo9IHJlbmRlcl90b19odG1sXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEJ1ZmZlci1iYXNlZCBzdHJlYW1pbmcgcmVuZGVyZXIg4oCUIHplcm8gaW50ZXJtZWRpYXRlIHN0cmluZyBhbGxvY2F0aW9uICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIEVzY2FwZSBIVE1MIGRpcmVjdGx5IGludG8gYSBidWZmZXIuICopXG5sZXQgZXNjYXBlX2h0bWxfYnVmIGJ1ZiBzID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZhbXA7XCJcbiAgICB8ICc8JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImbHQ7XCJcbiAgICB8ICc+JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImZ3Q7XCJcbiAgICB8ICdcIicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJnF1b3Q7XCJcbiAgICB8IGMgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjXG4gIGRvbmVcblxubGV0IHJlbmRlcl9hdHRyc19idWYgYnVmIGF0dHJzID1cbiAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgaWYgaXNfYm9vbGVhbl9hdHRyIGsgdGhlbiBiZWdpblxuICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJztcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGtcbiAgICAgIGVuZFxuICAgIGVuZCBlbHNlIGlmIHYgPD4gTmlsIHRoZW4gYmVnaW5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGs7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI9XFxcIlwiO1xuICAgICAgZXNjYXBlX2h0bWxfYnVmIGJ1ZiAodmFsdWVfdG9fc3RyaW5nIHYpO1xuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG4gICAgZW5kKSBhdHRyc1xuXG4oKiogUmVuZGVyIHRvIHByZS1hbGxvY2F0ZWQgYnVmZmVyIOKAlCBkZWxlZ2F0ZXMgdG8gdHJhbnNwaWxlZCByZW5kZXJfdG9faHRtbFxuICAgIGFuZCBleHRyYWN0cyB0aGUgc3RyaW5nIHJlc3VsdC4gKilcbmxldCByZW5kZXJfdG9fYnVmIGJ1ZiBleHByIChlbnYgOiBlbnYpID1cbiAgbWF0Y2ggIXJlbmRlcl90b19odG1sX3JlZiBleHByIChFbnYgZW52KSB3aXRoXG4gIHwgU3RyaW5nIHMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgfCBSYXdIVE1MIHMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgfCB2IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAodmFsdWVfdG9fc3RyIHYpXG5cbigqKiBQdWJsaWMgQVBJOiByZW5kZXIgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gKilcbmxldCByZW5kZXJfdG9fYnVmZmVyIGJ1ZiBleHByIGVudiA9IHJlbmRlcl90b19idWYgYnVmIGV4cHIgZW52XG5cbigqKiBDb252ZW5pZW5jZTogcmVuZGVyIHRvIHN0cmluZy4gKilcbmxldCByZW5kZXJfdG9faHRtbF9zdHJlYW1pbmcgZXhwciAoZW52IDogZW52KSA9XG4gIG1hdGNoICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciAoRW52IGVudikgd2l0aFxuICB8IFN0cmluZyBzIC0+IHNcbiAgfCBSYXdIVE1MIHMgLT4gc1xuICB8IHYgLT4gdmFsdWVfdG9fc3RyIHZcblxuKCoqIFRoZSBuYXRpdmUgT0NhbWwgcmVuZGVyZXIg4oCUIHVzZWQgYnkgc3hfc2VydmVyIHdoZW4gU1ggYWRhcHRlciBpc24ndCBsb2FkZWQuICopXG5sZXQgZG9fcmVuZGVyX3RvX2h0bWwgZXhwciAoZW52X3ZhbCA6IHZhbHVlKSA9XG4gIG1hdGNoICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciBlbnZfdmFsIHdpdGhcbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgUmF3SFRNTCBzIC0+IHNcbiAgfCB2IC0+IHZhbHVlX3RvX3N0ciB2XG5cbigqKiBSZW5kZXIgdmlhIHRoZSBTWCBhZGFwdGVyIChyZW5kZXItdG8taHRtbCBmcm9tIGFkYXB0ZXItaHRtbC5zeCkuXG4gICAgRmFsbHMgYmFjayB0byB0aGUgbmF0aXZlIHJlZiBpZiB0aGUgU1ggYWRhcHRlciBpc24ndCBsb2FkZWQuICopXG5sZXQgc3hfcmVuZGVyX3RvX2h0bWwgKHJlbmRlcl9lbnYgOiBlbnYpIGV4cHIgKGV2YWxfZW52IDogZW52KSA9XG4gIGlmIFN4X3R5cGVzLmVudl9oYXMgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgdGhlblxuICAgIGxldCBmbiA9IFN4X3R5cGVzLmVudl9nZXQgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmNla19jYWxsIGZuIChMaXN0IFtleHByOyBFbnYgZXZhbF9lbnZdKSBpblxuICAgIG1hdGNoIHJlc3VsdCB3aXRoIFN0cmluZyBzIC0+IHMgfCBSYXdIVE1MIHMgLT4gcyB8IF8gLT4gdmFsdWVfdG9fc3RyIHJlc3VsdFxuICBlbHNlXG4gICAgZG9fcmVuZGVyX3RvX2h0bWwgZXhwciAoRW52IGV2YWxfZW52KVxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFNldHVwIOKAlCBiaW5kIHJlbmRlciBwcmltaXRpdmVzIGluIGFuIGVudiBhbmQgd2lyZSB1cCB0aGUgcmVmICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGlzX2h0bWxfdGFnIG5hbWUgPSBMaXN0Lm1lbSBuYW1lIGh0bWxfdGFnc19saXN0XG5sZXQgaXNfdm9pZCBuYW1lID0gTGlzdC5tZW0gbmFtZSB2b2lkX2VsZW1lbnRzX2xpc3RcblxuKCogZXNjYXBlX2h0bWxfc3RyOiB0YWtlcyByYXcgT0NhbWwgc3RyaW5nLCByZXR1cm5zIHJhdyBzdHJpbmcg4oCUIGZvciBjYWxsZXJzICopXG5sZXQgZXNjYXBlX2h0bWxfc3RyID0gZXNjYXBlX2h0bWxfcmF3XG5cbmxldCBzZXR1cF9yZW5kZXJfZW52IChyYXdfZW52IDogZW52KSA9XG4gIGxldCBlbnYgPSBFbnYgcmF3X2VudiBpblxuICBsZXQgYmluZCBuYW1lIGZuID1cbiAgICBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIHJhd19lbnYgbmFtZSAoTmF0aXZlRm4gKG5hbWUsIGZuKSkpXG4gIGluXG5cbiAgYmluZCBcInJlbmRlci1odG1sXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gLT5cbiAgICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGhcbiAgICAgICAgfCBbZV0gLT4gZVxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IF8gLT4gTGlzdCAoU3ltYm9sIFwiZG9cIiA6OiBleHBycylcbiAgICAgIGluXG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgZW52XG4gICAgfCBbZXhwcl0gLT5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciBlbnZcbiAgICB8IFtleHByOyBFbnYgZV0gLT5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciAoRW52IGUpXG4gICAgfCBfIC0+IFN0cmluZyBcIlwiKTtcblxuICBiaW5kIFwicmVuZGVyLXRvLWh0bWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPlxuICAgICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICAgIGxldCBleHByID0gbWF0Y2ggZXhwcnMgd2l0aFxuICAgICAgICB8IFtlXSAtPiBlXG4gICAgICAgIHwgW10gLT4gTmlsXG4gICAgICAgIHwgXyAtPiBMaXN0IChTeW1ib2wgXCJkb1wiIDo6IGV4cHJzKVxuICAgICAgaW5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciBlbnZcbiAgICB8IFtleHByXSAtPlxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuICAgIHwgW2V4cHI7IEVudiBlXSAtPlxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIChFbnYgZSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiXCIpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZXF1YWwiLCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXkiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDIiLCJmIiwiYTAiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiYm9vbGVhbl9hdHRyc19zZXQiLCJjc3RfYnIiLCJjc3RfY29sIiwiY3N0X2ZpbHRlciIsImNzdF9ociIsImNzdF9pIiwiY3N0X2ltZyIsImNzdF9pbnB1dCIsImNzdF9saW5rIiwiY3N0X21ldGEiLCJjc3Rfc291cmNlIiwiY3N0X3N0eWxlIiwiY3N0X3diciIsImh0bWxfdGFnc19saXN0Iiwidm9pZF9lbGVtZW50c19saXN0IiwiY3N0X2JlZ2luIiwiY3N0X2Nhc2UiLCJjc3RfY29uZCIsImNzdF9kZWZjb21wIiwiY3N0X2RlZmVmZmVjdCIsImNzdF9kZWZpbmUiLCJjc3RfZGVmaXNsYW5kIiwiY3N0X2RlZm1hY3JvIiwiY3N0X2RlZnN0eWxlIiwiY3N0X2RlZnR5cGUiLCJjc3RfZG8iLCJjc3RfZm9yX2VhY2giLCJjc3RfaWYiLCJjc3RfbGV0IiwiY3N0X2xldHJlYyIsImNzdF9tYXAiLCJjc3RfbWFwX2luZGV4ZWQiLCJjc3RfcHJvdmlkZSIsImNzdF9zY29wZSIsImNzdF93aGVuIiwicmVuZGVyX2h0bWxfZm9ybXMiLCJTeF9ydW50aW1lIiwiU3hfdHlwZXMiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9MaXN0IiwiU3hfcGFyc2VyIiwiU3hfcmVmIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTeF92bSIsIlN0ZGxpYl9QcmludGV4YyIsImV2YWxfZXhwciIsImV4cHIiLCJlbnYiLCJjb25kX3NjaGVtZV9wIiwiY3N0IiwicmF3X2h0bWxfY29udGVudCIsInYiLCJzIiwibWFrZV9yYXdfaHRtbCIsInNjb3BlX2VtaXQiLCJ2MSIsInYyIiwiaW5pdCIsImRpY3RfaGFzIiwiYSIsImIiLCJkaWN0X2dldCIsImlzX2NvbXBvbmVudCIsImlzX2lzbGFuZCIsImlzX21hY3JvIiwiaXNfbGFtYmRhIiwiaXNfbmlsIiwicmVuZGVyX2h0bWxfbGFrZV9yZWYiLCJwYXJhbSIsInJlbmRlcl9odG1sX21hcnNoX3JlZiIsInJlbmRlcl9odG1sX2lzbGFuZF9yZWYiLCJyZW5kZXJfaHRtbF9sYWtlIiwiYXJncyIsInJlbmRlcl9odG1sX21hcnNoIiwicmVuZGVyX2h0bWxfaXNsYW5kIiwiY29tcCIsImNla19jYWxsIiwidHJhbXBvbGluZSIsImV4cGFuZF9tYWNybyIsIm0iLCJhcmdzX3ZhbCIsIm1hYyIsImxvY2FsIiwicHMiLCJwIiwiYXMiLCJtYXRjaCIsInJwIiwicHNfcmVzdCIsImFzX3Jlc3QiLCJ0cnlfY2F0Y2giLCJ0cnlfZm4iLCJjYXRjaF9mbiIsImUiLCJtc2ciLCJzZXRfcmVuZGVyX2FjdGl2ZV9iIiwiaXNfYm9vbGVhbl9hdHRyIiwibmFtZSIsImh0bWxfdGFnc192YWwiLCJ2b2lkX2VsZW1lbnRzX3ZhbCIsImJvb2xlYW5fYXR0cnNfdmFsIiwiY3N0X2FtcCIsImNzdF9ndCIsImNzdF9sdCIsImNzdF9xdW90IiwiZXNjYXBlX2h0bWxfcmF3IiwiYnVmIiwiYyIsImVzY2FwZV9odG1sX3ZhbCIsImVzY2FwZV9hdHRyX3ZhbCIsInJlbmRlcl9hdHRycyIsImF0dHJzIiwiZCIsImsiLCJyZW5kZXJfdG9faHRtbF9yZWYiLCJzY29wZV9lbWl0dGVkIiwiY3N0X2NvbnRhaW5zIiwiZGVmaW5pdGlvbl9mb3JtX2V4dGVuc2lvbnMiLCJkZWZpbml0aW9uX2Zvcm1fcCIsIm9yIiwiY3N0X2Fzc29jIiwiY3N0X2luYyIsImNzdF9rZXl3b3JkIiwiY3N0X3NraXAiLCJwYXJzZV9lbGVtZW50X2FyZ3MiLCJjaGlsZHJlbiIsInN0YXRlIiwiYXJnIiwic2tpcCIsImFuZCIsInZhbCIsImV2YWxfY29uZCIsImNsYXVzZXMiLCJldmFsX2NvbmRfc2NoZW1lIiwiY2xhdXNlIiwidGVzdCIsImJvZHkiLCJjc3Rfc2xpY2UiLCJldmFsX2NvbmRfY2xvanVyZSIsImNzdF9saXN0IiwiY3N0X3N5bWJvbCIsInByb2Nlc3NfYmluZGluZ3MiLCJiaW5kaW5ncyIsInBhaXIiLCJjc3RfcmF3IiwiY3N0X3N0YXJ0c193aXRoIiwiaXNfcmVuZGVyX2V4cHJfcCIsImgiLCJuIiwiY3N0X2NsYXNzIiwibWVyZ2Vfc3ByZWFkX2F0dHJzIiwidGFyZ2V0Iiwic3ByZWFkX2RpY3QiLCJrZXkiLCJleGlzdGluZyIsImNzdF9ib29sZWFuIiwiY3N0X2VsZW1lbnRfYXR0cnMiLCJjc3RfZmFsc2UiLCJjc3RfbmlsIiwiY3N0X251bWJlciIsImNzdF9yYXdfaHRtbCIsImNzdF9zcHJlYWQiLCJjc3Rfc3RyaW5nIiwiY3N0X3RodW5rIiwiY3N0X3RydWUiLCJyZW5kZXJfdG9faHRtbCIsImNvdW50ZXIiLCJtYXRjaF92YWwiLCJyZW5kZXJfdmFsdWVfdG9faHRtbCIsInJlbmRlcl9odG1sX2Zvcm1fcCIsImNzdF9kaXYiLCJjc3RfZGl2X2NsYXNzX3N4X3JlbmRlcl9lcnJvcl8iLCJjc3Rfam9pbiIsInJlbmRlcl9saXN0X3RvX2h0bWwiLCJoZWFkIiwieCIsImhhc19mYWxsYmFjayIsImJvZHlfZXhwcnMiLCJmYWxsYmFja19leHByIiwiZXJyIiwiY3N0X3JlcGxhY2UiLCJzYWZlX2VyciIsImJvZHlfc3RhcnQiLCJkaXNwYXRjaF9odG1sX2Zvcm0iLCJjb25kX3ZhbCIsImNzdF9yYW5nZSIsImkiLCJicmFuY2giLCJwbmFtZSIsImNvbGwiLCJpdGVtIiwicHJvdl9uYW1lIiwicHJvdl92YWwiLCJib2R5X2NvdW50IiwicmVzdWx0Iiwic2NvcGVfbmFtZSIsInJlc3RfYXJncyIsInNjb3BlX3ZhbCIsInJlbmRlcl9sYW1iZGFfaHRtbCIsInJlbmRlcl9odG1sX2NvbXBvbmVudCIsImt3YXJncyIsInJlbmRlcl9odG1sX2VsZW1lbnQiLCJ0YWciLCJwYXJzZWQiLCJpc192b2lkIiwiY29udGVudCIsImVzY2FwZV9odG1sX2J1ZiIsInJlbmRlcl9hdHRyc19idWYiLCJyZW5kZXJfdG9fYnVmIiwicmVuZGVyX3RvX2J1ZmZlciIsInJlbmRlcl90b19odG1sX3N0cmVhbWluZyIsImRvX3JlbmRlcl90b19odG1sIiwiZW52X3ZhbCIsImNzdF9yZW5kZXJfdG9faHRtbCIsInN4X3JlbmRlcl90b19odG1sIiwicmVuZGVyX2VudiIsImV2YWxfZW52IiwiZm4iLCJpc19odG1sX3RhZyIsInNldHVwX3JlbmRlcl9lbnYiLCJyYXdfZW52IiwiYmluZCIsInNyYyIsImV4cHJzIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUgsR0FBQUMsSUFBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDFIN0UiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3Mzc0NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc29vX3J1bnRpbWUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjczNzU3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Impzb29fcnVudGltZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogSnNfb2Zfb2NhbWwgbGlicmFyeVxuICogaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuICogZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4gKilcblxubW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHJ1bnRpbWVfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNvb19ydW50aW1lX3ZhbHVlXCJcbiAgKCoqIFtydW50aW1lX3ZhbHVlIFwiRk9PXCJdIHJldHVybnMgdGhlIEphdmFTY3JpcHQgdmFsdWUgRk9PIHByb3ZpZGVkIGJ5IHRoZSBKYXZhU2NyaXB0IHJ1bnRpbWUgKHdpdGggJy8vUHJvdmlkZXM6IEZPTycpLiBUaGUgc3RyaW5nIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgbGl0ZXJhbC4gKilcblxuICBleHRlcm5hbCBjdXN0b21faWRlbnRpZmllciA6IE9iai50IC0+IHN0cmluZyA9IFwiY2FtbF9jdXN0b21faWRlbnRpZmllclwiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIHR5cGUgcmVkaXJlY3Rpb25cblxuICBleHRlcm5hbCByZWRpcmVjdF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gaW50bzpvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvblxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3RcIlxuXG4gIGV4dGVybmFsIHJlc3RvcmVfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICB0eXBlIGVmZmVjdHNfYmFja2VuZCA9XG4gICAgICBbIGBEaXNhYmxlZFxuICAgICAgfCBgQ3BzXG4gICAgICB8IGBEb3VibGVfdHJhbnNsYXRpb25cbiAgICAgIF1cblxuICAgIGV4dGVybmFsIGVmZmVjdHNfIDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfanNvb19mbGFnc19lZmZlY3RzXCJcblxuICAgIGxldCBlZmZlY3RzICgpID1cbiAgICAgIG1hdGNoIGVmZmVjdHNfICgpIHdpdGhcbiAgICAgIHwgXCJkaXNhYmxlZFwiIC0+IGBEaXNhYmxlZFxuICAgICAgfCBcImNwc1wiIC0+IGBDcHNcbiAgICAgIHwgXCJkb3VibGUtdHJhbnNsYXRpb25cIiAtPiBgRG91YmxlX3RyYW5zbGF0aW9uXG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YVNjcmlwdCBlcnJvciB0byBhbiBPQ2FtbCBleGNlcHRpb24uICBpZiBbZm9yY2UgPSBmYWxzZV0gYW5kIGFcbiAgICBKYXZhU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YVNjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgdHJhY2UsIGVzcGVjaWFsbHkgd2hlbiBzb3VyY2VtYXAgaXMgZW5hYmxlZC4gKilcblxuICBleGNlcHRpb24gRXhuIG9mIHRcbiAgKCoqIFRoZSBbRXJyb3JdIGV4Y2VwdGlvbiB3cmFwIGphdmFzY3JpcHQgZXhjZXB0aW9ucyB3aGVuIGNhdWdodCBieSBPQ2FtbCBjb2RlLlxuICAgICAgSW4gY2FzZSB0aGUgamF2YXNjcmlwdCBleGNlcHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIGphdmFzY3JpcHQgW0Vycm9yXSxcbiAgICAgIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhbmQgd3JhcHBlZCBpbnRvIGEgW0ZhaWx1cmVdIGV4Y2VwdGlvbi5cbiAgKilcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHRcblxuICBleGNlcHRpb24gRXhuIG9mIHRcblxuICBsZXQgXyA9IENhbGxiYWNrLnJlZ2lzdGVyX2V4Y2VwdGlvbiBcImpzRXJyb3JcIiAoRXhuIChPYmoubWFnaWMgW3x8XSkpXG5cbiAgZXh0ZXJuYWwgcmFpc2VfIDogdCAtPiAnYSA9IFwiY2FtbF90aHJvd19qc19leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb24ndCB3YW50IHRoZSBvY2FtbCBjb21waWxlclxuICAgICB0byBjb21wbGFpbiBhYm91dCB0aGVzZSBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcblxuICBleHRlcm5hbCBjYW1sX3N0cmluZ19vZl9hcnJheSA6ICdhIGFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIHN0cmluZ19vZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XCJcblxuICBleHRlcm5hbCBieXRlc19vZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBieXRlcyA9IFwiY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdWludDhBcnJheV9vZl9ieXRlcyA6IGJ5dGVzIC0+IHVpbnQ4QXJyYXkgPSBcImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuXG5tb2R1bGUgRWZmZWN0IDogc2lnXG4gIGV4dGVybmFsIGFzc3VtZV9ub19wZXJmb3JtIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2Fzc3VtZV9ub19wZXJmb3JtXCJcbiAgKCoqIFBhc3NpbmcgYSBmdW5jdGlvbiBbZl0gYXMgYXJndW1lbnQgb2YgYGFzc3VtZV9ub19wZXJmb3JtYCBndWFyYW50ZWVzIHRoYXQsXG4gICAgICB3aGVuIGNvbXBpbGluZyB3aXRoIGAtLWVmZmVjdHM9ZG91YmxlLXRyYW5zbGF0aW9uYCwgdGhlIGRpcmVjdC1zdHlsZVxuICAgICAgdmVyc2lvbiBvZiBbZl0gaXMgY2FsbGVkLCB3aGljaCBpcyBmYXN0ZXIgdGhhbiB0aGUgQ1BTIHZlcnNpb24uIEFzIGFcbiAgICAgIGNvbnNlcXVlbmNlLCBwZXJmb3JtaW5nIGFuIGVmZmVjdCBpbiBhIHRyYW5zaXRpdmUgY2FsbGVlIG9mIFtmXSB3aWxsXG4gICAgICByYWlzZSBgRWZmZWN0LlVuaGFuZGxlZGAsIHJlZ2FyZGxlc3Mgb2YgYW55IGVmZmVjdCBoYW5kbGVycyBpbnN0YWxsZWRcbiAgICAgIGJlZm9yZSB0aGUgY2FsbCB0byBgYXNzdW1lX25vX3BlcmZvcm1gLCB1bmxlc3MgYSBuZXcgZWZmZWN0IGhhbmRsZXIgd2FzXG4gICAgICBpbnN0YWxsZWQgaW4gdGhlIG1lYW50aW1lLlxuXG4gICAgICBUaGlzIGJlaGF2aW91ciBpcyB0aGUgc2FtZSB3aGVuIGRvdWJsZSB0cmFuc2xhdGlvbiBpcyBkaXNhYmxlZC4gKilcbmVuZCA9IHN0cnVjdFxuICBleHRlcm5hbCBhc3N1bWVfbm9fcGVyZm9ybSA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9hc3N1bWVfbm9fcGVyZm9ybVwiXG5lbmRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJBc3NlcnRfZmFpbHVyZSIsIkpzb29fcnVudGltZV9SdW50aW1lX3ZlcnNpb24iLCJTdGRsaWJfQ2FsbGJhY2siLCJlZmZlY3RzIiwicGFyYW0iLCJtYXRjaCIsInZlcnNpb24iLCJnaXRfdmVyc2lvbiIsIkV4biIsIkVycm9yIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsK0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUEsUUFBQUMsUUNpS1k7QUFBQSxJQUFXLG9CQUVOO0FBQUEsSUFGTSx5QkFDRDtBQUFBLElBREM7QUFBQSxLQUlWO0FBQUEsSUFEbUI7QUFBQSxHQUNQO0FBQUE7QUFBQSxJQUFBQyxVRHJLekI7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLEdDd01VO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUE0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR4TXRFIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzM4MDUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNfb2Zfb2NhbWwuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9qc19vZl9vY2FtbC9pbXBvcnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBKc19vZl9vY2FtbFxuICogaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuICogZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4gKilcblxubW9kdWxlIFBvbHkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuXG4gIGV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcblxuICBleHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcblxuICBleHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbiAgZXh0ZXJuYWwgZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZW5kXG5cbm1vZHVsZSBJbnRfcmVwbGFjZV9wb2x5bW9ycGhpY19jb21wYXJlID0gc3RydWN0XG4gIGV4dGVybmFsICggPCApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuXG4gIGV4dGVybmFsICggPD0gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA8PiApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPSApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPiApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuXG4gIGV4dGVybmFsICggPj0gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbiAgZXh0ZXJuYWwgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbiAgbGV0IG1heCAoeCA6IGludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbiAgbGV0IG1pbiAoeCA6IGludCkgeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5lbmRcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuXG4gIGxldCBlcXVhbCAoeCA6IHN0cmluZykgKHkgOiBzdHJpbmcpID0gUG9seS5lcXVhbCB4IHlcbmVuZFxuXG5tb2R1bGUgQ2hhciA9IHN0cnVjdFxuICBpbmNsdWRlIENoYXJcblxuICBsZXQgZXF1YWwgKHggOiBjaGFyKSAoeSA6IGNoYXIpID0gUG9seS5lcXVhbCB4IHlcbmVuZFxuXG5pbmNsdWRlIEludF9yZXBsYWNlX3BvbHltb3JwaGljX2NvbXBhcmVcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0NoYXIiLCJtYXgiLCJ4IiwieSIsIm1pbiIsIm1ha2UiLCJpbml0IiwiZW1wdHkiLCJvZl9ieXRlcyIsInRvX2J5dGVzIiwiYmxpdCIsImNvbmNhdCIsImNhdCIsImNvbXBhcmUiLCJzdGFydHNfd2l0aCIsImVuZHNfd2l0aCIsImNvbnRhaW5zX2Zyb20iLCJyY29udGFpbnNfZnJvbSIsImNvbnRhaW5zIiwic3ViIiwic3BsaXRfb25fY2hhciIsIm1hcCIsIm1hcGkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwiZm9yX2FsbCIsImV4aXN0cyIsInRyaW0iLCJlc2NhcGVkIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsIml0ZXIiLCJpdGVyaSIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9mcm9tIiwicmluZGV4X2Zyb21fb3B0IiwiaW5kZXgiLCJpbmRleF9vcHQiLCJyaW5kZXgiLCJyaW5kZXhfb3B0IiwidG9fc2VxIiwidG9fc2VxaSIsIm9mX3NlcSIsImdldF91dGZfOF91Y2hhciIsImlzX3ZhbGlkX3V0Zl84IiwiZ2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsImdldF91aW50OCIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9uZSIsImdldF91aW50MTZfYmUiLCJnZXRfdWludDE2X2xlIiwiZ2V0X2ludDE2X25lIiwiZ2V0X2ludDE2X2JlIiwiZ2V0X2ludDE2X2xlIiwiZ2V0X2ludDMyX25lIiwiaGFzaCIsInNlZWRlZF9oYXNoIiwiZ2V0X2ludDMyX2JlIiwiZ2V0X2ludDMyX2xlIiwiZ2V0X2ludDY0X25lIiwiZ2V0X2ludDY0X2JlIiwiZ2V0X2ludDY0X2xlIiwiZXF1YWwiLCJjaHIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDcUR3QixxQkFBdUI7QUFBQSxZQUFBQyxJQUFBRixHQUFBQyxHQUV2QixxQkFBdUI7QUFBQTtBQUFBLElBQUFFLE9EdkQvQztBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBekMsWUFBQTtBQUFBLElBQUFFLG9CQUFBO0FBQUEsSUFBQUQsb0JBQUE7QUFBQSxJQUFBaEIsWUFBQTtBQUFBLElBQUFpRCxnQkFBQTtBQUFBLElBQUFELFNBQUE7QUFBQSxZQUFBTyxRQUFBbEUsR0FBQUMsR0NtRW9DLHVCQUFjO0FBQUEsR0RuRWxEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzM5NzcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNfb2Zfb2NhbWwuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9qc19vZl9vY2FtbC9qcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEpzX29mX29jYW1sIGxpYnJhcnlcbiAqIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbiAqIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4gKiBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbiAqKVxub3BlbiEgSW1wb3J0XG5cbigqIFRoaXMgbG9jYWwgbW9kdWxlIFtKc10gaXMgbmVlZGVkIHNvIHRoYXQgdGhlIHBweF9qcyBleHRlbnNpb24gd29yayB3aXRoaW4gdGhhdCBmaWxlLiAqKVxubW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgKydhIHRcblxuICB0eXBlICgtJ2EsICsnYikgbWV0aF9jYWxsYmFja1xuXG4gIG1vZHVsZSBVbnNhZmUgPSBzdHJ1Y3RcbiAgICB0eXBlIHRvcFxuXG4gICAgdHlwZSBhbnkgPSB0b3AgdFxuXG4gICAgdHlwZSBhbnlfanNfYXJyYXkgPSBhbnlcblxuICAgIGV4dGVybmFsIGluamVjdCA6ICdhIC0+IGFueSA9IFwiJWlkZW50aXR5XCJcblxuICAgIGV4dGVybmFsIGNvZXJjZSA6IF8gdCAtPiBfIHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgICBleHRlcm5hbCBnZXQgOiAnYSAtPiAnYiAtPiAnYyA9IFwiY2FtbF9qc19nZXRcIlxuXG4gICAgZXh0ZXJuYWwgc2V0IDogJ2EgLT4gJ2IgLT4gJ2MgLT4gdW5pdCA9IFwiY2FtbF9qc19zZXRcIlxuXG4gICAgZXh0ZXJuYWwgZGVsZXRlIDogJ2EgLT4gJ2IgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbCA6ICdhIC0+ICdiIC0+IGFueSBhcnJheSAtPiAnYyA9IFwiY2FtbF9qc19jYWxsXCJcblxuICAgIGV4dGVybmFsIGZ1bl9jYWxsIDogJ2EgLT4gYW55IGFycmF5IC0+ICdiID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbCA6ICdhIC0+IHN0cmluZyAtPiBhbnkgYXJyYXkgLT4gJ2IgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICAgIGV4dGVybmFsIG5ld19vYmogOiAnYSAtPiBhbnkgYXJyYXkgLT4gJ2IgPSBcImNhbWxfanNfbmV3XCJcblxuICAgIGV4dGVybmFsIG5ld19vYmpfYXJyIDogJ2EgLT4gYW55X2pzX2FycmF5IC0+ICdiID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICAgIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiBhbnkpIGFycmF5IC0+ICdhID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiAnYSAtPiAnYiAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogJ2EgLT4gJ2IgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gICAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwganNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19leHByXCJcblxuICAgIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gICAgbGV0IGdsb2JhbCA9IHB1cmVfanNfZXhwciBcImdsb2JhbFRoaXNcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlXCJcblxuICAgIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAgIChhbnlfanNfYXJyYXkgLT4gJ2IpIC0+ICgnYywgYW55X2pzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICAgKCdiIC0+IGFueV9qc19hcnJheSAtPiAnYSkgLT4gKCdiLCBhbnlfanNfYXJyYXkgLT4gJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gICAgZXh0ZXJuYWwgcnVudGltZV92YWx1ZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc29vX3J1bnRpbWVfdmFsdWVcIlxuXG4gICAgKCogREVQUkVDQVRFRCAqKVxuICAgIGV4dGVybmFsIHZhcmlhYmxlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX3ZhclwiXG4gIGVuZFxuXG4gICgqKioqKVxuXG4gIHR5cGUgJ2Egb3B0ID0gJ2FcblxuICB0eXBlICdhIG9wdGRlZiA9ICdhXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBsZXQgbnVsbCA6ICdhIG9wdCA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJudWxsXCJcblxuICBleHRlcm5hbCBzb21lIDogJ2EgLT4gJ2Egb3B0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCB1bmRlZmluZWQgOiAnYSBvcHRkZWYgPSBVbnNhZmUucHVyZV9qc19leHByIFwidW5kZWZpbmVkXCJcblxuICBleHRlcm5hbCBkZWYgOiAnYSAtPiAnYSBvcHRkZWYgPSBcIiVpZGVudGl0eVwiXG5cbiAgbW9kdWxlIHR5cGUgT1BUID0gc2lnXG4gICAgdHlwZSAnYSB0XG5cbiAgICB2YWwgZW1wdHkgOiAnYSB0XG5cbiAgICB2YWwgcmV0dXJuIDogJ2EgLT4gJ2EgdFxuXG4gICAgdmFsIG1hcCA6ICdhIHQgLT4gKCdhIC0+ICdiKSAtPiAnYiB0XG5cbiAgICB2YWwgYmluZCA6ICdhIHQgLT4gKCdhIC0+ICdiIHQpIC0+ICdiIHRcblxuICAgIHZhbCB0ZXN0IDogJ2EgdCAtPiBib29sXG5cbiAgICB2YWwgaXRlciA6ICdhIHQgLT4gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxuICAgIHZhbCBjYXNlIDogJ2EgdCAtPiAodW5pdCAtPiAnYikgLT4gKCdhIC0+ICdiKSAtPiAnYlxuXG4gICAgdmFsIGdldCA6ICdhIHQgLT4gKHVuaXQgLT4gJ2EpIC0+ICdhXG5cbiAgICB2YWwgb3B0aW9uIDogJ2Egb3B0aW9uIC0+ICdhIHRcblxuICAgIHZhbCB0b19vcHRpb24gOiAnYSB0IC0+ICdhIG9wdGlvblxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuICBlbmRcblxuICBtb2R1bGUgT3B0IDogT1BUIHdpdGggdHlwZSAnYSB0ID0gJ2Egb3B0ID0gc3RydWN0XG4gICAgdHlwZSAnYSB0ID0gJ2Egb3B0XG5cbiAgICBsZXQgZW1wdHkgPSBudWxsXG5cbiAgICBsZXQgcmV0dXJuID0gc29tZVxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICAgbGV0IG1hcCB4IGYgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gbnVsbCBlbHNlIHJldHVybiAoZiB4KVxuXG4gICAgbGV0IGJpbmQgeCBmID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIG51bGwgZWxzZSBmIHhcblxuICAgIGxldCB0ZXN0IHggPSBub3QgKGVxdWFscyB4IG51bGwpXG5cbiAgICBsZXQgaXRlciB4IGYgPSBpZiBub3QgKGVxdWFscyB4IG51bGwpIHRoZW4gZiB4XG5cbiAgICBsZXQgY2FzZSB4IGYgZyA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBmICgpIGVsc2UgZyB4XG5cbiAgICBsZXQgZ2V0IHggZiA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBmICgpIGVsc2UgeFxuXG4gICAgbGV0IG9wdGlvbiB4ID1cbiAgICAgIG1hdGNoIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGVtcHR5XG4gICAgICB8IFNvbWUgeCAtPiByZXR1cm4geFxuXG4gICAgbGV0IHRvX29wdGlvbiB4ID0gY2FzZSB4IChmdW4gKCkgLT4gTm9uZSkgKGZ1biB4IC0+IFNvbWUgeClcbiAgZW5kXG5cbiAgbW9kdWxlIE9wdGRlZiA6IE9QVCB3aXRoIHR5cGUgJ2EgdCA9ICdhIG9wdGRlZiA9IHN0cnVjdFxuICAgIHR5cGUgJ2EgdCA9ICdhIG9wdGRlZlxuXG4gICAgbGV0IGVtcHR5ID0gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmV0dXJuID0gZGVmXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgICBsZXQgbWFwIHggZiA9IGlmIHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQgdGhlbiB1bmRlZmluZWQgZWxzZSByZXR1cm4gKGYgeClcblxuICAgIGxldCBiaW5kIHggZiA9IGlmIHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQgdGhlbiB1bmRlZmluZWQgZWxzZSBmIHhcblxuICAgIGxldCB0ZXN0IHggPSBub3QgKHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQpXG5cbiAgICBsZXQgaXRlciB4IGYgPSBpZiBub3QgKHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQpIHRoZW4gZiB4XG5cbiAgICBsZXQgY2FzZSB4IGYgZyA9IGlmIHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQgdGhlbiBmICgpIGVsc2UgZyB4XG5cbiAgICBsZXQgZ2V0IHggZiA9IGlmIHN0cmljdF9lcXVhbHMgeCB1bmRlZmluZWQgdGhlbiBmICgpIGVsc2UgeFxuXG4gICAgbGV0IG9wdGlvbiB4ID1cbiAgICAgIG1hdGNoIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGVtcHR5XG4gICAgICB8IFNvbWUgeCAtPiByZXR1cm4geFxuXG4gICAgbGV0IHRvX29wdGlvbiB4ID0gY2FzZSB4IChmdW4gKCkgLT4gTm9uZSkgKGZ1biB4IC0+IFNvbWUgeClcbiAgZW5kXG5cbiAgKCoqKiopXG5cbiAgbGV0IGNvZXJjZSB4IGYgZyA9IE9wdC5nZXQgKGYgeCkgKGZ1biAoKSAtPiBnIHgpXG5cbiAgbGV0IGNvZXJjZV9vcHQgeCBmIGcgPSBPcHQuZ2V0IChPcHQuYmluZCB4IGYpIChmdW4gKCkgLT4gZyB4KVxuXG4gICgqKioqKVxuXG4gIHR5cGUgKydhIG1ldGhcblxuICB0eXBlICsnYSBnZW5fcHJvcFxuXG4gIHR5cGUgJ2EgcmVhZG9ubHlfcHJvcCA9IDwgZ2V0IDogJ2EgPiBnZW5fcHJvcFxuXG4gIHR5cGUgJ2Egd3JpdGVvbmx5X3Byb3AgPSA8IHNldCA6ICdhIC0+IHVuaXQgPiBnZW5fcHJvcFxuXG4gIHR5cGUgJ2EgcHJvcCA9IDwgZ2V0IDogJ2EgOyBzZXQgOiAnYSAtPiB1bml0ID4gZ2VuX3Byb3BcblxuICB0eXBlICdhIG9wdGRlZl9wcm9wID0gPCBnZXQgOiAnYSBvcHRkZWYgOyBzZXQgOiAnYSAtPiB1bml0ID4gZ2VuX3Byb3BcblxuICB0eXBlICsnYSBjb25zdHJcblxuICAoKioqKilcblxuICB0eXBlICdhIGNhbGxiYWNrID0gKHVuaXQsICdhKSBtZXRoX2NhbGxiYWNrXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5cbiAgKCoqKiopXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAoKioqKilcblxuICBsZXQgX3RydWUgPSBVbnNhZmUucHVyZV9qc19leHByIFwidHJ1ZVwiXG5cbiAgbGV0IF9mYWxzZSA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJmYWxzZVwiXG5cbiAgdHlwZSBtYXRjaF9yZXN1bHRfaGFuZGxlXG5cbiAgdHlwZSBzdHJpbmdfYXJyYXlcblxuICBjbGFzcyB0eXBlIG51bWJlciA9IG9iamVjdFxuICAgIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1N0cmluZ19yYWRpeCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9Mb2NhbGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9GaXhlZCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9FeHBvbmVudGlhbCA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0V4cG9uZW50aWFsX2RpZ2l0cyA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9QcmVjaXNpb24gOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuICBlbmRcblxuICBhbmQganNfc3RyaW5nID0gb2JqZWN0XG4gICAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHZhbHVlT2YgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY2hhckF0IDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjaGFyQ29kZUF0IDogaW50IC0+IG51bWJlciB0IG1ldGhcblxuICAgIG1ldGhvZCBjb2RlUG9pbnRBdCA6IGludCAtPiBudW1iZXIgdCBvcHRkZWYgbWV0aFxuXG4gICAgKCogVGhpcyBtYXkgcmV0dXJuIE5hTi4uLiAqKVxuICAgIG1ldGhvZCBjb25jYXQgOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY29uY2F0XzIgOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY29uY2F0XzMgOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY29uY2F0XzQgOlxuICAgICAganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGluZGV4T2YgOiBqc19zdHJpbmcgdCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGluZGV4T2ZfZnJvbSA6IGpzX3N0cmluZyB0IC0+IGludCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGxhc3RJbmRleE9mIDoganNfc3RyaW5nIHQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBsYXN0SW5kZXhPZl9mcm9tIDoganNfc3RyaW5nIHQgLT4gaW50IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgbG9jYWxlQ29tcGFyZSA6IGpzX3N0cmluZyB0IC0+IG51bWJlciB0IG1ldGhcblxuICAgIG1ldGhvZCBfbWF0Y2ggOiByZWdFeHAgdCAtPiBtYXRjaF9yZXN1bHRfaGFuZGxlIHQgb3B0IG1ldGhcblxuICAgIG1ldGhvZCBub3JtYWxpemUgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgbm9ybWFsaXplX2Zvcm0gOiBub3JtYWxpemF0aW9uIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHJlcGxhY2UgOiByZWdFeHAgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgcmVwbGFjZV9zdHJpbmcgOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc2VhcmNoIDogcmVnRXhwIHQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBzbGljZSA6IGludCAtPiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNsaWNlX2VuZCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3BsaXQgOiBqc19zdHJpbmcgdCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3BsaXRfbGltaXRlZCA6IGpzX3N0cmluZyB0IC0+IGludCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3BsaXRfcmVnRXhwIDogcmVnRXhwIHQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0X3JlZ0V4cExpbWl0ZWQgOiByZWdFeHAgdCAtPiBpbnQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHN1YnN0cmluZyA6IGludCAtPiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHN1YnN0cmluZ190b0VuZCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9Mb3dlckNhc2UgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9Mb2NhbGVMb3dlckNhc2UgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9VcHBlckNhc2UgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9Mb2NhbGVVcHBlckNhc2UgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdHJpbSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBsZW5ndGggOiBpbnQgcmVhZG9ubHlfcHJvcFxuICBlbmRcblxuICBhbmQgcmVnRXhwID0gb2JqZWN0XG4gICAgbWV0aG9kIGV4ZWMgOiBqc19zdHJpbmcgdCAtPiBtYXRjaF9yZXN1bHRfaGFuZGxlIHQgb3B0IG1ldGhcblxuICAgIG1ldGhvZCB0ZXN0IDoganNfc3RyaW5nIHQgLT4gYm9vbCB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzb3VyY2UgOiBqc19zdHJpbmcgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgZ2xvYmFsIDogYm9vbCB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBpZ25vcmVDYXNlIDogYm9vbCB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBtdWx0aWxpbmUgOiBib29sIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIGxhc3RJbmRleCA6IGludCBwcm9wXG4gIGVuZFxuXG4gIGFuZCBub3JtYWxpemF0aW9uID0ganNfc3RyaW5nXG5cbiAgdHlwZSBudW1iZXJfdCA9IG51bWJlciB0XG5cbiAgKCogc3RyaW5nIGlzIHVzZWQgYnkgcHB4X2pzLCBpdCBuZWVkcyB0byBjb21lIGJlZm9yZSBhbnkgdXNlIG9mIHRoZVxuICAgICBuZXcgc3ludGF4IGluIHRoaXMgZmlsZSAqKVxuICBleHRlcm5hbCBzdHJpbmcgOiBzdHJpbmcgLT4ganNfc3RyaW5nIHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiBqc19zdHJpbmcgdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBsZXQgbmZjID0gc3RyaW5nIFwiTkZDXCJcblxuICBsZXQgbmZkID0gc3RyaW5nIFwiTkZEXCJcblxuICBsZXQgbmZrYyA9IHN0cmluZyBcIk5GS0NcIlxuXG4gIGxldCBuZmtkID0gc3RyaW5nIFwiTkZLRFwiXG5lbmRcblxuaW5jbHVkZSBKc1xuXG5jbGFzcyB0eXBlIHN0cmluZ19jb25zdHIgPSBvYmplY3RcbiAgbWV0aG9kIGZyb21DaGFyQ29kZSA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5lbmRcblxubGV0IHN0cmluZ19jb25zdHIgPSBVbnNhZmUuZ2xvYmFsIyMuX1N0cmluZ1xuXG5sZXQgcmVnRXhwID0gVW5zYWZlLmdsb2JhbCMjLl9SZWdFeHBcblxubGV0IHJlZ0V4cF9jb3B5ID0gcmVnRXhwXG5cbmxldCByZWdFeHBfd2l0aEZsYWdzID0gcmVnRXhwXG5cbmNsYXNzIHR5cGUgWydhXSBqc19hcnJheSA9IG9iamVjdFxuICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCBjb25jYXQgOiAnYSBqc19hcnJheSB0IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBqb2luIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCBwb3AgOiAnYSBvcHRkZWYgbWV0aFxuXG4gIG1ldGhvZCBwdXNoIDogJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgcHVzaF8yIDogJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgcHVzaF8zIDogJ2EgLT4gJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgcHVzaF80IDogJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgcmV2ZXJzZSA6ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzaGlmdCA6ICdhIG9wdGRlZiBtZXRoXG5cbiAgbWV0aG9kIHNsaWNlIDogaW50IC0+IGludCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc2xpY2VfZW5kIDogaW50IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzb3J0IDogKCdhIC0+ICdhIC0+IG51bWJlcl90KSBjYWxsYmFjayAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc29ydF9hc1N0cmluZ3MgOiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlIDogaW50IC0+IGludCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzEgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfMiA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV8zIDogaW50IC0+IGludCAtPiAnYSAtPiAnYSAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzQgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIC0+ICdhIC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0IDogJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgdW5zaGlmdF8yIDogJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgdW5zaGlmdF8zIDogJ2EgLT4gJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2QgdW5zaGlmdF80IDogJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gaW50IG1ldGhcblxuICBtZXRob2Qgc29tZSA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiBib29sIHQpIGNhbGxiYWNrIC0+IGJvb2wgdCBtZXRoXG5cbiAgbWV0aG9kIGV2ZXJ5IDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IGJvb2wgdCkgY2FsbGJhY2sgLT4gYm9vbCB0IG1ldGhcblxuICBtZXRob2QgZm9yRWFjaCA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0IG1ldGhcblxuICBtZXRob2QgbWFwIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdiKSBjYWxsYmFjayAtPiAnYiBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2QgZmlsdGVyIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IGJvb2wgdCkgY2FsbGJhY2sgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZV9pbml0IDogKCdiIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdiKSBjYWxsYmFjayAtPiAnYiAtPiAnYiBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZSA6ICgnYSAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYSkgY2FsbGJhY2sgLT4gJ2EgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2VSaWdodF9pbml0IDpcbiAgICAoJ2IgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiIC0+ICdiIG1ldGhcblxuICBtZXRob2QgcmVkdWNlUmlnaHQgOiAoJ2EgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2EpIGNhbGxiYWNrIC0+ICdhIG1ldGhcblxuICBtZXRob2QgbGVuZ3RoIDogaW50IHByb3BcbmVuZFxuXG5sZXQgb2JqZWN0X2NvbnN0cnVjdG9yID0gVW5zYWZlLmdsb2JhbCMjLl9PYmplY3RcblxubGV0IG9iamVjdF9rZXlzIG8gOiBqc19zdHJpbmcgdCBqc19hcnJheSB0ID0gb2JqZWN0X2NvbnN0cnVjdG9yIyNrZXlzIG9cblxubGV0IGFycmF5X2NvbnN0cnVjdG9yID0gVW5zYWZlLmdsb2JhbCMjLl9BcnJheVxuXG5sZXQgYXJyYXlfZW1wdHkgPSBhcnJheV9jb25zdHJ1Y3RvclxuXG5sZXQgYXJyYXlfbGVuZ3RoID0gYXJyYXlfY29uc3RydWN0b3JcblxubGV0IGFycmF5X2dldCA6ICdhICNqc19hcnJheSB0IC0+IGludCAtPiAnYSBvcHRkZWYgPSBVbnNhZmUuZ2V0XG5cbmxldCBhcnJheV9zZXQgOiAnYSAjanNfYXJyYXkgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFVuc2FmZS5zZXRcblxubGV0IGFycmF5X21hcF9wb2x5IDpcbiAgICAnYSAjanNfYXJyYXkgdCAtPiAoJ2EgLT4gaW50IC0+ICdhICNqc19hcnJheSB0IC0+ICdiKSBjYWxsYmFjayAtPiAnYiAjanNfYXJyYXkgdCA9XG4gZnVuIGEgY2IgLT4gKFVuc2FmZS5jb2VyY2UgYSkjI21hcCBjYlxuXG5sZXQgYXJyYXlfbWFwIGYgYSA9IGFycmF5X21hcF9wb2x5IGEgKHdyYXBfY2FsbGJhY2sgKGZ1biB4IF9pZHggXyAtPiBmIHgpKVxuXG5sZXQgYXJyYXlfbWFwaSBmIGEgPSBhcnJheV9tYXBfcG9seSBhICh3cmFwX2NhbGxiYWNrIChmdW4geCBpZHggXyAtPiBmIGlkeCB4KSlcblxuY2xhc3MgdHlwZSBtYXRjaF9yZXN1bHQgPSBvYmplY3RcbiAgaW5oZXJpdCBbanNfc3RyaW5nIHRdIGpzX2FycmF5XG5cbiAgbWV0aG9kIGluZGV4IDogaW50IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgaW5wdXQgOiBqc19zdHJpbmcgdCByZWFkb25seV9wcm9wXG5lbmRcblxubGV0IHN0cl9hcnJheSA6IHN0cmluZ19hcnJheSB0IC0+IGpzX3N0cmluZyB0IGpzX2FycmF5IHQgPSBVbnNhZmUuY29lcmNlXG5cbmxldCBtYXRjaF9yZXN1bHQgOiBtYXRjaF9yZXN1bHRfaGFuZGxlIHQgLT4gbWF0Y2hfcmVzdWx0IHQgPSBVbnNhZmUuY29lcmNlXG5cbmNsYXNzIHR5cGUgZGF0ZSA9IG9iamVjdFxuICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvRGF0ZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9UaW1lU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVEYXRlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZVRpbWVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHZhbHVlT2YgOiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGdldFRpbWUgOiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGdldEZ1bGxZZWFyIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDRnVsbFllYXIgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRNb250aCA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ01vbnRoIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0RGF0ZSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0RhdGUgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXREYXkgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENEYXkgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRIb3VycyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0hvdXJzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0TWludXRlcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ01pbnV0ZXMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRTZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDU2Vjb25kcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldE1pbGxpc2Vjb25kcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ01pbGxpc2Vjb25kcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFRpbWV6b25lT2Zmc2V0IDogaW50IG1ldGhcblxuICBtZXRob2Qgc2V0VGltZSA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0RnVsbFllYXIgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENGdWxsWWVhciA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldE1vbnRoIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDTW9udGggOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXREYXRlIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDRGF0ZSA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldEhvdXJzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDSG91cnMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRNaW51dGVzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDTWludXRlcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFNlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENTZWNvbmRzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0TWlsbGlzZWNvbmRzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDTWlsbGlzZWNvbmRzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgdG9VVENTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvSVNPU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0pTT04gOiAnYSAtPiBqc19zdHJpbmcgdCBtZXRoXG5lbmRcblxuY2xhc3MgdHlwZSBkYXRlX2NvbnN0ciA9IG9iamVjdFxuICBtZXRob2QgcGFyc2UgOiBqc19zdHJpbmcgdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfbW9udGggOiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19kYXkgOiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19ob3VyIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19taW4gOiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19zZWMgOiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfbXMgOiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBub3cgOiBudW1iZXJfdCBtZXRoXG5lbmRcblxubGV0IGRhdGVfY29uc3RyID0gVW5zYWZlLmdsb2JhbCMjLl9EYXRlXG5cbmxldCBkYXRlIDogZGF0ZV9jb25zdHIgdCA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX25vdyA6IGRhdGUgdCBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9mcm9tVGltZVZhbHVlIDogKG51bWJlcl90IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbW9udGggOiAoaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX2RheSA6IChpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX2hvdXIgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbWluIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9zZWMgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9tcyA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPVxuICBkYXRlX2NvbnN0clxuXG5jbGFzcyB0eXBlIG1hdGggPSBvYmplY3RcbiAgbWV0aG9kIF9FIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfTE4yIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfTE4xMCA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xPRzJFIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfTE9HMTBFIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfUEkgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9TUVJUMV8yXyA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX1NRUlQyIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBhYnMgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGFjb3MgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGFzaW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGF0YW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGF0YW4yIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBjZWlsIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBjb3MgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGV4cCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZmxvb3IgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGxvZyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWF4IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtYXhfMyA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWF4XzQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1pbiA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWluXzMgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1pbl80IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBwb3cgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHJhbmRvbSA6IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgcm91bmQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNpbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc3FydCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgdGFuIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuZW5kXG5cbmxldCBtYXRoID0gVW5zYWZlLmdsb2JhbCMjLl9NYXRoXG5cbmNsYXNzIHR5cGUgZXJyb3IgPSBvYmplY3RcbiAgbWV0aG9kIG5hbWUgOiBqc19zdHJpbmcgdCBwcm9wXG5cbiAgbWV0aG9kIG1lc3NhZ2UgOiBqc19zdHJpbmcgdCBwcm9wXG5cbiAgbWV0aG9kIHN0YWNrIDoganNfc3RyaW5nIHQgb3B0ZGVmIHByb3BcblxuICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5lbmRcblxubGV0IGVycm9yX2NvbnN0ciA9IFVuc2FmZS5nbG9iYWwjIy5fRXJyb3JcblxubW9kdWxlIEpzX2Vycm9yID0gc3RydWN0XG4gIHR5cGUgZXJyb3JfdCA9IGVycm9yIHRcblxuICBpbmNsdWRlIEpzb29fcnVudGltZS5FcnJvclxuXG4gIGV4dGVybmFsIG9mX2Vycm9yIDogZXJyb3JfdCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIGV4dGVybmFsIHRvX2Vycm9yIDogdCAtPiBlcnJvcl90ID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBuYW1lIGUgPSB0b19zdHJpbmcgKHRvX2Vycm9yIGUpIyMubmFtZVxuXG4gIGxldCBtZXNzYWdlIGUgPSB0b19zdHJpbmcgKHRvX2Vycm9yIGUpIyMubWVzc2FnZVxuXG4gIGxldCBzdGFjayAoZSA6IHQpIDogc3RyaW5nIG9wdGlvbiA9XG4gICAgT3B0LnRvX29wdGlvbiAoT3B0Lm1hcCAodG9fZXJyb3IgZSkjIy5zdGFjayB0b19zdHJpbmcpXG5cbiAgbGV0IHRvX3N0cmluZyBlID0gdG9fc3RyaW5nICh0b19lcnJvciBlKSMjdG9TdHJpbmdcbmVuZFxuXG5tb2R1bGUgTWFnaWMgPSBzdHJ1Y3RcbiAgbW9kdWxlIHR5cGUgVCA9IHNpZ1xuICAgIGV4Y2VwdGlvbiBFcnJvciBvZiBlcnJvciB0XG4gIGVuZFxuXG4gIHR5cGUgKCdhLCAnYikgZXEgPSBFcSA6ICgnYSwgJ2EpIGVxXG5cbiAgbGV0IChlcSA6IChlcnJvciB0LCBKc19lcnJvci50KSBlcSkgPSBPYmoubWFnaWMgRXFcblxuICBsZXQgbSA9XG4gICAgbWF0Y2ggZXEgd2l0aFxuICAgIHwgRXEgLT5cbiAgICAgICAgKG1vZHVsZSBzdHJ1Y3RcbiAgICAgICAgICBleGNlcHRpb24gRXJyb3IgPSBKc19lcnJvci5FeG5cbiAgICAgICAgZW5kIDogVClcblxuICBtb2R1bGUgRXJyb3IgPSAodmFsIG0gOiBUKVxuZW5kXG5cbmluY2x1ZGUgTWFnaWMuRXJyb3JcblxubGV0IHJhaXNlX2pzX2Vycm9yIGUgPSBKc19lcnJvci5yYWlzZV8gKEpzX2Vycm9yLm9mX2Vycm9yIGUpXG5cbmxldCBzdHJpbmdfb2ZfZXJyb3IgZSA9IEpzX2Vycm9yLnRvX3N0cmluZyAoSnNfZXJyb3Iub2ZfZXJyb3IgZSlcblxubGV0IGV4bl93aXRoX2pzX2JhY2t0cmFjZSA9IEpzX2Vycm9yLmF0dGFjaF9qc19iYWNrdHJhY2VcblxuZXh0ZXJuYWwganNfZXJyb3Jfb2ZfZXhuIDogZXhuIC0+IGVycm9yIHQgb3B0ID0gXCJjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvblwiXG5cbmNsYXNzIHR5cGUganNvbiA9IG9iamVjdFxuICBtZXRob2QgcGFyc2UgOiBqc19zdHJpbmcgdCAtPiAnYSBtZXRoXG5cbiAgbWV0aG9kIHN0cmluZ2lmeSA6ICdhIC0+IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5sZXQgX0pTT04gOiBqc29uIHQgPSBVbnNhZmUuZ2xvYmFsIyMuX0pTT05cblxubGV0IGRlY29kZVVSSSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5kZWNvZGVVUkkgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBkZWNvZGVVUklDb21wb25lbnQgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZGVjb2RlVVJJQ29tcG9uZW50IFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZW5jb2RlVVJJIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmVuY29kZVVSSSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGVuY29kZVVSSUNvbXBvbmVudCAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5lbmNvZGVVUklDb21wb25lbnQgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBlc2NhcGUgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZXNjYXBlIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgdW5lc2NhcGUgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMudW5lc2NhcGUgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmV4dGVybmFsIGJvb2wgOiBib29sIC0+IGJvb2wgdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG5leHRlcm5hbCB0b19ib29sIDogYm9vbCB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbmV4dGVybmFsIGFycmF5IDogJ2EgYXJyYXkgLT4gJ2EganNfYXJyYXkgdCA9IFwiY2FtbF9qc19mcm9tX2FycmF5XCJcblxuZXh0ZXJuYWwgdG9fYXJyYXkgOiAnYSBqc19hcnJheSB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuZXh0ZXJuYWwgYnl0ZXN0cmluZyA6IHN0cmluZyAtPiBqc19zdHJpbmcgdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiBqc19zdHJpbmcgdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcIlxuXG5leHRlcm5hbCBmbG9hdCA6IGZsb2F0IC0+IG51bWJlcl90ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG5leHRlcm5hbCB0b19mbG9hdCA6IG51bWJlcl90IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gbnVtYmVyIHQgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbmV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IG51bWJlciB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuZXh0ZXJuYWwgaW50MzIgOiBpbnQzMiAtPiBudW1iZXJfdCA9IFwiY2FtbF9qc19mcm9tX2ludDMyXCJcblxuZXh0ZXJuYWwgdG9faW50MzIgOiBudW1iZXJfdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbmV4dGVybmFsIG5hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBudW1iZXJfdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbmV4dGVybmFsIHRvX25hdGl2ZWludCA6IG51bWJlcl90IC0+IG5hdGl2ZWludCA9IFwiY2FtbF9qc190b19uYXRpdmVpbnRcIlxuXG5leHRlcm5hbCB0eXBlb2YgOiBfIHQgLT4ganNfc3RyaW5nIHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IF8gdCAtPiBfIGNvbnN0ciAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG5sZXQgaXNOYU4gKGkgOiAnYSkgOiBib29sID1cbiAgdG9fYm9vbCAoVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5pc05hTiBbfCBVbnNhZmUuaW5qZWN0IGkgfF0pXG5cbmxldCBwYXJzZUludCAocyA6IGpzX3N0cmluZyB0KSA6IGludCA9XG4gIGxldCBzID0gVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5wYXJzZUludCBbfCBVbnNhZmUuaW5qZWN0IHMgfF0gaW5cbiAgaWYgaXNOYU4gcyB0aGVuIGZhaWx3aXRoIFwicGFyc2VJbnRcIiBlbHNlIHNcblxubGV0IHBhcnNlRmxvYXQgKHMgOiBqc19zdHJpbmcgdCkgOiBudW1iZXJfdCA9XG4gIGxldCBzID0gVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5wYXJzZUZsb2F0IFt8IFVuc2FmZS5pbmplY3QgcyB8XSBpblxuICBpZiBpc05hTiBzIHRoZW4gZmFpbHdpdGggXCJwYXJzZUZsb2F0XCIgZWxzZSBzXG5cbmxldCBfID1cbiAgUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciAoZnVuIGUgLT5cbiAgICAgIGlmIGluc3RhbmNlb2YgKE9iai5tYWdpYyBlIDogPCAuLiA+IHQpIGVycm9yX2NvbnN0clxuICAgICAgdGhlblxuICAgICAgICBsZXQgZSA9IEpzX2Vycm9yLm9mX2Vycm9yIChPYmoubWFnaWMgZSA6IGVycm9yIHQpIGluXG4gICAgICAgIFNvbWUgKEpzX2Vycm9yLnRvX3N0cmluZyBlKVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBlIHdpdGhcbiAgICAgICAgfCBKc19lcnJvci5FeG4gZSAtPiBTb21lIChKc19lcnJvci50b19zdHJpbmcgZSlcbiAgICAgICAgfCBfIC0+IE5vbmUpXG5cbmxldCBleHBvcnRfanMgKGZpZWxkIDoganNfc3RyaW5nIHQpIHggPVxuICBVbnNhZmUuc2V0XG4gICAgKFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJqc29vX2V4cG9ydHNcIilcbiAgICBmaWVsZFxuICAgIChpZlxuICAgICAgIFN0cmluZy5lcXVhbCAoSnMudG9fc3RyaW5nICh0eXBlb2YgKE9iai5tYWdpYyB4KSkpIFwiZnVuY3Rpb25cIlxuICAgICAgICgqIGZ1bmN0aW9uIHdpdGggYXJpdHkvbGVuZ3RoIGVxdWFsIHRvIHplcm8gYXJlIGFscmVhZHkgd3JhcHBlZCAqKVxuICAgICAgICYmIFVuc2FmZS5nZXQgKE9iai5tYWdpYyB4KSAoSnMuc3RyaW5nIFwibGVuZ3RoXCIpID4gMFxuICAgICB0aGVuIE9iai5tYWdpYyAod3JhcF9jYWxsYmFjayAoT2JqLm1hZ2ljIHgpKVxuICAgICBlbHNlIHgpXG5cbmxldCBleHBvcnQgZmllbGQgeCA9IGV4cG9ydF9qcyAoc3RyaW5nIGZpZWxkKSB4XG5cbmxldCBleHBvcnRfYWxsIG9iaiA9XG4gIGxldCBrZXlzID0gb2JqZWN0X2tleXMgb2JqIGluXG4gIGtleXMjI2ZvckVhY2hcbiAgICAod3JhcF9jYWxsYmFjayAoZnVuIChrZXkgOiBqc19zdHJpbmcgdCkgXyBfIC0+IGV4cG9ydF9qcyBrZXkgKFVuc2FmZS5nZXQgb2JqIGtleSkpKVxuXG4oKioqKilcblxuKCogREVQUkVDQVRFRCAqKVxuXG50eXBlIGZsb2F0X3Byb3AgPSBudW1iZXJfdCBwcm9wXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfanNfZ2V0IiwiY2FtbF9qc19zZXQiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2siLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIkpzX29mX29jYW1sX0ltcG9ydCIsIlN0ZGxpYiIsIkpzb29fcnVudGltZSIsIlN0ZGxpYl9QcmludGV4YyIsImdsb2JhbCIsIm51bGwkIiwidW5kZWZpbmVkJCIsInJldHVybiQiLCJtYXAiLCJ4IiwiYmluZCIsInRlc3QiLCJpdGVyIiwiY2FzZSQiLCJnIiwiZ2V0Iiwib3B0aW9uIiwidG9fb3B0aW9uIiwiY29lcmNlIiwiY29lcmNlX29wdCIsInN0cmluZ19jb25zdHIiLCJyZWdFeHAiLCJvYmplY3RfY29uc3RydWN0b3IiLCJvYmplY3Rfa2V5cyIsInQ0IiwiYXJyYXlfY29uc3RydWN0b3IiLCJhcnJheV9tYXAiLCJ0NiIsImNiIiwiaWR4IiwicGFyYW0iLCJhcnJheV9tYXBpIiwic3RyX2FycmF5IiwibWF0Y2hfcmVzdWx0IiwiZGF0ZV9jb25zdHIiLCJtYXRoIiwiZXJyb3JfY29uc3RyIiwiaW5jbHVkZSIsInJhaXNlIiwiZXhuX3dpdGhfanNfYmFja3RyYWNlIiwib2ZfZXhuIiwiRXJyb3IiLCJuYW1lIiwidDExIiwibWVzc2FnZSIsInQxMiIsInN0YWNrIiwidDEzIiwidG9fc3RyaW5nIiwidDE0IiwicmFpc2VfanNfZXJyb3IiLCJlIiwic3RyaW5nX29mX2Vycm9yIiwiSlNPTiIsImRlY29kZVVSSSIsInMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImlzTmFOIiwiaSIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsImV4cG9ydF9qcyIsImZpZWxkIiwiZXhwb3J0JCIsImV4cG9ydF9hbGwiLCJvYmoiLCJrZXlzIiwidDI2Iiwia2V5IiwiSnNfb2Zfb2NhbWxfSnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLDBCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxT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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQ3V6Qm9CO0FBQUE7QUFBQSxFRHZ6QnBCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzQyMzAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4X2Jyb3dzZXIuZW9ianMvanNvby9kdW5lX19leGVfX1N4X2Jyb3dzZXIuY21vLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9icm93c2VyL3N4X2Jyb3dzZXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogc3hfYnJvd3Nlci5tbCDigJQgT0NhbWwgU1gga2VybmVsIGNvbXBpbGVkIHRvIFdBU00vSlMgZm9yIGJyb3dzZXIgdXNlLlxuXG4gICAgRXhwb3NlcyB0aGUgQ0VLIG1hY2hpbmUsIGJ5dGVjb2RlIFZNLCBwYXJzZXIsIGFuZCBwcmltaXRpdmVzIGFzIGFcbiAgICBnbG9iYWwgW1N4S2VybmVsXSBvYmplY3QgdGhhdCB0aGUgSlMgcGxhdGZvcm0gbGF5ZXIgYmluZHMgdG8uXG5cbiAgICBGcmVzaCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgb2NhbWwtdm0gYnJhbmNoIOKAlCBidWlsZHMgb24gdGhlIGJ5dGVjb2RlXG4gICAgVk0gKyBsYXp5IEpJVCBpbmZyYXN0cnVjdHVyZS4gKilcblxub3BlbiBKc19vZl9vY2FtbFxub3BlbiBTeF90eXBlc1xuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIE9wYXF1ZSB2YWx1ZSBoYW5kbGUgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqIE5vbi1wcmltaXRpdmUgU1ggdmFsdWVzIChsYW1iZGFzLCBjb21wb25lbnRzLCBzaWduYWxzLCBldGMuKSBhcmUgICAgKilcbigqIHN0b3JlZCBoZXJlIGFuZCByZXByZXNlbnRlZCBvbiB0aGUgSlMgc2lkZSBhcyBvYmplY3RzIHdpdGggYW4gICAgICAgKilcbigqIF9fc3hfaGFuZGxlIGludGVnZXIga2V5LiAgUHJlc2VydmVzIGlkZW50aXR5IGFjcm9zcyBKU+KGlE9DYW1sLiAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IF9uZXh0X2hhbmRsZSA9IHJlZiAwXG5sZXQgX2hhbmRsZV90YWJsZSA6IChpbnQsIHZhbHVlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSAyNTZcblxubGV0IGFsbG9jX2hhbmRsZSAodiA6IHZhbHVlKSA6IGludCA9XG4gIGxldCBpZCA9ICFfbmV4dF9oYW5kbGUgaW5cbiAgaW5jciBfbmV4dF9oYW5kbGU7XG4gIEhhc2h0YmwucmVwbGFjZSBfaGFuZGxlX3RhYmxlIGlkIHY7XG4gIGlkXG5cbmxldCBnZXRfaGFuZGxlIChpZCA6IGludCkgOiB2YWx1ZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgX2hhbmRsZV90YWJsZSBpZCB3aXRoXG4gIHwgU29tZSB2IC0+IHZcbiAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIkludmFsaWQgU1ggaGFuZGxlOiAlZFwiIGlkKSlcblxuKCogSlMtc2lkZSBvcGFxdWUgaG9zdCBvYmplY3QgdGFibGUuXG4gICBIb3N0IG9iamVjdHMgKERPTSBlbGVtZW50cywgY29uc29sZSwgZXRjLikgYXJlIHN0b3JlZCBoZXJlIHRvIHByZXNlcnZlXG4gICBpZGVudGl0eSBhY3Jvc3MgdGhlIE9DYW1s4oaUSlMgYm91bmRhcnkuIFJlcHJlc2VudGVkIGFzIERpY3Qgd2l0aFxuICAgX19ob3N0X2hhbmRsZSBrZXkgb24gdGhlIE9DYW1sIHNpZGUuICopXG5sZXQgX25leHRfaG9zdF9oYW5kbGUgPSByZWYgMFxubGV0IF9hbGxvY19ob3N0X2hhbmRsZSA9IEpzLlVuc2FmZS5wdXJlX2pzX2V4cHJcbiAgXCIoZnVuY3Rpb24oKSB7IHZhciB0ID0ge307IHZhciBuID0gMDsgcmV0dXJuIHsgcHV0OiBmdW5jdGlvbihvYmopIHsgdmFyIGlkID0gbisrOyB0W2lkXSA9IG9iajsgcmV0dXJuIGlkOyB9LCBnZXQ6IGZ1bmN0aW9uKGlkKSB7IHJldHVybiB0W2lkXTsgfSB9OyB9KSgpXCJcbmxldCBob3N0X3B1dCAob2JqIDogSnMuVW5zYWZlLmFueSkgOiBpbnQgPVxuICBsZXQgaWQgPSAhX25leHRfaG9zdF9oYW5kbGUgaW5cbiAgaW5jciBfbmV4dF9ob3N0X2hhbmRsZTtcbiAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsIF9hbGxvY19ob3N0X2hhbmRsZSBcInB1dFwiIFt8IG9iaiB8XSk7XG4gIGlkXG5sZXQgaG9zdF9nZXRfanMgKGlkIDogaW50KSA6IEpzLlVuc2FmZS5hbnkgPVxuICBKcy5VbnNhZmUubWV0aF9jYWxsIF9hbGxvY19ob3N0X2hhbmRsZSBcImdldFwiIFt8IEpzLlVuc2FmZS5pbmplY3QgaWQgfF1cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBHbG9iYWwgZW52aXJvbm1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCogQ2xlYXIgc2NvcGUgc3RhY2tzIGF0IHN0YXJ0dXAgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuc2NvcGVfY2xlYXJfYWxsICgpXG5cbmxldCBnbG9iYWxfZW52ID0gbWFrZV9lbnYgKClcbmxldCBfc3hfcmVuZGVyX21vZGUgPSByZWYgZmFsc2VcblxubGV0IGNhbGxfc3hfZm4gKGZuIDogdmFsdWUpIChhcmdzIDogdmFsdWUgbGlzdCkgOiB2YWx1ZSA9XG4gIGxldCByZXN1bHQgPSBTeF9ydW50aW1lLnN4X2NhbGwgZm4gYXJncyBpblxuICAhU3hfcHJpbWl0aXZlcy5fc3hfdHJhbXBvbGluZV9mbiByZXN1bHRcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBWYWx1ZSBjb252ZXJzaW9uOiBPQ2FtbCA8LT4gSlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIFRhZyBhIEpTIGZ1bmN0aW9uIHdpdGggX19zeF9oYW5kbGUgYW5kIF90eXBlIHByb3BlcnRpZXMuICopXG5sZXQgX3RhZ19mbiA9IEpzLlVuc2FmZS5wdXJlX2pzX2V4cHJcbiAgXCIoZnVuY3Rpb24oZm4sIGhhbmRsZSwgdHlwZSkgeyBmbi5fX3N4X2hhbmRsZSA9IGhhbmRsZTsgZm4uX3R5cGUgPSB0eXBlOyByZXR1cm4gZm47IH0pXCJcblxubGV0IHJlYyB2YWx1ZV90b19qcyAodiA6IHZhbHVlKSA6IEpzLlVuc2FmZS5hbnkgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBOaWwgLT4gSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG4gIHwgQm9vbCBiIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgYilcbiAgfCBOdW1iZXIgbiAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgbilcbiAgfCBJbnRlZ2VyIG4gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0IChmbG9hdF9vZl9pbnQgbikpXG4gIHwgU3RyaW5nIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpXG4gIHwgUmF3SFRNTCBzIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKVxuICB8IFN5bWJvbCBzIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwic3ltYm9sXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpKSB8XSlcbiAgfCBLZXl3b3JkIGsgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJrZXl3b3JkXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIGspKSB8XSlcbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPlxuICAgIGxldCBhcnIgPSBpdGVtcyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwibGlzdFwiKSk7XG4gICAgICAoXCJpdGVtc1wiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSBhcnIpKSB8XSlcbiAgfCBEaWN0IGQgLT5cbiAgICAoKiBDaGVjayBmb3IgX19ob3N0X2hhbmRsZSDigJQgcmV0dXJuIG9yaWdpbmFsIEpTIG9iamVjdCAqKVxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBob3N0X2dldF9qcyAoaW50X29mX2Zsb2F0IG4pXG4gICAgIHwgXyAtPlxuICAgICAgIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwiX3R5cGVcIikgKEpzLnN0cmluZyBcImRpY3RcIik7XG4gICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIGspICh2YWx1ZV90b19qcyB2KSkgZDtcbiAgICAgICBKcy5VbnNhZmUuaW5qZWN0IG9iailcbiAgKCogQ2FsbGFibGUgdmFsdWVzOiB3cmFwIGFzIEpTIGZ1bmN0aW9ucyB3aXRoIF9fc3hfaGFuZGxlICopXG4gIHwgTGFtYmRhIF8gfCBOYXRpdmVGbiBfIHwgQ29udGludWF0aW9uIF8gfCBDYWxsY2NDb250aW51YXRpb24gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgbGV0IGhhbmRsZSA9IGFsbG9jX2hhbmRsZSB2IGluXG4gICAgbGV0IGlubmVyID0gSnMud3JhcF9jYWxsYmFjayAoZnVuIGFyZ3NfanMgLT5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYXJnID0ganNfdG9fdmFsdWUgYXJnc19qcyBpblxuICAgICAgICBsZXQgYXJncyA9IG1hdGNoIGFyZyB3aXRoIE5pbCAtPiBbXSB8IF8gLT4gW2FyZ10gaW5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGNhbGxfc3hfZm4gdiBhcmdzIGluXG4gICAgICAgIHZhbHVlX3RvX2pzIHJlc3VsdFxuICAgICAgd2l0aFxuICAgICAgfCBTeF92bS5WbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgICAgICgqIFRyYW5zZmVyIHJldXNlX3N0YWNrIGZyb20gdGhlIGFjdGl2ZSBWTSB0byB0aGUgc3VzcGVuc2lvbiBWTS5cbiAgICAgICAgICAgY2FsbF9jbG9zdXJlX3JldXNlIHNhdmVzIGNhbGxlciBmcmFtZXMgb24gX2FjdGl2ZV92bSBBRlRFUiB0aGVcbiAgICAgICAgICAgaW5uZXIgVm1TdXNwZW5kZWQgcHJvcGFnYXRlcywgc28gdGhlIHN1c3BlbnNpb24gVk0gZG9lc24ndCBoYXZlIHRoZW0uICopXG4gICAgICAgIChtYXRjaCAhU3hfdm0uX2FjdGl2ZV92bSB3aXRoXG4gICAgICAgICB8IFNvbWUgYWN0aXZlIHdoZW4gYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrIDw+IFtdIC0+XG4gICAgICAgICAgIHZtLlN4X3ZtLnJldXNlX3N0YWNrIDwtIHZtLlN4X3ZtLnJldXNlX3N0YWNrIEAgYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrO1xuICAgICAgICAgICBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2sgPC0gW11cbiAgICAgICAgIHwgXyAtPiAoKSk7XG4gICAgICAgICgqIEJ1aWxkIHtzdXNwZW5kZWQsIHJlcXVlc3QsIHJlc3VtZX0gYW5kIGhhbmQgdG8gX2RyaXZlQXN5bmMuXG4gICAgICAgICAgIFRoZSByZXN1bWUgY2FsbGJhY2sgbXVzdCBhbHNvIGNhdGNoIFZtU3VzcGVuZGVkIGZvciBjaGFpbmluZ1xuICAgICAgICAgICAoZS5nLiByZXBlYXQgMyB0aW1lcyAuLi4gd2FpdCAuLi4gZW5kKS4gKilcbiAgICAgICAgbGV0IHJlYyBtYWtlX3N1c3BlbnNpb24gcmVxIHYgPVxuICAgICAgICAgIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwic3VzcGVuZGVkXCIpIChKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxKTtcbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVzdW1lXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gcmVzdWx0X2pzIC0+XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0ganNfdG9fdmFsdWUgcmVzdWx0X2pzIGluXG4gICAgICAgICAgICB0cnkgdmFsdWVfdG9fanMgKFN4X3ZtLnJlc3VtZV92bSB2IHJlc3VsdClcbiAgICAgICAgICAgIHdpdGhcbiAgICAgICAgICAgIHwgU3hfdm0uVm1TdXNwZW5kZWQgKHJlcTIsIHZtMikgLT5cbiAgICAgICAgICAgICAgKCogUmV0dXJuIHN1c3BlbnNpb24gb2JqZWN0IOKAlCB0aGUgSlMgZHJpdmVBc3luYyBjYWxsZXIgaGFuZGxlcyBzY2hlZHVsaW5nICopXG4gICAgICAgICAgICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2Vfc3VzcGVuc2lvbiByZXEyIHZtMilcbiAgICAgICAgICAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICAgKCogRW5oYW5jZWQgZXJyb3I6IHNob3cgcGVuZGluZ19jZWsga29udCwgcmV1c2Vfc3RhY2ssIGFuZCBWTSBmcmFtZSBpbmZvICopXG4gICAgICAgICAgICAgIGxldCB2bV9mcmFtZV9uYW1lcyA9IFN0cmluZy5jb25jYXQgXCIsXCIgKExpc3QubWFwIChmdW4gZiAtPlxuICAgICAgICAgICAgICAgIG1hdGNoIGYuU3hfdm0uY2xvc3VyZS5TeF90eXBlcy52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiXG4gICAgICAgICAgICAgICkgdi5TeF92bS5mcmFtZXMpIGluXG4gICAgICAgICAgICAgIGxldCBleHRyYSA9IFByaW50Zi5zcHJpbnRmIFwiIFt2bTogcGVuZGluZ19jZWs9JWIgcmV1c2U9JWQgZnJhbWVzPVslc10gc3A9JWRdXCJcbiAgICAgICAgICAgICAgICAodi5TeF92bS5wZW5kaW5nX2NlayA8PiBOb25lKVxuICAgICAgICAgICAgICAgIChMaXN0Lmxlbmd0aCB2LlN4X3ZtLnJldXNlX3N0YWNrKVxuICAgICAgICAgICAgICAgIHZtX2ZyYW1lX25hbWVzXG4gICAgICAgICAgICAgICAgdi5TeF92bS5zcCBpblxuICAgICAgICAgICAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgICAgICAgICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiW3N4XSByZXN1bWU6IFwiIF4gbXNnIF4gZXh0cmEpKSB8XSk7XG4gICAgICAgICAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICAgICAgICAgIG9ialxuICAgICAgICBpblxuICAgICAgICBsZXQgcyA9IG1ha2Vfc3VzcGVuc2lvbiByZXF1ZXN0IHZtIGluXG4gICAgICAgIGxldCBkcml2ZSA9IEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiX2RyaXZlQXN5bmNcIikgaW5cbiAgICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGRyaXZlIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLmZ1bl9jYWxsIGRyaXZlIFt8IEpzLlVuc2FmZS5pbmplY3QgcyB8XSk7XG4gICAgICAgIEpzLlVuc2FmZS5pbmplY3Qgc1xuICAgICAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICBsZXQgZm5faW5mbyA9IFByaW50Zi5zcHJpbnRmIFwiIFtjYWxsYmFjayAlcyBoYW5kbGU9JWRdXCIgKHR5cGVfb2YgdikgaGFuZGxlIGluXG4gICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIFwiIF4gbXNnIF4gZm5faW5mbykpIHxdKTtcbiAgICAgICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG4gICAgICB8IGV4biAtPlxuICAgICAgICBsZXQgZm5faW5mbyA9IFByaW50Zi5zcHJpbnRmIFwiIFtjYWxsYmFjayAlcyBoYW5kbGU9JWRdXCIgKHR5cGVfb2YgdikgaGFuZGxlIGluXG4gICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIFVOQ0FVR0hUOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4gXiBmbl9pbmZvKSkgfF0pO1xuICAgICAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpIGluXG4gICAgSnMuVW5zYWZlLmZ1bl9jYWxsIF90YWdfZm4gW3xcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgaW5uZXI7XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IGhhbmRsZTtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAodHlwZV9vZiB2KSkgfF1cbiAgKCogTm9uLWNhbGxhYmxlIGNvbXBvdW5kOiB0YWdnZWQgb2JqZWN0IHdpdGggaGFuZGxlICopXG4gIHwgXyAtPlxuICAgIGxldCBoYW5kbGUgPSBhbGxvY19oYW5kbGUgdiBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLlVuc2FmZS5vYmogW3xcbiAgICAgIChcIl90eXBlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAodHlwZV9vZiB2KSkpO1xuICAgICAgKFwiX19zeF9oYW5kbGVcIiwgSnMuVW5zYWZlLmluamVjdCBoYW5kbGUpIHxdKVxuXG5hbmQganNfdG9fdmFsdWUgKGpzIDogSnMuVW5zYWZlLmFueSkgOiB2YWx1ZSA9XG4gIGlmIEpzLlVuc2FmZS5lcXVhbHMganMgSnMubnVsbCB8fCBKcy5VbnNhZmUuZXF1YWxzIGpzIEpzLnVuZGVmaW5lZCB0aGVuIE5pbFxuICBlbHNlXG4gICAgbGV0IHR5ID0gSnMudG9fc3RyaW5nIChKcy50eXBlb2YganMpIGluXG4gICAgbWF0Y2ggdHkgd2l0aFxuICAgIHwgXCJudW1iZXJcIiAtPiBOdW1iZXIgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBqcykpXG4gICAgfCBcImJvb2xlYW5cIiAtPiBCb29sIChKcy50b19ib29sIChKcy5VbnNhZmUuY29lcmNlIGpzKSlcbiAgICB8IFwic3RyaW5nXCIgLT4gU3RyaW5nIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5jb2VyY2UganMpKVxuICAgIHwgXCJmdW5jdGlvblwiIC0+XG4gICAgICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gICAgICBsZXQgaGFzX2hvc3RfY2IgPSBKcy50b19ib29sIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJfX2hvc3RfY2FsbGJhY2tcIikpKSBpblxuICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkKSAmJiBub3QgaGFzX2hvc3RfY2IgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICAoKiBQbGFpbiBKUyBmdW5jdGlvbiDigJQgc3RvcmUgYXMgaG9zdCBvYmplY3Qgc28gdmFsdWVfdG9fanNcbiAgICAgICAgICAgcmV0dXJucyB0aGUgT1JJR0lOQUwgSlMgZnVuY3Rpb24gd2hlbiBwYXNzZWQgdG8gaG9zdC1jYWxsLlxuICAgICAgICAgICBUaGlzIHByZXNlcnZlcyB3cmFwcGVycyBsaWtlIF9kcml2ZUFzeW5jIHRoYXQgaG9zdC1jYWxsYmFja1xuICAgICAgICAgICBhdHRhY2hlcyBmb3IgSU8gc3VzcGVuc2lvbiBoYW5kbGluZy4gKilcbiAgICAgICAgbGV0IGlkID0gaG9zdF9wdXQganMgaW5cbiAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX19ob3N0X2hhbmRsZVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBpZCkpO1xuICAgICAgICBEaWN0IGRcbiAgICB8IFwib2JqZWN0XCIgLT5cbiAgICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICAgIGlmIG5vdCAoSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgdHlwZV9maWVsZCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl90eXBlXCIpIGluXG4gICAgICAgIGlmIEpzLlVuc2FmZS5lcXVhbHMgdHlwZV9maWVsZCBKcy51bmRlZmluZWQgdGhlbiBiZWdpblxuICAgICAgICAgIGlmIEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5nbG9iYWwjIy5fQXJyYXkjI2lzQXJyYXkganMpIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCBuID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJsZW5ndGhcIikpKSB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICAgICAgICAgIExpc3QgKExpc3QuaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgICAgICBqc190b192YWx1ZSAoSnMuYXJyYXlfZ2V0IChKcy5VbnNhZmUuY29lcmNlIGpzKSBpIHw+IEpzLk9wdGRlZi50b19vcHRpb24gfD4gT3B0aW9uLmdldCkpKVxuICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICAoKiBPcGFxdWUgaG9zdCBvYmplY3Qg4oCUIHN0b3JlIGluIEpTLXNpZGUgdGFibGUsIHJldHVybiBEaWN0IHdpdGggX19ob3N0X2hhbmRsZSAqKVxuICAgICAgICAgICAgbGV0IGlkID0gaG9zdF9wdXQganMgaW5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2hvc3RfaGFuZGxlXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGlkKSk7XG4gICAgICAgICAgICBEaWN0IGRcbiAgICAgICAgICBlbmRcbiAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgdGFnID0gSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuY29lcmNlIHR5cGVfZmllbGQpIGluXG4gICAgICAgICAgbWF0Y2ggdGFnIHdpdGhcbiAgICAgICAgICB8IFwic3ltYm9sXCIgLT4gU3ltYm9sIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIm5hbWVcIikpKVxuICAgICAgICAgIHwgXCJrZXl3b3JkXCIgLT4gS2V5d29yZCAoSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJuYW1lXCIpKSlcbiAgICAgICAgICB8IFwibGlzdFwiIC0+XG4gICAgICAgICAgICBsZXQgaXRlbXNfanMgPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJpdGVtc1wiKSBpblxuICAgICAgICAgICAgbGV0IG4gPSBKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgKEpzLlVuc2FmZS5nZXQgaXRlbXNfanMgKEpzLnN0cmluZyBcImxlbmd0aFwiKSkpIHw+IGludF9vZl9mbG9hdCBpblxuICAgICAgICAgICAgTGlzdCAoTGlzdC5pbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgICAgIGpzX3RvX3ZhbHVlIChKcy5hcnJheV9nZXQgKEpzLlVuc2FmZS5jb2VyY2UgaXRlbXNfanMpIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSkpXG4gICAgICAgICAgfCBcImRpY3RcIiAtPlxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICAgICAgICBsZXQga2V5cyA9IEpzLlVuc2FmZS5nbG9iYWwjIy5fT2JqZWN0IyNrZXlzIGpzIGluXG4gICAgICAgICAgICBsZXQgbGVuID0ga2V5cyMjLmxlbmd0aCBpblxuICAgICAgICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgICAgICAgbGV0IGsgPSBKcy50b19zdHJpbmcgKEpzLmFycmF5X2dldCBrZXlzIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSBpblxuICAgICAgICAgICAgICBpZiBrIDw+IFwiX3R5cGVcIiB0aGVuXG4gICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgayAoanNfdG9fdmFsdWUgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBrKSkpXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgfCBfIC0+IE5pbFxuICAgICAgICBlbmRcbiAgICB8IF8gLT4gTmlsXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogU2lkZS1jaGFubmVsIHJldHVybiAoYnlwYXNzZXMganNfb2Zfb2NhbWwgc3RyaXBwaW5nIHByb3BlcnRpZXMpICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodiA6IEpzLlVuc2FmZS5hbnkpIDogSnMuVW5zYWZlLmFueSA9XG4gIEpzLlVuc2FmZS5zZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiX19zeFJcIikgdjsgdlxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBlcnNpc3RlbnQgVk0gZ2xvYmFscyDigJQgc3luY2VkIHdpdGggZ2xvYmFsX2VudiAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIFN0cmluZy1rZXllZCBtaXJyb3Igb2YgZ2xvYmFsX2Vudi5iaW5kaW5ncyBmb3IgVm1DbG9zdXJlcy5cbiAgIFZtQ2xvc3VyZXMgZnJvbSBieXRlY29kZSBtb2R1bGVzIGhvbGQgdm1fZW52X3JlZiBwb2ludGluZyBoZXJlLlxuICAgTXVzdCBzdGF5IGluIHN5bmMgc28gVm1DbG9zdXJlcyBzZWUgcG9zdC1ib290IGRlZmluaXRpb25zLiAqKVxubGV0IF92bV9nbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0ICgpID0gU3hfdHlwZXMuX2RlZmF1bHRfdm1fZ2xvYmFscyA6PSBfdm1fZ2xvYmFsc1xubGV0IF9pbl9iYXRjaCA9IHJlZiBmYWxzZVxuXG4oKiBTeW5jIGVuduKGklZNOiBjb3B5IGFsbCBiaW5kaW5ncyBmcm9tIGdsb2JhbF9lbnYuYmluZGluZ3MgdG8gX3ZtX2dsb2JhbHMuXG4gICBDYWxsZWQgYWZ0ZXIgQ0VLIGV2YWwvbG9hZCBzbyBWbUNsb3N1cmVzIGNhbiBzZWUgbmV3IGRlZmluaXRpb25zLiAqKVxubGV0IHN5bmNfZW52X3RvX3ZtICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyAodW5pbnRlcm4gaWQpIHZcbiAgKSBnbG9iYWxfZW52LmJpbmRpbmdzXG5cbigqIEhvb2s6IGludGVyY2VwdCBlbnZfYmluZCBvbiBnbG9iYWxfZW52IHRvIGFsc28gdXBkYXRlIF92bV9nbG9iYWxzLlxuICAgT25seSBzeW5jIGJpbmRpbmdzIG9uIHRoZSBnbG9iYWwgZW52IOKAlCBsZXQgYmluZGluZ3MgaW4gY2hpbGQgZW52c1xuICAgbXVzdCBOT1QgbGVhayBpbnRvIF92bV9nbG9iYWxzICh0aGV5J2Qgb3ZlcndyaXRlIHJlYWwgZGVmaW5pdGlvbnMpLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX2Vudl9iaW5kX2hvb2sgOj0gU29tZSAoZnVuIGVudiBuYW1lIHYgLT5cbiAgICBpZiBlbnYgPT0gZ2xvYmFsX2VudiB0aGVuXG4gICAgICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2KVxuXG4oKiBSZXZlcnNlIGhvb2s6IHN5bmMgVk0gR0xPQkFMX1NFVCBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LlxuICAgV2l0aG91dCB0aGlzLCBzZXQhIGluc2lkZSBKSVQtY29tcGlsZWQgZnVuY3Rpb25zIHdyaXRlcyB0byBfdm1fZ2xvYmFsc1xuICAgYnV0IGxlYXZlcyBnbG9iYWxfZW52IHN0YWxlIOKAlCBDRUsgcmVhZHMgdGhlbiBzZWUgdGhlIG9sZCB2YWx1ZS4gKilcbmxldCAoKSA9XG4gIFN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgOj0gU29tZSAoZnVuIG5hbWUgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gbmFtZSkgdilcblxuKCogU3ltYm9sIHJlc29sdmUgaG9vazogdHJhbnNwYXJlbnQgbGF6eSBtb2R1bGUgbG9hZGluZy5cbiAgIFdoZW4gR0xPQkFMX0dFVCBjYW4ndCBmaW5kIGEgc3ltYm9sLCB0aGlzIGNhbGxzIHRoZSBKUyBfX3Jlc29sdmUtc3ltYm9sXG4gICBuYXRpdmUgd2hpY2ggY2hlY2tzIHRoZSBtYW5pZmVzdCdzIHN5bWJvbOKGkmxpYnJhcnkgaW5kZXggYW5kIGxvYWRzIHRoZVxuICAgbGlicmFyeSB0aGF0IGV4cG9ydHMgaXQuICBBZnRlciBsb2FkaW5nLCB0aGUgc3ltYm9sIGlzIGluIF92bV9nbG9iYWxzLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX3N5bWJvbF9yZXNvbHZlX2hvb2sgOj0gU29tZSAoZnVuIG5hbWUgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIl9fcmVzb2x2ZS1zeW1ib2xcIiB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgcmVzb2x2ZV9mbiAtPlxuICAgICAgKHRyeSBpZ25vcmUgKHJlc29sdmVfZm4gW1N0cmluZyBuYW1lXSkgd2l0aCBfIC0+ICgpKTtcbiAgICAgICgqIENoZWNrIGlmIHRoZSBzeW1ib2wgYXBwZWFyZWQgaW4gZ2xvYmFscyBhZnRlciB0aGUgbG9hZCAqKVxuICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfdm1fZ2xvYmFscyBuYW1lIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFNvbWUgdlxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICgqIEZhbGxiYWNrOiBjaGVjayBnbG9iYWxfZW52IGRpcmVjdGx5IGlmIHZtX2dsb2JhbHMgbWlzc2VkIHRoZSBzeW5jICopXG4gICAgICAgIEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFsX2Vudi5iaW5kaW5ncyAoU3hfdHlwZXMuaW50ZXJuIG5hbWUpKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIENvcmUgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgYXBpX3BhcnNlIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCB2YWx1ZXMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5ICh2YWx1ZXMgfD4gTGlzdC5tYXAgdmFsdWVfdG9fanMgfD4gQXJyYXkub2ZfbGlzdCkpXG4gIHdpdGggUGFyc2VfZXJyb3IgbXNnIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbigqKiBCdWlsZCBhIEpTIHN1c3BlbnNpb24gbWFya2VyIGZvciB0aGUgcGxhdGZvcm0gdG8gaGFuZGxlLlxuICAgIFJldHVybnMge3N1c3BlbmRlZDogdHJ1ZSwgb3A6IHN0cmluZywgcmVxdWVzdDogb2JqLCByZXN1bWU6IGZuKHJlc3VsdCl9ICopXG5sZXQgX21ha2VfanNfc3VzcGVuc2lvbiByZXF1ZXN0IHJlc3VtZV9mbiA9XG4gIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInN1c3BlbmRlZFwiKSAoSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCB0cnVlKSk7XG4gIGxldCBvcCA9IG1hdGNoIHJlcXVlc3Qgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJvcFwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwidW5rbm93blwiKVxuICAgIHwgXyAtPiBcInVua25vd25cIiBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwib3BcIikgKEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBvcCkpO1xuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxdWVzdCk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXN1bWVcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biByZXN1bHRfanMgLT5cbiAgICBsZXQgcmVzdWx0ID0ganNfdG9fdmFsdWUgcmVzdWx0X2pzIGluXG4gICAgcmVzdW1lX2ZuIHJlc3VsdCkpO1xuICBvYmpcblxuKCoqIEhhbmRsZSBhbiBpbXBvcnQgc3VzcGVuc2lvbjogbG9hZCB0aGUgbGlicmFyeSBmcm9tIHRoZSBsaWJyYXJ5IHJlZ2lzdHJ5XG4gICAgb3IgcmV0dXJuIGEgc3VzcGVuc2lvbiBtYXJrZXIgdG8gSlMgZm9yIGFzeW5jIGxvYWRpbmcuICopXG5sZXQgaGFuZGxlX2ltcG9ydF9zdXNwZW5zaW9uIHJlcXVlc3QgPVxuICBsZXQgbGliX3NwZWMgPSBtYXRjaCByZXF1ZXN0IHdpdGhcbiAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwibGlicmFyeVwiIHdpdGggU29tZSB2IC0+IHYgfCBfIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsIGluXG4gICgqIGxpYnJhcnlfbG9hZGVkX3AgdGFrZXMgdGhlIFNQRUMgYW5kIGFwcGxpZXMgbGlicmFyeV9uYW1lX2tleSBpdHNlbGYg4oCUXG4gICAgIHBhc3NpbmcgYSBwcmUtY29tcHV0ZWQga2V5IHN0cmluZyBkb3VibGUtYXBwbGllcyBpdCBhbmQgY3Jhc2hlcy4gKilcbiAgaWYgU3hfdHlwZXMuc3hfdHJ1dGh5IChTeF9yZWYubGlicmFyeV9sb2FkZWRfcCBsaWJfc3BlYykgdGhlblxuICAgIFNvbWUgTmlsICAoKiBBbHJlYWR5IGxvYWRlZCDigJQgcmVzdW1lIGltbWVkaWF0ZWx5ICopXG4gIGVsc2VcbiAgICBOb25lICAoKiBOb3QgbG9hZGVkIOKAlCBKUyBwbGF0Zm9ybSBtdXN0IGZldGNoIGl0ICopXG5cbmxldCBhcGlfZXZhbCBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBlbnYgPSBFbnYgZ2xvYmFsX2VudiBpblxuICAgIGxldCByZXN1bHQgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIF9hY2MgZXhwciAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52KSBOaWwgZXhwcnMgaW5cbiAgICBzeW5jX2Vudl90b192bSAoKTtcbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgcmVzdWx0KVxuICB3aXRoXG4gIHwgU3hfdm0uVm1TdXNwZW5kZWQgXyAtPlxuICAgICgqIFRvcC1sZXZlbCBldmFsIGVuY291bnRlcmVkIGFuIElPIHN1c3BlbnNpb24gcHJvcGFnYXRlZCB2aWEgdGhlXG4gICAgICAgY2VrX3J1biBob29rIChwZXJmb3JtIGluc2lkZSBsZXRyZWMgaW5pdCAvIG5vbi1sYXN0IGJvZHkgLyBtYWNybyAvXG4gICAgICAgcXEgdHJlZS13YWxrZWQgcGF0aCkuIEsuZXZhbCBkb2Vzbid0IGRyaXZlIHJlc3VtcHRpb24g4oCUIHN1cmZhY2UgYXNcbiAgICAgICBhIGNsZWFyIGVycm9yIHNvIHRoZSBjYWxsZXIga25vd3MgdG8gdXNlIGNhbGxGbiBpbnN0ZWFkLiAqKVxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcIkVycm9yOiBJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0ICh1c2UgY2FsbEZuIGZvciBJTy1hd2FyZSBwYXRocylcIilcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbigqKiBldmFsVk06IGNvbXBpbGUgU1ggc291cmNlIHRvIGJ5dGVjb2RlIGFuZCBydW4gdGhyb3VnaCB0aGUgVk0uXG4gICAgR2xvYmFscyBkZWZpbmVkIHdpdGggYGRlZmluZWAgYXJlIHZpc2libGUgdG8gc3Vic2VxdWVudCBldmFsVk0vZXZhbCBjYWxscy5cbiAgICBUaGlzIHRlc3RzIHRoZSBleGFjdCBzYW1lIGNvZGUgcGF0aCBhcyBpc2xhbmQgaHlkcmF0aW9uIGFuZCBjbGljayBoYW5kbGVycy4gKilcbmxldCBhcGlfZXZhbF92bSBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBjb21waWxlX2ZuID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfdm1fZ2xvYmFscyBcImNvbXBpbGUtbW9kdWxlXCIgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgfCBOb25lIC0+IGVudl9nZXQgZ2xvYmFsX2VudiBcImNvbXBpbGUtbW9kdWxlXCIgaW5cbiAgICBsZXQgY29kZV92YWwgPSBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGNvbXBpbGVfZm4gW0xpc3QgZXhwcnNdKSBpblxuICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gICAgbGV0IHJlc3VsdCA9IFN4X3ZtX3JlZi5leGVjdXRlX21vZHVsZSBjb2RlIF92bV9nbG9iYWxzIGluXG4gICAgKCogU3luYyBWTSBnbG9iYWxzIOKGkiBDRUsgZW52IHNvIHN1YnNlcXVlbnQgZXZhbCgpIGNhbGxzIHNlZSBkZWZpbmVzICopXG4gICAgSGFzaHRibC5pdGVyIChmdW4gbmFtZSB2IC0+XG4gICAgICBsZXQgaWQgPSBpbnRlcm4gbmFtZSBpblxuICAgICAgaWYgbm90IChIYXNodGJsLm1lbSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkKSB0aGVuXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgIGVsc2UgKG1hdGNoIEhhc2h0YmwuZmluZCBnbG9iYWxfZW52LmJpbmRpbmdzIGlkLCB2IHdpdGhcbiAgICAgICAgfCBWbUNsb3N1cmUgXywgVm1DbG9zdXJlIF8gfCBfLCBWbUNsb3N1cmUgXyAtPiBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICAgIHwgXyAtPiAoKSlcbiAgICApIF92bV9nbG9iYWxzO1xuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyByZXN1bHQpXG4gIHdpdGhcbiAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IElPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHQgKHVzZSBjYWxsRm4gZm9yIElPLWF3YXJlIHBhdGhzKVwiKVxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBOb3RfZm91bmQgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IGNvbXBpbGUtbW9kdWxlIG5vdCBsb2FkZWRcIilcblxubGV0IGFwaV9ldmFsX2V4cHIgZXhwcl9qcyBfZW52X2pzID1cbiAgbGV0IGV4cHIgPSBqc190b192YWx1ZSBleHByX2pzIGluXG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBnbG9iYWxfZW52KSBpblxuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyByZXN1bHQpXG4gIHdpdGhcbiAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IElPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHQgKHVzZSBjYWxsRm4gZm9yIElPLWF3YXJlIHBhdGhzKVwiKVxuICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG5cbmxldCBhcGlfbG9hZCBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBlbnYgPSBFbnYgZ2xvYmFsX2VudiBpblxuICAgIGxldCBjb3VudCA9IHJlZiAwIGluXG4gICAgTGlzdC5pdGVyIChmdW4gZXhwciAtPlxuICAgICAgKCogVXNlIElPLWF3YXJlIGV2YWwgZm9yIGVhY2ggZXhwcmVzc2lvbiB0byBoYW5kbGUgaW1wb3J0IHN1c3BlbnNpb25zICopXG4gICAgICBsZXQgc3RhdGUgPSBTeF9yZWYubWFrZV9jZWtfc3RhdGUgZXhwciBlbnYgKExpc3QgW10pIGluXG4gICAgICBsZXQgZmluYWwgPSByZWYgKFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlKSBpblxuICAgICAgd2hpbGUgU3hfdHlwZXMuc3hfdHJ1dGh5IChTeF9yZWYuY2VrX3N1c3BlbmRlZF9wICFmaW5hbCkgZG9cbiAgICAgICAgbGV0IHJlcXVlc3QgPSBTeF9yZWYuY2VrX2lvX3JlcXVlc3QgIWZpbmFsIGluXG4gICAgICAgIGxldCBvcCA9IG1hdGNoIHJlcXVlc3Qgd2l0aFxuICAgICAgICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJvcFwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiXCIpXG4gICAgICAgICAgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gaWYgb3AgPSBcImltcG9ydFwiIHRoZW4gYmVnaW5cbiAgICAgICAgICBtYXRjaCBoYW5kbGVfaW1wb3J0X3N1c3BlbnNpb24gcmVxdWVzdCB3aXRoXG4gICAgICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgICAgIHwgTm9uZSAtPiBOaWwgICgqIExpYnJhcnkgbm90IGZvdW5kIOKAlCByZXN1bWUgd2l0aCBuaWwsIGltcG9ydCB3aWxsIHVzZSB3aGF0J3MgaW4gZW52ICopXG4gICAgICAgIGVuZCBlbHNlIE5pbCBpblxuICAgICAgICBmaW5hbCA6PSBTeF9yZWYuY2VrX3Jlc3VtZSAhZmluYWwgcmVzcG9uc2VcbiAgICAgIGRvbmU7XG4gICAgICBpZ25vcmUgKFN4X3JlZi5jZWtfdmFsdWUgIWZpbmFsKTtcbiAgICAgIGluY3IgY291bnRcbiAgICApIGV4cHJzO1xuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgIWNvdW50XG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbmxldCBhcGlfYmVnaW5fbW9kdWxlX2xvYWQgKCkgPVxuICAoKiBTbmFwc2hvdCBjdXJyZW50IGVudiBpbnRvIHRoZSBwZXJzaXN0ZW50IFZNIGdsb2JhbHMgdGFibGUgKilcbiAgSGFzaHRibC5jbGVhciBfdm1fZ2xvYmFscztcbiAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPiBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgKHVuaW50ZXJuIGlkKSB2KSBnbG9iYWxfZW52LmJpbmRpbmdzO1xuICBfaW5fYmF0Y2ggOj0gdHJ1ZTtcbiAgSnMuVW5zYWZlLmluamVjdCB0cnVlXG5cbmxldCBhcGlfZW5kX21vZHVsZV9sb2FkICgpID1cbiAgaWYgIV9pbl9iYXRjaCB0aGVuIGJlZ2luXG4gICAgKCogQ29weSBWTSBnbG9iYWxzIGJhY2sgdG8gZW52IChieXRlY29kZSBtb2R1bGVzIGRlZmluZWQgbmV3IHN5bWJvbHMpICopXG4gICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyAoaW50ZXJuIGspIHZcbiAgICApIF92bV9nbG9iYWxzO1xuICAgIF9pbl9iYXRjaCA6PSBmYWxzZVxuICBlbmQ7XG4gIEpzLlVuc2FmZS5pbmplY3QgdHJ1ZVxuXG5sZXQgc3luY192bV90b19lbnYgKCkgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBuYW1lIHYgLT5cbiAgICBsZXQgaWQgPSBpbnRlcm4gbmFtZSBpblxuICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCkgdGhlblxuICAgICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgIGVsc2UgYmVnaW5cbiAgICAgICgqIFVwZGF0ZSBleGlzdGluZyBiaW5kaW5nIGlmIHRoZSBWTSBoYXMgYSBuZXdlciB2YWx1ZSAqKVxuICAgICAgbGV0IGV4aXN0aW5nID0gSGFzaHRibC5maW5kIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgaW5cbiAgICAgIG1hdGNoIGV4aXN0aW5nLCB2IHdpdGhcbiAgICAgIHwgVm1DbG9zdXJlIF8sIFZtQ2xvc3VyZSBfIC0+IEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgIHwgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kXG4gICkgX3ZtX2dsb2JhbHNcblxuKCoqIENvbnZlcnQgYSBWTSBzdXNwZW5zaW9uIGRpY3QgdG8gYSBKUyBzdXNwZW5zaW9uIG9iamVjdCBmb3IgdGhlIHBsYXRmb3JtLiAqKVxubGV0IHJlYyBtYWtlX2pzX2ltcG9ydF9zdXNwZW5zaW9uIChkIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCkgPVxuICBsZXQgb2JqID0gSnMuVW5zYWZlLm9iaiBbfHxdIGluXG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJzdXNwZW5kZWRcIikgKEpzLlVuc2FmZS5pbmplY3QgSnMuX3RydWUpO1xuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwib3BcIikgKEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcImltcG9ydFwiKSk7XG4gIGxldCByZXF1ZXN0ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwicmVxdWVzdFwiIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbCBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxdWVzdCk7XG4gICgqIHJlc3VtZSBjYWxsYmFjazogY2xlYXJzIF9faW9fcmVxdWVzdCwgcHVzaGVzIG5pbCwgcmUtcnVucyBWTSAqKVxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVzdW1lXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gX3Jlc3VsdF9qcyAtPlxuICAgIGxldCByZXN1bWVkID0gU3hfdm1fcmVmLnJlc3VtZV9tb2R1bGUgKERpY3QgZCkgaW5cbiAgICBzeW5jX3ZtX3RvX2VudiAoKTtcbiAgICBtYXRjaCByZXN1bWVkIHdpdGhcbiAgICB8IERpY3QgZDIgd2hlbiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkMiBcInN1c3BlbmRlZFwiIHdpdGggU29tZSAoQm9vbCB0cnVlKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgLT5cbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2VfanNfaW1wb3J0X3N1c3BlbnNpb24gZDIpXG4gICAgfCByZXN1bHQgLT4gdmFsdWVfdG9fanMgcmVzdWx0KSk7XG4gIG9ialxuXG5sZXQgYXBpX2xvYWRfbW9kdWxlIG1vZHVsZV9qcyA9XG4gIHRyeVxuICAgIGxldCBjb2RlX3ZhbCA9IGpzX3RvX3ZhbHVlIG1vZHVsZV9qcyBpblxuICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gICAgbGV0IHJlc3VsdCA9IFN4X3ZtX3JlZi5leGVjdXRlX21vZHVsZSBjb2RlIF92bV9nbG9iYWxzIGluXG4gICAgbWF0Y2ggcmVzdWx0IHdpdGhcbiAgICB8IERpY3QgZCB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdXNwZW5kZWRcIiB3aXRoIFNvbWUgKEJvb2wgdHJ1ZSkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIC0+XG4gICAgICAoKiBWTSBzdXNwZW5kZWQgb24gT1BfUEVSRk9STSAoaW1wb3J0KSDigJQgcmV0dXJuIEpTIHN1c3BlbnNpb24gb2JqZWN0ICopXG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IChtYWtlX2pzX2ltcG9ydF9zdXNwZW5zaW9uIGQpXG4gICAgfCBfIC0+XG4gICAgICBzeW5jX3ZtX3RvX2VudiAoKTtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKEhhc2h0YmwubGVuZ3RoIF92bV9nbG9iYWxzKVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgZXhuIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKSlcblxubGV0IGFwaV9kZWJ1Z19lbnYgbmFtZV9qcyA9XG4gIGxldCBuYW1lID0gSnMudG9fc3RyaW5nIG5hbWVfanMgaW5cbiAgbGV0IGlkID0gaW50ZXJuIG5hbWUgaW5cbiAgbGV0IGZvdW5kX2VudiA9IEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCBpblxuICBsZXQgZm91bmRfdm0gPSBIYXNodGJsLmZpbmRfb3B0IF92bV9nbG9iYWxzIG5hbWUgaW5cbiAgbGV0IHRvdGFsX2VudiA9IEhhc2h0YmwubGVuZ3RoIGdsb2JhbF9lbnYuYmluZGluZ3MgaW5cbiAgbGV0IHRvdGFsX3ZtID0gSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMgaW5cbiAgbGV0IGVudl9zID0gbWF0Y2ggZm91bmRfZW52IHdpdGggU29tZSB2IC0+IFwiZW52OlwiIF4gdHlwZV9vZiB2IHwgTm9uZSAtPiBcImVudjpNSVNTSU5HXCIgaW5cbiAgbGV0IHZtX3MgPSBtYXRjaCBmb3VuZF92bSB3aXRoIFNvbWUgdiAtPiBcInZtOlwiIF4gdHlwZV9vZiB2IHwgTm9uZSAtPiBcInZtOk1JU1NJTkdcIiBpblxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiJXMgJXMgKGVudj0lZCB2bT0lZClcIiBlbnZfcyB2bV9zIHRvdGFsX2VudiB0b3RhbF92bSkpXG5cbmxldCBhcGlfY29tcGlsZV9tb2R1bGUgc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgY29tcGlsZV9mbiA9IGVudl9nZXQgZ2xvYmFsX2VudiBcImNvbXBpbGUtbW9kdWxlXCIgaW5cbiAgICBsZXQgY29kZSA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW2NvbXBpbGVfZm47IExpc3QgZXhwcnNdKSAoRW52IGdsb2JhbF9lbnYpIGluXG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIGNvZGUpXG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG4gIHwgTm90X2ZvdW5kIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcIkVycm9yOiBjb21waWxlLW1vZHVsZSBub3QgbG9hZGVkXCIpXG5cbmxldCBhcGlfcmVuZGVyX3RvX2h0bWwgZXhwcl9qcyA9XG4gIGxldCBleHByID0ganNfdG9fdmFsdWUgZXhwcl9qcyBpblxuICBsZXQgcHJldiA9ICFfc3hfcmVuZGVyX21vZGUgaW5cbiAgX3N4X3JlbmRlcl9tb2RlIDo9IHRydWU7XG4gICh0cnlcbiAgICBsZXQgaHRtbCA9IFN4X3JlbmRlci5zeF9yZW5kZXJfdG9faHRtbCBnbG9iYWxfZW52IGV4cHIgZ2xvYmFsX2VudiBpblxuICAgIF9zeF9yZW5kZXJfbW9kZSA6PSBwcmV2O1xuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBodG1sKVxuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgX3N4X3JlbmRlcl9tb2RlIDo9IHByZXY7XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpKVxuXG5sZXQgYXBpX3N0cmluZ2lmeSB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChpbnNwZWN0IChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfdHlwZV9vZiB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfaW5zcGVjdCB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChpbnNwZWN0IChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfZW5naW5lICgpID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwib2NhbWwtdm0td2FzbVwiKVxuXG5sZXQgYXBpX3JlZ2lzdGVyX25hdGl2ZSBuYW1lX2pzIGNhbGxiYWNrX2pzID1cbiAgbGV0IG5hbWUgPSBKcy50b19zdHJpbmcgbmFtZV9qcyBpblxuICBsZXQgbmF0aXZlX2ZuIGFyZ3MgPVxuICAgIGxldCBqc19hcmdzID0gYXJncyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAganNfdG9fdmFsdWUgKEpzLlVuc2FmZS5mdW5fY2FsbCBjYWxsYmFja19qcyBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSBqc19hcmdzKSB8XSlcbiAgaW5cbiAgbGV0IHYgPSBOYXRpdmVGbiAobmFtZSwgbmF0aXZlX2ZuKSBpblxuICBTeF9wcmltaXRpdmVzLnJlZ2lzdGVyIG5hbWUgbmF0aXZlX2ZuO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgbmFtZSB2KTtcbiAgSGFzaHRibC5yZXBsYWNlIF92bV9nbG9iYWxzIG5hbWUgdjtcbiAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG5cbmxldCByZWMgbWFrZV9qc19jYWxsRm5fc3VzcGVuc2lvbiByZXF1ZXN0IHZtID1cbiAgbGV0IG9iaiA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwic3VzcGVuZGVkXCIpIChKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInJlcXVlc3RcIikgKHZhbHVlX3RvX2pzIHJlcXVlc3QpO1xuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVzdW1lXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gcmVzdWx0X2pzIC0+XG4gICAgbGV0IHJlc3VsdCA9IGpzX3RvX3ZhbHVlIHJlc3VsdF9qcyBpblxuICAgIHRyeVxuICAgICAgbGV0IHYgPSBTeF92bS5yZXN1bWVfdm0gdm0gcmVzdWx0IGluXG4gICAgICBzeW5jX3ZtX3RvX2VudiAoKTtcbiAgICAgIHZhbHVlX3RvX2pzIHZcbiAgICB3aXRoXG4gICAgfCBTeF92bS5WbVN1c3BlbmRlZCAocmVxMiwgdm0yKSAtPlxuICAgICAgSnMuVW5zYWZlLmluamVjdCAobWFrZV9qc19jYWxsRm5fc3VzcGVuc2lvbiByZXEyIHZtMilcbiAgICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICBsZXQgdm1fZnJhbWVfbmFtZXMgPSBTdHJpbmcuY29uY2F0IFwiLFwiIChMaXN0Lm1hcCAoZnVuIGYgLT5cbiAgICAgICAgbWF0Y2ggZi5TeF92bS5jbG9zdXJlLlN4X3R5cGVzLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCI/XCJcbiAgICAgICkgdm0uU3hfdm0uZnJhbWVzKSBpblxuICAgICAgbGV0IGV4dHJhID0gUHJpbnRmLnNwcmludGYgXCIgW3ZtOiBwZW5kaW5nX2Nlaz0lYiByZXVzZT0lZCBmcmFtZXM9WyVzXSBzcD0lZF1cIlxuICAgICAgICAodm0uU3hfdm0ucGVuZGluZ19jZWsgPD4gTm9uZSlcbiAgICAgICAgKExpc3QubGVuZ3RoIHZtLlN4X3ZtLnJldXNlX3N0YWNrKVxuICAgICAgICB2bV9mcmFtZV9uYW1lc1xuICAgICAgICB2bS5TeF92bS5zcCBpblxuICAgICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgIFwiZXJyb3JcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiW3N4XSByZXN1bWU6IFwiIF4gbXNnIF4gZXh0cmEpKSB8XSk7XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpKTtcbiAgb2JqXG5cbmxldCBhcGlfY2FsbF9mbiBmbl9qcyBhcmdzX2pzID1cbiAgdHJ5XG4gICAgbGV0IGZuID0ganNfdG9fdmFsdWUgZm5fanMgaW5cbiAgICBsZXQgYXJncyA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCBqc190b192YWx1ZSAoSnMudG9fYXJyYXkgKEpzLlVuc2FmZS5jb2VyY2UgYXJnc19qcykpKSBpblxuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyAoY2FsbF9zeF9mbiBmbiBhcmdzKSlcbiAgd2l0aFxuICB8IFN4X3ZtLlZtU3VzcGVuZGVkIChyZXF1ZXN0LCB2bSkgLT5cbiAgICAoKiBUcmFuc2ZlciByZXVzZV9zdGFjayBmcm9tIGFjdGl2ZSBWTSAqKVxuICAgIChtYXRjaCAhU3hfdm0uX2FjdGl2ZV92bSB3aXRoXG4gICAgIHwgU29tZSBhY3RpdmUgd2hlbiBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2sgPD4gW10gLT5cbiAgICAgICB2bS5TeF92bS5yZXVzZV9zdGFjayA8LSB2bS5TeF92bS5yZXVzZV9zdGFjayBAIGFjdGl2ZS5TeF92bS5yZXVzZV9zdGFjaztcbiAgICAgICBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2sgPC0gW11cbiAgICAgfCBfIC0+ICgpKTtcbiAgICBzeW5jX3ZtX3RvX2VudiAoKTtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IChtYWtlX2pzX2NhbGxGbl9zdXNwZW5zaW9uIHJlcXVlc3Qgdm0pXG4gIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAoKiBTdG9yZSB0aGUgZXJyb3IgbWVzc2FnZSBzbyBjYWxsZXJzIGNhbiBkZXRlY3QgaXQgKilcbiAgICBsZXQgZXJyX29iaiA9IEpzLlVuc2FmZS5vYmogW3wgKFwiX19zeF9lcnJvclwiLCBKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcIm1lc3NhZ2VcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIG1zZykpIHxdIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCBlcnJfb2JqXG4gIHwgZXhuIC0+XG4gICAgbGV0IGVycl9vYmogPSBKcy5VbnNhZmUub2JqIFt8IChcIl9fc3hfZXJyb3JcIiwgSnMuVW5zYWZlLmluamVjdCBKcy5fdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJtZXNzYWdlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoUHJpbnRleGMudG9fc3RyaW5nIGV4bikpKSB8XSBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgZXJyX29ialxuXG5sZXQgYXBpX2lzX2NhbGxhYmxlIGZuX2pzID1cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBmbl9qcyBKcy5udWxsIHx8IEpzLlVuc2FmZS5lcXVhbHMgZm5fanMgSnMudW5kZWZpbmVkIHRoZW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGZhbHNlKVxuICBlbHNlXG4gICAgbGV0IGggPSBKcy5VbnNhZmUuZ2V0IGZuX2pzIChKcy5zdHJpbmcgXCJfX3N4X2hhbmRsZVwiKSBpblxuICAgIGlmIEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQgdGhlbiBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGZhbHNlKVxuICAgIGVsc2UgSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCAoaXNfY2FsbGFibGUgKGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpKSkpXG5cbmxldCBhcGlfZm5fYXJpdHkgZm5fanMgPVxuICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQgZm5fanMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gIGlmIEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQgdGhlbiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKC0xLjApKVxuICBlbHNlXG4gICAgbGV0IHYgPSBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KSBpblxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgTGFtYmRhIGwgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0IChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoIGwubF9wYXJhbXMpKSlcbiAgICB8IF8gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0ICgtMS4wKSlcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQbGF0Zm9ybSBiaW5kaW5ncyAocmVnaXN0ZXJlZCBpbiBnbG9iYWwgZW52KSAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0ICgpID1cbiAgbGV0IGJpbmQgbmFtZSBmbiA9IGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBuYW1lIChOYXRpdmVGbiAobmFtZSwgZm4pKSkgaW5cblxuICAoKiBjbGllbnQ/IHJldHVybnMgdHJ1ZSBpbiBicm93c2VyIOKAlCBzZXQgdGhlIHJlZiBzbyB0aGUgcHJpbWl0aXZlIHJldHVybnMgdHJ1ZSAqKVxuICBTeF9wcmltaXRpdmVzLl9pc19jbGllbnQgOj0gdHJ1ZTtcblxuICAoKiAtLS0gRXZhbHVhdGlvbiAtLS0gKilcbiAgYmluZCBcImNlay1ldmFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IGxldCBlID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzIGluIChtYXRjaCBlIHdpdGggaCA6OiBfIC0+IFN4X3JlZi5ldmFsX2V4cHIgaCAoRW52IGdsb2JhbF9lbnYpIHwgW10gLT4gTmlsKVxuICAgIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpXG4gICAgfCBbZXhwcjsgZW52X3ZhbF0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGVudl92YWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstZXZhbDogZXhwZWN0ZWQgMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJldmFsLWV4cHItY2VrXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGVcbiAgICB8IFtleHByXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBnbG9iYWxfZW52KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2YWwtZXhwci1jZWs6IGV4cGVjdGVkIDEtMiBhcmdzXCIpKTtcblxuICBiaW5kIFwiY2VrLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgIGxldCBhcmdfbGlzdCA9IG1hdGNoIGEgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IHYgLT4gW3ZdIGluXG4gICAgICBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGYgYXJnX2xpc3QpXG4gICAgfCBbZjsgX10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2VrLWNhbGw6IG5vdCBjYWxsYWJsZTogXCIgXiB0eXBlX29mIGYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1jYWxsOiBleHBlY3RlZCAoZm4gYXJncylcIikpO1xuXG4gIGJpbmQgXCJzeC1wYXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+IExpc3QgKFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4LXBhcnNlOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuXG4gICgqIHBhcnNlOiBzYW1lIGFzIHNlcnZlciDigJQgdW53cmFwcyBzaW5nbGUgcmVzdWx0cywgcmV0dXJucyBsaXN0IGZvciBtdWx0aXBsZS5cbiAgICAgVXNlZCBieSBib290LnN4IChwYWdlIHNjcmlwdHMsIHN1c3BlbnNlKSBhbmQgZW5naW5lLnN4IChtYXJzaCB1cGRhdGUpLiAqKVxuICBiaW5kIFwicGFyc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSB8IFtTeEV4cHIgc3JjXSAtPlxuICAgICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICAgIChtYXRjaCBleHBycyB3aXRoIFtlXSAtPiBlIHwgXyAtPiBMaXN0IGV4cHJzKVxuICAgIHwgW3ZdIC0+IHZcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJzZTogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcblxuICBiaW5kIFwic3gtc2VyaWFsaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChpbnNwZWN0IHYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtc2VyaWFsaXplOiBleHBlY3RlZCAxIGFyZ1wiKSk7XG5cbiAgKCogLS0tIEFzc2VydGlvbnMgJiBlcXVhbGl0eSAtLS0gKilcbiAgbGV0IHJlYyBkZWVwX2VxdWFsIGEgYiA9XG4gICAgbWF0Y2ggYSwgYiB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPiB0cnVlIHwgQm9vbCBhLCBCb29sIGIgLT4gYSA9IGJcbiAgICB8IEludGVnZXIgYSwgSW50ZWdlciBiIC0+IGEgPSBiXG4gICAgfCBOdW1iZXIgYSwgTnVtYmVyIGIgLT4gYSA9IGJcbiAgICB8IEludGVnZXIgYSwgTnVtYmVyIGIgLT4gZmxvYXRfb2ZfaW50IGEgPSBiXG4gICAgfCBOdW1iZXIgYSwgSW50ZWdlciBiIC0+IGEgPSBmbG9hdF9vZl9pbnQgYlxuICAgIHwgU3RyaW5nIGEsIFN0cmluZyBiIC0+IGEgPSBiXG4gICAgfCBTeW1ib2wgYSwgU3ltYm9sIGIgLT4gYSA9IGIgfCBLZXl3b3JkIGEsIEtleXdvcmQgYiAtPiBhID0gYlxuICAgIHwgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSksIChMaXN0IGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBiIH0pIC0+XG4gICAgICBMaXN0Lmxlbmd0aCBhID0gTGlzdC5sZW5ndGggYiAmJiBMaXN0LmZvcl9hbGwyIGRlZXBfZXF1YWwgYSBiXG4gICAgfCBEaWN0IGEsIERpY3QgYiAtPlxuICAgICAgbGV0IGthID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgYSBbXSBpblxuICAgICAgbGV0IGtiID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgYiBbXSBpblxuICAgICAgTGlzdC5sZW5ndGgga2EgPSBMaXN0Lmxlbmd0aCBrYiAmJlxuICAgICAgTGlzdC5mb3JfYWxsIChmdW4gayAtPiBIYXNodGJsLm1lbSBiIGsgJiZcbiAgICAgICAgZGVlcF9lcXVhbCAoSGFzaHRibC5maW5kIGEgaykgKEhhc2h0YmwuZmluZCBiIGspKSBrYVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBiaW5kIFwiZXF1YWw/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbYTsgYl0gLT4gQm9vbCAoZGVlcF9lcXVhbCBhIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVxdWFsPzogMiBhcmdzXCIpKTtcbiAgYmluZCBcImFzc2VydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2NvbmRdIC0+IGlmIG5vdCAoc3hfdHJ1dGh5IGNvbmQpIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJBc3NlcnRpb24gZmFpbGVkXCIpOyBCb29sIHRydWVcbiAgICB8IFtjb25kOyBtc2ddIC0+IGlmIG5vdCAoc3hfdHJ1dGh5IGNvbmQpIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiQXNzZXJ0aW9uOiBcIiBeIHZhbHVlX3RvX3N0cmluZyBtc2cpKTsgQm9vbCB0cnVlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXNzZXJ0OiAxLTIgYXJnc1wiKSk7XG5cbiAgYmluZCBcInRyeS1jYWxsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5IGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbdGh1bmtdKSAoRW52IGdsb2JhbF9lbnYpKTtcbiAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBkIFwib2tcIiAoQm9vbCB0cnVlKTsgRGljdCBkXG4gICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgZCBcIm9rXCIgKEJvb2wgZmFsc2UpOyBIYXNodGJsLnJlcGxhY2UgZCBcImVycm9yXCIgKFN0cmluZyBtc2cpOyBEaWN0IGQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidHJ5LWNhbGw6IDEgYXJnXCIpKTtcblxuICAoKiAtLS0gQnl0ZWNvZGUgbG9hZGluZyBmcm9tIHMtZXhwcmVzc2lvbiBmb3JtYXQgLS0tXG4gICAgIChzeGJjIHZlcnNpb24gaGFzaCAoY29kZSA6YXJpdHkgTiA6dXB2YWx1ZS1jb3VudCBOIDpieXRlY29kZSAoLi4uKSA6Y29uc3RhbnRzICguLi4pKSlcbiAgICAgUmVjdXJzaXZlbHkgY29udmVydHMgdGhlIFNYIHRyZWUgaW50byB0aGUgZGljdCBmb3JtYXQgdGhhdCBsb2FkTW9kdWxlIGV4cGVjdHMuICopXG4gIGJpbmQgXCJsb2FkLXN4YmNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IChfIDo6IF8gOjogXyA6OiBjb2RlX2Zvcm0gOjogXyldIHwgW0xpc3QgKF8gOjogXyA6OiBjb2RlX2Zvcm0gOjogXyldIC0+XG4gICAgICBsZXQgcmVjIGNvbnZlcnRfY29kZSBmb3JtID1cbiAgICAgICAgbWF0Y2ggZm9ybSB3aXRoXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwiY29kZVwiIDo6IHJlc3QpIC0+XG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICAgICAgbGV0IHJlYyBwYXJzZV9rdiA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IEtleXdvcmQgXCJhcml0eVwiIDo6IChOdW1iZXIgXyBhcyBuKSA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwiYXJpdHlcIiBuOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJhcml0eVwiIDo6IChJbnRlZ2VyIF8gYXMgbikgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZCBcImFyaXR5XCIgbjsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwidXB2YWx1ZS1jb3VudFwiIDo6IChOdW1iZXIgXyBhcyBuKSA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwidXB2YWx1ZS1jb3VudFwiIG47IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgS2V5d29yZCBcInVwdmFsdWUtY291bnRcIiA6OiAoSW50ZWdlciBfIGFzIG4pIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJ1cHZhbHVlLWNvdW50XCIgbjsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiYnl0ZWNvZGVcIiA6OiBMaXN0IG51bXMgOjogcmVzdCAtPlxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImJ5dGVjb2RlXCIgKExpc3QgbnVtcyk7IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgS2V5d29yZCBcImNvbnN0YW50c1wiIDo6IExpc3QgY29uc3RzIDo6IHJlc3QgLT5cbiAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdGFudHNcIiAoTGlzdCAoTGlzdC5tYXAgY29udmVydF9jb25zdCBjb25zdHMpKTsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBfIDo6IHJlc3QgLT4gcGFyc2Vfa3YgcmVzdCAgKCogc2tpcCB1bmtub3duIGtleXdvcmRzICopXG4gICAgICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBwYXJzZV9rdiByZXN0O1xuICAgICAgICAgIERpY3QgZFxuICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwibG9hZC1zeGJjOiBleHBlY3RlZCAoY29kZSAuLi4pLCBnb3QgXCIgXiB0eXBlX29mIGZvcm0pKVxuICAgICAgYW5kIGNvbnZlcnRfY29uc3QgPSBmdW5jdGlvblxuICAgICAgICB8IExpc3QgKFN5bWJvbCBcImNvZGVcIiA6OiBfKSBhcyBmb3JtIC0+IGNvbnZlcnRfY29kZSBmb3JtXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwibGlzdFwiIDo6IGl0ZW1zKSAtPiBMaXN0IChMaXN0Lm1hcCBjb252ZXJ0X2NvbnN0IGl0ZW1zKVxuICAgICAgICB8IHYgLT4gdiAgKCogc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMsIG5pbCwgc3ltYm9scywga2V5d29yZHMgcGFzcyB0aHJvdWdoICopXG4gICAgICBpblxuICAgICAgbGV0IG1vZHVsZV92YWwgPSBjb252ZXJ0X2NvZGUgY29kZV9mb3JtIGluXG4gICAgICBsZXQgY29kZSA9IFN4X3ZtLmNvZGVfZnJvbV92YWx1ZSBtb2R1bGVfdmFsIGluXG4gICAgICAoKiBVc2UgZXhlY3V0ZV9tb2R1bGVfc2FmZSB0byBoYW5kbGUgaW1wb3J0IHN1c3BlbnNpb24uXG4gICAgICAgICBMaWJyYXJpZXMgY29tcGlsZWQgZnJvbSBkZWZpbmUtbGlicmFyeSArIGltcG9ydCBlbWl0IE9QX1BFUkZPUk1cbiAgICAgICAgIGF0IHRoZSBlbmQ7IHdlIGNhdGNoIGFuZCByZXNvbHZlIHRoZSBpbXBvcnQgaW5saW5lLiAqKVxuICAgICAgKHRyeVxuICAgICAgICBpZ25vcmUgKFN4X3ZtLmV4ZWN1dGVfbW9kdWxlIGNvZGUgX3ZtX2dsb2JhbHMpXG4gICAgICAgd2l0aFxuICAgICAgIHwgU3hfdm0uVm1TdXNwZW5kZWQgXyAtPiAoKSAgKCogSW1wb3J0IHN1c3BlbnNpb24g4oCUIGRlZmluZXMgYWxyZWFkeSBpbiBnbG9iYWxzICopXG4gICAgICAgfCBfIC0+ICgpKTtcbiAgICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgICAgTnVtYmVyIChmbG9hdF9vZl9pbnQgKEhhc2h0YmwubGVuZ3RoIF92bV9nbG9iYWxzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb2FkLXN4YmM6IGV4cGVjdGVkIChzeGJjIHZlcnNpb24gaGFzaCAoY29kZSAuLi4pKVwiKSk7XG5cbiAgKCogLS0tIExpc3QgbXV0YXRpb24gLS0tICopXG4gIGJpbmQgXCJhcHBlbmQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyB2XSAtPiByIDo9ICFyIEAgW3ZdOyBMaXN0UmVmIHJcbiAgICB8IFtMaXN0IGl0ZW1zOyB2XSAtPiBMaXN0IChpdGVtcyBAIFt2XSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhcHBlbmQhOiBleHBlY3RlZCBsaXN0IGFuZCB2YWx1ZVwiKSk7XG5cbiAgKCogcmVtb3ZlISDigJQgbXV0YXRlIExpc3RSZWYgaW4tcGxhY2UsIHJlbW92aW5nIGJ5IGlkZW50aXR5ICg9PSkgKilcbiAgYmluZCBcInJlbW92ZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IHRhcmdldF0gLT5cbiAgICAgIHIgOj0gTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gdGFyZ2V0KSAhcjsgTGlzdFJlZiByXG4gICAgfCBbTGlzdCBpdGVtczsgdGFyZ2V0XSAtPlxuICAgICAgTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gdGFyZ2V0KSBpdGVtcylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhcHBlbmQhOiBsaXN0IGFuZCB2YWx1ZVwiKSk7XG5cbiAgKCogLS0tIEVudmlyb25tZW50IG9wcyAtLS0gKilcbiAgKCogVXNlIHVud3JhcF9lbnYgZm9yIG5pbC9kaWN0IHRvbGVyYW5jZSwgbWF0Y2hpbmcgdGhlIHNlcnZlciBrZXJuZWwgKilcbiAgbGV0IHV3ID0gU3hfcnVudGltZS51bndyYXBfZW52IGluXG4gIGJpbmQgXCJtYWtlLWVudlwiIChmdW4gXyAtPiBFbnYgKG1ha2VfZW52ICgpKSk7XG4gIGJpbmQgXCJnbG9iYWwtZW52XCIgKGZ1biBfIC0+IEVudiBnbG9iYWxfZW52KTtcbiAgYmluZCBcImVudi1oYXM/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGtdIHwgW2U7IEtleXdvcmQga10gLT4gQm9vbCAoZW52X2hhcyAodXcgZSkgaykgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWhhcz9cIikpO1xuICBiaW5kIFwiZW52LWdldFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrXSB8IFtlOyBLZXl3b3JkIGtdIC0+IGVudl9nZXQgKHV3IGUpIGsgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWdldFwiKSk7XG4gIGJpbmQgXCJlbnYtYmluZCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcgazsgdl0gfCBbZTsgS2V5d29yZCBrOyB2XSAtPiBlbnZfYmluZCAodXcgZSkgayB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1iaW5kIVwiKSk7XG4gIGJpbmQgXCJlbnYtc2V0IVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrOyB2XSB8IFtlOyBLZXl3b3JkIGs7IHZdIC0+IGVudl9zZXQgKHV3IGUpIGsgdiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtc2V0IVwiKSk7XG4gIGJpbmQgXCJlbnYtZXh0ZW5kXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZV0gLT4gRW52IChlbnZfZXh0ZW5kICh1dyBlKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWV4dGVuZFwiKSk7XG4gIGJpbmQgXCJlbnYtbWVyZ2VcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBTeF9ydW50aW1lLmVudl9tZXJnZSBhIGIgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LW1lcmdlXCIpKTtcblxuICAoKiAtLS0gVHlwZSBjb25zdHJ1Y3RvcnMgLS0tICopXG4gIGJpbmQgXCJtYWtlLXN5bWJvbFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBTeW1ib2wgcyB8IFt2XSAtPiBTeW1ib2wgKHZhbHVlX3RvX3N0cmluZyB2KSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXN5bWJvbFwiKSk7XG4gIGJpbmQgXCJtYWtlLWtleXdvcmRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgc10gLT4gS2V5d29yZCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Uta2V5d29yZFwiKSk7XG4gIGJpbmQgXCJrZXl3b3JkLW5hbWVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtLZXl3b3JkIGtdIC0+IFN0cmluZyBrIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImtleXdvcmQtbmFtZVwiKSk7XG4gIGJpbmQgXCJzeW1ib2wtbmFtZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N5bWJvbCBzXSAtPiBTdHJpbmcgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeW1ib2wtbmFtZVwiKSk7XG5cbiAgKCogLS0tIENvbXBvbmVudC9Jc2xhbmQgYWNjZXNzb3JzIChtdXN0IGhhbmRsZSBib3RoIHR5cGVzKSAtLS0gKilcbiAgYmluZCBcImNvbXBvbmVudC1uYW1lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gU3RyaW5nIGMuY19uYW1lIHwgW0lzbGFuZCBpXSAtPiBTdHJpbmcgaS5pX25hbWUgfCBfIC0+IFN0cmluZyBcIlwiKTtcbiAgYmluZCBcImNvbXBvbmVudC1jbG9zdXJlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gRW52IGMuY19jbG9zdXJlIHwgW0lzbGFuZCBpXSAtPiBFbnYgaS5pX2Nsb3N1cmUgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcbiAgYmluZCBcImNvbXBvbmVudC1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICAgIHwgW0lzbGFuZCBpXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gICAgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjb21wb25lbnQtYm9keVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IGMuY19ib2R5IHwgW0lzbGFuZCBpXSAtPiBpLmlfYm9keSB8IF8gLT4gTmlsKTtcbiAgbGV0IGhhc19jaGlsZHJlbl9pbXBsID0gTmF0aXZlRm4gKFwiY29tcG9uZW50LWhhcy1jaGlsZHJlbj9cIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW4gfCBbSXNsYW5kIGldIC0+IEJvb2wgaS5pX2hhc19jaGlsZHJlbiB8IF8gLT4gQm9vbCBmYWxzZSkgaW5cbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiY29tcG9uZW50LWhhcy1jaGlsZHJlblwiIGhhc19jaGlsZHJlbl9pbXBsKTtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiY29tcG9uZW50LWhhcy1jaGlsZHJlbj9cIiBoYXNfY2hpbGRyZW5faW1wbCk7XG4gIGJpbmQgXCJjb21wb25lbnQtYWZmaW5pdHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBTdHJpbmcgYy5jX2FmZmluaXR5IHwgW0lzbGFuZCBfXSAtPiBTdHJpbmcgXCJjbGllbnRcIiB8IF8gLT4gU3RyaW5nIFwiYXV0b1wiKTtcbiAgYmluZCBcImNvbXBvbmVudC1wYXJhbS10eXBlc1wiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwiY29tcG9uZW50LXNldC1wYXJhbS10eXBlcyFcIiAoZnVuIF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQ0VLIHN0ZXBwaW5nIC0tLSAqKVxuICBiaW5kIFwibWFrZS1jZWstc3RhdGVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtjOyBlOyBrXSAtPiBTeF9yZWYubWFrZV9jZWtfc3RhdGUgYyBlIGsgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1jZWstc3RhdGVcIikpO1xuICBiaW5kIFwiY2VrLXN0ZXBcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtzXSAtPiBTeF9yZWYuY2VrX3N0ZXAgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstc3RlcFwiKSk7XG4gIGJpbmQgXCJjZWstcGhhc2VcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtzXSAtPiBTeF9yZWYuY2VrX3BoYXNlIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXBoYXNlXCIpKTtcbiAgYmluZCBcImNlay12YWx1ZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfdmFsdWUgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstdmFsdWVcIikpO1xuICBiaW5kIFwiY2VrLXRlcm1pbmFsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfdGVybWluYWxfcCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay10ZXJtaW5hbD9cIikpO1xuICBiaW5kIFwiY2VrLWtvbnRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtzXSAtPiBTeF9yZWYuY2VrX2tvbnQgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWsta29udFwiKSk7XG4gIGJpbmQgXCJmcmFtZS10eXBlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZl0gLT4gU3hfcmVmLmZyYW1lX3R5cGUgZiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmcmFtZS10eXBlXCIpKTtcblxuICAoKiAtLS0gU3RyaWN0IG1vZGUgLS0tICopXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIipzdHJpY3QqXCIgKEJvb2wgZmFsc2UpKTtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiKnByaW0tcGFyYW0tdHlwZXMqXCIgTmlsKTtcbiAgYmluZCBcInNldC1zdHJpY3QhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gU3hfcmVmLl9zdHJpY3RfcmVmIDo9IHY7IGlnbm9yZSAoZW52X3NldCBnbG9iYWxfZW52IFwiKnN0cmljdCpcIiB2KTsgTmlsIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwic2V0LXByaW0tcGFyYW0tdHlwZXMhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gU3hfcmVmLl9wcmltX3BhcmFtX3R5cGVzX3JlZiA6PSB2OyBpZ25vcmUgKGVudl9zZXQgZ2xvYmFsX2VudiBcIipwcmltLXBhcmFtLXR5cGVzKlwiIHYpOyBOaWwgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJ2YWx1ZS1tYXRjaGVzLXR5cGU/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdjsgdF0gLT4gU3hfcmVmLnZhbHVlX21hdGNoZXNfdHlwZV9wIHYgdCB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQXBwbHkgLS0tICopXG4gIGJpbmQgXCJhcHBseVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgZiA6OiByZXN0IC0+XG4gICAgICBsZXQgYWxsX2FyZ3MgPSBtYXRjaCBMaXN0LnJldiByZXN0IHdpdGggTGlzdCBsYXN0IDo6IHByZWZpeCAtPiBMaXN0LnJldiBwcmVmaXggQCBsYXN0IHwgXyAtPiByZXN0IGluXG4gICAgICBTeF9ydW50aW1lLnN4X2NhbGwgZiBhbGxfYXJnc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGx5XCIpKTtcblxuICAoKiAtLS0gU2NvcGUgc3RhY2sgLS0tICopXG4gICgqIFNjb3BlIHByaW1pdGl2ZXMgKHNjb3BlLXB1c2ghLCBzY29wZS1wb3AhLCBjb250ZXh0LCBjb2xsZWN0ISwgY29sbGVjdGVkLFxuICAgICBlbWl0ISwgZW1pdHRlZCwgc2NvcGUtZW1pdCEsIHNjb3BlLWVtaXR0ZWQsIGV0Yy4pIGFyZSByZWdpc3RlcmVkIGJ5XG4gICAgIFN4X3ByaW1pdGl2ZXMgbW9kdWxlIGluaXRpYWxpemF0aW9uIGluIHRoZSBwcmltaXRpdmVzIHRhYmxlLlxuICAgICBUaGUgQ0VLIGV2YWx1YXRvciBmYWxscyB0aHJvdWdoIHRvIHRoZSBwcmltaXRpdmVzIHRhYmxlIHdoZW4gYSBzeW1ib2xcbiAgICAgaXNuJ3QgaW4gdGhlIGVudiwgc28gdGhlc2Ugd29yayBhdXRvbWF0aWNhbGx5LlxuICAgICBPbmx5IHByb3ZpZGUtcHVzaCEvcHJvdmlkZS1wb3AhIG5lZWQgZXhwbGljaXQgZW52IGJpbmRpbmdzIGFzIGFsaWFzZXMuICopXG4gIGJpbmQgXCJwcm92aWRlLXB1c2ghXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbbjsgdl0gLT4gU3hfcnVudGltZS5wcm92aWRlX3B1c2ggbiB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInByb3ZpZGUtcHVzaCFcIikpO1xuICBiaW5kIFwicHJvdmlkZS1wb3AhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbbl0gLT4gU3hfcnVudGltZS5wcm92aWRlX3BvcCBuIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInByb3ZpZGUtcG9wIVwiKSk7XG5cbiAgKCogUnVudGltZSBoZWxwZXJzIGZvciBieXRlY29kZWQgZGVmY29tcC9kZWZpc2xhbmQvZGVmbWFjcm8gZm9ybXMuXG4gICAgIFRoZSBjb21waWxlciBlbWl0cyBHTE9CQUxfR0VUIFwiZXZhbC1kZWZjb21wXCIgKyBDQUxMIOKAlCB0aGVzZSBtdXN0XG4gICAgIGV4aXN0IGFzIGNhbGxhYmxlIHZhbHVlcyBmb3IgYnl0ZWNvZGVkIC5zeCBmaWxlcyB0aGF0IGNvbnRhaW5cbiAgICAgY29tcG9uZW50IGRlZmluaXRpb25zIChlLmcuIGNzc3guc3gpLiAqKVxuICBiaW5kIFwiZXZhbC1kZWZjb21wXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMaXN0IChfIDo6IHJlc3QpXSAtPiBTeF9yZWYuc2ZfZGVmY29tcCAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiZXZhbC1kZWZpc2xhbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZpc2xhbmQgKExpc3QgcmVzdCkgKEVudiBnbG9iYWxfZW52KSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImV2YWwtZGVmbWFjcm9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZtYWNybyAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBGcmFnbWVudCAvIHJhdyBIVE1MIC0tLSAqKVxuICBiaW5kIFwiPD5cIiAoZnVuIGFyZ3MgLT5cbiAgICBSYXdIVE1MIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoIFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHMgfCBOaWwgLT4gXCJcIlxuICAgICAgfCBMaXN0IF8gLT4gU3hfcmVuZGVyLnN4X3JlbmRlcl90b19odG1sIGdsb2JhbF9lbnYgYSBnbG9iYWxfZW52XG4gICAgICB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nIGEpIGFyZ3MpKSk7XG4gIGJpbmQgXCJyYXchXCIgKGZ1biBhcmdzIC0+XG4gICAgUmF3SFRNTCAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCAoZnVuIGEgLT5cbiAgICAgIG1hdGNoIGEgd2l0aCBTdHJpbmcgcyB8IFJhd0hUTUwgcyAtPiBzIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgYSkgYXJncykpKTtcblxuICBiaW5kIFwiZGVmaW5lLXBhZ2UtaGVscGVyXCIgKGZ1biBfIC0+IE5pbCk7XG5cbiAgKCogSU8gcmVnaXN0cnkg4oCUIHNwZWMtbGV2ZWwgZGVmaW8gcG9wdWxhdGVzICppby1yZWdpc3RyeSogaW4gZXZhbHVhdG9yLlxuICAgICBBbGlhcyBhcyBfX2lvLXJlZ2lzdHJ5IGZvciBiYWNrd2FyZCBjb21wYXQuICopXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIl9faW8tcmVnaXN0cnlcIiBTeF9yZWYuX2lvX3JlZ2lzdHJ5Xyk7XG5cbiAgKCogLS0tIFJlbmRlciAtLS0gKilcbiAgU3hfcmVuZGVyLnNldHVwX3JlbmRlcl9lbnYgZ2xvYmFsX2VudjtcbiAgYmluZCBcInNldC1yZW5kZXItYWN0aXZlIVwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwicmVuZGVyLWFjdGl2ZT9cIiAoZnVuIF8gLT4gQm9vbCB0cnVlKTtcbiAgYmluZCBcImlzLWh0bWwtdGFnP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBCb29sIChTeF9yZW5kZXIuaXNfaHRtbF90YWcgcykgfCBfIC0+IEJvb2wgZmFsc2UpO1xuXG4gICgqIC0tLSBSZW5kZXIgY29uc3RhbnRzIG5lZWRlZCBieSB3ZWIgYWRhcHRlcnMgLS0tICopXG4gIGxldCBodG1sX3RhZ3MgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci5odG1sX3RhZ3MpIGluXG4gIGxldCB2b2lkX2VsZW1lbnRzID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBTeF9yZW5kZXIudm9pZF9lbGVtZW50cykgaW5cbiAgbGV0IGJvb2xlYW5fYXR0cnMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci5ib29sZWFuX2F0dHJzKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJIVE1MX1RBR1NcIiBodG1sX3RhZ3MpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJWT0lEX0VMRU1FTlRTXCIgdm9pZF9lbGVtZW50cyk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIkJPT0xFQU5fQVRUUlNcIiBib29sZWFuX2F0dHJzKTtcblxuICAoKiAtLS0gSFRNTCB0YWcgc3BlY2lhbCBmb3JtcyAoZGl2LCBzcGFuLCBoMSwgLi4uKSAtLS0gKilcbiAgKCogUmVnaXN0ZXJlZCBhcyBjdXN0b20gc3BlY2lhbCBmb3JtcyBzbyBrZXl3b3JkcyBhcmUgcHJlc2VydmVkLlxuICAgICBIYW5kbGVyIHJlY2VpdmVzIChyYXctYXJncyBlbnYpLCBldmFsdWF0ZXMgbm9uLWtleXdvcmQgYXJnc1xuICAgICB3aGlsZSBrZWVwaW5nIGtleXdvcmQgbmFtZXMgaW50YWN0LiAqKVxuICBsZXQgZXZhbF90YWdfYXJncyByYXdfYXJncyBlbnYgPVxuICAgIGxldCBhcmdzID0gU3hfcnVudGltZS5zeF90b19saXN0IHJhd19hcmdzIGluXG4gICAgbGV0IHJlYyBwcm9jZXNzID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKEtleXdvcmQgXyBhcyBrdykgOjogdmFsdWUgOjogcmVzdCAtPlxuICAgICAgICAoKiBrZXl3b3JkICsgaXRzIHZhbHVlOiBrZWVwIGtleXdvcmQsIGV2YWx1YXRlIHZhbHVlICopXG4gICAgICAgIGt3IDo6IFN4X3JlZi5ldmFsX2V4cHIgdmFsdWUgZW52IDo6IHByb2Nlc3MgcmVzdFxuICAgICAgfCAoS2V5d29yZCBfIGFzIGt3KSA6OiBbXSAtPlxuICAgICAgICAoKiB0cmFpbGluZyBrZXl3b3JkIHdpdGggbm8gdmFsdWUg4oCUIGJvb2xlYW4gYXR0ciAqKVxuICAgICAgICBba3ddXG4gICAgICB8IGV4cHIgOjogcmVzdCAtPlxuICAgICAgICAoKiBub24ta2V5d29yZDogZXZhbHVhdGUgKilcbiAgICAgICAgU3hfcmVmLmV2YWxfZXhwciBleHByIGVudiA6OiBwcm9jZXNzIHJlc3RcbiAgICBpblxuICAgIHByb2Nlc3MgYXJnc1xuICBpblxuICBMaXN0Lml0ZXIgKGZ1biB0YWcgLT5cbiAgICBpZ25vcmUgKFN4X3JlZi5yZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gKFN0cmluZyB0YWcpXG4gICAgICAoTmF0aXZlRm4gKFwic2Y6XCIgXiB0YWcsIGZ1biBoYW5kbGVyX2FyZ3MgLT5cbiAgICAgICAgbWF0Y2ggaGFuZGxlcl9hcmdzIHdpdGhcbiAgICAgICAgfCBbcmF3X2FyZ3M7IGVudl0gLT4gTGlzdCAoU3ltYm9sIHRhZyA6OiBldmFsX3RhZ19hcmdzIHJhd19hcmdzIGVudilcbiAgICAgICAgfCBfIC0+IE5pbCkpKVxuICApIFN4X3JlbmRlci5odG1sX3RhZ3M7XG5cbiAgKCogLS0tIEVycm9yIGhhbmRsaW5nIC0tLSAqKVxuICBiaW5kIFwiY2VrLXRyeVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3RodW5rOyBoYW5kbGVyXSAtPlxuICAgICAgKHRyeSBTeF9yZWYuY2VrX2NhbGwgdGh1bmsgTmlsXG4gICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPiBTeF9yZWYuY2VrX2NhbGwgaGFuZGxlciAoTGlzdCBbU3RyaW5nIG1zZ10pKVxuICAgIHwgW3RodW5rXSAtPlxuICAgICAgKHRyeSBsZXQgciA9IFN4X3JlZi5jZWtfY2FsbCB0aHVuayBOaWwgaW5cbiAgICAgICAgTGlzdCBbU3ltYm9sIFwib2tcIjsgcl1cbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+IExpc3QgW1N5bWJvbCBcImVycm9yXCI7IFN0cmluZyBtc2ddKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBFdmFsdWF0b3IgYnJpZGdlIGZ1bmN0aW9ucyBuZWVkZWQgYnkgc3BlYyAuc3ggZmlsZXMgLS0tICopXG4gIGJpbmQgXCJldmFsLWV4cHJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2V4cHI7IGVdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidHJhbXBvbGluZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+ICFTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIHYgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJleHBhbmQtbWFjcm9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW21hYzsgcmF3OyBFbnYgZV0gLT4gU3hfcmVmLmV4cGFuZF9tYWNybyBtYWMgcmF3IChFbnYgZSkgfCBbbWFjOyByYXddIC0+IFN4X3JlZi5leHBhbmRfbWFjcm8gbWFjIHJhdyAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiY2FsbC1sYW1iZGFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhOyBfXSB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgICgqIFVzZSBjZWtfY2FsbCBpbnN0ZWFkIG9mIHN4X2NhbGwgdG8gYXZvaWQgZXZhbF9leHByIGNvcHlpbmdcbiAgICAgICAgIERpY3QgdmFsdWVzIChzaWduYWxzKS4gc3hfY2FsbCByZXR1cm5zIGEgVGh1bmsgcmVzb2x2ZWQgdmlhXG4gICAgICAgICBldmFsX2V4cHIgd2hpY2ggZGVlcC1jb3BpZXMgZGljdHMsIGJyZWFraW5nIHNpZ25hbCBtdXRhdGlvbi4gKilcbiAgICAgIFN4X3JlZi5jZWtfY2FsbCBmIGFcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjYWxsLWxhbWJkYTogZXhwZWN0ZWQgKGZuIGFyZ3MgZW52PylcIikpO1xuICBiaW5kIFwiY2VrLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgIGxldCBhcmdfbGlzdCA9IG1hdGNoIGEgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IHYgLT4gW3ZdIGluXG4gICAgICBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGYgYXJnX2xpc3QpXG4gICAgfCBbZjsgX10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2VrLWNhbGw6IG5vdCBjYWxsYWJsZTogXCIgXiB0eXBlX29mIGYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1jYWxsOiBleHBlY3RlZCAoZm4gYXJncylcIikpO1xuICBiaW5kIFwiY2VrLWV2YWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIHwgW2V4cHI7IGVdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicXEtZXhwYW5kLXJ1bnRpbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3RlbXBsYXRlXSAtPiBTeF9yZWYucXFfZXhwYW5kIHRlbXBsYXRlIChFbnYgZ2xvYmFsX2VudikgfCBbdGVtcGxhdGU7IEVudiBlXSAtPiBTeF9yZWYucXFfZXhwYW5kIHRlbXBsYXRlIChFbnYgZSkgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFR5cGUgcHJlZGljYXRlcyBuZWVkZWQgYnkgYWRhcHRlcnMgLS0tICopXG4gIGJpbmQgXCJ0aHVuaz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtUaHVuayBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwidGh1bmstZXhwclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHRodW5rX2V4cHIgdiB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInRodW5rLWVudlwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHRodW5rX2VudiB2IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibGFtYmRhP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwibWFjcm8/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTWFjcm8gX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImlzbGFuZD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImNvbXBvbmVudD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJjYWxsYWJsZT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtOYXRpdmVGbiBfXSB8IFtMYW1iZGEgX10gfCBbQ29tcG9uZW50IF9dIHwgW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwic3ByZWFkP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiY29udGludWF0aW9uP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NvbnRpbnVhdGlvbiBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwibGFtYmRhLXBhcmFtc1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGwubF9wYXJhbXMpIHwgXyAtPiBMaXN0IFtdKTtcbiAgYmluZCBcImxhbWJkYS1ib2R5XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IGwubF9ib2R5IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibGFtYmRhLWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gRW52IGwubF9jbG9zdXJlIHwgXyAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSk7XG5cbiAgKCogLS0tIENvcmUgb3BlcmF0aW9ucyBuZWVkZWQgYnkgYWRhcHRlcnMgLS0tICopXG4gIGJpbmQgXCJzcHJlYWQtYXR0cnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBwYWlyc10gLT4gbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLnJlcGxhY2UgZCBrIHYpIHBhaXJzOyBEaWN0IGQgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcbiAgYmluZCBcIm1ha2Utc3ByZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IFNwcmVhZCAoSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiAoaywgdikgOjogYWNjKSBkIFtdKSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcIm1ha2UtcmF3LWh0bWxcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgc10gLT4gUmF3SFRNTCBzIHwgW3ZdIC0+IFJhd0hUTUwgKHZhbHVlX3RvX3N0cmluZyB2KSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInJhdy1odG1sLWNvbnRlbnRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzIHwgW1N0cmluZyBzXSAtPiBTdHJpbmcgcyB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICBiaW5kIFwiZW1wdHktZGljdD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IEJvb2wgKEhhc2h0YmwubGVuZ3RoIGQgPSAwKSB8IF8gLT4gQm9vbCB0cnVlKTtcbiAgYmluZCBcImlkZW50aWNhbD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBCb29sIChhID09IGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlkZW50aWNhbD9cIikpO1xuICBiaW5kIFwiZm9yLWVhY2gtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2ZuX3ZhbDsgTGlzdCBpdGVtc10gfCBbZm5fdmFsOyBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9XSAtPlxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgaXRlbSAtPlxuICAgICAgICBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW2ZuX3ZhbDsgTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IGl0ZW1dKSAoRW52IGdsb2JhbF9lbnYpKVxuICAgICAgKSBpdGVtczsgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFN0cmluZy9udW1iZXIgaGVscGVycyB1c2VkIGJ5IG9yY2hlc3RyYXRpb24vYnJvd3NlciAtLS0gKilcbiAgYmluZCBcIm1ha2Utc3gtZXhwclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBTeEV4cHIgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXN4LWV4cHJcIikpO1xuICBiaW5kIFwic3gtZXhwci1zb3VyY2VcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTeEV4cHIgc10gLT4gU3RyaW5nIHMgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4LWV4cHItc291cmNlXCIpKTtcbiAgYmluZCBcInBhcnNlLWludFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2ZfaW50IChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBkZWZhdWx0X3ZhbF0gLT4gKHRyeSBOdW1iZXIgKGZsb2F0X29mX2ludCAoaW50X29mX3N0cmluZyBzKSkgd2l0aCBfIC0+IGRlZmF1bHRfdmFsKVxuICAgIHwgW051bWJlciBuXSB8IFtOdW1iZXIgbjsgX10gLT4gTnVtYmVyIChGbG9hdC5yb3VuZCBuKVxuICAgIHwgW187IGRlZmF1bHRfdmFsXSAtPiBkZWZhdWx0X3ZhbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInBhcnNlLW51bWJlclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2Zfc3RyaW5nIHMpIHdpdGggXyAtPiBOaWwpIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBTZXJ2ZXItb25seSBzdHVicyAobm8tb3BzIGluIGJyb3dzZXIpIC0tLSAqKVxuICBiaW5kIFwicXVlcnlcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImFjdGlvblwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwicmVxdWVzdC1hcmdcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtfOyBkXSAtPiBkIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicmVxdWVzdC1tZXRob2RcIiAoZnVuIF8gLT4gU3RyaW5nIFwiR0VUXCIpO1xuICBiaW5kIFwiY3R4XCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJoZWxwZXJcIiAoZnVuIF8gLT4gTmlsKTtcbiAgKClcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBKSVQgY29tcGlsYXRpb24gaG9vayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiBPbiBmaXJzdCBjYWxsIHRvIGEgbmFtZWQgbGFtYmRhLCB0cnkgdG8gY29tcGlsZSBpdCB0byBieXRlY29kZSB2aWEgICopXG4oKiBjb21waWxlci5zeCAobG9hZGVkIGFzIGFuIC5zeCBwbGF0Zm9ybSBmaWxlKS4gQ29tcGlsZWQgY2xvc3VyZXMgcnVuICopXG4oKiBvbiB0aGUgYnl0ZWNvZGUgVk07IGZhaWx1cmVzIGZhbGwgYmFjayB0byB0aGUgQ0VLIGludGVycHJldGVyLiAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IF9qaXRfY29tcGlsaW5nID0gcmVmIGZhbHNlXG5sZXQgX2ppdF9lbmFibGVkID0gcmVmIGZhbHNlXG5cbmxldCAoKSA9XG4gIFN4X3J1bnRpbWUuX2ppdF90cnlfY2FsbF9mbiA6PSBTb21lIChmdW4gZiBhcmdzIC0+XG4gICAgbWF0Y2ggZiB3aXRoXG4gICAgfCBMYW1iZGEgbCB3aGVuICFfaml0X2VuYWJsZWQgLT5cbiAgICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICAgIHwgU29tZSBjbCB3aGVuIG5vdCAoU3hfdm0uaXNfaml0X2ZhaWxlZCBjbCkgLT5cbiAgICAgICAgICh0cnkgU29tZSAoU3hfdm0uY2FsbF9jbG9zdXJlIGNsIGFyZ3MgX3ZtX2dsb2JhbHMpXG4gICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgbGV0IGZuX25hbWUgPSBtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlcyAoYmM9JWQgY29uc3RzPSVkIHVwdj0lZClcXG4lIVwiXG4gICAgICAgICAgICAgIGZuX25hbWUgbXNnXG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19ieXRlY29kZSlcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2NvbnN0YW50cylcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV91cHZhbHVlcyk7XG4gICAgICAgICAgICAoKiBNYXJrIGFzIGZhaWxlZCB0byBzdG9wIHJldHJ5aW5nICopXG4gICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSAoU3hfdm0uaml0X2ZhaWxlZF9zZW50aW5lbCk7XG4gICAgICAgICAgICBOb25lKVxuICAgICAgIHwgU29tZSBfIC0+IE5vbmVcbiAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgIGlmICFfaml0X2NvbXBpbGluZyB0aGVuIE5vbmVcbiAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgX2ppdF9jb21waWxpbmcgOj0gdHJ1ZTtcbiAgICAgICAgICAgbGV0IGNvbXBpbGVkID0gU3hfdm0uaml0X2NvbXBpbGVfbGFtYmRhIGwgX3ZtX2dsb2JhbHMgaW5cbiAgICAgICAgICAgX2ppdF9jb21waWxpbmcgOj0gZmFsc2U7XG4gICAgICAgICAgIChtYXRjaCBjb21waWxlZCB3aXRoXG4gICAgICAgICAgIHwgU29tZSBjbCAtPlxuICAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGNsO1xuICAgICAgICAgICAgICh0cnkgU29tZSAoU3hfdm0uY2FsbF9jbG9zdXJlIGNsIGFyZ3MgX3ZtX2dsb2JhbHMpXG4gICAgICAgICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICAgICBsZXQgZm5fbmFtZTIgPSBtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICAgICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gRkFJTCAlczogJXMgKGJjPSVkIGNvbnN0cz0lZCB1cHY9JWQpXFxuJSFcIlxuICAgICAgICAgICAgICAgICAgZm5fbmFtZTIgbXNnXG4gICAgICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfYnl0ZWNvZGUpXG4gICAgICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfY29uc3RhbnRzKVxuICAgICAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV91cHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgKFN4X3ZtLmppdF9mYWlsZWRfc2VudGluZWwpO1xuICAgICAgICAgICAgICAgIE5vbmUpXG4gICAgICAgICAgIHwgTm9uZSAtPiBOb25lKVxuICAgICAgICAgZW5kKVxuICAgIHwgXyAtPiBOb25lKVxuXG5sZXQgKCkgPSBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJlbmFibGUtaml0IVwiIChOYXRpdmVGbiAoXCJlbmFibGUtaml0IVwiLCBmdW4gXyAtPiBfaml0X2VuYWJsZWQgOj0gdHJ1ZTsgTmlsKSkpXG5cbigqIFNlZWQgQk9USCBfdm1fZ2xvYmFscyBBTkQgZ2xvYmFsX2VudiB3aXRoIEFMTCBwcmltaXRpdmVzIGFzIE5hdGl2ZUZuIHZhbHVlcy5cbiAgIFVuY29uZGl0aW9uYWwg4oCUIG5hdGl2ZSBwcmltaXRpdmVzIGFyZSBhdXRob3JpdGF0aXZlIGZvciBDQUxMX1BSSU0gZGlzcGF0Y2guXG4gICBNdXN0IGJlIGluIGJvdGggYmVjYXVzZSBzeW5jX2Vudl90b192bSgpIGNvcGllcyBnbG9iYWxfZW52IOKGkiBfdm1fZ2xvYmFscy4gKilcbmxldCAoKSA9XG4gIEhhc2h0YmwuaXRlciAoZnVuIG5hbWUgZm4gLT5cbiAgICBsZXQgdiA9IE5hdGl2ZUZuIChuYW1lLCBmbikgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2O1xuICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChpbnRlcm4gbmFtZSkgdlxuICApIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlc1xuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFJlZ2lzdGVyIGdsb2JhbCBTeEtlcm5lbCBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgKCkgPVxuICBsZXQgc3ggPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgbGV0IHdyYXAgZm4gPSBKcy5VbnNhZmUuZnVuX2NhbGxcbiAgICAoSnMuVW5zYWZlLnB1cmVfanNfZXhwciBcIihmdW5jdGlvbihmbikgeyByZXR1cm4gZnVuY3Rpb24oKSB7IGdsb2JhbFRoaXMuX19zeFIgPSB1bmRlZmluZWQ7IHZhciByID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgcmV0dXJuIGdsb2JhbFRoaXMuX19zeFIgIT09IHVuZGVmaW5lZCA/IGdsb2JhbFRoaXMuX19zeFIgOiByOyB9OyB9KVwiKVxuICAgIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLndyYXBfY2FsbGJhY2sgZm4pIHxdIGluXG5cbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwicGFyc2VcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3BhcnNlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic3RyaW5naWZ5XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9zdHJpbmdpZnkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsXCIpICh3cmFwIGFwaV9ldmFsKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZXZhbFZNXCIpICh3cmFwIGFwaV9ldmFsX3ZtKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZXZhbEV4cHJcIikgKHdyYXAgYXBpX2V2YWxfZXhwcik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlbmRlclRvSHRtbFwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcmVuZGVyX3RvX2h0bWwpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwibG9hZE1vZHVsZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfbG9hZF9tb2R1bGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJiZWdpbk1vZHVsZUxvYWRcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPiBhcGlfYmVnaW5fbW9kdWxlX2xvYWQgKCkpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZW5kTW9kdWxlTG9hZFwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+IGFwaV9lbmRfbW9kdWxlX2xvYWQgKCkpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiY29tcGlsZU1vZHVsZVwiKSAod3JhcCBhcGlfY29tcGlsZV9tb2R1bGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJ0eXBlT2ZcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3R5cGVfb2YpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJpbnNwZWN0XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9pbnNwZWN0KTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZW5naW5lXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9lbmdpbmUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJyZWdpc3Rlck5hdGl2ZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcmVnaXN0ZXJfbmF0aXZlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwibG9hZFNvdXJjZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfbG9hZCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImNhbGxGblwiKSAod3JhcCBhcGlfY2FsbF9mbik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImlzQ2FsbGFibGVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2lzX2NhbGxhYmxlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZm5Bcml0eVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfZm5fYXJpdHkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJkZWJ1Z0VudlwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfZGVidWdfZW52KTtcblxuICAoKiBTY29wZSB0cmFjaW5nIEFQSSAqKVxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlT25cIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIFN4X3ByaW1pdGl2ZXMuc2NvcGVfdHJhY2VfZW5hYmxlICgpOyBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic2NvcGVUcmFjZU9mZlwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+XG4gICAgU3hfcHJpbWl0aXZlcy5zY29wZV90cmFjZV9kaXNhYmxlICgpOyBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic2NvcGVUcmFjZURyYWluXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBsZXQgbG9nID0gU3hfcHJpbWl0aXZlcy5zY29wZV90cmFjZV9kcmFpbiAoKSBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5IChBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpKSBsb2cpKSkpKTtcblxuICAoKiBTdGVwIGxpbWl0IGZvciB0aW1lb3V0IHByb3RlY3Rpb24gKilcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic2V0U3RlcExpbWl0XCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gbiAtPlxuICAgIGxldCBsaW1pdCA9IEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBuKSB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICBTeF9yZWYuc3RlcF9saW1pdCA6PSBsaW1pdDtcbiAgICBTeF9yZWYuc3RlcF9jb3VudCA6PSAwO1xuICAgIFN4X3ZtLnZtX3Jlc2V0X2NvdW50ZXJzICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJyZXNldFN0ZXBDb3VudFwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+XG4gICAgU3hfcmVmLnN0ZXBfY291bnQgOj0gMDtcbiAgICBTeF92bS52bV9yZXNldF9jb3VudGVycyAoKTtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpKTtcblxuICBKcy5VbnNhZmUuc2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcIlN4S2VybmVsXCIpIHN4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaW50X29mX3N0cmluZyIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfanNfd3JhcF9jYWxsYmFjayIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDQiLCJhMiIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN4X3ZtIiwiU3hfdHlwZXMiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliIiwiSnNfb2Zfb2NhbWxfSnMiLCJTdGRsaWJfUHJpbnRleGMiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9PcHRpb24iLCJTeF92bV9yZWYiLCJTeF9yZWYiLCJTeF9wcmltaXRpdmVzIiwiU3hfcnVudGltZSIsIlN4X3JlbmRlciIsIlN4X3BhcnNlciIsImhhbmRsZV90YWJsZSIsIm5leHRfaGFuZGxlIiwiYWxsb2NfaGFuZGxlIiwidiIsImlkIiwiZ2V0X2hhbmRsZSIsIm1hdGNoIiwiYWxsb2NfaG9zdF9oYW5kbGUiLCJuZXh0X2hvc3RfaGFuZGxlIiwiaG9zdF9wdXQiLCJvYmoiLCJnbG9iYWxfZW52IiwiY2FsbF9zeF9mbiIsImZuIiwiYXJncyIsInJlc3VsdCIsInRhZ19mbiIsImNzdF9jYWxsYmFjayIsImNzdF9jYWxsYmFja19zX2hhbmRsZV9kIiwiY3N0X3ZtX3BlbmRpbmdfY2VrIiwiY3N0X3ZtX3BlbmRpbmdfY2VrX2JfcmV1c2VfZF9mIiwiY3N0X2ZyYW1lcyIsImNzdF9oYW5kbGUiLCJjc3RfcmV1c2UiLCJjc3QiLCJjc3Rfc3hfcmVzdW1lIiwiY3N0X3NwIiwiY3N0X2hvc3RfaGFuZGxlIiwiY3N0X2RpY3QiLCJjc3Rfa2V5d29yZCIsImNzdF9saXN0IiwiY3N0X3N5bWJvbCIsInZhbHVlX3RvX2pzIiwiYiIsIm4iLCJzIiwiayIsIml0ZW1zIiwiZCIsImhhbmRsZSIsImlubmVyIiwiYXJnc19qcyIsImFyZyIsImV4biIsIm1zZyIsImZuX2luZm8iLCJ2bSIsInJlcXVlc3QiLCJhY3RpdmUiLCJtYWtlX3N1c3BlbnNpb24iLCJyZXEiLCJyZXN1bHRfanMiLCJ2bTIiLCJyZXEyIiwidm1fZnJhbWVfbmFtZXMiLCJleHRyYSIsImRyaXZlIiwiYXJyIiwianNfdG9fdmFsdWUiLCJqcyIsInR5IiwiaCIsImhhc19ob3N0X2NiIiwidHlwZV9maWVsZCIsInQwIiwidDEiLCJpIiwidGFnIiwiaXRlbXNfanMiLCJ0MyIsInQ0Iiwia2V5cyIsImxlbiIsInJldHVybl92aWFfc2lkZV9jaGFubmVsIiwidm1fZ2xvYmFscyIsInN5bmNfZW52X3RvX3ZtIiwicGFyYW0iLCJlbnYiLCJuYW1lIiwicmVzb2x2ZV9mbiIsImNzdF9QYXJzZV9lcnJvciIsImFwaV9wYXJzZSIsInNyY19qcyIsInNyYyIsInZhbHVlcyIsImNzdF9FcnJvciIsImNzdF9FcnJvcl9JT19zdXNwZW5zaW9uX2luX25vbiIsImFwaV9ldmFsIiwiZXhwcnMiLCJhY2MiLCJleHByIiwiY3N0X0Vycm9yX2NvbXBpbGVfbW9kdWxlX25vdF9sIiwiY3N0X2NvbXBpbGVfbW9kdWxlIiwiYXBpX2V2YWxfdm0iLCJjb21waWxlX2ZuIiwiY29kZV92YWwiLCJjb2RlIiwiYXBpX2V2YWxfZXhwciIsImV4cHJfanMiLCJlbnZfanMiLCJjc3RfaW1wb3J0IiwiYXBpX2xvYWQiLCJjb3VudCIsInN0YXRlIiwiZmluYWwiLCJvcCIsImxpYl9zcGVjIiwicmVzcG9uc2UiLCJzeW5jX3ZtX3RvX2VudiIsImV4aXN0aW5nIiwiY3N0X3N1c3BlbmRlZCIsIm1ha2VfanNfaW1wb3J0X3N1c3BlbnNpb24iLCJyZXN1bWVkIiwiZDIiLCJhcGlfbG9hZF9tb2R1bGUiLCJtb2R1bGVfanMiLCJhcGlfZGVidWdfZW52IiwibmFtZV9qcyIsImZvdW5kX2VudiIsImZvdW5kX3ZtIiwidG90YWxfZW52IiwidG90YWxfdm0iLCJlbnZfcyIsInZtX3MiLCJhcGlfY29tcGlsZV9tb2R1bGUiLCJzeF9yZW5kZXJfbW9kZSIsImFwaV9yZW5kZXJfdG9faHRtbCIsInByZXYiLCJodG1sIiwiYXBpX3N0cmluZ2lmeSIsInZfanMiLCJhcGlfdHlwZV9vZiIsImFwaV9pbnNwZWN0IiwiYXBpX2VuZ2luZSIsImFwaV9yZWdpc3Rlcl9uYXRpdmUiLCJjYWxsYmFja19qcyIsIm5hdGl2ZV9mbiIsImpzX2FyZ3MiLCJtYWtlX2pzX2NhbGxGbl9zdXNwZW5zaW9uIiwiYXBpX2NhbGxfZm4iLCJmbl9qcyIsImVycl9vYmoiLCJhcGlfaXNfY2FsbGFibGUiLCJhcGlfZm5fYXJpdHkiLCJsIiwiYmluZCIsImNzdF9jZWtfZXZhbCIsImUiLCJlbnZfdmFsIiwiY3N0X2Nla19jYWxsIiwiY3N0X2Nla19jYWxsX2V4cGVjdGVkX2ZuX2FyZ3MiLCJjc3RfY2VrX2NhbGxfbm90X2NhbGxhYmxlIiwiYSIsImFyZ19saXN0IiwiZGVlcF9lcXVhbCIsImthIiwia2IiLCJjb25kIiwiY3N0X2Vycm9yIiwiY3N0X29rIiwidGh1bmsiLCJjb2RlX2Zvcm0iLCJjc3RfY29kZSIsImNvbnZlcnRfY29kZSIsImZvcm0iLCJyZXN0IiwicGFyc2Vfa3YiLCJjc3RfYXJpdHkiLCJjc3RfYnl0ZWNvZGUiLCJjc3RfY29uc3RhbnRzIiwiY3N0X3VwdmFsdWVfY291bnQiLCJjb25zdHMiLCJudW1zIiwiY29udmVydF9jb25zdCIsIm1vZHVsZV92YWwiLCJyIiwidGFyZ2V0IiwieCIsInV3IiwiY3N0X2Vudl9oYXMiLCJjc3RfZW52X2dldCIsImNzdF9lbnZfYmluZCIsImNzdF9lbnZfc2V0IiwiY3N0X2Vudl9leHRlbmQiLCJjc3RfZW52X21lcmdlIiwiY3N0X21ha2Vfc3ltYm9sIiwiY3N0X21ha2Vfa2V5d29yZCIsImNzdF9rZXl3b3JkX25hbWUiLCJjc3Rfc3ltYm9sX25hbWUiLCJjIiwiY3N0X2NvbXBvbmVudF9oYXNfY2hpbGRyZW4iLCJoYXNfY2hpbGRyZW5faW1wbCIsImNzdF9tYWtlX2Nla19zdGF0ZSIsImNzdF9jZWtfc3RlcCIsImNzdF9jZWtfcGhhc2UiLCJjc3RfY2VrX3ZhbHVlIiwiY3N0X2Nla190ZXJtaW5hbCIsImNzdF9jZWtfa29udCIsImNzdF9mcmFtZV90eXBlIiwiY3N0X3N0cmljdCIsImNzdF9wcmltX3BhcmFtX3R5cGVzIiwidCIsImNzdF9hcHBseSIsImFsbF9hcmdzIiwicHJlZml4IiwibGFzdCIsImNzdF9wcm92aWRlX3B1c2giLCJjc3RfcHJvdmlkZV9wb3AiLCJodG1sX3RhZ3MiLCJ2b2lkX2VsZW1lbnRzIiwiYm9vbGVhbl9hdHRycyIsImV2YWxfdGFnX2FyZ3MiLCJyYXdfYXJncyIsInByb2Nlc3MiLCJrdyIsInZhbHVlIiwiaGFuZGxlcl9hcmdzIiwiaGFuZGxlciIsInJhdyIsIm1hYyIsInRlbXBsYXRlIiwicGFpcnMiLCJjc3RfaWRlbnRpY2FsIiwiZm5fdmFsIiwiaXRlbSIsImNzdF9tYWtlX3N4X2V4cHIiLCJjc3Rfc3hfZXhwcl9zb3VyY2UiLCJkZWZhdWx0X3ZhbCIsImNzdF9iYyIsImNzdF9jb25zdHMiLCJjc3RfdXB2IiwiY3N0X2ppdF9GQUlMIiwiY3N0X2ppdF9GQUlMX3Nfc19iY19kX2NvbnN0c19kIiwiaml0X2NvbXBpbGluZyIsImppdF9lbmFibGVkIiwiY2wiLCJmbl9uYW1lIiwiY29tcGlsZWQiLCJmbl9uYW1lMiIsImNzdF9lbmFibGVfaml0Iiwid3JhcCIsInN4IiwiaW5fYmF0Y2giLCJsb2ciLCJsaW1pdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBLElBQUFDLDhC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LE9BQXFCO0FBQUEsT0FFMUY7QUFBQSxNQTJvQm9HO0FBQUEsR0FDdkQ7QUFBQTtBQUFBLGVBQUF5RTtBQUFBQSxPQXpvQjdDO0FBQUEsUUFFRTtBQUFBO0FBQUEsbUJBQUF4QyxHQUFBakM7QUFBQUEsZUFBQSxJQUNzQztBQUFBLFdBQVUseURBQUU7QUFBQTtBQUFBO0FBQUEsUUFDckM7QUFBQTtBQUFBLE9BR2Y7QUFBQSxNQWtvQmdHO0FBQUEsR0FDbkQ7QUFBQSxHQUNQO0FBQUEsR0FDQztBQUFBLEdBQ0Q7QUFBQSxHQUNRO0FBQUEsR0FDSjtBQUFBLEdBQ0o7QUFBQSxHQUNJO0FBQUEsR0FDSDtBQUFBLEdBQ0M7QUFBQSxHQUdJO0FBQUE7QUFBQSxlQUFBeUU7QUFBQUEsT0FDMUM7QUFBQSxPQUFtQztBQUFBLE1BQTBCO0FBQUEsR0FDbEI7QUFBQTtBQUFBLGVBQUFBO0FBQUFBLE9BQzNDO0FBQUEsT0FBb0M7QUFBQSxNQUEwQjtBQUFBLEdBQ2pCO0FBQUE7QUFBQSxlQUFBQTtBQUFBQTtBQUFBQSxRQUFBdUssTUFDbkM7QUFBQSxZQUNnQztBQUFBLE9BQWYsT0FBVixtQkFBVSwrQkFBeUU7QUFBQTtBQUFBLEdBRzFEO0FBQUE7QUFBQSxlQUFBak47QUFBQUEsV0FBQWtOLFFBQzFDO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUEsT0FBMEI7QUFBQSxNQUNGO0FBQUEsR0FDb0I7QUFBQTtBQUFBLGVBQUF4SztBQUFBQSxPQUM1QztBQUFBLE9BQ0E7QUFBQSxPQUEwQjtBQUFBLE1BQ0Y7QUFBQSxHQUUxQjtBQUFBLEdBQXdEO0FBQUE7QUFBQSxFRGhtQzFEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzY5NjgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkX2V4aXQuY21vLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiU3RkbGliIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxTQUFBO0FBQUEsR0NpQlE7QUFBQSxHQUFZO0FBQUE7QUFBQSxFRGpCcEIiLCJpZ25vcmVMaXN0IjpbMF19fV19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3hfYnJvd3Nlci5iYy5qcyIsInNlY3Rpb25zIjpbeyJvZmZzZXQiOnsibGluZSI6MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL3N4X2Jyb3dzZXIuYmMucnVudGltZS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK3N5bmMuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JsYWtlMi5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2VmZmVjdC5qcyIsIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLytkb21haW4uanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rcnVudGltZV9ldmVudHMuanMiLCIvYnVpbHRpbi8renN0ZC5qcyIsIi9idWlsdGluLyt3ZWFrLmpzIiwiL2J1aWx0aW4vK2djLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytncmFwaGljcy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rcHJuZy5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK3N0ci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgcmV0dXJuIHMucmVwZWF0KG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5KG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsIGxlbiAtPSAxMDI0KVxuICAgIHMgKz0gZi5hcHBseShudWxsLCBhLnNsaWNlKGksIGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCwgbGVuIC09IDEwMjQpXG4gICAgcyArPSBmLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgZWxzZSByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICAgIGNhc2UgMCAvKiBCWVRFUyAqLzpcbiAgICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICAgIGNhc2UgNCAvKiBBUlJBWSAqLzpcbiAgICAgIHJldHVybiBzLmNbaV07XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIGlmIChpICsgMSA9PT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSksXG4gICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4KSB8IGIxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpLFxuICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCkgfCAoYjMgPDwgMTYpIHwgKGIyIDw8IDgpIHwgYjE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpLFxuICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAxKSxcbiAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0KSB8IChiMyA8PCAxNikgfCAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQoX3MsIF9pLCBfYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocywgaSwgaTE2KSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhmZiAmIChpMTYgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocywgaSwgaTMyKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhmZiAmIChpMzIgPj4gMjQpLFxuICAgIGIzID0gMHhmZiAmIChpMzIgPj4gMTYpLFxuICAgIGIyID0gMHhmZiAmIChpMzIgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLCBpLCBpNjQpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczoganNvb190ZXh0X2VuY29kZXJcbnZhciBqc29vX3RleHRfZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2RlclxudmFyIGpzb29fdGV4dF9kZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHtcbiAgICByZXR1cm4gbmV3IE1sQnl0ZXMoOSwgcywgcy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhID0ganNvb190ZXh0X2VuY29kZXIuZW5jb2RlKHMpO1xuICAgIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczoganNvb190ZXh0X2RlY29kZXJcbmNsYXNzIE1sQnl0ZXMge1xuICBjb25zdHJ1Y3Rvcih0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgICB0aGlzLnQgPSB0YWc7XG4gICAgdGhpcy5jID0gY29udGVudHM7XG4gICAgdGhpcy5sID0gbGVuZ3RoO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgc3dpdGNoICh0aGlzLnQpIHtcbiAgICAgIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIGNhc2UgOCAvKkJZVEVTIHwgTk9UX0FTQ0lJKi86XG4gICAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgMCAvKkJZVEVTIHwgVU5LTk9XTiovOlxuICAgICAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgICBlbHNlIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgfVxuXG4gIHRvVXRmMTYoKSB7XG4gICAgaWYgKHRoaXMudCA9PT0gOSkgcmV0dXJuIHRoaXMuYztcbiAgICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXModGhpcyk7XG4gICAgcmV0dXJuIGpzb29fdGV4dF9kZWNvZGVyLmRlY29kZShhKTtcbiAgfVxuXG4gIHNsaWNlKCkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50ID09PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gICAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCwgY29udGVudCwgdGhpcy5sKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09PSAyIC8qIFBBUlRJQUwgKi8pIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgXCJcXDBcIik7XG4gIGVsc2Ugcy5jID0gY2FtbF9zdWJfdWludDhfYXJyYXlfdG9fanNieXRlcyhzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYyxcbiAgICBsID0gYi5sZW5ndGgsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocykge1xuICBpZiAocy50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbiA/IDIgOiA5LCBcIlwiLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcoX2xlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuID8gMiA6IDksIFwiXCIsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIDAsIGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgMCwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShhLnNsaWNlKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5KGEpIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCwgYSwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICBzMS50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgczIudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBzMS5jIDwgczIuYyA/IC0xIDogczEuYyA+IHMyLmMgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZiAoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gczEuYyA9PT0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAxIC0gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gMSAtIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPD0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPCBzMi5jID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsIHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0KGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSBsID09PSBzLmwgPyAwIC8qIEJZVEVTIHwgVU5LTk9XTiAqLyA6IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChcbiAgICBpMiA9PT0gMCAmJlxuICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpXG4gICkge1xuICAgIHMyLmMgPVxuICAgICAgczEudCA9PT0gNCAvKiBBUlJBWSAqL1xuICAgICAgICA/IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbilcbiAgICAgICAgOiBpMSA9PT0gMCAmJiBzMS5jLmxlbmd0aCA9PT0gbGVuXG4gICAgICAgICAgPyBzMS5jXG4gICAgICAgICAgOiBzMS5jLnNsaWNlKGkxLCBpMSArIGxlbik7XG4gICAgczIudCA9IHMyLmMubGVuZ3RoID09PSBzMi5sID8gMCAvKiBCWVRFUyB8IFVOS05PV04gKi8gOiAyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz1cbiAgICAgIHMxLnQgPT09IDQgLyogQVJSQVkgKi9cbiAgICAgICAgPyBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pXG4gICAgICAgIDogaTEgPT09IDAgJiYgczEuYy5sZW5ndGggPT09IGxlblxuICAgICAgICAgID8gczEuY1xuICAgICAgICAgIDogczEuYy5zbGljZShpMSwgaTEgKyBsZW4pO1xuICAgIHMyLnQgPSBzMi5jLmxlbmd0aCA9PT0gczIubCA/IDAgLyogQllURVMgfCBVTktOT1dOICovIDogMjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsXG4gICAgICBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMltpMiArIGldID0gYzFbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzJbaTIgKyBpXSA9IGMxW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4obGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzJbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLCBiLCBjLCBkLCBlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSwgYiwgYywgZCwgZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykge1xuICByZXR1cm4gcy5sO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSwgczIpIHtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoMCwgczEuYyArIHMyLmMsIHMxLmwgKyBzMi5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gczEgPCBzMiA/IC0xIDogczEgPiBzMiA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYgKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gczEgPD0gczIgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBzMSA8IHMyID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7XG4gIHJldHVybiB4O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG52YXIganNvb190ZXh0X2RlY29kZXJfYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9kZWNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBzO1xuICB2YXIgYSA9XG4gICAgcy5sZW5ndGggPD0ganNvb190ZXh0X2RlY29kZXJfYnVmZi5sZW5ndGhcbiAgICAgID8gbmV3IFVpbnQ4QXJyYXkoanNvb190ZXh0X2RlY29kZXJfYnVmZiwgMCwgcy5sZW5ndGgpXG4gICAgICA6IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgYVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4ganNvb190ZXh0X2RlY29kZXIuZGVjb2RlKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgYSA9IGpzb29fdGV4dF9lbmNvZGVyLmVuY29kZShzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcygwLCBzLCBzLmxlbmd0aCk7XG59XG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIHMudG9VdGYxNigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiBzIGluc3RhbmNlb2YgTWxCeXRlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JldHVybnMgYSAoZnVsbCkgc3RyaW5nIG9mIGJ5dGVzIG9yIGFuIGFycmF5XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gICAgICByZXR1cm4gcy5jO1xuICAgIGRlZmF1bHQ6IC8qIEJZVEVTIG9yIEFSUkFZICovXG4gICAgICByZXR1cm4gcy5jO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgcmV0dXJuIHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc2J5dGVzXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmddIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc3N0cmluZ10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7XG4gIHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNdIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkge1xuICByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9zdHJpbmdfb2ZfanNieXRlc10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogMHgyMCxcbiAgQ09ERV9JTlQ4OiAweDAwLFxuICBDT0RFX0lOVDE2OiAweDAxLFxuICBDT0RFX0lOVDMyOiAweDAyLFxuICBDT0RFX0lOVDY0OiAweDAzLFxuICBDT0RFX1NIQVJFRDg6IDB4MDQsXG4gIENPREVfU0hBUkVEMTY6IDB4MDUsXG4gIENPREVfU0hBUkVEMzI6IDB4MDYsXG4gIENPREVfQkxPQ0szMjogMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAweDEzLFxuICBDT0RFX1NUUklORzg6IDB4MDksXG4gIENPREVfU1RSSU5HMzI6IDB4MGEsXG4gIENPREVfRE9VQkxFX0JJRzogMHgwYixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAweDBjLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAweDBkLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAweDBlLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogMHgwZixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6IDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAweDExLFxuICBDT0RFX0NVU1RPTTogMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogMHgxOSxcbn07XG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBVSW50OEFycmF5UmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTtcbiAgfVxuXG4gIHJlYWQ4cygpIHtcbiAgICByZXR1cm4gKHRoaXMuc1t0aGlzLmkrK10gPDwgMjQpID4+IDI0O1xuICB9XG5cbiAgcmVhZDE2dSgpIHtcbiAgICB2YXIgcyA9IHRoaXMucyxcbiAgICAgIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV07XG4gIH1cblxuICByZWFkMTZzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSArIDFdIDw8IDE2KSB8IChzW2kgKyAyXSA8PCA4KSB8IHNbaSArIDNdKSA+Pj4gMDtcbiAgfVxuXG4gIHJlYWQzMnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpICsgMV0gPDwgMTYpIHwgKHNbaSArIDJdIDw8IDgpIHwgc1tpICsgM107XG4gIH1cblxuICByZWFkc3RyKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogSnNTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmNsYXNzIEpzU3RyaW5nUmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspO1xuICB9XG5cbiAgcmVhZDhzKCkge1xuICAgIHJldHVybiAodGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0KSA+PiAyNDtcbiAgfVxuXG4gIHJlYWQxNnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQxNnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoXG4gICAgICAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCAxNikgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCA4KSB8XG4gICAgICAgIHMuY2hhckNvZGVBdChpICsgMykpID4+PlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICByZWFkMzJzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKFxuICAgICAgKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDgpIHxcbiAgICAgIHMuY2hhckNvZGVBdChpICsgMylcbiAgICApO1xuICB9XG5cbiAgcmVhZHN0cihsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zbGljZShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IEpzU3RyaW5nUmVhZGVyLCBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLCBvZnMpIHtcbiAgdmFyIGMgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gIHZhciBvZnMgPSB0eXBlb2Ygb2ZzID09PSBcIm51bWJlclwiID8gb2ZzIDogb2ZzWzBdO1xuICB2YXIgcmVhZGVyID1cbiAgICBjIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBuZXcgVUludDhBcnJheVJlYWRlcihjLCBvZnMpXG4gICAgICA6IG5ldyBKc1N0cmluZ1JlYWRlcihjLCBvZnMpO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKSB7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4O1xuICBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1KCkpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzaXplWzBdID0gNDtcbiAgICAgIHJldHVybiByZWFkZXIucmVhZDMycygpO1xuICAgIGNhc2UgMjpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPSB7XG4gIF9qOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgIHNlcmlhbGl6ZTogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgIGZpeGVkX2xlbmd0aDogOCxcbiAgICBjb21wYXJlOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgaGFzaDogY2FtbF9pbnQ2NF9oYXNoLFxuICB9LFxuICBfaToge1xuICAgIGRlc2VyaWFsaXplOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9uOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9iaWdhcnJheToge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyYXlcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG4gIF9iaWdhcnIwMjoge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyMDJcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG59O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX3NldF9vb19pZFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdmKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgc3dpdGNoIChtYWdpYykge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmQgLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNmO1xuICAgICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgaWYgKG92ZXJmbG93WzBdKSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGhlYWRlcl9sZW4gIT09IHJlYWRlci5pIC0gb2xkX3Bvcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBpbnZhbGlkIGhlYWRlclwiKTtcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIG9iamVjdHMgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSBudW1fb2JqZWN0cyA+IDAgPyBbXSA6IG51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweGY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgcmV0dXJuIGNvZGUgJiAweDNmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFmO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzKCk7XG4gICAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzKCk7XG4gICAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIGlmIChjb21wcmVzc2VkID09PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICAgICAgICBpZiAoY29tcHJlc3NlZCA9PT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWQgPT09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4ZmY7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIobGVuKTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIGNhc2UgMHgwYzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBkOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBmOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgICAgdmFyIGMsXG4gICAgICAgICAgICAgIHMgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSgpKSAhPT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgICAgaWYgKCFvcHMpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgICAgICBpZiAoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZF9zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkX3NpemUgIT09IHNpemVbMF0pXG4gICAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIH1cbiAgd2hpbGUgKG9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgIHZhciB4ID0gb2JqZWN0cy5wb3AoKTtcbiAgICBpZiAoeFsyXSA+PSAwKSBjYW1sX3NldF9vb19pZCh4KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNjtcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZShzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT09IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Zik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoIChyLnJlYWQzMnUoKSkge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAweDg0OTVhNmJkIC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqLzpcbiAgICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M2Y7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICBpZiAob3ZlcmZsb3dbMF0pIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG5jbGFzcyBNbE9iamVjdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vYmpzID0gW107XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfVxuXG4gIHN0b3JlKHYpIHtcbiAgICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gICAgdGhpcy5vYmpzLnB1c2godik7XG4gIH1cblxuICByZWNhbGwodikge1xuICAgIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICAgIHJldHVybiBpID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IChmdW5jdGlvbiAoKSB7XG4gIGNsYXNzIFdyaXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNodW5rID0gW107XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDIwO1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSAwO1xuICAgICAgdGhpcy5vYmpfY291bnRlciA9IDA7XG4gICAgICB0aGlzLnNpemVfMzIgPSAwO1xuICAgICAgdGhpcy5zaXplXzY0ID0gMDtcbiAgICB9XG5cbiAgICB3cml0ZShzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4OyBpID49IDA7IGkgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgd3JpdGVfYXQocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhmZjtcbiAgICB9XG5cbiAgICB3cml0ZV9jb2RlKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweGZmO1xuICAgIH1cblxuICAgIHdyaXRlX3NoYXJlZChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAxIDw8IDgpXG4gICAgICAgIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgMSA8PCAxNilcbiAgICAgICAgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwb3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaHVua19pZHg7XG4gICAgfVxuXG4gICAgZmluYWxpemUoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlKDMyLCAweDg0OTVhNmJlKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSxcbiAgICAgIGNsb3N1cmVzID0gZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTE7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgICk7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcigpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkge1xuICAgICAgICB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWModikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwgMF07XG4gICAgICAgIGlmICghb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPT0gc3pfMzJfNjRbMF0pXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICBcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdlswXSA9PT0gKHZbMF0gfCAwKSkge1xuICAgICAgICBpZiAodlswXSA9PT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZShcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKSA8PCA0KSxcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoXG4gICAgICAgICAgICAzMixcbiAgICAgICAgICAgIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sXG4gICAgICAgICAgICAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXSxcbiAgICAgICAgICApO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2godiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYgKCFjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgIFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApIHdyaXRlci53cml0ZSg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDkgLypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MGEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMCkgd3JpdGVyLndyaXRlKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwOSAvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZSB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwYSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT09ICh2IHwgMCkpIHtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYgKHR5cGVfb2ZfdiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIiArIHR5cGVfb2ZfdiArIFwiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MGMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgdFs3IC0gaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzO1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAxIDw8IDcpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8IDEgPDwgMTUpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWModltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3cml0ZXIuY2h1bmspO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXModiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlcihzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheSh0KSwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciB4ID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKHgpIHtcbiAgICB4LmZpbGUuY2xvc2UoZmFsc2UpO1xuICAgIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbENoYW5pZFxuZnVuY3Rpb24gTWxDaGFuaWQoaWQpIHtcbiAgdGhpcy5pZCA9IGlkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxDaGFuaWRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSwgaWR4KSB7XG4gIHZhciBjaGFuaWQ7XG4gIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gICAgY2hhbmlkID0gbmV3IE1sQ2hhbmlkKGlkeCk7XG4gIH0gZWxzZSBpZiAoY2FtbF9zeXNfZmRzW2lkeF0pIHtcbiAgICBjaGFuaWQgPSBjYW1sX3N5c19mZHNbaWR4XS5jaGFuaWQ7XG4gIH0gZWxzZSBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGYud3JpdGVvbmx5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGYuY3JlYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGYudHJ1bmNhdGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgZi5leGNsID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGYuYmluYXJ5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYudGV4dCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vbmJsb2NrID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZsYWdzID0gZmxhZ3NbMl07XG4gIH1cbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgZiwgcGVybXMpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlzX25vZGUgPSBmc19ub2RlX3N1cHBvcnRlZCgpO1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmIChpc19ub2RlKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH0gZWxzZSByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpO1xuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgwLCB7IHJkb25seTogMSwgYWx0bmFtZTogXCIvZGV2L3N0ZGluXCIsIGlzQ2hhcmFjdGVyRGV2aWNlOiB0cnVlIH0pLFxuICAgIDAsXG4gICk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgxLCB7IGJ1ZmZlcmVkOiBpc19ub2RlID8gMSA6IDIsIHdyb25seTogMSwgaXNDaGFyYWN0ZXJEZXZpY2U6IHRydWUgfSksXG4gICAgMSxcbiAgKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChcbiAgICBmaWxlKDIsIHsgYnVmZmVyZWQ6IGlzX25vZGUgPyAxIDogMiwgd3Jvbmx5OiAxLCBpc0NoYXJhY3RlckRldmljZTogdHJ1ZSB9KSxcbiAgICAyLFxuICApO1xufSkoKTtcblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogTWxDaGFuaWRcbmNsYXNzIGNhbWxfbWxfY2hhbm5lbHNfc3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgICB0aGlzLm9wZW5lZCA9IG5ldyBnbG9iYWxUaGlzLlNldCgpO1xuICB9XG5cbiAgY2xvc2UoY2hhbmlkKSB7XG4gICAgdGhpcy5vcGVuZWQuZGVsZXRlKGNoYW5pZCk7XG4gIH1cblxuICBnZXQoY2hhbmlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChjaGFuaWQpO1xuICB9XG5cbiAgc2V0KGNoYW5pZCwgdmFsKSB7XG4gICAgaWYgKHZhbC5vcGVuZWQpIHRoaXMub3BlbmVkLmFkZChjaGFuaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcC5zZXQoY2hhbmlkLCB2YWwpO1xuICB9XG5cbiAgYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZC52YWx1ZXMoKTtcbiAgfVxufVxuXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBjYW1sX21sX2NoYW5uZWxzX3N0YXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHMuZ2V0KGlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QoY2FwdHVyZWQsIGludG8pIHtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzLnNldChjYXB0dXJlZCwgbmV3Xyk7XG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpIHtcbiAgY2FtbF9tbF9jaGFubmVscy5zZXQoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCgpIHtcbiAgdmFyIGwgPSAwO1xuICB2YXIga2V5cyA9IGNhbWxfbWxfY2hhbm5lbHMuYWxsKCk7XG4gIGZvciAodmFyIGsgb2Yga2V5cykge1xuICAgIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChrKTtcbiAgICBpZiAoY2hhbi5vcGVuZWQgJiYgY2hhbi5vdXQpIGwgPSBbMCwgaywgbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9pb19idWZmZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiICsgZmQgKyBcIiBkb2Vzbid0IGV4aXN0XCIpO1xuICB2YXIgZmlsZSA9IGZkX2Rlc2MuZmlsZTtcbiAgdmFyIGNoYW5pZCA9IGZkX2Rlc2MuY2hhbmlkO1xuICB2YXIgYnVmZmVyZWQgPSBmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBvZmZzZXQ6IGZpbGUucG9zKCksXG4gICAgZmQ6IGZkLFxuICAgIG9wZW5lZDogdHJ1ZSxcbiAgICBvdXQ6IHRydWUsXG4gICAgYnVmZmVyX2N1cnI6IDAsXG4gICAgYnVmZmVyOiBuZXcgVWludDhBcnJheShjYW1sX2lvX2J1ZmZlcl9zaXplKSxcbiAgICBidWZmZXJlZDogYnVmZmVyZWQsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCkge1xuICB2YXIgZmRfZGVzYyA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmIChmZF9kZXNjID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIiArIGZkICsgXCIgZG9lc24ndCBleGlzdFwiKTtcbiAgdmFyIGZpbGUgPSBmZF9kZXNjLmZpbGU7XG4gIHZhciBjaGFuaWQgPSBmZF9kZXNjLmNoYW5pZDtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6IGZpbGUsXG4gICAgb2Zmc2V0OiBmaWxlLnBvcygpLFxuICAgIGZkOiBmZCxcbiAgICBvcGVuZWQ6IHRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjogMCxcbiAgICBidWZmZXJfbWF4OiAwLFxuICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoY2FtbF9pb19idWZmZXJfc2l6ZSksXG4gICAgcmVmaWxsOiByZWZpbGwsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLCBtb2RlKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlO1xuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnk7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9tbF9jaGFubmVscy5jbG9zZShjaGFuaWQpO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGgoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsIGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICBmKHMpO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCwgZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yZWZpbGwoY2hhbikge1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkge1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKSB7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsIGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbi5mZCA9PT0gLTEpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQmFkIGZpbGUgZGVzY3JpcHRvclwiKTtcbiAgICB9XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoXG4gICAgICBjaGFuLmJ1ZmZlcixcbiAgICAgIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheShjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYgKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciwgY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH0gZWxzZSBpZiAoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZiAobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZSAociA8IG4pIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCArIHJdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZiAociA9PT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLCAwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKTtcbiAgaWYgKHIgPCBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgMCk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludChjaGFuaWQpIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgcmVzID0gKChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYgKFxuICAgIHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heCAmJlxuICAgIHBvcyA8PSBjaGFuLm9mZnNldCAmJlxuICAgIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbiAgKSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCwgcG9zKSB7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3Vycik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZiAocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksIDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtY2hhbi5idWZmZXJfbWF4IHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgaWYgKHByZXZfbWF4ID09PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC1jaGFuLmJ1ZmZlcl9tYXggfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKCFjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYgKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09PSAwKSByZXR1cm4gMDtcbiAgaWYgKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoXG4gICAgICBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IGNoYW4uYnVmZmVyX2N1cnI7ICkge1xuICAgICAgcG9zICs9IGNoYW4uZmlsZS53cml0ZShjaGFuLmJ1ZmZlciwgcG9zLCBjaGFuLmJ1ZmZlcl9jdXJyIC0gcG9zLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmICghY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZiAoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiO1xuICB9XG4gIHN3aXRjaCAoY2hhbi5idWZmZXJlZCkge1xuICAgIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMCk7XG4gICAgICBpZiAoaWQgPCAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aCkgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICAgIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLCBidWZmZXIsIG9mZnNldCwgbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbikge1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoXG4gICAgY2hhbmlkLFxuICAgIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksXG4gICAgb2Zmc2V0LFxuICAgIGxlbixcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIoY2hhbmlkLCBjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLCBzLCAwLCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUoY2hhbmlkLCB2LCBmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpIHtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLCBwb3MpIHtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50KGNoYW5pZCwgaSkge1xuICB2YXIgYXJyID0gWyhpID4+IDI0KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZiwgaSAmIDB4ZmZdO1xuICBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIG5ldyBVaW50OEFycmF5KGFyciksIDAsIDQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLCB2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmICghdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvcihtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9BbGlhczogY2FtbF91bml4X2V4aXRcbi8vQWxpYXM6IHVuaXhfZXhpdFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdChjb2RlKSB7XG4gIGlmIChnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZXhpdCkgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKSB7XG4gIHN3aXRjaCAoZXhuWzJdKSB7XG4gICAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICAgIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICAgIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bikge1xuICB2YXIgciA9IFwiXCI7XG4gIGlmIChleG5bMF0gPT09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZiAoXG4gICAgICBleG4ubGVuZ3RoID09PSAzICYmXG4gICAgICBleG5bMl1bMF0gPT09IDAgJiZcbiAgICAgIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKVxuICAgICkge1xuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDI7XG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiBzdGFydCkgciArPSBcIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgciArPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgTWxCeXRlcykge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCI7XG4gIH0gZWxzZSBpZiAoZXhuWzBdID09PSAyNDgpIHtcbiAgICByICs9IGV4blsxXTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVycikgJiYgKGVyclswXSA9PT0gMCB8fCBlcnJbMF0gPT09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmIChoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsIGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZiAoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYgKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczoganNvb19zdGF0aWNfZW52XG52YXIganNvb19zdGF0aWNfZW52ID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbi8vUmVxdWlyZXM6IGpzb29fc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLCB2KSB7XG4gIGpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczoganNvb19zdGF0aWNfZW52XG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICBpZiAoanNvb19zdGF0aWNfZW52W25dKSByZXR1cm4ganNvb19zdGF0aWNfZW52W25dO1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W25dICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZiAoZ2xvYmFsVGhpcy5qc29vX2VudiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5qc29vX2VudltuXSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fZW52W25dO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudihuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnZfb3B0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52X29wdChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocildO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSkge1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52KG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdO1xuXG4gIGlmIChwcm9jZXNzPy5hcmd2Py5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2KF91bml0KSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKSB7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKSB7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgaWYgKGNoaWxkX3Byb2Nlc3M/LmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQsIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gIH0gZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKF9jbWQpIHtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSgpIHtcbiAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oX2IpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfVxuICB9XG4gIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3cgXiAoMHhmZmZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICByZXR1cm4gWzAsIHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUoKSB7XG4gIHJldHVybiAzMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplKCkge1xuICByZXR1cm4gMzI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSgpIHtcbiAgcmV0dXJuICgweDdmZmZmZmZmIC8gNCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXgoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIlVuaXhcIiA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIldpbjMyXCIgPyAxIDogMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4oKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIkN5Z3dpblwiID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbnZhciBvc190eXBlID0ganNvb19pc193aW4zMiA/IFwiV2luMzJcIiA6IFwiVW5peFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW9fYnVmZmVyX3NpemVcbnZhciBjYW1sX2lvX2J1ZmZlcl9zaXplID0gNjU1MzY7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lvX2J1ZmZlcl9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfaW9fYnVmZmVyX3NpemUoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfaW9fYnVmZmVyX3NpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RlbXBfZGlyX25hbWVcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfdGVtcF9kaXJfbmFtZShfdW5pdCkge1xuICBpZiAob3NfdHlwZSA9PT0gXCJXaW4zMlwiKSB7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHJlcXVpcmUoXCJub2RlOm9zXCIpLnRtcGRpcigpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGVtcF9kaXJfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vVmVyc2lvbjogPj0gNS40XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c190ZW1wX2Rpcl9uYW1lKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyKHNpZ25vKSB7XG4gIHJldHVybiBzaWdubztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmV2X2NvbnZlcnRfc2lnbmFsX251bWJlclxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfc3lzX3Jldl9jb252ZXJ0X3NpZ25hbF9udW1iZXIoc2lnbm8pIHtcbiAgcmV0dXJuIHNpZ25vO1xufVxuXG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vSWY6ICF3YXNtXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYgKHByb2Nlc3M/Lm9uKSB7XG4gICAgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5lcnJvcikge1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobFtpXSA9PT0gXCJiXCIpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZyA9ICtsW2ldLnNsaWNlKDIpO1xuICAgICAgfSBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnXG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZztcblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cygpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9ydW50aW1lX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UoX3VuaXQpIHtcbiAgcmV0dXJuIFswXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlKGIpIHtcbiAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlKCkge1xuICByZXR1cm4gWzBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KF9zbG90KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QoX2J0LCBfaWR4KSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoX2V4biwgX2J0KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KF9yYnQpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSByZXR1cm4gZiguLi5hcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYoLi4uYXJncy5zbGljZSgwLCBuKSk7XG4gICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3Muc2xpY2UobikpO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIHJldHVybiBmKC4uLm5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKyspIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgICByZXR1cm4gZiguLi5uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSB7XG4gICAgcmV0dXJuIGYoLi4uYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG4gICAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKykgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXJncy5sZW5ndGggPSBhcmdzTGVuO1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl9jcHMgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfY3BzX2Nsb3N1cmVcbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl90dXBsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3MpIHtcbiAgICB2YXIgbiA9IGYubCA+PSAwID8gZi5sIDogKGYubCA9IGYubGVuZ3RoKTtcbiAgICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICAgIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICAgIHZhciBnID0gZiguLi5hcmdzLnNsaWNlKDAsIG4pKTtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChnLCBhcmdzLnNsaWNlKG4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRklYTUU6IFJlc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvZiBoYW5kbGluZyBzcGVjaWFsbHkgZCA9IDEgb3IgMlxuICAgICAgdmFyIGFyZ3NfID0gYXJncy5zbGljZSgpO1xuICAgICAgYXJnc18ubGVuZ3RoID0gYXJnc0xlbjtcbiAgICAgIHZhciByZXQgPSBjYW1sX2Nwc19jbG9zdXJlKFxuICAgICAgICBmdW5jdGlvbiAoLi4uZXh0cmFfYXJncykge1xuICAgICAgICAgIGlmIChleHRyYV9hcmdzLmxlbmd0aCA9PT0gMCkgZXh0cmFfYXJncyA9IFt1bmRlZmluZWRdO1xuICAgICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChmLCBhcmdzLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0LmwgPSBkO1xuICAgICAgcmV0LmNwcy5sID0gZCArIDE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYW1sX2NhbGxfZ2VuX2NwcyhmLCBhcmdzKSB7XG4gICAgaWYgKCFmLmNwcykge1xuICAgICAgdmFyIGsgPSBhcmdzLnBvcCgpO1xuICAgICAgcmV0dXJuIGsoY2FtbF9jYWxsX2dlbl9kaXJlY3QoZiwgYXJncykpO1xuICAgIH1cbiAgICB2YXIgbiA9IGYuY3BzLmwgPj0gMCA/IGYuY3BzLmwgOiAoZi5jcHMubCA9IGYuY3BzLmxlbmd0aCk7XG4gICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2NwcyhnLCBhcmdzKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NMZW4tLTtcbiAgICAgIHZhciBhcmdzXyA9IGFyZ3Muc2xpY2UoKTtcbiAgICAgIGFyZ3NfLmxlbmd0aCA9IGFyZ3NMZW47XG4gICAgICB2YXIgY29udCA9IGNhbWxfY3BzX2Nsb3N1cmUoXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgICAgY29udC5sID0gZDtcbiAgICAgIGNvbnQuY3BzLmwgPSBkICsgMTtcbiAgICAgIHJldHVybiBrKGNvbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2NhbWxfY2FsbF9nZW5fZGlyZWN0LCBjYW1sX2NhbGxfZ2VuX2Nwc107XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vV2Vha2RlZlxudmFyIGNhbWxfY2FsbF9nZW4gPSBjYW1sX2NhbGxfZ2VuX3R1cGxlWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlbl90dXBsZVxuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1dlYWtkZWZcbnZhciBjYW1sX2NhbGxfZ2VuX2NwcyA9IGNhbWxfY2FsbF9nZW5fdHVwbGVbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLCB2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgdmFyIG1heCA9IC0xO1xuICBpZiAoc3ltYikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkeCA9IHN5bWJbaV1bMl07XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIGlkeCk7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IGlkeDtcbiAgICB9XG4gIH1cbiAgci5uZXh0X2lkeCA9IG1heCArIDE7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RvcGxldmVsX3JlbG9jXG52YXIganNvb190b3BsZXZlbF9yZWxvYyA9IHVuZGVmaW5lZDtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczoganNvb190b3BsZXZlbF9yZWxvY1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZiAoanNvb190b3BsZXZlbF9yZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soanNvb190b3BsZXZlbF9yZWxvYywgW25hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpO1xuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdO1xuICAgICAgaWYgKG5pZCA+PSAwKSBuID0gbmlkO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1bml0IGlzIHVua25vd24sIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGR5bmxpbmtpbmcgYSBwcmVjb21waWxlZCBqcyxcbiAgICAgICAgLy8gbGV0J3MgYWxsb2NhdGUgYSBmcmVzaCBpZHguXG4gICAgICAgIHZhciBuID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgubmV4dF9pZHgrKztcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV0gPSBuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmIChuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykge1xuICByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByKGYpIHtcbiAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobywgZiwgdikge1xuICBvW2ZdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLCBmKSB7XG4gIHJldHVybiBvW2ZdO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobywgZikge1xuICBkZWxldGUgb1tmXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sIGMpIHtcbiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlIChyZXM/Lmpvb190cmFtcCkge1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsIGFyZ3MsIGRpcmVjdCkge1xuICByZXR1cm4geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBhcmdzLCBqb29fZGlyZWN0OiBkaXJlY3QgfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX3dyYXBfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vQWxpYXM6IGNhbWxfY3BzX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZiwgYXJncykge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgam9vX3RyYW1wOiBmLFxuICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0geyBqb29fdHJhbXA6IGhhbmRsZXIsIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV0gfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZXM/Lmpvb19hcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyhfdW5pdCkge1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKENPTkZJRyhcImVmZmVjdHNcIikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZiAoXG4gICAgICBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUubWVzc2FnZSAmJlxuICAgICAgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSlcbiAgICApXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmIChcbiAgICAgIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZS5tZXNzYWdlICYmXG4gICAgICBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKVxuICAgIClcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLCBlXTtcbiAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICBlbHNlXG4gICAgICBleG4gPSBbMCwgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcikgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2UgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy8gQmFja3RyYWNlcyBhcmUgdmVyeSBleHBlbnNpdmUsIHdlIG9ubHkgZW5hYmxlIHRoZW0gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAvLyBhdCBjb21waWxlLXRpbWUgKC0tZW5hYmxlIHdpdGgtanMtZXJyb3IpIG9yIGF0IHN0YXJ0dXAgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MS5cbiAgLy8gTGlicmFyaWVzIHN1Y2ggYXMgQmFzZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlIGJhY2t0cmFjZXMgKHByb2dyYW1tYXRpY2FsbHkpIGJ1dFxuICAvLyBpdCdzIHdheSB0byBzbG93LiBIZXJlLCB3ZSBmb3JjZSB0aGUgZW5kLXVzZXIgdG8gb3B0LWluIHRvIGJhY2t0cmFjZXMuXG4gIGlmIChjYW1sX3JlY29yZF9iYWNrdHJhY2VfZW52X2ZsYWcgJiYgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4bjtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZiAoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT09IDI0OClcbiAgICBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmIChleG4uanNfZXJyb3IpIHtcbiAgICByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3Rocm93X2pzX2V4Y2VwdGlvbihleG4pIHtcbiAgdGhyb3cgZXhuO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7XG4gIHJldHVybiAhIXg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkge1xuICByZXR1cm4geCB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgYlswXSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJbaSArIDFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yICh2YXIgaSA9IGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLCBlLCBsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpIHtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICg7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmICgheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnY2FtbF9qc192YXI6IFwiJyArXG4gICAgICAgIHggK1xuICAgICAgICAnXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLicsXG4gICAgKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6XG4gIHJldHVybiBldmFsPy4oeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykge1xuICByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGYoKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZihhWzFdKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG5ldyBjKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0pO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7XG4gICAgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbiAgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEYoKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgYygpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkge1xuICAgIHJldHVybiBjLmFwcGx5KHRoaXMsIGEpO1xuICB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRigpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBjYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKSA6IHJlcztcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW3RoaXMsIGFyZ3NdKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuIChmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCkpIC0gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMoeCwgeSkge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRG91YmxlRXF1YWxzOlxuICByZXR1cm4gKyh4ID09IHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzKHgsIHkpIHtcbiAgcmV0dXJuICsoeCA9PT0geSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcocykge1xuICAvLyBVc2VzIGFuIGluZGlyZWN0IGV2YWwgdGhyb3VnaCB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgb3BlcmF0b3IuXG4gIC8vIChzZWUgaHR0cHM6Ly9tZG4uZGV2L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2V2YWwpXG4gIC8vIFRoaXMgaXMgZmFzdGVyIGFuZCBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlcy5cbiAgLy8gQWxzbyBwcmVwZW5kcyBgXCJ1c2Ugc3RyaWN0XCJgIGRpcmVjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vdCBpbmhlcml0ZWRcbiAgLy8gZnJvbSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHdpdGggYW4gaW5kaXJlY3QgZXZhbC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsnICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gV2UgYWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYmV0d2VlbiBleHByZXNzaW9uc1xuICAvLyBhbmQgc3RhdGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHdlIGFjY2VwdCBpbnZhbGlkIGlucHV0cyBsaWtlXG4gIC8vIFwiYSkoYlwiLCBidXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50KHRhZykge1xuICB0aHJvdyB0YWc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnKHRhZywgYXJnKSB7XG4gIHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyh0YWcsIGFyZ3MpIHtcbiAgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aChtc2cpIHtcbiAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlID0gWzI0OCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksIC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5KCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RpbWVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3M/LmNwdVVzYWdlKSB7XG4gICAgdmFyIHQgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3B1VXNhZ2UoKTtcbiAgICByZXR1cm4gQkxPQ0soMCwgdC51c2VyIC8gMWU2LCB0LnN5c3RlbSAvIDFlNiwgMCwgMCk7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZT8ubm93KSB7XG4gICAgcmV0dXJuIEJMT0NLKDAsIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwLCAwLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RpbWVzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICBkLmdldFVUQ0RhdGUoKSxcbiAgICBkLmdldFVUQ01vbnRoKCksXG4gICAgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldFVUQ0RheSgpLFxuICAgIGRveSxcbiAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgamFuLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAganVsLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0U2Vjb25kcygpLFxuICAgIGQuZ2V0TWludXRlcygpLFxuICAgIGQuZ2V0SG91cnMoKSxcbiAgICBkLmdldERhdGUoKSxcbiAgICBkLmdldE1vbnRoKCksXG4gICAgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldERheSgpLFxuICAgIGRveSxcbiAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHxcbiAgICAgIDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKSB7XG4gIHZhciBkID0gbmV3IERhdGUodG1bNl0gKyAxOTAwLCB0bVs1XSwgdG1bNF0sIHRtWzNdLCB0bVsyXSwgdG1bMV0pLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLCB0LCB0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQpO1xuICBpZiAoIWZpbGUuaXNhdHR5KSByZXR1cm4gMDtcbiAgcmV0dXJuIGZpbGUuaXNhdHR5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KF9maWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvclxudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLFxuICBcIkVBQ0NFU1wiLFxuICBcIkVBR0FJTlwiLFxuICBcIkVCQURGXCIsXG4gIFwiRUJVU1lcIixcbiAgXCJFQ0hJTERcIixcbiAgXCJFREVBRExLXCIsXG4gIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLFxuICBcIkVGQVVMVFwiLFxuICBcIkVGQklHXCIsXG4gIFwiRUlOVFJcIixcbiAgXCJFSU5WQUxcIixcbiAgXCJFSU9cIixcbiAgXCJFSVNESVJcIixcbiAgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIixcbiAgXCJFTkFNRVRPT0xPTkdcIixcbiAgXCJFTkZJTEVcIixcbiAgXCJFTk9ERVZcIixcbiAgXCJFTk9FTlRcIixcbiAgXCJFTk9FWEVDXCIsXG4gIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsXG4gIFwiRU5PU1BDXCIsXG4gIFwiRU5PU1lTXCIsXG4gIFwiRU5PVERJUlwiLFxuICBcIkVOT1RFTVBUWVwiLFxuICBcIkVOT1RUWVwiLFxuICBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIixcbiAgXCJFUElQRVwiLFxuICBcIkVSQU5HRVwiLFxuICBcIkVST0ZTXCIsXG4gIFwiRVNQSVBFXCIsXG4gIFwiRVNSQ0hcIixcbiAgXCJFWERFVlwiLFxuICBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIixcbiAgXCJFQUxSRUFEWVwiLFxuICBcIkVOT1RTT0NLXCIsXG4gIFwiRURFU1RBRERSUkVRXCIsXG4gIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsXG4gIFwiRU5PUFJPVE9PUFRcIixcbiAgXCJFUFJPVE9OT1NVUFBPUlRcIixcbiAgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsXG4gIFwiRVBGTk9TVVBQT1JUXCIsXG4gIFwiRUFGTk9TVVBQT1JUXCIsXG4gIFwiRUFERFJJTlVTRVwiLFxuICBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLFxuICBcIkVORVRVTlJFQUNIXCIsXG4gIFwiRU5FVFJFU0VUXCIsXG4gIFwiRUNPTk5BQk9SVEVEXCIsXG4gIFwiRUNPTk5SRVNFVFwiLFxuICBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsXG4gIFwiRU5PVENPTk5cIixcbiAgXCJFU0hVVERPV05cIixcbiAgXCJFVE9PTUFOWVJFRlNcIixcbiAgXCJFVElNRURPVVRcIixcbiAgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIixcbiAgXCJFSE9TVFVOUkVBQ0hcIixcbiAgXCJFTE9PUFwiLFxuICBcIkVPVkVSRkxPV1wiLFxuXTtcblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5O1xuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIC8vIGVycm5vIGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIC1lcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIiksXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmVycm9yXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N0cmVycm9yKGVycm5vKSB7XG4gIGNvbnN0IHV0aWwgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuICBpZiAoZXJybm8gPj0gMCkge1xuICAgIGNvbnN0IGNvZGUgPSB1bml4X2Vycm9yW2Vycm5vXTtcbiAgICByZXR1cm4gdXRpbFxuICAgICAgLmdldFN5c3RlbUVycm9yTWFwKClcbiAgICAgIC5lbnRyaWVzKClcbiAgICAgIC5maW5kKCh4KSA9PiB4WzFdWzBdID09PSBjb2RlKVsxXVsxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXRpbC5nZXRTeXN0ZW1FcnJvck1lc3NhZ2UoZXJybm8pO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyZXJyb3Jcbi8vUmVxdWlyZXM6IHVuaXhfZXJyb3Jcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3RyZXJyb3IoZXJybm8pIHtcbiAgY29uc3QgY29kZSA9IHVuaXhfZXJyb3JbZXJybm9dO1xuICByZXR1cm4gY29kZSB8fCBcIlVua25vd24gZXJyb3IgXCIgKyBlcnJubztcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvcl9tZXNzYWdlXG4vL0FsaWFzOiBjYW1sX3VuaXhfZXJyb3JfbWVzc2FnZVxuLy9SZXF1aXJlczogY2FtbF9zdHJlcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIHVuaXhfZXJyb3JfbWVzc2FnZShlcnIpIHtcbiAgY29uc3QgZXJybm8gPSB0eXBlb2YgZXJyID09PSBcIm51bWJlclwiID8gZXJyIDogLWVyclsxXTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNhbWxfc3RyZXJyb3IoZXJybm8pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jaGRpclxuLy9BbGlhczogdW5peF9jaGRpclxuZnVuY3Rpb24gY2FtbF91bml4X2NoZGlyKGRpcikge1xuICByZXR1cm4gY2FtbF9zeXNfY2hkaXIoZGlyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gZmFsc2UsXG4gICAgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXRfNjQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gdHJ1ZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyBmYWxzZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0XzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyB0cnVlLFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NobW9kXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9jaG1vZFxuZnVuY3Rpb24gY2FtbF91bml4X2NobW9kKG5hbWUsIHBlcm1zKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2NobW9kOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmNobW9kKHJvb3QucmVzdCwgcGVybXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vQWxpYXM6IHVuaXhfcmVuYW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVuYW1lKG8sIG4pIHtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmIChvX3Jvb3QuZGV2aWNlICE9PSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSwgXCJFWERFVlwiLCBcInJlbmFtZVwiKTtcbiAgaWYgKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSkgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm90IGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X2xpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9saW5rKGZvbGxvdywgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2UubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8vIFdlIGNhbid0IGNvbnRyb2wgd2hldGhlciBhICdzcmMnIHN5bWxpbmsgaXMgZm9sbG93ZWQgb3Igbm90LlxuICAvLyBTbyB3ZSBmYWlsIHdoZW4gJ2ZvbGxvdycgaXMgc2V0LCBhcyBkb2N1bWVudGVkIGluIHRoZSBVbml4IG1vZHVsZS5cbiAgaWYgKHR5cGVvZiBmb2xsb3cgIT09IFwibnVtYmVyXCIpXG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoLyogcmFpc2UgVW5peF9lcnJvciAqLyAxLCBcIkVOT1NZU1wiLCBcImxpbmtcIik7XG4gIGlmIChzcmNfcm9vdC5kZXZpY2UgIT09IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRVhERVZcIiwgXCJsaW5rXCIpO1xuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLmxpbmsoXG4gICAgc3JjX3Jvb3QucmVzdCxcbiAgICBkc3Rfcm9vdC5yZXN0LFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmICghZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmsoXG4gICAgdG9fZGlyLFxuICAgIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHNyYyksXG4gICAgZHN0X3Jvb3QucmVzdCxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdXRpbWVzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91dGltZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF91dGltZXMobmFtZSwgYXRpbWUsIG10aW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudXRpbWVzKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91dGltZXM6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByb290LmRldmljZS51dGltZXMocm9vdC5yZXN0LCBhdGltZSwgbXRpbWUsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGUobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUocm9vdC5yZXN0LCBsZW4sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2ludDY0X3RvX2Zsb2F0XG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjQobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUoXG4gICAgcm9vdC5yZXN0LFxuICAgIGNhbWxfaW50NjRfdG9fZmxvYXQobGVuKSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfYWNjZXNzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9hY2Nlc3NcbmZ1bmN0aW9uIGNhbWxfdW5peF9hY2Nlc3MobmFtZSwgZmxhZ3MpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnIgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZi53ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGYueCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBmLmYgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmFjY2Vzcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfYWNjZXNzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UuYWNjZXNzKHJvb3QucmVzdCwgZiwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9zeXNfZmRzLCBNbENoYW5pZFxuLy9BbGlhczogdW5peF9vcGVuXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLnJkd3IgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZi5ub25ibG9jayA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgICBmLmNyZWF0ZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2OlxuICAgICAgICBmLnRydW5jYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYuZXhjbCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vY3R0eSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA5OlxuICAgICAgICBmLmRzeW5jID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBmLnN5bmMgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LCBmLCBwZXJtcywgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgdmFyIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIHZhciBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2ZkcywgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgY21kKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgY21kKTtcbiAgcmV0dXJuIGZkX2Rlc2MuZmlsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzdGF0XG4vL0FsaWFzOiB1bml4X2ZzdGF0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3RhdChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3RhdFwiKTtcbiAgaWYgKCFmaWxlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyBmYWxzZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mc3RhdF82NFxuLy9BbGlhczogdW5peF9mc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3VuaXhfZnN0YXRfNjQoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZnN0YXRcIik7XG4gIGlmICghZmlsZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mc3RhdDY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZjaG1vZFxuLy9BbGlhczogdW5peF9mY2htb2Rcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2ZjaG1vZChmZCwgcGVybXMpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZmNobW9kXCIpO1xuICBpZiAoIWZpbGUuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZjaG1vZDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBmaWxlLmNobW9kKHBlcm1zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzeW5jXG4vL0FsaWFzOiB1bml4X2ZzeW5jXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3luYyhmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3luY1wiKTtcbiAgaWYgKCFmaWxlLnN5bmMpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzeW5jOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3luYygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfd3JpdGVcbi8vQWxpYXM6IHVuaXhfd3JpdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF91bml4X3dyaXRlKGZkLCBidWYsIHBvcywgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgdmFyIHdyaXR0ZW4gPSAwO1xuICB3aGlsZSAobGVuID4gMCkge1xuICAgIHZhciBuID0gZmlsZS53cml0ZShhLCBwb3MsIGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgICB3cml0dGVuICs9IG47XG4gICAgcG9zICs9IG47XG4gICAgbGVuIC09IG47XG4gIH1cbiAgcmV0dXJuIHdyaXR0ZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zaW5nbGVfd3JpdGVcbi8vQWxpYXM6IHVuaXhfc2luZ2xlX3dyaXRlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF9zaW5nbGVfd3JpdGUoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwid3JpdGVcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gZmlsZS53cml0ZShcbiAgICBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZiksXG4gICAgcG9zLFxuICAgIGxlbixcbiAgICAvKiByYWlzZSB1bml4X2Vycm9yICovIDEsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF93cml0ZV9iaWdhcnJheVxuLy9BbGlhczogY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3VuaXhfd3JpdGVfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgd3JpdHRlbiA9IDA7XG4gIHdoaWxlIChsZW4gPiAwKSB7XG4gICAgdmFyIG4gPSBmaWxlLndyaXRlKGEsIHBvcywgbGVuLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xuICAgIHdyaXR0ZW4gKz0gbjtcbiAgICBwb3MgKz0gbjtcbiAgICBsZW4gLT0gbjtcbiAgfVxuICByZXR1cm4gd3JpdHRlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRcbi8vQWxpYXM6IHVuaXhfcmVhZFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZChmZCwgYnVmLCBwb3MsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJyZWFkXCIpO1xuICByZXR1cm4gZmlsZS5yZWFkKFxuICAgIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKSxcbiAgICBwb3MsXG4gICAgbGVuLFxuICAgIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRfYmlnYXJyYXlcbi8vQWxpYXM6IHVuaXhfcmVhZF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcInJlYWRcIik7XG4gIHJldHVybiBmaWxlLnJlYWQoYSwgcG9zLCBsZW4sIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc2Vla1xuLy9BbGlhczogdW5peF9sc2Vla1xuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlXG5mdW5jdGlvbiBjYW1sX3VuaXhfbHNlZWsoZmQsIGxlbiwgd2hlbmNlKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImxzZWVrXCIpO1xuICByZXR1cm4gZmlsZS5zZWVrKGxlbiwgd2hlbmNlLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHNlZWtfNjRcbi8vQWxpYXM6IHVuaXhfbHNlZWtfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9pbnQ2NF90b19mbG9hdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzZWVrXzY0KGZkLCBsZW4sIHdoZW5jZSkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJsc2Vla1wiKTtcbiAgcmV0dXJuIGZpbGUuc2VlayhjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIHdoZW5jZSwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Z0cnVuY2F0ZVxuLy9BbGlhczogdW5peF9mdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2Z0cnVuY2F0ZShmZCwgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImZ0cnVuY2F0ZVwiKTtcbiAgaWYgKCFmaWxlLnRydW5jYXRlKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mdHJ1bmNhdGU6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICBmaWxlLnRydW5jYXRlKGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mdHJ1bmNhdGVfNjRcbi8vQWxpYXM6IHVuaXhfZnRydW5jYXRlXzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGgsIGNhbWxfaW50NjRfdG9fZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9mdHJ1bmNhdGVfNjQoZmQsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmdHJ1bmNhdGVcIik7XG4gIGlmICghZmlsZS50cnVuY2F0ZSkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfZnRydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgZmlsZS50cnVuY2F0ZShjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2Vcbi8vQWxpYXM6IHVuaXhfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImNsb3NlXCIpO1xuICBmaWxlLmNsb3NlKC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9BbGlhczogdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5faW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuZnVuY3Rpb24gY2FtbF91bml4X2luY2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgZmlsZS5jaGVja19zdHJlYW1fc2VtYW50aWNzKFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB1bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5fb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3Jcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG5mdW5jdGlvbiBjYW1sX3VuaXhfb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwib3V0X2NoYW5uZWxfb2ZfZGVzY3JcIik7XG4gIGZpbGUuY2hlY2tfc3RyZWFtX3NlbWFudGljcyhcIm91dF9jaGFubmVsX29mX2Rlc2NyXCIpO1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0dWlkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldGV1aWRcbi8vQWxpYXM6IHVuaXhfZ2V0ZXVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGV1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0ZXVpZCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0ZXVpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0Z2lkXG4vL0FsaWFzOiB1bml4X2dldGdpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRnaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldGdpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0ZWdpZFxuLy9BbGlhczogdW5peF9nZXRlZ2lkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0ZWdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRlZ2lkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXRlZ2lkKCk7XG4gIH1cbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd25hbVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHduYW1cbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuLy9BbGlhczogY2FtbF91bml4X2dldGdybmFtXG4vL0FsaWFzOiB1bml4X2dldGdybmFtXG4vL0FsaWFzOiBjYW1sX3VuaXhfZ2V0Z3JnaWRcbi8vQWxpYXM6IHVuaXhfZ2V0Z3JnaWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd25hbShfdW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsoX3VuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCkgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlcjogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJyZWFkZGlyXCIpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJjbG9zZWRpclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihyYWlzZV91bml4LCBjb2RlLCBjbWQsIG1zZywgcGF0aCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpXG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIGNtZCwgcGF0aCkpO1xuICBlbHNlIHtcbiAgICB2YXIgbXNnID0gY29kZSArIFwiOiBcIiArIG1zZyArIFwiLCBcIiArIGNtZDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSBtc2cgKz0gXCIgJ1wiICsgcGF0aCArIFwiJ1wiO1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG1zZyk7XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIiA/IG5hbWUgKyBcIi9cIiA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5lbHNlIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKSB7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9XG4gIGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHxcbiAgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKSB7fVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczoganNvb19pc193aW4zMlxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSBcIi9cIikgcmV0dXJuIFtcIlwiLCBwYXRoLnNsaWNlKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9XG4gICAgICAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgdmFyIGlzVW5jID0gZGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gXCI6XCI7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChyZXN1bHRbMl0gfHwgaXNVbmMpIHtcbiAgICAgIHZhciByb290ID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgICB2YXIgc2VwID0gcmVzdWx0WzJdIHx8IFwiXCI7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4ganNvb19pc193aW4zMiA/IHdpbjMyIDogcG9zaXg7XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoKG5hbWUpIHtcbiAgbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkpIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdCgvWy9cXFxcXS8pO1xuICB2YXIgbmNvbXAgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChjb21wW2ldKSB7XG4gICAgICBjYXNlIFwiLi5cIjpcbiAgICAgICAgbmNvbXAucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmNvbXAucHVzaChjb21wW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdO1xuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgcGF0aDogXCIvc3RhdGljL1wiLFxuICBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKSxcbn0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpIHtcbiAgdmFyIHByZXYgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF07XG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZiAoXG4gICAgICBuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09PSAwICYmXG4gICAgICAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKVxuICAgIClcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gIH1cbiAgaWYgKCFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdD8ubWF0Y2goL15bYS16QS1aXTpcXC8kLykpIHtcbiAgICAgIHZhciBtID0geyBwYXRoOiByb290LCBkZXZpY2U6IG5ldyBNbE5vZGVEZXZpY2Uocm9vdCkgfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsIGYpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goeyBwYXRoOiBuYW1lLCBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UobmFtZSwgZikgfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSkge1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmIChqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT09IG5hbWUpIGlkeCA9IGk7XG4gIGlmIChpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRjd2Rcbi8vQWxpYXM6IHVuaXhfZ2V0Y3dkXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZiAocm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCkpIHtcbiAgICBpZiAocm9vdC5yZXN0KVxuICAgICAgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVOT1RESVJcIixcbiAgICAgIFwiY2hkaXJcIixcbiAgICAgIFwibm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhkaXIpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZGlyKSwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lLCByYWlzZV91bml4KSB7XG4gIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgIHJhaXNlX3VuaXgsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICBuYW1lLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBsW2kgKyAxXSA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYSA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobywgbikge1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYgKG9fcm9vdC5kZXZpY2UgIT09IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZiAoIW9fcm9vdC5kZXZpY2UucmVuYW1lKSBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKF92ZmQsIF9raW5kLCBfbGF5b3V0LCBfc2hhcmVkLCBfZGltcywgX3Bvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndiwgX2FyZ24pIHtcbiAgLy8gYXJnbiA9PT0gNlxuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLCBhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsIGNvbnRlbnQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSkgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZiAoIWdsb2JhbFRoaXMuanNvb19mc190bXApIGdsb2JhbFRoaXMuanNvb19mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wLnB1c2goeyBuYW1lOiBuYW1lLCBjb250ZW50OiBjb250ZW50IH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCgpIHtcbiAgdmFyIHRtcCA9IGdsb2JhbFRoaXMuanNvb19mc190bXA7XG4gIGlmICh0bXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKykge1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSwgdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LCBjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50KG5hbWUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG5hbWUpIDogbmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgeyByZG9ubHk6IDEgfSk7XG4gICAgdmFyIGxlbiA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKGJ1ZiwgMCwgbGVuLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGJ1Zik7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRGV2aWNlIHtcbiAgY29uc3RydWN0b3Iocm9vdCwgZikge1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5sb29rdXBGdW4gPSBmO1xuICB9XG5cbiAgbm0obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgKyBuYW1lO1xuICB9XG5cbiAgY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSkge1xuICAgIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIGxvb2t1cChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcodGhpcy5yb290KSxcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobmFtZSksXG4gICAgICApO1xuICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleGlzdHMobmFtZSwgZG9fbm90X2xvb2t1cCkge1xuICAgIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHJldHVybiAxO1xuICAgIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gICAgaWYgKCFkb19ub3RfbG9va3VwKSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdID8gMSA6IDA7XG4gIH1cblxuICBpc0ZpbGUobmFtZSkge1xuICAgIGlmICh0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkZGlyKG5ld25hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuZXduYW1lKSArIFwiIDogZGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9sZF9zbGFzaCA9IHRoaXMuc2xhc2gob2xkbmFtZSk7XG4gICAgdmFyIG5ld19zbGFzaCA9IHRoaXMuc2xhc2gobmV3bmFtZSk7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuZXdfc2xhc2gpO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnJlYWRkaXIob2xkbmFtZSkpIHtcbiAgICAgIHRoaXMucmVuYW1lKG9sZF9zbGFzaCArIGYsIG5ld19zbGFzaCArIGYpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W29sZF9zbGFzaF07XG4gIH1cblxuICByZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkge1xuICAgIGlmICghdGhpcy5leGlzdHMob2xkbmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG9sZG5hbWUpICsgXCIgOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIGlmICh0aGlzLmlzX2RpcihvbGRuYW1lKSkge1xuICAgICAgdGhpcy5yZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkgJiYgdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFtuZXduYW1lXSA9IHRoaXMuY29udGVudFtvbGRuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbb2xkbmFtZV07XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgX21vZGUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICAgIHBhcmVudCA9IHBhcmVudD8uWzFdIHx8IFwiXCI7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyhwYXJlbnQpKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICApO1xuICAgIGlmICghdGhpcy5pc19kaXIocGFyZW50KSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHZhciBuYW1lX3NsYXNoID0gbmFtZSA9PT0gXCJcIiA/IFwiXCIgOiB0aGlzLnNsYXNoKG5hbWUpO1xuICAgIGlmICghdGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICBmb3IgKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgICAgaWYgKG4uc3RhcnRzV2l0aChuYW1lX3NsYXNoKSAmJiBuICE9PSBuYW1lX3NsYXNoKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRU5PVEVNUFRZXCIsXG4gICAgICAgICAgXCJybWRpclwiLFxuICAgICAgICAgIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiLFxuICAgICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG4gIH1cblxuICByZWFkZGlyKG5hbWUpIHtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgPT09IFwiXCIgPyBcIlwiIDogdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmIChuLnN0YXJ0c1dpdGgobmFtZV9zbGFzaCkgJiYgbiAhPT0gbmFtZV9zbGFzaCkge1xuICAgICAgICB2YXIgbGFzdCA9IG4uaW5kZXhPZihcIi9cIiwgbmFtZV9zbGFzaC5sZW5ndGgpO1xuICAgICAgICBpZiAobGFzdCA8IDApIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBtID0gbi5zbGljZShuYW1lX3NsYXNoLmxlbmd0aCwgbGFzdCk7XG4gICAgICAgIGlmIChtICYmICFzZWVuW21dKSB7XG4gICAgICAgICAgc2VlblttXSA9IHRydWU7XG4gICAgICAgICAgYS5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgb3BlbmRpcihuYW1lLCByYWlzZV91bml4KSB7XG4gICAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gICAgdmFyIGMgPSBmYWxzZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRTeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjKVxuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICAgIFwiRUJBREZcIixcbiAgICAgICAgICAgIFwicmVhZGRpclwiLFxuICAgICAgICAgICAgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGkgPT09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9O1xuICAgICAgfSxcbiAgICAgIGNsb3NlU3luYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYylcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgICBcIkVCQURGXCIsXG4gICAgICAgICAgICBcInJlYWRkaXJcIixcbiAgICAgICAgICAgIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiLFxuICAgICAgICAgICk7XG4gICAgICAgIGMgPSB0cnVlO1xuICAgICAgICBhID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpc19kaXIobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSA/IDEgOiAwO1xuICB9XG5cbiAgdW5saW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUsIHRydWUpKSB7XG4gICAgICAvLyBbdHJ1ZV0gbWVhbnMgbm8gXCJsb29rdXBcIiBpZiBub3QgZm91bmQuXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJ1bmxpbmtcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYWNjZXNzKG5hbWUsIF9mbGFncywgcmFpc2VfdW5peCkge1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVBQ0NFU1NcIixcbiAgICAgICAgICBcImFjY2Vzc1wiLFxuICAgICAgICAgIFwicGVybWlzc2lvbiBkZW5pZWQsXCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBfcGVybXMsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgZmlsZTtcbiAgICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFSVNESVJcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGlmIChmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKDApO1xuICAgIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSh0aGlzLm5tKG5hbWUpLCByYWlzZV91bml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbiAgfVxuXG4gIHRydW5jYXRlKG5hbWUsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHZhciBmaWxlO1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVJU0RJUlwiLFxuICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGZpbGUudHJ1bmNhdGUobGVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIobmFtZSwgY29udGVudCkge1xuICAgIHZhciBmaWxlO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGlmIChjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKSBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gICAgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gICAgZWxzZSBpZiAoY29udGVudC50b1N0cmluZykge1xuICAgICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoXG4gICAgICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSksXG4gICAgICApO1xuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICAgIH0gZWxzZVxuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgIHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiLFxuICAgICAgKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBNbEZha2VGaWxlIGV4dGVuZHMgTWxGaWxlIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gY29udGVudDtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbikge1xuICAgIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gICAgdmFyIG9sZF9sZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvbGQpO1xuICAgIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbiB8IDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgTWF0aC5taW4obGVuLCBvbGRfbGVuKSk7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG4gIH1cblxuICB3cml0ZShvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICAgIH1cbiAgICBjYW1sX2JsaXRfYnl0ZXMoXG4gICAgICBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5KGJ1ZiksXG4gICAgICBwb3MsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBvZmZzZXQsXG4gICAgICBsZW4sXG4gICAgKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgcmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4gfCAwKTtcbiAgICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmNsYXNzIE1sRmFrZUZkX291dCBleHRlbmRzIE1sRmFrZUZpbGUge1xuICBjb25zdHJ1Y3RvcihmZCwgZmxhZ3MpIHtcbiAgICBzdXBlcihjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoX3MpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgaWYgKGZkID09PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGVsc2UgaWYgKGZkID09PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIpIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ1bmNhdGUoX2xlbiwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgcmFpc2VfdW5peCxcbiAgICAgIFwiRUlOVkFMXCIsXG4gICAgICBcImZ0cnVuY2F0ZVwiLFxuICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgd3JpdHRlbiA9IGxlbjtcbiAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGVuID4gMCAmJlxuICAgICAgICBwb3MgPj0gMCAmJlxuICAgICAgICBwb3MgKyBsZW4gPD0gYnVmLmxlbmd0aCAmJlxuICAgICAgICBidWZbcG9zICsgbGVuIC0gMV0gPT09IDEwXG4gICAgICApXG4gICAgICAgIGxlbi0tO1xuICAgICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH1cbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVCQURGXCIsXG4gICAgICBcIndyaXRlXCIsXG4gICAgICBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIixcbiAgICApO1xuICB9XG5cbiAgcmVhZChfYnVmLCBfcG9zLCBfbGVuLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFQkFERlwiLCBcInJlYWRcIiwgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIpO1xuICB9XG5cbiAgc2VlayhfbGVuLCBfd2hlbmNlLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFU1BJUEVcIiwgXCJsc2Vla1wiLCBcImlsbGVnYWwgc2Vla1wiKTtcbiAgfVxuICBwb3MoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKF9jbWQpIHt9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRmQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBmbGFncykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2Vla2VkID0gZmFsc2U7XG4gIH1cblxuICBlcnJfY2xvc2VkKGNtZCwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRUJBREZcIiwgY21kLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIik7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGgoKTtcbiAgICB0aGlzLmVycl9jbG9zZWQoXCJsZW5ndGhcIik7XG4gIH1cblxuICB0cnVuY2F0ZShsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICBpZiAoISh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgICAgXCJ0cnVuY2F0ZVwiLFxuICAgICAgICAgIFwiaW52YWxpZCBhcmd1bWVudFwiLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZS50cnVuY2F0ZShsZW4pO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJ0cnVuY2F0ZVwiLCByYWlzZV91bml4KTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlICYmICh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBsZW4gPSB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgICAgIHRoaXMub2Zmc2V0ICs9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHRoaXMuZXJyX2Nsb3NlZChcIndyaXRlXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgcmVhZChidWYsIHBvcywgbGVuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKHRoaXMuZmlsZSAmJiAhdGhpcy5mbGFncy53cm9ubHkpIHtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgIGxlbiA9IHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gICAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJyZWFkXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgc2VlayhvZmZzZXQsIHdoZW5jZSwgcmFpc2VfdW5peCkge1xuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIFwibHNlZWtcIixcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5maWxlKSB0aGlzLmVycl9jbG9zZWQoXCJjbG9zZVwiKTtcbiAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKGNtZCkge1xuICAgIGlmICghdGhpcy5maWxlKSByZXR1cm4gdGhpcy5lcnJfY2xvc2VkKGNtZCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuY2xhc3MgTWxJbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGxvLCBtaSwgaGkpIHtcbiAgICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX2pcIjtcbiAgfVxuXG4gIHN0YXRpYyBVTlNJR05FRF9NQVggPSBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZik7XG4gIHN0YXRpYyBTSUdORURfTUFYID0gbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmLCAweDdmZmYpO1xuICBzdGF0aWMgU0lHTkVEX01JTiA9IG5ldyBNbEludDY0KDB4MDAwMDAwLCAweDAwMDAwMCwgMHg4MDAwKTtcblxuICBzbGljZSgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbywgdGhpcy5taSwgdGhpcy5oaSk7XG4gIH1cblxuICB1Y29tcGFyZSh4KSB7XG4gICAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb21wYXJlKHgpIHtcbiAgICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICAgIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICAgIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gICAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHZhciBsbyA9IC10aGlzLmxvO1xuICAgIHZhciBtaSA9IC10aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgICB2YXIgaGkgPSAtdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xuICB9XG5cbiAgYWRkKHgpIHtcbiAgICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gICAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbiAgfVxuXG4gIHN1Yih4KSB7XG4gICAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gICAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICAgIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBtdWwoeCkge1xuICAgIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICAgIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gICAgdmFyIGhpID1cbiAgICAgICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArXG4gICAgICB0aGlzLmhpICogeC5sbyArXG4gICAgICB0aGlzLm1pICogeC5taSArXG4gICAgICB0aGlzLmxvICogeC5oaTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvIHwgdGhpcy5taSB8IHRoaXMuaGkpID09PSAwO1xuICB9XG5cbiAgaXNOZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGkgPDwgMTYgPCAwO1xuICB9XG5cbiAgYW5kKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG4gIH1cblxuICBvcih4KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gfCB4LmxvLCB0aGlzLm1pIHwgeC5taSwgdGhpcy5oaSB8IHguaGkpO1xuICB9XG5cbiAgeG9yKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyBeIHgubG8sIHRoaXMubWkgXiB4Lm1pLCB0aGlzLmhpIF4geC5oaSk7XG4gIH1cblxuICBzaGlmdF9sZWZ0KHMpIHtcbiAgICBzID0gcyAmIDYzO1xuICAgIGlmIChzID09PSAwKSByZXR1cm4gdGhpcztcbiAgICBpZiAocyA8IDI0KSB7XG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgIHRoaXMubG8gPDwgcyxcbiAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHMgPCA0OClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpLFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSk7XG4gIH1cblxuICBzaGlmdF9yaWdodF91bnNpZ25lZChzKSB7XG4gICAgcyA9IHMgJiA2MztcbiAgICBpZiAocyA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHMgPCAyNClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgICB0aGlzLmhpID4+IHMsXG4gICAgICApO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgdGhpcy5oaSA+PiAocyAtIDI0KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xuICB9XG5cbiAgc2hpZnRfcmlnaHQocykge1xuICAgIHMgPSBzICYgNjM7XG4gICAgaWYgKHMgPT09IDApIHJldHVybiB0aGlzO1xuICAgIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICAgIGlmIChzIDwgMjQpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYsXG4gICAgICApO1xuICAgIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSkgPj4gMTYsXG4gICAgICAgIHNpZ24gJiAweGZmZmYsXG4gICAgICApO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xuICB9XG5cbiAgbHNsMSgpIHtcbiAgICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbiAgfVxuXG4gIGxzcjEoKSB7XG4gICAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG4gIH1cblxuICB1ZGl2bW9kKHgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgbW9kdWx1cyA9IHRoaXMuc2xpY2UoKTtcbiAgICB2YXIgZGl2aXNvciA9IHguc2xpY2UoKTtcbiAgICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLCAwLCAwKTtcbiAgICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGl2aXNvci5sc2wxKCk7XG4gICAgfVxuICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgb2Zmc2V0LS07XG4gICAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICAgIHF1b3RpZW50LmxvKys7XG4gICAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICAgIH1cbiAgICAgIGRpdmlzb3IubHNyMSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBxdW90aWVudDogcXVvdGllbnQsIG1vZHVsdXM6IG1vZHVsdXMgfTtcbiAgfVxuXG4gIGRpdih5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gICAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICAgIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICAgIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIG1vZCh5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpO1xuICAgIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gICAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICB0b0ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbiAgfVxuXG4gIHRvRmxvYXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzLmxvXG4gICAgKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuaGkgPj4gOCxcbiAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubG8gJiAweGZmLFxuICAgIF07XG4gIH1cblxuICBsbzMyKCkge1xuICAgIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xuICB9XG5cbiAgaGkzMigpIHtcbiAgICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgsIHkpIHtcbiAgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LCB5LCBfdG90YWwpIHtcbiAgcmV0dXJuIHguY29tcGFyZSh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnKHgpIHtcbiAgcmV0dXJuIHgubmVnKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCh4LCB5KSB7XG4gIHJldHVybiB4LmFkZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViKHgsIHkpIHtcbiAgcmV0dXJuIHguc3ViKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgsIHkpIHtcbiAgcmV0dXJuIHgubXVsKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7XG4gIHJldHVybiAreC5pc1plcm8oKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7XG4gIHJldHVybiAreC5pc05lZygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQoeCwgeSkge1xuICByZXR1cm4geC5hbmQoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IoeCwgeSkge1xuICByZXR1cm4geC5vcih5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yKHgsIHkpIHtcbiAgcmV0dXJuIHgueG9yKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X2xlZnQocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQoeCwgcykge1xuICByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdlxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYoeCwgeSkge1xuICByZXR1cm4geC5kaXYoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kXG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCh4LCB5KSB7XG4gIHJldHVybiB4Lm1vZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuLy9BbGlhczogY2FtbF9pbnQ2NF9vZl9pbnRcbi8vQWxpYXM6IGNhbWxfaW50NjRfb2ZfbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50NjRfdG9faW50XG4vL0FsaWFzOiBjYW1sX2ludDY0X3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMih4KSB7XG4gIHJldHVybiB4LnRvSW50KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geC50b0Zsb2F0KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0KHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSBcIiBcIjtcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQobiwgXCIwXCIpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZShzKTtcbiAgdmFyIGkgPSByWzBdLFxuICAgIHNpZ24gPSByWzFdLFxuICAgIGJhc2UgPSByWzJdLFxuICAgIHNpZ25lZG5lc3MgPSByWzNdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9IE1sSW50NjQuVU5TSUdORURfTUFYLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJJbnQ2NC5vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcIkludDY0Lm9mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoXG4gICAgc2lnbmVkbmVzcyAmJlxuICAgIGNhbWxfaW50NjRfdWx0KHNpZ24gPCAwID8gTWxJbnQ2NC5TSUdORURfTUlOIDogTWxJbnQ2NC5TSUdORURfTUFYLCByZXMpXG4gIClcbiAgICBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZixcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KSB7XG4gIHJldHVybiB2LmhpMzIoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAoYVs3XSA8PCAwKSB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgIChhWzRdIDw8IDApIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgKGFbMV0gPDwgMCkgfCAoYVswXSA8PCA4KSxcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkge1xuICByZXR1cm4geC50b0FycmF5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpIF4gdi5oaTMyKCk7XG59XG4iLCIvL1Byb3ZpZGVzOiBNbE11dGV4XG5jbGFzcyBNbE11dGV4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X25ld1xuLy9SZXF1aXJlczogTWxNdXRleFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIG5ldyBNbE11dGV4KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbXV0ZXhfbG9ja1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9sb2NrKHQpIHtcbiAgaWYgKHQubG9ja2VkKSBjYW1sX2ZhaWx3aXRoKFwiTXV0ZXgubG9jazogbXV0ZXggYWxyZWFkeSBsb2NrZWQuIENhbm5vdCB3YWl0LlwiKTtcbiAgZWxzZSB0LmxvY2tlZCA9IHRydWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X3RyeV9sb2NrXG5mdW5jdGlvbiBjYW1sX21sX211dGV4X3RyeV9sb2NrKHQpIHtcbiAgaWYgKCF0LmxvY2tlZCkge1xuICAgIHQubG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tdXRleF91bmxvY2tcbmZ1bmN0aW9uIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHQpIHtcbiAgdC5sb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHMuX25hdCA9IHtcbiAgICBkZXNlcmlhbGl6ZTogZGVzZXJpYWxpemVfbmF0LFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplX25hdCxcbiAgICBoYXNoOiBjYW1sX2hhc2hfbmF0LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuY2xhc3MgTWxOYXQge1xuICBjb25zdHJ1Y3Rvcih4KSB7XG4gICAgdGhpcy5kYXRhID0gbmV3IEludDMyQXJyYXkoeCk7XG4gICAgLy8gRm9yIG51bSA8IDEuNVxuICAgIC8vIGxlbmd0aF9uYXQgaXNuJ3QgZXh0ZXJuYWwsIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGUgT2JqLnNpemVcbiAgICAvLyB3b3JrIG91dCByaWdodC5cbiAgICAvLyBXZSBhZGQgKzIgdG8gdGhlIGFycmF5IGxlbmd0aDpcbiAgICAvLyAtICsxIGZvciB0aGUgdGFnXG4gICAgLy8gLSArMSBmb3IgdGhlIGN1c3RvbV9vcHMgc2xvdFxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDI7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGxlbmd0aF9uYXRcbmZ1bmN0aW9uIGxlbmd0aF9uYXQoeCkge1xuICByZXR1cm4geC5kYXRhLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpIHtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGFyci5kYXRhW2ldID0gLTE7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy9Qcm92aWRlczogc2V0X3RvX3plcm9fbmF0XG5mdW5jdGlvbiBzZXRfdG9femVyb19uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzICsgaV0gPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBibGl0X25hdFxuZnVuY3Rpb24gYmxpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMiwgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0gbmF0Mi5kYXRhW29mczIgKyBpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQuZGF0YVtvZnMgKyBpXSAhPT0gMCkgcmV0dXJuIGkgKyAxO1xuICB9XG4gIHJldHVybiAxOyAvLyAwIGNvdW50cyBhcyAxIGRpZ2l0XG59XG5cbi8vUHJvdmlkZXM6IG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdFxuZnVuY3Rpb24gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdCwgb2ZzKSB7XG4gIHZhciBhID0gbmF0LmRhdGFbb2ZzXTtcbiAgdmFyIGIgPSAwO1xuICBpZiAoYSAmIDB4ZmZmZjAwMDApIHtcbiAgICBiICs9IDE2O1xuICAgIGEgPj4+PSAxNjtcbiAgfVxuICBpZiAoYSAmIDB4ZmYwMCkge1xuICAgIGIgKz0gODtcbiAgICBhID4+Pj0gODtcbiAgfVxuICBpZiAoYSAmIDB4ZjApIHtcbiAgICBiICs9IDQ7XG4gICAgYSA+Pj49IDQ7XG4gIH1cbiAgaWYgKGEgJiAxMikge1xuICAgIGIgKz0gMjtcbiAgICBhID4+Pj0gMjtcbiAgfVxuICBpZiAoYSAmIDIpIHtcbiAgICBiICs9IDE7XG4gICAgYSA+Pj49IDE7XG4gIH1cbiAgaWYgKGEgJiAxKSB7XG4gICAgYiArPSAxO1xuICB9XG4gIHJldHVybiAzMiAtIGI7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X2ludFxuZnVuY3Rpb24gaXNfZGlnaXRfaW50KG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdID49IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9ub3JtYWxpemVkXG5mdW5jdGlvbiBpc19kaWdpdF9ub3JtYWxpemVkKF9uYXQsIF9vZnMpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdICYgMSkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpbmNyX25hdFxuZnVuY3Rpb24gaW5jcl9uYXQobmF0LCBvZnMsIGxlbiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHggfCAwO1xuICAgIGlmICh4ID09PSB4ID4+PiAwKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2FycnkgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogYWRkX25hdFxuLy9SZXF1aXJlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0geDtcbiAgICBpZiAoeCA9PT0geCA+Pj4gMCkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGNhcnJ5KTtcbn1cblxuLy9Qcm92aWRlczogY29tcGxlbWVudF9uYXRcbmZ1bmN0aW9uIGNvbXBsZW1lbnRfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcyArIGldID0gKC0xID4+PiAwKSAtIChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gY2FycnlfaW4gPT09IDEgPyAwIDogMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcyArIGldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9ycm93ID09PSAxID8gMCA6IDE7XG59XG5cbi8vIG9jYW1sIGZsaXBzIGNhcnJ5X2luXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IHN1Yl9uYXRcbi8vUmVxdWlyZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBzdWJfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSBjYXJyeV9pbiA9PT0gMSA/IDAgOiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvcnJvdyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGJvcnJvdyA9PT0gMSA/IDAgOiAxKTtcbn1cblxuLy8gbmF0MSArPSBuYXQyICogbmF0M1tvZnMzXVxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBtdWx0X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogYWRkX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBhID0gbmF0My5kYXRhW29mczNdID4+PiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9XG4gICAgICAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgK1xuICAgICAgKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApICogKGEgJiAweDAwMDBmZmZmKSArXG4gICAgICBjYXJyeTtcbiAgICB2YXIgeDIgPSAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4MiAvIDY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4MztcbiAgICBjYXJyeSArPSBNYXRoLmZsb29yKHgzIC8gNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZiAobGVuMiA8IGxlbjEgJiYgY2FycnkpIHtcbiAgICByZXR1cm4gYWRkX25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgbGVuMixcbiAgICAgIGxlbjEgLSBsZW4yLFxuICAgICAgbmF0X29mX2FycmF5KFtjYXJyeV0pLFxuICAgICAgMCxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgaSxcbiAgICAgIGxlbjEgLSBpLFxuICAgICAgbmF0MixcbiAgICAgIG9mczIsXG4gICAgICBsZW4yLFxuICAgICAgbmF0MyxcbiAgICAgIG9mczMgKyBpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBuYXQxID0gMiAqIG5hdDEgKyBuYXQyICogbmF0MlxuLy8gbGVuMSA+PSAyICogbGVuMlxuLy9Qcm92aWRlczogc3F1YXJlX25hdFxuLy9SZXF1aXJlczogbXVsdF9uYXQsIGFkZF9uYXRcbmZ1bmN0aW9uIHNxdWFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgY2FycnkgPSAwO1xuICBjYXJyeSArPSBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDEsIG9mczEsIGxlbjEsIDApO1xuICBjYXJyeSArPSBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQyLCBvZnMyLCBsZW4yKTtcbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZiAobmJpdHMgPT09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IChhIDw8IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPj4+ICgzMiAtIG5iaXRzKTtcbiAgfVxuICBuYXQyLmRhdGFbb2ZzMl0gPSB3cmFwO1xuICByZXR1cm4gMDtcbn1cblxuLy8gQXNzdW1pbmcgYyA+IGEsIHJldHVybnMgW3F1b3RpZW50LCByZW1haW5kZXJdIG9mIChhPDwzMiArIGIpL2Ncbi8vUHJvdmlkZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9oZWxwZXIoYSwgYiwgYykge1xuICB2YXIgeCA9IGEgKiA2NTUzNiArIChiID4+PiAxNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4IC8gYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwZmZmZik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3IodyAvIGMpLCB3ICUgY107XG59XG5cbi8vIG5hdDFbb2ZzMStsZW5dIDwgbmF0MltvZnMyXVxuLy9Qcm92aWRlczogZGl2X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2RpZ2l0X25hdChuYXRxLCBvZnNxLCBuYXRyLCBvZnNyLCBuYXQxLCBvZnMxLCBsZW4sIG5hdDIsIG9mczIpIHtcbiAgdmFyIHJlbSA9IG5hdDEuZGF0YVtvZnMxICsgbGVuIC0gMV0gPj4+IDA7XG4gIC8vIG5hdHFbb2ZzcStsZW4tMV0gaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIChkdWUgdG8gdGhlIE1TRCByZXF1aXJlbWVudCksXG4gIC8vIGFuZCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uXG4gIGZvciAodmFyIGkgPSBsZW4gLSAyOyBpID49IDA7IGktLSkge1xuICAgIHZhciB4ID0gZGl2X2hlbHBlcihyZW0sIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsIG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCk7XG4gICAgbmF0cS5kYXRhW29mc3EgKyBpXSA9IHhbMF07XG4gICAgcmVtID0geFsxXTtcbiAgfVxuICBuYXRyLmRhdGFbb2Zzcl0gPSByZW07XG4gIHJldHVybiAwO1xufVxuXG4vLyBuYXQxW25hdDI6XSA6PSBuYXQxIC8gbmF0MlxuLy8gbmF0MVs6bmF0Ml0gOj0gbmF0MSAlIG5hdDJcbi8vIGxlbjEgPiBsZW4yLCBuYXQyW29mczIrbGVuMi0xXSA+IG5hdDFbb2ZzMStsZW4xLTFdXG4vL1Byb3ZpZGVzOiBkaXZfbmF0XG4vL1JlcXVpcmVzOiBkaXZfZGlnaXRfbmF0LCBkaXZfaGVscGVyLCBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQsIHNoaWZ0X2xlZnRfbmF0LCBzaGlmdF9yaWdodF9uYXQsIGNyZWF0ZV9uYXQsIHNldF90b196ZXJvX25hdCwgbXVsdF9kaWdpdF9uYXQsIHN1Yl9uYXQsIGNvbXBhcmVfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIGRpdl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICBpZiAobGVuMiA9PT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSArIDEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMiArIGxlbjIgLSAxKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIgKyBsZW4yIC0gMV0gPj4+IDApICsgMTtcbiAgdmFyIGEgPSBjcmVhdGVfbmF0KGxlbjIgKyAxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID1cbiAgICAgIGQgPT09IDQyOTQ5NjcyOTZcbiAgICAgICAgPyBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwXG4gICAgICAgIDogZGl2X2hlbHBlcihcbiAgICAgICAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsXG4gICAgICAgICAgICBuYXQxLmRhdGFbb2ZzMSArIGkgLSAxXSA+Pj4gMCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgKVswXTtcbiAgICBzZXRfdG9femVyb19uYXQoYSwgMCwgbGVuMiArIDEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIgKyAxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiArIDEsIGEsIDAsIGxlbjIgKyAxLCAxKTtcblxuICAgIHdoaWxlIChcbiAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gIT09IDAgfHxcbiAgICAgIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMFxuICAgICkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMSArIGkgLSBsZW4yLCBsZW4yICsgMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IHF1bztcbiAgfVxuXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHNoaWZ0IHJlbWFpbmRlclxuICBzaGlmdF9yaWdodF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyByZXN0b3JlXG4gIHJldHVybiAwO1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmIChuYml0cyA9PT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGEgPSBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYgKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmIChuYXQxLmRhdGFbb2ZzMV0gPCBuYXQyLmRhdGFbb2ZzMl0pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfbmF0XG4vL1JlcXVpcmVzOiBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgYSA9IG51bV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIGxlbjEpO1xuICB2YXIgYiA9IG51bV9kaWdpdHNfbmF0KG5hdDIsIG9mczIsIGxlbjIpO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwID4gbmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgcmV0dXJuIDE7XG4gICAgaWYgKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAgPCBuYXQyLmRhdGFbb2ZzMiArIGldID4+PiAwKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxhbmRfZGlnaXRfbmF0XG5mdW5jdGlvbiBsYW5kX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSAmPSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBsb3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBsb3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIHw9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGx4b3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBseG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSBePSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeikge1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3opIHtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX3dpbjMyXG52YXIganNvb19pc193aW4zMiA9XG4gIGdsb2JhbFRoaXMuRGVubz8uYnVpbGQ/Lm9zID09PSBcIndpbmRvd3NcIiB8fFxuICBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHNcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbmNsYXNzIE1sTm9kZURldmljZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICB0aGlzLmZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgfVxuXG4gIG5tKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yb290ICsgbmFtZTtcbiAgfVxuXG4gIGV4aXN0cyhuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGlzRmlsZShuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpID8gMSA6IDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLCB7IG1vZGU6IG1vZGUgfSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGlzX2RpcihuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB1bmxpbmsobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgdXRpbWVzKG5hbWUsIGF0aW1lLCBtdGltZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXRpbWUgPT09IDAgJiYgbXRpbWUgPT09IDApIHtcbiAgICAgICAgYXRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIG10aW1lID0gYXRpbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZzLnV0aW1lc1N5bmModGhpcy5ubShuYW1lKSwgYXRpbWUsIG10aW1lKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICB0cnVuY2F0ZShuYW1lLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy50cnVuY2F0ZVN5bmModGhpcy5ubShuYW1lKSwgbGVuIHwgMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgY29uc3RzID0gdGhpcy5mcy5jb25zdGFudHM7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIga2V5IGluIGYpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5SX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuV19PSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXMgfD0ganNvb19pc193aW4zMiA/IGNvbnN0cy5SX09LIDogY29uc3RzLlhfT0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5GX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5hY2Nlc3NTeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBwZXJtcywgcmFpc2VfdW5peCkge1xuICAgIHZhciBjb25zdHMgPSB0aGlzLmZzLmNvbnN0YW50cztcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gZikge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInJkb25seVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRE9OTFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3cm9ubHlcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmR3clwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRFdSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXBwZW5kXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19DUkVBVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX1RSVU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhjbFwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19FWENMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fVEVYVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm5vbmJsb2NrXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm9jdHR5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PQ1RUWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRzeW5jXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0RTWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3luY1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19TWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMsIHBlcm1zKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIHJlbmFtZShvLCBuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKGpzb29faXNfd2luMzIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLm5tKG4pO1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5ubShvKTtcbiAgICAgICAgdmFyIHRhcmdldF9zdGF0cywgc291cmNlX3N0YXRzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldF9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGFyZ2V0LCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgKHNvdXJjZV9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmMoc291cmNlLCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgc291cmNlX3N0YXRzLmlzRGlyZWN0b3J5KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRhcmdldF9zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xhc2godGFyZ2V0KS5zdGFydHNXaXRoKHRoaXMuc2xhc2goc291cmNlKSkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcy5ybWRpclN5bmModGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCByZW5hbWUgJyR7c291cmNlfScgLT4gJyR7dGFyZ2V0fSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyLCB7XG4gICAgICAgICAgICAgIGVycm5vOiAtMjAsXG4gICAgICAgICAgICAgIGNvZGU6IFwiRU5PVERJUlwiLFxuICAgICAgICAgICAgICBzeXNjYWxsOiBcInJlbmFtZVwiLFxuICAgICAgICAgICAgICBwYXRoOiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgbHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNobW9kKG5hbWUsIHBlcm1zLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2htb2RTeW5jKHRoaXMubm0obmFtZSksIHBlcm1zKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgc3ltbGluayh0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRoaXMubm0ocGF0aCksXG4gICAgICAgIHRvX2RpciA9PT0gMCA/IG51bGwgOiB0b19kaXJbMV0gPyBcImRpclwiIDogXCJmaWxlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRsaW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCBcInV0ZjhcIik7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IG9jYW1sX3N0YXRzX2Zyb21fbm9kZV9zdGF0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdFxuZnVuY3Rpb24gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSkge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vIHwgMCxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAgbGFyZ2UgPyBjYW1sX2ludDY0X29mX2Zsb2F0KGpzX3N0YXRzLnNpemUpIDoganNfc3RhdHMuc2l6ZSB8IDAsXG4gICAganNfc3RhdHMuYXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMubXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMuY3RpbWVNcyAvIDEwMDAsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuY2xhc3MgTWxOb2RlRGV2aWNlIHt9XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvciwgb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzXG5jbGFzcyBNbE5vZGVGZCBleHRlbmRzIE1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKGZkLCBmbGFncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mcyA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuICAgIHRoaXMuZmQgPSBmZDtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKGZkKTtcbiAgICAgIGZsYWdzLm5vU2VlayA9XG4gICAgICAgIHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNGSUZPKCkgfHwgc3RhdHMuaXNTb2NrZXQoKTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5mbGFncy5hcHBlbmQgPyBzdGF0cy5zaXplIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmc3RhdCB3aWxsIGZhaWwgb24gc3RhbmRhcmQgc3RyZWFtcyB1bmRlciBXaW5kb3dzIHdpdGggbm9kZVxuICAgICAgLy8gMTggKGFuZCBsb3dlcikuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8zODExLlxuICAgICAgZmxhZ3Mubm9TZWVrID0gdHJ1ZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZWVrZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCwgbGVuIHwgMCk7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPiBsZW4pIHRoaXMub2Zmc2V0ID0gbGVuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBpc2F0dHkoKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoXCJub2RlOnR0eVwiKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eSh0aGlzLmZkKSA/IDEgOiAwO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5mbGFncy5ub1NlZWsgfHwgIXRoaXMuc2Vla2VkKSB7XG4gICAgICAgIHZhciB3cml0dGVuID0gdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHdyaXR0ZW4gPSB0aGlzLmZzLndyaXRlU3luYyhcbiAgICAgICAgICB0aGlzLmZkLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBidWZfb2Zmc2V0LFxuICAgICAgICAgIGxlbixcbiAgICAgICAgICB0aGlzLm9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbiAgfVxuXG4gIHJlYWQoYSwgYnVmX29mZnNldCwgbGVuLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZsYWdzLm5vU2VlayB8fCAhdGhpcy5zZWVrZWQpIHtcbiAgICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCB0aGlzLm9mZnNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9mZnNldCArPSByZWFkO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlZWsob2Zmc2V0LCB3aGVuY2UsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5mbGFncy5ub1NlZWspIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRVNQSVBFXCIsIFwibHNlZWtcIiwgXCJpbGxlZ2FsIHNlZWtcIik7XG4gICAgfVxuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFSU5WQUxcIixcbiAgICAgICAgXCJsc2Vla1wiLFxuICAgICAgICBcImludmFsaWQgYXJndW1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgc3RhdChsYXJnZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjaG1vZChwZXJtcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZjaG1vZFN5bmModGhpcy5mZCwgcGVybXMpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSk7XG4gICAgfVxuICB9XG5cbiAgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5mc3luY1N5bmModGhpcy5mZCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZShyYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrX3N0cmVhbV9zZW1hbnRpY3MoY21kKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIGNtZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGpzX3N0YXRzLmlzRmlsZSgpIHx8XG4gICAgICAgIGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNGSUZPKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNTb2NrZXQoKVxuICAgICAgKVxuICAgIClcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIGNtZCxcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5jbGFzcyBNbE5vZGVGZCB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpIHtcbiAgaWYgKGZsYWdzLmFsdG5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MuYWx0bmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoX2ZkLCBfZmxhZ3MpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncywgbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4LCBjbWQpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoXG4gICAgICBlcnIuY29kZSxcbiAgICAgIGNtZCB8fCBlcnIuc3lzY2FsbCxcbiAgICAgIGVyci5wYXRoLFxuICAgICAgZXJyLmVycm5vLFxuICAgICk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxudmFyIGNhbWxfdW5wYWNrRmxvYXQxNiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgRVhQX01BU0sxNiA9IDMxOyAvLyAyICoqIDUgLSAxXG4gIHZhciBTSUdOSUZJQ0FORF9NQVNLMTYgPSAxMDIzOyAvLyAyICoqIDEwIC0gMVxuICB2YXIgTUlOX1NVQk5PUk1BTDE2ID0gcG93KDIsIC0yNCk7IC8vIDIgKiogLTEwICogMiAqKiAtMTRcbiAgdmFyIFNJR05JRklDQU5EX0RFTk9NMTYgPSAwLjAwMDk3NjU2MjU7IC8vIDIgKiogLTEwXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzaWduID0gYnl0ZXMgPj4+IDE1O1xuICAgIHZhciBleHBvbmVudCA9IChieXRlcyA+Pj4gMTApICYgRVhQX01BU0sxNjtcbiAgICB2YXIgc2lnbmlmaWNhbmQgPSBieXRlcyAmIFNJR05JRklDQU5EX01BU0sxNjtcbiAgICBpZiAoZXhwb25lbnQgPT09IEVYUF9NQVNLMTYpXG4gICAgICByZXR1cm4gc2lnbmlmaWNhbmQgPT09IDBcbiAgICAgICAgPyBzaWduID09PSAwXG4gICAgICAgICAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgICA6IE51bWJlci5OYU47XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKVxuICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICogKHNpZ24gPT09IDAgPyBNSU5fU1VCTk9STUFMMTYgOiAtTUlOX1NVQk5PUk1BTDE2KTtcbiAgICB2YXIgciA9XG4gICAgICBwb3coMiwgZXhwb25lbnQgLSAxNSkgKlxuICAgICAgKHNpZ24gPT09IDBcbiAgICAgICAgPyAxICsgc2lnbmlmaWNhbmQgKiBTSUdOSUZJQ0FORF9ERU5PTTE2XG4gICAgICAgIDogLTEgLSBzaWduaWZpY2FuZCAqIFNJR05JRklDQU5EX0RFTk9NMTYpO1xuICAgIHJldHVybiByO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9wYWNrRmxvYXQxNlxudmFyIGNhbWxfcGFja0Zsb2F0MTYgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBJTlZFUlNFX09GX0VQU0lMT04gPSAxIC8gTnVtYmVyLkVQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUaWVzVG9FdmVuKG51bSkge1xuICAgIHJldHVybiBudW0gKyBJTlZFUlNFX09GX0VQU0lMT04gLSBJTlZFUlNFX09GX0VQU0lMT047XG4gIH1cblxuICBjb25zdCBGTE9BVDE2X01JTl9WQUxVRSA9IDYuMTAzNTE1NjI1ZS01O1xuICBjb25zdCBGTE9BVDE2X01BWF9WQUxVRSA9IDY1NTA0O1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT04gPSAwLjAwMDk3NjU2MjU7XG5cbiAgY29uc3QgRkxPQVQxNl9FUFNJTE9OX01VTFRJUExJRURfQllfRkxPQVQxNl9NSU5fVkFMVUUgPVxuICAgIEZMT0FUMTZfRVBTSUxPTiAqIEZMT0FUMTZfTUlOX1ZBTFVFO1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT05fREVWSURFRF9CWV9FUFNJTE9OID1cbiAgICBGTE9BVDE2X0VQU0lMT04gKiBJTlZFUlNFX09GX0VQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUb0Zsb2F0MTYobnVtKSB7XG4gICAgY29uc3QgbnVtYmVyID0gK251bTtcblxuICAgIC8vIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLTBcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpIHx8IG51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBmaW5pdGUgZXhjZXB0IDAsIC0wXG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA+IDAgPyAxIDogLTE7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBNYXRoLmFicyhudW1iZXIpO1xuXG4gICAgLy8gc21hbGwgbnVtYmVyXG4gICAgaWYgKGFic29sdXRlIDwgRkxPQVQxNl9NSU5fVkFMVUUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNpZ24gKlxuICAgICAgICByb3VuZFRpZXNUb0V2ZW4oXG4gICAgICAgICAgYWJzb2x1dGUgLyBGTE9BVDE2X0VQU0lMT05fTVVMVElQTElFRF9CWV9GTE9BVDE2X01JTl9WQUxVRSxcbiAgICAgICAgKSAqXG4gICAgICAgIEZMT0FUMTZfRVBTSUxPTl9NVUxUSVBMSUVEX0JZX0ZMT0FUMTZfTUlOX1ZBTFVFXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXAgPSAoMSArIEZMT0FUMTZfRVBTSUxPTl9ERVZJREVEX0JZX0VQU0lMT04pICogYWJzb2x1dGU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGVtcCAtICh0ZW1wIC0gYWJzb2x1dGUpO1xuXG4gICAgLy8gbGFyZ2UgbnVtYmVyXG4gICAgaWYgKHJlc3VsdCA+IEZMT0FUMTZfTUFYX1ZBTFVFIHx8IE51bWJlci5pc05hTihyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGJhc2UgYWxnb3JpdGhtOiBodHRwOi8vZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcblxuICBjb25zdCBiYXNlVGFibGUgPSBuZXcgVWludDE2QXJyYXkoNTEyKTtcbiAgY29uc3Qgc2hpZnRUYWJsZSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGNvbnN0IGUgPSBpIC0gMTI3O1xuXG4gICAgLy8gdmVyeSBzbWFsbCBudW1iZXIgKDAsIC0wKVxuICAgIGlmIChlIDwgLTI0KSB7XG4gICAgICBiYXNlVGFibGVbaV0gPSAweDAwMDA7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAyNDtcbiAgICAgIHNoaWZ0VGFibGVbaSB8IDB4MTAwXSA9IDI0O1xuXG4gICAgICAvLyBzbWFsbCBudW1iZXIgKGRlbm9ybSlcbiAgICB9IGVsc2UgaWYgKGUgPCAtMTQpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4MDQwMCA+PiAoLWUgLSAxNCk7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9ICgweDA0MDAgPj4gKC1lIC0gMTQpKSB8IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAtZSAtIDE7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAtZSAtIDE7XG5cbiAgICAgIC8vIG5vcm1hbCBudW1iZXJcbiAgICB9IGVsc2UgaWYgKGUgPD0gMTUpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IChlICsgMTUpIDw8IDEwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAoKGUgKyAxNSkgPDwgMTApIHwgMHg4MDAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDEzO1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMTM7XG5cbiAgICAgIC8vIGxhcmdlIG51bWJlciAoSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2UgaWYgKGUgPCAxMjgpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4N2MwMDtcbiAgICAgIGJhc2VUYWJsZVtpIHwgMHgxMDBdID0gMHhmYzAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDI0O1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMjQ7XG5cbiAgICAgIC8vIHN0YXkgKE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVRhYmxlW2ldID0gMHg3YzAwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAweGZjMDA7XG4gICAgICBzaGlmdFRhYmxlW2ldID0gMTM7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAxMztcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7XG4gIGNvbnN0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgY29uc3QgdWludDMyVmlldyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG4gICAgZmxvYXRWaWV3WzBdID0gcm91bmRUb0Zsb2F0MTYobnVtKTtcbiAgICBjb25zdCBmID0gdWludDMyVmlld1swXTtcbiAgICBjb25zdCBlID0gKGYgPj4gMjMpICYgMHgxZmY7XG4gICAgcmV0dXJuIGJhc2VUYWJsZVtlXSArICgoZiAmIDB4MDA3ZmZmZmYpID4+IHNoaWZ0VGFibGVbZV0pO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKSB7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2aWV3ID0gRmxvYXQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgdmlldyA9IEZsb2F0NjRBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZpZXcgPSBJbnQ4QXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2aWV3ID0gVWludDhBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZpZXcgPSBJbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmlldyA9IFVpbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2aWV3ID0gSW50MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZpZXcgPSBJbnQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmlldyA9IEZsb2F0MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2aWV3ID0gRmxvYXQ2NEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZpZXcgPSBVaW50OEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHZpZXcgPSBVaW50MTZBcnJheTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIjtcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG4vL1JlcXVpcmVzOiBjYW1sX3BhY2tGbG9hdDE2LCBjYW1sX3VucGFja0Zsb2F0MTZcbmNsYXNzIE1sX0JpZ2FycmF5IHtcbiAgY29uc3RydWN0b3Ioa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5kYXRhID0gYnVmZmVyO1xuICAgIHRoaXMuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuICB9XG5cbiAgb2Zmc2V0KGFyZykge1xuICAgIHZhciBvZnMgPSAwO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYXJnLmxlbmd0aClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgb2ZzID0gb2ZzICogdGhpcy5kaW1zW2ldICsgYXJnW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSkge1xuICAgICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBvZnMgPSBvZnMgKiB0aGlzLmRpbXNbaV0gKyAoYXJnW2ldIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZnM7XG4gIH1cblxuICBnZXQob2ZzKSB7XG4gICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgICAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLCBoKTtcbiAgICAgIGNhc2UgMTA6XG4gICAgICBjYXNlIDExOlxuICAgICAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgICAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICAgICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgcmV0dXJuIGNhbWxfdW5wYWNrRmxvYXQxNih0aGlzLmRhdGFbb2ZzXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW29mc107XG4gICAgfVxuICB9XG5cbiAgc2V0KG9mcywgdikge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIC8vIEludDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgICAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGFbb2ZzXSA9IGNhbWxfcGFja0Zsb2F0MTYodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBJbnQ2NFxuICAgICAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gYSA6IGI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHZhciBpbSA9IHZbMV07XG4gICAgICAgIHZhciByZSA9IHZbMl07XG4gICAgICAgIGlmIChpbSA9PT0gcmUpIHtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gaW0gOiByZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGEuZmlsbChjYW1sX3BhY2tGbG9hdDE2KHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZShiLCB0b3RhbCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9PSBiLmtpbmQpIHtcbiAgICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICAgIHZhciBrMiA9IGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICAgIHJldHVybiBrMiAtIGsxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYi5kaW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICh0aGlzLmRpbXNbaV0gIT09IGIuZGltc1tpXSkgcmV0dXJuIHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSA/IC0xIDogMTtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICB2YXIgeCwgeTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICAgICAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoeCAhPT0geSkge1xuICAgICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE51bWJlci5OYU47XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih5KSkgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA8IGIuZGF0YVtpICsgMV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA+IGIuZGF0YVtpICsgMV0pIHJldHVybiAxO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPj4+IDAgPCBiLmRhdGFbaV0gPj4+IDApIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4+PiAwID4gYi5kYXRhW2ldID4+PiAwKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGFhID0gY2FtbF91bnBhY2tGbG9hdDE2KHRoaXMuZGF0YVtpXSk7XG4gICAgICAgICAgdmFyIGJiID0gY2FtbF91bnBhY2tGbG9hdDE2KGIuZGF0YVtpXSk7XG4gICAgICAgICAgaWYgKGFhIDwgYmIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYWEgPiBiYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEyOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmNsYXNzIE1sX0JpZ2FycmF5X2NfMV8xIGV4dGVuZHMgTWxfQmlnYXJyYXkge1xuICBvZmZzZXQoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA9PT0gMSkgYXJnID0gYXJnWzBdO1xuICAgICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gICAgfVxuICAgIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgZ2V0KG9mcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbiAgfVxuXG4gIHNldChvZnMsIHYpIHtcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLCBiLCB0b3RhbCkge1xuICByZXR1cm4gYS5jb21wYXJlKGIsIHRvdGFsKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSkge1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmIChjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmIChcbiAgICBsYXlvdXQgPT09IDAgJiYgLy8gY19sYXlvdXRcbiAgICBkaW1zLmxlbmd0aCA9PT0gMSAmJiAvLyBBcnJheTFcbiAgICBzaXplX3Blcl9lbGVtZW50ID09PSAxICYmXG4gICAga2luZCAhPT0gMTMgLy8gZmxvYXQxNlxuICApXG4gICAgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmIChiYS5sYXlvdXQgPT09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiBiMSB8IChiMiA8PCA4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMgKyAwKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzICsgMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMgKyAzKTtcbiAgcmV0dXJuIChiMSA8PCAwKSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQgPDwgMjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyArIDApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMgKyAyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyArIDMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzICsgNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMgKyA1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcyArIDYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzICsgNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCwgYjcsIGI2LCBiNSwgYjQsIGIzLCBiMiwgYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMgKyAwLCB2ICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZiAob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzICsgMCwgdiAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzICsgMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAzLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcyArIGksIHZbNyAtIGldKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9PSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gMTsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBiYS5kaW1zW2NoYW5nZWRfZGltXSkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShcbiAgICBvZnMgKiBzaXplX3Blcl9lbGVtZW50LFxuICAgIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQsXG4gICk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpO1xuICBpZiAoYmEuY2FtbF9jdXN0b20gPT09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYmEuZGltc1tpXSA8IDB4ZmZmZikgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgY2FzZSA1OiAvLyBVaW50MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6IC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OiAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOiAvLyBGbG9hdDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlKDgsIGJbal0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKSB7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmO1xuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW107XG4gIGlmIChuYW1lID09PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmIChzaXplX2RpbSA9PT0gMHhmZmZmKSB7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmIChzaXplX2RpbV9oaSAhPT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OiAvLyBJbnQzMkFycmF5IChpbnQpXG4gICAgY2FzZSA5OiAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICBpZiAoc2l4dHkpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiLFxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICAgIGJhLnNldChpLCBpbnQ2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6IC8vIEZsb2F0MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDA6IC8vIEZsb2F0MzJBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBbMjU0LCByZSwgaW1dKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBiYS5zZXQoaSwgWzI1NCwgcmUsIGltXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfYmFfY3JlYXRlX3Vuc2FmZV0gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIF9qc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKSB7XG4gIGlmIChkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09PSAyKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF91bnBhY2tGbG9hdDE2LCBjYW1sX2hhc2hfbWl4X2Zsb2F0MTYsIGNhbWxfaGFzaF9taXhfZmxvYXQzMlxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKSB7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgICAgdmFyIHcgPSAwLFxuICAgICAgICBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9lbHRzOyBpICs9IDQpIHtcbiAgICAgICAgdyA9XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDBdICYgMHhmZikgfFxuICAgICAgICAgICgoYmEuZGF0YVtpICsgMV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChiYS5kYXRhW2kgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDNdIDw8IDI0KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgICAgfVxuICAgICAgdyA9IDA7XG4gICAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICAgIHcgPSBiYS5kYXRhW2kgKyAyXSA8PCAxNjtcbiAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDFdIDw8IDg7XG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDogLy8gSW50MTZBcnJheVxuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGlmIChudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgICB2YXIgdyA9IDAsXG4gICAgICAgIGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gbnVtX2VsdHM7IGkgKz0gMikge1xuICAgICAgICB3ID0gKGJhLmRhdGFbaSArIDBdICYgMHhmZmZmKSB8IChiYS5kYXRhW2kgKyAxXSA8PCAxNik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPT0gMCkgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgICBudW1fZWx0cyAqPSAyO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMDogLy8gRmxvYXQzMkFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKylcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQzMihoLCBiYS5kYXRhW2ldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMTogLy8gRmxvYXQ2NEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgaWYgKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdDE2KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQxNlxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQxNihoYXNoLCBkKSB7XG4gIC8qIE5vcm1hbGl6ZSBOYU5zICovXG4gIGlmICgoZCAmIDB4N2MwMCkgPT09IDB4N2MwMCAmJiAoZCAmIDB4MDNmZikgIT09IDApIHtcbiAgICBkID0gMHg3YzAxO1xuICB9IGVsc2UgaWYgKGQgPT09IDB4ODAwMCkge1xuICAgIC8qIE5vcm1hbGl6ZSAtMCBpbnRvICswICovXG4gICAgZCA9IDA7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQzMihoYXNoLCB2KSB7XG4gIHZhciBpID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KHYpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGkgJiAweDdmODAwMDAwKSA9PT0gMHg3ZjgwMDAwMCAmJiAoaSAmIDB4N2ZmZmZmKSAhPT0gMCkge1xuICAgIGkgPSAweDdmODAwMDAxO1xuICB9IGVsc2UgaWYgKGkgPT09ICgweDgwMDAwMDAwIHwgMCkpIHtcbiAgICAvKiBOb3JtYWxpemUgLTAgaW50byArMCAqL1xuICAgIC8vIFRoaXMgY29kZSBwYXRoIGlzIG5vdCB1c2VkIGJ5IGNhbWxfaGFzaCBiZWNhdXNlIDAgYW5kIC0wIGxvb2tcbiAgICAvLyBsaWtlIGludGVnZXJzXG4gICAgaSA9IDA7XG4gIH1cbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGkpO1xuICByZXR1cm4gaGFzaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKSB7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpIHtcbiAgdmFyIGtpbmQ7XG4gIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKSB7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICAgID8gbmV3IEludDMyQXJyYXkodGEuYnVmZmVyLCB0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpXG4gICAgICA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShcbiAgICBiYS5idWZmZXIsXG4gICAgYmEuYnl0ZU9mZnNldCxcbiAgICBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSwgcG9zMSArIGkpO1xuICAgIHZhciBiID0gY2FtbF9iYV9nZXRfMShzMiwgcG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGJhMS5kYXRhLnN1YmFycmF5KG9mczEsIG9mczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2UsIHBvczIpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pIHtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYgKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyMSkuc3ViYXJyYXkocG9zMSwgcG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSwgb2ZzMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhKHN0cjEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChwb3MxICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zdWJhcnJheShwb3MxLCBwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLCBvZnMyKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChwb3MyICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoYnl0ZXMyKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLCBvZnMxICsgbGVuKTtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoc2xpY2UpLCAwLCBieXRlczIsIHBvczIsIGxlbik7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogYmxha2UyYlxuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBibGFrZTJiID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQmxha2UyQiBpbiBwdXJlIEphdmFzY3JpcHRcbiAgLy8gQWRhcHRlZCBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gUkZDNzY5M1xuICAvLyBQb3J0ZWQgdG8gSmF2YXNjcmlwdCBieSBEQyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kY3Bvc2NoXG5cbiAgLy8gNjQtYml0IHVuc2lnbmVkIGFkZGl0aW9uXG4gIC8vIFNldHMgdlthLGErMV0gKz0gdltiLGIrMV1cbiAgLy8gdiBzaG91bGQgYmUgYSBVaW50MzJBcnJheVxuICBmdW5jdGlvbiBBREQ2NEFBKHYsIGEsIGIpIHtcbiAgICBjb25zdCBvMCA9IHZbYV0gKyB2W2JdO1xuICAgIGxldCBvMSA9IHZbYSArIDFdICsgdltiICsgMV07XG4gICAgaWYgKG8wID49IDB4MTAwMDAwMDAwKSB7XG4gICAgICBvMSsrO1xuICAgIH1cbiAgICB2W2FdID0gbzA7XG4gICAgdlthICsgMV0gPSBvMTtcbiAgfVxuXG4gIC8vIDY0LWJpdCB1bnNpZ25lZCBhZGRpdGlvblxuICAvLyBTZXRzIHZbYSxhKzFdICs9IGJcbiAgLy8gYjAgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGIsIGIxIHJlcHJlc2VudHMgdGhlIGhpZ2ggMzIgYml0c1xuICBmdW5jdGlvbiBBREQ2NEFDKHYsIGEsIGIwLCBiMSkge1xuICAgIGxldCBvMCA9IHZbYV0gKyBiMDtcbiAgICBpZiAoYjAgPCAwKSB7XG4gICAgICBvMCArPSAweDEwMDAwMDAwMDtcbiAgICB9XG4gICAgbGV0IG8xID0gdlthICsgMV0gKyBiMTtcbiAgICBpZiAobzAgPj0gMHgxMDAwMDAwMDApIHtcbiAgICAgIG8xKys7XG4gICAgfVxuICAgIHZbYV0gPSBvMDtcbiAgICB2W2EgKyAxXSA9IG8xO1xuICB9XG5cbiAgLy8gTGl0dGxlLWVuZGlhbiBieXRlIGFjY2Vzc1xuICBmdW5jdGlvbiBCMkJfR0VUMzIoYXJyLCBpKSB7XG4gICAgcmV0dXJuIGFycltpXSBeIChhcnJbaSArIDFdIDw8IDgpIF4gKGFycltpICsgMl0gPDwgMTYpIF4gKGFycltpICsgM10gPDwgMjQpO1xuICB9XG5cbiAgLy8gRyBNaXhpbmcgZnVuY3Rpb25cbiAgLy8gVGhlIFJPVFJzIGFyZSBpbmxpbmVkIGZvciBzcGVlZFxuICBmdW5jdGlvbiBCMkJfRyhhLCBiLCBjLCBkLCBpeCwgaXkpIHtcbiAgICBjb25zdCB4MCA9IG1baXhdO1xuICAgIGNvbnN0IHgxID0gbVtpeCArIDFdO1xuICAgIGNvbnN0IHkwID0gbVtpeV07XG4gICAgY29uc3QgeTEgPSBtW2l5ICsgMV07XG5cbiAgICBBREQ2NEFBKHYsIGEsIGIpOyAvLyB2W2EsYSsxXSArPSB2W2IsYisxXSAuLi4gaW4gSlMgd2UgbXVzdCBzdG9yZSBhIHVpbnQ2NCBhcyB0d28gdWludDMyc1xuICAgIEFERDY0QUModiwgYSwgeDAsIHgxKTsgLy8gdlthLCBhKzFdICs9IHggLi4uIHgwIGlzIHRoZSBsb3cgMzIgYml0cyBvZiB4LCB4MSBpcyB0aGUgaGlnaCAzMiBiaXRzXG5cbiAgICAvLyB2W2QsZCsxXSA9ICh2W2QsZCsxXSB4b3IgdlthLGErMV0pIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IDMyIGJpdHNcbiAgICBsZXQgeG9yMCA9IHZbZF0gXiB2W2FdO1xuICAgIGxldCB4b3IxID0gdltkICsgMV0gXiB2W2EgKyAxXTtcbiAgICB2W2RdID0geG9yMTtcbiAgICB2W2QgKyAxXSA9IHhvcjA7XG5cbiAgICBBREQ2NEFBKHYsIGMsIGQpO1xuXG4gICAgLy8gdltiLGIrMV0gPSAodltiLGIrMV0geG9yIHZbYyxjKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDI0IGJpdHNcbiAgICB4b3IwID0gdltiXSBeIHZbY107XG4gICAgeG9yMSA9IHZbYiArIDFdIF4gdltjICsgMV07XG4gICAgdltiXSA9ICh4b3IwID4+PiAyNCkgXiAoeG9yMSA8PCA4KTtcbiAgICB2W2IgKyAxXSA9ICh4b3IxID4+PiAyNCkgXiAoeG9yMCA8PCA4KTtcblxuICAgIEFERDY0QUEodiwgYSwgYik7XG4gICAgQURENjRBQyh2LCBhLCB5MCwgeTEpO1xuXG4gICAgLy8gdltkLGQrMV0gPSAodltkLGQrMV0geG9yIHZbYSxhKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDE2IGJpdHNcbiAgICB4b3IwID0gdltkXSBeIHZbYV07XG4gICAgeG9yMSA9IHZbZCArIDFdIF4gdlthICsgMV07XG4gICAgdltkXSA9ICh4b3IwID4+PiAxNikgXiAoeG9yMSA8PCAxNik7XG4gICAgdltkICsgMV0gPSAoeG9yMSA+Pj4gMTYpIF4gKHhvcjAgPDwgMTYpO1xuXG4gICAgQURENjRBQSh2LCBjLCBkKTtcblxuICAgIC8vIHZbYixiKzFdID0gKHZbYixiKzFdIHhvciB2W2MsYysxXSkgcm90YXRlZCByaWdodCBieSA2MyBiaXRzXG4gICAgeG9yMCA9IHZbYl0gXiB2W2NdO1xuICAgIHhvcjEgPSB2W2IgKyAxXSBeIHZbYyArIDFdO1xuICAgIHZbYl0gPSAoeG9yMSA+Pj4gMzEpIF4gKHhvcjAgPDwgMSk7XG4gICAgdltiICsgMV0gPSAoeG9yMCA+Pj4gMzEpIF4gKHhvcjEgPDwgMSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3JcbiAgY29uc3QgQkxBS0UyQl9JVjMyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLFxuICAgIDB4NWYxZDM2ZjEsIDB4YTU0ZmY1M2EsIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsXG4gICAgMHhmYjQxYmQ2YiwgMHgxZjgzZDlhYiwgMHgxMzdlMjE3OSwgMHg1YmUwY2QxOSxcbiAgXSk7XG5cbiAgY29uc3QgU0lHTUE4ID0gW1xuICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE0LCAxMCwgNCwgOCwgOSwgMTUsXG4gICAgMTMsIDYsIDEsIDEyLCAwLCAyLCAxMSwgNywgNSwgMywgMTEsIDgsIDEyLCAwLCA1LCAyLCAxNSwgMTMsIDEwLCAxNCwgMywgNixcbiAgICA3LCAxLCA5LCA0LCA3LCA5LCAzLCAxLCAxMywgMTIsIDExLCAxNCwgMiwgNiwgNSwgMTAsIDQsIDAsIDE1LCA4LCA5LCAwLCA1LFxuICAgIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMsIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsXG4gICAgMTMsIDcsIDUsIDE1LCAxNCwgMSwgOSwgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LFxuICAgIDExLCAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLCA2LCAxNSwgMTQsIDksIDExLFxuICAgIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsIDEwLCAyLCA4LCA0LCA3LCA2LCAxLCA1LCAxNSwgMTEsIDksIDE0LFxuICAgIDMsIDEyLCAxMywgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDEwLFxuICAgIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICBdO1xuXG4gIC8vIFRoZXNlIGFyZSBvZmZzZXRzIGludG8gYSB1aW50NjQgYnVmZmVyLlxuICAvLyBNdWx0aXBseSB0aGVtIGFsbCBieSAyIHRvIG1ha2UgdGhlbSBvZmZzZXRzIGludG8gYSB1aW50MzIgYnVmZmVyLFxuICAvLyBiZWNhdXNlIHRoaXMgaXMgSmF2YXNjcmlwdCBhbmQgd2UgZG9uJ3QgaGF2ZSB1aW50NjRzXG4gIGNvbnN0IFNJR01BODIgPSBuZXcgVWludDhBcnJheShcbiAgICBTSUdNQTgubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDI7XG4gICAgfSksXG4gICk7XG5cbiAgLy8gQ29tcHJlc3Npb24gZnVuY3Rpb24uICdsYXN0JyBmbGFnIGluZGljYXRlcyBsYXN0IGJsb2NrLlxuICAvLyBOb3RlIHdlJ3JlIHJlcHJlc2VudGluZyAxNiB1aW50NjRzIGFzIDMyIHVpbnQzMnNcbiAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheSgzMik7XG4gIGNvbnN0IG0gPSBuZXcgVWludDMyQXJyYXkoMzIpO1xuICBmdW5jdGlvbiBibGFrZTJiQ29tcHJlc3MoY3R4LCBsYXN0KSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gaW5pdCB3b3JrIHZhcmlhYmxlc1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB2W2ldID0gY3R4LmhbaV07XG4gICAgICB2W2kgKyAxNl0gPSBCTEFLRTJCX0lWMzJbaV07XG4gICAgfVxuXG4gICAgLy8gbG93IDY0IGJpdHMgb2Ygb2Zmc2V0XG4gICAgdlsyNF0gPSB2WzI0XSBeIGN0eC50O1xuICAgIHZbMjVdID0gdlsyNV0gXiAoY3R4LnQgLyAweDEwMDAwMDAwMCk7XG4gICAgLy8gaGlnaCA2NCBiaXRzIG5vdCBzdXBwb3J0ZWQsIG9mZnNldCBtYXkgbm90IGJlIGhpZ2hlciB0aGFuIDIqKjUzLTFcblxuICAgIC8vIGxhc3QgYmxvY2sgZmxhZyBzZXQgP1xuICAgIGlmIChsYXN0KSB7XG4gICAgICB2WzI4XSA9IH52WzI4XTtcbiAgICAgIHZbMjldID0gfnZbMjldO1xuICAgIH1cblxuICAgIC8vIGdldCBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIG1baV0gPSBCMkJfR0VUMzIoY3R4LmIsIDQgKiBpKTtcbiAgICB9XG5cbiAgICAvLyB0d2VsdmUgcm91bmRzIG9mIG1peGluZ1xuICAgIC8vIHVuY29tbWVudCB0aGUgRGVidWdQcmludCBjYWxscyB0byBsb2cgdGhlIGNvbXB1dGF0aW9uXG4gICAgLy8gYW5kIG1hdGNoIHRoZSBSRkMgc2FtcGxlIGRvY3VtZW50YXRpb25cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgQjJCX0coMCwgOCwgMTYsIDI0LCBTSUdNQTgyW2kgKiAxNiArIDBdLCBTSUdNQTgyW2kgKiAxNiArIDFdKTtcbiAgICAgIEIyQl9HKDIsIDEwLCAxOCwgMjYsIFNJR01BODJbaSAqIDE2ICsgMl0sIFNJR01BODJbaSAqIDE2ICsgM10pO1xuICAgICAgQjJCX0coNCwgMTIsIDIwLCAyOCwgU0lHTUE4MltpICogMTYgKyA0XSwgU0lHTUE4MltpICogMTYgKyA1XSk7XG4gICAgICBCMkJfRyg2LCAxNCwgMjIsIDMwLCBTSUdNQTgyW2kgKiAxNiArIDZdLCBTSUdNQTgyW2kgKiAxNiArIDddKTtcbiAgICAgIEIyQl9HKDAsIDEwLCAyMCwgMzAsIFNJR01BODJbaSAqIDE2ICsgOF0sIFNJR01BODJbaSAqIDE2ICsgOV0pO1xuICAgICAgQjJCX0coMiwgMTIsIDIyLCAyNCwgU0lHTUE4MltpICogMTYgKyAxMF0sIFNJR01BODJbaSAqIDE2ICsgMTFdKTtcbiAgICAgIEIyQl9HKDQsIDE0LCAxNiwgMjYsIFNJR01BODJbaSAqIDE2ICsgMTJdLCBTSUdNQTgyW2kgKiAxNiArIDEzXSk7XG4gICAgICBCMkJfRyg2LCA4LCAxOCwgMjgsIFNJR01BODJbaSAqIDE2ICsgMTRdLCBTSUdNQTgyW2kgKiAxNiArIDE1XSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGN0eC5oW2ldID0gY3R4LmhbaV0gXiB2W2ldIF4gdltpICsgMTZdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldXNhYmxlIHBhcmFtZXRlckJsb2NrXG4gIGNvbnN0IHBhcmFtZXRlckJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICAwOiBvdXRsZW4sIGtleWxlbiwgZmFub3V0LCBkZXB0aFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICA0OiBsZWFmIGxlbmd0aCwgc2VxdWVudGlhbCBtb2RlXG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gIDg6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTI6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTY6IG5vZGUgZGVwdGgsIGlubmVyIGxlbmd0aCwgcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMjA6IHJmdVxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDI0OiByZnVcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAyODogcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMzI6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAzNjogc2FsdFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDQwOiBzYWx0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gNDQ6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA0ODogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1MjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1NjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA2MDogcGVyc29uYWxcbiAgXSk7XG5cbiAgLy8gQ3JlYXRlcyBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0XG4gIC8vIFJlcXVpcmVzIGFuIG91dHB1dCBsZW5ndGggYmV0d2VlbiAxIGFuZCA2NCBieXRlc1xuICAvLyBUYWtlcyBhbiBvcHRpb25hbCBVaW50OEFycmF5IGtleVxuICBmdW5jdGlvbiBibGFrZTJiSW5pdChvdXRsZW4sIGtleSkge1xuICAgIGlmIChvdXRsZW4gPT09IDAgfHwgb3V0bGVuID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NFwiKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0XCIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRlLCAncGFyYW0gYmxvY2snXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYjogbmV3IFVpbnQ4QXJyYXkoMTI4KSxcbiAgICAgIGg6IG5ldyBVaW50MzJBcnJheSgxNiksXG4gICAgICB0OiAwLCAvLyBpbnB1dCBjb3VudFxuICAgICAgYzogMCwgLy8gcG9pbnRlciB3aXRoaW4gYnVmZmVyXG4gICAgICBvdXRsZW46IG91dGxlbiwgLy8gb3V0cHV0IGxlbmd0aCBpbiBieXRlc1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmFtZXRlckJsb2NrIGJlZm9yZSB1c2FnZVxuICAgIHBhcmFtZXRlckJsb2NrLmZpbGwoMCk7XG4gICAgcGFyYW1ldGVyQmxvY2tbMF0gPSBvdXRsZW47XG4gICAgcGFyYW1ldGVyQmxvY2tbMV0gPSBrZXkubGVuZ3RoO1xuICAgIHBhcmFtZXRlckJsb2NrWzJdID0gMTsgLy8gZmFub3V0XG4gICAgcGFyYW1ldGVyQmxvY2tbM10gPSAxOyAvLyBkZXB0aFxuXG4gICAgLy8gaW5pdGlhbGl6ZSBoYXNoIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBjdHguaFtpXSA9IEJMQUtFMkJfSVYzMltpXSBeIEIyQl9HRVQzMihwYXJhbWV0ZXJCbG9jaywgaSAqIDQpO1xuICAgIH1cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMCkge1xuICAgICAgYmxha2UyYlVwZGF0ZShjdHgsIGtleSk7XG4gICAgICAvLyBhdCB0aGUgZW5kXG4gICAgICBjdHguYyA9IDEyODtcbiAgICB9XG5cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmVxdWlyZXMgaGFzaCBjb250ZXh0IGFuZCBVaW50OEFycmF5IChieXRlIGFycmF5KVxuICBmdW5jdGlvbiBibGFrZTJiVXBkYXRlKGN0eCwgaW5wdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3R4LmMgPT09IDEyOCkge1xuICAgICAgICAvLyBidWZmZXIgZnVsbCA/XG4gICAgICAgIGN0eC50ICs9IGN0eC5jOyAvLyBhZGQgY291bnRlcnNcbiAgICAgICAgYmxha2UyYkNvbXByZXNzKGN0eCwgZmFsc2UpOyAvLyBjb21wcmVzcyAobm90IGxhc3QpXG4gICAgICAgIGN0eC5jID0gMDsgLy8gY291bnRlciB0byB6ZXJvXG4gICAgICB9XG4gICAgICBjdHguYltjdHguYysrXSA9IGlucHV0W2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgbWVzc2FnZSBkaWdlc3RcbiAgZnVuY3Rpb24gYmxha2UyYkZpbmFsKGN0eCkge1xuICAgIGN0eC50ICs9IGN0eC5jOyAvLyBtYXJrIGxhc3QgYmxvY2sgb2Zmc2V0XG5cbiAgICB3aGlsZSAoY3R4LmMgPCAxMjgpIHtcbiAgICAgIC8vIGZpbGwgdXAgd2l0aCB6ZXJvc1xuICAgICAgY3R4LmJbY3R4LmMrK10gPSAwO1xuICAgIH1cbiAgICBibGFrZTJiQ29tcHJlc3MoY3R4LCB0cnVlKTsgLy8gZmluYWwgYmxvY2sgZmxhZyA9IDFcblxuICAgIC8vIGxpdHRsZSBlbmRpYW4gY29udmVydCBhbmQgc3RvcmVcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjdHgub3V0bGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5vdXRsZW47IGkrKykge1xuICAgICAgb3V0W2ldID0gY3R4LmhbaSA+PiAyXSA+PiAoOCAqIChpICYgMykpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHJldHVybiB7IEluaXQ6IGJsYWtlMmJJbml0LCBVcGRhdGU6IGJsYWtlMmJVcGRhdGUsIEZpbmFsOiBibGFrZTJiRmluYWwgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl9jcmVhdGUoaGFzaGxlbiwga2V5KSB7XG4gIGtleSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKGtleSk7XG4gIGlmIChrZXkubGVuZ3RoID4gNjQpIHtcbiAgICBrZXkuc3ViYXJyYXkoMCwgNjQpO1xuICB9XG4gIHJldHVybiBibGFrZTJiLkluaXQoaGFzaGxlbiwga2V5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBibGFrZTJiXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBfaGFzaGxlbikge1xuICAvLyBjdHgub3V0bGVuID09PSBoYXNobGVuXG4gIHZhciByID0gYmxha2UyYi5GaW5hbChjdHgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkocik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogYmxha2UyYlxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgaW5wdXQgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpbnB1dCA9IGlucHV0LnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKTtcbiAgYmxha2UyYi5VcGRhdGUoY3R4LCBpbnB1dCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsYWtlMl91cGRhdGVcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWYsIG9mcywgbGVuKSB7XG4gIHZhciBpbnB1dCA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgaW5wdXQgPSBpbnB1dC5zdWJhcnJheShvZnMsIG9mcyArIGxlbik7XG4gIGJsYWtlMmIuVXBkYXRlKGN0eCwgaW5wdXQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmX3N0ciwgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfYmxha2UyX2NyZWF0ZShoYXNobGVuLCBrZXkpO1xuICB2YXIgYnVmID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmX3N0cik7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9maW5hbFxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfYmxha2UyX2J5dGVzKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfY3JlYXRlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZShoYXNobGVuLCBrZXkpIHtcbiAgY29uc3Qga2V5X2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhrZXkpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleV9qc29vX3N0cmluZyk7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWwsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBibGFrZTJfanNfZm9yX3dhc21fZmluYWwoY3R4LCBoYXNobGVuKSB7XG4gIHJldHVybiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfYmxha2UyX2ZpbmFsKGN0eCwgaGFzaGxlbikpO1xufVxuXG4vL1Byb3ZpZGVzOiBibGFrZTJfanNfZm9yX3dhc21fdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl91cGRhdGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWYpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmX2pzb29fc3RyaW5nLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV91cGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZSwgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGJ1Zik7XG4gIHJldHVybiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWZfanNvb19zdHJpbmcsIG9mcywgbGVuKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsIHRvcmVhZCkge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYgKHRvcmVhZCA8IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCwgYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhcbiAgICAgICAgY2hhbmlkLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIDAsXG4gICAgICAgIHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkLFxuICAgICAgKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsIGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHJldHVybiAoeCArIHkpIHwgMDtcbiAgfVxuICBmdW5jdGlvbiB4eChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLFxuICAgICAgYiA9IHdbMV0sXG4gICAgICBjID0gd1syXSxcbiAgICAgIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclswXSwgNywgMHhkNzZhYTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxXSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMl0sIDE3LCAweDI0MjA3MGRiKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzNdLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls0XSwgNywgMHhmNTdjMGZhZik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls1XSwgMTIsIDB4NDc4N2M2MmEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzddLCAyMiwgMHhmZDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls4XSwgNywgMHg2OTgwOThkOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls5XSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhmZmZmNWJiMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NWNkN2JlKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweGZkOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4YTY3OTQzOGUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OWI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA1LCAweGY2MWUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzZdLCA5LCAweGMwNDBiMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1ZTVhNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMF0sIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzVdLCA1LCAweGQ2MmYxMDVkKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweGQ4YTFlNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzRdLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcls5XSwgNSwgMHgyMWUxY2RlNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbM10sIDE0LCAweGY0ZDUwZDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzhdLCAyMCwgMHg0NTVhMTRlZCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4YTllM2U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMl0sIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbN10sIDE0LCAweDY3NmYwMmQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OGQyYTRjOGEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcls1XSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcls4XSwgMTEsIDB4ODc3MWY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweGZkZTUzODBjKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA0LCAweGE0YmVlYTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzRdLCAxMSwgMHg0YmRlY2ZhOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcls3XSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhiZWJmYmM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5YjdlYzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMF0sIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzNdLCAxNiwgMHhkNGVmMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcls2XSwgMjMsIDB4MDQ4ODFkMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbOV0sIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhlNmRiOTllNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFmYTI3Y2Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzJdLCAyMywgMHhjNGFjNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzBdLCA2LCAweGY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzddLCAxMCwgMHg0MzJhZmY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweGFiOTQyM2E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzVdLCAyMSwgMHhmYzkzYTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1YjU5YzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbM10sIDEwLCAweDhmMGNjYzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4ZmZlZmY0N2QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMV0sIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzhdLCA2LCAweDZmYTg3ZTRmKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE1LCAweGEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbNF0sIDYsIDB4Zjc1MzdlODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsyXSwgMTUsIDB4MmFkN2QyYmIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbOV0sIDIxLCAweGViODZkMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH07XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtcbiAgICBsZW46IDAsXG4gICAgdzogbmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSksXG4gICAgYjMyOiBiMzIsXG4gICAgYjg6IGI4LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbikge1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYgKGluX2J1Zikge1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYgKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCwgaW5wdXRfbGVuKSwgaW5fYnVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLCBtaXNzaW5nKSwgaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUgKGlucHV0X2xlbiA+PSA2NCkge1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLCBpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmIChpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsIGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpIHtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZisrO1xuICBpZiAoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IgKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNTY7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspIHtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MWZmZmZmZmY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweGZmO1xuICByZXR1cm4gdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LCBhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19kYXRhdmlld1xudmFyIGpzb29fZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuLy9SZXF1aXJlczoganNvb19kYXRhdmlld1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpIHtcbiAganNvb19kYXRhdmlldy5zZXRGbG9hdDY0KDAsIHgsIHRydWUpO1xuICB2YXIgbG8zMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICB2YXIgaGkzMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDQsIHRydWUpO1xuICB2YXIgbG8gPSBsbzMyICYgMHhmZmZmZmY7XG4gIHZhciBtaSA9IChsbzMyID4+PiAyNCkgfCAoKGhpMzIgPDwgOCkgJiAweGZmZmZmZik7XG4gIHZhciBoaSA9IChoaTMyID4+PiAxNikgJiAweGZmZmY7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCh4KSB7XG4gIGpzb29fZGF0YXZpZXcuc2V0RmxvYXQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHggPiAwID8gXCJpbmZpbml0eVwiIDogXCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSB4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPyAxIDogeCA+PSAwID8gMCA6IDE7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PT0gMCkge1xuICB9IGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSB7XG4gICAgICB4ICo9IDI7XG4gICAgICBleHAtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikge1xuICAgICAgeCAvPSAyO1xuICAgICAgZXhwKys7XG4gICAgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyBcIlwiIDogXCIrXCI7XG4gIHZhciBzaWduX3N0ciA9IFwiXCI7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9IFwiLVwiO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIDQzIC8qICcrJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIitcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyIC8qICcgJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIiBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLCBwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmIChwcmVjID49IDApIHtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHhfc3RyICs9IFwiLlwiICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsIFwiMFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHggKyAxICsgcHJlYztcbiAgICAgIGlmICh4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgXCIwXCIpO1xuICAgICAgZWxzZSB4X3N0ciA9IHhfc3RyLnNsaWNlKDAsIHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXG4gICAgc2lnbl9zdHIgKyBcIjB4XCIgKyB4X3N0ciArIFwicFwiICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoMCwgbG8gfCAobWkgPDwgMjQpLCB0cnVlKTtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoNCwgKG1pID4+PiA4KSB8IChoaSA8PCAxNiksIHRydWUpO1xuICByZXR1cm4ganNvb19kYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCh4LCB5KSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gTnVtYmVyLk5hTjtcbiAgaWYgKHggPT09IHkpIHJldHVybiB5O1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGlmICh5IDwgMCkgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NCk7XG4gICAgZWxzZSByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpO1xuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKHggPCB5ID09PSB4ID4gMCkgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSk7XG4gIGVsc2UgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSk7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2RhdGF2aWV3XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMoeCkge1xuICBqc29vX2RhdGF2aWV3LnNldFVpbnQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpID8gNCA6IDM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB2YXIgbmVnID0gMSAvIHggPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7XG4gICAgICBpID0gLWk7XG4gICAgICBmID0gLWY7XG4gICAgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKE51bWJlci5pc05hTih4KSkgcmV0dXJuIFswLCBOdW1iZXIuTmFOLCBOdW1iZXIuTmFOXTtcbiAgcmV0dXJuIFswLCAxIC8geCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0KHgsIGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7XG4gICAgICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0KHgpIHtcbiAgaWYgKHggPT09IDAgfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLXg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywgTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwgLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLXg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gIGlmICghTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0KHgsIHkpIHtcbiAgaWYgKHkgPT09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4geSA8IDAgPyAteCA6IHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuLy9BbGlhczogY2FtbF9zaWduYml0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4geCA8IDAgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cG0xKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC5wb3coMiwgeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMXAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZzIoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMTAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0KHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4geCAtIHkgPj0gMC41ID8geSArIDEgOiB5O1xuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiB5IC0geCA+PSAwLjUgPyB5IC0gMSA6IHk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguY2JydCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9XG4gICAgMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5KGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSBhaGkgKiBiaGkgLSBwICsgYWhpICogYmxvICsgYWxvICogYmhpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSBhIC0gKHMgLSB2KSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGp1c3QoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4XG4gICAgICA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKVxuICAgICAgOiB4O1xuICB9XG5cbiAgaWYgKHggPT09IDAgfHwgeSA9PT0gMCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiAoTWF0aC5hYnMoeHMgKiB5cykgKiA0KSAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgKCgoTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OKSAvIDQpICogRVBTSUxPTikgLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LCBkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gTnVtYmVyLnBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdChcIitcIilbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLCBlKTtcbiAgICAgICAgeCArPSBjYW1sX3N0cl9yZXBlYXQoZSwgXCIwXCIpO1xuICAgICAgICBpZiAoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyBcIi5cIiArIGNhbWxfc3RyX3JlcGVhdChkcCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH1cbiAgfVxuICB2YXIgcyxcbiAgICBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSBmLnByZWMgPCAwID8gNiA6IGYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IC14O1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkpIHtcbiAgICBzID0gXCJuYW5cIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBzID0gXCJpbmZcIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT09IFwiZVwiKVxuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgLSAxKSArIFwiMFwiICsgcy5zbGljZShpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcHJlYyA9IHByZWMgPyBwcmVjIDogMTtcbiAgICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICAgIHZhciBqID0gcy5pbmRleE9mKFwiZVwiKTtcbiAgICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IGogLSAxO1xuICAgICAgICAgIHdoaWxlIChzLmNoYXJBdChpKSA9PT0gXCIwXCIpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT09IFwiLlwiKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PT0gXCJlXCIpXG4gICAgICAgICAgICBzID0gcy5zbGljZSgwLCBpIC0gMSkgKyBcIjBcIiArIHMuc2xpY2UoaSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgICBpZiAoZXhwIDwgMCkge1xuICAgICAgICAgICAgcCAtPSBleHAgKyAxO1xuICAgICAgICAgICAgcyA9IHgudG9GaXhlZChwKTtcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKCgocyA9IHgudG9GaXhlZChwKSksIHMubGVuZ3RoID4gcHJlYyArIDEpKSBwLS07XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHMuY2hhckF0KGkpID09PSBcIjBcIikgaS0tO1xuICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09PSBcIi5cIikgaS0tO1xuICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHZhciByX2Zsb2F0ID0gL14gKlstK10/KD86XFxkKlxcLj9cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWy0rXT9cXGQrKT8kLztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHJlcyA9ICtzO1xuICAvL0Zhc3QgcGF0aFxuICBpZiAoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLCBcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKVxuICAgIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8kL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmIChtKSB7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCBcIlwiKTtcbiAgICB2YXIgbWFudGlzc2EgPSBOdW1iZXIucGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9ICgrbVs1XSB8fCAwKSAtIDQgKiBtMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkoeCwgeSkge1xuICBpZiAoeS5mdW4pIHtcbiAgICB4LmZ1biA9IHkuZnVuO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgeC5mdW4gPSB5O1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpID0geS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9WZXJzaW9uOiA8IDUuNFxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYoeCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pO1xuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2xhenlcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2xhenkoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlfbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15X2xhenkoZHVtbXksIG5ld3ZhbCkge1xuICBzd2l0Y2ggKGNhbWxfb2JqX3RhZyhuZXd2YWwpKSB7XG4gICAgY2FzZSAyNDY6IC8vIExhenlcbiAgICBjYXNlIDI0NDogLy8gRm9yY2luZ1xuICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkXG4gICAgICBjYW1sX3VwZGF0ZV9kdW1teShkdW1teSwgbmV3dmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkdW1teVsxXSA9IG5ld3ZhbDtcbiAgICAgIGR1bW15WzBdID0gMjUwO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHhbMF0gPT09IHhbMF0gPj4+IDApIHJldHVybiB4WzBdO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKSByZXR1cm4gMjUyO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSkgcmV0dXJuIDI1MjtcbiAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiAyNDc7XG4gIGVsc2UgaWYgKHg/LmNhbWxfY3VzdG9tKSByZXR1cm4gMjU1O1xuICBlbHNlIHJldHVybiAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcoeCwgdGFnKSB7XG4gIHhbMF0gPSB0YWc7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sodGFnLCBzaXplKSB7XG4gIC8vIFRPRE86IGZhaWwgZm9yIHZhbHVlIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBhcyBhbiBhcnJheVxuICB2YXIgbyA9IG5ldyBBcnJheShzaXplICsgMSk7XG4gIG9bMF0gPSB0YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLCB4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIiA/IHggOiB4LnNsaWNlKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUoeCwgcykge1xuICBpZiAocyA8PSAwIHx8IHMgKyAxID4geC5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9PSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkKGIsIHYpIHtcbiAgYlswXSA9IDI1MDtcbiAgYlsxXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LCBpLCBvbGQsIG4pIHtcbiAgaWYgKHhbaSArIDFdID09PSBvbGQpIHtcbiAgICB4W2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZChfeCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQodikge1xuICByZXR1cm4gWzI1MCwgdl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcblxuLy9Qcm92aWRlczogY2FtbF9vb19jYWNoZV9pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tZXRob2RfY2FjaGVcbmZ1bmN0aW9uIGNhbWxfb29fY2FjaGVfaWQoKSB7XG4gIHZhciBjYWNoZWlkID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoO1xuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IDA7XG4gIGNhY2hlaWQ7XG59XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NhY2hlZF9tZXRob2QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG5mdW5jdGlvbiBjYW1sX2dldF9jYWNoZWRfbWV0aG9kKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAobWV0aHNbb2ZzICsgNF0gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgKyAzXTtcbiAgfVxuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSAtIDM7XG4gIHJldHVybiBtZXRoc1tsaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2Qob2JqLCB0YWcpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gdGFnID09PSBtZXRoc1tsaSArIDFdID8gbWV0aHNbbGldIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQoYikge1xuICBiWzJdID0gY2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobywgaSkge1xuICByZXR1cm4gb1tpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobywgaSwgdikge1xuICByZXR1cm4gKG9baSArIDFdID0gdik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKF9vKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KF92LCBfb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLCBvLCBuKSB7XG4gIGlmIChiWzBdID09PSBvKSB7XG4gICAgYlswXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG8pICYmXG4gICAgb1swXSA9PT0gb1swXSA+Pj4gMCAmJlxuICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ0LCAyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDQsIDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiBjYW1sX29ial90YWcobykgPT09IDI1MCA/IG9bMV0gOiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gdCA9PT0gMjQ1ID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2lkZW50aWZpZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2N1c3RvbV9pZGVudGlmaWVyKG8pIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG8uY2FtbF9jdXN0b20gfHwgXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZ2NfcmFtcF91cFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF91cChmKSB7XG4gIHZhciBhID0gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xuICB2YXIgc3VzcGVuZGVkID0gMDtcbiAgcmV0dXJuIFswLCBhLCBzdXNwZW5kZWRdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2djX3JhbXBfZG93blxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF9kb3duKF9zdXNwZW5kZWRfY29sbGVjdGlvbl93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuIiwiLypcblRvIGRlYWwgd2l0aCBlZmZlY3RzLCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMgaW50dWl0aXZlbHkgY29tcG9zZWQgb2ZcbmEgc3RhY2sgb2YgZmliZXJzLiBFYWNoIGZpYmVyIGhhcyBhIGN1cnJlbnQgbG93LWxldmVsIGNvbnRpbnVhdGlvblxuKG9uZS1hcmd1bWVudCBKYXZhU2NyaXB0IGZ1bmN0aW9uKSwgYSBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kXG5hIHRyaXBsZSBvZiBoYW5kbGVycywgd2hpY2ggYXJlIGludm9rZWQgd2hlbiB0aGUgZmliZXIgdGVybWluYXRlc1xuKGVpdGhlciB3aXRoIGEgdmFsdWUgb3IgYW4gZXhjZXB0aW9uKSBvciB3aGVuIGFuIGVmZmVjdCBpcyBwZXJmb3JtZWQuXG5UaGUgbG93LWxldmVsIGNvbnRpbnVhdGlvbiBvZiB0aGUgdG9wbW9zdCBmaWJlciAod2hpY2ggaXMgY3VycmVudGx5XG5leGVjdXRpbmcpIGlzIHBhc3NlZCBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGFzIGFuIGFkZGl0aW9uYWxcbmFyZ3VtZW50LiBJdHMgc3RhY2sgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIGlzIHN0b3JlZCBpblxuW2NhbWxfY3VycmVudF9zdGFjay54XS5cbkV4Y2VwdGlvbiBoYW5kbGVycyBhcmUgcHVzaGVkIGludG8gdGhpcyBzdGFja1xud2hlbiBlbnRlcmluZyBhIFt0cnkgLi4uIHdpdGggLi4uXSBhbmQgcG9wcGVkIG9uIGV4aXQuXG5IYW5kbGVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suaF1cbmFuZCB0aGUgcmVtYWluaW5nIGZpYmVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suZV0uXG5UbyBpbnN0YWxsIGFuIGVmZmVjdCBoYW5kbGVyLCB3ZSBwdXNoIGEgbmV3IGZpYmVyIGludG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LlxuXG5XZSBoYXZlIGJhc2ljYWxseSB0aGUgZm9sbG93aW5nIHR5cGUgZm9yIHJlaWZpZWQgY29udGludWF0aW9ucyAodHlwZVxuW2NvbnRpbnVhdGlvbl0gaW4gbW9kdWxlIFtFZmZlY3RdIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTpcblxuICB0eXBlICgnYSwgJ2IpIGNvbnRpbnVhdGlvbiA9ICgnYSwgJ2IpIHN0YWNrIHJlZlxuXG4gIGFuZCAoXywgXykgc3RhY2sgPVxuICAgICAgQ29ucyA6ICgnYiAtPiB1bml0KSAqICAgICAgICAgICAgICgqIGxvdy1sZXZlbCBjb250aW51YXRpb24gKilcbiAgICAgICAgICAgICAoZXhuIC0+IHVuaXQpIGxpc3QgKiAgICAgICAoKiBleGNlcHRpb24gaGFuZGxlcnMgKilcbiAgICAgICAgICAgICAoJ2IsICdjKSBoYW5kbGVyICpcbiAgICAgICAgICAgICAoJ2EsICdiKSBzdGFja1xuICAgICAgICAgICAgIC0+ICgnYSwgJ2MpIHN0YWNrXG4gICAgfCBFbXB0eSA6ICgnYSwgJ2EpIHN0YWNrXG5cbiAgYW5kICgnYSwnYikgaGFuZGxlciA9ICAgKCogQXMgaW4gbW9kdWxlIEVmZmVjdCBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG4gICAgeyByZXRjOiAnYSAtPiAnYjtcbiAgICAgIGV4bmM6IGV4biAtPiAnYjtcbiAgICAgIGVmZmM6ICdjLidjIEVmZmVjdC50IC0+ICgoJ2MsJ2IpIGNvbnRpbnVhdGlvbiAtPiAnYikgb3B0aW9uIH1cblxuQ29udGludWF0aW9ucyBhcmUgb25lLXNob3QuIEEgY29udGludWF0aW9uIFtyZWYgRW1wdHldIGhhcyBhbHJlYWR5XG5iZWVuIHJlc3VtZWQuXG5cbkEgY29udGludWF0aW9uIGlzIGJhc2ljYWxseSBjb21wb3NlZCBvZiBhIGxpc3Qgb2YgZmliZXJzLCB3aGljaCBlYWNoXG5oYXMgaXRzIGxvdy1sZXZlbCBjb250aW51YXRpb24sIGl0cyBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kIGFcbnRyaXBsZSBvZiBoYW5kbGVycyB0byBkZWFsIHdpdGggd2hlbiB0aGUgZmliZXIgdGVybWluYXRlcyBvciBhblxuZWZmZWN0IGlzIHBlcmZvcm1lZC4gV2hlbiByZXN1bWluZyBhIGNvbnRpbnVhdGlvbiwgdGhlIGlubmVybW9zdCBmaWJlclxuaXMgcmVzdW1lZCBmaXJzdC5cblxuVGhlIGhhbmRsZXJzIGFyZSBDUFMtdHJhbnNmb3JtZWQgZnVuY3Rpb25zOiB0aGV5IGFjdHVhbGx5IHRha2UgYW5cbmFkZGl0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjdXJyZW50IGxvdy1sZXZlbCBjb250aW51YXRpb24uXG4qL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vIFRoaXMgaGFzIHRoZSBzaGFwZSB7aywgeCwgaCwgZX0gd2hlcmVcbi8vIC0gaCBpcyBhIHRyaXBsZSBvZiBoYW5kbGVycyAoc2VlIGVmZmVjdC5tbClcbi8vIC0gayBpcyB0aGUgbG93IGxldmVsIGNvbnRpbnVhdGlvblxuLy8gLSB4IGlzIHRoZSBleGNlcHRpb24gc3RhY2tcbi8vIC0gZSBpcyB0aGUgZmliZXIgc3RhY2sgb2YgdGhlIHBhcmVudCBmaWJlci5cbnZhciBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9wdXNoX3RyYXBcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9zdGFja1xuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9wdXNoX3RyYXAoaGFuZGxlcikge1xuICBjYW1sX2N1cnJlbnRfc3RhY2sueCA9IHsgaDogaGFuZGxlciwgdDogY2FtbF9jdXJyZW50X3N0YWNrLnggfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3BfdHJhcFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X3N0YWNrXG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX3BvcF90cmFwKCkge1xuICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KVxuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgdGhyb3cgeDtcbiAgICB9O1xuICB2YXIgaCA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfdW5oYW5kbGVkXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3VuaGFuZGxlZChlZmYpIHtcbiAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICB0aHJvdyBleG47XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9yZXN1bWVfc3RhY2tcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2VfY29uc3RhbnRcbi8vUmVxdWlyZXM6IGNhbWxfcG9wX2ZpYmVyLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgaykge1xuICBpZiAoIXN0YWNrKVxuICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoXG4gICAgICBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LkNvbnRpbnVhdGlvbl9hbHJlYWR5X3Jlc3VtZWRcIiksXG4gICAgKTtcbiAgaWYgKGxhc3QgPT09IDApIHtcbiAgICBsYXN0ID0gc3RhY2s7XG4gICAgLy8gUHJlIE9DYW1sIDUuMiwgbGFzdCB3YXMgbm90IHBvcHVsYXRlZC5cbiAgICB3aGlsZSAobGFzdC5lICE9PSAwKSBsYXN0ID0gbGFzdC5lO1xuICB9XG4gIGNhbWxfY3VycmVudF9zdGFjay5rID0gaztcbiAgbGFzdC5lID0gY2FtbF9jdXJyZW50X3N0YWNrO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIHN0YWNrLms7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9wX2ZpYmVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3BvcF9maWJlcigpIHtcbiAgLy8gTW92ZSB0byB0aGUgcGFyZW50IGZpYmVyLCByZXR1cm5pbmcgdGhlIHBhcmVudCdzIGxvdy1sZXZlbCBjb250aW51YXRpb25cbiAgdmFyIGMgPSBjYW1sX2N1cnJlbnRfc3RhY2suZTtcbiAgY2FtbF9jdXJyZW50X3N0YWNrLmUgPSAwO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBjO1xuICByZXR1cm4gYy5rO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfZnJlc2hfb29faWRcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKSB7XG4gIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgaWYgKGV4bikgZXhuID0gWzAsIGV4biwgZWZmXTtcbiAgZWxzZSB7XG4gICAgZXhuID0gW1xuICAgICAgMjQ4LFxuICAgICAgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksXG4gICAgICBjYW1sX2ZyZXNoX29vX2lkKDApLFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9wZXJmb3JtX2VmZmVjdChlZmYsIGswKSB7XG4gIGlmIChjYW1sX2N1cnJlbnRfc3RhY2suZSA9PT0gMCkge1xuICAgIHZhciBleG4gPSBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKTtcbiAgICB0aHJvdyBleG47XG4gIH1cbiAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0IGhhbmRsZXJcbiAgdmFyIGhhbmRsZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFszXTtcbiAgdmFyIGxhc3RfZmliZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2s7XG4gIGxhc3RfZmliZXIuayA9IGswO1xuICB2YXIgY29udCA9IFsyNDUgLypjb250aW51YXRpb24qLywgbGFzdF9maWJlciwgbGFzdF9maWJlcl07XG4gIC8vIE1vdmUgdG8gcGFyZW50IGZpYmVyIGFuZCBleGVjdXRlIHRoZSBlZmZlY3QgaGFuZGxlciB0aGVyZVxuICAvLyBUaGUgaGFuZGxlciBpcyBkZWZpbmVkIGluIFN0ZGxpYi5FZmZlY3QsIHNvIHdlIGtub3cgdGhhdCB0aGUgYXJpdHkgbWF0Y2hlc1xuICB2YXIgazEgPSBjYW1sX3BvcF9maWJlcigpO1xuICByZXR1cm4gY2FtbF9zdGFja19jaGVja19kZXB0aCgpXG4gICAgPyBjYW1sX2dldF9jcHNfZnVuKGhhbmRsZXIpKGVmZiwgY29udCwgbGFzdF9maWJlciwgazEpXG4gICAgOiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGhhbmRsZXIsIFtlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVwZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXBlcmZvcm1fZWZmZWN0KGVmZiwgY29udCwgbGFzdCwgazApIHtcbiAgaWYgKGNhbWxfY3VycmVudF9zdGFjay5lID09PSAwKSB7XG4gICAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICAgIHZhciBzdGFjayA9IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KTtcbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgazApO1xuICAgIHRocm93IGV4bjtcbiAgfVxuICAvLyBHZXQgY3VycmVudCBlZmZlY3QgaGFuZGxlclxuICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay5oWzNdO1xuICB2YXIgbGFzdF9maWJlciA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgbGFzdF9maWJlci5rID0gazA7XG4gIGxhc3QuZSA9IGxhc3RfZmliZXI7XG4gIGNvbnRbMl0gPSBsYXN0X2ZpYmVyO1xuICAvLyBNb3ZlIHRvIHBhcmVudCBmaWJlciBhbmQgZXhlY3V0ZSB0aGUgZWZmZWN0IGhhbmRsZXIgdGhlcmVcbiAgLy8gVGhlIGhhbmRsZXIgaXMgZGVmaW5lZCBpbiBTdGRsaWIuRWZmZWN0LCBzbyB3ZSBrbm93IHRoYXQgdGhlIGFyaXR5IG1hdGNoZXNcbiAgdmFyIGsxID0gY2FtbF9wb3BfZmliZXIoKTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9nZXRfY3BzX2Z1bihoYW5kbGVyKShlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxKVxuICAgIDogY2FtbF90cmFtcG9saW5lX3JldHVybihoYW5kbGVyLCBbZWZmLCBjb250LCBsYXN0X2ZpYmVyLCBrMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2dldF9jcHNfZnVuKGYpIHtcbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2Nwc19mdW5cbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfY3BzX2Z1bihmKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGdldCB0aGUgZWZmZWN0IGhhbmRsZXIuIElmIHRoZVxuICAvLyBlZmZlY3QgaGFuZGxlciBoYXMgbm8gQ1BTIGZ1bmN0aW9uLCB3ZSBrbm93IHRoYXQgd2UgY2FuIGRpcmVjdGx5XG4gIC8vIGNhbGwgdGhlIGRpcmVjdCB2ZXJzaW9uIGluc3RlYWQuXG4gIHJldHVybiBmLmNwcyA/IGYuY3BzIDogZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfY2FsbF9nZW4sIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5fY3BzLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2NhbGwoZiwgeCkge1xuICB2YXIgYXJncyA9IFt4LCBjYW1sX3BvcF9maWJlcigpXTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9jYWxsX2dlbl9jcHMoZiwgYXJncylcbiAgICA6IGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZiwgYXJncywgMCk7XG59XG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2h2YWwoeCkge1xuICAvLyBDYWxsIFtodl0gaW4gdGhlIHBhcmVudCBmaWJlclxuICB2YXIgZiA9IGNhbWxfY3VycmVudF9zdGFjay5oWzFdO1xuICByZXR1cm4gY2FtbF9hbGxvY19zdGFja19jYWxsKGYsIHgpO1xufVxuZnVuY3Rpb24gY2FtbF9hbGxvY19zdGFja19oZXhuKGUpIHtcbiAgLy8gQ2FsbCBbaHhdIGluIHRoZSBwYXJlbnQgZmliZXJcbiAgdmFyIGYgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFsyXTtcbiAgcmV0dXJuIGNhbWxfYWxsb2Nfc3RhY2tfY2FsbChmLCBlKTtcbn1cbmZ1bmN0aW9uIGNhbWxfYWxsb2Nfc3RhY2soaHYsIGh4LCBoZikge1xuICB2YXIgaGFuZGxlcnMgPSBbMCwgaHYsIGh4LCBoZl07XG4gIHJldHVybiB7XG4gICAgazogY2FtbF9hbGxvY19zdGFja19odmFsLFxuICAgIHg6IHsgaDogY2FtbF9hbGxvY19zdGFja19oZXhuLCB0OiAwIH0sXG4gICAgaDogaGFuZGxlcnMsXG4gICAgZTogMCxcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9JZjogIWVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrKF9odiwgX2h4LCBfaGYpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KSB7XG4gIHZhciBzdGFjayA9IGNvbnRbMV07XG4gIGNvbnRbMV0gPSAwO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGNcbi8vUmVxdWlyZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGMoXG4gIGNvbnQsXG4gIGh2YWwsXG4gIGhleG4sXG4gIGhlZmYsXG4pIHtcbiAgdmFyIHN0YWNrID0gY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjKGNvbnQpO1xuICBpZiAoc3RhY2sgPT09IDApIHJldHVybiBzdGFjaztcbiAgdmFyIGxhc3QgPSBjb250WzJdO1xuICBsYXN0LmhbMV0gPSBodmFsO1xuICBsYXN0LmhbMl0gPSBoZXhuO1xuICBsYXN0LmhbM10gPSBoZWZmO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NvbnRpbnVhdGlvbl9jYWxsc3RhY2tcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9jb250aW51YXRpb25fY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9uZXdcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIHsgY29uZGl0aW9uOiAxIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3dhaXRcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl93YWl0KF90LCBfbXV0ZXh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3Rcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3QoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbChfdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19lZmZlY3Rfbm90X3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy8hSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBqc29vX2VmZmVjdF9ub3Rfc3VwcG9ydGVkKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiRWZmZWN0IGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3VtZVxuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuX2NwcywgY2FtbF9jdXJyZW50X3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFja1xuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXN1bWUoZiwgYXJnLCBzdGFjaywgbGFzdCkge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgayA9IGNhbWxfcmVzdW1lX3N0YWNrKHN0YWNrLCBsYXN0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLyogTm90ZTogZiBpcyBub3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24gYnV0IGEgKGRpcmVjdC1zdHlsZSwgQ1BTKSBjbG9zdXJlIHBhaXIgKi9cbiAgICB2YXIgcmVzID0geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBbYXJnLCBrXSwgam9vX2RpcmVjdDogMCB9O1xuICAgIGRvIHtcbiAgICAgIC8qIEF2b2lkcyB0cmFtcG9saW5pbmcgdG9vIG9mdGVuIHdoaWxlIHN0aWxsIGF2b2lkaW5nIHN0YWNrIG92ZXJmbG93LiBTZWVcbiAgICAgICAgIFtjYW1sX2NhbGxiYWNrXS4gKi9cbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb29fZGlyZWN0XG4gICAgICAgICAgPyByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncylcbiAgICAgICAgICA6IGNhbWxfY2FsbF9nZW5fY3BzKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgIGpvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldLFxuICAgICAgICAgIGpvb19kaXJlY3Q6IDEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVzPy5qb29fYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Nwc19jbG9zdXJlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfY3BzX2Nsb3N1cmUoZGlyZWN0X2YsIGNwc19mKSB7XG4gIGRpcmVjdF9mLmNwcyA9IGNwc19mO1xuICByZXR1cm4gZGlyZWN0X2Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXNzdW1lX25vX3BlcmZvcm1cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vSWY6ICFkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfYXNzdW1lX25vX3BlcmZvcm0oZikge1xuICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICBhMlswXSA9IDA7XG4gIGZvciAodmFyIGkyID0gMSwgaTEgPSBpICsgMTsgaTIgPD0gbGVuOyBpMisrLCBpMSsrKSB7XG4gICAgYTJbaTJdID0gYVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfc3ViIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfc3ViXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfc3ViKGEsIGksIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9zdWIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9zdWJcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfc3ViKGEsIGksIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9zdWIoYSwgaSwgbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCxcbiAgICBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMSArIGwyIC0gMTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsXG4gICAgaiA9IDE7XG4gIGZvciAoOyBpIDwgbDE7IGkrKykgYVtpXSA9IGExW2ldO1xuICBmb3IgKDsgaSA8IGw7IGkrKywgaisrKSBhW2ldID0gYTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYXBwZW5kIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYXBwZW5kXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9hcHBlbmQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9hcHBlbmRcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICByZXR1cm4gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ibGl0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9BbGlhczogY2FtbF9hcnJheV9zZXRfZmxvYXRcbi8vQWxpYXM6IGNhbWxfZmxvYXRhcnJheV9zZXRcbi8vQWxpYXM6IGNhbWxfYXJyYXlfc2V0X2FkZHJcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0KGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCArIDFdID0gbmV3dmFsO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2FycmF5X2dldF9mbG9hdFxuLy9BbGlhczogY2FtbF9mbG9hdGFycmF5X2dldFxuLy9BbGlhczogY2FtbF9hcnJheV9nZXRfYWRkclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXggKyAxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnJheVtvZnMgKyBpICsgMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZChhcnJheSwgb2ZzLCBsZW4sIHYpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2NoZWNrX2JvdW5kX2dlblxuLy9BbGlhczogY2FtbF9jaGVja19ib3VuZF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X21ha2UgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDQpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfbWFrZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X21ha2UobGVuLCBpbml0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NyZWF0ZV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9hcnJheV9jcmVhdGVfZmxvYXQobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbikge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2UgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2VfdW5ib3hlZCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0YXJyYXlfbWFrZVxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlX3VuYm94ZWQobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2Zsb2F0YXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X21ha2Vcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZShsZW4sIGluaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDVcbnZhciBjYW1sX2RvbWFpbl9kbHMgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfc2V0KGEpIHtcbiAgY2FtbF9kb21haW5fZGxzID0gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldFxuLy9SZXF1aXJlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldChvbGQsIG4pIHtcbiAgaWYgKGNhbWxfZG9tYWluX2RscyAhPT0gb2xkKSByZXR1cm4gMDtcbiAgY2FtbF9kb21haW5fZGxzID0gbjtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfZ2V0KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9kbHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2xvYWRcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9hdG9taWNfbG9hZChyZWYpIHtcbiAgcmV0dXJuIHJlZlsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hdG9taWNfbG9hZF9maWVsZFxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2xvYWRfZmllbGQoYiwgaSkge1xuICByZXR1cm4gYltpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2Nhc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXMocmVmLCBvLCBuKSB7XG4gIGlmIChyZWZbMV0gPT09IG8pIHtcbiAgICByZWZbMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19jYXNfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXNfZmllbGQoYiwgaSwgbywgbikge1xuICBpZiAoYltpICsgMV0gPT09IG8pIHtcbiAgICBiW2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2ZldGNoX2FkZFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGQocmVmLCBpKSB7XG4gIHZhciBvbGQgPSByZWZbMV07XG4gIHJlZlsxXSArPSBpO1xuICByZXR1cm4gb2xkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGQoYiwgaSwgbikge1xuICB2YXIgb2xkID0gYltpICsgMV07XG4gIGJbaSArIDFdICs9IG47XG4gIHJldHVybiBvbGQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2V4Y2hhbmdlKHJlZiwgdikge1xuICB2YXIgciA9IHJlZlsxXTtcbiAgcmVmWzFdID0gdjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlX2ZpZWxkXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9hdG9taWNfZXhjaGFuZ2VfZmllbGQoYiwgaSwgdikge1xuICB2YXIgciA9IGJbaSArIDFdO1xuICBiW2kgKyAxXSA9IHY7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19tYWtlX2NvbnRlbmRlZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX21ha2VfY29udGVuZGVkKGEpIHtcbiAgcmV0dXJuIFswLCBhXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuXG4vL1ZlcnNpb246ID49IDUuMCwgPCA1LjJcbnZhciBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fID0gWzBdO1xuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuKF91bml0KSB7XG4gIHJldHVybiBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudChfdW5pdCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faW5kZXhcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMDNcbmZ1bmN0aW9uIGNhbWxfbWxfZG9tYWluX2luZGV4KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9pZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5faWRcbi8vVmVyc2lvbjogPj0gNVxudmFyIGNhbWxfZG9tYWluX2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4ID0gMTtcbmZ1bmN0aW9uIGNhbWxfZG9tYWluX3NwYXduKGYsIHRlcm1fc3luYykge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbiAgY2FtbF9kb21haW5faWQgPSBvbGQ7XG4gIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHRlcm1fc3luY1syXSk7XG4gIC8vVE9ETzogZml4IGV4biBjYXNlXG4gIHRlcm1fc3luY1sxXSA9IFswLCBbMCwgcmVzXV07XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG52YXIgY2FtbF9kb21haW5fbGF0ZXN0X2lkeCA9IDE7XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9zcGF3bihmLCBtdXRleCkge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIF9yZXMgPSBjYW1sX2NhbGxiYWNrKGYsIFswXSk7XG4gIGNhbWxfZG9tYWluX2lkID0gb2xkO1xuICBjYW1sX21sX211dGV4X3VubG9jayhtdXRleCk7XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faWRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5faWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfZG9tYWluX2lkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fY3B1X3JlbGF4KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX2ludDMyX2Zvcm1hdFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZm9ybWF0XG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT09IFwiJWRcIilcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiICsgaSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgaWYgKGYuc2lnbmVkY29udikge1xuICAgICAgZi5zaWduID0gLTE7XG4gICAgICBpID0gLWk7XG4gICAgfSBlbHNlIGkgPj4+PSAwO1xuICB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0KG4sIFwiMFwiKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Uocykge1xuICB2YXIgaSA9IDAsXG4gICAgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLFxuICAgIGJhc2UgPSAxMCxcbiAgICBzaWduID0gMSxcbiAgICBzaWduZWRuZXNzID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkpIHtcbiAgICAgIGNhc2UgNDU6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgICAgY2FzZSAxMjA6XG4gICAgICBjYXNlIDg4OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTE6XG4gICAgICBjYXNlIDc5OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDk4OlxuICAgICAgY2FzZSA2NjpcbiAgICAgICAgc2lnbmVkbmVzcyA9IDA7XG4gICAgICAgIGJhc2UgPSAyO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTc6XG4gICAgICBjYXNlIDg1OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZSwgc2lnbmVkbmVzc107XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IGNhbWxfaW50MzJfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlKHMpO1xuICB2YXIgaSA9IHJbMF0sXG4gICAgc2lnbiA9IHJbMV0sXG4gICAgYmFzZSA9IHJbMl0sXG4gICAgc2lnbmVkbmVzcyA9IHJbM107XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSBpIDwgbGVuID8gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA6IDA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmIChzaWduZWRuZXNzICYmIChyZXMgfCAwKSAhPT0gcmVzKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfbXVsXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9tdWxcbi8vQWxpYXM6ICVpbnRfbXVsXG5mdW5jdGlvbiBjYW1sX211bChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX2RpdlxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZGl2XG4vL0FsaWFzOiAlaW50X2RpdlxuZnVuY3Rpb24gY2FtbF9kaXYoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4gKHggLyB5KSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX21vZFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfbW9kXG4vL0FsaWFzOiAlaW50X21vZFxuZnVuY3Rpb24gY2FtbF9tb2QoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4geCAlIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNiBjb25zdFxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoeCAmIDB4MDBmZikgPDwgOCkgfCAoKHggJiAweGZmMDApID4+IDgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwIGNvbnN0XG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoXG4gICAgKCh4ICYgMHgwMDAwMDBmZikgPDwgMjQpIHxcbiAgICAoKHggJiAweDAwMDBmZjAwKSA8PCA4KSB8XG4gICAgKCh4ICYgMHgwMGZmMDAwMCkgPj4+IDgpIHxcbiAgICAoKHggJiAweGZmMDAwMDAwKSA+Pj4gMjQpXG4gICk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsIGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTEgfCAwKTtcbiAgZCA9IChkIDw8IDE1KSB8IChkID4+PiAoMzIgLSAxNSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9IChoIDw8IDEzKSB8IChoID4+PiAoMzIgLSAxMykpOyAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpIHwgMCkgKyAoMHhlNjU0NmI2NCB8IDApKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsKGgsIDB4ODVlYmNhNmIgfCAwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsKGgsIDB4YzJiMmFlMzUgfCAwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0KGhhc2gsIHYwKSB7XG4gIHZhciBpNjQgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodjApO1xuICB2YXIgbCA9IGNhbWxfaW50NjRfbG8zMihpNjQpO1xuICB2YXIgaCA9IGNhbWxfaW50NjRfaGkzMihpNjQpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGggJiAweDdmZjAwMDAwKSA9PT0gMHg3ZmYwMDAwMCAmJiAobCB8IChoICYgMHhmZmZmZikpICE9PSAwKSB7XG4gICAgaCA9IDB4N2ZmMDAwMDA7XG4gICAgbCA9IDB4MDAwMDAwMDE7XG4gIH0gZWxzZSBpZiAoaCA9PT0gKDB4ODAwMDAwMDAgfCAwKSAmJiBsID09PSAwKSB7XG4gICAgLyogTm9ybWFsaXplIC0wIGludG8gKzAgKi9cbiAgICAvLyBUaGlzIGNvZGUgcGF0aCBpcyBub3QgdXNlZCBieSBjYW1sX2hhc2ggYmVjYXVzZSAwIGFuZCAtMCBsb29rXG4gICAgLy8gbGlrZSBpbnRlZ2Vyc1xuICAgIGggPSAwO1xuICB9XG4gIGhhc2ggPSBjYW1sX2hhc2hfbWl4X2ludChoYXNoLCBsKTtcbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGgpO1xuICByZXR1cm4gaGFzaDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCxcbiAgICBpLFxuICAgIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9XG4gICAgICBzLmNoYXJDb2RlQXQoaSkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICAgIGNhc2UgMzpcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2O1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgY2FzZSAyOlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgdyB8PSBzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsXG4gICAgaSxcbiAgICB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldIHwgKHNbaSArIDFdIDw8IDgpIHwgKHNbaSArIDJdIDw8IDE2KSB8IChzW2kgKyAzXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgICBjYXNlIDM6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3ID0gc1tpICsgMl0gPDwgMTY7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDI6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3IHw9IHNbaSArIDFdIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHNbaV07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpO1xuICAvKiBBUlJBWSAqLyBlbHNlIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07XG4gIHJkID0gMDtcbiAgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2Py5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYgKFxuICAgICAgICBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiZcbiAgICAgICAgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2hcbiAgICAgICkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGhoKTtcbiAgICAgICAgbnVtLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHZbMF0gPT09ICh2WzBdIHwgMCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgICBjYXNlIDI0ODpcbiAgICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgICAgbnVtLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUwOlxuICAgICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHYpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodiB8IDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdiArIHYgKyAxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCB2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNmZmZmZmZmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdikge1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzZmZmZmZmZjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSkge1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpXG4gICAgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSlcbiAgICByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhWzBdID09PSBhWzBdID4+PiAwICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuIHRhZyA9PT0gMjU0ID8gMCA6IHRhZztcbiAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcilcbiAgICByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYT8uY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhPy5jb21wYXJlKVxuICAgIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpIHtcbiAgcmV0dXJuIChcbiAgICBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmVcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYgKGNvbXApIHtcbiAgICB2YXIgeCA9IHN3YXAgPiAwID8gY29tcChjdXN0b20sIG51bSwgdG90YWwpIDogY29tcChudW0sIGN1c3RvbSwgdG90YWwpO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNOYU4oeCkpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt4KSkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZiAoKHggfCAwKSAhPT0gMCkgcmV0dXJuIHggfCAwOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvciAoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZiAodGFnX2EgPT09IDI1MCkge1xuICAgICAgICBhID0gYVsxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYgKHRhZ19iID09PSAyNTApIHtcbiAgICAgICAgYiA9IGJbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmICh0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYgKHRhZ19hID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19iID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ19iID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19hID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWdfYSA8IHRhZ19iID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgLy8gdGFnX2EgPSB0YWdfYlxuICAgICAgc3dpdGNoICh0YWdfYSkge1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pIHwgMDtcbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYikgfCAwO1xuICAgICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGluIGNhbWxfY29tcGFyZV92YWxfdGFnXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgICAgICAgXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgICBpZiAoY29tcCAhPT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jYW1sX2N1c3RvbSA8IGIuY2FtbF9jdXN0b20gPyAtMSA6IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgICAgdmFyIHggPSBjb21wKGEsIGIsIHRvdGFsKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCA/IC0xIDogeDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09ICh4IHwgMCkpIHtcbiAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHggfCAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLCB0b3RhbCk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSkge1xuICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAtMSA6IHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4ICE9PSAoeCB8IDApKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4IHwgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgICBhID0gK2E7XG4gICAgICAgICAgYiA9ICtiO1xuICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYSkpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYikpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBMYXp5X3RhZyBvciBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfY29tcGFyZVxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZShhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiAxO1xufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA9PT0gMCk7XG59XG5cbi8vIE1heSByYWlzZVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCh4LCB5KSB7XG4gIHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCwgeSwgZmFsc2UpICE9PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA+PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPiAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA8PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPCAwKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4XG4vL1ZlcnNpb246ID49IDUuMVxudmFyIGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4ID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3JlZ2lzdGVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9ldmVudF9pbmRleFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZWdpc3RlcihldmVudF9uYW1lLCBldmVudF90YWcsIGV2ZW50X3R5cGUpIHtcbiAgY2FtbF9jdXN0b21fZXZlbnRfaW5kZXggKz0gMTtcbiAgcmV0dXJuIFswLCBjYW1sX2N1c3RvbV9ldmVudF9pbmRleCwgZXZlbnRfbmFtZSwgZXZlbnRfdHlwZSwgZXZlbnRfdGFnXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlKF9ldmVudCwgX2V2ZW50X2NvbnRlbnQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZXNvbHZlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3Jlc29sdmUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3N0YXJ0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfc3RhcnRcbi8vVmVyc2lvbjogPj0gNS4wLCA8IDUuMlxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcGF1c2Vcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19wYXVzZVxuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19yZXN1bWVcbi8vVmVyc2lvbjogPj01LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3Jlc3VtZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcmVzdW1lXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19yZXN1bWUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3IoX3RhcmdldCkge1xuICByZXR1cm4ge307XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfZnJlZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2ZyZWVfY3Vyc29yKF9jdXJzb3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfcmVhZF9wb2xsXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19yZWFkX3BvbGwoX2N1cnNvciwgX2NhbGxiYWNrcywgX251bSkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoIGNvbnN0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogenN0ZF9kZWNvbXByZXNzXG4vL1ZlcnNpb246ID49IDUuMVxudmFyIHpzdGRfZGVjb21wcmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG4gIHZhciBhYiA9IEFycmF5QnVmZmVyLFxuICAgIHU4ID0gVWludDhBcnJheSxcbiAgICB1MTYgPSBVaW50MTZBcnJheSxcbiAgICBpMTYgPSBJbnQxNkFycmF5LFxuICAgIGkzMiA9IEludDMyQXJyYXk7XG4gIHZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuc2xpY2UpIHJldHVybiB1OC5wcm90b3R5cGUuc2xpY2UuY2FsbCh2LCBzLCBlKTtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKSBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aCkgZSA9IHYubGVuZ3RoO1xuICAgIHZhciBuID0gbmV3IHU4KGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbiAgfTtcbiAgdmFyIGZpbGwgPSBmdW5jdGlvbiAodiwgbiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuZmlsbCkgcmV0dXJuIHU4LnByb3RvdHlwZS5maWxsLmNhbGwodiwgbiwgcywgZSk7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMCkgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpIGUgPSB2Lmxlbmd0aDtcbiAgICBmb3IgKDsgcyA8IGU7ICsrcykgdltzXSA9IG47XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHZhciBjcHcgPSBmdW5jdGlvbiAodiwgdCwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuY29weVdpdGhpbilcbiAgICAgIHJldHVybiB1OC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKHYsIHQsIHMsIGUpO1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKSBlID0gdi5sZW5ndGg7XG4gICAgd2hpbGUgKHMgPCBlKSB7XG4gICAgICB2W3QrK10gPSB2W3MrK107XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICAgKi9cbiAgLy8gZXJyb3IgY29kZXNcbiAgdmFyIGVjID0gW1xuICAgIFwiaW52YWxpZCB6c3RkIGRhdGFcIixcbiAgICBcIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQilcIixcbiAgICBcImludmFsaWQgYmxvY2sgdHlwZVwiLFxuICAgIFwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoXCIsXG4gICAgXCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixcbiAgICBcInVuZXhwZWN0ZWQgRU9GXCIsXG4gIF07XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoIW50KSB0aHJvdyBlO1xuICAgIHJldHVybiBlO1xuICB9O1xuICB2YXIgcmIgPSBmdW5jdGlvbiAoZCwgYiwgbikge1xuICAgIHZhciBpID0gMCxcbiAgICAgIG8gPSAwO1xuICAgIGZvciAoOyBpIDwgbjsgKytpKSBvIHw9IGRbYisrXSA8PCAoaSA8PCAzKTtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgdmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7XG4gIH07XG4gIC8vIHJlYWQgWnN0YW5kYXJkIGZyYW1lIGhlYWRlclxuICB2YXIgcnpmaCA9IGZ1bmN0aW9uIChkYXQsIHcpIHtcbiAgICB2YXIgbjMgPSBkYXRbMF0gfCAoZGF0WzFdIDw8IDgpIHwgKGRhdFsyXSA8PCAxNik7XG4gICAgaWYgKG4zID09PSAweDJmYjUyOCAmJiBkYXRbM10gPT09IDI1Mykge1xuICAgICAgLy8gWnN0YW5kYXJkXG4gICAgICB2YXIgZmxnID0gZGF0WzRdO1xuICAgICAgLy8gICAgc2luZ2xlIHNlZ21lbnQgICAgICAgY2hlY2tzdW0gICAgICAgICAgICAgZGljdCBmbGFnICAgICBmcmFtZSBjb250ZW50IGZsYWdcbiAgICAgIHZhciBzcyA9IChmbGcgPj4gNSkgJiAxLFxuICAgICAgICBjYyA9IChmbGcgPj4gMikgJiAxLFxuICAgICAgICBkZiA9IGZsZyAmIDMsXG4gICAgICAgIGZjZiA9IGZsZyA+PiA2O1xuICAgICAgaWYgKGZsZyAmIDgpIGVycigwKTtcbiAgICAgIC8vIGJ5dGVcbiAgICAgIHZhciBidCA9IDYgLSBzcztcbiAgICAgIC8vIGRpY3QgYnl0ZXNcbiAgICAgIHZhciBkYiA9IGRmID09PSAzID8gNCA6IGRmO1xuICAgICAgLy8gZGljdGlvbmFyeSBpZFxuICAgICAgdmFyIGRpID0gcmIoZGF0LCBidCwgZGIpO1xuICAgICAgYnQgKz0gZGI7XG4gICAgICAvLyBmcmFtZSBzaXplIGJ5dGVzXG4gICAgICB2YXIgZnNiID0gZmNmID8gMSA8PCBmY2YgOiBzcztcbiAgICAgIC8vIGZyYW1lIHNvdXJjZSBzaXplXG4gICAgICB2YXIgZnNzID0gcmIoZGF0LCBidCwgZnNiKSArIChmY2YgPT09IDEgJiYgMjU2KTtcbiAgICAgIC8vIHdpbmRvdyBzaXplXG4gICAgICB2YXIgd3MgPSBmc3M7XG4gICAgICBpZiAoIXNzKSB7XG4gICAgICAgIC8vIHdpbmRvdyBkZXNjcmlwdG9yXG4gICAgICAgIHZhciB3YiA9IDEgPDwgKDEwICsgKGRhdFs1XSA+PiAzKSk7XG4gICAgICAgIHdzID0gd2IgKyAod2IgPj4gMykgKiAoZGF0WzVdICYgNyk7XG4gICAgICB9XG4gICAgICBpZiAod3MgPiAyMTQ1Mzg2NDk2KSBlcnIoMSk7XG4gICAgICB2YXIgYnVmID0gbmV3IHU4KCh3ID09PSAxID8gZnNzIHx8IHdzIDogdyA/IDAgOiB3cykgKyAxMik7XG4gICAgICAoYnVmWzBdID0gMSksIChidWZbNF0gPSA0KSwgKGJ1Zls4XSA9IDgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYjogYnQgKyBmc2IsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGQ6IGRpLFxuICAgICAgICB3OiB3ICYmIHcgIT09IDEgPyB3IDogYnVmLnN1YmFycmF5KDEyKSxcbiAgICAgICAgZTogd3MsXG4gICAgICAgIG86IG5ldyBpMzIoYnVmLmJ1ZmZlciwgMCwgMyksXG4gICAgICAgIHU6IGZzcyxcbiAgICAgICAgYzogY2MsXG4gICAgICAgIG06IE1hdGgubWluKDEzMTA3Miwgd3MpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCgobjMgPj4gNCkgfCAoZGF0WzNdIDw8IDIwKSkgPT09IDB4MTg0ZDJhNSkge1xuICAgICAgLy8gc2tpcHBhYmxlXG4gICAgICByZXR1cm4gYjQoZGF0LCA0KSArIDg7XG4gICAgfVxuICAgIGVycigwKTtcbiAgfTtcbiAgLy8gbW9zdCBzaWduaWZpY2FudCBiaXQgZm9yIG5vbnplcm9cbiAgdmFyIG1zYiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgYml0cyA9IDA7XG4gICAgZm9yICg7IDEgPDwgYml0cyA8PSB2YWw7ICsrYml0cyk7XG4gICAgcmV0dXJuIGJpdHMgLSAxO1xuICB9O1xuICAvLyByZWFkIGZpbml0ZSBzdGF0ZSBlbnRyb3B5XG4gIHZhciByZnNlID0gZnVuY3Rpb24gKGRhdCwgYnQsIG1hbCkge1xuICAgIC8vIHRhYmxlIHBvc1xuICAgIHZhciB0cG9zID0gKGJ0IDw8IDMpICsgNDtcbiAgICAvLyBhY2N1cmFjeSBsb2dcbiAgICB2YXIgYWwgPSAoZGF0W2J0XSAmIDE1KSArIDU7XG4gICAgaWYgKGFsID4gbWFsKSBlcnIoMyk7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzeiA9IDEgPDwgYWw7XG4gICAgLy8gcHJvYmFiaWxpdGllcyBzeW1ib2xzICByZXBlYXQgICBpbmRleCAgIGhpZ2ggdGhyZXNob2xkXG4gICAgdmFyIHByb2JzID0gc3osXG4gICAgICBzeW0gPSAtMSxcbiAgICAgIHJlID0gLTEsXG4gICAgICBpID0gLTEsXG4gICAgICBodCA9IHN6O1xuICAgIC8vIG9wdGltaXphdGlvbjogc2luZ2xlIGFsbG9jYXRpb24gaXMgbXVjaCBmYXN0ZXJcbiAgICB2YXIgYnVmID0gbmV3IGFiKDUxMiArIChzeiA8PCAyKSk7XG4gICAgdmFyIGZyZXEgPSBuZXcgaTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICAvLyBzYW1lIHZpZXcgYXMgZnJlcVxuICAgIHZhciBkc3RhdGUgPSBuZXcgdTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICB2YXIgbnN0YXRlID0gbmV3IHUxNihidWYsIDUxMiwgc3opO1xuICAgIHZhciBiYjEgPSA1MTIgKyAoc3ogPDwgMSk7XG4gICAgdmFyIHN5bXMgPSBuZXcgdTgoYnVmLCBiYjEsIHN6KTtcbiAgICB2YXIgbmJpdHMgPSBuZXcgdTgoYnVmLCBiYjEgKyBzeik7XG4gICAgd2hpbGUgKHN5bSA8IDI1NSAmJiBwcm9icyA+IDApIHtcbiAgICAgIHZhciBiaXRzID0gbXNiKHByb2JzICsgMSk7XG4gICAgICB2YXIgY2J0ID0gdHBvcyA+PiAzO1xuICAgICAgLy8gbWFza1xuICAgICAgdmFyIG1zayA9ICgxIDw8IChiaXRzICsgMSkpIC0gMTtcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICh0cG9zICYgNykpICZcbiAgICAgICAgbXNrO1xuICAgICAgLy8gbWFzayAoMSBmZXdlciBiaXQpXG4gICAgICB2YXIgbXNrMWZiID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgLy8gbWF4IHNtYWxsIHZhbHVlXG4gICAgICB2YXIgbXN2ID0gbXNrIC0gcHJvYnMgLSAxO1xuICAgICAgLy8gc21hbGwgdmFsdWVcbiAgICAgIHZhciBzdmFsID0gdmFsICYgbXNrMWZiO1xuICAgICAgaWYgKHN2YWwgPCBtc3YpICh0cG9zICs9IGJpdHMpLCAodmFsID0gc3ZhbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHBvcyArPSBiaXRzICsgMTtcbiAgICAgICAgaWYgKHZhbCA+IG1zazFmYikgdmFsIC09IG1zdjtcbiAgICAgIH1cbiAgICAgIGZyZXFbKytzeW1dID0gLS12YWw7XG4gICAgICBpZiAodmFsID09PSAtMSkge1xuICAgICAgICBwcm9icyArPSB2YWw7XG4gICAgICAgIHN5bXNbLS1odF0gPSBzeW07XG4gICAgICB9IGVsc2UgcHJvYnMgLT0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIHJlcGVhdCBieXRlXG4gICAgICAgICAgdmFyIHJidCA9IHRwb3MgPj4gMztcbiAgICAgICAgICByZSA9ICgoZGF0W3JidF0gfCAoZGF0W3JidCArIDFdIDw8IDgpKSA+PiAodHBvcyAmIDcpKSAmIDM7XG4gICAgICAgICAgdHBvcyArPSAyO1xuICAgICAgICAgIHN5bSArPSByZTtcbiAgICAgICAgfSB3aGlsZSAocmUgPT09IDMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3ltID4gMjU1IHx8IHByb2JzKSBlcnIoMCk7XG4gICAgdmFyIHN5bXBvcyA9IDA7XG4gICAgLy8gc3ltIHN0ZXAgKGNvcHJpbWUgd2l0aCBzeiAtIGZvcm11bGEgZnJvbSB6c3RkIHNvdXJjZSlcbiAgICB2YXIgc3N0ZXAgPSAoc3ogPj4gMSkgKyAoc3ogPj4gMykgKyAzO1xuICAgIC8vIHN5bSBtYXNrXG4gICAgdmFyIHNtYXNrID0gc3ogLSAxO1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDw9IHN5bTsgKytzKSB7XG4gICAgICB2YXIgc2YgPSBmcmVxW3NdO1xuICAgICAgaWYgKHNmIDwgMSkge1xuICAgICAgICBkc3RhdGVbc10gPSAtc2Y7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIHR3byBsb29wcyBpbiB6c3RkIHRvIGF2b2lkIGJyYW5jaGluZywgYnV0IGFzIEpTIGlzIGhpZ2hlci1sZXZlbCB0aGF0IGlzIHVubmVjZXNzYXJ5XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2Y7ICsraSkge1xuICAgICAgICBzeW1zW3N5bXBvc10gPSBzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgc3ltcG9zID0gKHN5bXBvcyArIHNzdGVwKSAmIHNtYXNrO1xuICAgICAgICB9IHdoaWxlIChzeW1wb3MgPj0gaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBzcHJlYWRpbmcgc3ltYm9scywgc2hvdWxkIGJlIHplcm8gYWdhaW5cbiAgICBpZiAoc3ltcG9zKSBlcnIoMCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN6OyArK2kpIHtcbiAgICAgIC8vIG5leHQgc3RhdGVcbiAgICAgIHZhciBucyA9IGRzdGF0ZVtzeW1zW2ldXSsrO1xuICAgICAgLy8gbnVtIGJpdHNcbiAgICAgIHZhciBuYiA9IChuYml0c1tpXSA9IGFsIC0gbXNiKG5zKSk7XG4gICAgICBuc3RhdGVbaV0gPSAobnMgPDwgbmIpIC0gc3o7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAodHBvcyArIDcpID4+IDMsXG4gICAgICB7XG4gICAgICAgIGI6IGFsLFxuICAgICAgICBzOiBzeW1zLFxuICAgICAgICBuOiBuYml0cyxcbiAgICAgICAgdDogbnN0YXRlLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICAvLyByZWFkIGh1ZmZtYW5cbiAgdmFyIHJodSA9IGZ1bmN0aW9uIChkYXQsIGJ0KSB7XG4gICAgLy8gIGluZGV4ICB3ZWlnaHQgY291bnRcbiAgICB2YXIgaSA9IDAsXG4gICAgICB3YyA9IC0xO1xuICAgIC8vICAgIGJ1ZmZlciAgICAgICAgICAgICBoZWFkZXIgYnl0ZVxuICAgIHZhciBidWYgPSBuZXcgdTgoMjkyKSxcbiAgICAgIGhiID0gZGF0W2J0XTtcbiAgICAvLyBodWZmbWFuIHdlaWdodHNcbiAgICB2YXIgaHcgPSBidWYuc3ViYXJyYXkoMCwgMjU2KTtcbiAgICAvLyByYW5rIGNvdW50XG4gICAgdmFyIHJjID0gYnVmLnN1YmFycmF5KDI1NiwgMjY4KTtcbiAgICAvLyByYW5rIGluZGV4XG4gICAgdmFyIHJpID0gbmV3IHUxNihidWYuYnVmZmVyLCAyNjgpO1xuICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgYnQgaXMgMSBsZXNzIHRoYW4gZXhwZWN0ZWRcbiAgICBpZiAoaGIgPCAxMjgpIHtcbiAgICAgIC8vIGVuZCBieXRlLCBmc2UgZGVjb2RlIHRhYmxlXG4gICAgICB2YXIgX2EgPSByZnNlKGRhdCwgYnQgKyAxLCA2KSxcbiAgICAgICAgZWJ0ID0gX2FbMF0sXG4gICAgICAgIGZkdCA9IF9hWzFdO1xuICAgICAgYnQgKz0gaGI7XG4gICAgICB2YXIgZXBvcyA9IGVidCA8PCAzO1xuICAgICAgLy8gbGFzdCBieXRlXG4gICAgICB2YXIgbGIgPSBkYXRbYnRdO1xuICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgLy8gIHN0YXRlMSAgIHN0YXRlMiAgIHN0YXRlMSBiaXRzICAgc3RhdGUyIGJpdHNcbiAgICAgIHZhciBzdDEgPSAwLFxuICAgICAgICBzdDIgPSAwLFxuICAgICAgICBidHIxID0gZmR0LmIsXG4gICAgICAgIGJ0cjIgPSBidHIxO1xuICAgICAgLy8gZnNlIHBvc1xuICAgICAgLy8gcHJlLWluY3JlbWVudCB0byBhY2NvdW50IGZvciBvcmlnaW5hbCBkZWZpY2l0IG9mIDFcbiAgICAgIHZhciBmcG9zID0gKCsrYnQgPDwgMykgLSA4ICsgbXNiKGxiKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgZnBvcyAtPSBidHIxO1xuICAgICAgICBpZiAoZnBvcyA8IGVwb3MpIGJyZWFrO1xuICAgICAgICB2YXIgY2J0ID0gZnBvcyA+PiAzO1xuICAgICAgICBzdDEgKz1cbiAgICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKGZwb3MgJiA3KSkgJiAoKDEgPDwgYnRyMSkgLSAxKTtcbiAgICAgICAgaHdbKyt3Y10gPSBmZHQuc1tzdDFdO1xuICAgICAgICBmcG9zIC09IGJ0cjI7XG4gICAgICAgIGlmIChmcG9zIDwgZXBvcykgYnJlYWs7XG4gICAgICAgIGNidCA9IGZwb3MgPj4gMztcbiAgICAgICAgc3QyICs9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChmcG9zICYgNykpICYgKCgxIDw8IGJ0cjIpIC0gMSk7XG4gICAgICAgIGh3Wysrd2NdID0gZmR0LnNbc3QyXTtcbiAgICAgICAgYnRyMSA9IGZkdC5uW3N0MV07XG4gICAgICAgIHN0MSA9IGZkdC50W3N0MV07XG4gICAgICAgIGJ0cjIgPSBmZHQubltzdDJdO1xuICAgICAgICBzdDIgPSBmZHQudFtzdDJdO1xuICAgICAgfVxuICAgICAgaWYgKCsrd2MgPiAyNTUpIGVycigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2MgPSBoYiAtIDEyNztcbiAgICAgIGZvciAoOyBpIDwgd2M7IGkgKz0gMikge1xuICAgICAgICB2YXIgYnl0ZSA9IGRhdFsrK2J0XTtcbiAgICAgICAgaHdbaV0gPSBieXRlID4+IDQ7XG4gICAgICAgIGh3W2kgKyAxXSA9IGJ5dGUgJiAxNTtcbiAgICAgIH1cbiAgICAgICsrYnQ7XG4gICAgfVxuICAgIC8vIHdlaWdodCBleHBvbmVudGlhbCBzdW1cbiAgICB2YXIgd2VzID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIHd0ID0gaHdbaV07XG4gICAgICAvLyBiaXRzIG11c3QgYmUgYXQgbW9zdCAxMSwgc2FtZSBhcyB3ZWlnaHRcbiAgICAgIGlmICh3dCA+IDExKSBlcnIoMCk7XG4gICAgICB3ZXMgKz0gd3QgJiYgMSA8PCAod3QgLSAxKTtcbiAgICB9XG4gICAgLy8gbWF4IGJpdHNcbiAgICB2YXIgbWIgPSBtc2Iod2VzKSArIDE7XG4gICAgLy8gdGFibGUgc2l6ZVxuICAgIHZhciB0cyA9IDEgPDwgbWI7XG4gICAgLy8gcmVtYWluaW5nIHN1bVxuICAgIHZhciByZW0gPSB0cyAtIHdlcztcbiAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBpZiAocmVtICYgKHJlbSAtIDEpKSBlcnIoMCk7XG4gICAgaHdbd2MrK10gPSBtc2IocmVtKSArIDE7XG4gICAgZm9yIChpID0gMDsgaSA8IHdjOyArK2kpIHtcbiAgICAgIHZhciB3dCA9IGh3W2ldO1xuICAgICAgKytyY1soaHdbaV0gPSB3dCAmJiBtYiArIDEgLSB3dCldO1xuICAgIH1cbiAgICAvLyBodWYgYnVmXG4gICAgdmFyIGhidWYgPSBuZXcgdTgodHMgPDwgMSk7XG4gICAgLy8gICAgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICBudW0gYml0c1xuICAgIHZhciBzeW1zID0gaGJ1Zi5zdWJhcnJheSgwLCB0cyksXG4gICAgICBuYiA9IGhidWYuc3ViYXJyYXkodHMpO1xuICAgIHJpW21iXSA9IDA7XG4gICAgZm9yIChpID0gbWI7IGkgPiAwOyAtLWkpIHtcbiAgICAgIHZhciBwdiA9IHJpW2ldO1xuICAgICAgZmlsbChuYiwgaSwgcHYsIChyaVtpIC0gMV0gPSBwdiArIHJjW2ldICogKDEgPDwgKG1iIC0gaSkpKSk7XG4gICAgfVxuICAgIGlmIChyaVswXSAhPT0gdHMpIGVycigwKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIGJpdHMgPSBod1tpXTtcbiAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgIHZhciBjb2RlID0gcmlbYml0c107XG4gICAgICAgIGZpbGwoc3ltcywgaSwgY29kZSwgKHJpW2JpdHNdID0gY29kZSArICgxIDw8IChtYiAtIGJpdHMpKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgYnQsXG4gICAgICB7XG4gICAgICAgIG46IG5iLFxuICAgICAgICBiOiBtYixcbiAgICAgICAgczogc3ltcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgLy8gVGFibGVzIGdlbmVyYXRlZCB1c2luZyB0aGlzOlxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovYTk3OTQ1MmQ0MzU1OTkyY2JmOGYyNTdjYmZmYzllZGRcbiAgLy8gZGVmYXVsdCBsaXRlcmFsIGxlbmd0aCB0YWJsZVxuICB2YXIgZGxsdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICA4MSwgMTYsIDk5LCAxNDAsIDQ5LCAxOTgsIDI0LCA5OSwgMTIsIDMzLCAxOTYsIDI0LCA5OSwgMTAyLCAxMDIsIDEzNCwgNzAsXG4gICAgICAxNDYsIDQsXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG1hdGNoIGxlbmd0aCB0YWJsZVxuICB2YXIgZG1sdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICAzMywgMjAsIDE5NiwgMjQsIDk5LCAxNDAsIDMzLCAxMzIsIDE2LCA2NiwgOCwgMzMsIDEzMiwgMTYsIDY2LCA4LCAzMywgNjgsXG4gICAgICA2OCwgNjgsIDY4LCA2OCwgNjgsIDY4LCA2OCwgMzYsIDksXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG9mZnNldCBjb2RlIHRhYmxlXG4gIHZhciBkb2N0ID0gLyojX19QVVJFX18gKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbMzIsIDEzMiwgMTYsIDY2LCAxMDIsIDcwLCA2OCwgNjgsIDY4LCA2OCwgMzYsIDczLCAyXSksXG4gICAgMCxcbiAgICA1LFxuICApWzFdO1xuICAvLyBiaXRzIHRvIGJhc2VsaW5lXG4gIHZhciBiMmJsID0gZnVuY3Rpb24gKGIsIHMpIHtcbiAgICB2YXIgbGVuID0gYi5sZW5ndGgsXG4gICAgICBibCA9IG5ldyBpMzIobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBibFtpXSA9IHM7XG4gICAgICBzICs9IDEgPDwgYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJsO1xuICB9O1xuICAvLyBsaXRlcmFsIGxlbmd0aCBiaXRzXG4gIHZhciBsbGIgPSAvKiNfX1BVUkVfXyAqLyBuZXcgdTgoXG4gICAgLyojX19QVVJFX18gKi8gbmV3IGkzMihbXG4gICAgICAwLCAwLCAwLCAwLCAxNjg0MzAwOSwgNTA1Mjg3NzAsIDEzNDY3ODAyMCwgMjAyMDUwMDU3LCAyNjk0MjIwOTMsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgMzYsXG4gICk7XG4gIC8vIGxpdGVyYWwgbGVuZ3RoIGJhc2VsaW5lXG4gIHZhciBsbGJsID0gLyojX19QVVJFX18gKi8gYjJibChsbGIsIDApO1xuICAvLyBtYXRjaCBsZW5ndGggYml0c1xuICB2YXIgbWxiID0gLyojX19QVVJFX18gKi8gbmV3IHU4KFxuICAgIC8qI19fUFVSRV9fICovIG5ldyBpMzIoW1xuICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NDMwMDksIDUwNTI4NzcwLCAxMTc3NjkyMjAsIDE4NTIwNzA0OCxcbiAgICAgIDI1MjU3OTA4NCwgMTYsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgNTMsXG4gICk7XG4gIC8vIG1hdGNoIGxlbmd0aCBiYXNlbGluZVxuICB2YXIgbWxibCA9IC8qI19fUFVSRV9fICovIGIyYmwobWxiLCAzKTtcbiAgLy8gZGVjb2RlIGh1ZmZtYW4gc3RyZWFtXG4gIHZhciBkaHUgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGxlbiA9IGRhdC5sZW5ndGgsXG4gICAgICBzcyA9IG91dC5sZW5ndGgsXG4gICAgICBsYiA9IGRhdFtsZW4gLSAxXSxcbiAgICAgIG1zayA9ICgxIDw8IGh1LmIpIC0gMSxcbiAgICAgIGViID0gLWh1LmI7XG4gICAgaWYgKCFsYikgZXJyKDApO1xuICAgIHZhciBzdCA9IDAsXG4gICAgICBidHIgPSBodS5iLFxuICAgICAgcG9zID0gKGxlbiA8PCAzKSAtIDggKyBtc2IobGIpIC0gYnRyLFxuICAgICAgaSA9IC0xO1xuICAgIHdoaWxlIChwb3MgPiBlYiAmJiBpIDwgc3MpIHtcbiAgICAgIHZhciBjYnQgPSBwb3MgPj4gMztcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpIHwgKGRhdFtjYnQgKyAyXSA8PCAxNikpID4+IChwb3MgJiA3KTtcbiAgICAgIHN0ID0gKChzdCA8PCBidHIpIHwgdmFsKSAmIG1zaztcbiAgICAgIG91dFsrK2ldID0gaHUuc1tzdF07XG4gICAgICBwb3MgLT0gYnRyID0gaHUubltzdF07XG4gICAgfVxuICAgIGlmIChwb3MgIT09IGViIHx8IGkgKyAxICE9PSBzcykgZXJyKDApO1xuICB9O1xuICAvLyBkZWNvZGUgaHVmZm1hbiBzdHJlYW0gNHhcbiAgLy8gVE9ETzogdXNlIHdvcmtlcnMgdG8gcGFyYWxsZWxpemVcbiAgdmFyIGRodTQgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGJ0ID0gNjtcbiAgICB2YXIgc3MgPSBvdXQubGVuZ3RoLFxuICAgICAgc3oxID0gKHNzICsgMykgPj4gMixcbiAgICAgIHN6MiA9IHN6MSA8PCAxLFxuICAgICAgc3ozID0gc3oxICsgc3oyO1xuICAgIGRodShcbiAgICAgIGRhdC5zdWJhcnJheShidCwgKGJ0ICs9IGRhdFswXSB8IChkYXRbMV0gPDwgOCkpKSxcbiAgICAgIG91dC5zdWJhcnJheSgwLCBzejEpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbMl0gfCAoZGF0WzNdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oxLCBzejIpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbNF0gfCAoZGF0WzVdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oyLCBzejMpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoZGF0LnN1YmFycmF5KGJ0KSwgb3V0LnN1YmFycmF5KHN6MyksIGh1KTtcbiAgfTtcbiAgLy8gcmVhZCBac3RhbmRhcmQgYmxvY2tcbiAgdmFyIHJ6YiA9IGZ1bmN0aW9uIChkYXQsIHN0LCBvdXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJ0ID0gc3QuYjtcbiAgICAvLyAgICBieXRlIDAgICAgICAgIGJsb2NrIHR5cGVcbiAgICB2YXIgYjAgPSBkYXRbYnRdLFxuICAgICAgYnR5cGUgPSAoYjAgPj4gMSkgJiAzO1xuICAgIHN0LmwgPSBiMCAmIDE7XG4gICAgdmFyIHN6ID0gKGIwID4+IDMpIHwgKGRhdFtidCArIDFdIDw8IDUpIHwgKGRhdFtidCArIDJdIDw8IDEzKTtcbiAgICAvLyBlbmQgYnl0ZSBmb3IgYmxvY2tcbiAgICB2YXIgZWJ0ID0gKGJ0ICs9IDMpICsgc3o7XG4gICAgaWYgKGJ0eXBlID09PSAxKSB7XG4gICAgICBpZiAoYnQgPj0gZGF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3QuYiA9IGJ0ICsgMTtcbiAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgZmlsbChvdXQsIGRhdFtidF0sIHN0LnksIChzdC55ICs9IHN6KSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsbChuZXcgdTgoc3opLCBkYXRbYnRdKTtcbiAgICB9XG4gICAgaWYgKGVidCA+IGRhdC5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoYnR5cGUgPT09IDApIHtcbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICBpZiAob3V0KSB7XG4gICAgICAgIG91dC5zZXQoZGF0LnN1YmFycmF5KGJ0LCBlYnQpLCBzdC55KTtcbiAgICAgICAgc3QueSArPSBzejtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGMoZGF0LCBidCwgZWJ0KTtcbiAgICB9XG4gICAgaWYgKGJ0eXBlID09PSAyKSB7XG4gICAgICAvLyAgICBieXRlIDMgICAgICAgIGxpdCBidHlwZSAgICAgc2l6ZSBmb3JtYXRcbiAgICAgIHZhciBiMyA9IGRhdFtidF0sXG4gICAgICAgIGxidCA9IGIzICYgMyxcbiAgICAgICAgc2YgPSAoYjMgPj4gMikgJiAzO1xuICAgICAgLy8gbGl0IHNyYyBzaXplICBsaXQgY21wIHN6IDQgc3RyZWFtc1xuICAgICAgdmFyIGxzcyA9IGIzID4+IDQsXG4gICAgICAgIGxjcyA9IDAsXG4gICAgICAgIHM0ID0gMDtcbiAgICAgIGlmIChsYnQgPCAyKSB7XG4gICAgICAgIGlmIChzZiAmIDEpIGxzcyB8PSAoZGF0WysrYnRdIDw8IDQpIHwgKHNmICYgMiAmJiBkYXRbKytidF0gPDwgMTIpO1xuICAgICAgICBlbHNlIGxzcyA9IGIzID4+IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHNmO1xuICAgICAgICBpZiAoc2YgPCAyKVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSAmIDYzKSA8PCA0KSxcbiAgICAgICAgICAgIChsY3MgPSAoZGF0W2J0XSA+PiA2KSB8IChkYXRbKytidF0gPDwgMikpO1xuICAgICAgICBlbHNlIGlmIChzZiA9PT0gMilcbiAgICAgICAgICAobHNzIHw9IChkYXRbKytidF0gPDwgNCkgfCAoKGRhdFsrK2J0XSAmIDMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gMikgfCAoZGF0WysrYnRdIDw8IDYpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSA8PCA0KSB8ICgoZGF0WysrYnRdICYgNjMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gNikgfCAoZGF0WysrYnRdIDw8IDIpIHwgKGRhdFsrK2J0XSA8PCAxMCkpO1xuICAgICAgfVxuICAgICAgKytidDtcbiAgICAgIC8vIGFkZCBsaXRlcmFscyB0byBlbmQgLSBjYW4gbmV2ZXIgb3ZlcmxhcCB3aXRoIGJhY2tyZWZlcmVuY2VzIGJlY2F1c2UgdW51c2VkIGxpdGVyYWxzIGFsd2F5cyBhcHBlbmRlZFxuICAgICAgdmFyIGJ1ZiA9IG91dCA/IG91dC5zdWJhcnJheShzdC55LCBzdC55ICsgc3QubSkgOiBuZXcgdTgoc3QubSk7XG4gICAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgbGl0ZXJhbHNcbiAgICAgIHZhciBzcGwgPSBidWYubGVuZ3RoIC0gbHNzO1xuICAgICAgaWYgKGxidCA9PT0gMCkgYnVmLnNldChkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsc3MpKSwgc3BsKTtcbiAgICAgIGVsc2UgaWYgKGxidCA9PT0gMSkgZmlsbChidWYsIGRhdFtidCsrXSwgc3BsKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBodWZmbWFuIHRhYmxlXG4gICAgICAgIHZhciBodSA9IHN0Lmg7XG4gICAgICAgIGlmIChsYnQgPT09IDIpIHtcbiAgICAgICAgICB2YXIgaHVkID0gcmh1KGRhdCwgYnQpO1xuICAgICAgICAgIC8vIHN1YnRyYWN0IGRlc2NyaXB0aW9uIGxlbmd0aFxuICAgICAgICAgIGxjcyArPSBidCAtIChidCA9IGh1ZFswXSk7XG4gICAgICAgICAgc3QuaCA9IGh1ID0gaHVkWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCFodSkgZXJyKDApO1xuICAgICAgICAoczQgPyBkaHU0IDogZGh1KShkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsY3MpKSwgYnVmLnN1YmFycmF5KHNwbCksIGh1KTtcbiAgICAgIH1cbiAgICAgIC8vIG51bSBzZXF1ZW5jZXNcbiAgICAgIHZhciBucyA9IGRhdFtidCsrXTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBpZiAobnMgPT09IDI1NSkgbnMgPSAoZGF0W2J0KytdIHwgKGRhdFtidCsrXSA8PCA4KSkgKyAweDdmMDA7XG4gICAgICAgIGVsc2UgaWYgKG5zID4gMTI3KSBucyA9ICgobnMgLSAxMjgpIDw8IDgpIHwgZGF0W2J0KytdO1xuICAgICAgICAvLyBzeW1ib2wgY29tcHJlc3Npb24gbW9kZXNcbiAgICAgICAgdmFyIHNjbSA9IGRhdFtidCsrXTtcbiAgICAgICAgaWYgKHNjbSAmIDMpIGVycigwKTtcbiAgICAgICAgdmFyIGR0cyA9IFtkbWx0LCBkb2N0LCBkbGx0XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPiAtMTsgLS1pKSB7XG4gICAgICAgICAgdmFyIG1kID0gKHNjbSA+PiAoKGkgPDwgMSkgKyAyKSkgJiAzO1xuICAgICAgICAgIGlmIChtZCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmxlIGJ1ZlxuICAgICAgICAgICAgdmFyIHJidWYgPSBuZXcgdTgoWzAsIDAsIGRhdFtidCsrXV0pO1xuICAgICAgICAgICAgZHRzW2ldID0ge1xuICAgICAgICAgICAgICBzOiByYnVmLnN1YmFycmF5KDIsIDMpLFxuICAgICAgICAgICAgICBuOiByYnVmLnN1YmFycmF5KDAsIDEpLFxuICAgICAgICAgICAgICB0OiBuZXcgdTE2KHJidWYuYnVmZmVyLCAwLCAxKSxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMikge1xuICAgICAgICAgICAgLy8gYWNjdXJhY3kgbG9nIDggZm9yIG9mZnNldHMsIDkgZm9yIG90aGVyc1xuICAgICAgICAgICAgKF9hID0gcmZzZShkYXQsIGJ0LCA5IC0gKGkgJiAxKSkpLCAoYnQgPSBfYVswXSksIChkdHNbaV0gPSBfYVsxXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKCFzdC50KSBlcnIoMCk7XG4gICAgICAgICAgICBkdHNbaV0gPSBzdC50W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX2IgPSAoc3QudCA9IGR0cyksXG4gICAgICAgICAgbWx0ID0gX2JbMF0sXG4gICAgICAgICAgb2N0ID0gX2JbMV0sXG4gICAgICAgICAgbGx0ID0gX2JbMl07XG4gICAgICAgIHZhciBsYiA9IGRhdFtlYnQgLSAxXTtcbiAgICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgICB2YXIgc3BvcyA9IChlYnQgPDwgMykgLSA4ICsgbXNiKGxiKSAtIGxsdC5iLFxuICAgICAgICAgIGNidCA9IHNwb3MgPj4gMyxcbiAgICAgICAgICBvdWJ0ID0gMDtcbiAgICAgICAgdmFyIGxzdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IGxsdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBvY3QuYikgPj4gMztcbiAgICAgICAgdmFyIG9zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG9jdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbHQuYikgPj4gMztcbiAgICAgICAgdmFyIG1zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG1sdC5iKSAtIDEpO1xuICAgICAgICBmb3IgKCsrbnM7IC0tbnM7ICkge1xuICAgICAgICAgIHZhciBsbGMgPSBsbHQuc1tsc3RdO1xuICAgICAgICAgIHZhciBsYnRyID0gbGx0Lm5bbHN0XTtcbiAgICAgICAgICB2YXIgbWxjID0gbWx0LnNbbXN0XTtcbiAgICAgICAgICB2YXIgbWJ0ciA9IG1sdC5uW21zdF07XG4gICAgICAgICAgdmFyIG9mYyA9IG9jdC5zW29zdF07XG4gICAgICAgICAgdmFyIG9idHIgPSBvY3Qubltvc3RdO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IG9mYykgPj4gMztcbiAgICAgICAgICB2YXIgb2ZwID0gMSA8PCBvZmM7XG4gICAgICAgICAgdmFyIG9mZiA9XG4gICAgICAgICAgICBvZnAgK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICAgKGRhdFtjYnQgKyAyXSA8PCAxNikgfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDNdIDw8IDI0KSkgPj4+XG4gICAgICAgICAgICAgIChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKG9mcCAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbGJbbWxjXSkgPj4gMztcbiAgICAgICAgICB2YXIgbWwgPVxuICAgICAgICAgICAgbWxibFttbGNdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICAgICAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBtbGJbbWxjXSkgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gbGxiW2xsY10pID4+IDM7XG4gICAgICAgICAgdmFyIGxsID1cbiAgICAgICAgICAgIGxsYmxbbGxjXSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkgfCAoZGF0W2NidCArIDJdIDw8IDE2KSkgPj5cbiAgICAgICAgICAgICAgKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbGxiW2xsY10pIC0gMSkpO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IGxidHIpID4+IDM7XG4gICAgICAgICAgbHN0ID1cbiAgICAgICAgICAgIGxsdC50W2xzdF0gK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpKSA+PiAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBsYnRyKSAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtYnRyKSA+PiAzO1xuICAgICAgICAgIG1zdCA9XG4gICAgICAgICAgICBtbHQudFttc3RdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbWJ0cikgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gb2J0cikgPj4gMztcbiAgICAgICAgICBvc3QgPVxuICAgICAgICAgICAgb2N0LnRbb3N0XSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKCgxIDw8IG9idHIpIC0gMSkpO1xuICAgICAgICAgIGlmIChvZmYgPiAzKSB7XG4gICAgICAgICAgICBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgIHN0Lm9bMV0gPSBzdC5vWzBdO1xuICAgICAgICAgICAgc3Qub1swXSA9IG9mZiAtPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gb2ZmIC0gKGxsICE9PSAwKTtcbiAgICAgICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgICAgb2ZmID0gaWR4ID09PSAzID8gc3Qub1swXSAtIDEgOiBzdC5vW2lkeF07XG4gICAgICAgICAgICAgIGlmIChpZHggPiAxKSBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgICAgc3Qub1sxXSA9IHN0Lm9bMF07XG4gICAgICAgICAgICAgIHN0Lm9bMF0gPSBvZmY7XG4gICAgICAgICAgICB9IGVsc2Ugb2ZmID0gc3Qub1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbDsgKytpKSB7XG4gICAgICAgICAgICBidWZbb3VidCArIGldID0gYnVmW3NwbCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICAob3VidCArPSBsbCksIChzcGwgKz0gbGwpO1xuICAgICAgICAgIHZhciBzdGluID0gb3VidCAtIG9mZjtcbiAgICAgICAgICBpZiAoc3RpbiA8IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAtc3RpbjtcbiAgICAgICAgICAgIHZhciBicyA9IHN0LmUgKyBzdGluO1xuICAgICAgICAgICAgaWYgKGxlbiA+IG1sKSBsZW4gPSBtbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgYnVmW291YnQgKyBpXSA9IHN0LndbYnMgKyBpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvdWJ0ICs9IGxlbiksIChtbCAtPSBsZW4pLCAoc3RpbiA9IDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvdWJ0ICsgaV0gPSBidWZbc3RpbiArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdWJ0ICs9IG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdWJ0ICE9PSBzcGwpIHtcbiAgICAgICAgICB3aGlsZSAoc3BsIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmW291YnQrK10gPSBidWZbc3BsKytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIG91YnQgPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAob3V0KSBzdC55ICs9IG91YnQ7XG4gICAgICAgIGVsc2UgYnVmID0gc2xjKGJ1ZiwgMCwgb3VidCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgc3QueSArPSBsc3M7XG4gICAgICAgICAgaWYgKHNwbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsc3M7ICsraSkge1xuICAgICAgICAgICAgICBidWZbaV0gPSBidWZbc3BsICsgaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwbCkgYnVmID0gc2xjKGJ1Ziwgc3BsKTtcbiAgICAgIH1cbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBlcnIoMik7XG4gIH07XG4gIC8vIGNvbmNhdFxuICB2YXIgY2N0ID0gZnVuY3Rpb24gKGJ1ZnMsIG9sKSB7XG4gICAgaWYgKGJ1ZnMubGVuZ3RoID09PSAxKSByZXR1cm4gYnVmc1swXTtcbiAgICB2YXIgYnVmID0gbmV3IHU4KG9sKTtcbiAgICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBidWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2hrID0gYnVmc1tpXTtcbiAgICAgIGJ1Zi5zZXQoY2hrLCBiKTtcbiAgICAgIGIgKz0gY2hrLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBac3RhbmRhcmQgZGF0YVxuICAgKiBAcGFyYW0gZGF0IFRoZSBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSBidWYgVGhlIG91dHB1dCBidWZmZXIuIElmIHVuc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZVxuICAgKiAgICAgICAgICAgIGV4YWN0bHkgZW5vdWdoIG1lbW9yeSB0byBmaXQgdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB5b3VyXG4gICAqICAgICAgICAgICAgZGF0YSBoYXMgbXVsdGlwbGUgZnJhbWVzIGFuZCB5b3Uga25vdyB0aGUgb3V0cHV0IHNpemUsIHNwZWNpZnlpbmdcbiAgICogICAgICAgICAgICBpdCB3aWxsIHlpZWxkIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBkYXRhXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb21wcmVzcyhkYXQsIGJ1Zikge1xuICAgIHZhciBidCA9IDAsXG4gICAgICBidWZzID0gW10sXG4gICAgICBuYiA9ICshYnVmLFxuICAgICAgb2wgPSAwO1xuICAgIHdoaWxlIChkYXQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3QgPSByemZoKGRhdCwgbmIgfHwgYnVmKTtcbiAgICAgIGlmICh0eXBlb2Ygc3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG5iKSB7XG4gICAgICAgICAgYnVmID0gbnVsbDtcbiAgICAgICAgICBpZiAoc3Qudy5sZW5ndGggPT09IHN0LnUpIHtcbiAgICAgICAgICAgIGJ1ZnMucHVzaCgoYnVmID0gc3QudykpO1xuICAgICAgICAgICAgb2wgKz0gc3QudTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgICAgc3QuZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCFzdC5sKSB7XG4gICAgICAgICAgdmFyIGJsayA9IHJ6YihkYXQsIHN0LCBidWYpO1xuICAgICAgICAgIGlmICghYmxrKSBlcnIoNSk7XG4gICAgICAgICAgaWYgKGJ1Zikgc3QuZSA9IHN0Lnk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWZzLnB1c2goYmxrKTtcbiAgICAgICAgICAgIG9sICs9IGJsay5sZW5ndGg7XG4gICAgICAgICAgICBjcHcoc3QudywgMCwgYmxrLmxlbmd0aCk7XG4gICAgICAgICAgICBzdC53LnNldChibGssIHN0LncubGVuZ3RoIC0gYmxrLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ0ID0gc3QuYiArIHN0LmMgKiA0O1xuICAgICAgfSBlbHNlIGJ0ID0gc3Q7XG4gICAgICBkYXQgPSBkYXQuc3ViYXJyYXkoYnQpO1xuICAgIH1cbiAgICByZXR1cm4gY2N0KGJ1ZnMsIG9sKTtcbiAgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0gbnVsbDtcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4wXG4vL1ZlcnNpb246IDwgNS4xLjFcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xudmFyIGNhbWxfZGVjb21wcmVzc19pbnB1dCA9IHpzdGRfZGVjb21wcmVzcztcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4xXG4vL1ZlcnNpb246IDwgNS4yLjBcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSBudWxsO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vVmVyc2lvbjogPj0gNS4yXG4vL1JlcXVpcmVzOiB6c3RkX2RlY29tcHJlc3NcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSB6c3RkX2RlY29tcHJlc3M7XG5cbi8vUHJvdmlkZXM6IGNhbWxfenN0ZF9pbml0aWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xuLy9WZXJzaW9uOiA+PSA1LjEuMVxuZnVuY3Rpb24gY2FtbF96c3RkX2luaXRpYWxpemUoX3VuaXQpIHtcbiAgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0genN0ZF9kZWNvbXByZXNzO1xuICByZXR1cm4gMTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMztcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMjtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX25vbmVcbnZhciBjYW1sX2VwaGVfbm9uZSA9IHsgY2FtbF9lcGhlX25vbmU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfZGF0YV9vcHRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgdmFyIG9sZCA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB2IGluc3RhbmNlb2YgT2JqZWN0KSB2ID0gbmV3IGdsb2JhbFRoaXMuV2Vha1JlZih2KTtcbiAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gdjtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHgpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NyZWF0ZShuKSB7XG4gIHJldHVybiBjYW1sX3dlYWtfY3JlYXRlKG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfd2Vha19jcmVhdGUobikge1xuICB2YXIgYWxlbiA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgdmFyIHggPSBuZXcgQXJyYXkoYWxlbik7XG4gIHhbMF0gPSAyNTE7XG4gIHhbMV0gPSBcImNhbWxfZXBoZV9saXN0X2hlYWRcIjtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhbGVuOyBpKyspIHtcbiAgICB4W2ldID0gY2FtbF9lcGhlX25vbmU7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfa2V5LCBjYW1sX2VwaGVfdW5zZXRfa2V5XG5mdW5jdGlvbiBjYW1sX3dlYWtfc2V0KHgsIGksIHYpIHtcbiAgaWYgKHYgPT09IDApIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9rZXkoeCwgaSwgdlsxXSk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfZ2V0XG5cbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfa2V5KHgsIGkpIHtcbiAgdmFyIHdlYWsgPSB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV07XG4gIGlmICh3ZWFrID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGlmIChnbG9iYWxUaGlzLldlYWtSZWYgJiYgd2VhayBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuV2Vha1JlZikge1xuICAgIHdlYWsgPSB3ZWFrLmRlcmVmKCk7XG4gICAgaWYgKHdlYWsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gY2FtbF9lcGhlX25vbmU7XG4gICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWzAsIHdlYWtdO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2dldF9rZXksY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuLy9BbGlhczogY2FtbF93ZWFrX2dldF9jb3B5XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5KHgsIGkpIHtcbiAgdmFyIHkgPSBjYW1sX2VwaGVfZ2V0X2tleSh4LCBpKTtcbiAgaWYgKHkgPT09IDApIHJldHVybiB5O1xuICB2YXIgeiA9IHlbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfa2V5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfY2hlY2tcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19rZXkoeCwgaSkge1xuICB2YXIgd2VhayA9IHhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbiAgaWYgKHdlYWsgPT09IGNhbWxfZXBoZV9ub25lKSByZXR1cm4gMDtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB3ZWFrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgd2VhayA9IHdlYWsuZGVyZWYoKTtcbiAgICBpZiAod2VhayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfYmxpdF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9BbGlhczogY2FtbF93ZWFrX2JsaXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2tleShhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIHZhciBvbGQgPSBjYW1sX2VwaGVfZ2V0X2RhdGEoYTEpO1xuICAvLyBtaW51cyBvbmUgYmVjYXVzZSBjYW1sX2FycmF5X2JsaXQgd29ya3Mgb24gb2NhbWwgYXJyYXlcbiAgY2FtbF9hcnJheV9ibGl0KFxuICAgIGExLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTEgLSAxLFxuICAgIGEyLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTIgLSAxLFxuICAgIGxlbixcbiAgKTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdChhMiwgb2xkKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YSwgY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuZnVuY3Rpb24gY2FtbF9lcGhlX2JsaXRfZGF0YShzcmMsIGRzdCkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHNyYyk7XG4gIGNhbWxfZXBoZV9zZXRfZGF0YV9vcHQoZHN0LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXQsIGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfbm9uZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpIHtcbiAgdmFyIGRhdGEgPSB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF07XG4gIGlmIChkYXRhID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGZvciAodmFyIGkgPSBjYW1sX2VwaGVfa2V5X29mZnNldDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoZ2xvYmFsVGhpcy5XZWFrTWFwKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLmdldChrKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbMCwgZGF0YV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkoeCkge1xuICB2YXIgciA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKHIgPT09IDApIHJldHVybiAwO1xuICB2YXIgeiA9IHJbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldCwgY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0geC5sZW5ndGggLSAxOyBpID49IGNhbWxfZXBoZV9rZXlfb2Zmc2V0OyBpLS0pIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnbG9iYWxUaGlzLldlYWtNYXApIHtcbiAgICAgICAgZGF0YSA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKS5zZXQoaywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0KHgsIGRhdGFfb3B0KSB7XG4gIGlmIChkYXRhX29wdCA9PT0gMCkgY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGFfb3B0WzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfZGF0YSh4KSB7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NoZWNrX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NoZWNrX2RhdGEoeCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGRhdGEgPT09IDApIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcihfdW5pdCkge1xuICAvL2F2YWlsYWJsZSB3aXRoIFtub2RlIC0tZXhwb3NlLWdjXVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZ2MgPT09IFwiZnVuY3Rpb25cIikgZ2xvYmFsVGhpcy5nYyh0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKF91bml0KSB7XG4gIC8vYXZhaWxhYmxlIHdpdGggW25vZGUgLS1leHBvc2UtZ2NdXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5nYyA9PT0gXCJmdW5jdGlvblwiKSBnbG9iYWxUaGlzLmdjKCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoX3VuaXQpIHtcbiAgLy9hdmFpbGFibGUgd2l0aCBbbm9kZSAtLWV4cG9zZS1nY11cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmdjID09PSBcImZ1bmN0aW9uXCIpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbihfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIFsyNTQsIDAsIDAsIDBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19xdWlja19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3F1aWNrX3N0YXQoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG4vL1JlcXVpcmVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc3RhdCh1bml0KSB7XG4gIHJldHVybiBjYW1sX2djX3F1aWNrX3N0YXQodW5pdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc2V0XG5mdW5jdGlvbiBjYW1sX2djX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19nZXRcbmZ1bmN0aW9uIGNhbWxfZ2NfZ2V0KF91bml0KSB7XG4gIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXIoX2YsIF94KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlXG52YXIgYWxsX2ZpbmFsaXplcnMgPSBuZXcgZ2xvYmFsVGhpcy5TZXQoKTtcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUoY2IsIGEpIHtcbiAgaWYgKGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHZhciB4ID0gbmV3IGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkoZnVuY3Rpb24gKHgpIHtcbiAgICAgIGFsbF9maW5hbGl6ZXJzLmRlbGV0ZSh4KTtcbiAgICAgIGNiKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHgucmVnaXN0ZXIoYSwgeCk7XG4gICAgYWxsX2ZpbmFsaXplcnMuYWRkKHgpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlbGVhc2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVsZWFzZShfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQoX3JhdGUsIF9zdGFja19zaXplLCBfdHJhY2tlcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2ZfZGlzY2FyZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9kaXNjYXJkKF90KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V2ZW50bG9nX3Jlc3VtZVxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19yZXN1bWUoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2Vcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yX3NsaWNlXG5mdW5jdGlvbiBjYW1sX2djX21ham9yX3NsaWNlKF93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9idWNrZXRcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2J1Y2tldChfbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG4vL1ZlcnNpb246IDwgNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQoX24pIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID0ge1xuICAgIGp1c3RpZnk6IFwiK1wiLFxuICAgIHNpZ25zdHlsZTogXCItXCIsXG4gICAgZmlsbGVyOiBcIiBcIixcbiAgICBhbHRlcm5hdGU6IGZhbHNlLFxuICAgIGJhc2U6IDAsXG4gICAgc2lnbmVkY29udjogZmFsc2UsXG4gICAgd2lkdGg6IDAsXG4gICAgdXBwZXJjYXNlOiBmYWxzZSxcbiAgICBzaWduOiAxLFxuICAgIHByZWM6IC0xLFxuICAgIGNvbnY6IFwiZlwiLFxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgZi5qdXN0aWZ5ID0gXCItXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIitcIjpcbiAgICAgIGNhc2UgXCIgXCI6XG4gICAgICAgIGYuc2lnbnN0eWxlID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOlxuICAgICAgICBmLmZpbGxlciA9IFwiMFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMVwiOlxuICAgICAgY2FzZSBcIjJcIjpcbiAgICAgIGNhc2UgXCIzXCI6XG4gICAgICBjYXNlIFwiNFwiOlxuICAgICAgY2FzZSBcIjVcIjpcbiAgICAgIGNhc2UgXCI2XCI6XG4gICAgICBjYXNlIFwiN1wiOlxuICAgICAgY2FzZSBcIjhcIjpcbiAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgIGYud2lkdGggPSAwO1xuICAgICAgICB3aGlsZSAoKChjID0gZm10LmNoYXJDb2RlQXQoaSkgLSA0OCksIGMgPj0gMCAmJiBjIDw9IDkpKSB7XG4gICAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBmLnByZWMgPSAwO1xuICAgICAgICBpKys7XG4gICAgICAgIHdoaWxlICgoKGMgPSBmbXQuY2hhckNvZGVBdChpKSAtIDQ4KSwgYyA+PSAwICYmIGMgPD0gOSkpIHtcbiAgICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICBmLmJhc2UgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9PSBcIi1cIikpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT09IFwiK1wiICYmIGYuZmlsbGVyID09PSBcIiBcIilcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gXCIgXCI7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9IFwiLVwiO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9PSBcIi1cIikgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT09IDgpIGJ1ZmZlciArPSBcIjBcIjtcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZSA/IFwiMFhcIiA6IFwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCIrXCIgJiYgZi5maWxsZXIgPT09IFwiMFwiKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIjBcIjtcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCItXCIpIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIiBcIjtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBIdWdvIEhldXphcmRcblxuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVcbnZhciBjYW1sX2dyX3N0YXRlO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYgKGNhbWxfZ3Jfc3RhdGUpIHtcbiAgICByZXR1cm4gY2FtbF9ncl9zdGF0ZTtcbiAgfVxuICB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoW1xuICAgIDAsXG4gICAgY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiTm90IGluaXRpYWxpemVkXCIpLFxuICBdKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGUgPSBjdHg7XG4gIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbykge1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiICsgbmFtZSArIFwiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmICghKGluZm8gPT09IFwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gXCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYgKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKTtcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdyA/IE51bWJlci5wYXJzZUludCh3KSA6IDIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiICsgdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoID8gTnVtYmVyLnBhcnNlSW50KGgpIDogMjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiICsgaCk7XG5cbiAgdmFyIHdpbiA9IGdsb2JhbFRoaXMub3BlbihcImFib3V0OmJsYW5rXCIsIHRhcmdldCwgc3BlY3Muam9pbihcIixcIikpO1xuICBpZiAoIXdpbikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpO1xuICB9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsIHcsIGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCkge1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsIGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLCBjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJib3R0b21cIjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcywgdywgaCkge1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGxpbmVfd2lkdGg6IDEsXG4gICAgZm9udDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZTogMjYsXG4gICAgY29sb3I6IDB4MDAwMDAwLFxuICAgIHRpdGxlOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpLFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KSByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmIChzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgaWYgKHcgIT09IHMuY2FudmFzLndpZHRoKSBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIGlmIChoICE9PSBzLmNhbnZhcy5oZWlnaHQpIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHMuY2FudmFzLndpZHRoLCBzLmNhbnZhcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gXCJcIiArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSBcIjBcIiArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gICAgZyA9IChjb2xvciA+PiA4KSAmIDB4ZmYsXG4gICAgYiA9IChjb2xvciA+PiAwKSAmIDB4ZmY7XG4gIHMuY29sb3IgPSBjb2xvcjtcbiAgdmFyIGNfc3RyID0gXCIjXCIgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgsIHkpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsIDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIChkWzFdID1cbiAgICAoY29sb3IgPj4gOCkgJlxuICAgIDB4ZmYpLCAvL2dcbiAgICAoZFsyXSA9IChjb2xvciA+PiAwKSAmIDB4ZmYpOyAvL2JcbiAgZFszXSA9IDB4ZmY7IC8vYVxuICBzLnggPSB4O1xuICBzLnkgPSB5O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLCB4LCBzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbSA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgcy5oZWlnaHQgLSB5LCAxLCAxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54ID0geDtcbiAgcy55ID0geTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngsIHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LCBzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueCA9IHg7XG4gIHMueSA9IHk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LCB5LCB3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCwgcy5oZWlnaHQgLSB5LCB3LCAtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsIGN4LCBjeSwgcnksIHJ4LCBhMSwgYTIpIHtcbiAgd2hpbGUgKGExID4gYTIpIGEyICs9IDM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLFxuICAgIHhQb3MsXG4gICAgeVBvcyxcbiAgICB4UG9zX3ByZXYsXG4gICAgeVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCArIHJ5KSAvIDIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9ICgoYTIgLSBhMSkgKiBNYXRoLlBJKSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IG51bTsgaisrKSB7XG4gICAgeFBvcyA9XG4gICAgICBjeCAtXG4gICAgICByeCAqIE1hdGguc2luKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnkgKiBNYXRoLmNvcyhpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9XG4gICAgICBjeSArXG4gICAgICByeSAqIE1hdGguY29zKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnggKiBNYXRoLnNpbihpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYgIT09IHhQb3MgfHwgeVBvc19wcmV2ICE9PSB5UG9zKSB7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXYgPSB4UG9zO1xuICAgIHlQb3NfcHJldiA9IHlQb3M7XG4gICAgaSAtPSBkZWx0YTsgLy9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LCB5LCByeCwgcnksIGExLCBhMikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCwgeCwgcy5oZWlnaHQgLSB5LCByeCwgcnksIGExLCBhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gdztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCwgeSwgdywgaCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LCBzLmhlaWdodCAtIHksIHcsIC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLCBzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLCBzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSwgcy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgsIHksIHJ4LCByeSwgYTEsIGEyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LCB4LCBzLmhlaWdodCAtIHksIHJ4LCByeSwgYTEsIGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIsIHMueCwgcy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpIHtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cikge1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsIHcsIHMudGV4dF9zaXplXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodywgaCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgIHZhciBjID0gYXJyW2kgKyAxXVtqICsgMV07XG4gICAgICB2YXIgbyA9IGkgKiAodyAqIDQpICsgaiAqIDQ7XG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAoYyA+PiAxNikgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IChjID4+IDgpICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAoYyA+PiAwKSAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKSB7XG4gIHZhciBkYXRhID0gWzBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltLmhlaWdodDsgaSsrKSB7XG4gICAgZGF0YVtpICsgMV0gPSBbMF07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbS53aWR0aDsgaisrKSB7XG4gICAgICB2YXIgbyA9IGkgKiAoaW0ud2lkdGggKiA0KSArIGogKiA0LFxuICAgICAgICByID0gaW0uZGF0YVtvICsgMF0sXG4gICAgICAgIGcgPSBpbS5kYXRhW28gKyAxXSxcbiAgICAgICAgYiA9IGltLmRhdGFbbyArIDJdO1xuICAgICAgZGF0YVtpICsgMV1baiArIDFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSwgeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmICghaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwgMCwgMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGdsb2JhbFRoaXMuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCB4LCBzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICAgICAgaW0uaW1hZ2UgPSBpbWFnZTtcbiAgICB9O1xuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSwgeCwgcy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3JlYXRlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jcmVhdGVfaW1hZ2UoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgsIHkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9ibGl0X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9ibGl0X2ltYWdlKGltLCB4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltMiA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoXG4gICAgeCxcbiAgICBzLmhlaWdodCAtIGltLmhlaWdodCAtIHksXG4gICAgaW0ud2lkdGgsXG4gICAgaW0uaGVpZ2h0LFxuICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSArIDFdID0gaW0yLmRhdGFbaSArIDFdO1xuICAgIGltLmRhdGFbaSArIDJdID0gaW0yLmRhdGFbaSArIDJdO1xuICAgIGltLmRhdGFbaSArIDNdID0gaW0yLmRhdGFbaSArIDNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2FpdF9ldmVudFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl93YWl0X2V2ZW50KF9ldmwpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9zeW5jaHJvbml6ZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3JlbWVtYmVyX21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVtZW1iZXJfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChfYSkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl93aW5kb3dfaWQgbm90IEltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX29wZW5fc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fc3Vid2luZG93KF9hLCBfYiwgX2MsIF9kKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KF9hKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VzY2FwZSBjb25zdCAoY29uc3QpXG52YXIgY2FtbF9qc19yZWdleHBzID0geyBhbXA6IC8mL2csIGx0OiAvPC9nLCBxdW90OiAvXCIvZywgYWxsOiAvWyY8XCJdLyB9O1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VzY2FwZShzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvO1xuICBpZiAocy5tYXRjaChlbnRpdHkpKSB7XG4gICAgdmFyIHN0cixcbiAgICAgIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICB0ZW1wLmlubmVySFRNTCA9IHM7XG4gICAgc3RyID0gdGVtcC50ZXh0Q29udGVudCB8fCB0ZW1wLmlubmVyVGV4dDtcbiAgICB0ZW1wID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUoKSB7XG4gIHZhciBjID0gY29uc29sZTtcbiAgdmFyIG0gPSBbXG4gICAgXCJsb2dcIixcbiAgICBcImRlYnVnXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJ3YXJuXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcnhtbFwiLFxuICAgIFwidHJhY2VcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cENvbGxhcHNlZFwiLFxuICAgIFwiZ3JvdXBFbmRcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVFbmRcIixcbiAgXTtcbiAgZnVuY3Rpb24gZigpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dID0gZjtcbiAgcmV0dXJuIGM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlKF91bml0KSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiWE1MSHR0cFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfSBjYXRjaCB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkZhaWxlZCB0byBjcmVhdGUgWE1MSHR0cFJlcXVlc3RcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZiAoZXhuLmpzX2Vycm9yKSB7XG4gICAgcmV0dXJuIGV4bi5qc19lcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNikgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYyxcbiAgICBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBsZXhidWZbbGV4X2J1ZmZlcl07XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlIC0gMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKSB7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT09IDApIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZSBjID0gMjU2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChidWZmZXIsIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09PSBzdGF0ZSkgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PT0gLTEpIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChkc3QgPT09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGkrKztcbiAgICBpZiAoc3JjID09PSAweGZmKSBtZW1bZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlIG1lbVtkc3QgKyAxXSA9IG1lbVtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpKys7XG4gICAgaWYgKGRzdCA9PT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChzcmMgPT09IDB4ZmYpIG1lbVtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2UgbWVtW2RzdCArIDFdID0gbWVtW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5KHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbClcbiAgICB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLFxuICAgIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGxleGJ1ZltsZXhfYnVmZmVyXTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvciAoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZSAtIDE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSkge1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09PSAwKSByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2UgYyA9IDI1NjtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQoYnVmZmVyLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT09IHN0YXRlKSBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2Ugc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09PSAtMSkgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSxcbiAgICAgICAgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbShcbiAgICAgICAgICB0YmwubGV4X2NvZGUsXG4gICAgICAgICAgcGNfb2ZmLFxuICAgICAgICAgIGxleGJ1ZltsZXhfbWVtXSxcbiAgICAgICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSxcbiAgICAgICAgKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfbHhtX01cbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fTSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZDEzNDI1NDNkZTgyZWY5NVwiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX2RhYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fZGFiYSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZGFiYTBiNmViMDkzMjJlM1wiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX25leHQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3hvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbXVsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9NXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9kYWJhXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfbHhtX25leHQodikge1xuICBmdW5jdGlvbiBzaGlmdF9sKHgsIGspIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0KHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIHNoaWZ0X3IoeCwgaykge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIG9yKGEsIGIpIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9vcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3hvcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X2FkZChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X211bChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiByb3RsKHgsIGspIHtcbiAgICByZXR1cm4gb3Ioc2hpZnRfbCh4LCBrKSwgc2hpZnRfcih4LCA2NCAtIGspKTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoYSwgaSkge1xuICAgIHJldHVybiBjYW1sX2JhX2dldF8xKGEsIGkpO1xuICB9XG4gIGZ1bmN0aW9uIHNldChhLCBpLCB4KSB7XG4gICAgcmV0dXJuIGNhbWxfYmFfc2V0XzEoYSwgaSwgeCk7XG4gIH1cbiAgdmFyIE0gPSBjYW1sX2x4bV9NO1xuICB2YXIgZGFiYSA9IGNhbWxfbHhtX2RhYmE7XG4gIHZhciB6LCBxMCwgcTE7XG4gIHZhciBzdCA9IHY7XG4gIHZhciBhID0gZ2V0KHN0LCAwKTtcbiAgdmFyIHMgPSBnZXQoc3QsIDEpO1xuICB2YXIgeDAgPSBnZXQoc3QsIDIpO1xuICB2YXIgeDEgPSBnZXQoc3QsIDMpO1xuICAvKiBDb21iaW5pbmcgb3BlcmF0aW9uICovXG4gIHogPSBhZGQocywgeDApO1xuICAvKiBNaXhpbmcgZnVuY3Rpb24gKi9cbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IHhvcih6LCBzaGlmdF9yKHosIDMyKSk7XG4gIC8qIExDRyB1cGRhdGUgKi9cbiAgc2V0KHN0LCAxLCBhZGQobXVsKHMsIE0pLCBhKSk7XG4gIC8qIFhCRyB1cGRhdGUgKi9cbiAgdmFyIHEwID0geDA7XG4gIHZhciBxMSA9IHgxO1xuICBxMSA9IHhvcihxMSwgcTApO1xuICBxMCA9IHJvdGwocTAsIDI0KTtcbiAgcTAgPSB4b3IoeG9yKHEwLCBxMSksIHNoaWZ0X2wocTEsIDE2KSk7XG4gIHExID0gcm90bChxMSwgMzcpO1xuICBzZXQoc3QsIDIsIHEwKTtcbiAgc2V0KHN0LCAzLCBxMSk7XG4gIC8qIFJldHVybiByZXN1bHQgKi9cbiAgcmV0dXJuIHo7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlcl90cmFjZVxudmFyIGNhbWxfcGFyc2VyX3RyYWNlID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5LCBjYW1sX3BhcnNlcl90cmFjZSxjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpIHtcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICB2YXIgdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIHZhciB0YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBmdW5jdGlvbiBsb2coeCkge1xuICAgIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4ICsgXCJcXG5cIik7XG4gICAgY2FtbF9tbF9vdXRwdXQoY2FtbF9zeXNfZmRzWzJdLmNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuX25hbWUobmFtZXMsIG51bWJlcikge1xuICAgIHZhciBzdHIgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lcyk7XG4gICAgaWYgKHN0clswXSA9PT0gXCJcXHgwMFwiKSByZXR1cm4gXCI8dW5rbm93biB0b2tlbj5cIjtcbiAgICByZXR1cm4gc3RyLnNwbGl0KFwiXFx4MDBcIilbbnVtYmVyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByaW50X3Rva2VuKHN0YXRlLCB0b2spIHtcbiAgICB2YXIgdG9rZW4sIGtpbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbl9uYW1lKHRhYmxlc1t0YmxfbmFtZXNfYmxvY2tdLCB0b2tbMF0pO1xuICAgICAgaWYgKHR5cGVvZiB0b2tbMV0gPT09IFwibnVtYmVyXCIpIGtpbmQgPSBcIlwiICsgdG9rWzFdO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHRva1sxXSA9PT0gXCJzdHJpbmdcIikga2luZCA9IHRva1sxXTtcbiAgICAgIGVsc2UgaWYgKHRva1sxXSBpbnN0YW5jZW9mIE1sQnl0ZXMpIGtpbmQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRva1sxXSk7XG4gICAgICBlbHNlIGtpbmQgPSBcIl9cIjtcbiAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogcmVhZCB0b2tlbiBcIiArIHRva2VuICsgXCIoXCIgKyBraW5kICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHRva2VuX25hbWUodGFibGVzW3RibF9uYW1lc19jb25zdF0sIHRvayk7XG4gICAgICBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlYWQgdG9rZW4gXCIgKyB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLFxuICAgIG4sXG4gICAgbjEsXG4gICAgbjIsXG4gICAgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgdGhlX2xvb3A6IGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAwOiAvL1NUQVJUOlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDY6IC8vbG9vcDpcbiAgICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgICBpZiAobiAhPT0gMCkge1xuICAgICAgICAgIGNtZCA9IHJlZHVjZTtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHtcbiAgICAgICAgICBjbWQgPSB0ZXN0c2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgICBjYXNlIDE6IC8vVE9LRU5fUkVBRDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgcHJpbnRfdG9rZW4oc3RhdGUsIGFyZyk7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDc6IC8vdGVzdHNoaWZ0OlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuMSAhPT0gMCAmJlxuICAgICAgICAgIG4yID49IDAgJiZcbiAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09PSBlbnZbZW52X2N1cnJfY2hhcl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kID0gc2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG4xICE9PSAwICYmXG4gICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT09IGVudltlbnZfY3Vycl9jaGFyXVxuICAgICAgICApIHtcbiAgICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgICBjbWQgPSByZWR1Y2U7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICAgIGNhc2UgNTogLy9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gRVJSQ09ERVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiUmVjb3ZlcmluZyBpbiBzdGF0ZSBcIiArIHN0YXRlMSk7XG4gICAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHRoZV9sb29wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJEaXNjYXJkaW5nIHN0YXRlIFwiICsgc3RhdGUxKTtcbiAgICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiTm8gbW9yZSBzdGF0ZXMgdG8gZGlzY2FyZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7IC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiRGlzY2FyZGluZyBsYXN0IHRva2VuIHJlYWRcIik7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgICAgY21kID0gbG9vcDtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gVW5yZWFjaGFibGVcbiAgICAgIGNhc2UgODogLy9zaGlmdDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgY2FzZSA5OiAvL3NoaWZ0X3JlY292ZXI6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKVxuICAgICAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogc2hpZnQgdG8gc3RhdGUgXCIgKyB0YWJsZXMudGFibGVbbjJdKTtcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBzcCsrO1xuICAgICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgICAgY2FzZSAyOiAvL1NUQUNLU19HUk9XTl8xOlxuICAgICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcblxuICAgICAgY2FzZSAxMDogLy9yZWR1Y2U6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlZHVjZSBieSBydWxlIFwiICsgbik7XG4gICAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICBuMiA+PSAwICYmXG4gICAgICAgICAgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gc3RhdGUxXG4gICAgICAgIClcbiAgICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGVsc2Ugc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICAgIGJyZWFrIHRoZV9sb29wO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgICBjYXNlIDM6IC8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICAgIGNhc2UgNDogLy9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZXJfdHJhY2VcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZShib29sKSB7XG4gIHZhciBvbGRmbGFnID0gY2FtbF9wYXJzZXJfdHJhY2U7XG4gIGNhbWxfcGFyc2VyX3RyYWNlID0gYm9vbDtcbiAgcmV0dXJuIG9sZGZsYWc7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBIdWdvIEhldXphcmRcbi8vIENvcHlyaWdodCAoQykgMjAyMCAtIFNoYWNoYXIgSXR6aGFreVxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2Jsb2IvNC4wNy9vdGhlcmxpYnMvc3RyL3N0cnN0dWJzLmNcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2NvcS9qc2NvcS9ibG9iL3Y4LjExL2NvcS1qcy9qc19zdHViL3N0ci5qc1xuXG4vL1Byb3ZpZGVzOiByZV9tYXRjaFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZ2V0XG5cbnZhciByZV9tYXRjaCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZV93b3JkX2xldHRlcnMgPSBbXG4gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiAweDAwLTB4MUY6IG5vbmUgKi8sIDB4MDAsIDB4MDAsIDB4ZmYsXG4gICAgMHgwMyAvKiAweDIwLTB4M0Y6IGRpZ2l0cyAwLTkgKi8sIDB4ZmUsIDB4ZmYsIDB4ZmYsXG4gICAgMHg4NyAvKiAweDQwLTB4NUY6IEEgdG8gWiwgXyAqLywgMHhmZSwgMHhmZiwgMHhmZixcbiAgICAweDA3IC8qIDB4NjAtMHg3RjogYSB0byB6ICovLCAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4ODAtMHg5Rjogbm9uZSAqLyxcbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4QTAtMHhCRjogbm9uZSAqLywgMHhmZiwgMHhmZiwgMHg3ZixcbiAgICAweGZmIC8qIDB4QzAtMHhERjogTGF0aW4tMSBhY2NlbnRlZCB1cHBlcmNhc2UgKi8sIDB4ZmYsIDB4ZmYsIDB4N2YsXG4gICAgMHhmZiAvKiAweEUwLTB4RkY6IExhdGluLTEgYWNjZW50ZWQgbG93ZXJjYXNlICovLFxuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsXG4gICAgQ0hBUk5PUk06IDEsXG4gICAgU1RSSU5HOiAyLFxuICAgIFNUUklOR05PUk06IDMsXG4gICAgQ0hBUkNMQVNTOiA0LFxuICAgIEJPTDogNSxcbiAgICBFT0w6IDYsXG4gICAgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LFxuICAgIEVOREdST1VQOiA5LFxuICAgIFJFRkdST1VQOiAxMCxcbiAgICBBQ0NFUFQ6IDExLFxuICAgIFNJTVBMRU9QVDogMTIsXG4gICAgU0lNUExFU1RBUjogMTMsXG4gICAgU0lNUExFUExVUzogMTQsXG4gICAgR09UTzogMTUsXG4gICAgUFVTSEJBQ0s6IDE2LFxuICAgIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzX3dvcmRfbGV0dGVyKGMpIHtcbiAgICByZXR1cm4gKHJlX3dvcmRfbGV0dGVyc1tjID4+IDNdID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLCBpKSB7XG4gICAgcmV0dXJuIChjYW1sX3N0cmluZ19nZXQocywgaSA+PiAzKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcbiAgICB2YXIgcHJvZyA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsxXSksXG4gICAgICBjcG9vbCA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICBub3JtdGFibGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgIG51bWdyb3VwcyA9IHJlWzRdIHwgMCxcbiAgICAgIG51bXJlZ2lzdGVycyA9IHJlWzVdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgcXVpdCA9IGZhbHNlLFxuICAgICAgc3RhY2sgPSBbXSxcbiAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgcmVfcmVnaXN0ZXIgPSBuZXcgQXJyYXkobnVtcmVnaXN0ZXJzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBncm91cHNbaV0gPSB7IHN0YXJ0OiAtMSwgZW5kOiAtMSB9O1xuICAgIH1cbiAgICBncm91cHNbMF0uc3RhcnQgPSBwb3M7XG5cbiAgICB2YXIgYmFja3RyYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS51bmRvKSB7XG4gICAgICAgICAgaXRlbS51bmRvLm9ialtpdGVtLnVuZG8ucHJvcF0gPSBpdGVtLnVuZG8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3MpIHtcbiAgICAgICAgICBwYyA9IGl0ZW0ucG9zLnBjO1xuICAgICAgICAgIHBvcyA9IGl0ZW0ucG9zLnR4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1aXQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzdGFjay5wdXNoKGl0ZW0pO1xuICAgIH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGggKiAyKTtcbiAgICAgIHJlc3VsdFswXSA9IDA7IC8vIHRhZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGcgPSBncm91cHNbaV07XG4gICAgICAgIGlmIChnLnN0YXJ0IDwgMCB8fCBnLmVuZCA8IDApIHtcbiAgICAgICAgICBnLnN0YXJ0ID0gZy5lbmQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbMiAqIGkgKyAxXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyICogaSArIDEgKyAxXSA9IGcuZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdmFyIHByZWZpeF9tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwYXJ0aWFsKSByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgIH07XG5cbiAgICAvKiBNYWluIERGQSBpbnRlcnByZXRlciBsb29wICovXG4gICAgd2hpbGUgKCFxdWl0KSB7XG4gICAgICB2YXIgb3AgPSBwcm9nW3BjXSAmIDB4ZmYsXG4gICAgICAgIHNhcmcgPSBwcm9nW3BjXSA+PiA4LFxuICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgIGMgPSBzW3Bvc10sXG4gICAgICAgIGdyb3VwO1xuXG4gICAgICBwYysrO1xuXG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gdWFyZykgcG9zKys7XG4gICAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIQVJOT1JNOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09IGFyZy5jaGFyQ29kZUF0KGkpKSBjID0gc1srK3Bvc107XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm10YWJsZS5jaGFyQ29kZUF0KGMpID09PSBhcmcuY2hhckNvZGVBdChpKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICAgIGlmIChwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICAgIGlmIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuV09SREJPVU5EQVJZOlxuICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzWzBdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9PSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkJFR0dST1VQOlxuICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICAgIHB1c2goeyB1bmRvOiB7IG9iajogZ3JvdXAsIHByb3A6IFwic3RhcnRcIiwgdmFsdWU6IGdyb3VwLnN0YXJ0IH0gfSk7XG4gICAgICAgICAgZ3JvdXAuc3RhcnQgPSBwb3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgICBwdXNoKHsgdW5kbzogeyBvYmo6IGdyb3VwLCBwcm9wOiBcImVuZFwiLCB2YWx1ZTogZ3JvdXAuZW5kIH0gfSk7XG4gICAgICAgICAgZ3JvdXAuZW5kID0gcG9zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgICAgaWYgKGdyb3VwLnN0YXJ0IDwgMCB8fCBncm91cC5lbmQgPCAwKSB7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNbaV0gIT09IHNbcG9zXSkge1xuICAgICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFUExVUzpcbiAgICAgICAgICBpZiAocG9zID09PSBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgICAgfSBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICAgIHJldHVybiBhY2NlcHQoKTtcbiAgICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgICBwdXNoKHsgcG9zOiB7IHBjOiBwYyArIHNhcmcsIHR4dDogcG9zIH0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TRVRNQVJLOlxuICAgICAgICAgIHB1c2goe1xuICAgICAgICAgICAgdW5kbzogeyBvYmo6IHJlX3JlZ2lzdGVyLCBwcm9wOiB1YXJnLCB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ10gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIRUNLUFJPR1JFU1M6XG4gICAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19nZXRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9mb3J3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKTtcbiAgdmFyIHN0YXJ0Y2hhcnMgPSByZVs2XSB8IDA7XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIGlmIChzdGFydGNoYXJzID49IDApIHtcbiAgICBzdGFydGNoYXJzID0gcmVbMl1bc3RhcnRjaGFycyArIDFdO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zIDwgbGVuICYmXG4gICAgICAgIGNhbWxfc3RyaW5nX2dldChzdGFydGNoYXJzLCBjYW1sX3N0cmluZ19nZXQocywgcG9zKSkgPT09IDBcbiAgICAgIClcbiAgICAgICAgcG9zKys7XG4gICAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgcG9zKys7XG4gICAgfSB3aGlsZSAocG9zIDw9IGxlbik7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcysrO1xuICAgIH0gd2hpbGUgKHBvcyA8PSBsZW4pO1xuICB9XG4gIHJldHVybiBbMF07IC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuZnVuY3Rpb24gcmVfc2VhcmNoX2JhY2t3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIik7XG4gIHZhciBzdGFydGNoYXJzID0gcmVbNl0gfCAwO1xuICBpZiAoc3RhcnRjaGFycyA+PSAwKSB7XG4gICAgc3RhcnRjaGFycyA9IHJlWzJdW3N0YXJ0Y2hhcnMgKyAxXTtcbiAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zID4gMCAmJlxuICAgICAgICBwb3MgPCBsZW4gJiZcbiAgICAgICAgY2FtbF9zdHJpbmdfZ2V0KHN0YXJ0Y2hhcnMsIGNhbWxfc3RyaW5nX2dldChzLCBwb3MpKSA9PT0gMFxuICAgICAgKVxuICAgICAgICBwb3MtLTtcbiAgICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBwb3MtLTtcbiAgICB9IHdoaWxlIChwb3MgPj0gMCk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcy0tO1xuICAgIH0gd2hpbGUgKHBvcyA+PSAwKTtcbiAgfVxuICByZXR1cm4gWzBdOyAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUsIHMsIHBvcykge1xuICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3BhcnRpYWxfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfcGFydGlhbF9tYXRjaChyZSwgcywgcG9zKSB7XG4gIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCwgZ3JvdXBzLCBvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlIChuIDwgbGVuKSB7XG4gICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICBpZiAoY3VyICE9PSBcIlxcXFxcIikge1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG4gPT09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2ggKGN1cikge1xuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgIGNhc2UgXCI2XCI6XG4gICAgICAgIGNhc2UgXCI3XCI6XG4gICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgICAgaWYgKGMgKiAyID49IGdyb3Vwcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMik7XG4gICAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMiArIDEpO1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IHJlZmVyZW5jZSB0byB1bm1hdGNoZWQgZ3JvdXBcIik7XG4gICAgICAgICAgcmVzICs9IG9yaWcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzICs9IFwiXFxcXFwiICsgY3VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpO1xufVxuIl0sIm5hbWVzIjpbImNzdF9PdXRfb2ZfbWVtb3J5IiwiY3N0X1N5c19lcnJvciIsImNzdF9GYWlsdXJlIiwiY3N0X0ludmFsaWRfYXJndW1lbnQiLCJjc3RfRW5kX29mX2ZpbGUiLCJjc3RfRGl2aXNpb25fYnlfemVybyIsImNzdF9Ob3RfZm91bmQiLCJjc3RfTWF0Y2hfZmFpbHVyZSIsImNzdF9TdGFja19vdmVyZmxvdyIsImNzdF9TeXNfYmxvY2tlZF9pbyIsImNzdF9Bc3NlcnRfZmFpbHVyZSIsImNzdF9VbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7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O0FBQUE7QUFBQTtBQUFBLFdBR3FCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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Q0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTyxhQTdFRixDQThFTjtBQUFBLE9BbkdzQjtBQUFBLE9BQUQ7QUFBQTtBQUFBLGlCQWlKWDtBQUFBLElBQ1g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEtBQ0UsWUFBVyxxQkFBdUI7QUFBQSxLQUdsQztBQUFBLEtBQ0EsWUFBVyxnQkFBa0I7QUFBQTtBQUFBO0FBQUEsS0FHeEIsWUFDTSxxQkFBdUI7QUFBQSxJQUlwQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsWUFDUTtBQUFBLElBQ1IsWUFBVztBQUFBLEtBQ1QsWUFBVyxlQUFpQjtBQUFBLElBQzlCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLGNBaEVlO0FBQUEsV0FDSDtBQUFBLFVBQ0Q7QUFBQSxJQUNUO0FBQUE7QUFBQSxZQUVLO0FBQUE7QUFBQSxtQkFHSjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGlCQUthLDRCQUNHO0FBQUEsSUFDZDtBQUFBLElBQ0E7QUFBQSxtQkFDYztBQUFBLEtBQ1o7QUFBQSxNQUNFLFdBQVc7QUFBQSxNQUNYLE1BQU07QUFBQTtBQUFBLEtBRVIsV0FBVztBQUFBLEtBQ1g7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRjtBQUFBLEtBQ0UsV0FBVztBQUFBLEtBQ1g7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRjtBQUFBLEtBQ0UsV0FBVztBQUFBLEdBQ2Y7QUFBQSxnQ0N5RUUsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQTtBQUFBLFNkdFBRO0FBQUEsZUFDTTtBQUFBLFNBQ047QUFBQSxJQUNOO0FBQUEsS0FBYSxPQUFPLFVBQVU7QUFBQTtBQUFBLGFBRXBCLEtBQUs7QUFBQSxLQUNiLDRCQUE2QixRQUFRO0FBQUEsS0FDckMsT0FBTyxpQkFBaUIsY0FBYztBQUFBO0FBQUE7QUFBQSxLQUV0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFFVTtBQUFBLHlCQUNRO0FBQUEsYUFDWixZQUFXLHFCQUF1QjtBQUFBLGFBQ2xDO0FBQUEsYUFDQSxPQUFPLFdBQVc7QUFBQSxZQUpaO0FBQUEsU0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUdNO0FBQUEseUJBQ1E7QUFBQSxhQUNaLFlBQVcscUJBQXVCO0FBQUEsYUFDbEM7QUFBQSxhQUNBO0FBQUEsYUFDQSxPQUFPLFdBQVc7QUFBQSxZQUxaO0FBQUEsU0FPUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FHTTtBQUFBLFlBQ0osNEJBQTZCO0FBQUEsWUFDN0IsT0FBTyxpQkFBaUIsd0JBQXdCO0FBQUEsV0FGMUM7QUFBQTtBQUFBLEtBTVo7QUFBQSxLQUNBLFFBQVE7QUFBQTtBQUFBLEdBRVo7QUFBQTtBQUFBLEllMUJFLHFCQUNFLE9BQU8seUJBQXlCLENBRDNCLENBRU47QUFBQSxHQUNIO0FBQUEsNENDd01FLFFBQVEsQ0FDVjtBQUFBO0FBQUE7QUFBQSxNbEJ0RmdCO0FBQUEsc0JBQ0YsMkJBQ0gsZ0JBQ0E7QUFBQSxRQUVUO0FBQUEsb0JBQ1c7QUFBQSxTQUVUO0FBQUEsU0FDQSxPQUFPO0FBQUE7QUFBQSxnQkFHRCx1Q0FDRTtBQUFBLFFBQ1YsWUFBVztBQUFBLFNBQ1QsV0FBVztBQUFBLFFBQ2IsWUFBWTtBQUFBLE9BaEJHO0FBQUEsT0FBRDtBQUFBO0FBQUEsYW1CN0dQLGdCQUNGLGVBQ0MsaUJBQ0U7QUFBQSxJQUNSO0FBQUEsWUFDTSxPQUNGO0FBQUEsSUFDSixtQkFBb0I7QUFBQSxJQUNwQix1QkFBd0I7QUFBQSxJQUN4QixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFxREU7QUFBQSxLQUFjLFlBQ0Qsa0JBQW9CO0FBQUE7QUFBQSxLQUMxQixZQUNNLGtCQUFvQjtBQUFBLElBRWpDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQXpDUTtBQUFBLElBQ047QUFBQSxhQUNRO0FBQUEsS0FDTixZQUFXLHNCQUF3QjtBQUFBLEtBQ25DO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXlFRSxZQUFXLGlCQUFtQjtBQUFBLElBRzlCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQVZFLDJDQUE0QztBQUFBLElBQzVDLHVCQUF1QjtBQUFBLEdBQ3pCO0FBQUE7QUFBQSxJQTJDRSxzQ0FBeUM7QUFBQSxjQUNqQyxpQkFDQTtBQUFBLElBQ1I7QUFBQSxJQUNBLFlBQVcsaUJBQW1CO0FBQUEsSUFDOUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxtQ3RCa3BCRSxPQUFPLDRCQUE0QixDQUNyQztBQUFBLG9DQVJFLE9BQU8sNkJBQTZCLENBQ3RDO0FBQUE7QUFBQSxJc0Ixc0JFLDJDQUE0QztBQUFBLElBQzVDO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsYUF0SFc7QUFBQSxJQUNUO0FBQUEsSUFDQSxhQUFZLFFBQVEsOEJBQWdDO0FBQUEsSUFHcEQsU0FBUztBQUFBLEdBQ1g7QUFBQSxnQ0h5UEUsT0FBTyxhQUFhLENBQ3RCO0FBQUEsZ0NBT0UsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQSxJSW5QRSxpQkFDRSxZQUNBLFFBQVE7QUFBQSxJQUVWLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQStCUTtBQUFBLElBQ047QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQW5CVTtBQUFBLElBQ1I7QUFBQSxJQUNBLFVBQVU7QUFBQSxHQUNaO0FBQUEsa0NBbkNFLGFBQWEsQ0FDZjtBQUFBLDBDQStERSxhQUFhLENBQ2Y7QUFBQTtBQUFBLElSOGpCRTtBQUFBLEtBQ0U7QUFBQSxJQUNGLFlBQVc7QUFBQSxLQUNUO0FBQUEsTUFDRTtBQUFBLElBQ0o7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXBMRSx5QkFBMEIsU0FBUztBQUFBLG1CQUN0QjtBQUFBLElBQ2IsWUFBVztBQUFBLEtBQ1Q7QUFBQSxJQUNGLE9BQU8seURBQXlEO0FBQUEsR0FDbEU7QUFBQSx5Q0F4Q0UsT0FBTyxtQkFBbUIsQ0FDNUI7QUFBQTtBQUFBO0FBQUEsSUF2UUU7QUFBQTtBQUFBLE9BRUkscUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEsa0JBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsb0JBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsb0JBQ0E7QUFBQTtBQUFBLElBRUosV0FBVztBQUFBLGVBQ0EsZ0JBQWdCO0FBQUEsSUFDM0IsV0FBVztBQUFBLEdBQ2I7QUFBQSxrQ1RSRSxPQUFPLFVBQVUsQ0FDbkI7QUFBQTtBQUFBO0FBQUEsWVN5UGE7QUFBQSxZQUNBLDRCQUE0QjtBQUFBLElBQ3ZDLE9BQU8sK0NBQStDO0FBQUEsR0FDeEQ7QUFBQTtBQUFBLElBZ2VFLFlBQWE7QUFBQSxLQUNYO0FBQUE7QUFBQSxJQUlGLE9BQU8sZ0RBQWdEO0FBQUEsR0FDekQ7QUFBQSx1Qkk3N0JvQixhQUFhO0FBQUE7QUFBQSxJQStIL0I7QUFBQSxJQUNBLE9BQU8saUNBQWlDO0FBQUEsR0FDMUM7QUFBQTtBQUFBLElSMlRFLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGFRdFdTLFdBQ0EsV0FDQTtBQUFBLElBSVAsMkRBQThEO0FBQUEsSUFDOUQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPLGlDQUFpQztBQUFBLEdBQzFDO0FBQUE7QUFBQSxJWjVFRTtBQUFBLEtBQ0UsaUNBQWlDO0FBQUEsSUFDbkM7QUFBQSxHQUNGO0FBQUE7QUFBQSxtQlF5eUJpQjtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUE7QUFBQSxXQUNRO0FBQUEsWUFDRDtBQUFBLGNBQ0U7QUFBQSxZQUNGO0FBQUEsSUFDVDtBQUFBLEtBQ0UsWUFBVztBQUFBLHFCQUNNO0FBQUEsTUFDZjtBQUFBLHlCQUNvQixnQ0FDQTtBQUFBLE9BQ2xCO0FBQUEsUUFDRTtBQUFBLE9BQ0Y7QUFBQTtBQUFBLE1BRUY7QUFBQTtBQUFBO0FBQUEsS0FFQyxZQUFXLHNCQUF3QixVQUFVO0FBQUE7QUFBQSxZQUN2QztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsSUFDVDtBQUFBO0FBQUEsT0FFSSxZQUFXLGtCQUFvQixVQUNuQixpQkFFWjtBQUFBO0FBQUE7QUFBQSxPQUdBLFlBQVcsa0JBQW9CLFVBQ25CLGlCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQTtBQUFBLG1CQUdZO0FBQUEsT0FDWjtBQUFBLFFBQ0U7QUFBQTtBQUFBLE9BR0YsWUFBVyxrQkFBb0IsVUFDbkI7QUFBQSxPQUVaO0FBQUE7QUFBQSxlQUVRO0FBQUEsT0FDUixZQUFXO0FBQUEsUUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxvQkFDdkI7QUFBQSxRQUNaO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxlQUVRO0FBQUEsT0FDUixZQUFXO0FBQUEsUUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxnQkFDM0IseUJBQXlCO0FBQUEsUUFDakM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLE9BRUEsWUFBVyxrQkFBb0IsVUFDbkIsa0JBRVo7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNELHlCQUF5QjtBQUFBLFFBQ2pDO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxPQUVBLFlBQVc7QUFBQTtBQUFBLGNBQ0EseUJBQXlCO0FBQUEsY0FDekIseUJBQXlCO0FBQUEsUUFDbEM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLGVBRVE7QUFBQSxPQUNSLFlBQVc7QUFBQSxRQUNULFlBQVcsZUFBaUIsT0FBTztBQUFBLGlCQUMxQix5QkFBeUI7QUFBQSxRQUNsQyxZQUFXLGVBQWlCLE9BQU87QUFBQSxpQkFDMUIseUJBQXlCO0FBQUEsUUFDbEM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLElBRUo7QUFBQSxJQUNBLE9BQU8sK0NBQStDO0FBQUEsR0FDeEQ7QUFBQTtBQUFBLElBNWJFLGlDQUFrQztBQUFBLElBQ2xDLGlCQUFpQjtBQUFBLEdBQ25CO0FBQUEsOEJBS0UsT0FBTyxrQkFBa0IsQ0FDM0I7QUFBQSw4QkFLRSxPQUFPLGtCQUFrQixDQUMzQjtBQUFBLDhCQUtFLE9BQU8sa0JBQWtCLENBQzNCO0FBQUEsZ0NBeUhFLFlBQ0EsUUFBUSxDQUNWO0FBQUE7QUFBQTtBQUFBLElBNmJFO0FBQUEsS0FBZ0M7QUFBQTtBQUFBLEtBQ0s7QUFBQTtBQUFBLEtBQ0g7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQ087QUFBQTtBQUFBLEtBQ1A7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQ0Q7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQy9CO0FBQUEsSUFDTCxXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUE7QUFBQSxZQU1hO0FBQUE7QUFBQSxPQUNKO0FBQUEsVUFJRDtBQUFBO0FBQUEsSUFFTixPQUFPLCtDQUErQztBQUFBLEdBQ3hEO0FBQUEsa0NBaGlCRSxPQUFPLE9BQU8sY0FBYyxDQUM5QjtBQUFBLHNDQUlFLE9BQU8sT0FBTyxvQkFBb0IsQ0FDcEM7QUFBQTtBQUFBLElBSUUsT0FBTyxPQUFPLHdCQUF3QjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxjQXZEWSxVQUFVO0FBQUEsSUFDcEIsT0FBTyxXQUFXO0FBQUEsR0FDcEI7QUFBQSwyQlN6WkUsT0FBTyxlQUFlLENBQ3hCO0FBQUE7QUFBQSxJQ3JIRSxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsSUFBSTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQSxnREFBb0Q7QUFBQSxHQUN0RDtBQUFBO0FBQUEsSVZvaENFO0FBQUEsS0FBbUQ7QUFBQSwwQkFFMUI7QUFBQSxJQUl6QixPQUFPLDBCQUEwQjtBQUFBLEdBQ25DO0FBQUE7QUFBQSxJSTlnQ0U7QUFBQSxJQUNBLE9BQU8sb0NBQW9DO0FBQUEsR0FDN0M7QUFBQTtBQUFBLFlKa2hDVTtBQUFBLElBRVI7QUFBQSxLQUE2RDtBQUFBLG9DQUUxQjtBQUFBLElBTW5DLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxHQUNiO0FBQUEsbURKbHBCRSxPQUFPLHVCQUF1QjtBQUFBLEdBQ2hDO0FBQUE7QUFBQSxJUS9aRTtBQUFBO0FBQUEsWUFDVztBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUlQLDJEQUE4RDtBQUFBLElBQzlELE9BQU8sc0NBQXNDO0FBQUEsR0FDL0M7QUFBQTtBQUFBO0FBQUEsV01VWTtBQUFBLFNBQ0Y7QUFBQSxTQUNBO0FBQUEsSUFFUiwrREFDRSxnQkFDQTtBQUFBLCtDQUM0QztBQUFBLElBTTlDLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxHQUNiO0FBQUE7QUFBQSxtQlZ3NUJpQiwrQkFDVDtBQUFBLElBQ047QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUlJLG1CQUFvQjtBQUFBLGVBQ2QsT0FDRjtBQUFBLE9BQ0o7QUFBQSxRQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJO0FBQUE7QUFBQSxPQUVOO0FBQUEsT0FDQTtBQUFBO0FBQUEsVUFHSTtBQUFBO0FBQUEsVUFJQTtBQUFBO0FBQUEsVUFHQSxxQkFDQSxJQUFJO0FBQUE7QUFBQSxPQUVSO0FBQUE7QUFBQTtBQUFBLE9BR0EsbUJBQW9CO0FBQUEsZUFDZCxPQUNGO0FBQUEsT0FDSjtBQUFBLFFBQ0U7QUFBQSxRQUNBLElBQUk7QUFBQTtBQUFBLE9BRU4seUJBQTBCLElBQUk7QUFBQSxPQUM5QjtBQUFBO0FBQUEsT0FFQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXLHNCQUF3QixJQUFJO0FBQUEsT0FDdkM7QUFBQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXLHNCQUF3QixJQUFJO0FBQUEsT0FDdkM7QUFBQTtBQUFBLE9BRUEsa0JBQW1CO0FBQUEsT0FDbkI7QUFBQSxPQUNBLFlBQVcsc0JBQXdCLElBQzdCO0FBQUEsT0FFTjtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXO0FBQUEsUUFDVCxJQUFJO0FBQUEsT0FDTjtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXO0FBQUEsUUFBd0IsSUFBSTtBQUFBLE9BQ3ZDO0FBQUE7QUFBQSxPQUVBLG1CQUFvQjtBQUFBLE9BQ3BCLFlBQVc7QUFBQSxRQUF3QixJQUM3QjtBQUFBLE9BRU47QUFBQTtBQUFBLElBRUosUUFBUTtBQUFBLEdBQ1Y7QUFBQSwyQkEvZ0NFLFFBQVEsQ0FDVjtBQUFBLDZCQTRkRSxjQUFjLENBQ2hCO0FBQUEsK0JBSUUsZ0JBQWdCLENBQ2xCO0FBQUEseUVOcE5FO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFNRSxPQUFPO0FBQUEsa0VBQXNFO0FBQUEsR0FDL0U7QUFBQSxpQ01nTkUscUJBQXFCLENBQ3ZCO0FBQUE7QUFBQSxJQWdPRSxPQUFPO0FBQUEsa0JBQ0ssZUFDQztBQUFBLElBRWI7QUFBQSxLQUNFO0FBQUEsbUJBRVc7QUFBQSxJQUNiLFlBQVc7QUFBQSxLQUNUO0FBQUEsS0FDQTtBQUFBLE1BQ0U7QUFBQSxLQUNGO0FBQUE7QUFBQSxlQUdTO0FBQUEsSUFFWDtBQUFBLEtBQ0U7QUFBQSxJQUNGLE9BQU8sMkRBQTJEO0FBQUEsR0FDcEU7QUFBQSxtQ0poU0UsT0FBTyxXQUFXLENBQ3BCO0FBQUE7QUFBQSxJSXNTRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsS0FDRSxZQUFXO0FBQUEsTUFBOEI7QUFBQSxPQUNkO0FBQUE7QUFBQSxPQUV2QjtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBLEtBR0QsWUFBVyw0QkFBOEI7QUFBQSxJQUM5QztBQUFBO0FBQUE7QUFBQTtBQUFBLE9BSUksWUFBVyw0QkFDVDtBQUFBLE9BRUY7QUFBQTtBQUFBO0FBQUEsT0FHQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUE7QUFBQSxPQUdBO0FBQUEsT0FDQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXO0FBQUEsZ0JBQ0Qsb0JBQW9CO0FBQUEsUUFDNUIsWUFBVyxlQUFpQjtBQUFBO0FBQUEsT0FFOUI7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNELG9CQUFvQix5QkFBeUI7QUFBQSxRQUNyRCxZQUFXLGVBQWlCO0FBQUE7QUFBQSxPQUU5QjtBQUFBO0FBQUEsT0FFQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXO0FBQUEsZ0JBQ0QseUJBQXlCO0FBQUEsUUFDakM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNEO0FBQUEsUUFDUixpQkFBaUI7QUFBQSxRQUNqQixpQkFBaUI7QUFBQTtBQUFBLE9BRW5CO0FBQUE7QUFBQSxPQUVBLFlBQVc7QUFBQTtBQUFBLG1CQUNLO0FBQUEsYUFDTixvQkFBb0I7QUFBQSxRQUM1QixZQUFXLGVBQWlCO0FBQUEsZ0JBQ3BCLG9CQUFvQjtBQUFBLFFBQzVCLFlBQVcsZUFBaUI7QUFBQTtBQUFBLE9BRTlCO0FBQUE7QUFBQSxJQUVKO0FBQUEsSUFDQTtBQUFBLEdBQ0Y7QUFBQSxxQ0EzTUUsT0FBTyxtQkFDUCxRQUFRLENBQ1Y7QUFBQTtBQUFBLElBSUUsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBSUUsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBcERFLE9BQU8sVUFBVTtBQUFBLElBQ2pCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQW1HRSxPQUFPO0FBQUEsbUJBQ00scUJBQ0gsZUFDRztBQUFBLElBR2I7QUFBQSxLQUNFO0FBQUEsSUFHRjtBQUFBLEtBQ0UsWUFBVyxzQkFBd0I7QUFBQSxLQUNuQywrQkFBZ0M7QUFBQSxLQUNoQyxXQUFXO0FBQUE7QUFBQTtBQUFBLEtBRVgsWUFBVztBQUFBLE1BQ1Q7QUFBQSxLQUNGLFlBQVcsdUNBQXlDO0FBQUEsS0FDcEQsV0FBVztBQUFBO0FBQUEsSUFFYixNQUFNO0FBQUE7QUFBQSxZQUNLO0FBQUEsd0JBQ1k7QUFBQTtBQUFBLE9BQ1I7QUFBQTtBQUFBLElBSWYsT0FBTyw2REFBNkQ7QUFBQSxHQUN0RTtBQUFBO0FBQUEsMkJBcERVO0FBQUEsSUFDUjtBQUFBLEtBQ0UsWUFBVyw0QkFBOEI7QUFBQSxLQUN6QztBQUFBO0FBQUE7QUFBQSxLQUVBLFlBQVcsZ0NBQWtDO0FBQUEsS0FDN0M7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsS0FDRTtBQUFBLG1CQUVXO0FBQUEsSUFDYixZQUFXLDRCQUE4QjtBQUFBLElBQ3pDO0FBQUEsSUFDQSxPQUFPO0FBQUEsbUJBQ1E7QUFBQSxJQUNmLE9BQU8sNkRBQTZEO0FBQUEsR0FDdEU7QUFBQSx1Q0FpWkUsY0FBYyxDQUNoQjtBQUFBO0FBQUEsY0F0aUJZO0FBQUEsSUFDViw4QkFBK0I7QUFBQSxhQUN0QixrQkFDQTtBQUFBLElBQ1QsbUJBQXFCO0FBQUEsR0FDdkI7QUFBQTtBQUFBLGNBS1k7QUFBQSxJQUNWLDhCQUErQjtBQUFBO0FBQUEsVUFDdEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUNULDhDQUFzRDtBQUFBLEdBQ3hEO0FBQUE7QUFBQSxjQUtZO0FBQUEsSUFDViw4QkFBK0I7QUFBQTtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ1QsT0FBTyxxREFBcUQ7QUFBQSxHQUM5RDtBQUFBO0FBQUEsY0EyQlk7QUFBQSxJQUNWLDhCQUErQjtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBS1k7QUFBQSxJQUNWLDhCQUErQjtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FLWTtBQUFBLElBQ1YsOEJBQStCO0FBQUEsWUFDdkI7QUFBQSxJQUNSLFlBQVcsZUFBaUI7QUFBQSxJQUM1QixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSVhqbEJFLGlEQUFpRDtBQUFBLEdBQ25EO0FBQUE7QUFBQSxJWUdFO0FBQUEsS0FDRTtBQUFBLElBQ0Y7QUFBQSxLQUNFO0FBQUEsSUFDRixjQUFlLFFBQVE7QUFBQSxlQUNaLHlCQUNBO0FBQUEsSUFDWCxpQ0FDRTtBQUFBLElBRUYsaUNBQ0U7QUFBQSxnQkFFVTtBQUFBLElBQ1o7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQTZDRTtBQUFBLEtBQ0U7QUFBQSxJQUNGLGNBQWUsUUFBUTtBQUFBLGVBQ1o7QUFBQSxJQUNYLGlDQUNFO0FBQUEsSUFFRixnQkFBaUIsOEJBQ2Y7QUFBQSxnQkFFVTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBakNFO0FBQUEsS0FDRTtBQUFBLElBQ0YsY0FBZSxRQUFRO0FBQUEsZUFDWjtBQUFBLElBQ1gsZ0JBQWlCLDRCQUNmO0FBQUEsSUFFRixpQ0FDRTtBQUFBLGdCQUVVO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaENFO0FBQUEsS0FDRTtBQUFBLElBQ0YsY0FBZSxRQUFRO0FBQUEsZUFDWjtBQUFBLElBQ1gsZ0JBQWlCLDZCQUNmO0FBQUEsSUFFRixpQ0FDRTtBQUFBLGdCQUVVO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBL0NFLFlBQVc7QUFBQSxhQUNELGlDQUNBO0FBQUEsS0FDUixVQUFXLFVBQVM7QUFBQSxLQUNwQixVQUFXLFFBQVE7QUFBQTtBQUFBLElBRXJCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQ3VRRSxNQUFNO0FBQUEsSUFDTixvQkFDRTtBQUFBLElBRUYsT0FBTywwQkFBMEI7QUFBQSxHQUNuQztBQUFBO0FBQUEsWUFRVTtBQUFBLElBQ1IsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBO0FBQUEsZ0JBT2M7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FtQlk7QUFBQSxJQUNWO0FBQUEsSUFDQSxPQUFPLCtCQUErQjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxJakJpTkUsZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw0QndCcFpFLDRDQUFnRCxDQUNsRDtBQUFBLGdDeEIwZTZCO0FBQUE7QUFBQSxJQVEzQixHQUFJLGtCQUFrQixRQUFRO0FBQUE7QUFBQTtBQUFBLE9BQ3hCO0FBQUEsVUFFQTtBQUFBLFVBQ0E7QUFBQSxJQUNOLFlBQVcsc0JBQXdCLE9BQzFCO0FBQUEsSUFFVCxPQUFPLDJCQUEyQjtBQUFBLEdBQ3BDO0FBQUE7QUFBQSxZSzVhUSxVQUNFO0FBQUEsSUFDUjtBQUFBLEtBQVUsWUFDRztBQUFBLGdCQUNEO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixFQUFFO0FBQUE7QUFBQSxJQUdOO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUxvTEUsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osOENBQTZDO0FBQUEsR0FDL0M7QUFBQTtBQUFBLElBS0UsY0FBZSxRQUFRO0FBQUEsSUFDdkIsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osNEJBQTRCO0FBQUEsR0FDOUI7QUFBQTtBQUFBLElBaFdFO0FBQUE7QUFBQSxPQUVJLE9BQU8saUJBQWlCO0FBQUE7QUFBQSxPQUV4QixvQkFBcUIsUUFBUSxFQUM3QixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsYUFBYTtBQUFBO0FBQUEsR0FFbkI7QUFBQTtBQUFBLElBNkdFLG1CQUFvQjtBQUFBLElBQ3BCLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQTtBQUFBLElBM0RFLHVCQUF3QjtBQUFBO0FBQUEsVUFDZjtBQUFBLFVBQ0Y7QUFBQSxJQUNQLG1CQUFxQjtBQUFBLEdBQ3ZCO0FBQUE7QUFBQSxJQWlCRSx1QkFBd0I7QUFBQTtBQUFBLFVBQ2Y7QUFBQSxVQUNGO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUNQLHlDQUErQztBQUFBLEdBQ2pEO0FBQUE7QUFBQSxJQW1CRSx1QkFBd0I7QUFBQSxZQUNoQjtBQUFBLElBQ1IsWUFBVyxlQUFpQixXQUNmO0FBQUEsSUFFYixPQUFPLHNCQUFzQjtBQUFBLEdBQy9CO0FBQUE7QUFBQSxJQWdRRSxZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWiwyQkFBMkI7QUFBQSxHQUM3QjtBQUFBLDRDQWtCRSxPQUFPLDRCQUE0QjtBQUFBLEdBQ3JDO0FBQUE7QUFBQSxJQWRFLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLDBCQUEwQjtBQUFBLEdBQzVCO0FBQUEsMkNBc0JFLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQSx3Q0F4Q0UsV0FBVyx3QkFBd0IsQ0FDckM7QUFBQTtBQUFBLElBNUtFLEdBQUk7QUFBQSxLQUFrQixPQUNiLDJCQUEyQjtBQUFBO0FBQUEsYUFFMUI7QUFBQSxLQUNSLE9BQU8sMkJBQTJCO0FBQUE7QUFBQSxHQUV0QztBQUFBO0FBQUEsSUExREUsdUJBQXdCO0FBQUEsYUFDakIsc0JBQ0Y7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBS0UsdUJBQXdCO0FBQUE7QUFBQSxVQUNqQjtBQUFBLFVBQ0Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQU1FLHVCQUF3QjtBQUFBLFlBQ2hCO0FBQUEsSUFDUixZQUFXLGVBQ1Q7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUJNM0xrQjtBQUFBLCtCYXlOaEIsT0FBTyxZQUFZLENBQ3JCO0FBQUE7QUFBQTtBQUFBLE1qQnRLSSxXQUFXO0FBQUEsTUFDWCxjQUFjO0FBQUEsS0FGaEI7QUFBQSxtQkFNRSwyQkFERjtBQUFBLGlCQUtFLE9BQU8sb0JBQW9CLENBRDdCO0FBQUE7QUFBQSxNQUtFLGVBQWdCO0FBQUEsTUFDaEIsT0FBTyx5QkFBeUI7QUFBQSxLQUZsQztBQUFBLFdBTUUsT0FBTyxvQkFBb0IsQ0FEN0I7QUFBQTtBQUFBLDBCQUtxQjtBQUFBLG9DQUtyQixPQUFPLHdCQUF3QixDQUNqQztBQUFBO0FBQUEsZUFzR2E7QUFBQSxJQUNYLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsSW9CaEZFLG9DQUFxQztBQUFBLElBQ3JDLFlBQVk7QUFBQSxHQUNkO0FBQUE7QUFBQSxJSGxDRSxHQUFJO0FBQUEsS0FDRixHQUFJLHdDQUF3QyxRQUFRO0FBQUEsS0FDcEQsWUFBYSxRQUFRO0FBQUEsS0FDckIsUUFBUTtBQUFBO0FBQUEsSUFFVixPQUFPLHVCQUF1QjtBQUFBLEdBQ2hDO0FBQUEsd0NDOEhFLHdCQUF3QixDQUMxQjtBQUFBLCtDbkJwRUUsYUFDQSxPQUFPLGdCQUFnQjtBQUFBLEdBQ3pCO0FBQUE7QUFBQSxJQUtFLE9BQVE7QUFBQTtBQUFBLE9BRUosYUFDQSxPQUFPLGdCQUFnQjtBQUFBO0FBQUEsT0FFdkIsOERBQ0E7QUFBQSxlQUVBO0FBQUE7QUFBQSxHQUVOO0FBQUE7QUFBQSxZQWxDVTtBQUFBLElBQ1IsWUFBVyxlQUFpQixPQUFPO0FBQUEsSUFDbkM7QUFBQSxJQUNBLE9BQU8sc0JBQXNCO0FBQUEsR0FDL0I7QUFBQTtBQUFBLFlBS1U7QUFBQSxJQUNSLFlBQVcsZUFBaUI7QUFBQSxJQUM1QjtBQUFBLElBQ0E7QUFBQSxHQUNGO0FBQUEsNkNVbURFLE9BQU8sWUFBWSxDQUNyQjtBQUFBLCtCQW1ORSxPQUFPLFdBQVcsUUFBUSxDQUM1QjtBQUFBO0FBQUE7QUFBQSxNVjdPb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBa0JkLE9BQU8sNENBQTRDO0FBQUEsUUFEeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQVNYLE9BQU8sNENBQTRDO0FBQUEsUUFEeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEl5QnZOZjtBQUFBLG9EQUVDO0FBQUEsR0FDSDtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1g7QUFBQSxhQUNRLFdBQWEsMkJBQTJCO0FBQUEsS0FDOUMsWUFBYSxpQkFBaUIsV0FBVztBQUFBLEtBQ3pDLEdBQUksbUJBQWtCLFVBQVM7QUFBQSxLQUMvQixrQkFBbUIsWUFBWTtBQUFBO0FBQUEsSUFFakMsV0FBVztBQUFBLEdBQ2I7QUFBQTtBQUFBLElBL0NFO0FBQUEsS0FDRSxXQUFXO0FBQUEsWUFDSjtBQUFBLEtBQ1AsVUFBVTtBQUFBLFlBQ0g7QUFBQSxLQUNQLFdBQVc7QUFBQSxZQUNKLGtFQUVDLFVBR1IsNEJBQTRCO0FBQUE7QUFBQSxLQUU1QixZQUFZO0FBQUE7QUFBQSxLQUVaLFlBQVk7QUFBQTtBQUFBLEtBRVosV0FBVztBQUFBO0FBQUEsS0FFWCxXQUFXO0FBQUE7QUFBQSxLQUVYLFdBQVc7QUFBQTtBQUFBLEtBRVgsV0FBVztBQUFBLG1DQUNtQixXQUFXO0FBQUEsSUFDM0MsV0FBVztBQUFBLEdBQ2I7QUFBQTtBQUFBLElBMk5FLFVBQVcsVUFBUztBQUFBLElBQ3BCLFlBQWEsUUFBUTtBQUFBLElBQ3JCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJMUJpVkUsc0NBQXFDO0FBQUEsR0FDdkM7QUFBQTtBQUFBLGdCMEJsaEJZO0FBQUEsSUFDVjtBQUFBLEtBQ0U7QUFBQSxrQkFDYztBQUFBLE1BRVosa0JBQ0UsVUFDQTtBQUFBLGtCQUdVO0FBQUEsTUFFWixrQkFDRSxVQUNBO0FBQUEsTUFJRjtBQUFBLE9BQ0U7QUFBQSxRQUNFO0FBQUEsU0FBb0IsT0FFWCxnREFBK0M7QUFBQSxRQUV4RCxVQUFTO0FBQUE7QUFBQSxPQUVYO0FBQUEsUUFDRTtBQUFBLFNBQW9CLE9BRVgsOENBQThDO0FBQUEsUUFFdkQsUUFBUTtBQUFBO0FBQUEsT0FFViw4QkFBNkI7QUFBQTtBQUFBLE1BRy9CO0FBQUE7QUFBQSxTQUlJLG9EQUNBO0FBQUE7QUFBQSxpQkFFUTtBQUFBLFNBQ1IsWUFBYSxRQUFRO0FBQUEsU0FDckI7QUFBQTtBQUFBLFNBR0Esb0RBQ0E7QUFBQTtBQUFBLFNBR0E7QUFBQSxTQUNBO0FBQUE7QUFBQSxTQUVBLGdEQUNBO0FBQUE7QUFBQSxTQUVBO0FBQUEsa0JBQ1U7QUFBQSxVQUNSLFlBQWEsUUFBUTtBQUFBO0FBQUEsU0FFdkI7QUFBQTtBQUFBLFNBR0E7QUFBQSxTQUNBO0FBQUE7QUFBQSxTQUdBO0FBQUE7QUFBQSxTQUdBO0FBQUE7QUFBQSxTQUVBO0FBQUEsU0FDQTtBQUFBO0FBQUEsU0FFQSxvREFDQTtBQUFBO0FBQUEsb0JBRVc7QUFBQSxTQUNYLFlBQWE7QUFBQSxVQUFnQyw4Q0FDRTtBQUFBLFNBRS9DLFdBQVc7QUFBQSxpQkFDSDtBQUFBLFNBQ1IsR0FBSSxpQkFBaUIsc0JBRUU7QUFBQSxTQUV2QixrQkFBbUIsVUFFUjtBQUFBLFNBRVgsWUFBYSxZQUFZO0FBQUEsU0FDekI7QUFBQTtBQUFBLGlCQUVRO0FBQUEsU0FDUixHQUFJLGlCQUFpQixzQkFFRTtBQUFBLFNBRXZCLGtCQUFtQixVQUVSO0FBQUEsU0FFWCxZQUFhLFlBQVk7QUFBQSxTQUN6QjtBQUFBO0FBQUEsU0FFQTtBQUFBLFNBQ0E7QUFBQSxTQUNBLFVBQVcsVUFBUztBQUFBLFNBQ3BCLFVBQVcsUUFBUTtBQUFBLFNBQ25CO0FBQUEsVUFDRSxZQUFZLGlCQUFpQjtBQUFBLFVBQzdCLEtBQUssaUJBQWlCLFFBQVE7QUFBQSxVQUM5QixLQUFLLGlCQUFpQixVQUFTO0FBQUE7QUFBQSxTQUVqQztBQUFBO0FBQUEsU0FhQSxVQUFXLFVBQVM7QUFBQSxTQUNwQixVQUFXLFFBQVE7QUFBQSxTQUNuQixZQUFhLDZCQUNrQjtBQUFBLFNBRS9CO0FBQUE7QUFBQSxTQUVBLFlBQWEsNkJBQ2tCLEVBRS9CO0FBQUE7QUFBQSxpQkFFUSwrQkFDQTtBQUFBLFNBQ1IsWUFDRSxVQUFXLFVBQVMsRUFDcEIsVUFBVyxRQUFRO0FBQUEsU0FFckI7QUFBQTtBQUFBLGlCQUVRLGtCQUNBO0FBQUEsU0FDUixZQUNFLFVBQVcsVUFBUyxFQUNwQixVQUFXLFFBQVE7QUFBQSxTQUVyQjtBQUFBO0FBQUEsU0FFQSxHQUFJO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQTtBQUFBLFNBRUYsMEJBQTJCLG9DQUFtQztBQUFBLFNBQzlELGlCQUFrQjtBQUFBLFNBQ2xCO0FBQUE7QUFBQTtBQUFBLEtBR04sdUJBQXdCLFFBQVE7QUFBQSxhQUN4QjtBQUFBLEtBQ1IsSUFBSTtBQUFBLEtBQ0osSUFBSTtBQUFBLEtBQ0oscUJBQXNCO0FBQUEsS0FDdEI7QUFBQSxLQUNBO0FBQUE7QUFBQSxHQUVKO0FBQUEsK0JBTUUsT0FBTyw0QkFBNEIsQ0FDckM7QUFBQTtBQUFBLGdCTGRZO0FBQUEsSUFDVjtBQUFBLElBQ0EsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBO0FBQUEsZ0JBV2M7QUFBQSxJQUNaLGdCQUFpQixZQUFZO0FBQUEsZUFDcEI7QUFBQSxJQUNUO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFlBQVk7QUFBQSxHQUNkO0FBQUEseUNqQnpNRSxVQUFVLENBQ1o7QUFBQTtBQUFBLElBMEJFO0FBQUEsR0FDRjtBQUFBO0FBQUEsSWVxSUUsWUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLElBQ0osc0JBQXFCO0FBQUEsR0FDdkI7QUFBQSwrQkFtQ0UsT0FBTyxZQUFZLENBQ3JCO0FBQUE7QUFBQSxJTC9PRSx1REFBdUQ7QUFBQSxHQUN6RDtBQUFBO0FBQUE7QUFBQSxLTDRCSSxHQUFJLHdCQUF3QixZQUFZLGNBQWM7QUFBQSxLQUN0RCxNQUFNO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSW9CO0FBQUEsZUFFTDtBQUFBLGVBQ0Y7QUFBQSxjQUNELHFCQUF1QjtBQUFBLEtBR2pDO0FBQUEsaUJBQ1csdUJBQ0Q7QUFBQSxNQUNSLGNBQWMscUNBQXFDO0FBQUE7QUFBQSxLQUVyRCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0Esb0NBQW9DO0FBQUEsR0FDdEM7QUFBQSwwQkFDdUI7QUFBQTtBQUFBLElBdERyQixPQUFPLDJDQUEwQztBQUFBLEdBQ25EO0FBQUEsR0FJQSxHQUFJO0FBQUEsMkJBQ3FCO0FBQUE7QUFBQSwyQkFDQztBQUFBLEdBQzFCLG1CQUFtQjtBQUFBO0FBQUEsSUFvRGpCLE9BQU87QUFBQSxJQUNQLEtBQUssd0JBQXdCO0FBQUE7QUFBQSxhQUNqQjtBQUFBLFlBQ0Q7QUFBQSxhQUNEO0FBQUEsSUFDVixZQUFXO0FBQUEsS0FBMkI7QUFBQTtBQUFBLFFBR2hDLGFBQ0E7QUFBQSxpQkFFQTtBQUFBLGdCQUVBO0FBQUEsZ0JBRUEscUJBQ0E7QUFBQTtBQUFBLElBR047QUFBQSxJQUNBO0FBQUEsSUFDQSxZQUFZO0FBQUEsR0FDZDtBQUFBO0FBQUEsWUFyRVU7QUFBQSxJQUNSLFFBQVEsTUFBTTtBQUFBLElBQ2QsaUJBQWlCO0FBQUEsR0FDbkI7QUFBQTtBQUFBO0FBQUEsTUFLRTtBQUFBLFNBQ0E7QUFBQSx1QkFnRW1CO0FBQUEsR0FDckIsR0FBSTtBQUFBLElBQ0Y7QUFBQSxnQ0FFVTtBQUFBO0FBQUEsSUFHVjtBQUFBLGdDQUVVO0FBQUEsR0FHWjtBQUFBLGdDQUVVO0FBQUE7QUFBQTtBQUFBLFlBaUJHO0FBQUEsWUFDQTtBQUFBLGtCQUNNO0FBQUE7QUFBQSxJQUVqQixZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxPQUNFO0FBQUE7QUFBQSxNQUdBO0FBQUE7QUFBQTtBQUFBLGNBR1E7QUFBQTtBQUFBLElBR1osWUFBWTtBQUFBLGdCQUNDO0FBQUEsS0FDWCxHQUFRO0FBQUEsY0FDQSxxQkFBd0I7QUFBQSxNQUM5QjtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUEsY0FHUTtBQUFBO0FBQUE7QUFBQSxJQUlaLFFBQVMsVUFBVTtBQUFBLElBQ25CO0FBQUEsR0FDRjtBQUFBO0FBQUEsZUFzS2E7QUFBQSxJQUNYLDJCQUEyQjtBQUFBLElBQzNCO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLHFDVCtDRSx1Q0FDRjtBQUFBLGlDMkJsWTRCO0FBQUE7QUFBQSxJUGlTMUIsT0FBTyw0Q0FBNEM7QUFBQSxHQUNyRDtBQUFBO0FBQUE7QUFBQSxNUWxTc0I7QUFBQTtBQUFBLGNBRWI7QUFBQSxjQUNGO0FBQUEsZUFDQztBQUFBLGVBQ0E7QUFBQSxlQUNBO0FBQUE7QUFBQSxTQUVKLHVCQUF3QixPQUFPLGdDQUFnQztBQUFBLFNBQy9ELHVCQUF3QjtBQUFBLFNBQ3hCLDhCQUErQjtBQUFBLGlCQUN2QjtBQUFBLFNBQ1IsTUFBTTtBQUFBLFNBQ04sUUFBUTtBQUFBLFFBTkE7QUFBQTtBQUFBLFNBU1Isc0JBQXVCLE9BQU8sa0NBQWtDO0FBQUEsU0FDaEUsdUJBQXdCO0FBQUEsU0FDeEIsOEJBQStCO0FBQUEsU0FDL0Isa0JBQW1CO0FBQUEsU0FDbkIsUUFBUTtBQUFBLFFBTEM7QUFBQTtBQUFBLFNBUVQ7QUFBQSxVQUNFLE9BQU8sd0NBQXdDO0FBQUEsU0FDakQsdUJBQXdCO0FBQUEsU0FDeEIsOEJBQStCO0FBQUEsU0FDL0IsYUFBYztBQUFBLFFBTE47QUFBQTtBQUFBO0FBQUEsV0FhSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQVNHO0FBQUEsU0FDUjtBQUFBLFNBQ0EsU0FBUztBQUFBLFNBQ1QsUUFBUTtBQUFBLFFBSkE7QUFBQTtBQUFBLGlCQU9GLE9BQ0Y7QUFBQSxTQUNKLGtCQUFtQjtBQUFBLFNBQ25CLFFBQVE7QUFBQSxRQUpEO0FBQUE7QUFBQSxTQU9QLHFFQUEyRTtBQUFBLFFBRHBFO0FBQUE7QUFBQSxrQkFLQTtBQUFBLFNBQ1A7QUFBQTtBQUFBLGlCQUVVO0FBQUEsZ0JBRUQ7QUFBQSxnQkFDRjtBQUFBLGdCQUNBO0FBQUEsaUJBQ0M7QUFBQSxVQUNOLFlBQWE7QUFBQSxtQkFFTixhQUVBLHdCQUVFO0FBQUEsVUFDVDtBQUFBO0FBQUEsaUJBRVE7QUFBQSxpQkFFRTtBQUFBLGdCQUVIO0FBQUEsVUFDUDtBQUFBLG9CQUVTO0FBQUEsV0FDUDtBQUFBO0FBQUEsVUFFRixvQkFBcUI7QUFBQSxvQkFDWDtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0NBS3dCO0FBQUE7QUFBQSxxQkFFbkI7QUFBQTtBQUFBO0FBQUEscUJBR0EscUJBQ0o7QUFBQTtBQUFBO0FBQUEsVUFDb0QsT0FFOUMsY0FBYztBQUFBLFNBRXZCO0FBQUEsUUFoRFM7QUFBQTtBQUFBLG9CQW9EQTtBQUFBLFNBQ1Q7QUFBQSxTQUNBLGVBQWU7QUFBQSxRQUhQO0FBQUE7QUFBQSxvQkFRQyxvQkFFRjtBQUFBLFNBQ1AsYUFBYztBQUFBO0FBQUEsZUFFUDtBQUFBLGtCQUVHO0FBQUEsZ0JBQ0o7QUFBQSxlQUNEO0FBQUEsY0FDRDtBQUFBLGVBQ0M7QUFBQSxnQkFFSztBQUFBLGlCQUNDO0FBQUEsbUJBRUU7QUFBQSxtQkFDQTtBQUFBLGdCQUNMO0FBQUEsaUJBQ0c7QUFBQSxrQkFDQztBQUFBLFNBQ1o7QUFBQTtBQUFBLGtCQUNhO0FBQUEsaUJBQ0g7QUFBQSxpQkFFQTtBQUFBO0FBQUEsYUFDQTtBQUFBO0FBQUEsb0JBS0c7QUFBQSxpQkFFSDtBQUFBLGtCQUVDO0FBQUEsVUFDVDtBQUFBLFdBQWdCO0FBQUEsZUFFZCxrQkFDQSxpQkFBa0I7QUFBQSxVQUVwQjtBQUFBLFVBQ0EsZ0JBQ0UsY0FDQSx3QkFDSztBQUFBLFVBQ1A7QUFBQSxXQUFVO0FBQUEsc0JBR0U7QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBSU4sdUJBQXdCO0FBQUEsc0JBQ2IsV0FFRCxtQ0FFQTtBQUFBLFNBQ1YsWUFBVztBQUFBLG1CQUNGO0FBQUEsVUFDUCxXQUNFLGtCQUNBO0FBQUEsVUFHRjtBQUFBLFdBQ0U7QUFBQSxXQUNBLEdBQUc7QUFBQTtBQUFBO0FBQUEsU0FNUCxXQUFZO0FBQUEsU0FDWjtBQUFBLG1CQUVTLHdCQUVBLGdCQUFtQjtBQUFBLFVBQzFCO0FBQUE7QUFBQSxTQUVGLDZEQVFDO0FBQUEsUUEvRlE7QUFBQTtBQUFBO0FBQUEsY0FvR0g7QUFBQSxlQUNEO0FBQUEsZ0JBRUs7QUFBQSxlQUNMO0FBQUEsZUFFSTtBQUFBLGVBRUE7QUFBQSxlQUVBO0FBQUEsU0FFVDtBQUFBLG1CQUVXLDRCQUNILGFBQ0E7QUFBQSxVQUNOO0FBQUEscUJBQ1MsZUFFRjtBQUFBLFVBQ1AsU0FBUztBQUFBO0FBQUEsaUJBRUQ7QUFBQSxpQkFDRjtBQUFBLGtCQUNDO0FBQUEsa0JBQ0E7QUFBQSxrQkFHRSxrQkFBb0I7QUFBQSxVQUM3QjtBQUFBLFdBQ0U7QUFBQSxXQUNBLGdCQUFpQjtBQUFBLHFCQUNUO0FBQUEsV0FDUjtBQUFBO0FBQUEsV0FFQTtBQUFBLFdBQ0E7QUFBQSxXQUNBLGdCQUFpQjtBQUFBLFdBQ2pCO0FBQUEsV0FDQTtBQUFBO0FBQUEsV0FFQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQTtBQUFBLFVBRUYsZUFBZ0I7QUFBQTtBQUFBO0FBQUEsVUFFaEI7QUFBQSxVQUNBO0FBQUEsc0JBQ1c7QUFBQSxXQUNUO0FBQUEsV0FDQTtBQUFBO0FBQUEsVUFFRjtBQUFBO0FBQUEsbUJBR007QUFBQSxTQUNSO0FBQUEsbUJBQ1M7QUFBQSxVQUVQLFlBQWE7QUFBQSxVQUNiO0FBQUE7QUFBQSxrQkFHTyxtQkFFRixlQUVDO0FBQUEsU0FFUixrQkFBcUI7QUFBQSxTQUNyQixXQUFXO0FBQUEsU0FDWDtBQUFBLG1CQUNTO0FBQUEsVUFDUDtBQUFBO0FBQUE7QUFBQSxpQkFHUztBQUFBLGlCQUVBO0FBQUEsZUFDSjtBQUFBLFNBQ1A7QUFBQSxTQUNBO0FBQUEsbUJBQ1M7QUFBQSxVQUNQO0FBQUE7QUFBQSxTQUVGLGlCQUFrQjtBQUFBLFNBQ2xCO0FBQUEscUJBQ1c7QUFBQSxVQUNUO0FBQUEsc0JBQ1c7QUFBQSxXQUNUO0FBQUE7QUFBQTtBQUFBLFNBR0osb0NBT0M7QUFBQSxRQTFHTztBQUFBO0FBQUE7QUFBQSxXQStHZTtBQUFBLGNBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQVFTO0FBQUEsY0FDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQVFVO0FBQUEsY0FDVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBTU4sZUFDRDtBQUFBLFNBQ1AsWUFBVyxpQkFDVCxXQUNBO0FBQUEsU0FFRixTQUFTO0FBQUEsUUFQQTtBQUFBO0FBQUE7QUFBQSxXQVVjO0FBQUE7QUFBQSxhQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBT1M7QUFBQTtBQUFBLFdBRUQ7QUFBQTtBQUFBLGFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBUVM7QUFBQTtBQUFBO0FBQUEsZ0JBR2hCO0FBQUEsZUFDSDtBQUFBLGVBQ0E7QUFBQSxnQkFDQztBQUFBLGVBQ0Q7QUFBQSxTQUNMLFNBQVM7QUFBQTtBQUFBLGVBQ0Y7QUFBQSxnQkFDRDtBQUFBLGdCQUNBLGlCQUFtQjtBQUFBLGNBQ3JCO0FBQUEsU0FDSjtBQUFBO0FBQUEsaUJBQ1U7QUFBQTtBQUFBLGFBQ0E7QUFBQSxVQUVSO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBLFNBRUYsK0JBQWdDO0FBQUEsUUFuQnhCO0FBQUE7QUFBQTtBQUFBLGVBd0JEO0FBQUEsZUFDQTtBQUFBLGdCQUNEO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLFNBQ047QUFBQSxXQUNFO0FBQUEsV0FDQTtBQUFBO0FBQUEsU0FHRjtBQUFBLFdBQ0U7QUFBQSxXQUNBO0FBQUE7QUFBQSxTQUdGO0FBQUEsV0FDRTtBQUFBLFdBQ0E7QUFBQTtBQUFBLFNBR0YsSUFBSSxrQkFBa0I7QUFBQSxRQXJCYjtBQUFBO0FBQUEsc0JBMEJGLFdBRUEsaUJBQ0M7QUFBQSxTQUNSO0FBQUE7QUFBQSxlQUNPO0FBQUEsZ0JBRUM7QUFBQSxTQUNSO0FBQUEsVUFDRSxxQkFBc0IsTUFBTTtBQUFBLFVBQzVCO0FBQUEsVUFDQSxRQUNFLHNDQUNBLFVBQVU7QUFBQSxVQUVaLE9BQU8sS0FBSyxvQkFBb0I7QUFBQTtBQUFBLFNBRWxDLHFCQUFzQixNQUFNO0FBQUEsU0FDNUI7QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBLFdBQ0UsUUFBUTtBQUFBLFdBQ1I7QUFBQSxXQUNBLFVBQVU7QUFBQTtBQUFBLFVBRVosT0FBTyxpQkFBaUI7QUFBQTtBQUFBLFNBRTFCO0FBQUE7QUFBQSxnQkFFUztBQUFBLGlCQUNEO0FBQUEsZ0JBQ0Q7QUFBQSxpQkFFRztBQUFBLGlCQUNGO0FBQUEsZ0JBQ0Q7QUFBQSxVQUNMO0FBQUEsV0FBYTtBQUFBLFlBQ0M7QUFBQTtBQUFBLFlBQ1A7QUFBQTtBQUFBLFdBRUw7QUFBQSxXQUNBO0FBQUEsWUFDRTtBQUFBO0FBQUEsWUFHQTtBQUFBO0FBQUE7QUFBQSxZQUdBO0FBQUE7QUFBQTtBQUFBLFVBR0o7QUFBQTtBQUFBLGlCQUVRLE1BQVEsa0NBQWtDO0FBQUEsaUJBRTFDO0FBQUEsVUFDUjtBQUFBLFdBQWUsUUFBUTtBQUFBO0FBQUEsV0FDSDtBQUFBO0FBQUEsb0JBR1g7QUFBQSxXQUNQO0FBQUEsc0JBQ1k7QUFBQSxZQUVWO0FBQUEsWUFDQTtBQUFBO0FBQUEseUJBQ2M7QUFBQSxXQUNoQjtBQUFBLGFBQWtCLDZCQUErQjtBQUFBO0FBQUEsbUJBRzVDO0FBQUEsVUFDUDtBQUFBLFdBQ0U7QUFBQSxZQUFnQjtBQUFBLDZCQUNHO0FBQUEscUJBRVg7QUFBQSxXQUNSLFlBQWE7QUFBQSxxQkFDTDtBQUFBLFdBQ1IsWUFBVztBQUFBLHFCQUNGO0FBQUEsWUFDUDtBQUFBLHdCQUVhO0FBQUEsYUFDWDtBQUFBLGtCQUNLO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBR2MsS0FFYjtBQUFBLDhCQUVOLFdBQVcsUUFDWDtBQUFBO0FBQUE7QUFBQSxpQkFHRztBQUFBLGtCQUNEO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGlCQUNDO0FBQUEsV0FDUCxTQUFTO0FBQUE7QUFBQSxtQkFDQSxpQkFBbUI7QUFBQSxrQkFDdEI7QUFBQSxtQkFDQztBQUFBO0FBQUEsY0FDQztBQUFBLFdBRVI7QUFBQTtBQUFBO0FBQUEsY0FDUTtBQUFBLFdBRVI7QUFBQTtBQUFBO0FBQUEsY0FDUTtBQUFBLFdBRVI7QUFBQTtBQUFBLG1CQUNVO0FBQUEsb0JBQ0M7QUFBQSxtQkFDRDtBQUFBLG9CQUNDO0FBQUEsbUJBQ0Q7QUFBQSxvQkFDQztBQUFBLFlBQ1Q7QUFBQTtBQUFBLG1CQUNRO0FBQUE7QUFBQSxlQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBUVI7QUFBQTtBQUFBO0FBQUEsZUFDTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLUDtBQUFBO0FBQUE7QUFBQSxlQUNPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtQO0FBQUEsWUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSUE7QUFBQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJQTtBQUFBLFlBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlBO0FBQUEsYUFDRTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBLHVCQUVRO0FBQUEsYUFDUjtBQUFBLGNBQ0U7QUFBQSxjQUNBLFlBQWE7QUFBQSxjQUNiO0FBQUEsY0FDQTtBQUFBO0FBQUE7QUFBQSxjQUNLO0FBQUE7QUFBQSxZQUVULFlBQVcsZ0JBQWtCO0FBQUEsWUFHN0I7QUFBQSx1QkFDUztBQUFBLFlBQ1Q7QUFBQSx1QkFDVSxhQUNEO0FBQUEsYUFDUCxhQUFjO0FBQUEsYUFDZCxZQUFXLGlCQUFtQjtBQUFBLGFBRzlCO0FBQUE7QUFBQSxZQUVGLFlBQVcsZ0JBQWtCO0FBQUEsWUFHN0I7QUFBQTtBQUFBLFdBRUY7QUFBQSxZQUFrQix3QkFDUztBQUFBO0FBQUEsWUFHcEI7QUFBQSxXQUNQLFFBQVMsbUJBQ0osTUFBTTtBQUFBO0FBQUE7QUFBQSxXQUdUO0FBQUEsV0FDQSxRQUFTLFlBQ0ksaUJBQW1CO0FBQUE7QUFBQSx1QkFJbEIsTUFBTTtBQUFBLFVBRXhCO0FBQUEsVUFDQSxVQUFVO0FBQUE7QUFBQSxTQUVaO0FBQUEsUUFwTlE7QUFBQTtBQUFBLFNBd05SLHNCQUF1QixjQUFjO0FBQUEsbUJBQzNCO0FBQUEsU0FDVixZQUFXLE9BQU87QUFBQSxvQkFDUjtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUE7QUFBQSxTQUVGLFVBQVU7QUFBQSxRQVJGO0FBQUEsUUFtQlY7QUFBQSxrQkFDUyxVQUNBLFNBQ0YsY0FDQTtBQUFBLFNBQ0w7QUFBQSxtQkFDVztBQUFBLFVBQ1Q7QUFBQSxXQUNFO0FBQUEsWUFDRTtBQUFBLFlBQ0EseUJBQ0UsdUJBQ0E7QUFBQTtBQUFBLGdCQUdGLGdCQUNBO0FBQUEsV0FFRjtBQUFBLHNCQUNZO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVjtBQUFBLGFBQVM7QUFBQTtBQUFBLGFBRVA7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQTtBQUFBO0FBQUEsV0FHSjtBQUFBO0FBQUE7QUFBQSxXQUNLO0FBQUEsVUFDUCxNQUFNO0FBQUE7QUFBQSxTQUVSLE9BQU8sYUFBYSxDQWpDZixDQWtDTjtBQUFBLE9BdnJCb0I7QUFBQSxPQUFEO0FBQUEsNEJBNHNCSTtBQUFBO0FBQUEsSUoxakJ4QixZQUFhO0FBQUEsSUFDYixnQkFBa0I7QUFBQSxHQUNwQjtBQUFBLHlCRHBKb0I7QUFBQTtBQUFBLElBYWxCLDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUNBTUUsc0JBQXNCLENBQ3hCO0FBQUEsbUNBakJFLG9CQUNGO0FBQUEsd0JBOEdtQjtBQUFBLG9DWHZGakIsa0JBQ0EsUUFBUSxDQUNWO0FBQUEsZ0NXNEYyQjtBQUFBO0FBQUEsYUFFbEIsZ0NBQ0M7QUFBQSxJQUNSO0FBQUEsY0FDVTtBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsSUFFQTtBQUFBLElBQ0EsU0FBUztBQUFBLEdBQ1g7QUFBQTtBQUFBLHFCTTdHbUI7QUFBQSw0QkFITztBQUFBLDJCQUhEO0FBQUE7QUFBQSxlQTJJZDtBQUFBLElBQ1QsNEJBQTZCLFFBQVE7QUFBQSxJQUNyQyxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxjQUNVO0FBQUEsTUFDUjtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsT0FDQSxRQUFRO0FBQUE7QUFBQSxNQUVWO0FBQUEsT0FDRSxPQUFPO0FBQUEsT0FDUDtBQUFBLFFBQ0U7QUFBQSxRQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2hCLGdCQUFnQjtBQUFBLEdBQ2xCO0FBQUE7QUFBQSxJQStDRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaENFLFlBQVc7QUFBQSxhQUNIO0FBQUEsS0FDTjtBQUFBLGNBQ1U7QUFBQSxNQUNSLG9CQUNFLHVCQUNBO0FBQUEsTUFFRix1QkFBd0IsT0FDZjtBQUFBO0FBQUE7QUFBQSxJQUliO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFNRTtBQUFBLEtBQW9CO0FBQUE7QUFBQSxLQUNmO0FBQUEsSUFDTCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0F2RVk7QUFBQSxJQUNWO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FuQlk7QUFBQSxJQUVWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQXlGYTtBQUFBLElBQ1gseUI5QjdPRjtBQUFBLEc4QitPQTtBQUFBO0FBQUEsZUEzSFc7QUFBQSxJQUNULDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxLQUNFLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHWixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUEvRFcsOEJBQ0Q7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsWUFBVyxrQkFBb0I7QUFBQSxJQUcvQixRQUFRO0FBQUEsR0FDVjtBQUFBLGdDQWZFLE9BQU8sbUJBQW1CLENBQzVCO0FBQUEsNEJUNkNFLG1DQUFtQyxTQUFTLENBQzlDO0FBQUE7QUFBQSxZU29GVTtBQUFBLElBQ1IsWUFBYSxRQUFRO0FBQUEsWUFDZjtBQUFBLElBQ04sR0FBSSxrQkFBa0IsV0FBVyxnQkFBZ0I7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUExR1c7QUFBQSxJQUNULDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxLQUNFLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHWixnQkFBZ0I7QUFBQSxHQUNsQjtBQUFBO0FBQUEsWUFNVTtBQUFBLElBQ1IsWUFBYSxRQUFRO0FBQUEsWUFDZjtBQUFBLElBQ04sR0FBSSxrQkFBa0IsV0FBVyxnQkFBZ0I7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0ExRVk7QUFBQSxJQUNWO0FBQUEsS0FBK0MsSUFBSTtBQUFBLElBQ25EO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBUVk7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw2Qkg4TkUsVUFBUyxvQ0FBb0MsQ0FDL0M7QUFBQTtBQUFBO0FBQUEsVVA0QlM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsU0FDRDtBQUFBLFlBRUc7QUFBQSxJQUNULFVBQVc7QUFBQSxJQUdYLElBQUk7QUFBQTtBQUFBLFNBQ0U7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLDZEQUN1RDtBQUFBLElBRTdELGVBQWU7QUFBQSxHQUNqQjtBQUFBLCtCQUtFLFdBQVcsaUJBQWlCLENBQzlCO0FBQUEsOEJoQnZKeUI7QUFBQSwrQmdCcUV2QixPQUFPLGNBQWMsQ0FDdkI7QUFBQSxnQ0FMRSxPQUFPLGFBQWEsQ0FDdEI7QUFBQTtBQUFBLEloQjNNRSw2Q0FJSSxRQUFRLFVBRVIsUUFBUTtBQUFBO0FBQUEsR0FFZDtBQUFBO0FBQUEsWUFLUTtBQUFBLElBQ047QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBO0FBQUEsVUFHRTtBQUFBLG1CQUVXLGdCQUNEO0FBQUE7QUFBQSxrQkFFQSxZQUNDO0FBQUEsS0FFYjtBQUFBLEtBQ0EsWUFBVztBQUFBLE1BQ1QsY0FBZTtBQUFBLGNBQ1Q7QUFBQSxNQUNOO0FBQUEsT0FBMkIsS0FBSztBQUFBO0FBQUEsT0FDRCxXQUNsQjtBQUFBO0FBQUEsT0FDcUIsV0FDckI7QUFBQTtBQUFBLE9BQ047QUFBQTtBQUFBLEtBRVQ7QUFBQTtBQUFBLDRCQUN5QjtBQUFBLElBRzNCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQUtFLEdBQUk7QUFBQSxtQkFDWTtBQUFBLEtBQ2Q7QUFBQSxNQUFhO0FBQUE7QUFBQTtBQUFBLGFBRUQ7QUFBQSxpQkFDSTtBQUFBLE1BQ2QsWUFBYTtBQUFBLE1BQ2I7QUFBQSxNQUNBLGlCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBRWY7QUFBQSxHQUdUO0FBQUE7QUFBQSxJSHFaRTtBQUFBLEtBQVc7QUFBQSxNQUNrRTtBQUFBLE9BRXZFO0FBQUEsT0FDQTtBQUFBO0FBQUE7QUFBQSxPQUVBLE1BQU0sbUJBQW1CO0FBQUEsT0FDekI7QUFBQTtBQUFBO0FBQUEsTUFHRixjQUEyQjtBQUFBLE1BQzNCLHdCQUF5QjtBQUFBO0FBQUEsSUFHN0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx3QzhCdGRFLFFBQVEsQ0FDVjtBQUFBLHdCQUdxQjtBQUFBO0FBQUEsSUFFbkI7QUFBQTtBQUFBO0FBQUEsUUFDVTtBQUFBO0FBQUEsc0JBQ04sMEJBQ0EsT0FDQSxNQUFNLENBSG9DO0FBQUEsS0FLNUM7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUEsc0NBSUUsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQ2dERSxnQkFBaUIsWUFBWTtBQUFBLGNBQ3JCO0FBQUEsSUFFUix3REFBeUQ7QUFBQSxJQUN6RCxnQkFDRSxpQkFBa0IsVUFDbEIsa0JBQW1CO0FBQUEsaUJBR1Y7QUFBQSxJQUNYO0FBQUEsS0FDRSxZQUFXLHVCQUF5QjtBQUFBLElBQ3RDO0FBQUEsS0FBa0I7QUFBQSxNQUNBO0FBQUEsa0NBQ2M7QUFBQSxJQUVoQyxnQ0FBaUM7QUFBQSxJQUNqQyxpQ0FBa0M7QUFBQSxJQUNsQztBQUFBLEtBQ0UsWUFBVyx1QkFBeUI7QUFBQSxJQUN0QztBQUFBLElBQ0Esc0JBQXVCLFlBQVcsdUJBQXlCO0FBQUEsSUFDM0QsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBO0FBQUEsSVoyRUUsWUFBYSxRQUFRO0FBQUEsSUFDckIsVUFBVyxVQUFTO0FBQUEsSUFDcEIsVUFBVyxRQUFRO0FBQUEsSUFDbkIsS0FBSyxpQkFBaUIsUUFBUTtBQUFBLElBQzlCLEtBQUssaUJBQWlCLFVBQVM7QUFBQSxJQUMvQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSWxCekNFLE9BQU8seUJBQXlCLHVCQUF1QjtBQUFBLEdBQ3pEO0FBQUE7QUFBQSx1QmtCNFVjO0FBQUEsSUFDWixJQUFJO0FBQUEsSUFDSjtBQUFBLElBRUEsS0FBSyxxQkFBcUIsaUJBQWlCLFVBQVU7QUFBQSxJQUNyRCxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsS0FBTSxxQkFBcUIsbUJBQW9CO0FBQUEsS0FDN0MsVUFBVTtBQUFBO0FBQUEsU0FDSjtBQUFBLElBRVI7QUFBQTtBQUFBLFdBQ1c7QUFBQSxpQkFDTTtBQUFBLGlCQUNGO0FBQUEsS0FDYixpQkFBaUI7QUFBQSxLQUNqQixVQUFVO0FBQUE7QUFBQSxJQUVaLEdBQUksNkJBQTZCLCtCQUErQjtBQUFBLElBQ2hFLEdBQUksMkJBQTJCLCtCQUErQjtBQUFBLElBQzlEO0FBQUEsR0FDRjtBQUFBLHNER2hhRSxPQUFPLG9DQUFvQztBQUFBLEdBQzdDO0FBQUE7QUFBQSxJQStHRSxzQ0FBeUM7QUFBQSxjQUNqQyxpQkFDQTtBQUFBLElBQ1I7QUFBQSxJQUNBLFlBQVcsaUJBQW1CO0FBQUEsSUFDOUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsYUg2RmM7QUFBQSxpQkFDSTtBQUFBLGVBQ0Y7QUFBQSxTQUNSO0FBQUEsU0FDRTtBQUFBLFNBQ0E7QUFBQTtBQUFBO0FBQUEsV0FHQztBQUFBLFlBQ0M7QUFBQSxZQUNBO0FBQUEsV0FDRDtBQUFBLFlBQ0M7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQSxLQUNOLG1CQUdDO0FBQUEsSUFDSDtBQUFBO0FBQUEsYUFHUSxXQUNBLFdBQ0E7QUFBQSxLQUNOLG1CQUdDO0FBQUEsSUFDSDtBQUFBO0FBQUEsS0FHRTtBQUFBO0FBQUEsZ0JBRUs7QUFBQSxJQUNQO0FBQUEsSUFFQSwyQkFBMkIsd0JBQXVCO0FBQUEsS0FBb0IsZ0JBQ3BEO0FBQUEsSUFFbEIsWUFBYSxZQUNDO0FBQUEsSUFFZCxLQUFLLG9CQUFvQixRQUNmO0FBQUEsZ0JBR0E7QUFBQSxJQUNWLE1BQU8saUJBQ0wsWUFDQTtBQUFBLElBRUYsTUFBTyxpQkFDTCxZQUNBO0FBQUEsSUFFRixvQkFBcUIsb0JBQ0M7QUFBQSxJQUV0QixNQUFPLGlCQUNMLFlBQ0E7QUFBQSxJQUVGLE1BQU8saUJBQ0wsWUFDQTtBQUFBLElBRUYsZ0JBQWlCLFFBQ1A7QUFBQSxhQUdILFFBQ0EsUUFDQTtBQUFBLElBRVAsR0FBSSxlQUFnQixpQ0FBa0MsUUFDNUM7QUFBQSxJQUVWLEdBQUksZUFBa0I7QUFBQSxLQUFrRDtBQUFBO0FBQUEsVUFJL0Q7QUFBQSxTQUNEO0FBQUEsU0FDQTtBQUFBLFNBQ0E7QUFBQSxTQUVGLE1BQVE7QUFBQSxJQUNkLFlBQWEsUUFDSDtBQUFBLGFBR0g7QUFBQSxJQUNQLEdBQUksMEJBQTBCLFNBQ25CO0FBQUEsSUFJWCxZQUFZLG1DQUFtQztBQUFBLEdBQ2pEO0FBQUE7QUFBQSxJWXhaRSxNQUFNO0FBQUEsY0FDRTtBQUFBLElBQ1IsYUFBYztBQUFBO0FBQUE7QUFBQSxPQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWFOLFlBQVc7QUFBQSxhQUNEO0FBQUEsS0FDUjtBQUFBO0FBQUEsUUFFSSxpQkFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGlCQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUE7QUFBQSxRQUVBLG9CQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQTtBQUFBLFFBQ0EsVUFBYSwwQ0FDWCw0QkFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUE7QUFBQSxRQUVBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBYSwwQ0FDWCwwQkFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUE7QUFBQTtBQUFBLFFBR0EscUJBQ0EsYUFDQTtBQUFBO0FBQUEsUUFFQSxhQUNBO0FBQUE7QUFBQSxRQUVBLGFBQ0E7QUFBQTtBQUFBLFFBRUEsYUFDQSxvQkFDQTtBQUFBO0FBQUEsUUFFQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJQSxxQkFDQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQVM7QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBLElBR04sUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsS1ptVUksR0FBSTtBQUFBLE1BQW1CLE9BQ2QsYUFBYTtBQUFBO0FBQUEsY0FFWixnQkFBZ0I7QUFBQSxNQUN4QjtBQUFBLE9BQ0U7QUFBQSxPQUNBLEtBQUs7QUFBQSxPQUNMLEtBQUs7QUFBQSxPQUNMLFdBQVksY0FDSTtBQUFBLE9BRWhCLFFBQVE7QUFBQTtBQUFBO0FBQUEsT0FDSCxPQUFPLGFBQWE7QUFBQTtBQUFBLElBRS9CO0FBQUEsZUFFTSwrQkFDRztBQUFBLElBQ1QsMkRBQ0UsY0FDQTtBQUFBLElBRUYsR0FBSTtBQUFBLEtBQ0Y7QUFBQSxLQUNBO0FBQUE7QUFBQSxjQUNVLG9CQUNWLFdBQ0E7QUFBQTtBQUFBLEtBRUE7QUFBQTtBQUFBLGdCQUVZLDJCQUVGO0FBQUEsUUFDTixHQUFJO0FBQUEsU0FDRixJQUFJLDBCQUEwQjtBQUFBLFFBQ2hDO0FBQUE7QUFBQSxRQUVBLElBQUksa0JBQ0o7QUFBQTtBQUFBLFFBRUE7QUFBQSxRQUNBLElBQUk7QUFBQSxnQkFDSSxzQkFDQSxFQUFHO0FBQUEsUUFDWCw2QkFBNkI7QUFBQSxpQkFFckI7QUFBQSxTQUNOLE1BQU8scUJBQXFCO0FBQUEsU0FDNUIsR0FBSSxxQkFBcUI7QUFBQSxTQUN6QixJQUFJLG9CQUFvQjtBQUFBLFNBQ3hCO0FBQUEsU0FDQSxHQUFJO0FBQUEsVUFDRixJQUFJLDBCQUEwQjtBQUFBLFNBQ2hDO0FBQUE7QUFBQTtBQUFBLGlCQUVNO0FBQUEsU0FDTjtBQUFBLFVBQ0U7QUFBQSxVQUNBLElBQUk7QUFBQTtBQUFBO0FBQUEsVUFDQyxVQUFhLG1DQUFxQztBQUFBLFNBQ3pEO0FBQUEsa0JBRVE7QUFBQSxVQUNOLE1BQU8scUJBQXFCO0FBQUEsVUFDNUIsR0FBSSxxQkFBcUI7QUFBQSxVQUN6QixJQUFJO0FBQUE7QUFBQTtBQUFBLFFBR1I7QUFBQTtBQUFBLElBRU4sT0FBTyw0QkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsSUtyZUUsR0FBSTtBQUFBLEtBQ0YsT0FBTyw4QkFBOEI7QUFBQSxZQUMvQjtBQUFBLElBQ1IsVUFBVyxpQkFFUCxjQUNBLGVBQ0s7QUFBQSxZQUVEO0FBQUEsSUFDUjtBQUFBLEtBQ0U7QUFBQSxhQUNNO0FBQUEsS0FDTixVQUFXLElBQUk7QUFBQTtBQUFBLElBRWpCLE9BQU8sNEJBQTRCO0FBQUEsR0FDckM7QUFBQSx5Qkp5Sm9CO0FBQUEsK0JBWWxCLHdCQUF3QixDQUMxQjtBQUFBO0FBQUEsSURSRSxnQkFBZ0Isb0JBQW9CLGdCQUFnQjtBQUFBLGNBQzVDO0FBQUEsSUFDUixRQUFTO0FBQUEsY0FDQyxpQkFBZ0IsV0FBVztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLGVBQ0UsUUFDQTtBQUFBLElBRUYsY0FDRSxVQUNBO0FBQUEsSUFFRixRQUFTO0FBQUEsSUFDVCxrQkFBa0I7QUFBQSxHQUNwQjtBQUFBO0FBQUE7QUFBQSxZVnFJYTtBQUFBLGVBQ0c7QUFBQSxJQUNkLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQTtBQUFBLGNBMUJVO0FBQUEsSUFDUjtBQUFBLEtBQVMsWUFDSTtBQUFBLE1BQ1Q7QUFBQSxJQUdKO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxzQ3FCdlRFLFFBQVEsQ0FDVjtBQUFBLG9DQUdFLHFCQUFxQixDQUN2QjtBQUFBO0FBQUEsSUFWRSx3Q0FBeUM7QUFBQSxJQUN6QyxRQUFRO0FBQUEsR0FDVjtBQUFBLCtCQTJCRSwyQ0FBMkMsQ0FDN0M7QUFBQTtBQUFBLElBcENFLHdDQUF5QztBQUFBLElBQ3pDLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUNBaUdFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUExR0Usd0NBQXlDO0FBQUEsSUFDekMsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx1Q0E0R0UsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQXRGRSw2REFBNkQ7QUFBQSxHQUMvRDtBQUFBLGtDQVVFLFFBQVEsQ0FDVjtBQUFBLCtCQU5FLE9BQU8sd0JBQXdCLENBQ2pDO0FBQUEsMkJWOEdzQjtBQUFBO0FBQUEsZ0JBY1YsY0FDRjtBQUFBLElBQ1IsMkJBQTRCLHFCQUNMO0FBQUEsYUFFaEIsUUFDRjtBQUFBLElBRUw7QUFBQSxLQUNFO0FBQUEsS0FDQSx3QkFBeUIsa0JBQ3BCO0FBQUE7QUFBQSxJQUVQO0FBQUEsSUFDQSxnQkFBZ0I7QUFBQSxHQUNsQjtBQUFBLDhDQ2lHRSxVQUFVLENBQ1o7QUFBQSx5Q2pCMUxFLFVBQVUsQ0FDWjtBQUFBLDJDQXBDRSxRQUFRLENBQ1Y7QUFBQSxvREFHRSxVQUFVLENBQ1o7QUFBQSx3Q0MwT0UsdUJBQXVCLENBQ3pCO0FBQUEsdUN5QjdLRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGdCVjJEWSxhQUNILFFBQ0Y7QUFBQSxJQUVMO0FBQUEsS0FDRTtBQUFBLEtBQ0Esd0JBQXlCLGtCQUNwQjtBQUFBO0FBQUEsSUFHUCw0Q0FBNEM7QUFBQSxHQUM5QztBQUFBO0FBQUEsSVlnRkUsZUFBZ0I7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQTtBQUFBLFdBQ1E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBS0U7QUFBQSxXQUNGO0FBQUEsYUFDRTtBQUFBLFNBQ0o7QUFBQSxJQUNOLFlBQVc7QUFBQSxLQUNUO0FBQUEsZ0JBRU8sY0FBYztBQUFBLGFBQ2QsY0FBYztBQUFBLEtBQ3JCLE9BQU87QUFBQSxLQUNQO0FBQUEsZ0JBRU8sY0FBYztBQUFBLGFBQ2QsY0FBYztBQUFBLEtBQ3JCLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLHVEQUVBO0FBQUEsS0FFRjtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLElBcFJFLGtCQUFtQixvQkFDRztBQUFBLElBRXRCLE1BQU07QUFBQTtBQUFBLGFBRUo7QUFBQSxhQUNBO0FBQUEsR0FFSjtBQUFBO0FBQUE7QUFBQSxTQTZiVTtBQUFBO0FBQUEsT0FDRTtBQUFBO0FBQUEsSUFNVixZQUFXO0FBQUEsS0FDVDtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUExVVU7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFsQ1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBbVpFO0FBQUEsR0FDRjtBQUFBO0FBQUEsWUFuRVU7QUFBQSxJQUNSLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQSx3Q0E3T1UscUJBQ1IsVUFBVSxDQUNaO0FBQUEsd0NBSVUscUJBQ1IsVUFBVSxDQUNaO0FBQUE7QUFBQSxJQW1SRTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBNVlFLCtCQUFnQyxpQ0FBaUM7QUFBQSxHQUNuRTtBQUFBO0FBQUEsWUFvTFU7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQTRDVSx5QkFDQSxpQ0FDRDtBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFLRSxpQkFBaUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFvRlU7QUFBQSxJQUNSO0FBQUEsa0JBQ2U7QUFBQSxLQUNiO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxpQkFDWTtBQUFBLEtBQ1o7QUFBQTtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsTUFGYTtBQUFBLEtBSWYsWUFBWTtBQUFBO0FBQUE7QUFBQSxLQUVaO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEvTVU7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUE4R0UsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBNERXO0FBQUEsSUFDVCxZQUFXO0FBQUEsS0FDVDtBQUFBLEtBQ0EsWUFBVztBQUFBO0FBQUEsV0FDSDtBQUFBLFdBQ0Y7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLE1BQ0o7QUFBQTtBQUFBO0FBQUEsSUFHSixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsWUF2R1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQWxCVTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQSxZQUFXO0FBQUEsS0FDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFmVTtBQUFBLElBQ1I7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQS9FVTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsU0F5SlU7QUFBQSxTQUNGO0FBQUEsU0FDQTtBQUFBLFVBQ0c7QUFBQSxJQUNULFlBQVc7QUFBQSxLQUFpQixZQUNmO0FBQUEsY0FDSCx1QkFDQTtBQUFBLE1BQ047QUFBQSxPQUNFO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBLE9BRUE7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQTtBQUFBO0FBQUEsSUFJTixTQUFTO0FBQUEsR0FDWDtBQUFBO0FBQUEsWUE1TVU7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBM0ZVO0FBQUEsSUFDUjtBQUFBLGlCQUNhO0FBQUEsSUFDYixnQkFBaUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEwS1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBd0VVO0FBQUEsSUFDUjtBQUFBLElBQ0EsdUNBQXVDO0FBQUEsSUFDdkMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBZFU7QUFBQSxJQUNSO0FBQUEsSUFDQSx1Q0FBdUM7QUFBQSxJQUN2QyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEzTVU7QUFBQTtBQUFBLGVBRUUsS0FBTztBQUFBLEtBQ2Ysc0JBQXVCO0FBQUEsS0FDdkIsVUFBVTtBQUFBLElBQ1o7QUFBQSxZQUNNLHdCQUNGLHVCQUNBO0FBQUEsSUFDSjtBQUFBLGdCQUNVLE1BQVEsYUFBYSxhQUFhO0FBQUEsSUFDNUM7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUE5Q1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EseUJBQTBCO0FBQUEsSUFDMUIsMEJBQTJCO0FBQUEsSUFDM0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaEVFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBakVFO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGtCQW1FZ0I7QUFBQSxJQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBUVE7QUFBQTtBQUFBO0FBQUEsbUJBR0MsMkJBQ1I7QUFBQSxHQUNIO0FBQUE7QUFBQSxlQXpFYTtBQUFBO0FBQUEsZUFFQztBQUFBLEtBQ1YsUUFBUyxhQUFhO0FBQUEsSUFDeEI7QUFBQSxnQkFDVTtBQUFBLElBQ1Ysb0JBQW9CO0FBQUEsaUJBQ1A7QUFBQSxJQUNiLGFBQWE7QUFBQSxpQkFDQTtBQUFBLElBQ2IsYUFBYTtBQUFBLFlBRUw7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSO0FBQUEsWUFFUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1I7QUFBQSxjQUVVLHVDQUF1QztBQUFBLElBQ2pELFVBQ0U7QUFBQSxjQUVNLHVCQUNLO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxjQUNVO0FBQUEsSUFDVixnQ0FDRSxrQkFEYztBQUFBLElBR2hCO0FBQUEsZUFDUztBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUErYkU7QUFBQSxHQUNGO0FBQUE7QUFBQTtBQUFBLFNBNVVVO0FBQUEsVUFDQztBQUFBLFNBQ0g7QUFBQSxhQUNJO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUlBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUE7QUFBQSxTQUtVO0FBQUEsVUFDQztBQUFBLFNBQ0g7QUFBQSxJQUNOLHdDQUF3QztBQUFBLEdBQzFDO0FBQUE7QUFBQSxJQW1TRTtBQUFBLEdBQ0Y7QUFBQSxvQ0FyQkUsUUFBUSxDQUNWO0FBQUEsbUNBR0UsUUFBUSxDQUNWO0FBQUEscUNBMVVVLHFCQUNSLGNBQWMsQ0FDaEI7QUFBQSxxQ0FJVSxxQkFDUixlQUFlLENBQ2pCO0FBQUE7QUFBQSxJQTRVRTtBQUFBLEdBQ0Y7QUFBQTtBQUFBO0FBQUEsU0E3R1U7QUFBQSxTQUNBLHNCQUFzQjtBQUFBLElBQzlCLDBCQUEwQjtBQUFBLEdBQzVCO0FBQUE7QUFBQSxJQW1HRTtBQUFBO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFxQkU7QUFBQSxHQUNGO0FBQUE7QUFBQSxJTmhQRSxVQUFTLG1DQUFtQztBQUFBLEdBQzlDO0FBQUE7QUFBQSxJQU1FLFVBQVMsa0NBQWtDO0FBQUEsR0FDN0M7QUFBQTtBQUFBLGNENU5VO0FBQUEsSUFHUjtBQUFBLEtBQ0U7QUFBQSxNQUNFLGtCQUNDLDJCQUNBO0FBQUEsUUFDQTtBQUFBLEtBQ0gsSUFBSTtBQUFBO0FBQUEsSUFFTjtBQUFBLElBQ0E7QUFBQTtBQUFBLE9BR0ksSUFBSTtBQUFBO0FBQUEsT0FJSixLQUFLO0FBQUE7QUFBQSxPQUdMLEtBQUssaUJBQ0wsSUFBSTtBQUFBO0FBQUEsSUFFUjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBMkNFLE9BQU8seUJBQXlCLDBCQUEwQjtBQUFBLEdBQzVEO0FBQUE7QUFBQSxjQXZDVTtBQUFBLElBR1I7QUFBQSxLQUNFO0FBQUEsS0FDQSxJQUFJO0FBQUE7QUFBQSxJQUVOO0FBQUEsSUFDQTtBQUFBO0FBQUEsT0FHSTtBQUFBO0FBQUEsT0FJQTtBQUFBO0FBQUEsT0FHQSxXQUNBLElBQUk7QUFBQTtBQUFBLElBRVI7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJekJxcEJFO0FBQUE7QUFBQSxPQUVJLGlDQUNBLFVBQVU7QUFBQSxlQUVWLFVBQVU7QUFBQTtBQUFBLEdBRWhCO0FBQUE7QUFBQSxrQnlCcnBCZ0I7QUFBQSxJQUNkO0FBQUEsY0FBd0M7QUFBQSxjQUNoQixtQzFCNUkxQjtBQUFBLEcwQjZJQTtBQUFBO0FBQUEsSUEzR0U7QUFBQSxJQUNBLElBQUk7QUFBQSxJQUNKO0FBQUEsSUFDQSxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsSUFxSEU7QUFBQSxJQUNBLHVCQUF3QjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLE1BQW9CO0FBQUE7QUFBQSxnQkFLUDtBQUFBLE9BQ1QsSUFBSTtBQUFBLE9BQ0o7QUFBQTtBQUFBO0FBQUEsYUFFTztBQUFBLE1BQXlDO0FBQUE7QUFBQSxTQUk5QyxJQUFJLDRCQUNKLE9BQ0E7QUFBQTtBQUFBLFNBR0Esb0JBQ0E7QUFBQTtBQUFBLFNBRUEsR0FBSSxnQ0FBZ0M7QUFBQSxtQkFLNUI7QUFBQSxTQUNSLElBQUk7QUFBQSxTQUNKLHlDQUNFLGFBQWMsT0FDZDtBQUFBO0FBQUEsU0FFRjtBQUFBO0FBQUEsYUFFSztBQUFBLE1BQ1QsSUFBSTtBQUFBLE1BQ0o7QUFBQTtBQUFBLGFBQ1M7QUFBQSxNQUNULElBQUk7QUFBQSxNQUNKO0FBQUE7QUFBQTtBQUFBLE1BRUEsSUFBSTtBQUFBLE1BQ0o7QUFBQTtBQUFBO0FBQUEsTUFHQSxJQUFJO0FBQUEsTUFDSjtBQUFBO0FBQUEsb0NBR0EsSUFBSSwyQkFDSjtBQUFBO0FBQUEsSUFHSixJQUFJO0FBQUEsSUFDSixxQkFBcUI7QUFBQSxHQUN2QjtBQUFBO0FBQUEsSVR4TkUsT0FBTyxtQ0FBbUM7QUFBQSxHQUM1QztBQUFBO0FBQUEsSVM4REUsSUFBSSxxQkFBcUI7QUFBQSxJQUN6QixJQUFJLHFCQUFxQjtBQUFBLElBQ3pCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJWjJCRSxZQUFXO0FBQUEsS0FBd0IsNEJBQ0osWUFBWTtBQUFBLElBRTNDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQXpFWSx5Q0FDSjtBQUFBLElBQ04sWUFBVyxpQkFBbUIsSUFDeEI7QUFBQSxJQUVOLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJTWlCRSxLQUFLO0FBQUEsS0FDSCxHQUFJLGlCQUFpQixPQUFPLDhCQUE4QjtBQUFBLEtBQzFELE9BQU8seURBQXlEO0FBQUE7QUFBQTtBQUFBLFlBRXpEO0FBQUEsSUFDVCxTQUFVO0FBQUEsY0FDRjtBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUEsS0FDa0IsNkJBRWQsUUFDQTtBQUFBO0FBQUEsS0FFRyxjQUVILFFBQ0E7QUFBQSxtQkFHUywrQkFDQTtBQUFBLElBQ2I7QUFBQSxLQUFVO0FBQUE7QUFBQSxLQUNMO0FBQUE7QUFBQSxRQUdDLGdCQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUEsZ0JBRUE7QUFBQTtBQUFBLElBR047QUFBQSxlQUVZO0FBQUEsS0FDVixJQUFJO0FBQUE7QUFBQSxnQkFFTTtBQUFBLElBQ1o7QUFBQSxlQUNZO0FBQUEsS0FDVjtBQUFBLE1BQWEsZUFDSTtBQUFBO0FBQUEsaUJBRU47QUFBQSxNQUNUO0FBQUEsT0FDRSxTQUFTO0FBQUE7QUFBQSxPQUNOLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHakIsT0FBTztBQUFBLHdEQUNzQyxpQkFDNUM7QUFBQSxHQUNIO0FBQUEsbUNBc0pFLE9BQU8sZ0JBQWdCLENBQ3pCO0FBQUEsa0NsQnFSNkI7QUFBQTtBQUFBLElDbk0zQjtBQUFBLGVBQ1ksdUJBQ0U7QUFBQSxLQUNaO0FBQUEsTUFBd0I7QUFBQTtBQUFBLE1BR3RCO0FBQUEsZUFDVTtBQUFBLE9BQ1I7QUFBQSxPQUNBO0FBQUE7QUFBQSxNQUVGO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUdGLG9CQUNFO0FBQUE7QUFBQTtBQUFBLFFBRVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBTVo7QUFBQSxLQUNBO0FBQUE7QUFBQSxHQUVKO0FBQUE7QUFBQSxJS3BURTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLFlOa2VVLHFCQUFxQjtBQUFBO0FBQUEsYUFFbkIsZ0JBQ0Y7QUFBQSxLQUNOO0FBQUEsTUFDRSxJQUFJO0FBQUEsZUFDRztBQUFBLE1BQ1Asa0JBQW1CO0FBQUEsTUFDbkI7QUFBQTtBQUFBLEtBRUYsUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUVBLE9BQVE7QUFBQTtBQUFBLHdCQUVXLGVBQ0EsYUFDZjtBQUFBO0FBQUE7QUFBQSxxQkFFaUI7QUFBQSxtQkFDSjtBQUFBLG1CQUNFO0FBQUEsT0FDZjtBQUFBLFFBQ0U7QUFBQTtBQUFBLE9BSUY7QUFBQTtBQUFBLE9BRUE7QUFBQTtBQUFBLE9BR0E7QUFBQSxlQUVBLGdEQUNBO0FBQUE7QUFBQSxJQUVKLHVEQUF1RDtBQUFBLEdBQ3pEO0FBQUEsOEJtQi9YRSwwQkFDQSxRQUFRLENBQ1Y7QUFBQTtBQUFBO0FBQUEsYW5Cb0ZZLHFCQUNGO0FBQUEsS0FDTjtBQUFBLE1BQ0UsSUFBSTtBQUFBLGVBQ0c7QUFBQSxNQUNQLGtCQUFtQjtBQUFBLE1BQ25CO0FBQUE7QUFBQSxLQUVGLFFBQVE7QUFBQSxJQUNWO0FBQUEsa0JBQ1ksa0JBQ0E7QUFBQSxJQUNaO0FBQUE7QUFBQTtBQUFBLHFCQUVtQjtBQUFBLHFCQUNBO0FBQUEsbUJBQ0E7QUFBQSxnQ0FDVztBQUFBLHNCQUNSO0FBQUEsbUJBQ0g7QUFBQSxtQkFDQTtBQUFBLE9BQ2Y7QUFBQTtBQUFBO0FBQUEscUJBRWlCO0FBQUEscUJBQ0Y7QUFBQSxtQkFDRjtBQUFBLG1CQUNFO0FBQUEsZ0NBQ2E7QUFBQSxzQkFDVjtBQUFBLG1CQUNIO0FBQUEsbUJBQ0E7QUFBQSxPQUNmO0FBQUEsUUFDRTtBQUFBO0FBQUEsT0FJRjtBQUFBO0FBQUEsT0FFQTtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FFQSwyREFDQTtBQUFBO0FBQUEsSUFFSjtBQUFBLEtBQ0U7QUFBQTtBQUFBLGFBRVE7QUFBQSxlQUNFO0FBQUEsd0JBQ1M7QUFBQSxtQkFDTDtBQUFBO0FBQUEsZ0JBRUg7QUFBQSxLQUNYO0FBQUEsTUFBMkM7QUFBQSxpQkFFL0IsbUJBQ0MscUJBQ0g7QUFBQSxPQUNOLGVBQWdCLFFBQVE7QUFBQSxPQUN4QixxQkFBc0I7QUFBQSxPQUN0QixnQkFBaUI7QUFBQSxPQUNqQjtBQUFBLE9BQ0EsUUFBUTtBQUFBO0FBQUE7QUFBQSxPQUNILGtCQUFrQjtBQUFBO0FBQUEsZ0JBR2YsaUJBQ0E7QUFBQSxNQUNSLHFCQUFzQjtBQUFBLE1BQ3RCLFFBQVE7QUFBQTtBQUFBO0FBQUEsTUFDSDtBQUFBO0FBQUEsU0FHRCxPQUFPLGVBQWU7QUFBQTtBQUFBLFNBRXRCLE9BQU8sZ0JBQWdCO0FBQUE7QUFBQSxTQUV2QixPQUFPLGdCQUFnQjtBQUFBO0FBQUEsU0FFdkIsaURBQ0E7QUFBQTtBQUFBLHNCQUVhO0FBQUEsU0FDYixxQkFBc0I7QUFBQSxTQUN0QiwrQkFBK0I7QUFBQTtBQUFBLHNCQUVsQjtBQUFBLFNBQ2IscUJBQXNCO0FBQUEsU0FDdEIsK0JBQStCO0FBQUE7QUFBQSxzQkFFbEI7QUFBQSxTQUNiLHFCQUFzQjtBQUFBLFNBQ3RCLCtCQUErQjtBQUFBO0FBQUE7QUFBQSxtQkFFbEI7QUFBQSxnQkFDTDtBQUFBLGlCQUNDO0FBQUEsY0FDSDtBQUFBLFNBQ04sZUFBZ0IsUUFBUTtBQUFBLFNBQ3hCLHFCQUFzQjtBQUFBLFNBQ3RCLGdCQUFpQjtBQUFBLFNBQ2pCO0FBQUEsU0FDQSxRQUFRO0FBQUE7QUFBQSxTQUVSLG9EQUNBO0FBQUE7QUFBQSxtQkFFVSxxQkFDRjtBQUFBLFNBQ1IscUJBQXNCO0FBQUEsU0FDdEIsUUFBUTtBQUFBO0FBQUEsbUJBRUUsc0JBQ0Y7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLGlCQUVBO0FBQUEsU0FDUixZQUFXLGVBQWlCLFdBQVc7QUFBQSxpQkFDL0I7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLGlCQUVBO0FBQUEsU0FDUixZQUFXLGVBQWlCLE9BQU87QUFBQSxpQkFDM0I7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLG1CQUVFLHFCQUNGO0FBQUEsU0FDUjtBQUFBLGlCQUNRO0FBQUEsU0FDUixxQkFBc0I7QUFBQSxTQUN0QixZQUFXO0FBQUEsVUFDVCxZQUFXLGVBQWlCLFdBQVc7QUFBQSxVQUN2QyxPQUFPO0FBQUE7QUFBQSxTQUVULFFBQVE7QUFBQTtBQUFBLG1CQUVFLHFCQUNGO0FBQUEsU0FDUjtBQUFBLGlCQUNRO0FBQUEsU0FDUixxQkFBc0I7QUFBQSxTQUN0QixZQUFXO0FBQUEsVUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxVQUNuQyxPQUFPO0FBQUE7QUFBQSxTQUVULFFBQVE7QUFBQTtBQUFBLG1CQUVFLHNCQUNGO0FBQUEsU0FDUjtBQUFBLFNBQ0EscUJBQXNCO0FBQUEsaUJBQ2Q7QUFBQSxTQUNSLFlBQVc7QUFBQSxVQUNULFlBQVcsZUFBaUIsV0FBVztBQUFBLFVBQ3ZDLE9BQU87QUFBQTtBQUFBLFNBRVQsUUFBUTtBQUFBO0FBQUEsbUJBRUUsc0JBQ0Y7QUFBQSxTQUNSO0FBQUEsaUJBQ1E7QUFBQSxTQUNSLFlBQVc7QUFBQSxVQUNULFlBQVcsZUFBaUIsT0FBTztBQUFBLFVBQ25DLE9BQU87QUFBQTtBQUFBLFNBRVQsUUFBUTtBQUFBO0FBQUE7QUFBQSxTQUdSLDRDQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBS0k7QUFBQSxTQUNKLFdBQVksd0JBQXdCLEtBQUs7QUFBQSxtQkFDakM7QUFBQSxTQUVSO0FBQUEsVUFDRTtBQUFBLFNBQ0Y7QUFBQSxzQkFFSTtBQUFBO0FBQUEsWUFFQTtBQUFBLGFBQ0U7QUFBQSxZQUdGO0FBQUEsWUFDQTtBQUFBO0FBQUEsWUFFQSxnQkFBZ0I7QUFBQSxZQUVoQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUE7QUFBQSxvQkFFSyxTQUNEO0FBQUEsU0FDUjtBQUFBLFVBQWlDO0FBQUEsV0FFN0I7QUFBQTtBQUFBLFNBSUoscUJBQXNCO0FBQUEsU0FDdEIsUUFBUTtBQUFBLGlCQUVSO0FBQUE7QUFBQSxJQUlWO0FBQUEsSUFDQTtBQUFBLEtBQWdCO0FBQUE7QUFBQSxjQUVEO0FBQUEsYUFDRDtBQUFBLGFBQ0E7QUFBQSxnQkFDRztBQUFBO0FBQUEsTUFFYjtBQUFBLGNBR007QUFBQSxJQUNWO0FBQUEsZ0JBQ2EsaUJBQ0gsaUJBQ0Y7QUFBQSxLQUNOLGFBQWM7QUFBQSxLQUNkLE9BQU87QUFBQTtBQUFBLElBRVQ7QUFBQSxhQUNVO0FBQUEsS0FDUixjQUFlO0FBQUE7QUFBQSxJQUVqQixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUE7QUFBQSxTQWpWVTtBQUFBLFdBQ0E7QUFBQTtBQUFBLE9BQ0c7QUFBQSxVQUVMO0FBQUEsVUFDQTtBQUFBLElBQ04sT0FBTyxvQ0FBb0M7QUFBQSxHQUM3QztBQUFBO0FBQUE7QUFBQSxZQzROYTtBQUFBLGNBQ0U7QUFBQTtBQUFBLGFBRUw7QUFBQSxLQUNOO0FBQUEsTUFDRTtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBO0FBQUEsTUFFRix3Q0FBeUM7QUFBQSxNQUN6QztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUE7QUFBQSxLQUVGLFFBQVE7QUFBQSxJQUNWO0FBQUEsWUFDUTtBQUFBLElBQ1I7QUFBQSxLQUFhO0FBQUE7QUFBQSxLQUVYO0FBQUE7QUFBQSxXQUNRLHVCQUF1QjtBQUFBLFdBQ3ZCO0FBQUEsSUFDVjtBQUFBLFlBQ1E7QUFBQSxJQUNSO0FBQUEsS0FBYTtBQUFBLGNBQ0gsNEJBQTRCO0FBQUEsSUFDdEMsVUFBVTtBQUFBLEdBQ1o7QUFBQSxnREFNRSxPQUFPLG1CQUFtQixDQUM1QjtBQUFBLDBDQzVIRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLElxQjlKRTtBQUFBO0FBQUEsb0NBS0M7QUFBQSxHQUNIO0FBQUEsaUNibUdFLE9BQU8sUUFBUSxDQUNqQjtBQUFBLGlDQXlCRSxPQUFPLFFBQVEsQ0FDakI7QUFBQTtBQUFBLFlhMUhVO0FBQUEsSUFDUixPQUFPO0FBQUEsOERBQXFFO0FBQUEsR0FDOUU7QUFBQSxpQ2JxSkUsT0FBTyxRQUFRLENBQ2pCO0FBQUEsa0NBekNFLFNBQVEsVUFBVSxDQUNwQjtBQUFBO0FBQUEsSUFvREUsT0FBTywrREFBbUU7QUFBQSxHQUM1RTtBQUFBLG1DQU1FLE9BQU8sU0FBUyxDQUNsQjtBQUFBLHNDQXhERSxTQUFRLFNBQVMsQ0FDbkI7QUFBQSw4QkEzQkUsT0FBTyxPQUFPLENBQ2hCO0FBQUE7QUFBQSxZQXlHVTtBQUFBLElBQ1IsbUJBQW9CLDJCQUNsQixjQUNBLElBQUk7QUFBQTtBQUFBLGNBRUs7QUFBQSxhQUNDO0FBQUEsYUFDRjtBQUFBLElBQ1Y7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0EsU0FBUyxhQUFhO0FBQUE7QUFBQTtBQUFBLFFBQ2Q7QUFBQSxJQUNWO0FBQUEsS0FDRTtBQUFBLGFBQ007QUFBQSxLQUNOLFVBQVcsU0FBUztBQUFBO0FBQUEsSUFFdEIsT0FBTyxpQ0FBaUM7QUFBQSxHQUMxQztBQUFBLGlDQTNERSxPQUFPLFFBQVEsQ0FDakI7QUFBQSxpQ0FuREUsT0FBTyxRQUFRLENBQ2pCO0FBQUEsaUNBM0JFLE9BQU8saUJBQWlCLENBQzFCO0FBQUE7QUFBQTtBQUFBLFNhek5RO0FBQUEsV0FDRTtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsa0JBQ007QUFBQSxJQUNiO0FBQUEsS0FBYSxPQUNIO0FBQUE7QUFBQSxRQUVKLEtBQ0EsWUFDQTtBQUFBO0FBQUEsUUFFQSxLQUNBLFVBQ0E7QUFBQTtBQUFBLElBR04sa0JBQW1CO0FBQUEsS0FDakIsT0FBUTtBQUFBO0FBQUE7QUFBQSxRQUdKLGdCQUNBLFdBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFVBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFVBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFFBQ0E7QUFBQTtBQUFBLElBRU4sa0NBQWtDO0FBQUEsR0FDcEM7QUFBQTtBQUFBLElBSUUsdUJBQXdCLGFBQWE7QUFBQSxJQUNyQyx1QkFBd0IsYUFBYTtBQUFBLElBQ3JDLHdCQUF5QixhQUFhO0FBQUEsSUFDdEMsVUFBUztBQUFBLEdBQ1g7QUFBQTtBQUFBO0FBQUEsU2JtVFU7QUFBQSxTQUNGO0FBQUEsWUFDQztBQUFBLFlBQ0E7QUFBQSxrQkFDTTtBQUFBLGNBQ0E7QUFBQSxpQkFDRztBQUFBLFNBQ1I7QUFBQSxTQUNBO0FBQUEsSUFDUix1QkFBd0I7QUFBQSxjQUNkO0FBQUEsSUFDVjtBQUFBLEtBQ0U7QUFBQSxLQUNBLElBQUk7QUFBQSxLQUNKLGFBQWM7QUFBQSxLQUNkLElBQUk7QUFBQSxLQUNKLHVCQUF3QjtBQUFBLEtBRXhCLEdBQUksZ0NBQWdDO0FBQUEsS0FDcEMsSUFBSTtBQUFBLEtBQ0osTUFBTSxlQUFlO0FBQUEsS0FFckIsR0FBSSx3QkFBd0I7QUFBQTtBQUFBLElBRTlCLFNBQVUsMEJBQTBCO0FBQUEsSUFDcEM7QUFBQTtBQUFBO0FBQUEsT0FFRTtBQUFBLEtBRUE7QUFBQSxJQUNGLGFBQWMsTUFBTTtBQUFBLElBQ3BCLFVBQVU7QUFBQSxHQUNaO0FBQUEsZ0NBaklFLE9BQU8sT0FBTyxDQUNoQjtBQUFBLHdDQVNFLE9BQU8sZUFBZSxDQUN4QjtBQUFBLHlDQVNFLE9BQU8sZ0JBQWdCLENBQ3pCO0FBQUEsa0RBTkUsT0FBTyx5QkFBeUI7QUFBQSxHQUNsQztBQUFBLGlDQTFDRSxPQUFPLFFBQVEsQ0FDakI7QUFBQSxtQ0EyRUUsT0FBTyxXQUFXLENBQ3BCO0FBQUEsaUNBOUNFLE9BQU8sUUFBUSxDQUNqQjtBQUFBO0FBQUE7QUFBQSxTYWhOVTtBQUFBLFNBQ0Y7QUFBQSxZQUNDO0FBQUEsWUFDQTtBQUFBLGtCQUNNO0FBQUEsV0FDSDtBQUFBLGlCQUNJO0FBQUEsU0FDUixVQUFZO0FBQUEsU0FDVjtBQUFBLElBQ1IsdUJBQXdCO0FBQUEsY0FDaEI7QUFBQSxJQUNSO0FBQUEsS0FDRSxJQUFJO0FBQUEsS0FDSixhQUFjO0FBQUEsS0FDZCxJQUFJO0FBQUEsS0FDSix1QkFBd0I7QUFBQSxLQUN4QjtBQUFBLEtBQ0Esb0JBQXFCO0FBQUE7QUFBQSxJQUV2QixjQUFlO0FBQUEsSUFJZjtBQUFBLElBQ0Esb0NBRUU7QUFBQSxJQUNGLGNBQWM7QUFBQSxHQUNoQjtBQUFBLDZCckIwT3dCO0FBQUEseUJHL090QixRQUFRLENBQ1Y7QUFBQSxpQ0R1S0UsNEJBQTJCLENBQzdCO0FBQUE7QUFBQSxJQ1RFLE9BQU8sV0FBVyx5QkFBeUI7QUFBQSxHQUM3QztBQUFBLGlDQTFQRSxhQUNBLFFBQVEsQ0FDVjtBQUFBLGlDQTZhRSxpQkFBZ0IsQ0FDbEI7QUFBQTtBQUFBLEkyQmhZRSxpQkFBa0IsbUJBQ0c7QUFBQSxJQUVyQixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsSTNCK0dFLGlCQUFrQix3QkFDUTtBQUFBLElBRTFCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXlSRSxPQUFXLHlCQUFxQiwyQkFBMkI7QUFBQSxHQUM3RDtBQUFBO0FBQUEsSUFLRTtBQUFBLElBS0EsT0FBVywwQkFBc0IsaUNBQWlDO0FBQUEsR0FDcEU7QUFBQSxpQ0E1UkUsWUFBVSxDQUNaO0FBQUEsa0NBU0UsUUFBUSxDQUNWO0FBQUEsbUNOMmxCRSxPQUFPLDBCQUEwQixDQUNuQztBQUFBO0FBQUEsSU16aEJFO0FBQUE7QUFBQSxPQUVJLE9BQU8sR0FBRztBQUFBO0FBQUEsT0FFVixPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxhQUFhO0FBQUE7QUFBQSxPQUVwQixPQUFPLG1CQUFtQjtBQUFBO0FBQUEsT0FFMUIsT0FBTyx5QkFBeUI7QUFBQTtBQUFBLE9BRWhDLE9BQU8sK0JBQStCO0FBQUE7QUFBQSxPQUV0QyxPQUFPLHFDQUFxQztBQUFBO0FBQUEsT0FFNUMsT0FBTywyQ0FBMkM7QUFBQTtBQUFBLElBRXRELE9BQU8sY0FBYyxzQkFBc0I7QUFBQSxHQUM3QztBQUFBLHNDQXdJRSxzQ0FBd0MsQ0FDMUM7QUFBQSw4QkE5WkUsV0FBVyxDQUNiO0FBQUE7QUFBQTtBQUFBLFMyQmFRO0FBQUE7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFnQlE7QUFBQSxJQUNkLFlBQVcsc0JBQXdCLGNBQWM7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsaUJBbkNhO0FBQUEsSUFDWCxHQUFJO0FBQUEscUJBRU87QUFBQSxLQUNUO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUNBLFVBQVU7QUFBQTtBQUFBO0FBQUEsS0FDTCxXQUNNO0FBQUEsR0FFZjtBQUFBLHlCQXRCb0I7QUFBQTtBQUFBLElBRWxCLEtBQUssNkJBQTZCLFFBQVE7QUFBQSxJQUMxQyxPQUFPO0FBQUE7QUFBQSw0Q0FHbUM7QUFBQSxHQUM1QztBQUFBLHFDM0JlRSw2QkFBNkIsQ0FDL0I7QUFBQTtBQUFBLElBK1FFLE9BQU8sRUFBRSxpQ0FBRixJQUF1Qyx5QkFBeUI7QUFBQSxHQUN6RTtBQUFBO0FBQUEsSUFJRTtBQUFBO0FBQUEsT0FFSSxPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxXQUFXO0FBQUE7QUFBQSxPQUVsQixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsT0FBTyx1QkFBdUI7QUFBQTtBQUFBLE9BRTlCLE9BQU8sNkJBQTZCO0FBQUE7QUFBQSxPQUVwQyxPQUFPLG1DQUFtQztBQUFBO0FBQUEsT0FFMUMsT0FBTyx5Q0FBeUM7QUFBQTtBQUFBLE9BRWhELE9BQU8sK0NBQStDO0FBQUE7QUFBQSxpQkFHeEQsT0FBTyxjQUFjLHNCQUFzQixDQUM3QztBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU8sT0FBTztBQUFBLEdBQ2hCO0FBQUE7QUFBQSxZQXVLUTtBQUFBLElBQ04sWUFBVztBQUFBLGFBQ0g7QUFBQSxLQUNOLEVBQUU7QUFBQTtBQUFBLElBRUosUUFBUTtBQUFBLEdBQ1Y7QUFBQSxpQ0E3ZUUsT0FBTyxxQkFBcUIsQ0FDOUI7QUFBQSxpQ0FJRSxVQUNBLFFBQVEsQ0FDVjtBQUFBLHdDQTJiRSxrQkFBaUIsQ0FDbkI7QUFBQTtBQUFBLGNBek9VLGNBQ0E7QUFBQSxJQUNSO0FBQUEsSUFDQSxZQUFXLGlCQUFtQjtBQUFBLElBQzlCLFFBQVE7QUFBQSxHQUNWO0FBQUEsK0JBN0JFLFVBQVMsQ0FDWDtBQUFBLHNDTjBsQkUsT0FBTyx5QkFBeUIsQ0FDbEM7QUFBQSxnQ01sbEJFLFFBQVEsQ0FDVjtBQUFBLGdDQUlFLFlBQVksQ0FDZDtBQUFBLGlDTmdtQkUsT0FBTywwQkFBMEIsQ0FDbkM7QUFBQSw4Qk0xeEJFLGVBQWUsQ0FDakI7QUFBQTtBQUFBLFlBNk5VO0FBQUEsSUFFUixLQUFLO0FBQUEsS0FDSDtBQUFBO0FBQUE7QUFBQSxJQVFGLE9BQVcsU0FBSztBQUFBLEdBQ2xCO0FBQUE7QUFBQSxJQTRGRTtBQUFBLEtBQ0Usc0JBQXVCO0FBQUEsZUFHYjtBQUFBLEtBQ1YsaUNBQWlDLGdDQUFnQyxDQUw1RCxDQU1OO0FBQUEsR0FDSDtBQUFBO0FBQUEsSUFLRSx5QkFDRSxPQUFPLHdCQUF3QixDQUQxQixDQUVOO0FBQUEsR0FDSDtBQUFBO0FBQUEsSUFJRTtBQUFBLEtBQ0U7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBRnhCLENBR047QUFBQSxHQUNIO0FBQUE7QUFBQSxJQUlFO0FBQUEsZUFDWTtBQUFBLEtBQ1Y7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBSHhCLENBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxJQUlFO0FBQUEsS0FDRTtBQUFBLGVBQ1U7QUFBQSxLQUNWLGlDQUFpQyxnQ0FBZ0MsQ0FINUQsQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUUseUJBQ0UsT0FBTyw4QkFBOEIsQ0FEaEMsQ0FFTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUU7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLEtBQ0EsT0FBTyxzQkFBc0IsQ0FIeEIsQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUU7QUFBQSxlQUNZO0FBQUEsS0FDVjtBQUFBLEtBQ0E7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBSnhCLENBS047QUFBQSxHQUNIO0FBQUE7QUFBQSxJQWhURSxPQUFPLG1DQUEwQztBQUFBLEdBQ25EO0FBQUEsaURBUEUsUUFBNEIsQ0FDOUI7QUFBQSxzQ2NRRSxlQUFlLENBQ2pCO0FBQUE7QUFBQSxJQXpFRSxHQUFJO0FBQUEsS0FBeUMsV0FBVztBQUFBLFlBQy9DO0FBQUEsS0FBcUIsVUFBVTtBQUFBLFlBQy9CO0FBQUEsS0FBc0IsVUFBVTtBQUFBO0FBQUEsS0FDa0IsVUFBVTtBQUFBLDRCQUM1QyxVQUFVLE9BQzlCLFdBQVc7QUFBQSxHQUNsQjtBQUFBO0FBQUEsSUFzTUUsT0FBTyxrQ0FBa0M7QUFBQSxHQUMzQztBQUFBO0FBQUEsSUEzQ0UsZUFDRSxVQUNBLFFBQVE7QUFBQSxJQUVWLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQTZCRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBekJFLE9BQ0U7QUFBQSxlQUVBO0FBQUE7QUFBQSxlckJyUEo7QUFBQSxHcUIyUEE7QUFBQTtBQUFBLElBTUU7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJRGpGRTtBQUFBLElBQ0E7QUFBQSxLQUNFO0FBQUEsS0FDQSxLQUFLO0FBQUEsS0FDTCxlQUVFLGFBQ0EsS0FBSztBQUFBO0FBQUEsSUFHVCxpQkFDRSxhQUNBLEtBQUs7QUFBQSxJQUVQLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJTzRHRSxVQUFTLG1DQUFtQztBQUFBLEdBQzlDO0FBQUEsZ0NBTUUsVUFBUyxrQ0FBa0MsQ0FDN0M7QUFBQTtBQUFBLElRbFNFLElBQUk7QUFBQSxZQUNFLGtCQUNFO0FBQUEsSUFDUixZQUFXO0FBQUEsS0FDVCxRQUFTLHNCQUF1QjtBQUFBLElBQ2xDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLGtCQU1pQjtBQUFBLHNCQUNJO0FBQUEscUJBQ0Q7QUFBQSxvQkFDRDtBQUFBLG9CQUNBO0FBQUEsdUJBQ0c7QUFBQSx1QkFDQTtBQUFBLGdCQUNQO0FBQUEsbUJBQ0c7QUFBQSxtQkFDQTtBQUFBLGlCQUNGO0FBQUEsaUJBQ0E7QUFBQSxJQUVkO0FBQUEsS0FDRSxlQUFlO0FBQUEsS0FDZixrQkFBa0I7QUFBQSxLQUNsQixnQkFBZ0I7QUFBQSxLQUNoQixnQkFBZ0I7QUFBQSxLQUNoQixrQkFBa0I7QUFBQTtBQUFBLG1CQUlaLHNCQUVHO0FBQUEsSUFFWDtBQUFBLEtBRUU7QUFBQSxLQUNBO0FBQUE7QUFBQTtBQUFBLEtBQ0s7QUFBQSxJQUlQO0FBQUEsZ0JBRVc7QUFBQSxLQUNULGFBQWMsaUJBQWdCO0FBQUEsbUJBRWxCO0FBQUEsS0FDWjtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUE7QUFBQSxLQUdGO0FBQUEsTUFBb0Qsa0NBQ2Ysa0JBQWlCLE9BQy9DO0FBQUE7QUFBQSxNQUdMLElBQUk7QUFBQSxNQUNKO0FBQUE7QUFBQSxLQUdGO0FBQUEsTUFBdUM7QUFBQTtBQUFBLE1BQ2xDO0FBQUEsS0FFTDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsT0FBb0M7QUFBQTtBQUFBLE9BQy9CLDhCQUE4QjtBQUFBO0FBQUEsd0JBS3BCO0FBQUE7QUFBQSxHQUdyQjtBQUFBO0FBQUEsZXpCNkJXO0FBQUEsSUFDVCxZQUFXO0FBQUEsZUFDRDtBQUFBLEtBQ1IsV0FBVztBQUFBO0FBQUEsSUFFYixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsWUhvSFE7QUFBQSxJQUNOLFlBQVcsbUNBQ0gsTUFDTjtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBSVE7QUFBQSxJQUNOLHlCQUNFO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBLGdDYU5FLE9BQU8sYUFBYSxDQUN0QjtBQUFBLGdDQWJFLE9BQU8sYUFBYSxDQUN0QjtBQUFBLCtCQUdFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUE7QUFBQSxNZ0J6UGlCLHFCQUNmO0FBQUE7QUFBQSxNQU9rQixxQkFDbEI7QUFBQTtBQUFBLDJCQWlCRSxPQUFPLDJCQUEyQixDQUNwQztBQUFBLDJCQUVFLE9BQU8scUNBQXFDLENBQzlDO0FBQUEsc0JBRUUsT0FBTyxtQkFBbUIsQ0FDNUI7QUFBQSx1QkFFRSxPQUFPLG9CQUFvQixDQUM3QjtBQUFBLHVCQUVFLE9BQU8sb0JBQW9CLENBQzdCO0FBQUEsdUJBRUUsT0FBTyxvQkFBb0IsQ0FDN0I7QUFBQSx3QkFFRSxPQUFPLEdBQUcsZUFBZSxtQkFBbUIsQ0FDOUM7QUFBQSx1QkFFRSxPQUFPLG1CQUFtQixDQUM1QjtBQUFBLDBCQUVFLE9BQU8sc0JBQXNCLENBQy9CO0FBQUE7QUFBQSxTQUNNO0FBQUEsWUFDRztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBRUY7QUFBQSxTQUNDO0FBQUEsU0FDQTtBQUFBLFVBQ0M7QUFBQSxVQUNBO0FBQUEsSUFFVCxJQUFJO0FBQUEsSUFFSixJQUFJLElBQUksT0FBTztBQUFBLElBQ2YsSUFBSSxJQUFJLE9BQU87QUFBQSxJQUNmLElBQUksT0FBTztBQUFBLElBRVgsV0FBVyxJQUFJO0FBQUEsYUFFUixTQUNBO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLLElBQUksYUFBYTtBQUFBLElBQ3RCLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLEliOEhFLHNDQUF5QztBQUFBLGNBQ2pDLGlCQUNBO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxpQkFBbUI7QUFBQSxJQUM5QixRQUFRO0FBQUEsR0FDVjtBQUFBLHNDQVpFLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQTtBQUFBLE1yQnhMMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQ0l3UnpCLFFBQVEsQ0FDVjtBQUFBO0FBQUEsY2F4RVksb0JBQ0Y7QUFBQSxJQUNSLG9CQUFvQjtBQUFBLElBQ3BCLE9BQU8sMkJBQTJCLG1CQUFtQjtBQUFBLEdBQ3ZEO0FBQUE7QUFBQTtBQUFBLFloQjRKYTtBQUFBLFNBQ0w7QUFBQSxhQUNJO0FBQUEsSUFDVjtBQUFBLEtBQ0UsT0FBTztBQUFBLEtBQ1A7QUFBQTtBQUFBO0FBQUEsS0FFQTtBQUFBLE9BQU87QUFBQSxLQUNQO0FBQUEsS0FDQTtBQUFBO0FBQUE7QUFBQSxLQUVBO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxpQkFDVTtBQUFBLEtBQ1YsY0FBZTtBQUFBLEtBQ2YsT0FBTztBQUFBLEtBQ1A7QUFBQTtBQUFBLElBRUYsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLGNnQmpZWSx5QkFDRztBQUFBLElBQ2I7QUFBQSxLQUFnQjtBQUFBLGlCQUVEO0FBQUEsTUFDWCxlQUFnQjtBQUFBLE1BQ2hCLG9CQUFvQjtBQUFBO0FBQUE7QUFBQSxLQUVqQjtBQUFBO0FBQUE7QUFBQSxTQUVRO0FBQUE7QUFBQSxNQU1YLGVBQWdCO0FBQUEsTUFDaEIsb0JBQW9CO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBR0osT0FBTywyQkFBMkIsbUJBQW1CO0FBQUEsR0FDdkQ7QUFBQTtBQUFBLElBS0UsT0FBTyxlQUFlLGtDQUFrQztBQUFBLEdBQzFEO0FBQUEscUNZaUNFLFFBQVEsQ0FDVjtBQUFBLDZEQVpFLFFBQVEsQ0FDVjtBQUFBLHFDQUlFLFFBQVEsQ0FDVjtBQUFBO0FBQUE7QUFBQSxrQjVCc0ZtQjtBQUFBLFlBQ047QUFBQSxJQUNYO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxHQUNuQjtBQUFBLDBEQUtFLDRDQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQWtJYTtBQUFBLElBQ1gsT0FBTyxzQkFBc0I7QUFBQSxHQUMvQjtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1gsT0FBTyxvQkFBb0IsbUJBQW1CO0FBQUEsR0FDaEQ7QUFBQSxzQkF0U21CO0FBQUE7QUFBQSxZQUtYO0FBQUEsSUFDTixNQUNFLHFCQUNBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUFpaEJhO0FBQUEsSUFDWCxrQkFBa0I7QUFBQSxJQUNsQiw0Q0FBNEMsUUFBUTtBQUFBLElBQ3BEO0FBQUEsS0FDRTtBQUFBLE9BQ0U7QUFBQTtBQUFBLEtBRUcsY0FDUTtBQUFBLE1BQStCLE9BQ25DO0FBQUEsSUFHWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQTlSYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQSxjQUFjO0FBQUEsS0FDZDtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw0Q21CYkUsUUFBUSxDQUNWO0FBQUEseUNBYkUscUJBQXVCLENBQ3pCO0FBQUEseUNBaUJFLFFBQVEsQ0FDVjtBQUFBLGdEQWJFLFFBQVEsQ0FDVjtBQUFBLHdDakJsUEUsUUFBUSxDQUNWO0FBQUEsNENtQjBIRSxRQUFRLENBQ1Y7QUFBQSxxQ0FQRSxxQkFBcUIsQ0FDdkI7QUFBQSwrQnBCMkswQjtBQUFBLGtEQUt4Qiw4QkFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsYURtQ1c7QUFBQSxJQUNULE9BQU8scUNBQXFDO0FBQUEsR0FDOUM7QUFBQTtBQUFBLGFBT1c7QUFBQSxJQUNULE9BQU8scUNBQXFDO0FBQUEsR0FDOUM7QUFBQTtBQUFBLGVBeUVhO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRix3Q0FBeUM7QUFBQSxjQUNqQztBQUFBLElBQ1I7QUFBQSxJQUNBLFVBQVU7QUFBQSxHQUNaO0FBQUE7QUFBQSxjQUtVO0FBQUEsSUFDUixZQUFXO0FBQUEsS0FBaUIsbUJBQ047QUFBQSxJQUV0QixjQUFjO0FBQUEsR0FDaEI7QUFBQTtBQUFBLGVBMERhLGlDQUNMO0FBQUEsSUFDTjtBQUFBLEtBQUc7QUFBQSxNQUVDO0FBQUEsT0FDRSxnQkFBZ0I7QUFBQSxPQUNoQjtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQSxNQUVGLDBDQUEyQyw0QkFDZDtBQUFBLHFCQUVoQjtBQUFBLE1BQ2I7QUFBQSxNQUNBLGlDQUFrQyw0QkFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSWpDLCtCQUFpQztBQUFBLEdBQ25DO0FBQUE7QUFBQSxlQXBSYTtBQUFBLElBQ1gsNkJBQTZCO0FBQUEsR0FDL0I7QUFBQTtBQUFBLElBbWJFLE9BQU8sNENBQTRDO0FBQUEsR0FDckQ7QUFBQTtBQUFBLElVOXJCRTtBQUFBLEtBQWM7QUFBQTtBQUFBLEtBQ1Q7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUEscUNBVEUsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQSxJQVlFLGVBQ0UsaUJBQ0EsUUFBUTtBQUFBLElBRVYsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElFNGhCRTtBQUFBLEtBQW1CO0FBQUEsZUFFTiwwQkFDQztBQUFBLE1BQ1YsT0FBTyx3QkFBd0I7QUFBQTtBQUFBO0FBQUEsSUFHbkMsT0FBTyx1QkFBdUI7QUFBQSxHQUNoQztBQUFBO0FBQUE7QUFBQSxJWjlnQkU7QUFBQSxLQUNFO0FBQUEsS0FDQSxTQUFTO0FBQUE7QUFBQTtBQUFBLEtBQ21CO0FBQUE7QUFBQSxLQUV2QixTQUFTO0FBQUEsSUFDaEI7QUFBQSxJQUNBLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsWUFFUTtBQUFBLElBQ047QUFBQSxLQUNFO0FBQUE7QUFBQSxRQUVJLGNBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBLGlCQUNBO0FBQUE7QUFBQSxRQUVBLGNBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLFFBRUEsWUFDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLEtBRUo7QUFBQTtBQUFBO0FBQUEsWUFFUztBQUFBLFlBQ0E7QUFBQSxJQUNYLE9BQU8sdUNBQXVDO0FBQUEsR0FDaEQ7QUFBQSxHQUNBO0FBQUEsb0JBQ2dCO0FBQUE7QUFBQSxPQUVaO0FBQUEsaUJBQ1M7QUFBQSxpQkFDSywyQkh2R2xCO0FBQUEsTUd3R0U7QUFBQSxNQUNBO0FBQUEsUUFDRTtBQUFBO0FBQUEsTUFHRjtBQUFBLFFBQ0U7QUFBQTtBQUFBO0FBQUEsTUFHRjtBQUFBLFFBQ0U7QUFBQTtBQUFBO0FBQUEsS0FoQkg7QUFBQSxLQUFEO0FBQUE7QUFBQSxrQkE4SGM7QUFBQSxJQUNaO0FBQUEsS0FDRTtBQUFBO0FBQUEsWUFDTztBQUFBLGNBQ0U7QUFBQSxjQUNBO0FBQUE7QUFBQSxPQUNDO0FBQUEsZ0JBRUY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTUE7QUFBQTtBQUFBLElBR1Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxHQUNmO0FBQUEsOERBTUUsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBO0FBQUEsa0JBcERjO0FBQUEsSUFDWjtBQUFBLEtBQ0U7QUFBQTtBQUFBLFlBQ087QUFBQSxjQUNFO0FBQUEsZ0JBQ0U7QUFBQTtBQUFBLE9BQ0Q7QUFBQSxnQkFFRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBS0E7QUFBQTtBQUFBLElBR1Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxHQUNmO0FBQUEsK0RBd0NFLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQTtBQUFBLFlBMUVRLFVBQ0s7QUFBQSxJQUNYO0FBQUEsZ0JBQ2E7QUFBQSxLQUNYLDRCQUE2QjtBQUFBO0FBQUEsSUFFL0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBMllhO0FBQUEsSUFDWDtBQUFBLEtBQWtCO0FBQUEsSUFDbEIsU0FBUztBQUFBLElBQ1Q7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUY7QUFBQTtBQUFBLE9BRUk7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BRUE7QUFBQSxPQUNBO0FBQUEsT0FDQSwyQ0FBNEM7QUFBQSxPQUM1QztBQUFBO0FBQUEsZ0JBRVM7QUFBQSxPQUNUO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxRQUNBLDJDQUE0QztBQUFBO0FBQUE7QUFBQSxRQUU1QyxnQkFBZ0I7QUFBQSxRQUNoQjtBQUFBLFFBQ0E7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFFBQ2hCO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxJQUVKLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxpQkFLZTtBQUFBLElBQ2IsT0FBTyw4Q0FBOEM7QUFBQSxHQUN2RDtBQUFBO0FBQUEsSUFhRSxPQUFPO0FBQUEscUJBRUwsMENBR0Q7QUFBQSxHQUNIO0FBQUE7QUFBQSxpQkFiZTtBQUFBLElBQ2IsT0FBTyw4Q0FBOEM7QUFBQSxHQUN2RDtBQUFBO0FBQUEsWUFpQlUsdUJBQXVCO0FBQUEsSUFDL0I7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQXNEVTtBQUFBLElBQ1IsMEJBQTBCO0FBQUEsSUFDMUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBck1hO0FBQUEsSUFDWCx5REFBeUQ7QUFBQSxHQUMzRDtBQUFBLG1DQUtFLE9BQU8sdUJBQXVCLENBQ2hDO0FBQUE7QUFBQSxJQUtFLE9BQU8sb0JBQW9CLG9CQUFvQjtBQUFBLEdBQ2pEO0FBQUE7QUFBQSxlQWlLYTtBQUFBLElBQ1gscUNBQXFDO0FBQUEsR0FDdkM7QUFBQSxvQ0FLRSxPQUFPLHdCQUF3QixDQUNqQztBQUFBO0FBQUEsSUFLRSxPQUFPLG9CQUFvQixxQkFBcUI7QUFBQSxHQUNsRDtBQUFBLGdEeUI3b0JFLFFBQVEsQ0FDVjtBQUFBLDJDQWJFLFFBQVEsQ0FDVjtBQUFBLDRDQXVCRSxRQUFRLENBQ1Y7QUFBQSwyQ0FyQ0UsUUFBUSxDQUNWO0FBQUEsb0R4QjJURSw0QkFBNEI7QUFBQSxHQUM5QjtBQUFBO0FBQUEsZUQwSWE7QUFBQSxJQUNYLHdCQUF5QjtBQUFBLElBQ3pCO0FBQUE7QUFBQTtBQUFBLEtBSUU7QUFBQTtBQUFBLEtBR0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx5Q0FLRSxPQUFPLHlCQUF5QixDQUNsQztBQUFBO0FBQUEsY0FLWTtBQUFBLElBQ1YsT0FBTyx5QkFBeUI7QUFBQSxHQUNsQztBQUFBO0FBQUEsSUE4SkU7QUFBQSxlQUNXO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsMENBS0UsT0FBTywwQkFBMEIsQ0FDbkM7QUFBQTtBQUFBLGNBSVk7QUFBQSxJQUNWLE9BQU8sMEJBQTBCO0FBQUEsR0FDbkM7QUFBQTtBQUFBLGVBL1phO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQWljRTtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBMWxCYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQWtNYTtBQUFBLElBQ1gsMEJBQ0UsS0FEWTtBQUFBLElBR2QsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBS0U7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJc0IvS0UsWUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLElMRUUsR0FBSTtBQUFBLGVBQ007QUFBQSxLQUNSLElBQUk7QUFBQSxhQUNJLG1CQUNGO0FBQUEsS0FDTixRQUNFLFNBQ0E7QUFBQSxLQUVGLGdCQUFnQjtBQUFBO0FBQUEsSUFFbEIsR0FBSSxpQkFBaUIsa0NBQWtDO0FBQUEsSUFDdkQsb0JBQW9CO0FBQUEsR0FDdEI7QUFBQTtBQUFBO0FBQUEsWVZBYTtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsSUFDL0IsMkNBQTRDO0FBQUEsSUFDNUMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLEl5QnBFRTtBQUFBLGVBQ1k7QUFBQSxLQUNWO0FBQUEsS0FDQSxpQkFBa0IsTUFBTTtBQUFBLGVBQ2Q7QUFBQSxLQUNWO0FBQUEsS0FDQTtBQUFBLE1BQWtCO0FBQUE7QUFBQSxNQUNiO0FBQUE7QUFBQSxHQUVUO0FBQUE7QUFBQSxJQUdFO0FBQUEsZUFDWTtBQUFBLEtBQ1Y7QUFBQSxLQUNBLGlCQUFrQixNQUFNO0FBQUEsZUFDZDtBQUFBLEtBQ1Y7QUFBQSxLQUNBLGlCQUFrQix5QkFDYjtBQUFBO0FBQUEsR0FFVDtBQUFBO0FBQUE7QUFBQSxrQkFHaUI7QUFBQSxzQkFDSTtBQUFBLHFCQUNEO0FBQUEsb0JBQ0Q7QUFBQSxvQkFDQTtBQUFBLHVCQUNHO0FBQUEsdUJBQ0E7QUFBQSxlQUNSO0FBQUEsZ0JBQ0M7QUFBQSxtQkFDRztBQUFBLG1CQUNBO0FBQUEsaUJBQ0Y7QUFBQSxpQkFDQTtBQUFBLHFCQUNJO0FBQUEsd0JBQ0c7QUFBQSx3QkFDQTtBQUFBLHNCQUNGO0FBQUEsc0JBQ0E7QUFBQSxnQkFDTjtBQUFBLElBRWI7QUFBQSxLQUNFLGVBQWU7QUFBQSxLQUNmLGtCQUFrQjtBQUFBLEtBQ2xCLGdCQUFnQjtBQUFBLEtBQ2hCLGdCQUFnQjtBQUFBLEtBQ2hCLGtCQUFrQjtBQUFBO0FBQUEsSUFFcEI7QUFBQSxLQUNFLG9CQUFvQjtBQUFBLEtBQ3BCLHVCQUF1QjtBQUFBLEtBQ3ZCLHFCQUFxQjtBQUFBLEtBQ3JCLHFCQUFxQjtBQUFBLEtBQ3JCLHVCQUF1QjtBQUFBO0FBQUEsSUFFekI7QUFBQSxLQUNFLGVBQWU7QUFBQSxtQkFHVCxzQkFFRztBQUFBLElBRVg7QUFBQSxLQUVFO0FBQUEsS0FDQTtBQUFBO0FBQUE7QUFBQSxLQUNLO0FBQUEsSUFJUDtBQUFBLGdCQUVXO0FBQUEsS0FDVDtBQUFBLG1CQUNhO0FBQUEsTUFDWDtBQUFBLE1BQ0EsaUJBQWdCO0FBQUE7QUFBQSxtQkFHTjtBQUFBLEtBQ1o7QUFBQSxtQkFDYTtBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUEsS0FHRjtBQUFBLE1BQW9ELGtDQUNmLGtCQUFpQixPQUMvQztBQUFBO0FBQUEsTUFHTCxJQUFJO0FBQUEsTUFDSjtBQUFBO0FBQUEsa0JBR1M7QUFBQSxLQUNYO0FBQUEsTUFBdUM7QUFBQTtBQUFBLE1BQ2xDO0FBQUEsS0FFTDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsT0FBb0M7QUFBQTtBQUFBLE9BQy9CLDhCQUE4QjtBQUFBO0FBQUE7QUFBQSxzQkFHckI7QUFBQSxNQUVkO0FBQUEsT0FDRTtBQUFBO0FBQUEsT0FDRztBQUFBLE1BQ0w7QUFBQSxPQUNFO0FBQUE7QUFBQSxNQVNGLGNBQWU7QUFBQTtBQUFBO0FBQUEsR0FHckI7QUFBQSwrQmxDZ25CRSxPQUFPLHlCQUF5QixDQUNsQztBQUFBO0FBQUEsSW1CbHVCRSxHQUFJLG1CQUFtQixpQkFBaUIsaUJBQWlCO0FBQUEsSUFDekQsWUFBYSxRQUFRO0FBQUEsSUFDckIsWUFBYSxpQkFDUSxzQkFDUCxtQnBCbEloQjtBQUFBLGVvQm9JYSxtQ0FDRDtBQUFBLElBQ1Y7QUFBQSxLQUFxQixPQUFPO0FBQUE7QUFBQSxLQUN2QixPQUFPO0FBQUEsSUFDWixPQUFPLDhCQUE4QjtBQUFBLEdBQ3ZDO0FBQUE7QUFBQSxJT2dKRSxVQUFTLG9DQUFvQztBQUFBLEdBQy9DO0FBQUE7QUFBQSxJTnpERTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLFlBNUlVO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxtQkFBcUI7QUFBQSxJQUNoQyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFvQ0UscUJBQ0UsY0FDQSxRQUFRO0FBQUEsSUFFVixRQUFRO0FBQUEsR0FDVjtBQUFBLG1DQUtFLFFBQVEsQ0FDVjtBQUFBLHFDQXdFRSxlQUFlLENBQ2pCO0FBQUEseUNBU0UsUUFBUSxDQUNWO0FBQUEsNENBTkUsbUJBQXFCLENBQ3ZCO0FBQUE7QUFBQSxZQXpIUSxjQUNFO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxlQUFpQjtBQUFBLElBQzVCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJZHlQRTtBQUFBO0FBQUEsT0FFSSxPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxXQUFXO0FBQUE7QUFBQSxPQUVsQixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsT0FBTyx1QkFBdUI7QUFBQTtBQUFBLE9BRTlCLE9BQU8sNkJBQTZCO0FBQUE7QUFBQSxPQUVwQyxPQUFPLG1DQUFtQztBQUFBO0FBQUEsT0FFMUMsT0FBTyx5Q0FBeUM7QUFBQTtBQUFBLE9BRWhELE9BQU8sK0NBQStDO0FBQUE7QUFBQSxpQkFHeEQsT0FBTyxnQkFBZ0IsQ0FDekI7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPLE9BQU87QUFBQSxHQUNoQjtBQUFBO0FBQUEsa0JjN05jO0FBQUEsSUFDWjtBQUFBLEdBRUY7QUFBQTtBQUFBO0FBQUEsTW5Cd2NzQjtBQUFBO0FBQUE7QUFBQSxXQUdoQjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsVUFORjtBQUFBO0FBQUEsV0FVRSxZQUFXO0FBQUEsWUFDVDtBQUFBLFVBRko7QUFBQTtBQUFBLHFCQU1VO0FBQUEsV0FDUixZQUFXO0FBQUEsWUFDVDtBQUFBLFVBSEo7QUFBQTtBQUFBLFdBT0U7QUFBQSxXQUNBLFlBQVc7QUFBQSxZQUNUO0FBQUEsVUFISjtBQUFBO0FBQUEsV0FPRTtBQUFBLFlBQ0U7QUFBQTtBQUFBLFlBRUE7QUFBQTtBQUFBLFlBQ0c7QUFBQSxVQUxQO0FBQUEsZ0JBU0UscUJBQXFCLENBRHZCO0FBQUE7QUFBQSxXQUtFO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQSxpQkFBaUI7QUFBQSxVQVJuQjtBQUFBO0FBQUEsUUFXRjtBQUFBLFNBQ0UsUUFBUTtBQUFBO0FBQUEsdUJBRVM7QUFBQSxxQkFDSjtBQUFBLFNBR2I7QUFBQSxVQUNFO0FBQUE7QUFBQTtBQUFBLG1CQUlXO0FBQUEsa0JBQ0g7QUFBQSw2QkFDVyxvQkFBc0I7QUFBQTtBQUFBLFVBR3pDLGVBQWdCLFlBQVk7QUFBQSxnQ0FDTjtBQUFBLFVBQ3RCO0FBQUEsV0FDRTtBQUFBLFdBQ0EsV0FBVztBQUFBO0FBQUEsZUFFWCwyQkFDQSxZQUFZO0FBQUEsU0FFaEI7QUFBQTtBQUFBLFVBR0U7QUFBQSxXQUNFLEdBQUksU0FBUyxNQUFNO0FBQUE7QUFBQSxtQkFDVjtBQUFBLGtCQUNEO0FBQUEsdUJBQ0s7QUFBQSxXQUNiO0FBQUEsWUFDRTtBQUFBLFdBQ0Y7QUFBQSxZQUNFO0FBQUEsWUFDQSxZQUFXO0FBQUEsYUFDVCxnQkFBZ0I7QUFBQSxZQUNsQjtBQUFBLDZCQUNpQjtBQUFBLFlBQ2pCLFlBQVcsZ0JBQ1Q7QUFBQSxZQUVGO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUE7QUFBQTtBQUFBLFlBRUE7QUFBQSxZQUNBLFlBQVc7QUFBQSxhQUNULGdCQUFnQjtBQUFBLFlBQ2xCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxhQUNFO0FBQUE7QUFBQTtBQUFBLFdBSUo7QUFBQSxXQUNBO0FBQUE7QUFBQSxrQkFDUztBQUFBLFdBQ1Q7QUFBQSxZQUNFO0FBQUEsV0FFRixHQUFJO0FBQUEsWUFDRjtBQUFBLFdBQ0YsbUJBQW9CLFNBQVMsTUFBTTtBQUFBLFdBQ25DO0FBQUEsWUFDRTtBQUFBO0FBQUEsWUFLQTtBQUFBLFdBS0Y7QUFBQSxXQUNBO0FBQUEsV0FDQSxpQkFBa0I7QUFBQTtBQUFBLGtCQUNUO0FBQUEsV0FDVCxLQUFLLGlCQUFpQjtBQUFBLFlBQ3BCO0FBQUE7QUFBQSxXQUlGLEdBQUksU0FBUyxNQUFNO0FBQUEscUJBQ1Q7QUFBQSxXQUNWO0FBQUEsWUFBZ0I7QUFBQTtBQUFBLFlBRWQ7QUFBQTtBQUFBLFlBQ0c7QUFBQSxXQUNMLFlBQVc7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFdBQ2xCO0FBQUEsV0FDQTtBQUFBO0FBQUEsa0JBQ1M7QUFBQSxXQUNULEdBQUksU0FBUyxNQUFNO0FBQUEscUJBQ1Q7QUFBQSxXQUNWO0FBQUEsWUFBZ0I7QUFBQTtBQUFBLFlBRWQ7QUFBQTtBQUFBLFlBQ0c7QUFBQSxXQUNMLFlBQVc7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFdBQ2xCO0FBQUEsV0FDQTtBQUFBO0FBQUE7QUFBQSwyQkFHZ0I7QUFBQSxXQUNkO0FBQUEsWUFDRTtBQUFBLFdBS0YsR0FBSSxTQUFTLE1BQU07QUFBQSxtQkFDWCxvQkFBb0I7QUFBQSxXQUM1QjtBQUFBLFdBQ0EsWUFBVyxlQUNUO0FBQUEsV0FFRjtBQUFBLFdBQ0E7QUFBQTtBQUFBO0FBQUEsV0FFQTtBQUFBO0FBQUEsV0FHRTtBQUFBO0FBQUEsV0FFQTtBQUFBO0FBQUEsV0FDRztBQUFBLFNBR1g7QUFBQSxTQUNBO0FBQUEsU0FDQTtBQUFBLGtCQUNVLGlCQUNBO0FBQUEsVUFDUixxQkFBc0I7QUFBQSxVQUN0QjtBQUFBO0FBQUEsU0FFRjtBQUFBLFVBQXNCO0FBQUEsU0FDdEI7QUFBQSxTQUNBLE9BQU8sNEJBQTRCLENBbko5QixDQW9KTjtBQUFBLE9Bdk1vQjtBQUFBLE9BQUQ7QUFBQTtBQUFBLElBNk1wQixPQUFPLDJCQUEyQiwwQkFBMEI7QUFBQSxHQUM5RDtBQUFBO0FBQUEsWUMzSlU7QUFBQSxJQUNSLDZCQUE2QjtBQUFBLElBQzdCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZRG1LVTtBQUFBLElBQ1IsbUJBQW9CO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBVkUsT0FBTywwQkFBMEIsMEJBQTBCO0FBQUEsR0FDN0Q7QUFBQSwyQm1DanlCc0I7QUFBQTtBQUFBO0FBQUEsZUFRUjtBQUFBLFlBUUg7QUFBQSxpQkFDSztBQUFBLGFBQ0o7QUFBQSxxQkFDUTtBQUFBLGNBQ1A7QUFBQSxrQkFFSTtBQUFBLHlCQUNPO0FBQUEscUJBQ0o7QUFBQSxxQkFDQTtBQUFBLCtCQUNVO0FBQUEsMkJBQ0o7QUFBQSxtQkFFUjtBQUFBLG1CQUNBO0FBQUEsNEJBQ1M7QUFBQSwwQkFDRjtBQUFBLHFCQUNMO0FBQUEscUJBQ0E7QUFBQSxxQkFDQTtBQUFBLGdCQUNMO0FBQUEsc0JBQ007QUFBQSxvQkFDRjtBQUFBLGVBQ0w7QUFBQSxvQkFDSztBQUFBLHVCQUNHO0FBQUEsY0FDVDtBQUFBLGlCQUNHO0FBQUEsbUJBQ0U7QUFBQSx3QkFHSztBQUFBLHdCQUNBO0FBQUEsZUFDVDtBQUFBLGVBQ0E7QUFBQSxrQkFDRztBQUFBLGlCQUNEO0FBQUEsa0JBQ0M7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEscUJBQ0c7QUFBQSxpQkFDSjtBQUFBLGlCQUNBO0FBQUEsdUJBRU07QUFBQSx1QkFDQTtBQUFBO0FBQUEsYUFHVjtBQUFBLEtBQ1IsNkNBQTZDO0FBQUEsSUFDL0M7QUFBQTtBQUFBLGVBR1k7QUFBQSxLQUNWLHNCQUF1Qix3QkFBd0I7QUFBQSxLQUMvQyxPQUFPLHlCQUF5QjtBQUFBLElBQ2xDO0FBQUE7QUFBQTtBQUFBLEtBSUUsR0FBSTtBQUFBLE1BQ0YsUUFBUTtBQUFBLE1BQ1I7QUFBQSxPQUFnQztBQUFBO0FBQUEsT0FDSztBQUFBO0FBQUEsT0FDRCxPQUFPO0FBQUE7QUFBQSxPQUN0QztBQUFBLE1BQ0w7QUFBQTtBQUFBO0FBQUEsTUFFQSxRQUFRO0FBQUEsTUFDUjtBQUFBO0FBQUEsSUFFSjtBQUFBLElBRUE7QUFBQSxLQUNFLGdCQUFnQjtBQUFBLEtBQ2hCLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQSxLQUNmLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQSxLQUNmLGFBQWE7QUFBQSxLQUNiLGFBQWE7QUFBQSxLQUNiLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQTtBQUFBO0FBQUEsV0FHVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFPRDtBQUFBLGFBQ0c7QUFBQSxlQUNFO0FBQUE7QUFBQSxJQUVGO0FBQUEsS0FBUztBQUFBO0FBQUEsUUFJYixXQUNBO0FBQUE7QUFBQSxRQUlBO0FBQUEsUUFDQSxZQUNFLGNBQ0E7QUFBQSxRQUVGLDRCQUNFLGlCQUNBO0FBQUEsUUFFRjtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBS0EsR0FBSTtBQUFBLFNBQ0Y7QUFBQSxTQUNBO0FBQUE7QUFBQTtBQUFBLFNBRUE7QUFBQSxTQUNBO0FBQUE7QUFBQSxRQUVGLHNCQUF1QjtBQUFBO0FBQUEsUUFLdkI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsc0RBTUUsYUFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUE7QUFBQSxTQU1FO0FBQUEsU0FDQTtBQUFBLFNBQ0E7QUFBQTtBQUFBLFFBRUYsaUJBQ0UsMkJBQ0E7QUFBQTtBQUFBLFFBS0Y7QUFBQSxTQUNFO0FBQUEsU0FDQTtBQUFBLFVBQ0U7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsV0FNRSxzQkFBdUI7QUFBQSxXQUN2QjtBQUFBLFdBQ0E7QUFBQTtBQUFBO0FBQUEsV0FFQSxzQkFBdUI7QUFBQSxXQUN2QjtBQUFBLFlBQ0Usc0JBQXVCO0FBQUEsWUFDdkIsd0JBQXdCO0FBQUE7QUFBQSxXQUcxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FJSiw2QkFDRSx3QkFBd0I7QUFBQSxTQUMxQixzQkFBdUI7QUFBQSxTQUN2QjtBQUFBLFNBQ0E7QUFBQSxTQUNBO0FBQUE7QUFBQTtBQUFBLFFBS0YsMEJBQ0EsZ0JBQWlCO0FBQUE7QUFBQSxRQUlqQjtBQUFBLFNBQ0U7QUFBQSxRQUNGO0FBQUEsUUFDQTtBQUFBLFFBQ0EsNkJBQ0UscUJBQ0E7QUFBQTtBQUFBLFFBS0Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFJQSxzQkFBdUI7QUFBQSxnQkFDakI7QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQTtBQUFBO0FBQUEsU0FNRTtBQUFBO0FBQUEsU0FDRztBQUFBLFFBQ0wsNkJBQ0UscUJBQ0E7QUFBQTtBQUFBLFFBS0YsK0JBQ0E7QUFBQTtBQUFBLFFBR0E7QUFBQSxRQUNBO0FBQUEsa0JBQ1E7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFNBQWM7QUFBQSxRQUlkO0FBQUEsUUFDQTtBQUFBLGdCQUdBLHdCQUF3QjtBQUFBO0FBQUEsSUFJOUI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsVUFBVTtBQUFBLEdBQ1o7QUFBQTtBQUFBLEk5Qm1NRTtBQUFBLElBRUEsT0FBVywwQkFBc0IsaUNBQWlDO0FBQUEsR0FDcEU7QUFBQTtBQUFBLElDbmJFO0FBQUEsR0FDRjtBQUFBLHdDSEhFLFFBQVEsQ0FDVjtBQUFBLGdEQUdFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUFJRTtBQUFBO0FBQUEsR0FDRjtBQUFBO0FBQUE7QUFBQSxZS21SVywyQkFBNkI7QUFBQSxZQUMzQjtBQUFBLElBQ1gsR0FBSTtBQUFBO0FBQUEsYUFDUztBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsS0FDVjtBQUFBLEtBQ0EsT0FBTywrQkFBK0I7QUFBQTtBQUFBLElBRXhDLHdCQUF3QjtBQUFBLEdBQzFCO0FBQUEsaURjalFFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSW5CaERFO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLDZCQ29Nd0I7QUFBQTtBQUFBLElBT3RCO0FBQUEsZ0JBQ1c7QUFBQSxLQUNUO0FBQUEsTUFBeUIsSUFDbkI7QUFBQTtBQUFBLE1BRUo7QUFBQSxPQUE4QiwwQkFDRjtBQUFBLGdCQUVwQjtBQUFBLE1BQ1I7QUFBQSxPQUFjO0FBQUE7QUFBQSxlQUlOO0FBQUEsT0FDTjtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSU47QUFBQSxJQUNBLGFBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsSUF6REUsa0JBQWtCO0FBQUEsSUFDbEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxrRERwSkUsUUFBUSxDQUNWO0FBQUE7QUFBQSxJZTZNRTtBQUFBLGFBQ1U7QUFBQSxLQUNSLCtCQUErQjtBQUFBO0FBQUEsaUJBRXZCLGNBQ1IsK0JBQStCO0FBQUEsR0FFbkM7QUFBQSx1RFFsT0UsU0FBUyxDQUNYO0FBQUEscURBS0UsUUFBUSxDQUNWO0FBQUEscUVBS0UsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsSUExRUU7QUFBQSxJQUNBLHNFQUFzRTtBQUFBLEdBQ3hFO0FBQUEsK0NBV0UsUUFBUSxDQUNWO0FBQUEsbUVBUEUsUUFBUSxDQUNWO0FBQUEsMkN4QmtURSxPQUFPLDBCQUEwQixDQUNuQztBQUFBLHdDQU5FLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQSxrQmlDTGM7QUFBQSxJQUNaO0FBQUEsSUFDQSxjQUFjO0FBQUEsR0FDaEI7QUFBQSxzQ2pDak5FLHdCQUNBLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSWdCNkhFLFlBQWE7QUFBQSxJQUNiLG9CQUFvQjtBQUFBLEdBQ3RCO0FBQUEsK0JBb0NFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUEsaUJYMURlO0FBQUEsSUFDYjtBQUFBLGtCQUNhO0FBQUEsS0FDWCxPQUFPLDJDQUdRLGdCQUFnQixPQUFPO0FBQUE7QUFBQTtBQUFBLEtBQ2pDLE9BQ0UsaUNBQWlDO0FBQUEsR0FFNUM7QUFBQTtBQUFBLElSbkdFO0FBQUEsR0FDRjtBQUFBLHFDQW1jRSxZQUFZLENBQ2Q7QUFBQSxzQ0FnQ0UsY0FBZSxRQUFRLEVBQ3ZCLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUExZEUsY0FBZSwwQkFBMEI7QUFBQSxJQUN6QyxPQUFPLDRCQUE0QjtBQUFBLEdBQ3JDO0FBQUE7QUFBQSxJQU1FLGNBQWUsOEJBQThCO0FBQUE7QUFBQSxVQUNwQztBQUFBLFVBQ0Y7QUFBQSxJQUNQLG1CQUFxQjtBQUFBLEdBQ3ZCO0FBQUE7QUFBQSxJQWVFLGNBQWUsOEJBQThCO0FBQUE7QUFBQSxVQUNwQztBQUFBLFVBQ0Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ1AseUNBQStDO0FBQUEsR0FDakQ7QUFBQTtBQUFBLElBa0JFLGNBQWUsOEJBQThCO0FBQUEsWUFDckM7QUFBQSxJQUNSLFlBQVcsZUFBaUIsV0FDZjtBQUFBLElBRWIsT0FBTyxzQkFBc0I7QUFBQSxHQUMvQjtBQUFBLDBDQXNhRSx1QkFBdUIsQ0FDekI7QUFBQSw2Q0EzSUUsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBLHlDQStJRSxzQkFBc0IsQ0FDeEI7QUFBQSw0Q0F0SUUsT0FBTyw0QkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsWXlCelFVLGdDQUNBO0FBQUEsSUFDUixxQkFBcUI7QUFBQSxHQUN2QjtBQUFBO0FBQUEsSXpCOE5FLFdBQVcseUJBQXlCO0FBQUEsR0FDdEM7QUFBQTtBQUFBLElBa0xFLFdBQVc7QUFBQSxJQUNYLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQSx3Q0E1WkUsaUNBQ0Y7QUFBQSxpQ0dwQ0UsZ0JBQWdCLENBQ2xCO0FBQUE7QUFBQSxlTWlCYTtBQUFBLElBQ1gsR0FBSTtBQUFBLEtBQ0Y7QUFBQSxNQUNFLG1CQUFtQjtBQUFBO0FBQUEsTUFDaEI7QUFBQSxLQUNMLFFBQVE7QUFBQTtBQUFBLFlBQ0M7QUFBQSxLQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUtFO0FBQUE7QUFBQSxLQUdGLHdCQUF3QjtBQUFBLEdBRTVCO0FBQUE7QUFBQSxJTjJFRSxXQUFXLHNDQUFzQztBQUFBLEdBQ25EO0FBQUEsd0NBeENFLFFBQVEsQ0FDVjtBQUFBLHNDQVNFLFNBQVMsQ0FDWDtBQUFBLHdDQU1FLHlCQUEyQixDQUM3QjtBQUFBLHlEQXlFRSxRQUFRLENBQ1Y7QUFBQSxpQkFoRFk7QUFBQSwyQ0FYVixtQ0FBbUM7QUFBQSxHQUNyQztBQUFBLHlDQVhFLGlDQUFpQyxDQUNuQztBQUFBLDBDQUlFLGtDQUFrQyxDQUNwQztBQUFBLHVDQXhCRSxTQUFTLENBQ1g7QUFBQSw0Q0FoRUUsMkJBQTJCLENBQzdCO0FBQUE7QUFBQSxJQTFLRSxvQkFBcUI7QUFBQSxJQUVyQiw2QkFBOEI7QUFBQSxJQUM5QjtBQUFBLEdBQ0Y7QUFBQTtBQUFBLGVNMk1hO0FBQUEsSUFDWCxPQUFPLDZCQUE2QjtBQUFBLEdBQ3RDO0FBQUEscUNOM0RFLG1DQUFtQyxDQUNyQztBQUFBO0FBQUEsSUE2SEUsV0FBVyx1Q0FBdUM7QUFBQSxHQUNwRDtBQUFBO0FBQUEsSU03R0UsT0FBTyx5Q0FBeUM7QUFBQSxHQUNsRDtBQUFBO0FBQUEsWU5yRVUsZ0JBQWdCO0FBQUEsSUFDeEIsb0JBQXFCO0FBQUEsSUFDckIsT0FBTywwQkFBMEI7QUFBQSxHQUNuQztBQUFBO0FBQUEsZU1rSWEsNkJBQ0g7QUFBQSxJQUNSLGdCQUFnQjtBQUFBLEdBQ2xCO0FBQUE7QUFBQSxlTitGYTtBQUFBLElBQ1gsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBLG1DQXBERSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGVNOUJhO0FBQUEsSUFDWDtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxzQ043RkUsaUJBQ0EsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQStDRTtBQUFBLEtBQXVCO0FBQUEsY0FFWCxrQ0FBa0M7QUFBQSxNQUMxQyxrQ0FBa0M7QUFBQTtBQUFBO0FBQUEsY0FFMUIsZUFBZTtBQUFBLE1BQ3ZCLGtDQUFrQztBQUFBO0FBQUEsY0FHNUIsMEJBQ0osbUJBQXNCO0FBQUEsSUFDNUIsYUFBYTtBQUFBLEdBQ2Y7QUFBQTtBQUFBO0FBQUEsWU1SYTtBQUFBLFNBQ0g7QUFBQSxTQUNBO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVztBQUFBLEtBQXdCLFdBQVc7QUFBQSxJQUM5QyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1gsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBO0FBQUEsaUJBYWUsK0JBQ0E7QUFBQSxJQUNiO0FBQUEsS0FDRTtBQUFBLElBQ0Y7QUFBQSxLQUEyQjtBQUFBLElBQzNCO0FBQUEsR0FDRjtBQUFBO0FBQUEsZUFhYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjTnhGWTtBQUFBLElBQ1Y7QUFBQSx5QkFDc0I7QUFBQSxLQUNwQjtBQUFBLE1BQ0UsSUFDRSxpREFDQSxRQUFRO0FBQUEsZUFFUixRQUFRO0FBQUE7QUFBQTtBQUFBLEtBRVAsVUFBVTtBQUFBLEdBQ25CO0FBQUEsMkJBVXdCO0FBQUE7QUFBQSxjQUVaO0FBQUEsSUFDVixzQ0FBc0M7QUFBQSxHQUN4QztBQUFBLCtDQUtFLE9BQU8sZUFBZSxDQUN4QjtBQUFBLHlDQXZGRSxPQUFPLHFCQUFxQixDQUM5QjtBQUFBLCtCZ0JrSUUsT0FBTyxZQUFZLENBQ3JCO0FBQUEseUNieEVFLFVBQ0Y7QUFBQSxpQ05pbkJFLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQSxZTTl3QlE7QUFBQSxJQUNOLHNCQUNFLE1BQU0seUNBQ047QUFBQSxJQUVGLFVBQVU7QUFBQSxHQUNaO0FBQUE7QUFBQSxJQUlFLHlEQUEyRDtBQUFBLEdBQzdEO0FBQUEsZ0NhNEVFLE9BQU8sYUFBYSxDQUN0QjtBQUFBO0FBQUEsWVgrVFE7QUFBQSxJQUNOO0FBQUEsS0FDRTtBQUFBO0FBQUEsUUFFSSxTQUNBO0FBQUE7QUFBQSxRQUVBLFNBQ0E7QUFBQTtBQUFBLFFBRUEsU0FDQTtBQUFBO0FBQUEsUUFFQSxTQUNBO0FBQUE7QUFBQSxLQUVKO0FBQUE7QUFBQSxlQUVTO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLGlDQTlPRSxPQUFPLHlCQUFnRCxDQUN6RDtBQUFBO0FBQUEsZUFrRWE7QUFBQSxJQUNYLHdCQUNFO0FBQUEsSUFFRixPQUFPLG1DQUFtQztBQUFBLEdBQzVDO0FBQUEsZ0NBcE84QjtBQUFBO0FBQUEsa0JBa2NoQjtBQUFBLElBQ1osMEJBQ0U7QUFBQSxJQUNGLG1CQUFtQjtBQUFBLEdBQ3JCO0FBQUE7QUFBQSxlQWdLYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQWlIRSxJQUNFO0FBQUEsYUFFQTtBQUFBLEdBRUo7QUFBQTtBQUFBLGVBN1BhO0FBQUEsSUFDWCxpQkFDRTtBQUFBLElBRUYsT0FBTyxpQkFBaUI7QUFBQSxHQUMxQjtBQUFBLHlDQWxlRSxRQUFRLENBQ1Y7QUFBQSw0Q0Fnd0JFLE9BQU8sOEJBQThCO0FBQUEsR0FDdkM7QUFBQTtBQUFBLGVBNUVhO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxxQkFFZTtBQUFBLElBQ2pCLHdDQUEwQztBQUFBLEdBQzVDO0FBQUE7QUFBQTtBQUFBLElBU0UsSUFDRSxRQUFRO0FBQUEsYUFFUjtBQUFBLElBRUY7QUFBQSxLQUNFO0FBQUE7QUFBQSxLQUNLLE9BQ0UsbUNBQW1DO0FBQUEsR0FFOUM7QUFBQTtBQUFBLGtCQTZCZ0I7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQTtBQUFBLGtCQUVVO0FBQUEsbUJBQ0M7QUFBQSxJQUVsQixtQ0FBbUM7QUFBQSxHQUNyQztBQUFBLDJDQU1FLE9BQU8sNkJBQTZCO0FBQUEsR0FDdEM7QUFBQTtBQUFBLGVBcFRhO0FBQUEsSUFDWCxnQkFDRTtBQUFBLElBRUYsT0FBTyxnQkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsZUFNYTtBQUFBLElBQ1gsZ0JBQ0U7QUFBQSxJQUVGLE9BQU8sZUFBMkI7QUFBQSxHQUNwQztBQUFBO0FBQUEsZUFpQmE7QUFBQSxJQUNYLGdCQUNFO0FBQUEsSUFFRixPQUFPLFdBQVc7QUFBQSxHQUNwQjtBQUFBO0FBQUEsZUE0RmE7QUFBQSxJQUNYLG9CQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsY0FBYztBQUFBLElBQ2QsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBNkRFLGdDQUFpQyxPQUN4Qiw0QkFBNEI7QUFBQSxJQUVyQyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUF0QkUsZ0NBQWlDLE9BQ3hCLDRCQUE0QjtBQUFBLElBRXJDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQUtFLCtCQUFnQyxPQUN2QiwyQkFBMkI7QUFBQSxJQUVwQyxRQUFRO0FBQUEsR0FDVjtBQUFBLHNDQXFCRSx1QkFDRjtBQUFBLHFDQXR3QkUsT0FBTywyQkFBMkIsQ0FDcEM7QUFBQTtBQUFBLElBeXRCRSwrQkFBZ0MsT0FDdkIsMkJBQTJCO0FBQUEsSUFFcEMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsU0Fuc0JVO0FBQUEsYUFDSTtBQUFBLG9CQUNPLFNBQVMsU0FBUyxrQ0FBbEI7QUFBQSxXQUNUO0FBQUEsSUFDVjtBQUFBLFlBRUU7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBLHNCQUdEO0FBQUEsR0FDSDtBQUFBLHlDQWl1QkUsT0FBTywyQkFBMkIsQ0FDcEM7QUFBQTtBQUFBLGVBckVhO0FBQUEsSUFDWDtBQUFBLElBQ0EsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBLDRDQXlKRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGVBandCYTtBQUFBLElBQ1gsa0JBQWtCLFFBQVE7QUFBQSxJQUMxQixPQUFPLGFBQWE7QUFBQSxHQUN0QjtBQUFBO0FBQUEsbUJBOFBpQixtQ0FDQTtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUEsSUFJRjtBQUFBLEtBQ0U7QUFBQSxJQUNGO0FBQUEsS0FDRTtBQUFBLElBQ0YsT0FBTyx3REFJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBO0FBQUEsU0FyVVU7QUFBQSxhQUNJO0FBQUEsb0JBQ08sU0FBUyw4QkFBVDtBQUFBLFdBQ1Q7QUFBQSxXQUNBLFNBQVM7QUFBQSxXQUNULFNBQVM7QUFBQTtBQUFBLE9BQ0ssU0FDdEIseUJBQ0E7QUFBQSxJQUVGO0FBQUEsWUFFRTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBO0FBQUEsWUFFQyw4Q0FFRjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGVBK2tCYTtBQUFBLElBQ1gsT0FBTyx5QkFBZ0Q7QUFBQSxHQUN6RDtBQUFBO0FBQUEsZUFNYTtBQUFBLElBQ1gsT0FBTyxVQUFVLG9DQUEyRDtBQUFBLEdBQzlFO0FBQUE7QUFBQSxlQXZZYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8seUNBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQU1hO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQThCYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBQStEO0FBQUEsR0FDeEU7QUFBQTtBQUFBO0FBQUEsU0F2UVU7QUFBQSxTQUNBO0FBQUEsV0FDRTtBQUFBLElBQ1Ysa0JBQXVCO0FBQUEsR0FDekI7QUFBQTtBQUFBLFlBdVpRO0FBQUEsSUFDTjtBQUFBLEtBQ0U7QUFBQTtBQUFBLFFBRUksY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxhQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLEtBRUo7QUFBQTtBQUFBO0FBQUEsWUFFUztBQUFBLFlBQ0E7QUFBQSxXQUNIO0FBQUEsY0FDSztBQUFBLElBQ2I7QUFBQSxJQUNBLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsZUE2TGE7QUFBQSxJQUNYO0FBQUEsSUFDQSxPQUFPLCtCQUErQjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxlQXRGYTtBQUFBLElBQ1gsT0FBTyxVQUNMLDRDQUlEO0FBQUEsR0FDSDtBQUFBO0FBQUE7QUFBQSxTQU9VO0FBQUEsWUFDRztBQUFBLElBQ1gsT0FBTyx5QkFBZ0Q7QUFBQSxHQUN6RDtBQUFBO0FBQUEsZUFyUWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsT0FBTyxxQ0FBNEQ7QUFBQSxHQUNyRTtBQUFBO0FBQUEsaUJBN0VlLCtCQUNBO0FBQUEsSUFDYjtBQUFBLEtBQ0U7QUFBQSxJQUNGO0FBQUEsS0FBMkI7QUFBQSxJQUMzQjtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBb2ZFO0FBQUEseUJBQ3FCO0FBQUEsSUFDckI7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQXZlYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8sa0NBQXlEO0FBQUEsR0FDbEU7QUFBQTtBQUFBLGVBaVFhO0FBQUEsSUFDWCxjQUFlLFFBQVE7QUFBQSxJQUN2QixPQUFPLFdBQ0wsNENBSUQ7QUFBQSxHQUNIO0FBQUEsZ0NBcGhCOEI7QUFBQTtBQUFBLGVBdUtqQjtBQUFBLElBQ1gsdUJBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQU1hO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU8sdUNBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxtQkF3R2lCO0FBQUEsSUFDZjtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU87QUFBQSxxQkFFTCxrREFHRDtBQUFBLEdBQ0g7QUFBQSw2QkE5WEUsT0FBTyxXQUFXLHlCQUF5QixDQUM3QztBQUFBO0FBQUEsSUFNRTtBQUFBLGFBQ1U7QUFBQSxLQUNSLDhDQUFtRDtBQUFBO0FBQUE7QUFBQSxLQUNiLFdBQ3RCLDZDQUE2QztBQUFBO0FBQUEsS0FFN0Q7QUFBQSxHQUVKO0FBQUE7QUFBQSxlQXdaYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsZ0NBRUU7QUFBQSxJQUdGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQTlDYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUY7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLFlBd0thO0FBQUEsU0FDSDtBQUFBLGVBQ0k7QUFBQSxJQUNaO0FBQUEsYUFDVTtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRixjQUFjO0FBQUEsR0FDaEI7QUFBQTtBQUFBO0FBQUEsU0FxQlU7QUFBQSxZQUNHO0FBQUEsZUFDQztBQUFBLElBQ1o7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUE7QUFBQSxZQ3BjYTtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsV0FDdkI7QUFBQSxJQUNSLFlBQVc7QUFBQSxLQUNULHNDQUF1QztBQUFBLElBQ3pDLGNBQWM7QUFBQSxJQUNkLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJVzVLRSxVQUNFLGVBQ0EsUUFBUTtBQUFBLElBRVYsNEJBQ0UsV0FDQSxRQUFRO0FBQUEsWUFFSjtBQUFBLElBQ04sV0FBWTtBQUFBLElBQ1osUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElTK0NFLFlBQWEsZ0NBQ1I7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLEt2QmlFSSxHQUFJLGtCQUFrQixRQUFRO0FBQUE7QUFBQSxLQUc5QjtBQUFBO0FBQUE7QUFBQSxVQUlFO0FBQUEsTUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBTUE7QUFBQSxNQUVBO0FBQUEsOENBRXdDO0FBQUEsTUFDeEMsVUFBVTtBQUFBO0FBQUEsTUFHVixvQ0FBb0Msd0JBQXdCO0FBQUEsS0FFOUQsa0NBQW1DO0FBQUEsS0FDbkMsVUFBVTtBQUFBO0FBQUEsR0FFZDtBQUFBLHFDSHFMRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLEk4QnpSRTtBQUFBLEtBQ0U7QUFBQSxJQUVGLElBQ0UsT0FBTyxvQkFBb0I7QUFBQSxVQUUzQjtBQUFBLEdBRUo7QUFBQTtBQUFBLElMbW9CRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElmaFVFLHNDQUF1QyxRQUFRO0FBQUEsSUFDL0Msc0NBQXVDLFVBQVM7QUFBQSxJQUNoRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUE7QUFBQSxTQUtVO0FBQUEsU0FDQTtBQUFBLElBQ1IsVUFBVyxRQUFRO0FBQUEsSUFDbkIsVUFBVyxVQUFTO0FBQUEsSUFDcEIsWUFBVztBQUFBLEtBQ1QsMERBQTJELFFBQVE7QUFBQSxLQUNuRSwwREFBMkQsVUFBUztBQUFBO0FBQUEsSUFFdEUsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBeE9FLFlBQVc7QUFBQSxLQUFtQjtBQUFBLEdBR2hDO0FBQUE7QUFBQSxjQWhKWTtBQUFBLElBQ1YsWUFBVyxrQkFBb0I7QUFBQSxJQUcvQixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUEsaUJBZ0phO0FBQUEsSUFDWCxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxLQUNBLFdBQ0UsWUFDQSxhQUNLO0FBQUE7QUFBQSxJQUlULDJCQUEyQjtBQUFBLEdBQzdCO0FBQUE7QUFBQSxjQXNQWSx3QkFDQTtBQUFBLElBQ1YsWUFBVyxpQkFBbUIsY0FDZDtBQUFBLElBRWhCO0FBQUEsSUFDQSxVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUE7QUFBQSxTQW5KUTtBQUFBLFNBQ0U7QUFBQSxTQUNGO0FBQUEsU0FDQTtBQUFBLElBQ04sWUFBWSx5QkFBeUI7QUFBQSxHQUN2QztBQUFBO0FBQUEsY0FNVTtBQUFBLElBR1IsWUFBVztBQUFBO0FBQUEsVUFDRDtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUF6T1EsbUJBQ0E7QUFBQSxJQUNOLG1CQUNFLFNBQ0E7QUFBQSxJQUVGLGVBQ0UsUUFDQTtBQUFBLElBRUYsYUFDRSxRQUNBO0FBQUEsSUFFRixXQUNFLFFBQ0E7QUFBQSxJQUVGLFVBQ0UsUUFDQTtBQUFBLElBRUYsVUFBVztBQUFBLElBR1gsYUFBYTtBQUFBLEdBQ2Y7QUFBQTtBQUFBLElBeUtFLGdCQUNFLHFCQUNBLFFBQVE7QUFBQSxlQUVEO0FBQUEsSUFDVCxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUE4RUUsZ0JBQ0UscUJBQ0EsUUFBUTtBQUFBLGVBRUQ7QUFBQSxJQUNULFlBQVc7QUFBQSxhQUNIO0FBQUEsS0FDTjtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUY7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXZWRSxZQUFXLGlCQUFtQjtBQUFBLElBRzlCLFFBQVE7QUFBQSxHQUNWO0FBQUEsNEJBbkJFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUEsZ0JBK0xZLE9BQ0o7QUFBQSxJQUNOLFlBQVc7QUFBQTtBQUFBO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQSxXQUlBO0FBQUEsS0FDUCxRQUFRO0FBQUEsY0FDRDtBQUFBLEtBQ1A7QUFBQSxLQUNBLFNBQVM7QUFBQTtBQUFBLElBR1g7QUFBQSxjQUNTO0FBQUEsK0NBSUw7QUFBQSxtQmRoUU47QUFBQSxHY3dRQTtBQUFBO0FBQUEsaUJBN0NhO0FBQUEsSUFDWCxZQUFXO0FBQUE7QUFBQSxVQUNIO0FBQUEsS0FDTjtBQUFBLEtBQ0EsV0FBWSxpQkFFTDtBQUFBO0FBQUEsSUFJVCxPQUFPLDhEQUE4RDtBQUFBLEdBQ3ZFO0FBQUE7QUFBQSxJQXFIRTtBQUFBLEtBQ0U7QUFBQSxLQUNBLFFBQVE7QUFBQTtBQUFBLFlBR0Y7QUFBQSxJQUNSLGlDQUFpQztBQUFBLElBQ2pDLGlDQUFpQztBQUFBLFlBRTNCLDRDQUNFO0FBQUEsSUFDUixZQUFXO0FBQUE7QUFBQTtBQUFBLFFBRUQ7QUFBQTtBQUFBLFdBR0Y7QUFBQTtBQUFBO0FBQUEsS0FLTjtBQUFBLEtBQ0EsaURBQWlEO0FBQUEsS0FDakQ7QUFBQSxLQUVBO0FBQUE7QUFBQSxTQUVFO0FBQUEsTUFFQTtBQUFBLE1BQ0E7QUFBQTtBQUFBLEtBR0Y7QUFBQTtBQUFBLElBR0Ysa0NBQWtDO0FBQUEsSUFDbEMsa0NBQWtDO0FBQUEsSUFDbEMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBNERVO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxpQkFDVDtBQUFBLElBRUY7QUFBQSxJQUNBO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFqY0U7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtGO0FBQUEsbUNBK0hFLHVCQUF3QixRQUFRLEVBQ2hDLFFBQVEsQ0FDVjtBQUFBLDRDQVVFLFFBQVEsQ0FDVjtBQUFBLG1DQUlFLHNCQUF1QixRQUFRLEVBQy9CLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUFiRSx3QkFBeUIsUUFBUTtBQUFBLElBQ2pDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJSnVLRTtBQUFBLEtBQWlDO0FBQUE7QUFBQSxLQUUvQiw2QkFBNkI7QUFBQSxLQUM3QjtBQUFBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSVlkRTtBQUFBLEdBQ0Y7QUFBQSxtRFI0SEUsb0NBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSwwQkF2WUUsb0JBQW9CLENBQ3RCO0FBQUEsa0RBMFlFLG9DQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsbURBSUUsb0NBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGdCQTNLWTtBQUFBLElBQ1YsWUFBVztBQUFBLEtBQW9CO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBV1gsWUFBWTtBQUFBLEdBQ2Q7QUFBQSxvQ0EzTUUsb0JBQW9CLENBQ3RCO0FBQUEsMkNBVUUsb0JBQW9CLENBQ3RCO0FBQUE7QUFBQTtBQUFBLE13QnBFZTtBQUFBO0FBQUE7QUFBQSxXQUNPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBVVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBdUJWLDZDQUErQztBQUFBLFFBQ2pEO0FBQUE7QUFBQSxTQUdFLE9BQVEseUNBQTBDO0FBQUEsUUFDcEQ7QUFBQTtBQUFBO0FBQUEsaUJBR2E7QUFBQSxrQkFDRDtBQUFBLHNCQUNJO0FBQUEsc0JBQ0Y7QUFBQSx5QkFDRztBQUFBLGNBRVA7QUFBQSxlQUVEO0FBQUEsaUJBQ0E7QUFBQSxrQkFDQztBQUFBLG1CQUNHO0FBQUEsd0JBQ0s7QUFBQSxTQUVoQixZQUFXO0FBQUEsVUFBNkI7QUFBQSxTQUd4QztBQUFBO0FBQUEsVUFHRTtBQUFBLHNCQUNhO0FBQUEsV0FDWDtBQUFBLFlBQWU7QUFBQSw2QkFHYixrQkFDQSxvQkFDQSxNQUFNO0FBQUE7QUFBQSxVQUdWO0FBQUEsU0FYYztBQUFBLDZCQWVkLGlCQURTO0FBQUE7QUFBQSxVQUtUO0FBQUEsdUJBQ2E7QUFBQSxVQUNiO0FBQUEsVUFDQSxZQUFXO0FBQUEsbUJBQ0g7QUFBQSxXQUNOLDZCQUE4QjtBQUFBLFdBRzlCO0FBQUEsV0FDQTtBQUFBO0FBQUEsVUFFRixhQUFhO0FBQUEsU0FaRjtBQUFBO0FBQUEsVUFnQlgsWUFBYSxPQUFPLFFBQVEsT0FDdkI7QUFBQSxTQUZZO0FBQUEsU0FNbkI7QUFBQTtBQUFBLGdCQUNTO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGVBQ0g7QUFBQTtBQUFBLFVBR0o7QUFBQSxVQUVBO0FBQUE7QUFBQSxhQUVJLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixlQUFnQixZQUNYO0FBQUEsYUFDTDtBQUFBO0FBQUEsYUFFQSxxQkFDRSxnQkFDQTtBQUFBLGFBRUYsR0FBSSxrQ0FBa0MsWUFDakM7QUFBQSxhQUNMO0FBQUE7QUFBQSxhQUVBO0FBQUEsd0JBQ1kseUNBQXVDO0FBQUE7QUFBQTtBQUFBLGNBSWpELHFCQUNFLGdCQUNBO0FBQUEsY0FFRixTQUFVO0FBQUEsZUFBbUI7QUFBQSxtQkFFM0IsYUFDQTtBQUFBO0FBQUEsYUFHSjtBQUFBO0FBQUEsYUFFQTtBQUFBLHdCQUNZLHlDQUF1QztBQUFBO0FBQUE7QUFBQSxjQUlqRCxxQkFDRSxnQkFDQTtBQUFBLGNBRUYsR0FBSSw0QkFBNEI7QUFBQSxlQUFtQjtBQUFBLG1CQUVqRCxhQUNBO0FBQUE7QUFBQSxhQUdKO0FBQUE7QUFBQSxhQUVBLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixHQUFJLDJCQUEyQixZQUMxQjtBQUFBLGFBQ0w7QUFBQTtBQUFBLGFBRUEsaUNBQ0UsYUFFRjtBQUFBO0FBQUEsYUFFQSxvQ0FDRSxhQUVGO0FBQUE7QUFBQSxhQUVBO0FBQUEsY0FDRSxxQkFDRSxnQkFDQTtBQUFBLGNBRUYsR0FBSSxzQkFBc0I7QUFBQSxjQUMxQjtBQUFBO0FBQUE7QUFBQSxjQUVBLEdBQUksNEJBQTRCO0FBQUEsY0FDaEM7QUFBQTtBQUFBO0FBQUEsY0FFQSxHQUFJLCtCQUErQix3QkFBd0I7QUFBQSxjQUMzRDtBQUFBO0FBQUEsYUFFRjtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0EscUNBQ0UsYUFDQTtBQUFBLGFBRUYsWUFBVztBQUFBLGNBQ1QscUJBQ0UsZ0JBQ0E7QUFBQSxjQUVGLG9CQUNFLGFBQ0E7QUFBQSxjQUVGO0FBQUE7QUFBQSxhQUVGO0FBQUE7QUFBQSxhQUVBLEdBQUksMkJBQTJCLE9BQy9CO0FBQUE7QUFBQSxhQUVBLE1BQU8sMkJBQTJCLGNBQ2xDO0FBQUE7QUFBQSxhQUVBLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixHQUFJO0FBQUEsY0FBMkIsR0FDMUIsbUJBRU07QUFBQTtBQUFBLGNBQ0o7QUFBQSxhQUNQO0FBQUEsaUNBRUEsT0FBTyxRQUFRO0FBQUE7QUFBQSxhQUVmLGdCQUNBO0FBQUE7QUFBQSxhQUVBLHdDQUNBO0FBQUE7QUFBQSxhQUVBO0FBQUE7QUFBQSxhQUdBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQSw4QkFBK0IsYUFDL0I7QUFBQSxxQkFFQSxNQUFNO0FBQUE7QUFBQTtBQUFBLFNBR1osUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUVBLG9CQUFvQjtBQUFBLE9BdlFOO0FBQUEsT0FBRDtBQUFBO0FBQUEsSUFvVmIsb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxjQUNRO0FBQUEsSUFDVixzQnRDalhGO0FBQUEsR3NDbVhBO0FBQUE7QUFBQTtBQUFBLFlBUWE7QUFBQSxXQUNIO0FBQUEsWUFDRztBQUFBLFdBQ0g7QUFBQSxTQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUdOO0FBQUEsS0FDRSxNQUFNO0FBQUEsS0FDTjtBQUFBLE1BQWtCO0FBQUE7QUFBQSxNQUdoQixjQUFlO0FBQUEsTUFDZixNQUFNO0FBQUEsTUFDTjtBQUFBO0FBQUEsU0FFSSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQVdBO0FBQUEsU0FDQTtBQUFBLFVBQ0U7QUFBQSxTQUNGLFFBQVE7QUFBQSxTQUNSLE1BQU07QUFBQSxTQUNOO0FBQUEsVUFDRTtBQUFBLFNBQ0YsT0FBTztBQUFBLFNBQ1A7QUFBQSxpQkFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSVIsT0FBTywyQkFBMkI7QUFBQSxHQUNwQztBQUFBO0FBQUEsSUFoR0Usb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxxQkFDYTtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUEsZUFDVTtBQUFBLEtBQ1Y7QUFBQSxNQUNFO0FBQUE7QUFBQSxVQUdFLDRCQUE0QjtBQUFBLE9BRTVCO0FBQUEsZ0JBQ1E7QUFBQSxNQUNWLFFBQVMsVUFBVTtBQUFBLE1BQ25CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBRUcsYUFFTyx5QkFDVixRQUFTLFVBQVUsRUFDbkI7QUFBQTtBQUFBO0FBQUEsSUFHSixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUEsSUF2REUsb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxxQkFDYSxpQkFDTDtBQUFBLElBQ1Y7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLE1BQ0U7QUFBQSxvQkFFRSw0QkFBNEI7QUFBQSxPQUU1QjtBQUFBLGdCQUNRO0FBQUEsTUFDVixRQUFTLFVBQVU7QUFBQSxNQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUVHLGFBRU8seUJBQ1YsUUFBUyxVQUFVLEVBQ25CO0FBQUE7QUFBQTtBQUFBLElBR0osVUFBVTtBQUFBLEdBQ1o7QUFBQTtBQUFBLElBb0NFLG9CQUFxQjtBQUFBLEtBQ25CO0FBQUEsY0FDUTtBQUFBLElBQ1Ysc0J0Q3ZXRjtBQUFBLEdzQ3lXQTtBQUFBLDJDeEI3UkUsdUJBQ0EsUUFBUSxDQUNWO0FBQUEsa0RBU0UsdUJBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGdCQTJNWTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLGtCTHpEYztBQUFBLElBQ1osT0FBTyx3QkFBd0IscUJBQXFCO0FBQUEsR0FDdEQ7QUFBQTtBQUFBLGtCTDBLYztBQUFBLElBQ1o7QUFBQSxLQUNFO0FBQUE7QUFBQTtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsT0FGOEI7QUFBQTtBQUFBLEtBS2hDO0FBQUE7QUFBQTtBQUFBLFFBQ0UsZ0JBQ0U7QUFBQSxPQUZpQztBQUFBLEdBTXpDO0FBQUEsR0FDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0p6YUE7QUFBQSxPQUFBQSxvQkFBQTtBQUFBO0FBQUEsT0FBQUMsZ0JBQUE7QUFBQTtBQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBLE9BQUFDLHVCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLGtCQUFBO0FBQUE7QUFBQSxPQUFBQyx1QkFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxnQkFBQTtBQUFBO0FBQUEsT0FBQUMsb0JBQUE7QUFBQTtBQUFBLE9BQUFDLHFCQUFBO0FBQUE7QUFBQSxPQUFBQyxxQkFBQTtBQUFBO0FBQUEsT0FBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsaUNBQUEiLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOF19fSx7Im9mZnNldCI6eyJsaW5lIjo5MzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJlcmFzZV9yZWwiLCJwYXJhbSIsInJlc3QiLCJ0eSIsInR5MSIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInByZWMiLCJpY29udiIsImZjb252Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwiY291bnRlciIsImlnbiIsImYiLCJhcml0eSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxJQytnQlEsOEJBa0NZO0FBQUEsSUFsQ1o7QUFBQTtBQUFBLFdBQUFDLE9BQUEsVUFLSSwyQkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBTHBCLFVBT00sNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQVB0QixVQVNHLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FUbkIsVUFXSyw2QkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBWHJCLFVBZVMsNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWZ6QixVQWFLLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FickIsVUFpQkssNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWpCckIsVUFtQkksNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQW5CcEIsVUFBQUMsS0FBQTtBQUFBLE9BcUJlLGlDQUFjO0FBQUE7QUFBQSxXQUFBRCxTQXJCN0IsVUFBQUUsTUFBQTtBQUFBLE9BdUJ1Qix1Q0FBYztBQUFBO0FBQUEsV0FBQUYsU0F2QnJDLFVBeUJLLDhCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUF6QnJCLFVBMkJLLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUEzQnJCLFVBNkJHLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUE3Qm5CLFVBK0JNLCtCQUFnQjtBQUFBLG1CQUFBQSxVQS9CdEIsVUFpQ2Ms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QUEsT0F3RGUsa0RBQW9CO0FBQUE7QUFBQSxXQUFBbEIsVUF4RG5DLFNBOEJOLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUE5QmhCLFNBQUFtQixXQUFBLFNBQUFDLFlBQUE7QUFBQSxPQTZDdUIsMkRBQW9CO0FBQUE7QUFBQSxXQUFBcEIsVUE3QzNDLFNBQUFxQixVQUFBO0FBQUEsT0ErQ2MsK0NBQW9CO0FBQUE7QUFBQSxXQUFBckIsVUEvQ2xDLFNBaURFLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUFqRHhCLFNBQUFzQixNQUFBO0FBQUEsT0FtRE8sMkNBQW9CO0FBQUE7QUFBQSxXQUFBdEIsVUFuRDNCLFNBQUF1QixJQUFBLFNBQUFDLFFBQUE7QUFBQSxPQTRCSyxnREFBb0I7QUFBQTtBQUFBLEdBK0JsQztBQUFBLEdEanJCUiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjk0ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkbGliLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GOF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgaDEgOjogW10gLT4gaDEgOjogbDJcbiAgfCBoMSA6OiBoMiA6OiBbXSAtPiBoMSA6OiBoMiA6OiBsMlxuICB8IGgxIDo6IGgyIDo6IGgzIDo6IHRsIC0+IGgxIDo6IGgyIDo6IGgzIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxuKCogZm9yIGF0X2V4aXQgKilcbnR5cGUgJ2EgYXRvbWljX3RcbmV4dGVybmFsIGF0b21pY19tYWtlIDogJ2EgLT4gJ2EgYXRvbWljX3QgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCBhdG9taWNfZ2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgPSBcIiVhdG9taWNfbG9hZFwiXG5leHRlcm5hbCBhdG9taWNfY29tcGFyZV9hbmRfc2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgLT4gJ2EgLT4gYm9vbFxuICA9IFwiJWF0b21pY19jYXNcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IGF0b21pY19tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gYXRvbWljX21ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2RvbWFpbl9sb2NhbF9hdF9leGl0ID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgKCFkb19kb21haW5fbG9jYWxfYXRfZXhpdCkgKCk7XG4gIChhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICAgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICAgID0gQ29tcGxleFxubW9kdWxlIENvbmRpdGlvbiAgICAgID0gQ29uZGl0aW9uXG5tb2R1bGUgRGlnZXN0ICAgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBEb21haW4gICAgICAgICA9IERvbWFpblxubW9kdWxlIER5bmFycmF5ICAgICAgID0gRHluYXJyYXlcbm1vZHVsZSBFZmZlY3QgICAgICAgICA9IEVmZmVjdFxubW9kdWxlIEVpdGhlciAgICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgICA9IEdjXG5tb2R1bGUgSGFzaHRibCAgICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBNdXRleCAgICAgICAgICA9IE11dGV4XG5tb2R1bGUgTmF0aXZlaW50ICAgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICAgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQcmludGV4YyAgICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZW1hcGhvcmUgICAgICA9IFNlbWFwaG9yZVxubW9kdWxlIFNlcSAgICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJpbmcgICAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyAgID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgICAgPSBTeXNcbm1vZHVsZSBUeXBlICAgICAgICAgICA9IFR5cGVcbm1vZHVsZSBVY2hhciAgICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgICAgPSBXZWFrXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2NhcyIsImNhbWxfYXRvbWljX2xvYWQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9mbHVzaCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb25jYXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX29wZW4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiSW52YWxpZF9hcmd1bWVudCIsIkZhaWx1cmUiLCJNYXRjaF9mYWlsdXJlIiwiQXNzZXJ0X2ZhaWx1cmUiLCJOb3RfZm91bmQiLCJPdXRfb2ZfbWVtb3J5IiwiU3RhY2tfb3ZlcmZsb3ciLCJTeXNfZXJyb3IiLCJFbmRfb2ZfZmlsZSIsIkRpdmlzaW9uX2J5X3plcm8iLCJTeXNfYmxvY2tlZF9pbyIsIlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJFeGl0IiwibWluIiwieCIsInkiLCJtYXgiLCJhYnMiLCJsbm90IiwiY2hhcl9vZl9pbnQiLCJuIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsInBhcmFtIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwiZXhuIiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJzMSIsImwiLCJpIiwibWF0Y2giLCJzdHJpbmdfb2ZfZmxvYXQiLCJmbG9hdF9vZl9zdHJpbmdfb3B0Iiwic3ltYm9sIiwibDEiLCJsMiIsImgxIiwiaDIiLCJ0bCIsImgzIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsIm1vZGUiLCJwZXJtIiwibmFtZSIsImMiLCJvcGVuX291dCIsIm9wZW5fb3V0X2JpbiIsImZsdXNoX2FsbCIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsInYiLCJjbG9zZV9vdXQiLCJjbG9zZV9vdXRfbm9lcnIiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJvcGVuX2luX2JpbiIsImlucHV0IiwiaWMiLCJ1bnNhZmVfcmVhbGx5X2lucHV0IiwiciIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwicG9zIiwiaGQiLCJhY2N1IiwiYmVnIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN0ciIsInN0cjIiLCJmbXQyIiwic3RyMSIsImZtdDEiLCJzMiIsImV4aXRfZnVuY3Rpb24iLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4iLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19kb21haW5fbG9jYWxfYXRfZXhpdCIsImRvX2F0X2V4aXQiLCJleGl0IiwicmV0Y29kZSIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHFCQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJrQi9EIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6OTk1NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zeXMubWwuaW4iXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBAY29uZmlndXJlX2lucHV0QCAqKVxuIzMgXCJzeXMubWwuaW5cIlxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGJhY2tlbmRfdHlwZSA9XG4gIHwgTmF0aXZlXG4gIHwgQnl0ZWNvZGVcbiAgfCBPdGhlciBvZiBzdHJpbmdcbigqIFN5c3RlbSBpbnRlcmZhY2UgKilcblxuZXh0ZXJuYWwgZ2V0X2NvbmZpZzogdW5pdCAtPiBzdHJpbmcgKiBpbnQgKiBib29sID0gXCJjYW1sX3N5c19nZXRfY29uZmlnXCJcbmV4dGVybmFsIGdldF9leGVjdXRhYmxlX25hbWUgOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lXCJcbmV4dGVybmFsIGFyZ3YgOiBzdHJpbmcgYXJyYXkgPSBcIiVzeXNfYXJndlwiXG5leHRlcm5hbCBiaWdfZW5kaWFuIDogdW5pdCAtPiBib29sID0gXCIlYmlnX2VuZGlhblwiXG5leHRlcm5hbCB3b3JkX3NpemUgOiB1bml0IC0+IGludCA9IFwiJXdvcmRfc2l6ZVwiXG5leHRlcm5hbCBpbnRfc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlaW50X3NpemVcIlxuZXh0ZXJuYWwgbWF4X3dvc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlbWF4X3dvc2l6ZVwiXG5leHRlcm5hbCB1bml4IDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX3VuaXhcIlxuZXh0ZXJuYWwgd2luMzIgOiB1bml0IC0+IGJvb2wgPSBcIiVvc3R5cGVfd2luMzJcIlxuZXh0ZXJuYWwgY3lnd2luIDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX2N5Z3dpblwiXG5leHRlcm5hbCBnZXRfYmFja2VuZF90eXBlIDogdW5pdCAtPiBiYWNrZW5kX3R5cGUgPSBcIiViYWNrZW5kX3R5cGVcIlxuXG5sZXQgZXhlY3V0YWJsZV9uYW1lID0gZ2V0X2V4ZWN1dGFibGVfbmFtZSgpXG5sZXQgKG9zX3R5cGUsIF8sIF8pID0gZ2V0X2NvbmZpZygpXG5sZXQgYmFja2VuZF90eXBlID0gZ2V0X2JhY2tlbmRfdHlwZSAoKVxubGV0IGJpZ19lbmRpYW4gPSBiaWdfZW5kaWFuICgpXG5sZXQgd29yZF9zaXplID0gd29yZF9zaXplICgpXG5sZXQgaW50X3NpemUgPSBpbnRfc2l6ZSAoKVxubGV0IHVuaXggPSB1bml4ICgpXG5sZXQgd2luMzIgPSB3aW4zMiAoKVxubGV0IGN5Z3dpbiA9IGN5Z3dpbiAoKVxubGV0IG1heF9hcnJheV9sZW5ndGggPSBtYXhfd29zaXplICgpXG5sZXQgbWF4X2Zsb2F0YXJyYXlfbGVuZ3RoID0gbWF4X2FycmF5X2xlbmd0aCAvICg2NCAvIHdvcmRfc2l6ZSlcbmxldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMVxuZXh0ZXJuYWwgcnVudGltZV92YXJpYW50IDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfcnVudGltZV92YXJpYW50XCJcbmV4dGVybmFsIHJ1bnRpbWVfcGFyYW1ldGVycyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1wiXG5cbmV4dGVybmFsIGZpbGVfZXhpc3RzOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfZmlsZV9leGlzdHNcIlxuZXh0ZXJuYWwgaXNfZGlyZWN0b3J5IDogc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3lzX2lzX2RpcmVjdG9yeVwiXG5leHRlcm5hbCBpc19yZWd1bGFyX2ZpbGUgOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXCJcbmV4dGVybmFsIHJlbW92ZTogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbW92ZVwiXG5leHRlcm5hbCByZW5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbmFtZVwiXG5leHRlcm5hbCBnZXRlbnY6IHN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfc3lzX2dldGVudlwiXG5cbmxldCBnZXRlbnZfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChnZXRlbnYgcylcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5leHRlcm5hbCBjb21tYW5kOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFwiXG5leHRlcm5hbCB0aW1lOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9zeXNfdGltZVwiIFwiY2FtbF9zeXNfdGltZV91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGNoZGlyOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2hkaXJcIlxuZXh0ZXJuYWwgbWtkaXI6IHN0cmluZyAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfbWtkaXJcIlxuZXh0ZXJuYWwgcm1kaXI6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3N5c19ybWRpclwiXG5leHRlcm5hbCBnZXRjd2Q6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3N5c19nZXRjd2RcIlxuZXh0ZXJuYWwgcmVhZGRpciA6IHN0cmluZyAtPiBzdHJpbmcgYXJyYXkgPSBcImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XCJcblxubGV0IGludGVyYWN0aXZlID0gcmVmIGZhbHNlXG5cbnR5cGUgc2lnbmFsX2JlaGF2aW9yID1cbiAgICBTaWduYWxfZGVmYXVsdFxuICB8IFNpZ25hbF9pZ25vcmVcbiAgfCBTaWduYWxfaGFuZGxlIG9mIChpbnQgLT4gdW5pdClcblxuZXh0ZXJuYWwgc2lnbmFsIDogaW50IC0+IHNpZ25hbF9iZWhhdmlvciAtPiBzaWduYWxfYmVoYXZpb3JcbiAgICAgICAgICAgICAgICA9IFwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyXCJcblxubGV0IHNldF9zaWduYWwgc2lnX251bSBzaWdfYmVoID0gaWdub3JlKHNpZ25hbCBzaWdfbnVtIHNpZ19iZWgpXG5cbmxldCBzaWdhYnJ0ID0gLTFcbmxldCBzaWdhbHJtID0gLTJcbmxldCBzaWdmcGUgPSAtM1xubGV0IHNpZ2h1cCA9IC00XG5sZXQgc2lnaWxsID0gLTVcbmxldCBzaWdpbnQgPSAtNlxubGV0IHNpZ2tpbGwgPSAtN1xubGV0IHNpZ3BpcGUgPSAtOFxubGV0IHNpZ3F1aXQgPSAtOVxubGV0IHNpZ3NlZ3YgPSAtMTBcbmxldCBzaWd0ZXJtID0gLTExXG5sZXQgc2lndXNyMSA9IC0xMlxubGV0IHNpZ3VzcjIgPSAtMTNcbmxldCBzaWdjaGxkID0gLTE0XG5sZXQgc2lnY29udCA9IC0xNVxubGV0IHNpZ3N0b3AgPSAtMTZcbmxldCBzaWd0c3RwID0gLTE3XG5sZXQgc2lndHRpbiA9IC0xOFxubGV0IHNpZ3R0b3UgPSAtMTlcbmxldCBzaWd2dGFscm0gPSAtMjBcbmxldCBzaWdwcm9mID0gLTIxXG5sZXQgc2lnYnVzID0gLTIyXG5sZXQgc2lncG9sbCA9IC0yM1xubGV0IHNpZ3N5cyA9IC0yNFxubGV0IHNpZ3RyYXAgPSAtMjVcbmxldCBzaWd1cmcgPSAtMjZcbmxldCBzaWd4Y3B1ID0gLTI3XG5sZXQgc2lneGZzeiA9IC0yOFxuXG5leGNlcHRpb24gQnJlYWtcblxubGV0IGNhdGNoX2JyZWFrIG9uID1cbiAgaWYgb24gdGhlblxuICAgIHNldF9zaWduYWwgc2lnaW50IChTaWduYWxfaGFuZGxlKGZ1biBfIC0+IHJhaXNlIEJyZWFrKSlcbiAgZWxzZVxuICAgIHNldF9zaWduYWwgc2lnaW50IFNpZ25hbF9kZWZhdWx0XG5cblxuZXh0ZXJuYWwgZW5hYmxlX3J1bnRpbWVfd2FybmluZ3M6IGJvb2wgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1wiXG5leHRlcm5hbCBydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQ6IHVuaXQgLT4gYm9vbCA9XG4gIFwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcIlxuXG4oKiBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgZm91bmQgaW4gZmlsZSAuLi9WRVJTSU9OICopXG5cbmxldCBvY2FtbF92ZXJzaW9uID0gXCJAVkVSU0lPTkBcIlxuXG5sZXQgZGV2ZWxvcG1lbnRfdmVyc2lvbiA9IEBPQ0FNTF9ERVZFTE9QTUVOVF9WRVJTSU9OQFxuXG50eXBlIGV4dHJhX3ByZWZpeCA9IFBsdXMgfCBUaWxkZVxuXG50eXBlIGV4dHJhX2luZm8gPSBleHRyYV9wcmVmaXggKiBzdHJpbmdcblxudHlwZSBvY2FtbF9yZWxlYXNlX2luZm8gPSB7XG4gIG1ham9yIDogaW50O1xuICBtaW5vciA6IGludDtcbiAgcGF0Y2hsZXZlbCA6IGludDtcbiAgZXh0cmEgOiBleHRyYV9pbmZvIG9wdGlvblxufVxuXG5sZXQgb2NhbWxfcmVsZWFzZSA9IHtcbiAgbWFqb3IgPSBAT0NBTUxfVkVSU0lPTl9NQUpPUkA7XG4gIG1pbm9yID0gQE9DQU1MX1ZFUlNJT05fTUlOT1JAO1xuICBwYXRjaGxldmVsID0gQE9DQU1MX1ZFUlNJT05fUEFUQ0hMRVZFTEA7XG4gIGV4dHJhID0gQE9DQU1MX1JFTEVBU0VfRVhUUkFAXG59XG5cbigqIE9wdGltaXphdGlvbiAqKVxuXG5leHRlcm5hbCBvcGFxdWVfaWRlbnRpdHkgOiAnYSAtPiAnYSA9IFwiJW9wYXF1ZVwiXG5cbm1vZHVsZSBJbW1lZGlhdGU2NCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBOb25faW1tZWRpYXRlID0gc2lnXG4gICAgdHlwZSB0XG4gIGVuZFxuICBtb2R1bGUgdHlwZSBJbW1lZGlhdGUgPSBzaWdcbiAgICB0eXBlIHQgW0BAaW1tZWRpYXRlXVxuICBlbmRcblxuICBtb2R1bGUgTWFrZShJbW1lZGlhdGUgOiBJbW1lZGlhdGUpKE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlKSA9IHN0cnVjdFxuICAgIHR5cGUgdCBbQEBpbW1lZGlhdGU2NF1cbiAgICB0eXBlICdhIHJlcHIgPVxuICAgICAgfCBJbW1lZGlhdGUgOiBJbW1lZGlhdGUudCByZXByXG4gICAgICB8IE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlLnQgcmVwclxuICAgIGV4dGVybmFsIG1hZ2ljIDogXyByZXByIC0+IHQgcmVwciA9IFwiJWlkZW50aXR5XCJcbiAgICBsZXQgcmVwciA9XG4gICAgICBpZiB3b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIG1hZ2ljIEltbWVkaWF0ZVxuICAgICAgZWxzZVxuICAgICAgICBtYWdpYyBOb25faW1tZWRpYXRlXG4gIGVuZFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJTdGRsaWIiLCJleGVjdXRhYmxlX25hbWUiLCJvc190eXBlIiwidW5peCIsIndpbjMyIiwiY3lnd2luIiwibWF4X2FycmF5X2xlbmd0aCIsIm1heF9mbG9hdGFycmF5X2xlbmd0aCIsIm1heF9zdHJpbmdfbGVuZ3RoIiwiZ2V0ZW52X29wdCIsInMiLCJleG4iLCJzZXRfc2lnbmFsIiwic2lnX251bSIsInNpZ19iZWgiLCJCcmVhayIsImNhdGNoX2JyZWFrIiwib24iLCJNYWtlIiwiSW1tZWRpYXRlIiwiTm9uX2ltbWVkaWF0ZSIsIlN0ZGxpYl9TeXMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkNtQ3NCO0FBQUEsSUFBQUMsVUFDQTtBQUFBLElBQUFDLE9BQVk7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElBdUJoQyxZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQzRFg7QUFBQSwyQkM0RG9CO0FBQUEsS0Q1RHBCO0FBQUE7QUFBQSxHQzREd0I7QUFBQSxZQUFBQyxXQUFBQyxTQUFBQyxTQXFCdUM7QUFBQSxPQUFBQyxRQTdDN0I7QUFBQSxZQUFBQyxZQUFBQyxJQStFaEMsaUJBR2tDO0FBQUEsWUFBQUMsS0FBQUMsV0FBQUMsZUFzRDVCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQXhJMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwQ2xDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAwNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb2JqLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQzXG5cbmxldCBmb3JjaW5nX3RhZyA9IDI0NFxubGV0IGNvbnRfdGFnID0gMjQ1XG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCJcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX29ial90YWciLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TeXMiLCJpc19ibG9jayIsImEiLCJkb3VibGVfZmllbGQiLCJ4IiwiaSIsInNldF9kb3VibGVfZmllbGQiLCJ2Iiwib2ZfdmFsIiwic2xvdCIsImNzdF9PYmpfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwibmFtZSIsImlkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibCIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwiZSIsIm8iLCJtc2ciLCJnZXRfa2V5IiwiZ2V0X2tleV9jb3B5Iiwic2V0X2tleSIsInVuc2V0X2tleSIsImNoZWNrX2tleSIsImJsaXRfa2V5IiwiZTEiLCJvMSIsImUyIiwibzIiLCJTdGRsaWJfT2JqIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLFNBQUFDLEdDeUJrQyxtQ0FBYztBQUFBLFlBQUFDLGFBQUFDLEdBQUFDLEdBU1Isb0NBQXFDO0FBQUEsWUFBQUMsaUJBQUFGLEdBQUFDLEdBQUFFO0FBQUFBLElBRTNFO0FBQUEsSUFBdUM7QUFBQTtBQUFBLFlBQUFDLE9BQUFKO0FBQUFBO0FBQUFBLEtBQUFLO0FBQUFBLE9Bd0NoQztBQUFBLFVBQWdCO0FBQUE7QUFBQSxLQUFBQyxnQ0Q1RXpCO0FBQUE7QUFBQTtBQUFBLEtDZ0ZTLHFCQUFtQixnQ0FBQUMsT0FBeUM7QUFBQSxTQUFBQSxPQUMxRDtBQUFBO0FBQUEsSUFFRjtBQUFBO0FBQUEsY0FDRSxtREFBdUM7QUFBQTtBQUFBLFlBQUFBLEtBQUFGLE1BR3BCO0FBQUEsWUFBQUcsR0FBQUgsTUFHQTtBQUFBLE9BQUFJLGtCRDFGOUI7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBLElDd0dJO0FBQUEsY0FDRTtBQUFBLElBQ0Ysa0NBQVE7QUFBQTtBQUFBLFlBQUFDLE9BQUFaLEdBRUssd0JBQWdDO0FBQUEsWUFBQWEsd0JBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFHN0Msb0JBQXNCLG1CQUF0QjtBQUFBLGVBQ0UsNkJBQWU7QUFBQTtBQUFBLFlBQUFDLFFBQUFILEdBQUFDO0FBQUFBLElBSWpCO0FBQUEsSUFDQSxzQ0FBVztBQUFBO0FBQUEsWUFBQUcsYUFBQUosR0FBQUM7QUFBQUEsSUFJWDtBQUFBLElBQ0EsMkNBQWdCO0FBQUE7QUFBQSxZQUFBSSxRQUFBTCxHQUFBQyxHQUFBZjtBQUFBQSxJQUloQjtBQUFBLElBQ0EseUNBQWE7QUFBQTtBQUFBLFlBQUFvQixVQUFBTixHQUFBQztBQUFBQSxJQUliO0FBQUEsSUFDQSx3Q0FBYTtBQUFBO0FBQUEsWUFBQU0sVUFBQVAsR0FBQUM7QUFBQUEsSUFJYjtBQUFBLElBQ0Esd0NBQWE7QUFBQTtBQUFBLFlBQUFPLFNBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFmO0FBQUFBLElBTWI7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQix5Q0FDTjtBQUFBO0FBQUEsVUFFaEI7QUFBQSxjQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsSUFEQSxxREFDcUM7QUFBQTtBQUFBO0FBQUEsSUFBQWdCO0FBQUFBLE1EbEo5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMTcyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2F0b21pYy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICBTdGVwaGVuIERvbGFuLCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTctMjAxOCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBtYWtlIDogJ2EgLT4gJ2EgdCA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsIG1ha2VfY29udGVuZGVkIDogJ2EgLT4gJ2EgdCA9IFwiY2FtbF9hdG9taWNfbWFrZV9jb250ZW5kZWRcIlxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiAnYSA9IFwiJWF0b21pY19sb2FkXCJcbmV4dGVybmFsIGV4Y2hhbmdlIDogJ2EgdCAtPiAnYSAtPiAnYSA9IFwiJWF0b21pY19leGNoYW5nZVwiXG5leHRlcm5hbCBjb21wYXJlX2FuZF9zZXQgOiAnYSB0IC0+ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVhdG9taWNfY2FzXCJcbmV4dGVybmFsIGZldGNoX2FuZF9hZGQgOiBpbnQgdCAtPiBpbnQgLT4gaW50ID0gXCIlYXRvbWljX2ZldGNoX2FkZFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxubGV0IHNldCByIHggPSBpZ25vcmUgKGV4Y2hhbmdlIHIgeClcbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2V4Y2hhbmdlIiwiY2FtbF9hdG9taWNfZmV0Y2hfYWRkIiwic2V0IiwiciIsIngiLCJpbmNyIiwiZGVjciIsIlN0ZGxpYl9BdG9taWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDd0JjLHFDQUFxQjtBQUFBLFlBQUFDLEtBQUFGLEdBQ3RCLHNDQUEwQjtBQUFBLFlBQUFHLEtBQUFILEdBQzFCLHVDQUE2QjtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUQxQjFDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAyMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbigqIFt1cGRhdGVfdG9fZm9yY2luZyBibGtdIHRyaWVzIHRvIHVwZGF0ZSBhIFtibGtdIHdpdGggW2xhenlfdGFnXSB0b1xuICAgW2ZvcmNpbmdfdGFnXSB1c2luZyBjb21wYXJlLWFuZC1zd2FwIChDQVMpLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGUgaGVhZGVyIHdvcmQgYnkgYSBjb25jdXJyZW50IEdDIHRocmVhZC4gUmV0dXJucyBbMF0gaWYgdGhlXG4gICBDQVMgaXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIENBUyBmYWlscywgdGhlbiB0aGUgdGFnIHdhcyBvYnNlcnZlZCB0byBiZVxuICAgc29tZXRoaW5nIG90aGVyIHRoYW4gW2xhenlfdGFnXSBkdWUgdG8gYSBjb25jdXJyZW50IG11dGF0b3IuIEluIHRoaXMgY2FzZSxcbiAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIFsxXS4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3JjaW5nIDogT2JqLnQgLT4gaW50ID1cbiAgXCJjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcIiBbQEBub2FsbG9jXVxuXG4oKiBbcmVzZXRfdG9fbGF6eSBibGtdIGV4cGVjdHMgW2Jsa10gdG8gYmUgYSBsYXp5IG9iamVjdCB3aXRoIFtPYmouZm9yY2luZ190YWddXG4gICBhbmQgdXBkYXRlcyB0aGUgdGFnIHRvIFtPYmoubGF6eV90YWddLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGlzIG9iamVjdCdzIGhlYWRlciBieSBhIGNvbmN1cnJlbnQgR0MgdGhyZWFkLiAqKVxuZXh0ZXJuYWwgcmVzZXRfdG9fbGF6eSA6IE9iai50IC0+IHVuaXQgPSBcImNhbWxfbGF6eV9yZXNldF90b19sYXp5XCIgW0BAbm9hbGxvY11cblxuKCogW3VwZGF0ZV90b19mb3J3YXJkIGJsa10gZXhwZWN0cyBbYmxrXSB0byBiZSBhIGxhenkgb2JqZWN0IHdpdGhcbiAgIFtPYmouZm9yY2luZ190YWddIGFuZCB1cGRhdGVzIHRoZSB0YWcgdG8gW09iai5mb3J3YXJkX3RhZ10sIHRha2luZyBjYXJlIHRvXG4gICBoYW5kbGUgY29uY3VycmVudCBtYXJraW5nIG9mIHRoaXMgb2JqZWN0J3MgaGVhZGVyIGJ5IGEgY29uY3VycmVudCBHQyB0aHJlYWQuXG4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3J3YXJkIDogT2JqLnQgLT4gdW5pdCA9XG4gIFwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXCIgW0BAbm9hbGxvY11cblxuKCogQXNzdW1lcyBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGZvcmNpbmcgKilcbmxldCBkb19mb3JjZV9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciByZXN1bHQpO1xuICAgIHVwZGF0ZV90b19mb3J3YXJkIGI7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByZXNldF90b19sYXp5IGI7XG4gICAgcmFpc2UgZVxuXG4oKiBBc3N1bWVzIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgZm9yY2luZyAqKVxubGV0IGRvX2ZvcmNlX3ZhbF9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBPYmouc2V0X2ZpZWxkIGIgMCAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgdXBkYXRlX3RvX2ZvcndhcmQgYjtcbiAgcmVzdWx0XG5cbigqIENhbGxlZCBieSBbZm9yY2VfZ2VuXSAqKVxubGV0IGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgKCogV2UgZXhwZWN0IHRoZSB0YWcgdG8gYmUgW2xhenlfdGFnXSwgYnV0IG1heSBiZSBvdGhlciB0YWdzIGR1ZSB0b1xuICAgICBjb25jdXJyZW50IGZvcmNpbmcgb2YgbGF6eSB2YWx1ZXMuICopXG4gIG1hdGNoIHVwZGF0ZV90b19mb3JjaW5nIChPYmoucmVwciBibGspIHdpdGhcbiAgfCAwIHdoZW4gb25seV92YWwgLT4gZG9fZm9yY2VfdmFsX2Jsb2NrIGJsa1xuICB8IDAgLT4gZG9fZm9yY2VfYmxvY2sgYmxrXG4gIHwgXyAtPiByYWlzZSBVbmRlZmluZWRcblxuKCogdXNlZCBpbiB0aGUgJWxhenlfZm9yY2UgcHJpbWl0aXZlICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayBibGsgPSBmb3JjZV9nZW5fbGF6eV9ibG9jayB+b25seV92YWw6ZmFsc2UgYmxrXG5cbigqIFtmb3JjZV9nZW4gfm9ubHlfdmFsOmZhbHNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzXG4gICBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZSB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHNcbiAgIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmwgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcbmxldCBmb3JjZV9nZW4gfm9ubHlfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdCBjb3VsZCBoYXZlIGJlZW5cbiAgICAgICBzaG9ydGN1dCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgaGVyZSBhdCB0aGUgbW9tZW50IHNpbmNlXG4gICAgICAgW09iai50YWddIGlzIG5vdCBzaW1wbGlmaWVkIGJ5IHRoZSBjb21waWxlciwgYW5kIEdQUiM3MTMgYWxzb1xuICAgICAgIGVuc3VyZXMgdGhhdCBubyB2YWx1ZSB3aWxsIGJlIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcuXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICAoKiBTVEFSVCBubyBzYWZlIHBvaW50cy4gSWYgYSBHQyBvY2N1cnMgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IFt4XSBtYXkgYmVcbiAgICAgc2hvcnQtY2lyY3VpdGVkLCBhbmQgZ2V0dGluZyB0aGUgZmlyc3QgZmllbGQgb2YgW3hdIHdvdWxkIGdldCB1cyB0aGUgd3JvbmdcbiAgICAgdmFsdWUuIEx1Y2tpbHksIHRoZSBjb21waWxlciBkb2VzIG5vdCBpbnNlcnQgR0Mgc2FmZSBwb2ludHMgYXQgdGhpcyBwbGFjZSxcbiAgICAgc28gaXQgaXMgb2suICopXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlblxuICAgIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpXG4gICgqIEVORCBubyBzYWZlIHBvaW50cyAqKVxuICBlbHNlIGlmIHQgPSBPYmouZm9yY2luZ190YWcgdGhlbiByYWlzZSBVbmRlZmluZWRcbiAgZWxzZSBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCBsenZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWJfT2JqIiwiVW5kZWZpbmVkIiwiZm9yY2VfZ2VuX2xhenlfYmxvY2siLCJvbmx5X3ZhbCIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJlIiwicGFyYW0iLCJmb3JjZV9sYXp5X2Jsb2NrIiwiZm9yY2VfZ2VuIiwibHp2IiwidCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxVQUFBQztBQUFBQSxJQ3VFUTtBQUFBLEtBR0M7QUFBQSxJQUZFO0FBQUEsU0FBQUMsWUFaYztBQUFBLEtBQ3ZCO0FBQUEsU0FBQUMsV0FDYTtBQUFBLEtBQ2I7QUFBQSxLQUNBO0FBQUEsS0FBbUI7QUFBQTtBQUFBLFFBQUFELFVBbkJJO0FBQUEsSUFDdkI7QUFBQSxJQUErQjtBQUFBLFNBQUFDLFNBRWhCO0FBQUEsS0FDYjtBQUFBLEtBQ0E7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSURsREo7QUFBQSxLQ3FESSxrQkFBQUMsT0FBdUMsd0NBQU87QUFBQSxLQUM5QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBb0JLO0FBQUEsWUFBQUMsaUJBQUFMLEtBR0csbUNBQXdDO0FBQUEsWUFBQU0sVUFBQVAsVUFBQVE7QUFBQUEsUUFBQUMsSUFxQnpEO0FBQUEsSUFDUix5QkFDMEI7QUFBQSxJQUVyQix3QkFBNEI7QUFBQSxJQUM1QixtQ0FDQSxtQ0FBa0M7QUFBQTtBQUFBLEdEeEd6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMjU4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2xhenkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5sZXQgZm9yY2VfdmFsIGwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX2dlbiB+b25seV92YWw6dHJ1ZSBsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8XG4gICAgIHQgPSBPYmouZm9yY2luZ190YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX29ial90YWciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJDYW1saW50ZXJuYWxMYXp5IiwiU3RkbGliX09iaiIsIlVuZGVmaW5lZCIsImZvcmNlX3ZhbCIsImwiLCJmcm9tX2Z1biIsIngiLCJmcm9tX3ZhbCIsInYiLCJ0IiwiaXNfdmFsIiwibWFwIiwicGFyYW0iLCJtYXBfdmFsIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSx5QkFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsVUFBQUMsR0N1RGtCLDJDQUEyQztBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFTLElBR25EO0FBQUEsSUFDUjtBQUFBLElBQThCO0FBQUEsR0FDVjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLElBR1o7QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBLEtBSUc7QUFBQSxJQUgrQyx3Q0FJL0M7QUFBQTtBQUFBLFlBQUFDLE9BQUFOO0FBQUFBLFFBQUEsSUFFcUI7QUFBQSx3Q0FBb0I7QUFBQSxHQUFnQjtBQUFBLFlBQUFPLElBQUFkLEdBQUFTO0FBQUFBLElBRzVEO0FBQUEscUJBQUFNO0FBQUFBLGlCQUFBLElEMUVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNDMEVFO0FBQUEsR0FBa0I7QUFBQSxZQUFBQyxRQUFBaEIsR0FBQVM7QUFBQUEsSUFHZjtBQUFBLEtBRUU7QUFBQSxzQkFBQU07QUFBQUEsa0JBQUEsSUQvRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUMrRU87QUFBQSxZQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFTLE9BQWEsU0FBYixpQkFDUztBQUFBO0FBQUEsR0QvRXpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAzMzksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc2VxLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgZmluZF9pbmRleCBwIHhzID1cbiAgbGV0IHJlYyBhdXggaSB4cyA9IG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5vbmVcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBpZiBwIHggdGhlbiBTb21lIGkgZWxzZSBhdXggKGkrMSkgeHMgaW5cbiAgYXV4IDAgeHNcblxubGV0IHJlYyBmaW5kX21hcCBmIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOb25lXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgZmluZF9tYXAgZiB4c1xuICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+XG4gICAgICAgICAgcmVzdWx0XG5cbmxldCBmaW5kX21hcGkgZiB4cyA9XG4gIGxldCByZWMgYXV4IGkgeHMgPSBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGF1eCAoaSsxKSB4c1xuICAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICAgIHJlc3VsdCBpblxuICBhdXggMCB4c1xuXG4oKiBbaXRlcjJdLCBbZm9sZF9sZWZ0Ml0sIFtmb3JfYWxsMl0sIFtleGlzdHMyXSwgW21hcDJdLCBbemlwXSB3b3JrIGFsc28gaW5cbiAgIHRoZSBjYXNlIHdoZXJlIHRoZSB0d28gc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMuIFRoZXkgc3RvcCBhcyBzb29uXG4gICBhcyBvbmUgc2VxdWVuY2UgaXMgZXhoYXVzdGVkLiBUaGVpciBiZWhhdmlvciBpcyBzbGlnaHRseSBhc3ltbWV0cmljOiB3aGVuXG4gICBbeHNdIGlzIGVtcHR5LCB0aGV5IGRvIG5vdCBmb3JjZSBbeXNdOyBob3dldmVyLCB3aGVuIFt5c10gaXMgZW1wdHksIFt4c10gaXNcbiAgIGZvcmNlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gYXBwbGljYXRpb24gW3hzKCldIHR1cm5zIG91dFxuICAgdG8gYmUgdXNlbGVzcy4gKilcblxubGV0IHJlYyBpdGVyMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICAoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgpXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5O1xuICAgICAgICAgIGl0ZXIyIGYgeHMgeXNcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgYWNjdVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGFjY3VcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgeCB5IGluXG4gICAgICAgICAgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXNcblxubGV0IHJlYyBmb3JfYWxsMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSAmJiBmb3JfYWxsMiBmIHhzIHlzXG5cbmxldCByZWMgZXhpc3RzMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBmYWxzZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5IHx8IGV4aXN0czIgZiB4cyB5c1xuXG5sZXQgcmVjIGVxdWFsIGVxIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgZXEgeCB5ICYmIGVxdWFsIGVxIHhzIHlzXG4gIHwgTmlsLCBDb25zIChfLCBfKVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgIGZhbHNlXG5cbmxldCByZWMgY29tcGFyZSBjbXAgeHMgeXMgPVxuICBtYXRjaCB4cygpLCB5cygpIHdpdGhcbiAgfCBOaWwsIE5pbCAtPlxuICAgICAgMFxuICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4IHkgaW5cbiAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZSBjb21wYXJlIGNtcCB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXykgLT5cbiAgICAgIC0xXG4gIHwgQ29ucyAoXywgXyksIE5pbCAtPlxuICAgICAgKzFcblxuXG5cbigqIFtpbml0X2F1eCBmIGkgal0gaXMgdGhlIHNlcXVlbmNlIFtmIGksIC4uLiwgZiAoai0xKV0uICopXG5cbmxldCByZWMgaW5pdF9hdXggZiBpIGogKCkgPVxuICBpZiBpIDwgaiB0aGVuIGJlZ2luXG4gICAgQ29ucyAoZiBpLCBpbml0X2F1eCBmIChpICsgMSkgailcbiAgZW5kXG4gIGVsc2VcbiAgICBOaWxcblxubGV0IGluaXQgbiBmID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU2VxLmluaXRcIlxuICBlbHNlXG4gICAgaW5pdF9hdXggZiAwIG5cblxubGV0IHJlYyByZXBlYXQgeCAoKSA9XG4gIENvbnMgKHgsIHJlcGVhdCB4KVxuXG5sZXQgcmVjIGZvcmV2ZXIgZiAoKSA9XG4gIENvbnMgKGYoKSwgZm9yZXZlciBmKVxuXG4oKiBUaGlzIHByZWxpbWluYXJ5IGRlZmluaXRpb24gb2YgW2N5Y2xlXSByZXF1aXJlcyB0aGUgc2VxdWVuY2UgW3hzXVxuICAgdG8gYmUgbm9uZW1wdHkuIEFwcGx5aW5nIGl0IHRvIGFuIGVtcHR5IHNlcXVlbmNlIHdvdWxkIHByb2R1Y2UgYVxuICAgc2VxdWVuY2UgdGhhdCBkaXZlcmdlcyB3aGVuIGl0IGlzIGZvcmNlZC4gKilcblxubGV0IHJlYyBjeWNsZV9ub25lbXB0eSB4cyAoKSA9XG4gIGFwcGVuZCB4cyAoY3ljbGVfbm9uZW1wdHkgeHMpICgpXG5cbigqIFtjeWNsZSB4c10gY2hlY2tzIHdoZXRoZXIgW3hzXSBpcyBlbXB0eSBhbmQsIGlmIHNvLCByZXR1cm5zIGFuIGVtcHR5XG4gICBzZXF1ZW5jZS4gT3RoZXJ3aXNlLCBbY3ljbGUgeHNdIHByb2R1Y2VzIG9uZSBjb3B5IG9mIFt4c10gZm9sbG93ZWRcbiAgIHdpdGggdGhlIGluZmluaXRlIHNlcXVlbmNlIFtjeWNsZV9ub25lbXB0eSB4c10uIFRodXMsIHRoZSBub25lbXB0aW5lc3NcbiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBqdXN0IG9uY2UuICopXG5cbmxldCBjeWNsZSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMnKSAtPlxuICAgICAgQ29ucyAoeCwgYXBwZW5kIHhzJyAoY3ljbGVfbm9uZW1wdHkgeHMpKVxuXG4oKiBbaXRlcmF0ZTEgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW2YgeCwgZiAoZiB4KSwgLi4uXS5cbiAgIEl0IGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKGl0ZXJhdGUgZiB4KV0uXG4gICBbaXRlcmF0ZTFdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0uICopXG5cbmxldCByZWMgaXRlcmF0ZTEgZiB4ICgpID1cbiAgbGV0IHkgPSBmIHggaW5cbiAgQ29ucyAoeSwgaXRlcmF0ZTEgZiB5KVxuXG4oKiBbaXRlcmF0ZSBmIHhdIGlzIHRoZSBzZXF1ZW5jZSBbeCwgZiB4LCAuLi5dLiAqKVxuXG4oKiBUaGUgcmVhc29uIHdoeSB3ZSBnaXZlIHRoaXMgc2xpZ2h0bHkgaW5kaXJlY3QgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0sXG4gICBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIG5haXZlIGRlZmluaXRpb24gdGhhdCBtYXkgY29tZSB0byBtaW5kLCBpcyB0aGF0XG4gICB3ZSBhcmUgY2FyZWZ1bCB0byBhdm9pZCBldmFsdWF0aW5nIFtmIHhdIHVudGlsIHRoaXMgZnVuY3Rpb24gY2FsbCBpc1xuICAgYWN0dWFsbHkgbmVjZXNzYXJ5LiBUaGUgbmFpdmUgZGVmaW5pdGlvbiAobm90IHNob3duIGhlcmUpIGNvbXB1dGVzIHRoZVxuICAgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBzZXF1ZW5jZSwgW2YgeF0sIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzXG4gICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICopXG5cbmxldCBpdGVyYXRlIGYgeCA9XG4gIGNvbnMgeCAoaXRlcmF0ZTEgZiB4KVxuXG5cblxubGV0IHJlYyBtYXBpX2F1eCBmIGkgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoZiBpIHgsIG1hcGlfYXV4IGYgKGkrMSkgeHMpXG5cbmxldFtAaW5saW5lXSBtYXBpIGYgeHMgPVxuICBtYXBpX2F1eCBmIDAgeHNcblxuKCogW3RhaWxfc2NhbiBmIHMgeHNdIGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKHNjYW4gZiBzIHhzKV0uXG4gICBbdGFpbF9zY2FuXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW3NjYW5dLiAqKVxuXG4oKiBUaGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW3NjYW5dIGlzIG1lYW50IHRvIGF2b2lkIGNvbXB1dGluZ1xuICAgZWxlbWVudHMgdG9vIGVhcmx5OyBzZWUgdGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgW2l0ZXJhdGUxXSBhbmQgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIHRhaWxfc2NhbiBmIHMgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbGV0IHMgPSBmIHMgeCBpblxuICAgICAgQ29ucyAocywgdGFpbF9zY2FuIGYgcyB4cylcblxubGV0IHNjYW4gZiBzIHhzID1cbiAgY29ucyBzICh0YWlsX3NjYW4gZiBzIHhzKVxuXG4oKiBbdGFrZV0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW3Rha2UgMCB4c10gcmV0dXJucyBbZW1wdHldXG4gICBpbW1lZGlhdGVseSwgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCByZWMgdGFrZV9hdXggbiB4cyA9XG4gIGlmIG4gPSAwIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgIENvbnMgKHgsIHRha2VfYXV4IChuLTEpIHhzKVxuXG5sZXQgdGFrZSBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS50YWtlXCI7XG4gIHRha2VfYXV4IG4geHNcblxuKCogW2ZvcmNlX2Ryb3AgbiB4c10gaXMgZXF1aXZhbGVudCB0byBbZHJvcCBuIHhzICgpXS5cbiAgIFtmb3JjZV9kcm9wIG4geHNdIHJlcXVpcmVzIFtuID4gMF0uXG4gICBbZm9yY2VfZHJvcF0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtkcm9wXS4gKilcblxubGV0IHJlYyBmb3JjZV9kcm9wIG4geHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKF8sIHhzKSAtPlxuICAgICAgbGV0IG4gPSBuIC0gMSBpblxuICAgICAgaWYgbiA9IDAgdGhlblxuICAgICAgICB4cygpXG4gICAgICBlbHNlXG4gICAgICAgIGZvcmNlX2Ryb3AgbiB4c1xuXG4oKiBbZHJvcF0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW2Ryb3AgMCB4c10gcmV0dXJucyBbeHNdIGltbWVkaWF0ZWx5LFxuICAgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCBkcm9wIG4geHMgPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiU2VxLmRyb3BcIlxuICBlbHNlIGlmIG4gPSAwIHRoZW5cbiAgICB4c1xuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBmb3JjZV9kcm9wIG4geHNcblxubGV0IHJlYyB0YWtlX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgaWYgcCB4IHRoZW4gQ29ucyAoeCwgdGFrZV93aGlsZSBwIHhzKSBlbHNlIE5pbFxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIGFzIG5vZGUgLT5cbiAgICAgIGlmIHAgeCB0aGVuIGRyb3Bfd2hpbGUgcCB4cyAoKSBlbHNlIG5vZGVcblxubGV0IHJlYyBncm91cCBlcSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBDb25zIChjb25zIHggKHRha2Vfd2hpbGUgKGVxIHgpIHhzKSwgZ3JvdXAgZXEgKGRyb3Bfd2hpbGUgKGVxIHgpIHhzKSlcblxuZXhjZXB0aW9uIEZvcmNlZF90d2ljZVxuXG5tb2R1bGUgU3VzcGVuc2lvbiA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egc3VzcGVuc2lvbiA9XG4gICAgdW5pdCAtPiAnYVxuXG4gICgqIENvbnZlcnNpb25zLiAqKVxuXG4gIGxldCB0b19sYXp5IDogJ2Egc3VzcGVuc2lvbiAtPiAnYSBMYXp5LnQgPVxuICAgIExhenkuZnJvbV9mdW5cbiAgICAoKiBmdW4gcyAtPiBsYXp5IChzKCkpICopXG5cbiAgbGV0IGZyb21fbGF6eSAocyA6ICdhIExhenkudCkgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmdW4gKCkgLT4gTGF6eS5mb3JjZSBzXG5cbiAgKCogW21lbW9pemVdIHR1cm5zIGFuIGFyYml0cmFyeSBzdXNwZW5zaW9uIGludG8gYSBwZXJzaXN0ZW50IHN1c3BlbnNpb24uICopXG5cbiAgbGV0IG1lbW9pemUgKHMgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGZyb21fbGF6eSAodG9fbGF6eSBzKVxuXG4gICgqIFtmYWlsdXJlXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBmYWlscyB3aGVuIGZvcmNlZC4gKilcblxuICBsZXQgZmFpbHVyZSA6IF8gc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBBIHN1c3BlbnNpb24gY3JlYXRlZCBieSBbb25jZV0gaGFzIGJlZW4gZm9yY2VkIHR3aWNlLiAqKVxuICAgICAgcmFpc2UgRm9yY2VkX3R3aWNlXG5cbiAgKCogSWYgW2ZdIGlzIGEgc3VzcGVuc2lvbiwgdGhlbiBbb25jZSBmXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBjYW4gYmUgZm9yY2VkXG4gICAgIGF0IG1vc3Qgb25jZS4gSWYgaXQgaXMgZm9yY2VkIG1vcmUgdGhhbiBvbmNlLCB0aGVuIFtGb3JjZWRfdHdpY2VdIGlzXG4gICAgIHJhaXNlZC4gKilcblxuICBsZXQgb25jZSAoZiA6ICdhIHN1c3BlbnNpb24pIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgbGV0IGFjdGlvbiA9IEF0b21pYy5tYWtlIGYgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgICgqIEdldCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IHN0b3JlZCBpbiBbYWN0aW9uXSwgYW5kIHdyaXRlIHRoZVxuICAgICAgICAgZnVuY3Rpb24gW2ZhaWx1cmVdIGluIGl0cyBwbGFjZSwgc28gdGhlIG5leHQgYWNjZXNzIHdpbGwgcmVzdWx0XG4gICAgICAgICBpbiBhIGNhbGwgdG8gW2ZhaWx1cmUoKV0uICopXG4gICAgICBsZXQgZiA9IEF0b21pYy5leGNoYW5nZSBhY3Rpb24gZmFpbHVyZSBpblxuICAgICAgZigpXG5cbmVuZCAoKiBTdXNwZW5zaW9uICopXG5cbmxldCByZWMgbWVtb2l6ZSB4cyA9XG4gIFN1c3BlbnNpb24ubWVtb2l6ZSAoZnVuICgpIC0+XG4gICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgQ29ucyAoeCwgbWVtb2l6ZSB4cylcbiAgKVxuXG5sZXQgcmVjIG9uY2UgeHMgPVxuICBTdXNwZW5zaW9uLm9uY2UgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG9uY2UgeHMpXG4gIClcblxuXG5sZXQgcmVjIHppcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKCh4LCB5KSwgemlwIHhzIHlzKVxuXG5sZXQgcmVjIG1hcDIgZiB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKGYgeCB5LCBtYXAyIGYgeHMgeXMpXG5cbmxldCByZWMgaW50ZXJsZWF2ZSB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgeXMoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoeCwgaW50ZXJsZWF2ZSB5cyB4cylcblxuKCogW3NvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIChjb25zIHggeHMpIHlzXS5cblxuICAgW3NvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIHhzIChjb25zIHkgeXMpXS5cblxuICAgW3NvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSAoY29ucyB5IHlzKV0uXG5cbiAgIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBidWlsZGluZyBibG9ja3MgaW4gdGhlIGRlZmluaXRpb25cbiAgIG9mIFtzb3J0ZWRfbWVyZ2VdLiAqKVxuXG5sZXQgcmVjIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzICgpID1cbiAgbWF0Y2ggeXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh4LCB4cylcbiAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMXIgY21wIHhzIHkgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIENvbnMgKHksIHlzKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzXG5cbmFuZCBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXMgPVxuICBpZiBjbXAgeCB5IDw9IDAgdGhlblxuICAgIENvbnMgKHgsIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzKVxuICBlbHNlXG4gICAgQ29ucyAoeSwgc29ydGVkX21lcmdlMWwgY21wIHggeHMgeXMpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgY21wIHhzIHlzICgpID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IE5pbCwgY1xuICAgIHwgYywgTmlsIC0+XG4gICAgICAgIGNcbiAgICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5cbmxldCByZWMgbWFwX2ZzdCB4eXMgKCkgPVxuICBtYXRjaCB4eXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICgoeCwgXyksIHh5cykgLT5cbiAgICAgIENvbnMgKHgsIG1hcF9mc3QgeHlzKVxuXG5sZXQgcmVjIG1hcF9zbmQgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKF8sIHkpLCB4eXMpIC0+XG4gICAgICBDb25zICh5LCBtYXBfc25kIHh5cylcblxubGV0IHVuemlwIHh5cyA9XG4gIG1hcF9mc3QgeHlzLCBtYXBfc25kIHh5c1xuXG5sZXQgc3BsaXQgPVxuICB1bnppcFxuXG4oKiBbZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgIFtmaWx0ZXJfbWFwIEVpdGhlci5maW5kX2xlZnQgKG1hcCBmIHhzKV0uICopXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRWl0aGVyLkxlZnQgeSAtPlxuICAgICAgICAgIENvbnMgKHksIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzKVxuICAgICAgfCBFaXRoZXIuUmlnaHQgXyAtPlxuICAgICAgICAgIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMgKClcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IHogLT5cbiAgICAgICAgICBDb25zICh6LCBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMpXG5cbmxldCBwYXJ0aXRpb25fbWFwIGYgeHMgPVxuICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyxcbiAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzXG5cbmxldCBwYXJ0aXRpb24gcCB4cyA9XG4gIGZpbHRlciBwIHhzLCBmaWx0ZXIgKGZ1biB4IC0+IG5vdCAocCB4KSkgeHNcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW3BlZWwgeHNzXSBpcyBhIHBhaXIgb2ZcbiAgIHRoZSBmaXJzdCBjb2x1bW4gKGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMpIGFuZCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZVxuICAgbWF0cml4IChhIHNlcXVlbmNlIG9mIHNob3J0ZXIgcm93cykuIFRoZXNlIHR3byBzZXF1ZW5jZXMgaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBUaGUgcm93cyBvZiB0aGUgbWF0cml4IFt4c3NdIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBBbiBlbXB0eSByb3cgaXMgaWdub3JlZC4gKilcblxuKCogQmVjYXVzZSBbcGVlbF0gdXNlcyBbdW56aXBdLCBpdHMgYXJndW1lbnQgbXVzdCBiZSBwZXJzaXN0ZW50LiBUaGUgc2FtZVxuICAgcmVtYXJrIGFwcGxpZXMgdG8gW3RyYW5zcG9zZV0sIFtkaWFnb25hbHNdLCBbcHJvZHVjdF0sIGV0Yy4gKilcblxubGV0IHBlZWwgeHNzID1cbiAgdW56aXAgKGZpbHRlcl9tYXAgdW5jb25zIHhzcylcblxubGV0IHJlYyB0cmFuc3Bvc2UgeHNzICgpID1cbiAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgeHNzIGluXG4gIGlmIGlzX2VtcHR5IGhlYWRzIHRoZW4gYmVnaW5cbiAgICBhc3NlcnQgKGlzX2VtcHR5IHRhaWxzKTtcbiAgICBOaWxcbiAgZW5kXG4gIGVsc2VcbiAgICBDb25zIChoZWFkcywgdHJhbnNwb3NlIHRhaWxzKVxuXG4oKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gW2RpYWdvbmFsc10gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsIFtyZW1haW5kZXJzXSxcbiAgIHdoaWNoIGNvbnRhaW5zIHRoZSByZW1haW5kZXJzIG9mIHRoZSByb3dzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAgIGRpc2NvdmVyZWQuICopXG5cbmxldCByZWMgZGlhZ29uYWxzIHJlbWFpbmRlcnMgeHNzICgpID1cbiAgbWF0Y2ggeHNzKCkgd2l0aFxuICB8IENvbnMgKHhzLCB4c3MpIC0+XG4gICAgICBiZWdpbiBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgbm9uZW1wdHkgcm93IFt4IDo6IHhzXS4gVGh1cywgdGhlIG5leHQgZGlhZ29uYWxcbiAgICAgICAgICAgICBpcyBbeCA6OiBoZWFkc106IHRoaXMgZGlhZ29uYWwgYmVnaW5zIHdpdGggW3hdIGFuZCBjb250aW51ZXMgd2l0aFxuICAgICAgICAgICAgIHRoZSBmaXJzdCBlbGVtZW50IG9mIGV2ZXJ5IHJvdyBpbiBbcmVtYWluZGVyc10uIEluIHRoZSByZWN1cnNpdmVcbiAgICAgICAgICAgICBjYWxsLCB0aGUgYXJndW1lbnQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIFt4cyA6OlxuICAgICAgICAgICAgIHRhaWxzXSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3csIFt4c10sXG4gICAgICAgICAgICAgYW5kIHRoYXQgd2Uga2VlcCB0aGUgdGFpbHMgb2YgdGhlIHByZS1leGlzdGluZyByZW1haW5pbmcgcm93cy4gKilcbiAgICAgICAgICBsZXQgaGVhZHMsIHRhaWxzID0gcGVlbCByZW1haW5kZXJzIGluXG4gICAgICAgICAgQ29ucyAoY29ucyB4IGhlYWRzLCBkaWFnb25hbHMgKGNvbnMgeHMgdGFpbHMpIHhzcylcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgZW1wdHkgcm93LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlhZ29uYWwgaXNcbiAgICAgICAgICAgICBqdXN0IFtoZWFkc10sIGFuZCBbcmVtYWluZGVyc10gaXMgaW5zdGFudGlhdGVkIHdpdGgganVzdCBbdGFpbHNdLFxuICAgICAgICAgICAgIGFzIHdlIGRvIG5vdCBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3cuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGhlYWRzLCBkaWFnb25hbHMgdGFpbHMgeHNzKVxuICAgICAgZW5kXG4gIHwgTmlsIC0+XG4gICAgICAoKiBUaGVyZSBhcmUgbm8gbW9yZSByb3dzIHRvIGJlIGRpc2NvdmVyZWQuIFRoZXJlIHJlbWFpbnMgdG8gZXhoYXVzdFxuICAgICAgICAgdGhlIHJlbWFpbmluZyByb3dzLiAqKVxuICAgICAgdHJhbnNwb3NlIHJlbWFpbmRlcnMgKClcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW2RpYWdvbmFscyB4c3NdIGlzXG4gICB0aGUgc2VxdWVuY2Ugb2YgaXRzIGRpYWdvbmFscy5cblxuICAgVGhlIGZpcnN0IGRpYWdvbmFsIGNvbnRhaW5zIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBmaXJzdCByb3cuIFRoZSBzZWNvbmQgZGlhZ29uYWwgY29udGFpbnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBzZWNvbmQgcm93IGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHJvdzsgYW5kIHNvIG9uLlxuICAgVGhpcyBraW5kIG9mIGRpYWdvbmFsIGlzIGluIGZhY3Qgc29tZXRpbWVzIGtub3duIGFzIGFuIGFudGlkaWFnb25hbC5cblxuICAgLSBFdmVyeSBkaWFnb25hbCBpcyBhIGZpbml0ZSBzZXF1ZW5jZS5cbiAgIC0gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaW5pdGUgKGluIGVpdGhlciBkaXJlY3Rpb24pLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIG11c3QgYmUgcGVyc2lzdGVudC4gKilcblxubGV0IGRpYWdvbmFscyB4c3MgPVxuICBkaWFnb25hbHMgZW1wdHkgeHNzXG5cbmxldCBtYXBfcHJvZHVjdCBmIHhzIHlzID1cbiAgY29uY2F0IChkaWFnb25hbHMgKFxuICAgIG1hcCAoZnVuIHggLT5cbiAgICAgIG1hcCAoZnVuIHkgLT5cbiAgICAgICAgZiB4IHlcbiAgICAgICkgeXNcbiAgICApIHhzXG4gICkpXG5cbmxldCBwcm9kdWN0IHhzIHlzID1cbiAgbWFwX3Byb2R1Y3QgKGZ1biB4IHkgLT4gKHgsIHkpKSB4cyB5c1xuXG5sZXQgb2ZfZGlzcGVuc2VyIGl0ID1cbiAgbGV0IHJlYyBjICgpID1cbiAgICBtYXRjaCBpdCgpIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgTmlsXG4gICAgfCBTb21lIHggLT5cbiAgICAgICAgQ29ucyAoeCwgYylcbiAgaW5cbiAgY1xuXG5sZXQgdG9fZGlzcGVuc2VyIHhzID1cbiAgbGV0IHMgPSByZWYgeHMgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggKCFzKSgpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgcyA6PSB4cztcbiAgICAgICAgU29tZSB4XG5cblxuXG5sZXQgcmVjIGludHMgaSAoKSA9XG4gIENvbnMgKGksIGludHMgKGkgKyAxKSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQXRvbWljIiwiQ2FtbGludGVybmFsTGF6eSIsIlN0ZGxpYiIsIlN0ZGxpYl9MYXp5IiwiZW1wdHkiLCJwYXJhbSIsInJldHVybiQiLCJ4IiwiY29ucyIsIm5leHQiLCJhcHBlbmQiLCJzZXExIiwic2VxMiIsIm1hdGNoIiwibWFwIiwic2VxIiwiZmlsdGVyX21hcCIsInkiLCJmaWx0ZXIiLCJjb25jYXQiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsIml0ZXIiLCJ1bmZvbGQiLCJ1IiwiaXNfZW1wdHkiLCJ4cyIsInVuY29ucyIsImxlbmd0aCIsImFjY3UiLCJpdGVyaSIsImkiLCJmb2xkX2xlZnRpIiwiZm9yX2FsbCIsInAiLCJleGlzdHMiLCJmaW5kIiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwicmVzdWx0IiwiZmluZF9tYXBpIiwiaXRlcjIiLCJ5cyIsImZvbGRfbGVmdDIiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJlcXVhbCIsImVxIiwiY29tcGFyZSIsImNtcCIsImMiLCJpbml0X2F1eCIsImoiLCJpbml0IiwibiIsInJlcGVhdCIsImZvcmV2ZXIiLCJjeWNsZV9ub25lbXB0eSIsImN5Y2xlIiwiaXRlcmF0ZTEiLCJpdGVyYXRlIiwibWFwaV9hdXgiLCJtYXBpIiwidGFpbF9zY2FuIiwicyIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJGb3JjZWRfdHdpY2UiLCJ0b19sYXp5IiwiZmFpbHVyZSIsIm1lbW9pemUiLCJvbmNlIiwiYWN0aW9uIiwiemlwIiwibWFwMiIsImludGVybGVhdmUiLCJzb3J0ZWRfbWVyZ2UxIiwic29ydGVkX21lcmdlIiwibWFwX2ZzdCIsInh5cyIsIm1hcF9zbmQiLCJ1bnppcCIsImZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCIsImZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAiLCJ6IiwicGFydGl0aW9uX21hcCIsInBhcnRpdGlvbiIsInBlZWwiLCJ4c3MiLCJ0cmFuc3Bvc2UiLCJ0YWlscyIsImhlYWRzIiwicmVtYWluZGVycyIsIm1hcF9wcm9kdWN0IiwicHJvZHVjdCIsIm9mX2Rpc3BlbnNlciIsIml0IiwidG9fZGlzcGVuc2VyIiwiaW50cyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFB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LFNBQUFOLElBRk07QUFBQSxLQUlOO0FBQUEsSUFBVztBQUFBLElBRWpCO0FBQUEsR0FBQztBQUFBLFlBQUFpRyxhQUFBN0U7QUFBQUEsUUFBQXNDLElBR0Q7QUFBQSxJQUNBLGdCQUFBNUQ7QUFBQUEsU0FBQVEsUUFDUTtBQUFBLEtBQU0sWUFFUjtBQUFBLFNBQUFjLEtBRlEsVUFBQXBCLElBQUE7QUFBQSxLQUlSO0FBQUEsS0FDQSxjQUFNLENBTlo7QUFBQSxHQU1ZO0FBQUEsWUFBQWtHLEtBQUF6RSxHQUFBM0I7QUFBQUEsUUFBQSxJQUtIO0FBQUEsSUFBWSwwQkFBWixvQkFBWTtBQUFBLEdBQUM7QUFBQSxHRDdyQnhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEwMzIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb3B0aW9uLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsInNvbWUiLCJ2IiwidmFsdWUiLCJvIiwiZGVmYXVsdCQiLCJnZXQiLCJwYXJhbSIsImJpbmQiLCJqb2luIiwibWFwIiwiZm9sZCIsIm5vbmUiLCJpdGVyIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0NrQmEsY0FBTTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLElBQ0ksUUFBbUM7QUFBQSxRQUFBSCxJQUFuQztBQUFBLElBQXVCO0FBQUEsR0FBbUI7QUFBQSxZQUFBSSxJQUFBQztBQUFBQSxJQUN2RCxZQUErQiw2Q0FBNEI7QUFBQSxRQUFBTCxJQUEzRDtBQUFBLElBQW1CO0FBQUEsR0FBd0M7QUFBQSxZQUFBTSxLQUFBSixHQUFBVjtBQUFBQSxJQUN0RCxRQUFxQjtBQUFBLFFBQUFRLElBQXJCO0FBQUEsSUFBc0MsdUJBQUc7QUFBQTtBQUFBLFlBQUFPLEtBQUFGLE9BQzdDLFlBQStCLGNBQUFILElBQS9CLFVBQW1CLFNBQWdCO0FBQUEsWUFBQU0sSUFBQWhCLEdBQUFVO0FBQUFBLElBQ2hDLFFBQXFCO0FBQUEsUUFBQUYsSUFBckI7QUFBQSxJQUEyQyw0QkFBSztBQUFBO0FBQUEsWUFBQVMsS0FBQUMsTUFBQVgsTUFBQU07QUFBQUEsSUFDckQsWUFBa0Q7QUFBQSxRQUFBTCxJQUFsRDtBQUFBLElBQWlDLDBCQUFxQjtBQUFBO0FBQUEsWUFBQVcsS0FBQW5CLEdBQUFhO0FBQUFBLElBQ3RELFlBQXFDO0FBQUEsUUFBQUwsSUFBckM7QUFBQSxJQUF1Qix1QkFBZ0I7QUFBQTtBQUFBLFlBQUFZLFFBQUFQLE9BQ2xDLG9CQUF1QztBQUFBLFlBQUFRLFFBQUFSLE9BQ3ZDLG9CQUF1QztBQUFBLFlBQUFTLE1BQUFDLElBQUFDLElBQUFDO0FBQUFBLElBRWhDO0FBQUEsZ0JBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUNDLDZCQUVWO0FBQUE7QUFBQSxrQkFESTtBQUFBLElBQ1Q7QUFBQSxHQUFLO0FBQUEsWUFBQUMsUUFBQUMsS0FBQUwsSUFBQUM7QUFBQUEsSUFFWSwyQkFJTDtBQUFBLFFBQUFFLEtBSks7QUFBQSxhQUlOO0FBQUEsUUFBQUQsS0FKTTtBQUFBLElBQ0YsOEJBR0g7QUFBQTtBQUFBLFlBQUFJLFVBQUFaLE1BQUFMO0FBQUFBLElBRUwsWUFBeUI7QUFBQSxRQUFBTCxJQUF6QjtBQUFBLElBQWdEO0FBQUEsR0FBSTtBQUFBLFlBQUF1QixRQUFBbEI7QUFBQUEsSUFDcEQsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQjtBQUFBLElBQWdDO0FBQUEsR0FBRztBQUFBLFlBQUF3QixPQUFBbkI7QUFBQUEsSUFDcEMsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQixjQUF1QztBQUFBLHVCRDFDcEQsZ0JDMENvRDtBQUFBLEdBQVk7QUFBQSxHRDFDaEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTE0MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jaGFyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfaGFzaCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiU3RkbGliIiwiY2hyIiwibiIsImVzY2FwZWQiLCJjIiwicyIsImxvd2VyY2FzZV9hc2NpaSIsInVwcGVyY2FzZV9hc2NpaSIsImNvbXBhcmUiLCJjMSIsImMyIiwiZXF1YWwiLCJzZWVkZWRfaGFzaCIsInNlZWQiLCJ4IiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLElBQUFDO0FBQUFBLElDcUJFLHVCQUFxRDtBQUFBLElBQTVCLHVDQUF3QztBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0FPckQ7QUFBQSxtQkFFRjtBQUFBLE1BRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1GO0FBQUE7QUFBQSxVQUZBO0FBQUE7QUFBQSxVQURBO0FBQUE7QUFBQSxVQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFMRSxZQUNGO0FBQUE7QUFBQSxTQUFBQyxNQU9FO0FBQUEsS0FDUjtBQUFBLEtBQ0EsZ0NBUWtCO0FBQUE7QUFBQSxRQUFBQSxJQUxWO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQWtCO0FBQUE7QUFBQSxZQUFBQyxnQkFBQUYsR0FFRix5Q0FFWjtBQUFBLFlBQUFHLGdCQUFBSCxHQUVZLHlDQUVaO0FBQUEsWUFBQUksUUFBQUMsSUFBQUMsSUFJVSxtQkFBaUI7QUFBQSxZQUFBQyxNQUFBRixJQUFBQyxJQUNJLG1DQUFJO0FBQUEsWUFBQUUsWUFBQUMsTUFBQUMsR0FJcEIsa0NBQStCO0FBQUEsWUFBQUMsS0FBQUQsR0FDM0MsK0JBQTRCO0FBQUEsR0RoRXpDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEyMTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvdWNoYXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJpIiwib2ZfaW50IiwiaXNfY2hhciIsIm9mX2NoYXIiLCJjIiwidG9fY2hhciIsInVuc2FmZV90b19jaGFyIiwiZXF1YWwiLCJjb21wYXJlIiwiaGFzaCIsInV0Zl9kZWNvZGVfaXNfdmFsaWQiLCJkIiwidXRmX2RlY29kZV9sZW5ndGgiLCJ1dGZfZGVjb2RlX3VjaGFyIiwidXRmX2RlY29kZSIsIm4iLCJ1dGZfZGVjb2RlX2ludmFsaWQiLCJjc3RfdWNoYXJfbWwiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsIlN0ZGxpYl9VY2hhciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBLElDaUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2dCO0FBQUEseUJBQ1g7QUFBQTtBQUFBLFlBQUFDLEtBQUFEO0FBQUFBLElBR0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDZ0I7QUFBQSx5QkFDWDtBQUFBO0FBQUEsWUFBQUUsU0FBQUM7QUFBQUEsUUFBQSxJQUVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQTBEO0FBQUEsWUFBQUMsT0FBQUQ7QUFBQUEsSUFDekQsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE9BeEJFO0FBQUEsZUFBakI7QUFBQSxJQXdCZ0Q7QUFBQTtBQUFBLFlBQUFFLFFBQUFMLEdBSW5ELHVCQUFPO0FBQUEsWUFBQU0sUUFBQUMsR0FDUCxTQUFXO0FBQUEsWUFBQUMsUUFBQVI7QUFBQUEsSUFFekIsYUFDQTtBQUFBO0FBQUE7QUFBQSxPQS9CNEI7QUFBQTtBQUFBLFNBQWtEO0FBQUEsSUE4QmhDLDhCQUM3QjtBQUFBO0FBQUEsWUFBQVMsZUFBQSxHRG5EbkI7QUFBQSxZQUFBQyxNQUFBO0FBQUEsT0FBQUMsVUFBQTtBQUFBLFlBQUFDLEtBQUE7QUFBQSxZQUFBQyxvQkFBQUMsR0N3RXFDLG9DQUFxQjtBQUFBLFlBQUFDLGtCQUFBRCxHQUN2QiwwQkFBOEI7QUFBQSxZQUFBRSxpQkFBQUYsR0FDL0Isb0JBQStCO0FBQUEsWUFBQUcsV0FBQUMsR0FBQWxCLEdBQ25DLHlCQUEwQztBQUFBLFlBQUFtQixtQkFBQUQsR0FDcEMsdUJBQTJCO0FBQUE7QUFBQSxJQUFBRSxlRDVFL0Q7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUFyQjtBQUFBQSxJQytFUyxVQUFTO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixjQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQSxXRHBGbkI7QUFBQSxZQUFBc0IsbUJBQUF0QjtBQUFBQSxJQ3VGUyxVQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUF1QjtBQUFBQSxNRDFGbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTMzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9saXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdCBpIGxhc3QgZiA9XG4gIGlmIGkgPiBsYXN0IHRoZW4gW11cbiAgZWxzZSBpZiBpID0gbGFzdCB0aGVuIFtmIGldXG4gIGVsc2VcbiAgICBsZXQgcjEgPSBmIGkgaW5cbiAgICBsZXQgcjIgPSBmIChpKzEpIGluXG4gICAgcjEgOjogcjIgOjogaW5pdCAoaSsyKSBsYXN0IGZcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGluaXQgMCAobGVuIC0gMSkgZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IFthMV0gLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIGxldCByMiA9IGYgYTIgaW5cbiAgICAgIHIxOjpyMjo6bWFwIGYgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBbYTFdIC0+XG4gICAgICBsZXQgcjEgPSBmIGkgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgaSBhMSBpblxuICAgICAgbGV0IHIyID0gZiAoaSsxKSBhMiBpblxuICAgICAgcjE6OnIyOjptYXBpIChpKzIpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChbYTFdLCBbYjFdKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgW3IxXVxuICB8IChhMTo6YTI6OmwxLCBiMTo6YjI6OmwyKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgbGV0IHIyID0gZiBhMiBiMiBpblxuICAgICAgcjE6OnIyOjptYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IGZpbmRfaW5kZXggcCA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgcCBhIHRoZW4gU29tZSBpIGVsc2UgYXV4IChpKzEpIGwgaW5cbiAgYXV4IDBcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX21hcGkgZiA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gYXV4IChpKzEpIGxcbiAgICAgZW5kIGluXG4gIGF1eCAwXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfYWxsIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggOjogZmluZF9hbGwgcCBsIGVsc2UgZmluZF9hbGwgcCBsXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJpIHAgaSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4OjpsIC0+XG4gICAgICBsZXQgaScgPSBpICsgMSBpblxuICAgICAgaWYgcCBpIHggdGhlbiB4IDo6IGZpbHRlcmkgcCBpJyBsIGVsc2UgZmlsdGVyaSBwIGknIGxcblxubGV0IGZpbHRlcmkgcCBsID0gZmlsdGVyaSBwIDAgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBsXG4gICAgICB8IFNvbWUgdiAtPiB2IDo6IGZpbHRlcl9tYXAgZiBsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbmNhdF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4Ojp4cyAtPiBwcmVwZW5kX2NvbmNhdF9tYXAgKGYgeCkgZiB4c1xuYW5kW0B0YWlsX21vZF9jb25zXSBwcmVwZW5kX2NvbmNhdF9tYXAgeXMgZiB4cyA9XG4gIG1hdGNoIHlzIHdpdGhcbiAgfCBbXSAtPiBjb25jYXRfbWFwIGYgeHNcbiAgfCB5IDo6IHlzIC0+IHkgOjogcHJlcGVuZF9jb25jYXRfbWFwIHlzIGYgeHNcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSB2ZXJ5IGxvbmcgbGlzdCAobGVuZ3RoIG92ZXIgYWJvdXQgMTAwMDAwKSwgaXQgdXNlZCB0byBiZVxuICAgZmFzdGVyIHRvIGNvbnZlcnQgdGhlIGxpc3QgdG8gYW4gYXJyYXksIHNvcnQgdGhlIGFycmF5LCBhbmQgY29udmVydFxuICAgYmFjaywgdHJ1bmNhdGluZyB0aGUgYXJyYXkgb2JqZWN0IGFmdGVyIHByZXBlbmRpbmcgZWFjaCB0aG91c2FuZFxuICAgZW50cmllcyB0byB0aGUgcmVzdWx0aW5nIGxpc3QuIEltcG9zc2libGUgbm93IHRoYXQgT2JqLnRydW5jYXRlIGhhc1xuICAgYmVlbiByZW1vdmVkLiAqKVxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9zZXEgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IFtdXG4gIHwgU2VxLkNvbnMgKHgxLCBzZXEpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFt4MV1cbiAgICAgIHwgU2VxLkNvbnMgKHgyLCBzZXEpIC0+IHgxIDo6IHgyIDo6IG9mX3NlcSBzZXFcbiAgICAgIGVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiU3RkbGliIiwibGVuZ3RoIiwibCIsImxlbiIsInBhcmFtIiwiY29ucyIsImEiLCJoZCIsInRsIiwiY3N0X0xpc3RfbnRoIiwibnRoIiwibiIsIm50aF9vcHQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwibDEiLCJsMiIsInJldiIsImluaXQiLCJsYXN0IiwiaSIsInIxIiwicjIiLCJibG9jayIsImRzdCIsIm9mZnNldCIsImZsYXR0ZW4iLCJyIiwibWFwIiwibWF0Y2giLCJtYXBpIiwicmV2X21hcCIsImFjY3UiLCJpdGVyIiwiaXRlcmkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwibWFwMiIsImNzdF9MaXN0X21hcDIiLCJiMiIsImIxIiwicmV2X21hcDIiLCJpdGVyMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZm9yX2FsbDIiLCJleGlzdHMyIiwibWVtIiwieCIsIm1lbXEiLCJhc3NvYyIsImIiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInBhaXIiLCJyZW1vdmVfYXNzcSIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsInJlc3VsdCIsImZpbmRfbWFwaSIsImZpbmRfYWxsIiwiZmlsdGVyaSIsImZpbHRlcl9tYXAiLCJ2IiwiY29uY2F0X21hcCIsInhzIiwieXMiLCJ5IiwiZm9sZF9sZWZ0X21hcCIsImxfYWNjdSIsInBhcnRpdGlvbiIsInllcyIsIm5vIiwicGFydGl0aW9uX21hcCIsImxlZnQiLCJyaWdodCIsInNwbGl0IiwicnkiLCJyeCIsImNvbWJpbmUiLCJtZXJnZSIsImNtcCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic3RhYmxlX3NvcnQiLCJzb3J0IiwieDIiLCJ4MSIsInMiLCJ4MyIsIm4xIiwibjIiLCJzMSIsInMyIiwicmV2X3NvcnQiLCJzb3J0X3VuaXEiLCJjIiwiY29tcGFyZV9sZW5ndGhzIiwiY29tcGFyZV9sZW5ndGhfd2l0aCIsImlzX2VtcHR5IiwiZXF1YWwiLCJlcSIsImNvbXBhcmUiLCJ0b19zZXEiLCJhdXgiLCJ0YWlsIiwib2Zfc2VxIiwic2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdB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LEtBQWY7QUFBQTtBQUFBO0FBQUEsR0FDc0I7QUFBQSxZQUFBTyxPQUFBaEg7QUFBQUEsYUFBQWlILElBQUFqSCxHQUFBRTtBQUFBQSxLQUtMLFFBQ1Q7QUFBQSxTQUFBZ0gsT0FEUyxNQUFBakUsSUFBQTtBQUFBLEtBRW1CLDBCQUFSLHNCQUFRO0FBQUEsSUFBQztBQUFBLElBRXZDO0FBQUEsR0FBSztBQUFBLFlBQUFrRSxPQUFBQztBQUFBQSxRQUFBekYsUUFHQztBQUFBLElBQU0sWUFDQztBQUFBLFFBQUF5RixRQURELFVBQUFwQixLQUFBLFVBQUFyRSxVQUdJO0FBQUEsSUFBTSxjQUNMO0FBQUE7QUFBQSxLQUFBeUYsUUFESztBQUFBLEtBQUFyQixLQUFBO0FBQUEsS0FBQTFFLFFBRU07QUFBQSxLQUFBQyxNQUFZO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUE2RixRQUFBO0FBQUE7QUFBQSxTQUFBekYsVUFMbEM7QUFBQSxLQUFNO0FBQUE7QUFBQSxPQUFBeUYsUUFBQTtBQUFBLE9BQUFwQixPQUFBO0FBQUEsT0FBQXJFLFVBR0k7QUFBQSxNQUFNO0FBQUEsV0FBQXlGLFFBQUEsWUFBQXJCLE9BQUEsWUFBQXpFLFFBRU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURYO0FBQUE7QUFBQTtBQUFBLE1BSEo7QUFBQSxLQUlxQztBQUFBO0FBQUEsR0FDM0M7QUFBQSxHRHprQlQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMjY3NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaGFzaCIsImFicyIsIngiLCJsb2dub3QiLCJlcXVhbCIsImNvbXBhcmUiLCJtaW4iLCJ5IiwibWF4IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEseUJBQUFDLFlBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQzRCWSwyQkFBd0I7QUFBQSxZQUFBQyxPQUFBRCxHQU1yQixjQUFhO0FBQUEsWUFBQUUsTUFBQSxNRGxDNUI7QUFBQSxPQUFBQyxVQUFBO0FBQUEsWUFBQUMsSUFBQUosR0FBQUssR0N3Q2tCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFOLEdBQUFLLEdBQ3ZCLHFCQUF1QjtBQUFBLFlBQUFFLFVBQUFQLEdBVU47QUFBQSxZQUFBUSxZQUFBQyxNQUFBVCxHQUlWLGtDQUErQjtBQUFBLFlBQUFVLEtBQUFWLEdBQzNDLCtCQUE0QjtBQUFBLEdEeER6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEyNzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J5dGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCB1bnNhZmVfZXNjYXBlIHMgPVxuICAoKiBXZSBwZXJmb3JtIHR3byBwYXNzZXMgb24gdGhlIGlucHV0IHNlcXVlbmNlLCBvbmUgdG8gY29tcHV0ZSB0aGVcbiAgICAgcmVzdWx0IHNpemUgYW5kIG9uZSB0byB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgICMxMTUwOCwgIzExNTA5OiBUaGlzIGxvZ2ljIHdvdWxkIGJlIGluY29ycmVjdCBpbiBwcmVzZW5jZSBvZlxuICAgICBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgaW5wdXQsIG1ha2luZyB0aGUgdXNlIG9mXG4gICAgIFt1bnNhZmVfc2V0XSBiZWxvdyBtZW1vcnktdW5zYWZlLlxuXG4gICAgIFByZWNvbmRpdGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbjpcbiAgICAgLSBhbiBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZVxuICAgICAtIGEgdW5pcXVlbHktb3duZWQgYnl0ZSBzZXF1ZW5jZSAodGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcClcblxuICAgICBJbiBlaXRoZXIgY2FzZSB3ZSByZXR1cm4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlLlxuICAqKVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIHNcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBlc2NhcGVkIGIgPVxuICBsZXQgYiA9IGNvcHkgYiBpblxuICAoKiBXZSBjb3B5IG91ciBpbnB1dCB0byBvYnRhaW4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlIFtiXVxuICAgICB0byBzYXRpc2Z5IFt1bnNhZmVfZXNjYXBlXSdzIHByZWNvbmRpdGlvbiAqKVxuICB1bnNhZmVfZXNjYXBlIGJcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9ieXRlcyIsImNhbWxfYnN3YXAxNiIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfYnl0ZXNfZ2V0MzIiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1VjaGFyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfU3lzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfQ2hhciIsIm1ha2UiLCJuIiwiYyIsInMiLCJpbml0IiwiaSIsImVtcHR5IiwiY29weSIsImxlbiIsInIiLCJ0b19zdHJpbmciLCJiIiwib2Zfc3RyaW5nIiwic3ViIiwib2ZzIiwic3ViX3N0cmluZyIsInN5bWJvbCIsImEiLCJtYXRjaCIsImV4dGVuZCIsImxlZnQiLCJyaWdodCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsImZpbGwiLCJibGl0IiwiczEiLCJvZnMxIiwiczIiLCJvZnMyIiwiYmxpdF9zdHJpbmciLCJpdGVyIiwiaXRlcmkiLCJjb25jYXQiLCJzZXAiLCJsIiwic2VwbGVuIiwiYWNjIiwicGFyYW0iLCJwb3MiLCJoZCIsInRsIiwieCIsImRzdCIsImNhdCIsImwxIiwibDIiLCJpc19zcGFjZSIsInRyaW0iLCJqIiwidW5zYWZlX2VzY2FwZSIsImVzY2FwZWQiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiYXBwbHkxIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpbmRleCIsImluZGV4X3JlY19vcHQiLCJpbmRleF9vcHQiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfcmVjIiwicmluZGV4IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfcmVjX29wdCIsInJpbmRleF9vcHQiLCJyaW5kZXhfZnJvbV9vcHQiLCJjb250YWluc19mcm9tIiwiZXhuIiwiY29udGFpbnMiLCJyY29udGFpbnNfZnJvbSIsImNvbXBhcmUiLCJzcGxpdF9vbl9jaGFyIiwidG9fc2VxIiwiYXV4IiwidG9fc2VxaSIsIm9mX3NlcSIsImJ1ZiIsIm5ld19sZW4iLCJuZXdfYnVmIiwidW5zYWZlX2dldF91aW50MTZfbGUiLCJ1bnNhZmVfZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9sZSIsImdldF91aW50MTZfYmUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50NjRfbGUiLCJnZXRfaW50NjRfYmUiLCJ1bnNhZmVfc2V0X3VpbnQxNl9sZSIsInVuc2FmZV9zZXRfdWludDE2X2JlIiwic2V0X2ludDE2X2xlIiwic2V0X2ludDE2X2JlIiwic2V0X2ludDMyX2xlIiwic2V0X2ludDMyX2JlIiwic2V0X2ludDY0X2xlIiwic2V0X2ludDY0X2JlIiwiZGVjX2ludmFsaWQiLCJkZWNfcmV0IiwidSIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiZ2V0X3V0Zl84X3VjaGFyIiwibWF4IiwiY3N0X2J5dGVzX21sIiwic2V0X3V0Zl84X3VjaGFyIiwic2V0IiwibGFzdCIsImlzX3ZhbGlkX3V0Zl84IiwiY3N0X2luZGV4X291dF9vZl9ib3VuZHMiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJoaSIsImxvIiwic2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJzZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsIlN0ZGxpYl9CeXRlcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEs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cCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RyaW5nLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBiID0gYm9zIHMgaW5cbiAgKCogV2Ugc2F0aXNmeSBbdW5zYWZlX2VzY2FwZV0ncyBwcmVjb25kaXRpb24gYnkgcGFzc2luZyBhblxuICAgICBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZSBbYl0uICopXG4gIGJ0cyAoQi51bnNhZmVfZXNjYXBlIGIpXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2ggOiBpbnQgLT4gc3RyaW5nIC0+IGludCA9IFwiY2FtbF9zdHJpbmdfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2ggMCB4XG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfaGFzaCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiYnRzIiwiYm9zIiwibWFrZSIsIm4iLCJjIiwiaW5pdCIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJzdWIiLCJzIiwib2ZzIiwibGVuIiwiYmxpdCIsImNzdCIsImNvbmNhdCIsInNlcCIsImwiLCJzZXBsZW4iLCJhY2MiLCJwYXJhbSIsInBvcyIsImhkIiwidGwiLCJ4IiwiZHN0IiwiY2F0IiwiaXRlciIsImkiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJmb2xkX3JpZ2h0IiwiYSIsImZvbGRfbGVmdCIsImV4aXN0cyIsImZvcl9hbGwiLCJpc19zcGFjZSIsInRyaW0iLCJlc2NhcGVkIiwiYiIsImluZGV4X3JlYyIsImxpbSIsImluZGV4IiwiaW5kZXhfcmVjX29wdCIsImluZGV4X29wdCIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9yZWMiLCJyaW5kZXgiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9yZWNfb3B0IiwicmluZGV4X29wdCIsInJpbmRleF9mcm9tX29wdCIsImNvbnRhaW5zX2Zyb20iLCJleG4iLCJjb250YWlucyIsInJjb250YWluc19mcm9tIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJoYXNoIiwic3BsaXRfb25fY2hhciIsImoiLCJyIiwiY29tcGFyZSIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X2xlIiwiZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQzMl9iZSIsImdldF9pbnQ2NF9sZSIsImdldF9pbnQ2NF9iZSIsIlN0ZGxpYl9TdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQyxHQ21DRSxPQUFVLElBQVYsaUNBQWlCO0FBQUEsWUFBQUMsS0FBQUYsR0FBQVYsR0FFakIsT0FBVSxJQUFWLGlDQUFpQjtBQUFBLE9BQUFhLFdEckNuQixpQkFBQUMs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O0FBQUFBLFFBQUEsSUFDQztBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUEyRCxjQUFBN0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE0RCxhQUFBOUUsR0FBQWtCO0FBQUFBLFFBQUEsSUFDWDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE2RCxhQUFBL0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE4RCxhQUFBaEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUErRCxhQUFBakYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFnRSxhQUFBbEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFpRSxhQUFBbkYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFrRSxhQUFBcEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBO0FBQUEsSUFBQW1FO0FBQUFBLE1EblIvQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE0MzY5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2FycmF5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBtdXN0IG5vdCBldmFsdWF0ZSBbZiAwXSB3aGVuIFtsIDw9IDBdLlxuICAgICBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkubWFrZV9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICAgIGRvbmU7XG4gIGVuZDtcbiAgcmVzXG5cbmxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdF9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gICgqIFdlIG11c3Qgbm90IGV2YWx1YXRlIFtmIHggMF0gd2hlbiBbc3kgPD0gMF06ICopXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgKGYgeCAwKSBpblxuICAgICAgZm9yIHkgPSAxIHRvIHByZWQgc3kgZG9cbiAgICAgICAgdW5zYWZlX3NldCByb3cgeSAoZiB4IHkpXG4gICAgICBkb25lO1xuICAgICAgdW5zYWZlX3NldCByZXMgeCByb3dcbiAgICBkb25lO1xuICBlbmQ7XG4gIHJlc1xuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gIGRvbmVcblxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICBkb25lXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX2luZGV4IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gU29tZSBpXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcGkgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiBpICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbmxldCBzaHVmZmxlIH5yYW5kIGEgPSAoKiBGaXNoZXItWWF0ZXMgKilcbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICBsZXQgaiA9IHJhbmQgKGkgKyAxKSBpblxuICAgIGxldCB2ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgdW5zYWZlX3NldCBhIGogdlxuICBkb25lXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9hcnJheV9zdWIiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiaW5pdCIsImwiLCJyZXMiLCJpIiwibWFrZV9tYXRyaXgiLCJzeCIsInN5IiwieCIsImluaXRfbWF0cml4Iiwicm93IiwieSIsImNvcHkiLCJhIiwiYXBwZW5kIiwiYTIiLCJsMSIsInN1YiIsIm9mcyIsImxlbiIsImZpbGwiLCJ2IiwiYmxpdCIsIm9mczEiLCJvZnMyIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcGlfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwidG9fbGlzdCIsImxpc3RfbGVuZ3RoIiwiYWNjdSIsInBhcmFtIiwidCIsIm9mX2xpc3QiLCJ0bCIsImhkIiwiZm9sZF9sZWZ0IiwiZm9sZF9sZWZ0X21hcCIsImFjYyIsImlucHV0X2FycmF5IiwibWF0Y2giLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJmb2xkX3JpZ2h0IiwiZXhpc3RzIiwicCIsIm4iLCJmb3JfYWxsIiwiZm9yX2FsbDIiLCJsMiIsIm4xIiwibjIiLCJleGlzdHMyIiwibWVtIiwibWVtcSIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwic3BsaXQiLCJiMCIsImJpIiwiYWkiLCJjb21iaW5lIiwibmEiLCJuYiIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdCIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwiU3RkbGliX0FycmF5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBVDtBQUFBQSxJQytDRSxZQUFjO0FBQUEsSUFDZCxVQUFjLHlDQVNWO0FBQUEsUUFBQVUsTUFKTyxrQkFBUyx1QkFDbkI7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLE1BQ21CO0FBQUEsY0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFeEI7QUFBQSxHQUFHO0FBQUEsWUFBQUMsWUFBQUMsSUFBQUMsSUFBQU47QUFBQUEsSUFJSixXQUFlO0FBQUEsUUFBQUUsTUFDTDtBQUFBLElBQ1Y7QUFBQSxhQUFlO0FBQUE7QUFBQSxVQUFBSyxJQUFBO0FBQUE7QUFBQSxPQUVNO0FBQUEsZUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsSUFBQXlHO0FBQUFBLE1EcGVmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTUxMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmxvYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgT2plZGEgQmFyLCBMZXhpRmkgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIG5lZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgYWRkIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCBzdWIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsIG11bCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgZGl2IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCByZW0gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZtYSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2ZtYV9mbG9hdFwiIFwiY2FtbF9mbWFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5cbmxldCB6ZXJvID0gMC5cbmxldCBvbmUgPSAxLlxubGV0IG1pbnVzX29uZSA9IC0xLlxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBxdWlldF9uYW4gPSBuYW5cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgc2lnbmFsaW5nX25hbiA9IGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBpc19maW5pdGUgKHg6IGZsb2F0KSA9IHggLS4geCA9IDAuXG5sZXQgaXNfaW5maW5pdGUgKHg6IGZsb2F0KSA9IDEuIC8uIHggPSAwLlxubGV0IGlzX25hbiAoeDogZmxvYXQpID0geCA8PiB4XG5cbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgbWF4X2Zsb2F0ID0gU3RkbGliLm1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IFN0ZGxpYi5taW5fZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmdfb3B0ID0gU3RkbGliLmZsb2F0X29mX3N0cmluZ19vcHRcbmxldCB0b19zdHJpbmcgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0XG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcG93IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjYnJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2JydF9mbG9hdFwiIFwiY2FtbF9jYnJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cDIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHAyX2Zsb2F0XCIgXCJjYW1sX2V4cDJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzJfZmxvYXRcIiBcImNhbWxfbG9nMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmX2Zsb2F0XCIgXCJjYW1sX2VyZlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmZjIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmY19mbG9hdFwiIFwiY2FtbF9lcmZjXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRydW5jIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdHJ1bmNfZmxvYXRcIiBcImNhbWxfdHJ1bmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcm91bmQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9yb3VuZF9mbG9hdFwiIFwiY2FtbF9yb3VuZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG5bQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgaXNfaW50ZWdlciB4ID0geCA9IHRydW5jIHggJiYgaXNfZmluaXRlIHhcblxuZXh0ZXJuYWwgbmV4dF9hZnRlciA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gID0gXCJjYW1sX25leHRhZnRlcl9mbG9hdFwiIFwiY2FtbF9uZXh0YWZ0ZXJcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgc3VjYyB4ID0gbmV4dF9hZnRlciB4IGluZmluaXR5XG5sZXQgcHJlZCB4ID0gbmV4dF9hZnRlciB4IG5lZ19pbmZpbml0eVxuXG5leHRlcm5hbCBjb3B5X3NpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpZ25fYml0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGJvb2xcbiAgPSBcImNhbWxfc2lnbmJpdF9mbG9hdFwiIFwiY2FtbF9zaWduYml0XCIgW0BAbm9hbGxvY11cblxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbnR5cGUgdCA9IGZsb2F0XG5leHRlcm5hbCBjb21wYXJlIDogZmxvYXQgLT4gZmxvYXQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgZXF1YWwgeCB5ID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldFtAaW5saW5lXSBtaW4gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB8fCBpc19uYW4geSB0aGVuIChuYW4sIG5hbilcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgsIHkpIGVsc2UgKHksIHgpXG5cbmxldFtAaW5saW5lXSBtaW5fbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB0aGVuICh5LHkpXG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiAoeCx4KVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCx5KSBlbHNlICh5LHgpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IGZsb2F0YXJyYXlcblxuICBleHRlcm5hbCBsZW5ndGggOiB0IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcblxuICBsZXQgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGZvciBpID0gb2ZzIHRvIG9mcyArIGxlbiAtIDEgZG8gdW5zYWZlX3NldCBhIGkgdiBkb25lXG5cbiAgZXh0ZXJuYWwgdW5zYWZlX2JsaXQ6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0ID1cbiAgICBcImNhbWxfZmxvYXRhcnJheV9ibGl0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBtYWtlX21hdHJpeCBzeCBzeSB2ID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1ha2VfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgcmVzIHggKG1ha2Ugc3kgdilcbiAgICAgIGRvbmU7XG4gICAgZW5kO1xuICAgIHJlc1xuXG4gIGxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgaW5cbiAgICAgICAgZm9yIHkgPSAwIHRvIHN5IC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgcm93IHkgKGYgeCB5KVxuICAgICAgICBkb25lO1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHJlcyB4IHJvd1xuICAgICAgZG9uZTtcbiAgICBlbmQ7XG4gICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtYXBfaW5wbGFjZSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZVxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWFwaV9pbnBsYWNlIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZmluZF9vcHQgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfaW5kZXggcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIFNvbWUgaVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfbWFwIGYgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmaW5kX21hcGkgZiBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGYgaSAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgc2h1ZmZsZSB+cmFuZCBhID0gKCogRmlzaGVyLVlhdGVzICopXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBqID0gcmFuZCAoaSArIDEpIGluXG4gICAgICBsZXQgdiA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB1bnNhZmVfc2V0IGEgaiB2XG4gICAgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwiaXNfZmluaXRlIiwieCIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm9mX3N0cmluZ19vcHQiLCJ0b19zdHJpbmciLCJpc19pbnRlZ2VyIiwic3VjYyIsInByZWQiLCJlcXVhbCIsInkiLCJtaW4iLCJtYXgiLCJtaW5fbWF4IiwibWluX251bSIsIm1heF9udW0iLCJtaW5fbWF4X251bSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJ1bnNhZmVfZmlsbCIsImEiLCJvZnMiLCJsZW4iLCJ2IiwiaSIsImNoZWNrIiwibXNnIiwibWFrZSIsIm4iLCJyZXN1bHQiLCJpbml0IiwibCIsInJlcyIsIm1ha2VfbWF0cml4Iiwic3giLCJzeSIsImluaXRfbWF0cml4Iiwicm93IiwiYXBwZW5kIiwiYTIiLCJsMSIsImwyIiwiY3N0X2Zsb2F0X21sIiwiY29uY2F0IiwiYWNjIiwicGFyYW0iLCJ0bCIsImhkIiwiaGxlbiIsInN1YiIsImNvcHkiLCJmaWxsIiwiYmxpdCIsInNyYyIsInNvZnMiLCJkc3QiLCJkb2ZzIiwiY3N0X0Zsb2F0X2FycmF5X2JsaXQiLCJ0b19saXN0Iiwib2ZfbGlzdCIsInQiLCJoIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwibWFwaV9pbnBsYWNlIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwibWVtIiwibWVtX2llZWUiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsImZpbmRfbWFwaSIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJTdGRsaWJfRmxvYXQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7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QUFBQTtBQUFBLFNBQUExQyxJQUFBO0FBQUE7QUFBQSxNQUNpQjtBQUFBLGNBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUUzQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFnRztBQUFBQSxNQXJrQnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkRyQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDcUM0RDtBQUFBO0FBQUEsRURyQzVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTU5OTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaW50MzIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50MzJdOiAzMi1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50MzIgLT4gaW50ID0gXCIlaW50MzJfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX3RvX2Zsb2F0XCIgXCJjYW1sX2ludDMyX3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDMyXG4gID0gXCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQzMiAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCB6ZXJvID0gMGxcbmxldCBvbmUgPSAxbFxubGV0IG1pbnVzX29uZSA9IC0xbFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFsXG5sZXQgcHJlZCBuID0gc3ViIG4gMWxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMGwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMGxcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRmxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMWwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBtYXRjaCBTeXMud29yZF9zaXplIHdpdGhcbiAgfCAzMiAtPlxuICAgICAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgICAgIGZ1biBuIC0+XG4gICAgICAgIGlmIG4gPj0gMGwgJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBpbnQzMlxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IHggPSB5XG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgdW5zaWduZWRfbHQgbiBtID1cbiAgc3ViIG4gbWluX2ludCA8IHN1YiBtIG1pbl9pbnRcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lIGJpdG5lc3MuXG4gICBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfbHQgbiBkIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9sdCByIGQgdGhlbiBxIGVsc2Ugc3VjYyBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2giLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tdWwiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfU3lzIiwiQXNzZXJ0X2ZhaWx1cmUiLCJzdWNjIiwibiIsInByZWQiLCJhYnMiLCJsb2dub3QiLCJtYXRjaCIsIm1heF9pbnQiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmciLCJvZl9zdHJpbmdfb3B0IiwicyIsImV4biIsImVxdWFsIiwidW5zaWduZWRfY29tcGFyZSIsIm0iLCJ5IiwieCIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsInVuc2lnbmVkX2RpdiIsImQiLCJxIiwiciIsInVuc2lnbmVkX3JlbSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJTdGRsaWJfSW50MzIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDK0NxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBLFlBQUFHLE9BQUFILEdBR1g7QUFBQSxPQUFBSSxRRHBEN0I7QUFBQTtBQUFBO0FBQUEsS0FBQUMsVUN5RG9CO0FBQUEsS0FBQUM7QUFBQUEsT0FDZCxTQUFBTjtBQUFBQSxRQUNLLDhCQUFXO0FBQUEsU0FDWjtBQUFBLFFBRUE7QUFBQSxPQUFJO0FBQUE7QUFBQSxJRDlEZDtBQUFBLEtDb0VNO0FBQUE7QUFBQSxRQUFBTSxrQkFGQSxTQUFBTixHQUFTLG1CQUF5QjtBQUFBO0FBQUEsWUFBQU8sVUFBQVAsR0FLdEIsdUNBQWE7QUFBQSxZQUFBUSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQ1RVg7QUFBQSw4QkM2RW9CO0FBQUEsS0Q3RXBCO0FBQUE7QUFBQSxHQzZFd0I7QUFBQSxPQUFBQyxRRDdFeEI7QUFBQSxZQUFBQyxpQkFBQVosR0FBQWE7QUFBQUEsUUFBQUMsSUNxRjBCLG9CQUFBQyxJQUFoQjtBQUFBLElBSmtCLDZCQUlhO0FBQUE7QUFBQSxZQUFBQyxZQUFBaEIsR0FBQWE7QUFBQUEsSUFHdkMsNERBQTZCO0FBQUE7QUFBQSxZQUFBSSxJQUFBRixHQUFBRCxHQUVWLG1DQUFvQjtBQUFBLFlBQUFJLElBQUFILEdBQUFELEdBQ3BCLHNDQUFvQjtBQUFBLE9BQUFLLE9EM0Z6QyxHQUFBQyxNQUFBO0FBQUEsWUFBQUMsYUFBQXJCLEdBQUFzQjtBQUFBQSxJQ2lHSyx3QkFDRSxxQ0FJa0M7QUFBQSxRQUFBQyxJQUZsQix1Q0FBQUMsSUFDTDtBQUFBLElBQ1gsd0NBQWtDO0FBQUE7QUFBQSxZQUFBQyxhQUFBekIsR0FBQXNCO0FBQUFBLElBRzVCLFdBQUwsU0FBSywwQkFBcUI7QUFBQTtBQUFBLFlBQUFJLFlBQUFDLE1BQUFaLEdBSVQsa0NBQStCO0FBQUEsWUFBQWEsS0FBQWIsR0FDM0MsK0JBQTRCO0FBQUE7QUFBQSxJQUFBYztBQUFBQSxNRDlHekMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjA5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQ2NC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQ2NF06IDY0LWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQ2NCAtPiBpbnQgPSBcIiVpbnQ2NF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQ2NFxuICA9IFwiY2FtbF9pbnQ2NF9vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfdG9fZmxvYXRcIiBcImNhbWxfaW50NjRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMiA6IGludDMyIC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzIgOiBpbnQ2NCAtPiBpbnQzMiA9IFwiJWludDY0X3RvX2ludDMyXCJcbmV4dGVybmFsIG9mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX25hdGl2ZWludFwiXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBpbnQ2NCAtPiBuYXRpdmVpbnQgPSBcIiVpbnQ2NF90b19uYXRpdmVpbnRcIlxuXG5sZXQgemVybyA9IDBMXG5sZXQgb25lID0gMUxcbmxldCBtaW51c19vbmUgPSAtMUxcbmxldCBzdWNjIG4gPSBhZGQgbiAxTFxubGV0IHByZWQgbiA9IHN1YiBuIDFMXG5sZXQgYWJzIG4gPSBpZiBuID49IDBMIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgbWluX2ludCA9IDB4ODAwMDAwMDAwMDAwMDAwMExcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRkZGRkZGRkZGTFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xTClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgbiA+PSAwTCAmJiBuIDw9IG1heF9pbnQgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0geCA9IHlcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCB1bnNpZ25lZF9sdCBuIG0gPVxuICBzdWIgbiBtaW5faW50IDwgc3ViIG0gbWluX2ludFxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWUgYml0bmVzcy5cbiAgIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9sdCBuIGQgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2x0IHIgZCB0aGVuIHEgZWxzZSBzdWNjIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfc3ViIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJtaW5faW50IiwibWF4X2ludCIsIlN0ZGxpYiIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiY29tcGFyZSIsIngiLCJ5IiwiZXF1YWwiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDNkNhLDJCQUFRO0FBQUEsWUFBQUMsS0FBQUQsR0FDUiwyQkFBUTtBQUFBLFlBQUFFLElBQUFGO0FBQUFBLElBQ04scUNBQW9CLHlCQUFLO0FBQUE7QUFBQSxZQUFBRyxPQUFBSCxHQUd6QixtQ0FBYztBQUFBO0FBQUEsSUFBQUgsWUFHYjtBQUFBLFFBQ2Q7QUFBQSxZQUFBTyxnQkFBQUo7QUFBQUEsSUFDSyw4QkFBVztBQUFBLEtBQ1o7QUFBQSxJQUVBO0FBQUEsR0FBSTtBQUFBLFlBQUFLLFVBQUFMLEdBR1EseUNBQWE7QUFBQSxZQUFBTSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTURsRVg7QUFBQSw4QkNtRW9CO0FBQUEsS0RuRXBCO0FBQUE7QUFBQSxHQ21Fd0I7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQyxHQVdJLCtCQUFrQjtBQUFBLE9BQUFDLFFBeEI1QztBQUFBLFlBQUFDLGlCQUFBYixHQUFBYztBQUFBQSxRQUFBSCxJQTRCd0IsNEJBQUFELElBQWhCO0FBQUEsSUFKa0IsK0JBSWE7QUFBQTtBQUFBLFlBQUFLLFlBQUFmLEdBQUFjO0FBQUFBLElBR3ZDO0FBQUEseUNBQWdCLDJCQUFhO0FBQUE7QUFBQSxZQUFBRSxJQUFBTixHQUFBQyxHQUVWLG1DQUFvQjtBQUFBLFlBQUFNLElBQUFQLEdBQUFDLEdBQ3BCLHNDQUFvQjtBQUFBLFlBQUFPLGFBQUFsQixHQUFBbUI7QUFBQUEsSUFNcEMsMkJBQ0UscUNBSWtDO0FBQUE7QUFBQSxLQUFBQztBQUFBQSxPQUY3QjtBQUFBLFNBQVc7QUFBQSxXQUFLO0FBQUE7QUFBQSxLQUFBQyxJQUNoQixrQkFBTTtBQUFBLElBQ1gsK0JBdERNLG9CQXNENEI7QUFBQTtBQUFBLFlBQUFDLGFBQUF0QixHQUFBbUI7QUFBQUEsSUFHNUIsT0FBWCxrQkFBTSxlQUFLLHVCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWQsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZSxLQUFBZixHQUMzQywrQkFBNEI7QUFBQSxHQXJEdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEdERGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTYxOTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIG4gPj0gMG4gJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IHVuc2lnbmVkX2x0IG4gbSA9XG4gIHN1YiBuIG1pbl9pbnQgPCBzdWIgbSBtaW5faW50XG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZSBiaXRuZXNzLlxuICAgU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2x0IG4gZCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfbHQgciBkIHRoZW4gcSBlbHNlIHN1Y2MgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9oYXNoIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1N5cyIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsInNpemUiLCJtaW5faW50IiwibWF4X2ludCIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiZXF1YWwiLCJ4IiwieSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfbHQiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDMkNxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBO0FBQUEsSUFBQUcsT0Q3Q3hDO0FBQUEsSUFBQUMsVUMrQ2M7QUFBQSxJQUFBQyxVQUNBO0FBQUEsWUFBQUMsT0FBQU4sR0FDZTtBQUFBLE9BQUFLLFlBR2I7QUFBQSxZQUFBRSxnQkFBQVA7QUFBQUEsSUFFVCw4QkFBVyw4QkFDWjtBQUFBLElBRUE7QUFBQSxHQUFJO0FBQUEsWUFBQVEsVUFBQVIsR0FHUSx1Q0FBYTtBQUFBLFlBQUFTLGNBQUFDO0FBQUFBLElBSzdCLFlBQVM7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRGpFWDtBQUFBLDhCQ2tFb0I7QUFBQSxLRGxFcEI7QUFBQTtBQUFBLEdDa0V3QjtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdBSUksMkNBQ1MsQ0FBSTtBQUFBLFlBQUFDLGlCQUFBZixHQUFBZ0I7QUFBQUEsUUFBQUYsSUFHZixpQkFBQUQsSUFBaEI7QUFBQSxJQUprQiw2QkFJYTtBQUFBO0FBQUEsWUFBQUksWUFBQWpCLEdBQUFnQjtBQUFBQSxJQUd2QyxzREFBNkI7QUFBQTtBQUFBLFlBQUFFLElBQUFMLEdBQUFDLEdBRVYsbUNBQW9CO0FBQUEsWUFBQUssSUFBQU4sR0FBQUMsR0FDcEIsc0NBQW9CO0FBQUEsT0FBQU0sT0RoRnpDLEdBQUFDLE1BQUE7QUFBQSxZQUFBQyxhQUFBdEIsR0FBQXVCO0FBQUFBLElDc0ZLLHdCQUNFLHFDQUlrQztBQUFBLFFBQUFDLElBRmxCLHVDQUFBQyxJQUNMO0FBQUEsSUFDWCx3Q0FBa0M7QUFBQTtBQUFBLFlBQUFDLGFBQUExQixHQUFBdUI7QUFBQUEsSUFHNUIsV0FBTCxTQUFLLDBCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWYsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZ0IsS0FBQWhCLEdBQzNDLCtCQUE0QjtBQUFBLEdBOUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJERiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE2MjkwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3NldC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCB0b19saXN0IDogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCB0cnlfY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gdHJ5X2pvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIHYnIHdpdGhcbiAgICAgICAgICAgfCBTb21lIHYnIC0+XG4gICAgICAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnlfY29uY2F0IGwnIHInXG4gICAgICAgICBlbmRcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IHRvX2xpc3QgPSBlbGVtZW50c1xuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliX1NldCIsIk9yZCIsImhlaWdodCIsInBhcmFtIiwiaCIsImNyZWF0ZSIsImwiLCJ2IiwiciIsImhsIiwiaHIiLCJiYWwiLCJjc3RfU2V0X2JhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImFkZCIsIngiLCJ0IiwiYyIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsIm1pbl9lbHRfb3B0IiwibWF4X2VsdCIsIm1heF9lbHRfb3B0IiwicmVtb3ZlX21pbl9lbHQiLCJjb25jYXQiLCJ0MSIsInQyIiwic3BsaXQiLCJtYXRjaCIsInByZXMiLCJpc19lbXB0eSIsIm1lbSIsInJlbW92ZSIsInVuaW9uIiwiczEiLCJzMiIsImgyIiwicjIiLCJ2MiIsImwyIiwiaDEiLCJyMSIsInYxIiwibDEiLCJpbnRlciIsInNwbGl0X2JpcyIsImRpc2pvaW50IiwiZGlmZiIsImNvbnNfZW51bSIsInMiLCJlIiwiY29tcGFyZSIsImUyIiwiZTEiLCJlcXVhbCIsInN1YnNldCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZmlsdGVyIiwicHYiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kIiwiZmluZF9maXJzdCIsInYwIiwiZmluZF9maXJzdF9vcHQiLCJmaW5kX2xhc3QiLCJmaW5kX2xhc3Rfb3B0IiwiZmluZF9vcHQiLCJ0cnlfam9pbiIsIm1hcCIsImZpbHRlcl9tYXAiLCJlbXB0eSIsIm9mX2xpc3QiLCJ4MCIsIngxIiwieDIiLCJ4MyIsInN1YiIsIm4iLCJubCIsImxlZnQiLCJtaWQiLCJyaWdodCIsIng0IiwiYWRkX3NlcSIsImkiLCJtIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidG9fc2VxIiwic25vY19lbnVtIiwicmV2X3NlcV9vZl9lbnVtIiwidG9fcmV2X3NlcSIsInRvX3NlcV9mcm9tIiwibG93Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxnQkFBQUM7QUFBQUEsaUJBQUFDLE9BQUFDO0FBQUFBLFNDZ0ZpQixZQUNBO0FBQUEsYUFBQUMsSUFEQTtBQUFBLFNBRUc7QUFBQSxRQUFDO0FBQUEsaUJBQUFDLE9BQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFNBUWYsVUFBQUosSUFBQSxNQUFBSyxLQUErQyxZQUFBQSxLQUFoQjtBQUFBLFNBQy9CLFVBQUFMLE1BQUEs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QUYsR0FFekIsd0JBQWU7QUFBQSxpQkFBQUcsWUFBQXZGLEdBQUF6QjtBQUFBQSxTQUVGLFFBQ2pCO0FBQUEsYUFBQWlILE9BRGlCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBL0IsMkJBQStCO0FBQUEsUUFBQztBQUFBLGlCQUFBMkYsT0FBQXpGO0FBQUFBLGFBQUEsSUFFMUM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUEwRixVQUFBckQsS0FBQUM7QUFBQUEsYUFBQUQsSUFHM0MsS0FBQUMsSUFBQTtBQUFBO0FBQUEsa0JBQ1c7QUFBQSxjQUFBMUQsSUFEWCxNQUFBRCxJQUFBLE1BQUFELElBQUEsTUFBQTRELE1BRW1CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBMkI7QUFBQSxpQkFBQXFELGdCQUFBM0YsR0FBQXpCO0FBQUFBLFNBRWhCLFFBQ3JCO0FBQUEsYUFBQWlILE9BRHFCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBOEYsV0FBQTVGO0FBQUFBLGFBQUEsSUFFdEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUE2RixZQUFBQyxLQUFBekQ7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZdEMsR0FBQXJDLElBQUE7QUFBQTtBQUFBLFdBVFM7QUFBQTtBQUFBLFlBQUFwQixJQUFBO0FBQUEsWUFBQUQsSUFBQTtBQUFBLFlBQUFELElBQUE7QUFBQSxZQUFBbUcsSUFHSjtBQUFBLFdBQWlCO0FBQUEsV0FFbEIsZUFBQTdFLE1BQ0Ysc0NBREU7QUFBQTtBQUFBLGtCQURGO0FBQUE7QUFBQSxTQUthO0FBQUE7QUFBQSxRRDdtQmxDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTcwNTEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbWFwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBhZGQ6IGtleSAtPiAnYSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkX3RvX2xpc3Q6IGtleSAtPiAnYSAtPiAnYSBsaXN0IHQgLT4gJ2EgbGlzdCB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAoa2V5IC0+ICdhIG9wdGlvbiAtPiAnYiBvcHRpb24gLT4gJ2Mgb3B0aW9uKSAtPlxuICAgICAgJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBtYXA6ICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIG1hcGk6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChrZXkgLT4gJ2EgLT4gJ2Igb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgcGFydGl0aW9uOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHRcbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGlzX2VtcHR5OiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIHRvX2xpc3QgOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAgIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBrZXkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG5cbiAgICB0eXBlIGtleSA9IE9yZC50XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIG9mIHtsOidhIHQ7IHY6a2V5OyBkOidhOyByOidhIHQ7IGg6aW50fVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgbGV0IGNyZWF0ZSBsIHggZCByID1cbiAgICAgIGxldCBobCA9IGhlaWdodCBsIGFuZCBociA9IGhlaWdodCByIGluXG4gICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IHNpbmdsZXRvbiB4IGQgPSBOb2Rle2w9RW1wdHk7IHY9eDsgZDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgbGV0IGJhbCBsIHggZCByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiBsZCAoY3JlYXRlIGxyIHggZCByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgZD1scmQ7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBsZCBscmwpIGxydiBscmQgKGNyZWF0ZSBscnIgeCBkIHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmwpIHJ2IHJkIHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyBkPXJsZDsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybGwpIHJsdiBybGQgKGNyZWF0ZSBybHIgcnYgcmQgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgYWRkIHggZGF0YSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGRhdGEgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCBkYXRhIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGRcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIGRcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfSAtPiBtaW5fYmluZGluZyBsXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0tPiBtaW5fYmluZGluZ19vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmcgclxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nX29wdCByXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiYWwgKHJlbW92ZV9taW5fYmluZGluZyBsKSB2IGQgclxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBiYWwgdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCAoTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpbiBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyB1cGRhdGUgeCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmIE5vbmUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBFbXB0eVxuICAgICAgICAgIHwgU29tZSBkYXRhIC0+IE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgICAgICBlbmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBiZWdpblxuICAgICAgICAgICAgbWF0Y2ggZiAoU29tZSBkKSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gbWVyZ2UgbCByXG4gICAgICAgICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVuZCBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHVwZGF0ZSB4IGYgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSB1cGRhdGUgeCBmIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgYWRkX3RvX2xpc3QgeCBkYXRhIG0gPVxuICAgICAgbGV0IGFkZCA9IGZ1bmN0aW9uIE5vbmUgLT4gU29tZSBbZGF0YV0gfCBTb21lIGwgLT4gU29tZSAoZGF0YSA6OiBsKSBpblxuICAgICAgdXBkYXRlIHggYWRkIG1cblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpdGVyIGYgbDsgZiB2IGQ7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBtYXBpIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwaSBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcGkgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBmb2xkIGYgbSBhY2N1ID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgZm9sZCBmIHIgKGYgdiBkIChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkIHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCBrIGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGtleXMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkga2V5LlxuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fYmluZGluZyBrIHggbCkgdiBkIHJcblxuICAgIGxldCByZWMgYWRkX21heF9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiBkIChhZGRfbWF4X2JpbmRpbmcgayB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiBkIHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2JpbmRpbmcgdiBkIHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2JpbmRpbmcgdiBkIGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scjsgaD1saH0sXG4gICAgICAgICBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IGxkIChqb2luIGxyIHYgZCByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IGQgcmwpIHJ2IHJkIHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IGQgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGpvaW4gdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgY29uY2F0X29yX2pvaW4gdDEgdiBkIHQyID1cbiAgICAgIG1hdGNoIGQgd2l0aFxuICAgICAgfCBTb21lIGQgLT4gam9pbiB0MSB2IGQgdDJcbiAgICAgIHwgTm9uZSAtPiBjb25jYXQgdDEgdDJcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBOb25lLCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIFNvbWUgZCwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiBkIHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBkIGxyLCBwcmVzLCBycilcblxuICAgIGxldCByZWMgbWVyZ2UgZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSwgXykgd2hlbiBoMSA+PSBoZWlnaHQgczIgLT5cbiAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjEgKGYgdjEgKFNvbWUgZDEpIGQyKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgKF8sIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjJ9KSAtPlxuICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MiAoZiB2MiBkMSAoU29tZSBkMikpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcmVjIHVuaW9uIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgfCAoRW1wdHksIHMpIHwgKHMsIEVtcHR5KSAtPiBzXG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSxcbiAgICAgICAgIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDIgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MSBkMSByXG4gICAgICAgICAgICB8IFNvbWUgZDIgLT4gY29uY2F0X29yX2pvaW4gbCB2MSAoZiB2MSBkMSBkMikgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDEgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MiBkMiByXG4gICAgICAgICAgICB8IFNvbWUgZDEgLT4gY29uY2F0X29yX2pvaW4gbCB2MiAoZiB2MiBkMSBkMikgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHZkIHRoZW4gaWYgbD09bCcgJiYgcj09cicgdGhlbiBtIGVsc2Ugam9pbiBsJyB2IGQgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW2ZdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZnZkID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgIGJlZ2luIG1hdGNoIGZ2ZCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZCcgLT4gam9pbiBsJyB2IGQnIHInXG4gICAgICAgICAgICB8IE5vbmUgLT4gY29uY2F0IGwnIHInXG4gICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IHRvX2xpc3QgPSBiaW5kaW5nc1xuICAgIGxldCBvZl9saXN0IGJzID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBtIChrLCB2KSAtPiBhZGQgayB2IG0pIGVtcHR5IGJzXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9NYXAiLCJPcmQiLCJoZWlnaHQiLCJwYXJhbSIsImgiLCJjcmVhdGUiLCJsIiwieCIsImQiLCJyIiwiaGwiLCJociIsInNpbmdsZXRvbiIsImJhbCIsImNzdF9NYXBfYmFsIiwibHIiLCJsZCIsImx2IiwibGwiLCJscnIiLCJscmQiLCJscnYiLCJscmwiLCJyciIsInJkIiwicnYiLCJybCIsInJsciIsInJsZCIsInJsdiIsInJsbCIsImlzX2VtcHR5IiwiYWRkIiwiZGF0YSIsIm0iLCJ2IiwiYyIsImZpbmQiLCJmaW5kX2ZpcnN0IiwiZDAiLCJ2MCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJtaW5fYmluZGluZ19vcHQiLCJtYXhfYmluZGluZyIsIm1heF9iaW5kaW5nX29wdCIsInJlbW92ZV9taW5fYmluZGluZyIsInQxIiwidDIiLCJtYXRjaCIsInJlbW92ZSIsInVwZGF0ZSIsImFkZF90b19saXN0IiwiaXRlciIsIm1hcCIsIm1hcGkiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiYWRkX21pbl9iaW5kaW5nIiwiayIsImFkZF9tYXhfYmluZGluZyIsImpvaW4iLCJyaCIsImxoIiwiY29uY2F0IiwiY29uY2F0X29yX2pvaW4iLCJzcGxpdCIsInByZXMiLCJtZXJnZSIsInMxIiwiczIiLCJoMSIsInIxIiwiZDEiLCJ2MSIsImwxIiwicjIiLCJkMiIsImwyIiwidjIiLCJ1bmlvbiIsImgyIiwicyIsImZpbHRlciIsInB2ZCIsImZpbHRlcl9tYXAiLCJmdmQiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNvbnNfZW51bSIsImUiLCJjb21wYXJlIiwiY21wIiwibTEiLCJtMiIsImUyIiwiZTEiLCJlcXVhbCIsImNhcmRpbmFsIiwiYmluZGluZ3NfYXV4IiwiYmluZGluZ3MiLCJlbXB0eSIsIm9mX2xpc3QiLCJicyIsImFkZF9zZXEiLCJpIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidCIsInRvX3NlcSIsInNub2NfZW51bSIsInJldl9zZXFfb2ZfZW51bSIsInRvX3Jldl9zZXEiLCJ0b19zZXFfZnJvbSIsImxvdyIsIm4iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FB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QSxjQUUyQjtBQUFBLFNBQWtCLGtDQUEvQiwyQkFBK0I7QUFBQSxRQUFDO0FBQUEsaUJBQUFzRCxPQUFBdEY7QUFBQUEsYUFBQSxJQUczRDtBQUFBLFNBQWlCO0FBQUE7QUFBQSxpQkFBQXVGLFVBQUFoQyxLQUFBVztBQUFBQSxhQUFBWCxJQUc5QixLQUFBVyxJQUFBO0FBQUE7QUFBQSxrQkFDVztBQUFBLGNBQUEzRixJQURYLE1BQUFELElBQUEsTUFBQTJCLElBQUEsTUFBQTdCLElBQUEsTUFBQThGLE1BRXNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBOEI7QUFBQSxpQkFBQXNCLGdCQUFBdEYsR0FBQWpDO0FBQUFBLFNBRXRCLFFBQ3JCO0FBQUE7QUFBQSxVQUFBbUgsT0FEcUI7QUFBQSxVQUFBQyxJQUFBO0FBQUEsVUFBQXBGLElBQUE7QUFBQSxVQUFBK0IsSUFBQTtBQUFBLGNBR1E7QUFBQSxTQUFrQixrQ0FBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBeUQsV0FBQXZGO0FBQUFBLGFBQUEsSUFHeEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUF3RixZQUFBQyxLQUFBM0Y7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZckIsR0FBQUUsSUFBQTtBQUFBO0FBQUEsV0FUUztBQUFBO0FBQUEsWUFBQTNCLElBQUE7QUFBQSxZQUFBRCxJQUFBO0FBQUEsWUFBQTJCLElBQUE7QUFBQSxZQUFBN0IsSUFBQTtBQUFBLFlBQUF3SCxJQUdKO0FBQUEsV0FBaUI7QUFBQSxXQUVsQjtBQUFBLGdCQUFBMUYsTUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERTtBQUFBO0FBQUEsa0JBREY7QUFBQTtBQUFBLFNBS2E7QUFBQTtBQUFBLFFEamlCbEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNzkwMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zdGFjay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgZHJvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBfaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxXG4gIHwgW10gLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJFbXB0eSIsImNyZWF0ZSIsInBhcmFtIiwiY2xlYXIiLCJzIiwiY29weSIsInB1c2giLCJ4IiwicG9wIiwibWF0Y2giLCJ0bCIsImhkIiwicG9wX29wdCIsImRyb3AiLCJ0b3AiLCJ0b3Bfb3B0IiwiaXNfZW1wdHkiLCJsZW5ndGgiLCJpdGVyIiwiZiIsImZvbGQiLCJhY2MiLCJ0b19zZXEiLCJhZGRfc2VxIiwicSIsImkiLCJvZl9zZXEiLCJnIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFDLE9BQUFDLE9DbUJnQixpQkFBb0I7QUFBQSxZQUFBQyxNQUFBQyxHQUV0QixVQUFXLG1CQUFVO0FBQUEsWUFBQUMsS0FBQUQsR0FFdEIsdUJBQXlCO0FBQUEsWUFBQUUsS0FBQUMsR0FBQUgsR0FFdkIscUJBQWlCLDhCQUFrQjtBQUFBLFlBQUFJLElBQUFKO0FBQUFBLFFBQUFLLFFBR2hEO0FBQUEsZ0JBRVk7QUFBQSxRQUFBQyxLQUZaLFVBQUFDLEtBQUE7QUFBQSxJQUNZO0FBQUEsSUFBVztBQUFBLElBQW9CO0FBQUEsR0FDcEI7QUFBQSxZQUFBQyxRQUFBUjtBQUFBQSxRQUFBSyxRQUd2QjtBQUFBLGdCQUVZO0FBQUEsUUFBQUMsS0FGWixVQUFBQyxLQUFBO0FBQUEsSUFDWTtBQUFBLElBQVc7QUFBQSxJQUFvQjtBQUFBLEdBQzNCO0FBQUEsWUFBQUUsS0FBQVQ7QUFBQUEsUUFBQUssUUFHaEI7QUFBQSxnQkFFUTtBQUFBLFFBQUFDLEtBRlI7QUFBQSxJQUNhO0FBQUEsSUFBVztBQUFBO0FBQUEsR0FDTDtBQUFBLFlBQUFJLElBQUFWO0FBQUFBLFFBQUFLLFFBR25CO0FBQUEsZ0JBRVc7QUFBQSxRQUFBRSxLQUZYO0FBQUEsSUFDVztBQUFBLEdBQ1c7QUFBQSxZQUFBSSxRQUFBWDtBQUFBQSxRQUFBSyxRQUd0QjtBQUFBLGdCQUVXO0FBQUEsUUFBQUUsS0FGWDtBQUFBLElBQ1c7QUFBQSxHQUNJO0FBQUEsWUFBQUssU0FBQVosR0FFQSwwQkFBVTtBQUFBLFlBQUFhLE9BQUFiLEdBRVosWUFBSztBQUFBLFlBQUFjLEtBQUFDLEdBQUFmLEdBRUwsMENBQWU7QUFBQSxZQUFBZ0IsS0FBQUQsR0FBQUUsS0FBQWpCLEdBRVgsK0NBQXdCO0FBQUEsWUFBQWtCLE9BQUFsQixHQUk1Qix1Q0FBZTtBQUFBLFlBQUFtQixRQUFBQyxHQUFBQztBQUFBQSxJQUVaLHlDQUFBbEIsR0FBbUIsaUJBQVEsTUFBRztBQUFBO0FBQUEsWUFBQW1CLE9BQUFDLE9BQUF2QixJQUd0QyxXQUNSLGVBQVcsU0FDVjtBQUFBLEdEckVIIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTc5ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcXVldWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJTdGRsaWJfU2VxIiwiRW1wdHkiLCJjcmVhdGUiLCJwYXJhbSIsImNsZWFyIiwicSIsImFkZCIsIngiLCJjZWxsIiwibWF0Y2giLCJwZWVrIiwiY29udGVudCIsInBlZWtfb3B0IiwidGFrZSIsIm5leHQiLCJ0YWtlX29wdCIsImNvcHkiLCJxX3JlcyIsInByZXYiLCJpc19lbXB0eSIsImxlbmd0aCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSIsImF1eCIsImMiLCJhZGRfc2VxIiwiaSIsIm9mX3NlcSIsImciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxZQUFBQyxPQUFBQyxPQzRCZ0Isb0JBSWY7QUFBQSxZQUFBQyxNQUFBQyxHQUdDLFVBQ0EsVUFDQSxtQkFBYTtBQUFBLFlBQUFDLElBQUFDLEdBQUFGO0FBQUFBLFFBQUFHLE9BR2IsV0FBQUMsUUFJQTtBQUFBO0FBQUE7QUFBQSxxREFRZ0I7QUFBQTtBQUFBLFlBQUFDLEtBQUFMO0FBQUFBLFFBQUFJLFFBTWhCO0FBQUEsZ0JBQ1M7QUFBQSxRQUFBRSxVQURUO0FBQUEsSUFFc0I7QUFBQSxHQUFPO0FBQUEsWUFBQUMsU0FBQVA7QUFBQUEsUUFBQUksUUFHN0I7QUFBQSxnQkFDUztBQUFBLFFBQUFFLFVBRFQ7QUFBQSxJQUVzQjtBQUFBLEdBQVk7QUFBQSxZQUFBRSxLQUFBUjtBQUFBQSxRQUFBSSxRQU1sQztBQUFBLGdCQUNTO0FBQUEsUUFBQUUsVUFEVDtBQUFBO0FBQUEsU0FBQUcsT0FBQTtBQUFBLEtBTUU7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFMQTtBQUFBLElBQU87QUFBQSxHQUtBO0FBQUEsWUFBQUMsU0FBQVY7QUFBQUEsUUFBQUksUUFHVDtBQUFBLGdCQUNTO0FBQUEsUUFBQUUsVUFEVDtBQUFBO0FBQUEsU0FBQUcsT0FBQTtBQUFBLEtBTUU7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFMQTtBQUFBLElBQU87QUFBQSxHQUtLO0FBQUEsWUFBQUUsS0FBQVg7QUFBQUEsUUFBQUcsU0FpQkwsTUFBQVMsUUFBQSxpQkFBQUMsT0FBQSxHQUFBVixPQUFBO0FBQUE7QUFBQSxLQVZQLFdBQ1MsaUJBQW9CO0FBQUEsU0FBQUcsVUFEN0IsU0FBQUcsT0FBQSxTQUFBSSxTQUdFO0FBQUEsS0FDQTtBQUFBLE1BRVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQURILG1CQUdUO0FBQUE7QUFBQSxHQUVvRTtBQUFBLFlBQUFDLFNBQUFkLEdBR3hFLDBCQUFZO0FBQUEsWUFBQWUsT0FBQWYsR0FHWixZQUFRO0FBQUEsWUFBQWdCLEtBQUF6QixHQUFBUztBQUFBQSxRQUFBRyxTQVVHLE1BQUFBLE9BQUE7QUFBQTtBQUFBLEtBTlQsV0FDUztBQUFBLFNBQUFHLFVBRFQsU0FBQUcsT0FBQTtBQUFBLEtBR0U7QUFBQSxLQUFTO0FBQUE7QUFBQSxHQUdZO0FBQUEsWUFBQVEsS0FBQTFCLEdBQUEyQixRQUFBbEI7QUFBQUEsUUFBQUcsU0FVVCxNQUFBZSxPQUFBLFFBQUFmLE9BQUE7QUFBQTtBQUFBLEtBTmQsV0FDUztBQUFBO0FBQUEsTUFBQUcsVUFEVDtBQUFBLE1BQUFHLE9BQUE7QUFBQSxNQUFBUyxTQUdhO0FBQUEsS0FDWDtBQUFBO0FBQUE7QUFBQSxHQUUrQjtBQUFBLFlBQUFDLFNBQUFDLElBQUFDO0FBQUFBLFFBQUEsSUFHbkM7QUFBQTtBQUFBLFFBQUFqQixRQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FVRTtBQUFBLDREQUxBLFVBS1E7QUFBQTtBQUFBLFlBQUFrQixPQUFBdEI7QUFBQUEsYUFBQXVCLElBQUFDLEdBQUExQjtBQUFBQSxLQUtPLFFBQ1I7QUFBQSxTQUFBSSxJQURRLE1BQUFPLE9BQUE7QUFBQSxLQUVtQywwQkFBUixzQkFBUTtBQUFBLElBQUM7QUFBQSxZQUV2RDtBQUFBLHVCRDVKRixrQkM0SkU7QUFBQSxHQUFXO0FBQUEsWUFBQWdCLFFBQUF6QixHQUFBMEI7QUFBQUEsSUFFSyx5Q0FBQXhCLEdBQW1CLGdCQUFRLE1BQUc7QUFBQTtBQUFBLFlBQUF5QixPQUFBQyxPQUFBNUIsSUFHdEMsV0FDUixlQUFXLFNBQ1Y7QUFBQSxHQTlCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEcklGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTgxNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvYnVmZmVyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxuKCogVGhlIFtpbm5lcl9idWZmZXJdIHR5cGUgZW5zdXJlcyB0aGF0IHRoZSBbbGVuZ3RoXSBhbmQgW2J1ZmZlcl0gZmllbGRzIGFyZVxuICAgYWx3YXlzIHN5bmNocm9uaXplZCwgW2xlbmd0aCA9IEJ5dGVzLmxlbmd0aCBidWZmZXJdLCBldmVuIGluIHByZXNlbmNlXG4gICBvZiBkYXRhIHJhY2VzLlxuKilcbnR5cGUgaW5uZXJfYnVmZmVyID0ge1xuICBidWZmZXI6IGJ5dGVzO1xuICBsZW5ndGg6IGludDtcbn1cblxudHlwZSB0ID1cbiB7bXV0YWJsZSBpbm5lciA6IGlubmVyX2J1ZmZlcjtcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbaW5uZXIubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGlubmVyLmJ1ZmZlcl1cbiAgIEluIGFic2VuY2Ugb2YgZGF0YSByYWNlcywgd2UgYWxzbyBoYXZlXG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5pbm5lci5sZW5ndGhdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5pbm5lci5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4geyBpbm5lciA9IHsgYnVmZmVyID0gczsgbGVuZ3RoID0gbn07IHBvc2l0aW9uID0gMDsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmlubmVyLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMuYmxpdCBzcmMuaW5uZXIuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IHBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGVuZ3RoIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBidWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgbGV0IGlubmVyID1cbiAgICB7IGJ1ZmZlciA9IGIuaW5pdGlhbF9idWZmZXI7IGxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmluaXRpYWxfYnVmZmVyIH1cbiAgaW5cbiAgYi5pbm5lciA8LSBpbm5lclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmlubmVyLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5pbm5lcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmlubmVyLmxlbmd0aF0uXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmlubmVyLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5pbm5lci5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5pbm5lciA8LSB7IGJ1ZmZlciA9IG5ld19idWZmZXI7IGxlbmd0aCA9ICFuZXdfbGVuIH1cblxuKCogTm90ZTpcbiAgICBTb21lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgaGF2ZSBhIGZhc3QgcGF0aCB3aGVuIHRoZSBpbm5lclxuICBidWZmZXIgZG9lc24ndCBuZWVkIHRvIGJlIGV4dGVuZGVkLlxuICAgIEluIHRoaXMgY2FzZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHVuc2FmZSBhY2Nlc3NlcyBvbiB0aGVcbiAgY29udGVudHMgb2YgdGhlIFtpbm5lcl0gZmllbGQgc2luY2UgaXRzIGZpZWxkcyBhcmUgaW1tdXRhYmxlLlxuICBJbiBwcmVzZW5jZSBvZiBkYXRhIHJhY2VzLCB3ZSBtYXkgYWNjZXNzIHRoZSB3cm9uZyBpbm5lciBidWZmZXIsIGJ1dCB3ZVxuICB3aWxsIHVzZSB0aGlzIGJ1ZmZlciBzYWZlbHkuXG4gIEFzIHNvb24gYXMgd2UgbmVlZCB0byByZXNpemUgdGhlIGJ1ZmZlciwgd2UgZmFsbCBiYWNrIHRvIHNhZmUgYWNjZXNzZXMuXG4qKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtidWZmZXI7bGVuZ3RofSA9IGIuaW5uZXIgaW5cbiAgaWYgcG9zID49IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAxO1xuICAgIEJ5dGVzLnNldCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGNcbiAgKSBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX3NldCBidWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIuaW5uZXIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgbGVuO1xuICAgIEJ5dGVzLmJsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuXG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBidWZmZXIgcG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyOyBsZW5ndGh9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIGxlbjtcbiAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYnVmZmVyIHBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmlubmVyLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0IGluXG4gICAgIGlmIHN0b3AgPSBzdGFydCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggZmluZF9pZGVudCBzIGogbGltIHdpdGhcbiAgICAgICAgIHwgaWRlbnQsIG5leHRfaSAtPlxuICAgICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgYWRkX2NoYXIgYiAnJCc7XG4gICAgICAgICAgIHN1YnN0ICcgJyBqXG4gICAgICAgICBlbmRcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzO1xuICAgICAgICAgaWYgY3VycmVudCA8PiAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5cbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBwb3NpdGlvbiA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtsZW5ndGg7IGJ1ZmZlcn0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIDE7XG4gICAgc2V0X2ludDggYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50OCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAyO1xuICAgIHNldF9pbnQxNiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQxNiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA0O1xuICAgIHNldF9pbnQzMiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQzMiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA4O1xuICAgIHNldF9pbnQ2NCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQ2NCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9zdHJpbmciLCJjYW1sX2Jzd2FwMTYiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc19zZXQxNiIsImNhbWxfYnl0ZXNfc2V0MzIiLCJjYW1sX2J5dGVzX3NldDY0IiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ludDMyX2Jzd2FwIiwiY2FtbF9pbnQ2NF9ic3dhcCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfU2VxIiwiU3RkbGliIiwiU3RkbGliX1N0cmluZyIsIkFzc2VydF9mYWlsdXJlIiwiZHVtbXkiLCJjcmVhdGUiLCJuIiwicyIsImNvbnRlbnRzIiwiYiIsInRvX2J5dGVzIiwic3ViIiwib2ZzIiwibGVuIiwiYmxpdCIsInNyYyIsInNyY29mZiIsImRzdCIsImRzdG9mZiIsIm50aCIsInBvc2l0aW9uIiwibWF0Y2giLCJsZW5ndGgiLCJidWZmZXIiLCJjbGVhciIsInJlc2V0IiwiaW5uZXIiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYyIsInBvcyIsImFkZF91dGZfOF91Y2hhciIsInUiLCJ1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXgiLCJ1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4IiwiYWRkX3V0Zl8xNmJlX3VjaGFyIiwiYWRkX3V0Zl8xNmxlX3VjaGFyIiwiYWRkX3N1YnN0cmluZyIsIm9mZnNldCIsIm5ld19wb3NpdGlvbiIsImFkZF9zdWJieXRlcyIsImFkZF9zdHJpbmciLCJhZGRfYnl0ZXMiLCJhZGRfYnVmZmVyIiwiYnMiLCJhZGRfY2hhbm5lbCIsImljIiwidG9fcmVhZCIsImJ1ZiIsImFscmVhZHlfcmVhZCIsInIiLCJvdXRwdXRfYnVmZmVyIiwib2MiLCJhZGRfc3Vic3RpdHV0ZSIsImxpbSIsInByZXZpb3VzIiwiaSIsInN0YXJ0Iiwib3BlbmluZyIsInN0b3AiLCJ2YWwiLCJuZXdfc3RhcnQiLCJjbG9zaW5nIiwiayIsImV4biIsIm5leHRfaSIsImlkZW50IiwidHJ1bmNhdGUiLCJ0b19zZXEiLCJhdXgiLCJwYXJhbSIsIngiLCJ0b19zZXFpIiwiYWRkX3NlcSIsInNlcSIsIm9mX3NlcSIsImFkZF9pbnQ4IiwiYWRkX2ludDE2X25lIiwiYWRkX2ludDMyX25lIiwiYWRkX2ludDY0X25lIiwiYWRkX2ludDE2X2xlIiwiYWRkX2ludDE2X2JlIiwiYWRkX2ludDMyX2xlIiwiYWRkX2ludDMyX2JlIiwiYWRkX2ludDY0X2xlIiwiYWRkX2ludDY0X2JlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMs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LHFCQUE4QztBQUFBLElBQTlDLDJCQUF1RDtBQUFBO0FBQUEsWUFBQVcsYUFBQTlFLEdBQUFtRTtBQUFBQSxRQUFBLElBR3ZELGlCQUF1QztBQUFBLElBQXZDLHlCQUF1RDtBQUFBO0FBQUEsWUFBQVksYUFBQS9FLEdBQUFtRTtBQUFBQSxRQUFBQSxNQUd2RCxxQkFBOEM7QUFBQSxJQUE5QywyQkFBdUQ7QUFBQTtBQUFBLFlBQUFhLGFBQUFoRixHQUFBbUU7QUFBQUEsUUFBQSxJQUd2RCxpQkFBdUM7QUFBQSxJQUF2Qyx5QkFBdUQ7QUFBQTtBQUFBLFlBQUFjLGFBQUFqRixHQUFBbUU7QUFBQUEsUUFBQUEsTUFHdkQscUJBQThDO0FBQUEsSUFBOUMsMkJBQXVEO0FBQUE7QUFBQSxHRDVZekQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODYzMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9tdXRleC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIFBhc2NhbCBDdW9xLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTUgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0XG5leHRlcm5hbCBjcmVhdGU6IHVuaXQgLT4gdCA9IFwiY2FtbF9tbF9tdXRleF9uZXdcIlxuZXh0ZXJuYWwgbG9jazogdCAtPiB1bml0ID0gXCJjYW1sX21sX211dGV4X2xvY2tcIlxuZXh0ZXJuYWwgdHJ5X2xvY2s6IHQgLT4gYm9vbCA9IFwiY2FtbF9tbF9tdXRleF90cnlfbG9ja1wiXG5leHRlcm5hbCB1bmxvY2s6IHQgLT4gdW5pdCA9IFwiY2FtbF9tbF9tdXRleF91bmxvY2tcIlxuXG4oKiBwcml2YXRlIHJlLWV4cG9ydCAqKVxuZXh0ZXJuYWwgcmVyYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJlcmFpc2VcIlxuXG4oKiBjYW5ub3QgaW5saW5lLCBvdGhlcndpc2UgZmxhbWJkYSBtaWdodCBtb3ZlIGNvZGUgYXJvdW5kLiAqKVxubGV0W0BpbmxpbmUgbmV2ZXJdIHByb3RlY3QgbSBmID1cbiAgbG9jayBtO1xuICBtYXRjaCBmKCkgd2l0aFxuICB8IHggLT5cbiAgICB1bmxvY2sgbTsgeFxuICB8IGV4Y2VwdGlvbiBlIC0+XG4gICAgKCogTk9URTogW3VubG9ja10gZG9lcyBub3QgcG9sbCBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMgKilcbiAgICB1bmxvY2sgbTtcbiAgICByZXJhaXNlIGVcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9tdXRleF9sb2NrIiwiY2FtbF9tbF9tdXRleF91bmxvY2siLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsInByb3RlY3QiLCJtIiwieCIsImUiLCJTdGRsaWJfTXV0ZXgiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUMsR0FBQUg7QUFBQUEsSUMwQkU7QUFBQSxJQUFNLFFBQUFJLElBQ0E7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxJRDNCUjtBQUFBLEtDZ0NJO0FBQUEsS0FBUTtBQUFBO0FBQUEsSUFIUjtBQUFBLElBQVE7QUFBQSxHQUlDO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRGpDYiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE4NjczLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfQ29uZGl0aW9uIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODY5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9kb21haW4ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgIEtDIFNpdmFyYW1ha3Jpc2huYW4sIEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgU3RlcGhlbiBEb2xhbiwgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICBUb20gS2VsbHksIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE5IEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgTHRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSBSYXcgPSBzdHJ1Y3RcbiAgKCogTG93LWxldmVsIHByaW1pdGl2ZXMgcHJvdmlkZWQgYnkgdGhlIHJ1bnRpbWUgKilcbiAgdHlwZSB0ID0gcHJpdmF0ZSBpbnRcblxuICAoKiBUaGUgbGF5b3V0cyBvZiBbc3RhdGVdIGFuZCBbdGVybV9zeW5jXSBhcmUgaGFyZC1jb2RlZCBpblxuICAgICBbcnVudGltZS9kb21haW4uY10gKilcblxuICB0eXBlICdhIHN0YXRlID1cbiAgICB8IFJ1bm5pbmdcbiAgICB8IEZpbmlzaGVkIG9mICgnYSwgZXhuKSByZXN1bHQgW0B3YXJuaW5nIFwiLXVudXNlZC1jb25zdHJ1Y3RvclwiXVxuXG4gIHR5cGUgJ2EgdGVybV9zeW5jID0ge1xuICAgICgqIHByb3RlY3RlZCBieSBbbXV0XSAqKVxuICAgIG11dGFibGUgc3RhdGUgOiAnYSBzdGF0ZSBbQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdIDtcbiAgICBtdXQgOiBNdXRleC50IDtcbiAgICBjb25kIDogQ29uZGl0aW9uLnQgO1xuICB9XG5cbiAgZXh0ZXJuYWwgc3Bhd24gOiAodW5pdCAtPiAnYSkgLT4gJ2EgdGVybV9zeW5jIC0+IHRcbiAgICA9IFwiY2FtbF9kb21haW5fc3Bhd25cIlxuICBleHRlcm5hbCBzZWxmIDogdW5pdCAtPiB0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2lkXCIgW0BAbm9hbGxvY11cbiAgZXh0ZXJuYWwgY3B1X3JlbGF4IDogdW5pdCAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2NwdV9yZWxheFwiXG4gIGV4dGVybmFsIGdldF9yZWNvbW1lbmRlZF9kb21haW5fY291bnQ6IHVuaXQgLT4gaW50XG4gICAgPSBcImNhbWxfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XCIgW0BAbm9hbGxvY11cbmVuZFxuXG5sZXQgY3B1X3JlbGF4ICgpID0gUmF3LmNwdV9yZWxheCAoKVxuXG50eXBlIGlkID0gUmF3LnRcblxudHlwZSAnYSB0ID0ge1xuICBkb21haW4gOiBSYXcudDtcbiAgdGVybV9zeW5jIDogJ2EgUmF3LnRlcm1fc3luYztcbn1cblxubW9kdWxlIERMUyA9IHN0cnVjdFxuXG4gIG1vZHVsZSBPYmpfb3B0IDogc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIG5vbmUgOiB0XG4gICAgdmFsIHNvbWUgOiAnYSAtPiB0XG4gICAgdmFsIGlzX3NvbWUgOiB0IC0+IGJvb2xcblxuICAgICgqKiBbdW5zYWZlX2dldCBvYmpdIG1heSBvbmx5IGJlIGNhbGxlZCBzYWZlbHlcbiAgICAgICAgaWYgW2lzX3NvbWVdIGlzIHRydWUuXG5cbiAgICAgICAgW3Vuc2FmZV9nZXQgKHNvbWUgdildIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgW09iai5vYmogKE9iai5yZXByIHYpXS4gKilcbiAgICB2YWwgdW5zYWZlX2dldCA6IHQgLT4gJ2FcbiAgZW5kID0gc3RydWN0XG4gICAgdHlwZSB0ID0gT2JqLnRcbiAgICBsZXQgbm9uZSA9IE9iai5yZXByIChyZWYgMClcbiAgICBsZXQgc29tZSB2ID0gT2JqLnJlcHIgdlxuICAgIGxldCBpc19zb21lIG9iaiA9IChvYmogIT0gbm9uZSlcbiAgICBsZXQgdW5zYWZlX2dldCBvYmogPSBPYmoub2JqIG9ialxuICBlbmRcblxuICB0eXBlIGRsc19zdGF0ZSA9IE9ial9vcHQudCBhcnJheVxuXG4gIGV4dGVybmFsIGdldF9kbHNfc3RhdGUgOiB1bml0IC0+IGRsc19zdGF0ZSA9IFwiJWRsc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldF9kbHNfc3RhdGUgOiBkbHNfc3RhdGUgLT4gdW5pdCA9XG4gICAgXCJjYW1sX2RvbWFpbl9kbHNfc2V0XCIgW0BAbm9hbGxvY11cblxuICBleHRlcm5hbCBjb21wYXJlX2FuZF9zZXRfZGxzX3N0YXRlIDogZGxzX3N0YXRlIC0+IGRsc19zdGF0ZSAtPiBib29sID1cbiAgICBcImNhbWxfZG9tYWluX2Rsc19jb21wYXJlX2FuZF9zZXRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGVfZGxzICgpID1cbiAgICBsZXQgc3QgPSBBcnJheS5tYWtlIDggT2JqX29wdC5ub25lIGluXG4gICAgc2V0X2Rsc19zdGF0ZSBzdFxuXG4gIGxldCBfID0gY3JlYXRlX2RscyAoKVxuXG4gIHR5cGUgJ2Ega2V5ID0gaW50ICogKHVuaXQgLT4gJ2EpXG5cbiAgbGV0IGtleV9jb3VudGVyID0gQXRvbWljLm1ha2UgMFxuXG4gIHR5cGUga2V5X2luaXRpYWxpemVyID1cbiAgICBLSTogJ2Ega2V5ICogKCdhIC0+ICdhKSAtPiBrZXlfaW5pdGlhbGl6ZXJcblxuICBsZXQgcGFyZW50X2tleXMgPSBBdG9taWMubWFrZSAoW10gOiBrZXlfaW5pdGlhbGl6ZXIgbGlzdClcblxuICBsZXQgcmVjIGFkZF9wYXJlbnRfa2V5IGtpID1cbiAgICBsZXQgbCA9IEF0b21pYy5nZXQgcGFyZW50X2tleXMgaW5cbiAgICBpZiBub3QgKEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcGFyZW50X2tleXMgbCAoa2kgOjogbCkpXG4gICAgdGhlbiBhZGRfcGFyZW50X2tleSBraVxuXG4gIGxldCBuZXdfa2V5ID9zcGxpdF9mcm9tX3BhcmVudCBpbml0X29ycGhhbiA9XG4gICAgbGV0IGlkeCA9IEF0b21pYy5mZXRjaF9hbmRfYWRkIGtleV9jb3VudGVyIDEgaW5cbiAgICBsZXQgayA9IChpZHgsIGluaXRfb3JwaGFuKSBpblxuICAgIGJlZ2luIG1hdGNoIHNwbGl0X2Zyb21fcGFyZW50IHdpdGhcbiAgICB8IE5vbmUgLT4gKClcbiAgICB8IFNvbWUgc3BsaXQgLT4gYWRkX3BhcmVudF9rZXkgKEtJKGssIHNwbGl0KSlcbiAgICBlbmQ7XG4gICAga1xuXG4gICgqIElmIG5lY2Vzc2FyeSwgZ3JvdyB0aGUgY3VycmVudCBkb21haW4ncyBsb2NhbCBzdGF0ZSBhcnJheSBzdWNoIHRoYXQgW2lkeF1cbiAgICogaXMgYSB2YWxpZCBpbmRleCBpbiB0aGUgYXJyYXkuICopXG4gIGxldCByZWMgbWF5YmVfZ3JvdyBpZHggPVxuICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICBsZXQgc3ogPSBBcnJheS5sZW5ndGggc3QgaW5cbiAgICBpZiBpZHggPCBzeiB0aGVuIHN0XG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBjb21wdXRlX25ld19zaXplIHMgPVxuICAgICAgICBpZiBpZHggPCBzIHRoZW4gcyBlbHNlIGNvbXB1dGVfbmV3X3NpemUgKDIgKiBzKVxuICAgICAgaW5cbiAgICAgIGxldCBuZXdfc3ogPSBjb21wdXRlX25ld19zaXplIHN6IGluXG4gICAgICBsZXQgbmV3X3N0ID0gQXJyYXkubWFrZSBuZXdfc3ogT2JqX29wdC5ub25lIGluXG4gICAgICBBcnJheS5ibGl0IHN0IDAgbmV3X3N0IDAgc3o7XG4gICAgICAoKiBXZSB3YW50IGEgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBzYWZlIHdpdGggcmVzcGVjdCB0b1xuICAgICAgICAgc2luZ2xlLWRvbWFpbiBtdWx0aS10aHJlYWRpbmc6IHJldHJ5IGlmIHRoZSBETFMgc3RhdGUgaGFzXG4gICAgICAgICBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LlxuICAgICAgICAgTm90ZSB0aGF0IHRoZSBudW1iZXIgb2YgcmV0cmllcyB3aWxsIGJlIHZlcnkgc21hbGwgaW5cbiAgICAgICAgIGNvbnRlbmRlZCBzY2VuYXJpb3MsIGFzIHRoZSBhcnJheSBvbmx5IGdyb3dzLCB3aXRoXG4gICAgICAgICBleHBvbmVudGlhbCByZXNpemluZy4gKilcbiAgICAgIGlmIGNvbXBhcmVfYW5kX3NldF9kbHNfc3RhdGUgc3QgbmV3X3N0XG4gICAgICB0aGVuIG5ld19zdFxuICAgICAgZWxzZSBtYXliZV9ncm93IGlkeFxuICAgIGVuZFxuXG4gIGxldCBzZXQgKHR5cGUgYSkgKGlkeCwgX2luaXQpICh4IDogYSkgPVxuICAgIGxldCBzdCA9IG1heWJlX2dyb3cgaWR4IGluXG4gICAgKCogW1N5cy5vcGFxdWVfaWRlbnRpdHldIGVuc3VyZXMgdGhhdCBmbGFtYmRhIGRvZXMgbm90IGxvb2sgYXQgdGhlIHR5cGUgb2ZcbiAgICAgKiBbeF0sIHdoaWNoIG1heSBiZSBhIFtmbG9hdF0gYW5kIGNvbmNsdWRlIHRoYXQgdGhlIFtzdF0gaXMgYSBmbG9hdCBhcnJheS5cbiAgICAgKiBXZSBkbyBub3Qgd2FudCBPQ2FtbCdzIGZsb2F0IGFycmF5IG9wdGltaXNhdGlvbiBraWNraW5nIGluIGhlcmUuICopXG4gICAgc3QuKGlkeCkgPC0gT2JqX29wdC5zb21lIChTeXMub3BhcXVlX2lkZW50aXR5IHgpXG5cblxuICBsZXRbQGlubGluZSBuZXZlcl0gYXJyYXlfY29tcGFyZV9hbmRfc2V0IGEgaSBvbGR2YWwgbmV3dmFsID1cbiAgICAoKiBOb3RlOiB3ZSBjYW5ub3QgdXNlIFtAcG9sbCBlcnJvcl0gZHVlIHRvIHRoZVxuICAgICAgIGFsbG9jYXRpb25zIG9uIGEuKGkpIGluIHRoZSBEb3VibGVfYXJyYXkgY2FzZS4gKilcbiAgICBsZXQgY3VydmFsID0gYS4oaSkgaW5cbiAgICBpZiBjdXJ2YWwgPT0gb2xkdmFsIHRoZW4gKFxuICAgICAgQXJyYXkudW5zYWZlX3NldCBhIGkgbmV3dmFsO1xuICAgICAgdHJ1ZVxuICAgICkgZWxzZSBmYWxzZVxuXG4gIGxldCBnZXQgKHR5cGUgYSkgKChpZHgsIGluaXQpIDogYSBrZXkpIDogYSA9XG4gICAgbGV0IHN0ID0gbWF5YmVfZ3JvdyBpZHggaW5cbiAgICBsZXQgb2JqID0gc3QuKGlkeCkgaW5cbiAgICBpZiBPYmpfb3B0LmlzX3NvbWUgb2JqXG4gICAgdGhlbiAoT2JqX29wdC51bnNhZmVfZ2V0IG9iaiA6IGEpXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHYgOiBhID0gaW5pdCAoKSBpblxuICAgICAgbGV0IG5ld19vYmogPSBPYmpfb3B0LnNvbWUgKFN5cy5vcGFxdWVfaWRlbnRpdHkgdikgaW5cbiAgICAgICgqIEF0IHRoaXMgcG9pbnQsIFtzdF0gb3IgW3N0LihpZHgpXSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgIGJ5IGFub3RoZXIgdGhyZWFkIG9uIHRoZSBzYW1lIGRvbWFpbi5cblxuICAgICAgICAgSWYgW3N0XSBjaGFuZ2VkLCBpdCB3YXMgcmVzaXplZCBpbnRvIGEgbGFyZ2VyIHZhbHVlLFxuICAgICAgICAgd2UgY2FuIGp1c3QgcmV1c2UgdGhlIG5ldyB2YWx1ZS5cblxuICAgICAgICAgSWYgW3N0LihpZHgpXSBjaGFuZ2VkLCB3ZSBkcm9wIHRoZSBjdXJyZW50IHZhbHVlIHRvIGF2b2lkXG4gICAgICAgICBsZXR0aW5nIG90aGVyIHRocmVhZHMgb2JzZXJ2ZSBhICdyZXZlcnQnIHRoYXQgZm9yZ2V0c1xuICAgICAgICAgcHJldmlvdXMgbW9kaWZpY2F0aW9ucy4gKilcbiAgICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICAgIGlmIGFycmF5X2NvbXBhcmVfYW5kX3NldCBzdCBpZHggb2JqIG5ld19vYmpcbiAgICAgIHRoZW4gdlxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICAoKiBpZiBzdC4oaWR4KSBjaGFuZ2VkLCBzb21lb25lIG11c3QgaGF2ZSBpbml0aWFsaXplZFxuICAgICAgICAgICB0aGUga2V5IGluIHRoZSBtZWFudGltZS4gKilcbiAgICAgICAgbGV0IHVwZGF0ZWRfb2JqID0gc3QuKGlkeCkgaW5cbiAgICAgICAgaWYgT2JqX29wdC5pc19zb21lIHVwZGF0ZWRfb2JqXG4gICAgICAgIHRoZW4gKE9ial9vcHQudW5zYWZlX2dldCB1cGRhdGVkX29iaiA6IGEpXG4gICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICBlbmRcbiAgICBlbmRcblxuICB0eXBlIGtleV92YWx1ZSA9IEtWIDogJ2Ega2V5ICogJ2EgLT4ga2V5X3ZhbHVlXG5cbiAgbGV0IGdldF9pbml0aWFsX2tleXMgKCkgOiBrZXlfdmFsdWUgbGlzdCA9XG4gICAgTGlzdC5tYXBcbiAgICAgIChmdW4gKEtJIChrLCBzcGxpdCkpIC0+IEtWIChrLCAoc3BsaXQgKGdldCBrKSkpKVxuICAgICAgKEF0b21pYy5nZXQgcGFyZW50X2tleXMpXG5cbiAgbGV0IHNldF9pbml0aWFsX2tleXMgKGw6IGtleV92YWx1ZSBsaXN0KSA9XG4gICAgTGlzdC5pdGVyIChmdW4gKEtWIChrLCB2KSkgLT4gc2V0IGsgdikgbFxuZW5kXG5cbigqKioqKioqKiBJZGVudGl0eSAqKioqKioqKioqKVxuXG5sZXQgZ2V0X2lkIHsgZG9tYWluOyBfIH0gPSBkb21haW5cblxubGV0IHNlbGYgKCkgPSBSYXcuc2VsZiAoKVxuXG5sZXQgaXNfbWFpbl9kb21haW4gKCkgPSAoc2VsZiAoKSA6PiBpbnQpID0gMFxuXG4oKioqKioqKiogQ2FsbGJhY2tzICoqKioqKioqKiopXG5cbigqIGZpcnN0IHNwYXduLCBkb21haW4gc3RhcnR1cCBhbmQgYXQgZXhpdCBmdW5jdGlvbmFsaXR5ICopXG5sZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgPSBBdG9taWMubWFrZSBmYWxzZVxuXG5sZXQgZmlyc3Rfc3Bhd25fZnVuY3Rpb24gPSByZWYgKGZ1biAoKSAtPiAoKSlcblxubGV0IGJlZm9yZV9maXJzdF9zcGF3biBmID1cbiAgaWYgQXRvbWljLmdldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJmaXJzdCBkb21haW4gYWxyZWFkeSBzcGF3bmVkXCIpXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgb2xkX2YgPSAhZmlyc3Rfc3Bhd25fZnVuY3Rpb24gaW5cbiAgICBsZXQgbmV3X2YgKCkgPSBvbGRfZiAoKTsgZiAoKSBpblxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IG5ld19mXG4gIGVuZFxuXG5sZXQgZG9fYmVmb3JlX2ZpcnN0X3NwYXduICgpID1cbiAgaWYgbm90IChBdG9taWMuZ2V0IGZpcnN0X2RvbWFpbl9zcGF3bmVkKSB0aGVuIGJlZ2luXG4gICAgQXRvbWljLnNldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0cnVlO1xuICAgICFmaXJzdF9zcGF3bl9mdW5jdGlvbigpO1xuICAgICgqIFJlbGVhc2UgdGhlIG9sZCBmdW5jdGlvbiAqKVxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IChmdW4gKCkgLT4gKCkpXG4gIGVuZFxuXG5sZXQgYXRfZXhpdF9rZXkgPSBETFMubmV3X2tleSAoZnVuICgpIC0+IChmdW4gKCkgLT4gKCkpKVxuXG5sZXQgYXRfZXhpdCBmID1cbiAgbGV0IG9sZF9leGl0IDogdW5pdCAtPiB1bml0ID0gRExTLmdldCBhdF9leGl0X2tleSBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGYgKCk7IG9sZF9leGl0ICgpXG4gIGluXG4gIERMUy5zZXQgYXRfZXhpdF9rZXkgbmV3X2V4aXRcblxubGV0IGRvX2F0X2V4aXQgKCkgPVxuICBsZXQgZiA6IHVuaXQgLT4gdW5pdCA9IERMUy5nZXQgYXRfZXhpdF9rZXkgaW5cbiAgZiAoKVxuXG5sZXQgXyA9IFN0ZGxpYi5kb19kb21haW5fbG9jYWxfYXRfZXhpdCA6PSBkb19hdF9leGl0XG5cbigqKioqKioqIENyZWF0aW9uIGFuZCBUZXJtaW5hdGlvbiAqKioqKioqKilcblxubGV0IHNwYXduIGYgPVxuICBkb19iZWZvcmVfZmlyc3Rfc3Bhd24gKCk7XG4gIGxldCBwayA9IERMUy5nZXRfaW5pdGlhbF9rZXlzICgpIGluXG5cbiAgKCogW3Rlcm1fc3luY10gaXMgdXNlZCB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBqb2luaW5nIGRvbWFpbnMgKilcbiAgbGV0IHRlcm1fc3luYyA9XG4gICAgUmF3Lnsgc3RhdGUgPSBSdW5uaW5nIDtcbiAgICAgICAgICBtdXQgPSBNdXRleC5jcmVhdGUgKCkgO1xuICAgICAgICAgIGNvbmQgPSBDb25kaXRpb24uY3JlYXRlICgpIH1cbiAgaW5cblxuICBsZXQgYm9keSAoKSA9XG4gICAgbWF0Y2hcbiAgICAgIERMUy5jcmVhdGVfZGxzICgpO1xuICAgICAgRExTLnNldF9pbml0aWFsX2tleXMgcGs7XG4gICAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgICAgcmVzXG4gICAgd2l0aFxuICAgICgqIFJ1biB0aGUgW2F0X2V4aXRdIGNhbGxiYWNrcyB3aGVuIHRoZSBkb21haW4gY29tcHV0YXRpb24gZWl0aGVyXG4gICAgICAgdGVybWluYXRlcyBub3JtYWxseSBvciBleGNlcHRpb25hbGx5LiAqKVxuICAgIHwgcmVzIC0+XG4gICAgICAgICgqIElmIHRoZSBkb21haW4gY29tcHV0YXRpb24gdGVybWluYXRlZCBub3JtYWxseSwgYnV0IHRoZVxuICAgICAgICAgICBbYXRfZXhpdF0gY2FsbGJhY2tzIHJhaXNlZCBhbiBleGNlcHRpb24sIHRoZW4gcmV0dXJuIHRoZVxuICAgICAgICAgICBleGNlcHRpb24uICopXG4gICAgICAgIGRvX2F0X2V4aXQgKCk7XG4gICAgICAgIHJlc1xuICAgIHwgZXhjZXB0aW9uIGV4biAtPlxuICAgICAgICAoKiBJZiBib3RoIHRoZSBkb21haW4gY29tcHV0YXRpb24gYW5kIHRoZSBbYXRfZXhpdF0gY2FsbGJhY2tzXG4gICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMsIHRoZW4gaWdub3JlIHRoZSBleGNlcHRpb24gZnJvbSB0aGVcbiAgICAgICAgICAgW2F0X2V4aXRdIGNhbGxiYWNrcyBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uICopXG4gICAgICAgICh0cnkgZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgICAgICByYWlzZSBleG5cbiAgaW5cbiAgbGV0IGRvbWFpbiA9IFJhdy5zcGF3biBib2R5IHRlcm1fc3luYyBpblxuICB7IGRvbWFpbiA7IHRlcm1fc3luYyB9XG5cbmxldCBqb2luIHsgdGVybV9zeW5jIDsgXyB9ID1cbiAgbGV0IG9wZW4gUmF3IGluXG4gIGxldCByZWMgbG9vcCAoKSA9XG4gICAgbWF0Y2ggdGVybV9zeW5jLnN0YXRlIHdpdGhcbiAgICB8IFJ1bm5pbmcgLT5cbiAgICAgICAgQ29uZGl0aW9uLndhaXQgdGVybV9zeW5jLmNvbmQgdGVybV9zeW5jLm11dDtcbiAgICAgICAgbG9vcCAoKVxuICAgIHwgRmluaXNoZWQgcmVzIC0+XG4gICAgICAgIHJlc1xuICBpblxuICBtYXRjaCBNdXRleC5wcm90ZWN0IHRlcm1fc3luYy5tdXQgbG9vcCB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZXggLT4gcmFpc2UgZXhcblxubGV0IHJlY29tbWVuZGVkX2RvbWFpbl9jb3VudCA9IFJhdy5nZXRfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2RvbWFpbl9kbHNfZ2V0IiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2RvbWFpbl9pZCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Db25kaXRpb24iLCJTdGRsaWJfTXV0ZXgiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsImNwdV9yZWxheCIsInBhcmFtIiwibm9uZSIsImNyZWF0ZV9kbHMiLCJzdCIsImtleV9jb3VudGVyIiwicGFyZW50X2tleXMiLCJuZXdfa2V5Iiwic3BsaXRfZnJvbV9wYXJlbnQiLCJpbml0X29ycGhhbiIsImlkeCIsImsiLCJzcGxpdCIsImtpIiwibCIsIm1heWJlX2dyb3ciLCJzeiIsIm5ld19zeiIsIm5ld19zdCIsInMiLCJzZXQiLCJ4IiwiZ2V0IiwiaW5pdCIsIm9sZHZhbCIsIm5ld19vYmoiLCJjdXJ2YWwiLCJ1cGRhdGVkX29iaiIsInNldF9pbml0aWFsX2tleXMiLCJ2IiwiZ2V0X2lkIiwiZG9tYWluIiwic2VsZiIsImlzX21haW5fZG9tYWluIiwiZmlyc3RfZG9tYWluX3NwYXduZWQiLCJmaXJzdF9zcGF3bl9mdW5jdGlvbiIsImJlZm9yZV9maXJzdF9zcGF3biIsIm9sZF9mIiwibmV3X2YiLCJhdF9leGl0X2tleSIsImF0X2V4aXQiLCJvbGRfZXhpdCIsIm5ld19leGl0IiwiZG9fYXRfZXhpdCIsInNwYXduIiwicGsiLCJ0ZXJtX3N5bmMiLCJib2R5IiwicmVzIiwiZXhuIiwiam9pbiIsImxvb3AiLCJtYXRjaCIsImV4IiwicmVjb21tZW5kZWRfZG9tYWluX2NvdW50Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLFVBQUFDLE9DOENtQiwwQ0FBZ0I7QUFBQSxPQUFBQyxPRDlDbkM7QUFBQSxZQUFBQyxXQUFBRjtBQUFBQSxRQUFBRyxLQ3dGYTtBQUFBLElBQ1Q7QUFBQSxHQUFnQjtBQUFBLEdBRVY7QUFBQTtBQUFBLElBQUFDLGNBSVU7QUFBQSxJQUFBQyxjQUtBO0FBQUEsWUFBQUMsUUFBQUMsbUJBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLE1BUU47QUFBQSxLQUFBQyxJQUNWO0FBQUEsSUFDQTtBQUFBLFNBQUFDLFFBQUEsc0JBQUFDLEtBRWdCO0FBQUEsS0FUaEI7QUFBQSxVQUFBQyxJQUFRO0FBQUEsTUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVVA7QUFBQSxHQUFDO0FBQUEsWUFBQUMsV0FBQUw7QUFBQUEsSUFLRDtBQUFBLFNBQUFOLEtBQUEsd0JBQUFZLEtBQ0E7QUFBQSxLQUNBLGFBQWlCO0FBQUEsU0FBQUMsU0FBakI7QUFBQTtBQUFBLE1BR0k7QUFBQSxXQUFBQyxTQUdXO0FB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QUFBQSxFRHRPeEQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODg4NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pZ25cbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdHMuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsImNhbWxfZm9ybWF0X2ludCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ191bnNhZmVfZ2V0IiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfU3lzIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiY3JlYXRlX2NoYXJfc2V0IiwicGFyYW0iLCJhZGRfaW5fY2hhcl9zZXQiLCJjaGFyX3NldCIsImMiLCJzdHJfaW5kIiwibWFzayIsImZyZWV6ZV9jaGFyX3NldCIsInJldl9jaGFyX3NldCIsImkiLCJpc19pbl9jaGFyX3NldCIsInBhZF9vZl9wYWRfb3B0IiwicGFkX29wdCIsIndpZHRoIiwicGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IiwiaWduIiwiZm10IiwiaWNvbnYiLCJwcmVjX29wdCIsIm5kZWMiLCJmbXR0eSIsIndpZHRoX29wdCIsImNvdW50ZXIiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImZjb252IiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwiYnVmIiwib3ZlcmhlYWQiLCJsZW4iLCJtaW5fbGVuIiwibmV3X2xlbiIsIm5ld19zdHIiLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInMiLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9pY29udiIsImNoYXJfb2ZfZmNvbnYiLCJvcHQiLCJjRiIsImJwcmludF9jaGFyX3NldCIsInByaW50X2NoYXIiLCJzZXQiLCJpc19hbG9uZSIsImFmdGVyIiwiYmVmb3JlIiwic3dpdGNoZXIiLCJqIiwiYnByaW50X3BhZHR5IiwicGFkdHkiLCJicHJpbnRfaWdub3JlZF9mbGFnIiwiaWduX2ZsYWciLCJicHJpbnRfcGFkX29wdCIsImJwcmludF9wYWRkaW5nIiwicGFkIiwibiIsImJwcmludF9wcmVjaXNpb24iLCJwcmVjIiwiYnByaW50X2ljb252X2ZsYWciLCJicHJpbnRfYWx0aW50X2ZtdCIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIiLCJicHJpbnRfY2hhcl9saXRlcmFsIiwiY2hyIiwiYnByaW50X3N0cmluZ19saXRlcmFsIiwiY3N0X0xpIiwiY3N0X2kiLCJjc3RfbGkiLCJjc3RfbmkiLCJicHJpbnRfZm10dHkiLCJzdWJfZm10dHkiLCJpbnRfb2ZfY3VzdG9tX2FyaXR5IiwieCIsImNzdCIsInN0cmluZ19vZl9mbXQiLCJmbXRpdGVyIiwicmVzdCIsImZtdGluZ19saXQiLCJmbXRpbmdfZ2VuIiwiYXJpdHkiLCJzeW1tIiwidHkiLCJ0eTIiLCJ0eTEiLCJmbXR0eV9yZWxfZGV0IiwibWF0Y2giLCJkZSIsImFmIiwiamQiLCJnYSIsImNzdF9jYW1saW50ZXJuYWxGb3JtYXRfbWwiLCJ0cmFucyIsInJlc3QxIiwicmVzdDIiLCJ0eTEyIiwidHkxMSIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsImZtdHR5X29mX2ZtdCIsInR5X3Jlc3QiLCJwcmVjX3R5IiwiZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9vZl9jdXN0b20iLCJmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IiwiZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IiwiVHlwZV9taXNtYXRjaCIsInR5cGVfcGFkZGluZyIsInciLCJ0eXBlX3BhZHByZWMiLCJwIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXR0eTAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJzdWJfZm10dHkxIiwiZm10MSIsImZtdHR5MiIsImZtdDIiLCJmbXR0eTMiLCJmbXQzIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViMl9mbXR0eSIsInN1YjFfZm10dHkiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsInJlcyIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwibCIsImZvcm1hdF9vZl9mY29udiIsInN5bWIiLCJ0cmFuc2Zvcm1faW50X2FsdCIsInBvcyIsInB1dCIsImxlZnQiLCJjc3RfdSIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJzaWduIiwiY2FtbF9zcGVjaWFsX3ZhbCIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmIiwiayIsImFjYyIsImthY2MiLCJuZXdfYWNjIiwibyIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfY3VzdG9tIiwibWFrZV9pcHJpbnRmIiwia29jIiwiZm5fb2ZfY3VzdG9tX2FyaXR5Iiwib3V0cHV0X2FjYyIsIm1zZyIsImJ1ZnB1dF9hY2MiLCJiIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleG4iLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiY3N0X2F0X2NoYXJhY3Rlcl9udW1iZXIiLCJjc3RfaW52YWxpZF9mb3JtYXQiLCJzdWJfZm9ybWF0IiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwiaW52YWxpZF9mb3JtYXRfbWVzc2FnZSIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsInJlYWQiLCJjc3RfdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwicGFyc2UiLCJsaXRfc3RhcnQiLCJlbmRfaW5kIiwiY3N0XzAiLCJwYXJzZV9mbGFncyIsInBjdF9pbmQiLCJzZXRfZmxhZyIsInplcm8iLCJtaW51cyIsInBsdXMiLCJzcGFjZSIsImhhc2giLCJuZXdfaW5kIiwiY3N0X3ByZWNpc2lvbiIsInBhcnNlX2FmdGVyX3BhZGRpbmciLCJwYXJzZV9saXRlcmFsIiwicGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIiwicGFyc2VfY29udiIsInBhZHByZWMiLCJwYXJzZV9jb252ZXJzaW9uIiwicGx1c191c2VkIiwiZ2V0X3BsdXMiLCJoYXNoX3VzZWQiLCJnZXRfaGFzaCIsInNwYWNlX3VzZWQiLCJnZXRfc3BhY2UiLCJpZ25fdXNlZCIsImdldF9pZ24iLCJwYWRfdXNlZCIsImdldF9wYWQiLCJwcmVjX3VzZWQiLCJnZXRfcHJlYyIsImdldF9wYWRwcmVjIiwiZ2V0X2ludF9wYWQiLCJjaGVja19ub18wIiwib3B0X29mX3BhZCIsImdldF9wYWRfb3B0IiwiZ2V0X3BhZHByZWNfb3B0IiwiZm10X3Jlc3VsdCIsInN1Yl9lbmQiLCJzdWJfZm10IiwiaWdub3JlZCIsIm5leHRfaW5kIiwiY2hhcl9mb3JtYXQiLCJraW5kIiwicGFyc2VfYWZ0ZXJfYXQiLCJzdHJfaW5kXzEiLCJzdHJfaW5kXzIiLCJzdHJfaW5kXzMiLCJvZmZzZXQiLCJzdHJfaW5kXzQiLCJzdHJfaW5kXzUiLCJzaXplIiwicGFyc2VfdGFnIiwiaXNfb3Blbl90YWciLCJpbmQiLCJzdWJfc3RyIiwiZm9ybWF0dGluZyIsInBhcnNlX2NoYXJfc2V0IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsInBhcnNlX3Bvc2l0aXZlIiwicGFyc2VfaW50ZWdlciIsImFkZF9saXRlcmFsIiwic2VhcmNoX3N1YmZvcm1hdF9lbmQiLCJjb21wdXRlX2ludF9jb252IiwiaW5jb21wYXRpYmxlX2ZsYWciLCJvcHRpb24iLCJzdWJmbXQiLCJjc3RfYW5kIiwiY3N0X2JhZF9pbnB1dF9mb3JtYXRfdHlwZV9taXNtIiwiZm9ybWF0X29mX3N0cmluZ19mbXR0eSIsImZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQU4sR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFSLEdBQUFDLElBQUFFLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQywyQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLGdCQUFBQyxPQ3VCeUIsd0NBQW9C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QWxOLEtBQUE5QztBQUFBQSxRQUFBSixNQ2c2Rm9CO0FBQUEsSUFDbEIsWUFBWTtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRGo2RmQ7QUFBQTtBQUFBLGFDcTZGVTtBQUFBLEtBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNRHI2RmpDO0FBQUE7QUFBQTtBQUFBLFlBQUE0Rix3QkFBQW5OLEtBQUFqRTtBQUFBQTtBQUFBQSxLQUFBaUUsUUN5NkY0QjtBQUFBLEtBQUFsRCxNQUFBO0FBQUEsS0FBQUEsUUFDUjtBQUFBLElBQ2xCLFlBQTRCLElBQWhCLG1CQUFnQjtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRDM2RjlCO0FBQUE7QUFBQSxNQzY2Rkksa0RBQzhEO0FBQUEsS0Q5NkZsRTtBQUFBO0FBQUEsR0M4NkZrRTtBQUFBLEdEOTZGbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMzc0MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9wcmludGYubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CdWZmZXIiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJrZnByaW50ZiIsImsiLCJvIiwicGFyYW0iLCJmbXQiLCJhY2MiLCJrYnByaW50ZiIsImIiLCJpa2ZwcmludGYiLCJvYyIsImZwcmludGYiLCJicHJpbnRmIiwiaWZwcmludGYiLCJpYnByaW50ZiIsInByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsImJ1ZiIsInNwcmludGYiLCJzIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLFNBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUFDLE1Da0JhO0FBQUEsSUFDWDtBQUFBO0FBQUEsc0JBQUFDO0FBQUFBLGNBQXdCO0FBQUEsY0FBZ0IsdUJBQUs7QUFBQTtBQUFBO0FBQUEsaUJBQWdCO0FBQUE7QUFBQSxZQUFBQyxTQUFBTCxHQUFBTSxHQUFBSjtBQUFBQSxRQUFBQyxNQUNsRDtBQUFBLElBQ1g7QUFBQTtBQUFBLHNCQUFBQztBQUFBQSxjQUF3QjtBQUFBLGNBQWdCLHVCQUFLO0FBQUE7QUFBQTtBQUFBLGlCQUFnQjtBQUFBO0FBQUEsWUFBQUcsVUFBQVAsR0FBQVEsSUFBQU47QUFBQUEsUUFBQUMsTUFDakQ7QUFBQSxJQUNaLG1EQUFxQjtBQUFBO0FBQUEsWUFBQU0sUUFBQUQsSUFBQUw7QUFBQUEsSUFHRiw0QkQxQnJCLG9CQzBCMkM7QUFBQTtBQUFBLFlBQUFPLFFBQUFKLEdBQUFILEtBQ3ZCLDRCRDNCcEIsbUJDMkJ5QztBQUFBLFlBQUFRLFNBQUFILElBQUFMO0FBQUFBLElBQ25CLDZCRDVCdEIsb0JDNEI2QztBQUFBO0FBQUEsWUFBQVMsU0FBQU4sR0FBQUg7QUFBQUEsSUFDeEIsNkJEN0JyQixtQkM2QjJDO0FBQUE7QUFBQSxZQUFBVSxPQUFBVixLQUMxQiwrQkFBa0I7QUFBQSxZQUFBVyxRQUFBWCxLQUNqQiwrQkFBa0I7QUFBQSxZQUFBWSxTQUFBZixHQUFBRTtBQUFBQSxRQUFBQyxNQUV2QjtBQUFBLGFBQUFILElBQUFJO0FBQUFBLFNBQUFZLE1BRUM7QUFBQSxLQUNWO0FBQUEsS0FDRSxPQUFxQixjQUFyQixpQ0FBcUI7QUFBQTtBQUFBLElBQ3pCLG9EQUE2QjtBQUFBO0FBQUEsWUFBQUMsUUFBQWQsS0FFYix5QkFBQWUsR0FBbUIsU0FBQyxPQUFLO0FBQUEsR0R4QzNDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjM4MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcHJpbnRleGMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB4ID1cbiAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICgoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZyksIE5vbmUpXG4gIGVsc2VcbiAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAoY29uc3RydWN0b3IsIFNvbWUgKGZpZWxkcyB4KSlcblxubGV0IHN0cmluZ19vZl9leHRlbnNpb25fY29uc3RydWN0b3IgdCA9XG4gIGxldCBjb25zdHJ1Y3RvciwgZmllbGRzX29wdCA9IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB0IGluXG4gIG1hdGNoIGZpZWxkc19vcHQgd2l0aFxuICB8IE5vbmUgLT4gY29uc3RydWN0b3JcbiAgfCBTb21lIGYgLT4gY29uc3RydWN0b3IgXiBmXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBzdHJpbmdfb2ZfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIChPYmoucmVwciB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxuKCogRGlzYWJsZSB3YXJuaW5nIDM3OiB2YWx1ZXMgYXJlIGNvbnN0cnVjdGVkIGluIHRoZSBydW50aW1lICopXG50eXBlW0B3YXJuaW5nIFwiLTM3XCJdIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgOiBzdHJpbmc7XG4gICAgICBzdGFydF9sbnVtIDogaW50O1xuICAgICAgc3RhcnRfY2hhciA6IGludDtcbiAgICAgIGVuZF9vZmZzZXQgOiBpbnQ7ICgqIFJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBzdGFydF9sbnVtICopXG4gICAgICBlbmRfbG51bSAgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICA6IGludDsgKCogUmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIGVuZF9sbnVtIGxpbmUgKilcbiAgICAgIGlzX2lubGluZSAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgbGV0IGxpbmVzID1cbiAgICAgICAgaWYgbC5zdGFydF9sbnVtID0gbC5lbmRfbG51bSB0aGVuXG4gICAgICAgICAgUHJpbnRmLnNwcmludGYgXCIgJWRcIiBsLnN0YXJ0X2xudW1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwicyAlZC0lZFwiIGwuc3RhcnRfbG51bSBsLmVuZF9sbnVtXG4gICAgICBpblxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lJXMsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGxpbmVzIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xuICBlbmRfbGluZSA6IGludDtcbiAgZW5kX2NvbCA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5zdGFydF9sbnVtO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX29mZnNldDtcbiAgICAgIGVuZF9saW5lICAgID0gbC5lbmRfbG51bTtcbiAgICAgIGVuZF9jb2wgICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9vYmpfdGFnIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw1IiwiYTIiLCJhMyIsImE0IiwiY2FtbF9jYWxsNyIsImE1IiwiYTYiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9PYmoiLCJwcmludGVycyIsImZpZWxkIiwieCIsImkiLCJjc3QiLCJvdGhlcl9maWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJwYXJhbSIsInRsIiwiaGQiLCJ2YWwiLCJzIiwic3RyaW5nX29mX2V4dGVuc2lvbl9jb25zdHJ1Y3RvIiwidCIsImNvbnN0cnVjdG9yIiwibWF0Y2giLCJmaWVsZHNfb3B0IiwiY3N0X2NoYXJhY3RlcnMiLCJsb2NmbXQiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIiLCJsaW5lIiwiZmlsZSIsInRvX3N0cmluZyIsImUiLCJjc3RfVW5jYXVnaHRfZXhjZXB0aW9uIiwiY3N0X1VuY2F1Z2h0X2V4Y2VwdGlvbl9zIiwicHJpbnQiLCJmY3QiLCJhcmciLCJjYXRjaCQiLCJyYXdfYmFja3RyYWNlX2VudHJpZXMiLCJidCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInBvcyIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJsaW5lcyIsImNzdF9zIiwiY3N0X1Byb2dyYW1fbm90X2xpbmtlZF93aXRoX2dfIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsIm91dGNoYW4iLCJyYXdfYmFja3RyYWNlIiwiYmFja3RyYWNlIiwiYSIsInN0ciIsInByaW50X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIiwiYiIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lIiwiYmFja3RyYWNlX3Nsb3RzIiwiYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSIsImVudHJ5IiwicmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwic3VjY2VzcyIsImV4bl9zbG90IiwiZXhuX3Nsb3RfaWQiLCJleG5fc2xvdF9uYW1lIiwiZXJyb3JzIiwiY3N0X0ZhdGFsX2Vycm9yX2V4Y2VwdGlvbiIsImNzdF9GYXRhbF9lcnJvcl9leGNlcHRpb25fcyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsImV4biIsInN0YXR1cyIsInVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwic2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwiZW1wdHlfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsIlN0ZGxpYl9QcmludGV4YyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxXQ21CZTtBQUFBLFFBQWM7QUFBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLFFBQUFwQixJQUtuQjtBQUFBLElBQ0Q7QUFBQSxLQUNMLG9EQU1HO0FBQUEsWUFMRztBQUFBO0FBQUEsS0FDTixvREFJRztBQUFBLFlBSEc7QUFBQSxtQ0FDTiw4QkFFRztBQUFBO0FBQUEsT0FBQXFCLE1EaENQLFFDbUI2QjtBQUFBLFlBQUFDLGFBQUFILEdBQUFDO0FBQUFBLElBZ0IzQixzQkFBd0I7QUFBQSxZQUNVLGdDQUFaO0FBQUEsSUFBVyx1REFBdUI7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QUFBLElBQ2I7QUFBQTtBQUFBLFVBQ3dCO0FBQUEsVUFBUjtBQUFBLEtBQWQ7QUFBQTtBQUFBLElBQ0Ysd0NBQVk7QUFBQTtBQUFBLE9BQUFDLDZCQXBUZTtBQUFBLFlBQUFDLCtCQUFBZDtBQUFBQSxJQXdUVztBQUFBO0FBQUEsR0FBZ0M7QUFBQTtBQUFBLElBQUFlLGtCQXhUM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLDBCQUFBTCxPQUFBTTtBQUFBQSxJQStWM0I7QUFBQSxLQTVCQTtBQUFBO0FBQUEsT0FBQWxDO0FBQUFBLFNBQUEsb0NBTEU7QUFBQSxNQWNBLElBQUssaUNBQUE0QjtBQUFBQSxNQUNMO0FBQUE7QUFBQSxZQUNFO0FBQUE7QUFBQTtBQUFBLFlBQUFBO0FBQUFBO0FBQUFBLFFBQUFBLFFEaldOO0FBQUEsUUFBQTVCLGtCQ2lWSTtBQUFBLFlBbUJ3QztBQUFBLE9BQXRDO0FBQUEsT0FDQTtBQUFBLGVBRUU7QUFBQSxPQURGO0FBQUEsT0FFQTtBQUFBLGVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBNEI7QUFBQUEsVUFBQUEsTUR6V047QUFBQTtBQUFBO0FBQUE7QUFBQSxTQzRXUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBQUEsS0FVSjtBQUFBLEdBQUU7QUFBQSxHQU1KO0FBQUE7QUFBQTtBQUFBLElBQUFPO0FBQUFBLE1BQzJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ3WDdCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjQzMDksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZnVuLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBjb21wb3NlIGYgZyB4ID0gZiAoZyB4KVxubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGV4YyIsIlN0ZGxpYiIsImNvbnN0JCIsImMiLCJwYXJhbSIsImNvbXBvc2UiLCJnIiwieCIsImZsaXAiLCJ5IiwibmVnYXRlIiwicCIsInYiLCJGaW5hbGx5X3JhaXNlZCIsImV4biIsImR1bW15IiwicHJvdGVjdCIsImZpbmFsbHkkIiwid29yayIsImZpbmFsbHlfbm9fZXhuIiwiZSIsImJ0IiwicmVzdWx0Iiwid29ya19leG4iLCJ3b3JrX2J0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsT0FBQUMsR0FBQUMsT0NnQmdCLFNBQUM7QUFBQSxZQUFBQyxRQUFBVixHQUFBVyxHQUFBQyxHQUNLLE9BQUssY0FBTCxpQkFBSztBQUFBLFlBQUFDLEtBQUFiLEdBQUFZLEdBQUFFLEdBQ1YsMEJBQUs7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQyxHQUNELDJCQUFLO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRG5CMUI7QUFBQSxHQ3VCUztBQUFBO0FBQUEsY0FBQVQ7QUFBQUEsTUFBNkIsZ0NBRS9CO0FBQUEsVUFBQVUsTUFGK0IsY0FDaUI7QUFBQSxNQUExQiw0REFBaUQ7QUFBQSxLQUNuRTtBQUFBLE9BQUFDLFFBQUE7QUFBQSxZQUFBQyxRQUFBQyxVQUFBQztBQUFBQSxhQUFBQyxlQUFBZjtBQUFBQSxLQUlQLElBQUk7QUFBQSxXQUFBZ0I7QUFBQUE7QUFBQUEsT0FBQUEsSUQ3QlI7QUFBQSxPQUFBQyxLQzhCZTtBQUFBLE9BQUFQLE1BQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFtRDtBQUFBLElBRXZELFFBQUFRLFNBQU07QUFBQSxVQUFBQztBQUFBQTtBQUFBQSxNQUFBQSxXRGpDUjtBQUFBLE1BQUFDLFVDb0NvQjtBQUFBLEtBQ2Q7QUFBQSxLQUFpQjtBQUFBO0FBQUE7QUFBQSxJQUhUO0FBQUEsSUFBaUI7QUFBQSxHQUlxQjtBQUFBLEdBYnpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpCWCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0MzgwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2luX2NoYW5uZWwubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGluX2NoYW5uZWxcblxudHlwZSBvcGVuX2ZsYWcgPSBTdGRsaWIub3Blbl9mbGFnID1cbiAgfCBPcGVuX3Jkb25seVxuICB8IE9wZW5fd3Jvbmx5XG4gIHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0XG4gIHwgT3Blbl90cnVuY1xuICB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5XG4gIHwgT3Blbl90ZXh0XG4gIHwgT3Blbl9ub25ibG9ja1xuXG5sZXQgc3RkaW4gPSBTdGRsaWIuc3RkaW5cbmxldCBvcGVuX2JpbiA9IFN0ZGxpYi5vcGVuX2luX2JpblxubGV0IG9wZW5fdGV4dCA9IFN0ZGxpYi5vcGVuX2luXG5sZXQgb3Blbl9nZW4gPSBTdGRsaWIub3Blbl9pbl9nZW5cblxubGV0IHdpdGhfb3BlbiBvcGVuZnVuIHMgZiA9XG4gIGxldCBpYyA9IG9wZW5mdW4gcyBpblxuICBGdW4ucHJvdGVjdCB+ZmluYWxseTooZnVuICgpIC0+IFN0ZGxpYi5jbG9zZV9pbl9ub2VyciBpYylcbiAgICAoZnVuICgpIC0+IGYgaWMpXG5cbmxldCB3aXRoX29wZW5fYmluIHMgZiA9XG4gIHdpdGhfb3BlbiBTdGRsaWIub3Blbl9pbl9iaW4gcyBmXG5cbmxldCB3aXRoX29wZW5fdGV4dCBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW4gcyBmXG5cbmxldCB3aXRoX29wZW5fZ2VuIGZsYWdzIHBlcm0gcyBmID1cbiAgd2l0aF9vcGVuIChTdGRsaWIub3Blbl9pbl9nZW4gZmxhZ3MgcGVybSkgcyBmXG5cbmxldCBzZWVrID0gU3RkbGliLkxhcmdlRmlsZS5zZWVrX2luXG5sZXQgcG9zID0gU3RkbGliLkxhcmdlRmlsZS5wb3NfaW5cbmxldCBsZW5ndGggPSBTdGRsaWIuTGFyZ2VGaWxlLmluX2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2UgPSBTdGRsaWIuY2xvc2VfaW5cbmxldCBjbG9zZV9ub2VyciA9IFN0ZGxpYi5jbG9zZV9pbl9ub2VyclxuXG5sZXQgaW5wdXRfY2hhciBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9jaGFyIGljIHdpdGhcbiAgfCBjIC0+IFNvbWUgY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9ieXRlIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2J5dGUgaWMgd2l0aFxuICB8IG4gLT4gU29tZSBuXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0X2xpbmUgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgcyAtPiBTb21lIHNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXQgPSBTdGRsaWIuaW5wdXRcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0X2JpZ2FycmF5IDpcbiAgdCAtPiBfIEJpZ2FycmF5LkFycmF5MS50IC0+IGludCAtPiBpbnQgLT4gaW50XG4gID0gXCJjYW1sX21sX2lucHV0X2JpZ2FycmF5XCJcblxubGV0IGlucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dF9iaWdhcnJheVwiXG4gIGVsc2UgdW5zYWZlX2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgYnVmIHBvcyBsZW4gPVxuICBtYXRjaCBTdGRsaWIucmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuIHdpdGhcbiAgfCAoKSAtPiBTb21lICgpXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiBTb21lICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRfYmlnYXJyYXlcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXRfYmlnYXJyYXkgaWMgYnVmIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuIHdpdGhcbiAgfCBzIC0+IFNvbWUgc1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbigqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgaW50byBbYnVmXSwgc3RhcnRpbmcgYXQgW29mc10uIFJldHVybiB0b3RhbCBieXRlc1xuICAgcmVhZC4gKilcbmxldCByZWFkX3VwdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3Agb2ZzIGxlbiA9XG4gICAgaWYgbGVuID0gMCB0aGVuIG9mc1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gU3RkbGliLmlucHV0IGljIGJ1ZiBvZnMgbGVuIGluXG4gICAgICBpZiByID0gMCB0aGVuXG4gICAgICAgIG9mc1xuICAgICAgZWxzZVxuICAgICAgICBsb29wIChvZnMgKyByKSAobGVuIC0gcilcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBvZnMgbGVuIC0gb2ZzXG5cbigqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gcmV0dXJuIGEgYnVmZmVyIHdpdGggPj0gKG9mcyArIG4pIGJ5dGVzIG9mIHN0b3JhZ2UsXG4gICBhbmQgc3VjaCB0aGF0IGl0IGNvaW5jaWRlcyB3aXRoIFtidWZdIGF0IGluZGljZXMgPCBbb2ZzXS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBlcXVhbCB0byBbYnVmXSBpdHNlbGYgaWYgaXQgYWxyZWFkeSBoYXMgc3VmZmljaWVudFxuICAgZnJlZSBzcGFjZS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgaGF2ZSAqZmV3ZXIqIHRoYW4gW29mcyArIG5dIGJ5dGVzIG9mIHN0b3JhZ2UgaWYgdGhpc1xuICAgbnVtYmVyIGlzID4gW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0uIEhvd2V2ZXIgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsXG4gICAqYWx3YXlzKiBoYXZlID4gW29mc10gYnl0ZXMgb2Ygc3RvcmFnZS4gSW4gdGhlIGxpbWl0aW5nIGNhc2Ugd2hlbiBbb2ZzID0gbGVuXG4gICA9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIGF0XG4gICBhbGwpLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxuXG5sZXQgZW5zdXJlIGJ1ZiBvZnMgbiA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA+PSBvZnMgKyBuIHRoZW4gYnVmXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbmV3X2xlbiA9IHJlZiBsZW4gaW5cbiAgICB3aGlsZSAhbmV3X2xlbiA8IG9mcyArIG4gZG9cbiAgICAgIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuICsgMVxuICAgIGRvbmU7XG4gICAgbGV0IG5ld19sZW4gPSAhbmV3X2xlbiBpblxuICAgIGxldCBuZXdfbGVuID1cbiAgICAgIGlmIG5ld19sZW4gPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgbmV3X2xlblxuICAgICAgZWxzZSBpZiBvZnMgPCBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgZmFpbHdpdGggXCJJbl9jaGFubmVsLmlucHV0X2FsbDogY2hhbm5lbCBjb250ZW50IFxcXG4gICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN0cmluZyBsZW5ndGhcIlxuICAgIGluXG4gICAgbGV0IG5ld19idWYgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmIDAgbmV3X2J1ZiAwIG9mcztcbiAgICBuZXdfYnVmXG4gIGVuZFxuXG5sZXQgaW5wdXRfYWxsIGljID1cbiAgbGV0IGNodW5rX3NpemUgPSA2NTUzNiBpbiAoKiBJT19CVUZGRVJfU0laRSAqKVxuICBsZXQgaW5pdGlhbF9zaXplID1cbiAgICB0cnlcbiAgICAgIFN0ZGxpYi5pbl9jaGFubmVsX2xlbmd0aCBpYyAtIFN0ZGxpYi5wb3NfaW4gaWNcbiAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAtMVxuICBpblxuICBsZXQgaW5pdGlhbF9zaXplID0gaWYgaW5pdGlhbF9zaXplIDwgMCB0aGVuIGNodW5rX3NpemUgZWxzZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgaWYgaW5pdGlhbF9zaXplIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICBpbml0aWFsX3NpemVcbiAgICBlbHNlXG4gICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IG5yZWFkID0gcmVhZF91cHRvIGljIGJ1ZiAwIGluaXRpYWxfc2l6ZSBpblxuICBpZiBucmVhZCA8IGluaXRpYWxfc2l6ZSB0aGVuICgqIEVPRiByZWFjaGVkLCBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCAqKVxuICAgIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmIDAgbnJlYWRcbiAgZWxzZSBiZWdpbiAoKiBucmVhZCA9IGluaXRpYWxfc2l6ZSwgbWF5YmUgRU9GIHJlYWNoZWQgKilcbiAgICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gICAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT5cbiAgICAgICAgKCogRU9GIHJlYWNoZWQsIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZpbGxlZCAqKVxuICAgICAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICAgIHwgYyAtPlxuICAgICAgICAoKiBFT0Ygbm90IHJlYWNoZWQgKilcbiAgICAgICAgbGV0IHJlYyBsb29wIGJ1ZiBvZnMgPVxuICAgICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG9mcyBjaHVua19zaXplIGluXG4gICAgICAgICAgbGV0IHJlbSA9IEJ5dGVzLmxlbmd0aCBidWYgLSBvZnMgaW5cbiAgICAgICAgICAoKiBbcmVtXSBjYW4gYmUgPCBbY2h1bmtfc2l6ZV0gaWYgYnVmZmVyIHNpemUgY2xvc2UgdG9cbiAgICAgICAgICAgICBbU3lzLm1heF9zdHJpbmdfbGVuZ3RoXSAqKVxuICAgICAgICAgIGxldCByID0gcmVhZF91cHRvIGljIGJ1ZiBvZnMgcmVtIGluXG4gICAgICAgICAgaWYgciA8IHJlbSB0aGVuICgqIEVPRiByZWFjaGVkICopXG4gICAgICAgICAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIChvZnMgKyByKVxuICAgICAgICAgIGVsc2UgKCogciA9IHJlbSAqKVxuICAgICAgICAgICAgbG9vcCBidWYgKG9mcyArIHJlbSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IGVuc3VyZSBidWYgbnJlYWQgKGNodW5rX3NpemUgKyAxKSBpblxuICAgICAgICBCeXRlcy5zZXQgYnVmIG5yZWFkIGM7XG4gICAgICAgIGxvb3AgYnVmIChucmVhZCArIDEpXG4gIGVuZFxuXG5sZXQgW0B0YWlsX21vZF9jb25zXSByZWMgaW5wdXRfbGluZXMgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBsaW5lIDo6IGlucHV0X2xpbmVzIGljXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IFtdXG5cbmxldCByZWMgZm9sZF9saW5lcyBmIGFjY3UgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBmb2xkX2xpbmVzIGYgKGYgYWNjdSBsaW5lKSBpY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBhY2N1XG5cbmxldCBzZXRfYmluYXJ5X21vZGUgPSBTdGRsaWIuc2V0X2JpbmFyeV9tb2RlX2luXG5cbmV4dGVybmFsIGlzX2JpbmFyeV9tb2RlIDogaW5fY2hhbm5lbCAtPiBib29sID0gXCJjYW1sX21sX2lzX2JpbmFyeV9tb2RlXCJcblxuZXh0ZXJuYWwgaXNhdHR5IDogdCAtPiBib29sID0gXCJjYW1sX3N5c19pc2F0dHlcIlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2RpbV8xIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfaW5wdXRfYmlnYXJyYXkiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9GdW4iLCJzdGRpbiIsIm9wZW5fYmluIiwib3Blbl90ZXh0Iiwib3Blbl9nZW4iLCJ3aXRoX29wZW4iLCJvcGVuZnVuIiwicyIsImljIiwicGFyYW0iLCJ3aXRoX29wZW5fYmluIiwid2l0aF9vcGVuX3RleHQiLCJ3aXRoX29wZW5fZ2VuIiwiZmxhZ3MiLCJwZXJtIiwic2VlayIsInBvcyIsImxlbmd0aCIsImNsb3NlIiwiY2xvc2Vfbm9lcnIiLCJpbnB1dF9jaGFyIiwiYyIsImV4biIsImlucHV0X2J5dGUiLCJuIiwiaW5wdXRfbGluZSIsImlucHV0IiwiaW5wdXRfYmlnYXJyYXkiLCJidWYiLCJvZnMiLCJsZW4iLCJyZWFsbHlfaW5wdXQiLCJyZWFsbHlfaW5wdXRfYmlnYXJyYXkiLCJyIiwicmVhbGx5X2lucHV0X3N0cmluZyIsInJlYWRfdXB0byIsImVuc3VyZSIsIm5ld19sZW4iLCJuZXdfYnVmIiwiaW5wdXRfYWxsIiwiaW5pdGlhbF9zaXplIiwiY2h1bmtfc2l6ZSIsIm5yZWFkIiwicmVtIiwiaW5wdXRfbGluZXMiLCJsaW5lIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJmb2xkX2xpbmVzIiwiYWNjdSIsInNldF9iaW5hcnlfbW9kZSIsIlN0ZGxpYl9Jbl9jaGFubmVsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxZQUFBQyxVQUFBQyxTQUFBQyxHQUFBZjtBQUFBQSxRQUFBZ0IsS0NrQ1c7QUFBQSxJQUNUO0FBQUE7QUFBQSxzQkFBQUMsT0FBZ0MsZ0NBQXdCO0FBQUEsc0JBQUFBLE9BQzNDLHdCQUFJLEdBQUM7QUFBQTtBQUFBLFlBQUFDLGNBQUFILEdBQUFmLEdBR2xCLGtDQUFnQztBQUFBLFlBQUFtQixlQUFBSixH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QUFBQSxJQUNaO0FBQUEsS0FDRSxnREFzQkM7QUFBQSxJQXZCSCxRQUFBckIsSUFHUTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLFFENUtWO0FBQUEsOEJDK0tRLHVDQWlCSDtBQUFBLEtEaE1MO0FBQUE7QUFBQSxRQUFBTSxRQzZMa0I7QUFBQSxJQUNWO0FBQUEsUUFBQUMsUUFBcUIsZUFBQUQsUUFBQSxPQUFBQyxNQUFBO0FBQUE7QUFBQTtBQUFBLE1BQUFELFFBWFQ7QUFBQSxNQUFBZSxNQUNWO0FBQUEsTUFBQVYsSUFHUTtBQUFBLEtBQ1IsWUFDRSx3REFPUDtBQUFBLFNBQUFKLFFBTE87QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtQO0FBQUEsWUFBQWUsWUFBQXBDO0FBQUFBLElBR0gsUUFBQXFDLE9BQU07QUFBQSxVQUFBdkI7QUFBQUEsU0FBQUEsTURuTVI7QUFBQSw0QkNxTTZCO0FBQUEsS0RyTTdCO0FBQUE7QUFBQSxRQUFBd0IsUUNvTVksa0JBQUFDLE1BQVEsT0FBQUMsU0FBQTtBQUFBO0FBQUEsS0FEbEIsUUFBQUgsU0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxRRG5NUjtBQUFBO0FBQUEsTUNxTTZCO0FBQUEsTUFESztBQUFBO0FBQUEsU0FBQXlCLFFBQXRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUNtQjtBQUFBLFlBQUFFLFdBQUF6RCxHQUFBMEQsUUFBQTFDO0FBQUFBLFFBQUEwQyxPQUc3QjtBQUFBO0FBQUEsYUFBQUwsT0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxNRHhNUjtBQUFBLDZCQzBNNkI7QUFBQSxNRDFNN0I7QUFBQTtBQUFBLFNBQUE0QixTQ3lNeUI7QUFBQSxLQUFhO0FBQUE7QUFBQSxHQUNMO0FBQUE7QUFBQSxJQUFBQyxrQkQxTWpDO0FBQUEsSUFBQUM7QUFBQUEsTUFBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0NjQ3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2RpZ2VzdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVXRpbGl0eSBmdW5jdGlvbnMgKilcblxubGV0IGhleF9vZl9zdHJpbmcgZCA9XG4gIGxldCBjaGFyX2hleCBuID1cbiAgICBDaGFyLmNociAoaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyArIG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgQ2hhci5jb2RlICdhJyArIG4gLSAxMCkgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggZCBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIChsZW4gKiAyKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBzdHJpbmdfb2ZfaGV4IHMgPVxuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5vZl9oZXhcIiBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIFN0cmluZy5pbml0IChTdHJpbmcubGVuZ3RoIHMgLyAyKSAoZnVuIGkgLT4gQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpXG5cbigqIEdlbmVyaWMgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSB0ID0gc3RyaW5nXG4gIHZhbCBoYXNoX2xlbmd0aCA6IGludFxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHN0cmluZyA6IHN0cmluZyAtPiB0XG4gIHZhbCBieXRlcyA6IGJ5dGVzIC0+IHRcbiAgdmFsIHN1YnN0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgdmFsIHN1YmJ5dGVzIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB0XG4gIHZhbCBjaGFubmVsIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdFxuICB2YWwgZmlsZSA6IHN0cmluZyAtPiB0XG4gIHZhbCBvdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiB0IC0+IHVuaXRcbiAgdmFsIGlucHV0IDogaW5fY2hhbm5lbCAtPiB0XG4gIHZhbCB0b19oZXggOiB0IC0+IHN0cmluZ1xuICB2YWwgb2ZfaGV4IDogc3RyaW5nIC0+IHRcbmVuZFxuXG4oKiBCTEFLRTIgaGFzaGluZywgcGFyYW1ldGVyaXplZCBieSBoYXNoIHNpemUgKilcblxubW9kdWxlIEJMQUtFMiAoWDogc2lnIHZhbCBoYXNoX2xlbmd0aCA6IGludCBlbmQpIDogUyA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBoYXNoX2xlbmd0aCA9XG4gICAgaWYgWC5oYXNoX2xlbmd0aCA8IDEgfHwgWC5oYXNoX2xlbmd0aCA+IDY0XG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5CTEFLRTI6IHdyb25nIGhhc2ggc2l6ZVwiO1xuICAgIFguaGFzaF9sZW5ndGhcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIHR5cGUgc3RhdGVcblxuICBleHRlcm5hbCBjcmVhdGVfZ2VuOiBpbnQgLT4gc3RyaW5nIC0+IHN0YXRlID0gXCJjYW1sX2JsYWtlMl9jcmVhdGVcIlxuICBleHRlcm5hbCB1cGRhdGU6IHN0YXRlIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYmxha2UyX3VwZGF0ZVwiXG4gIGV4dGVybmFsIGZpbmFsOiBzdGF0ZSAtPiBpbnQgLT4gdCA9IFwiY2FtbF9ibGFrZTJfZmluYWxcIlxuICBleHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBpbnQgLT4gc3RyaW5nIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsYWtlMl9zdHJpbmdcIlxuXG4gIGxldCBjcmVhdGUgKCkgPSBjcmVhdGVfZ2VuIGhhc2hfbGVuZ3RoIFwiXCJcblxuICBsZXQgc3RyaW5nIHN0ciA9XG4gICAgdW5zYWZlX3N0cmluZyBoYXNoX2xlbmd0aCBcIlwiIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9XG4gICAgc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbiAgbGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIjtcbiAgICB1bnNhZmVfc3RyaW5nIGhhc2hfbGVuZ3RoIFwiXCIgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID1cbiAgICBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG4gIGxldCBjaGFubmVsIGljIHRvcmVhZCA9XG4gICAgbGV0IGJ1Zl9zaXplID0gNDA5NiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgYnVmX3NpemUgaW5cbiAgICBsZXQgY3R4ID0gY3JlYXRlICgpIGluXG4gICAgaWYgdG9yZWFkIDwgMCB0aGVuIGJlZ2luXG4gICAgICBsZXQgcmVjIGRvX3JlYWQgKCkgPVxuICAgICAgICBsZXQgbiA9IEluX2NoYW5uZWwuaW5wdXQgaWMgYnVmIDAgYnVmX3NpemUgaW5cbiAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGhcbiAgICAgICAgZWxzZSAodXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjsgZG9fcmVhZCAoKSlcbiAgICAgIGluIGRvX3JlYWQgKClcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBkb19yZWFkIHRvcmVhZCA9XG4gICAgICAgIGlmIHRvcmVhZCA9IDAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGggZWxzZSBiZWdpblxuICAgICAgICAgIGxldCBuID0gSW5fY2hhbm5lbC5pbnB1dCBpYyBidWYgMCAoSW50Lm1pbiBidWZfc2l6ZSB0b3JlYWQpIGluXG4gICAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgdXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjtcbiAgICAgICAgICAgIGRvX3JlYWQgKHRvcmVhZCAtIG4pXG4gICAgICAgICAgZW5kXG4gICAgICAgIGVuZFxuICAgICAgaW4gZG9fcmVhZCB0b3JlYWRcbiAgICBlbmRcblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gaGFzaF9sZW5ndGhcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiBoYXNoX2xlbmd0aCB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IGhhc2hfbGVuZ3RoICogMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0Lm9mX2hleFwiO1xuICAgIHN0cmluZ19vZl9oZXggc1xuXG5lbmRcblxubW9kdWxlIEJMQUtFMTI4ID0gQkxBS0UyKHN0cnVjdCBsZXQgaGFzaF9sZW5ndGggPSAxNiBlbmQpXG5tb2R1bGUgQkxBS0UyNTYgPSBCTEFLRTIoc3RydWN0IGxldCBoYXNoX2xlbmd0aCA9IDMyIGVuZClcbm1vZHVsZSBCTEFLRTUxMiA9IEJMQUtFMihzdHJ1Y3QgbGV0IGhhc2hfbGVuZ3RoID0gNjQgZW5kKVxuXG4oKiBNRDUgaGFzaGluZyAqKVxuXG5tb2R1bGUgTUQ1ID0gc3RydWN0XG5cbiAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgbGV0IGhhc2hfbGVuZ3RoID0gMTZcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIGV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG4gIGV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG4gIGxldCBzdHJpbmcgc3RyID1cbiAgICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG4gIGxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgICBzdHJpbmdfb2ZfaGV4IHNcblxuZW5kXG5cbigqIERlZmF1bHQgZXhwb3J0ZWQgaW1wbGVtZW50YXRpb24gaXMgTUQ1ICopXG5cbmluY2x1ZGUgTUQ1XG5cbmxldCBmcm9tX2hleCA9IG9mX2hleFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JsYWtlMl9maW5hbCIsImNhbWxfYmxha2UyX3N0cmluZyIsImNhbWxfYmxha2UyX3VwZGF0ZSIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tZDVfY2hhbiIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0luX2NoYW5uZWwiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiaGV4X29mX3N0cmluZyIsImQiLCJjaGFyX2hleCIsIm4iLCJsZW4iLCJyZXN1bHQiLCJpIiwieCIsImNzdF9EaWdlc3Rfb2ZfaGV4Iiwic3RyaW5nX29mX2hleCIsInMiLCJkaWdpdCIsImMiLCJjc3RfRGlnZXN0X3N1YnN0cmluZyIsImNzdF9EaWdlc3RfdG9faGV4IiwiQkxBS0UyIiwiWCIsImhhc2hfbGVuZ3RoIiwiY29tcGFyZSIsImVxdWFsIiwiY3N0Iiwic3RyaW5nIiwic3RyIiwiYnl0ZXMiLCJiIiwic3Vic3RyaW5nIiwib2ZzIiwic3ViYnl0ZXMiLCJjaGFubmVsIiwiaWMiLCJ0b3JlYWQiLCJidWYiLCJjdHgiLCJidWZfc2l6ZSIsImZpbGUiLCJmaWxlbmFtZSIsIm91dHB1dCIsImNoYW4iLCJkaWdlc3QiLCJpbnB1dCIsInRvX2hleCIsIm9mX2hleCIsIkJMQUtFMTI4IiwiQkxBS0UyNTYiLCJCTEFLRTUxMiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxn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QUExQixVQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFFLE9BQUFDO0FBQUFBLElDOEpJLDBEQUF1QztBQUFBO0FBQUEsWUFBQUMsTUFBQUMsR0FFcEIsT0FBMEIsT0FBMUIsK0JBQTBCO0FBQUEsWUFBQUMsVUFBQUgsS0FBQUksS0FBQXRCO0FBQUFBLElBRzdDO0FBQUEsS0FFSyxxQ0FBeUI7QUFBQSxJQUR6QixpREFDeUI7QUFBQTtBQUFBLFlBQUF1QixTQUFBSCxHQUFBRSxLQUFBdEI7QUFBQUEsSUFFRyxPQUEwQixVQUExQix5Q0FBa0M7QUFBQTtBQUFBLFlBQUE4QixLQUFBQztBQUFBQSxJQUduRTtBQUFBLHNDQUFBTixJQUE2Qyw0QkFBZSxHQUFDO0FBQUE7QUFBQSxZQUFBTyxPQUFBQyxNQUFBQyxRQUV0QywwQ0FBeUI7QUFBQSxZQUFBQyxNQUFBRixNQUVqQyxzQ0FBMkI7QUFBQSxZQUFBRyxPQUFBdkM7QUFBQUEsSUFHMUM7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxZQUFBd0MsT0FBQS9CO0FBQUFBLElBR2Y7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxHRHRMbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNDg3MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9iaWdhcnJheS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBNYW51ZWwgU2VycmFubyBldCBYYXZpZXIgTGVyb3ksIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtCaWdhcnJheV06IGxhcmdlLCBtdWx0aS1kaW1lbnNpb25hbCwgbnVtZXJpY2FsIGFycmF5cyAqKVxuXG4oKiBUaGVzZSB0eXBlcyBpbiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0YWJsZXMgaW5cbiAgIC4uL3R5cGluZy90eXBlb3B0Lm1sICopXG5cbnR5cGUgZmxvYXQxNl9lbHQgPSBGbG9hdDE2X2VsdFxudHlwZSBmbG9hdDMyX2VsdCA9IEZsb2F0MzJfZWx0XG50eXBlIGZsb2F0NjRfZWx0ID0gRmxvYXQ2NF9lbHRcbnR5cGUgaW50OF9zaWduZWRfZWx0ID0gSW50OF9zaWduZWRfZWx0XG50eXBlIGludDhfdW5zaWduZWRfZWx0ID0gSW50OF91bnNpZ25lZF9lbHRcbnR5cGUgaW50MTZfc2lnbmVkX2VsdCA9IEludDE2X3NpZ25lZF9lbHRcbnR5cGUgaW50MTZfdW5zaWduZWRfZWx0ID0gSW50MTZfdW5zaWduZWRfZWx0XG50eXBlIGludDMyX2VsdCA9IEludDMyX2VsdFxudHlwZSBpbnQ2NF9lbHQgPSBJbnQ2NF9lbHRcbnR5cGUgaW50X2VsdCA9IEludF9lbHRcbnR5cGUgbmF0aXZlaW50X2VsdCA9IE5hdGl2ZWludF9lbHRcbnR5cGUgY29tcGxleDMyX2VsdCA9IENvbXBsZXgzMl9lbHRcbnR5cGUgY29tcGxleDY0X2VsdCA9IENvbXBsZXg2NF9lbHRcblxuKCogS2VlcCB0aGUgb3JkZXIgb2YgdGhlc2UgY29uc3RydWN0b3JzIGluIHN5bmMgd2l0aCB0aGUgY2FtbF9iYV9raW5kXG4gICBlbnVtZXJhdGlvbiBpbiBiaWdhcnJheS5oICopXG5cbnR5cGUgKCdhLCAnYikga2luZCA9XG4gIHwgRmxvYXQzMiA6IChmbG9hdCwgZmxvYXQzMl9lbHQpIGtpbmRcbiAgfCBGbG9hdDY0IDogKGZsb2F0LCBmbG9hdDY0X2VsdCkga2luZFxuICB8IEludDhfc2lnbmVkIDogKGludCwgaW50OF9zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50OF91bnNpZ25lZCA6IChpbnQsIGludDhfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MTZfc2lnbmVkIDogKGludCwgaW50MTZfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3Vuc2lnbmVkIDogKGludCwgaW50MTZfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MzIgOiAoaW50MzIsIGludDMyX2VsdCkga2luZFxuICB8IEludDY0IDogKGludDY0LCBpbnQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQgOiAoaW50LCBpbnRfZWx0KSBraW5kXG4gIHwgTmF0aXZlaW50IDogKG5hdGl2ZWludCwgbmF0aXZlaW50X2VsdCkga2luZFxuICB8IENvbXBsZXgzMiA6IChDb21wbGV4LnQsIGNvbXBsZXgzMl9lbHQpIGtpbmRcbiAgfCBDb21wbGV4NjQgOiAoQ29tcGxleC50LCBjb21wbGV4NjRfZWx0KSBraW5kXG4gIHwgQ2hhciA6IChjaGFyLCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEZsb2F0MTYgOiAoZmxvYXQsIGZsb2F0MTZfZWx0KSBraW5kXG5cbnR5cGUgY19sYXlvdXQgPSBDX2xheW91dF90eXBcbnR5cGUgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dF90eXAgKCoqKVxuXG50eXBlICdhIGxheW91dCA9XG4gICAgQ19sYXlvdXQ6IGNfbGF5b3V0IGxheW91dFxuICB8IEZvcnRyYW5fbGF5b3V0OiBmb3J0cmFuX2xheW91dCBsYXlvdXRcblxubGV0IGZsb2F0MTYgPSBGbG9hdDE2XG5sZXQgZmxvYXQzMiA9IEZsb2F0MzJcbmxldCBmbG9hdDY0ID0gRmxvYXQ2NFxubGV0IGludDhfc2lnbmVkID0gSW50OF9zaWduZWRcbmxldCBpbnQ4X3Vuc2lnbmVkID0gSW50OF91bnNpZ25lZFxubGV0IGludDE2X3NpZ25lZCA9IEludDE2X3NpZ25lZFxubGV0IGludDE2X3Vuc2lnbmVkID0gSW50MTZfdW5zaWduZWRcbmxldCBpbnQzMiA9IEludDMyXG5sZXQgaW50NjQgPSBJbnQ2NFxubGV0IGludCA9IEludFxubGV0IG5hdGl2ZWludCA9IE5hdGl2ZWludFxubGV0IGNvbXBsZXgzMiA9IENvbXBsZXgzMlxubGV0IGNvbXBsZXg2NCA9IENvbXBsZXg2NFxubGV0IGNoYXIgPSBDaGFyXG5cbmxldCBraW5kX3NpemVfaW5fYnl0ZXMgOiB0eXBlIGEgYi4gKGEsIGIpIGtpbmQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBGbG9hdDE2IC0+IDJcbiAgfCBGbG9hdDMyIC0+IDRcbiAgfCBGbG9hdDY0IC0+IDhcbiAgfCBJbnQ4X3NpZ25lZCAtPiAxXG4gIHwgSW50OF91bnNpZ25lZCAtPiAxXG4gIHwgSW50MTZfc2lnbmVkIC0+IDJcbiAgfCBJbnQxNl91bnNpZ25lZCAtPiAyXG4gIHwgSW50MzIgLT4gNFxuICB8IEludDY0IC0+IDhcbiAgfCBJbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBOYXRpdmVpbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBDb21wbGV4MzIgLT4gOFxuICB8IENvbXBsZXg2NCAtPiAxNlxuICB8IENoYXIgLT4gMVxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfbGF5b3V0IGVudW1lcmF0aW9uXG4gICBpbiBiaWdhcnJheS5oICopXG5cbmxldCBjX2xheW91dCA9IENfbGF5b3V0XG5sZXQgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dFxuXG5tb2R1bGUgR2VuYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdFxuICBleHRlcm5hbCBjcmVhdGU6ICgnYSwgJ2IpIGtpbmQgLT4gJ2MgbGF5b3V0IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgdFxuICAgICA9IFwiY2FtbF9iYV9jcmVhdGVcIlxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYVxuICAgICA9IFwiY2FtbF9iYV9nZXRfZ2VuZXJpY1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IGFycmF5IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfc2V0X2dlbmVyaWNcIlxuXG4gIGxldCByZWMgY2xvb3AgYXJyIGlkeCBmIGNvbCBtYXggPVxuICAgIGlmIGNvbCA9IEFycmF5Lmxlbmd0aCBpZHggdGhlbiBzZXQgYXJyIGlkeCAoZiBpZHgpXG4gICAgZWxzZSBmb3IgaiA9IDAgdG8gcHJlZCBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGNsb29wIGFyciBpZHggZiAoc3VjYyBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgcmVjIGZsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPCAwIHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAxIHRvIG1heC4oY29sKSBkb1xuICAgICAgICAgICBpZHguKGNvbCkgPC0gajtcbiAgICAgICAgICAgZmxvb3AgYXJyIGlkeCBmIChwcmVkIGNvbCkgbWF4XG4gICAgICAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW1zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltcyBpblxuICAgIGxldCBkbGVuID0gQXJyYXkubGVuZ3RoIGRpbXMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY2xvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMCkgZiAwIGRpbXM7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZmxvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMSkgZiAocHJlZCBkbGVuKSBkaW1zOyBhcnJcblxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuICBsZXQgaW5pdCA9IG9mX3ZhbHVlXG5lbmRcblxubW9kdWxlIEFycmF5MSA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbXxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMVwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzFcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8xXCJcbiAgZXh0ZXJuYWwgZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltIGFycilcblxuICBleHRlcm5hbCBzdWI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgJ2MpIHQgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlICh0eXBlIHQpIChhIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpIG4gPVxuICAgIG1hdGNoIGxheW91dCBhIHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF0gOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMSB0byBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0gZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0gZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCAoQXJyYXkubGVuZ3RoIGRhdGEpIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZGF0YSAtIDEgZG8gdW5zYWZlX3NldCBiYSAoaSArIG9mcykgZGF0YS4oaSkgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTIgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMlwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8yXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnQgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodCBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5Mi5vZl9hcnJheTogbm9uLXJlY3Rhbmd1bGFyIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIHJvdy4oailcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MyA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMjsgZGltM3xdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8zXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV9zZXRfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzNcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzNcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGRpbTM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzNcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpICogKGRpbTMgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9yaWdodF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfbGVmdF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgZm9yIGsgPSAwIHRvIHByZWQgZGltMyBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgayA9IDEgdG8gZGltMyBkb1xuICAgICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgZGltMyA9IGlmIGRpbTIgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICBsZXQgY29sID0gcm93LihqKSBpblxuICAgICAgICBpZiBBcnJheS5sZW5ndGggY29sIDw+IGRpbTMgdGhlblxuICAgICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgICAgZm9yIGsgPSAwIHRvIGRpbTMgLSAxIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIChrICsgb2ZzKSBjb2wuKGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkwOiAoJ2EsICdiLCAnYykgQXJyYXkwLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkxOiAoJ2EsICdiLCAnYykgQXJyYXkxLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkyOiAoJ2EsICdiLCAnYykgQXJyYXkyLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkzOiAoJ2EsICdiLCAnYykgQXJyYXkzLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxubGV0IGFycmF5MF9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDAgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTBfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5MV9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDEgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTFfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5Ml9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDIgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTJfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5M19vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDMgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTNfb2ZfZ2VuYXJyYXlcIlxuXG5leHRlcm5hbCByZXNoYXBlOlxuICAgKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnQgLT4gaW50IGFycmF5IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiY2FtbF9iYV9yZXNoYXBlXCJcbmxldCByZXNoYXBlXzAgYSA9IHJlc2hhcGUgYSBbfHxdXG5sZXQgcmVzaGFwZV8xIGEgZGltMSA9IHJlc2hhcGUgYSBbfGRpbTF8XVxubGV0IHJlc2hhcGVfMiBhIGRpbTEgZGltMiA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMnxdXG5sZXQgcmVzaGFwZV8zIGEgZGltMSBkaW0yIGRpbTMgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTI7ZGltM3xdXG5cbigqIEZvcmNlIGNhbWxfYmFfZ2V0X3sxLDIsMyxOfSB0byBiZSBsaW5rZWQgaW4sIHNpbmNlIHdlIGRvbid0IHJlZmVyXG4gICB0byB0aG9zZSBwcmltaXRpdmVzIGRpcmVjdGx5IGluIHRoaXMgZmlsZSAqKVxuXG5sZXQgXyA9XG4gIGxldCBfID0gR2VuYXJyYXkuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkxLmdldCBpblxuICBsZXQgXyA9IEFycmF5Mi5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTMuZ2V0IGluXG4gICgpXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5leHRlcm5hbCBnZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzFcIlxuZXh0ZXJuYWwgZ2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8yXCJcbmV4dGVybmFsIGdldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfM1wiXG5leHRlcm5hbCBzZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzFcIlxuZXh0ZXJuYWwgc2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8yXCJcbmV4dGVybmFsIHNldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfM1wiXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmFfY2hhbmdlX2xheW91dCIsImNhbWxfYmFfY3JlYXRlIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfYmFfZGltXzIiLCJjYW1sX2JhX2tpbmQiLCJjYW1sX2JhX251bV9kaW1zIiwiY2FtbF9iYV9yZXNoYXBlIiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYmFfc2V0XzIiLCJjYW1sX2JhX3NldF8zIiwiY2FtbF9iYV9zZXRfZ2VuZXJpYyIsImNhbWxfYmFfc2xpY2UiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX211bCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N5cyIsImtpbmRfc2l6ZV9pbl9ieXRlcyIsInBhcmFtIiwiY2xvb3AiLCJhcnIiLCJpZHgiLCJjb2wiLCJtYXgiLCJqIiwiZmxvb3AiLCJpbml0Iiwia2luZCIsImxheW91dCIsImRpbXMiLCJkbGVuIiwiYSIsIm4iLCJkIiwiaSIsInNpemVfaW5fYnl0ZXMiLCJjcmVhdGUiLCJnZXQiLCJzZXQiLCJvZl92YWx1ZSIsInYiLCJkaW0iLCJzbGljZSIsIm9mX2FycmF5IiwiZGF0YSIsImJhIiwib2ZzIiwiZGltMSIsImRpbTIiLCJzbGljZV9sZWZ0Iiwic2xpY2VfcmlnaHQiLCJyb3ciLCJkaW0zIiwic2xpY2VfbGVmdF8xIiwibSIsInNsaWNlX3JpZ2h0XzEiLCJzbGljZV9sZWZ0XzIiLCJzbGljZV9yaWdodF8yIiwiayIsImNzdF9CaWdhcnJheV9BcnJheTNfb2ZfYXJyYXlfbiIsImFycmF5MF9vZl9nZW5hcnJheSIsImFycmF5MV9vZl9nZW5hcnJheSIsImFycmF5Ml9vZl9nZW5hcnJheSIsImFycmF5M19vZl9nZW5hcnJheSIsInJlc2hhcGVfMCIsInJlc2hhcGVfMSIsInJlc2hhcGVfMiIsInJlc2hhcGVfMyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxtQkFB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QUE7QUFBQSxJQVNGO0FBQUEsR0FBRTtBQUFBLFlBQUFFLG1CQUFBN0I7QUFBQUEsSUFZRDtBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUE4QixtQkFBQTlCO0FBQUFBLElBRTNDO0FBQUE7QUFBQSxjQUNFLG1EQUF5QztBQUFBO0FBQUEsWUFBQStCLG1CQUFBL0I7QUFBQUEsSUFFM0M7QUFBQTtBQUFBLGNBQ0UsbURBQXlDO0FBQUE7QUFBQSxZQUFBZ0MsbUJBQUFoQztBQUFBQSxJQUUzQztBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUFpQyxVQUFBakMsR0FLOUIsOEJBQWM7QUFBQSxZQUFBa0MsVUFBQWxDLEdBQUFnQixNQUNULG9DQUFrQjtBQUFBLFlBQUFtQixVQUFBbkMsR0FBQWdCLE1BQUFDO0FBQUFBLElBQ2IsMENBQXVCO0FBQUE7QUFBQSxZQUFBbUIsVUFBQXBDLEdBQUFnQixNQUFBQyxNQUFBSTtBQUFBQSxJQUNsQixnREFBNEI7QUFBQTtBQUFBLEdBVTNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDVaRiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI1MzcwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3JhbmRvbS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENhbWJpdW0sIENvbGxlZ2UgZGUgRnJhbmNlIGFuZCBJbnJpYSAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICBvcGVuIEJpZ2FycmF5XG5cbiAgdHlwZSB0ID0gKGludDY0LCBpbnQ2NF9lbHQsIGNfbGF5b3V0KSBBcnJheTEudFxuXG4gIGV4dGVybmFsIG5leHQ6IHQgLT4gKGludDY0W0B1bmJveGVkXSlcbiAgICAgID0gXCJjYW1sX2x4bV9uZXh0XCIgXCJjYW1sX2x4bV9uZXh0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGUgKCkgOiB0ID1cbiAgICBBcnJheTEuY3JlYXRlIEludDY0IENfbGF5b3V0IDRcblxuICBsZXQgc2V0IHMgaTEgaTIgaTMgaTQgPVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMCAoSW50NjQubG9nb3IgaTEgMUwpOyAoKiBtdXN0IGJlIG9kZCAqKVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMSBpMjtcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDIgKGlmIGkzIDw+IDBMIHRoZW4gaTMgZWxzZSAxTCk7ICgqIG11c3Qgbm90IGJlIDAgKilcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDMgKGlmIGk0IDw+IDBMIHRoZW4gaTQgZWxzZSAyTCkgKCogbXVzdCBub3QgYmUgMCAqKVxuXG4gIGxldCBtayBpMSBpMiBpMyBpNCA9XG4gICAgbGV0IHMgPSBjcmVhdGUgKCkgaW5cbiAgICBzZXQgcyBpMSBpMiBpMyBpNDsgc1xuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeCA9XG4gICAgXCJseG0xOlwiXG4gICAgKCogXCJseG1cIiBkZW5vdGVzIHRoZSBhbGdvcml0aG0gY3VycmVudGx5IGluIHVzZSwgYW5kICcxJyBpc1xuICAgICAgIGEgdmVyc2lvbiBudW1iZXIuIFdlIHNob3VsZCB1cGRhdGUgdGhpcyBwcmVmaXggaWYgd2UgY2hhbmdlXG4gICAgICAgdGhlIFJhbmRvbSBhbGdvcml0aG0gb3IgdGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0LCBzbyB0aGF0IHVzZXJzXG4gICAgICAgZ2V0IGEgY2xlYW4gZXJyb3IgaW5zdGVhZCBvZiBiZWxpZXZpbmcgdGhhdCB0aGV5IGZhaXRoZnVsbHlcbiAgICAgICByZXByb2R1Y2UgdGhlaXIgcHJldmlvdXMgc3RhdGUgYW5kIGluIGZhY3QgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAgc3RyZWFtLlxuXG4gICAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNvbnN0cmFpbnQgdG8ga2VlcCB0aGUgc2FtZVxuICAgICAgIFwiPG5hbWU+PHZlcj46PGRhdGE+XCIgZm9ybWF0IG9yIG1lc3NhZ2Ugc2l6ZSBpbiBmdXR1cmUgdmVyc2lvbnMsXG4gICAgICAgd2UgY291bGQgY2hhbmdlIHRoZSBmb3JtYXQgY29tcGxldGVseSBpZiB3ZSB3YW50ZWQgYXMgbG9uZ1xuICAgICAgIGFzIHRoZXJlIGlzIG5vIGNvbmZ1c2lvbiBwb3NzaWJsZSB3aXRoIHRoZSBwcmV2aW91cyBmb3JtYXRzLiAqKVxuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gPVxuICAgIFN0cmluZy5sZW5ndGggc2VyaWFsaXphdGlvbl9wcmVmaXhcblxuICBsZXQgdG9fYmluYXJ5X3N0cmluZyBzID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKHByZWZsZW4gKyA0ICogOCkgaW5cbiAgICBCeXRlcy5ibGl0X3N0cmluZyBwcmVmaXggMCBidWYgMCBwcmVmbGVuO1xuICAgIGZvciBpID0gMCB0byAzIGRvXG4gICAgICBCeXRlcy5zZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgaSAqIDgpIChBcnJheTEuZ2V0IHMgaSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG5cbiAgbGV0IG9mX2JpbmFyeV9zdHJpbmcgYnVmID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggYnVmIDw+IHByZWZsZW4gKyA0ICogOFxuICAgICAgIHx8IG5vdCAoU3RyaW5nLnN0YXJ0c193aXRoIH5wcmVmaXggYnVmKVxuICAgIHRoZW5cbiAgICAgIGZhaWx3aXRoXG4gICAgICAgIChcIlJhbmRvbS5TdGF0ZS5vZl9iaW5hcnlfc3RyaW5nOiBleHBlY3RlZCBhIGZvcm1hdCBcXFxuICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCBPQ2FtbCBcIiBeIFN5cy5vY2FtbF92ZXJzaW9uKTtcbiAgICBsZXQgaTEgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDAgKiA4KSBpblxuICAgIGxldCBpMiA9IFN0cmluZy5nZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgMSAqIDgpIGluXG4gICAgbGV0IGkzID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAyICogOCkgaW5cbiAgICBsZXQgaTQgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDMgKiA4KSBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5cbiAgbGV0IGFzc2lnbiAoZHN0OiB0KSAoc3JjOiB0KSA9XG4gICAgQXJyYXkxLmJsaXQgc3JjIGRzdFxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCBzJyA9IGNyZWF0ZSgpIGluIGFzc2lnbiBzJyBzOyBzJ1xuXG4gICgqIFRoZSBzZWVkIGlzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSXQgY2FuIGJlIGp1c3Qgb25lIGludGVnZXIsXG4gICAgIGJ1dCBpdCBjYW4gYWxzbyBiZSAxMiBvciBtb3JlIGJ5dGVzLiAgVG8gaGlkZSB0aGUgZGlmZmVyZW5jZSxcbiAgICAgd2Ugc2VyaWFsaXplIHRoZSBhcnJheSBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLCB0aGVuIGhhc2ggdGhlXG4gICAgIHNlcXVlbmNlIHdpdGggTUQ1IChEaWdlc3QuYnl0ZXMpLiAgTUQ1IGdpdmVzIG9ubHkgMTI4IGJpdHMgd2hpbGVcbiAgICAgd2UgbmVlZCAyNTYgYml0cywgc28gd2UgaGFzaCB0d2ljZSB3aXRoIGRpZmZlcmVudCBzdWZmaXhlcy4gKilcbiAgbGV0IHJlaW5pdCBzIHNlZWQgPVxuICAgIGxldCBuID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBsZXQgYiA9IEJ5dGVzLmNyZWF0ZSAobiAqIDggKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBuLTEgZG9cbiAgICAgIEJ5dGVzLnNldF9pbnQ2NF9sZSBiIChpICogOCkgKEludDY0Lm9mX2ludCBzZWVkLihpKSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAxJztcbiAgICBsZXQgZDEgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAyJztcbiAgICBsZXQgZDIgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIHNldCBzIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQxIDApXG4gICAgICAgICAgKFN0cmluZy5nZXRfaW50NjRfbGUgZDEgOClcbiAgICAgICAgICAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMiAwKVxuICAgICAgICAgIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQyIDgpXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHMgPSBjcmVhdGUoKSBpbiByZWluaXQgcyBzZWVkOyBzXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID1cbiAgICBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgbWluX2ludDMxID0gLTB4NDAwMF8wMDAwXG4gICAgICAoKiA9IC0ye14zMH0sIHdoaWNoIGlzIFttaW5faW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gIGxldCBtYXhfaW50MzEgPSAweDNGRkZfRkZGRlxuICAgICAgKCogPSAgMnteMzB9LTEsIHdoaWNoIGlzIFttYXhfaW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gICgqIGF2b2lkIGludGVnZXIgbGl0ZXJhbHMgZm9yIHRoZXNlLCAzMi1iaXQgT0NhbWwgd291bGQgcmVqZWN0IHRoZW06ICopXG4gIGxldCBtaW5faW50MzIgPSAtKDEgbHNsIDMxKVxuICAgICAgKCogPSAtMHg4MDAwXzAwMDAgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG4gIGxldCBtYXhfaW50MzIgPSAoMSBsc2wgMzEpIC0gMVxuICAgICAgKCogPSAgMHg3RkZGX0ZGRkYgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG5cbiAgKCogUmV0dXJuIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMl4zMCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW25dIChleGNsdWRlZCkuXG4gICAgIFtib3VuZF0gbWF5IGJlIGFueSBwb3NpdGl2ZSBbaW50XS4gIFttYXNrXSBtdXN0IGJlIG9mIHRoZSBmb3JtIFsye15pfS0xXVxuICAgICBhbmQgZ3JlYXRlciBvciBlcXVhbCB0byBbbl0uICBMYXJnZXIgdmFsdWVzIG9mIFttYXNrXSBtYWtlIHRoZSBmdW5jdGlvblxuICAgICBydW4gZmFzdGVyIChmZXdlciBzYW1wbGVzIGFyZSByZWplY3RlZCkuICBTbWFsbGVyIHZhbHVlcyBvZiBbbWFza11cbiAgICAgYXJlIHVzYWJsZSBvbiBhIHdpZGVyIHJhbmdlIG9mIE9DYW1sIGltcGxlbWVudGF0aW9ucy4gICopXG4gIGxldCByZWMgaW50X2F1eCBzIG4gbWFzayA9XG4gICAgKCogV2Ugc3RhcnQgYnkgZHJhd2luZyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGluIHRoZSBbIFswLCBtYXNrXSBdIHJhbmdlICopXG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXNrIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgKCogRm9yIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHQgYmV0d2VlbiAwIGluY2x1ZGVkIGFuZCBbbl1cbiAgICAgKiBleGNsdWRlZCwgdGhlIHJhbmRvbSBudW1iZXIgW3JdIG11c3QgaGF2ZSBiZWVuIGRyYXduIHVuaWZvcm1seSBpblxuICAgICAqIGFuIGludGVydmFsIHdob3NlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIFtuXS4gVG8gYWNoaWV2ZSB0aGlzLFxuICAgICAqIHdlIHVzZSByZWplY3Rpb24gc2FtcGxpbmcgb24gdGhlIGdyZWF0ZXN0IGludGVydmFsIFsgWzAsIGsqbi0xXSBdXG4gICAgICogdGhhdCBmaXRzIGluIFsgWzAsIG1hc2tdIF0uICBUaGF0IGlzLCB3ZSByZWplY3QgdGhlXG4gICAgICogc2FtcGxlIGlmIGl0IGZhbGxzIG91dHNpZGUgb2YgdGhpcyBpbnRlcnZhbCwgYW5kIGRyYXcgYWdhaW4uXG4gICAgICogVGhpcyBpcyB3aGF0IHRoZSB0ZXN0IGJlbG93IGRvZXMsIHdoaWxlIGNhcmVmdWx5IGF2b2lkaW5nXG4gICAgICogb3ZlcmZsb3dzIGFuZCBzcGFyaW5nIGEgZGl2aXNpb24gW21hc2sgLyBuXS4gKilcbiAgICBpZiByIC0gdiA+IG1hc2sgLSBuICsgMSB0aGVuIGludF9hdXggcyBuIG1hc2sgZWxzZSB2XG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtib3VuZF0gKGV4Y2x1ZGVkKS5cbiAgICAgVGhlIGJvdW5kIG11c3QgZml0IGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMuXG4gICAgIFRoaXMgZnVuY3Rpb24geWllbGRzIHRoZSBzYW1lIG91dHB1dCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlZ2VyIHNpemUuICopXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiBtYXhfaW50MzEgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludF9hdXggcyBib3VuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLlxuICAgICBbYm91bmRdIG1heSBiZSBhbnkgcG9zaXRpdmUgW2ludF0uICopXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICAoKiBXaGVuIHRoZSBib3VuZCBmaXRzIGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMsIHdlIHVzZSB0aGUgc2FtZSBtYXNrXG4gICAgICAgYXMgaW4gZnVuY3Rpb24gW2ludF0gc28gYXMgdG8geWllbGQgdGhlIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICBzdXBwb3J0ZWQgYnkgT0NhbWwgKDMyLWJpdCBPQ2FtbCwgNjQtYml0IE9DYW1sLCBhbmQgSmF2YVNjcmlwdCkuXG4gICAgICAgV2hlbiB0aGUgYm91bmQgZml0cyBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgW21heF9pbnQzMl1cbiAgICAgICBhcyB0aGUgbWFzayBzbyBhcyB0byB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gYWxsIHBsYXRmb3JtcyB3aGVyZVxuICAgICAgIFtTeXMuaW50X3NpemUgPj0gMzJdIChpLmUuIEphdmFTY3JpcHQgYW5kIDY0LWJpdCBPQ2FtbCkuICopXG4gICAgZWxzZVxuICAgICAgaW50X2F1eCBzIGJvdW5kXG4gICAgICAgIChpZiBib3VuZCA8PSBtYXhfaW50MzEgdGhlbiBtYXhfaW50MzFcbiAgICAgICAgIGVsc2UgaWYgYm91bmQgPD0gbWF4X2ludDMyIHRoZW4gbWF4X2ludDMyXG4gICAgICAgICBlbHNlIG1heF9pbnQpXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBUaGUgW25iaXRzXSBwYXJhbWV0ZXIgaXMgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgc2lnbmVkIGludGVnZXJzXG4gICAgIHdlIGRyYXcgZnJvbSBbc10uXG4gICAgIFdlIG11c3QgaGF2ZSBbLTJ7Xm5iaXRzIC0gMX0gPD0gbWluIDw9IG1heCA8IDJ7Xm5iaXRzIC0gMX1dLlxuICAgICBNb3Jlb3ZlciwgZm9yIHRoZSBpdGVyYXRpb24gdG8gY29udmVyZ2UgcXVpY2tseSwgdGhlIGludGVydmFsXG4gICAgIFtbbWluLCBtYXhdXSBzaG91bGQgaGF2ZSB3aWR0aCBhdCBsZWFzdCBbMntebmJpdHMgLSAxfV0uXG4gICAgIEFzIHRoZSB3aWR0aCBhcHByb2FjaGVzIHRoaXMgbG93ZXIgbGltaXQsIHRoZSBhdmVyYWdlIG51bWJlciBvZlxuICAgICBkcmF3cyBhcHByb2FjaGVzIDIsIHdpdGggYSBxdWl0ZSBoaWdoIHN0YW5kYXJkIGRldmlhdGlvbiAoMiArIGVwc2lsb24pLiAqKVxuICBsZXQgcmVjIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHMgPVxuICAgIGxldCBkcm9wID0gU3lzLmludF9zaXplIC0gbmJpdHMgaW5cbiAgICAoKiBUaGUgYml0c2hpZnRzIHJlcGxpY2F0ZSB0aGUgW25iaXRzXS10aCBiaXQgKHNpZ24gYml0KSB0byBoaWdoZXIgYml0czogKilcbiAgICBsZXQgciA9ICgoSW50NjQudG9faW50IChuZXh0IHMpKSBsc2wgZHJvcCkgYXNyIGRyb3AgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzIGVsc2UgclxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgW21hc2tdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9hdXhdLlxuICAgICBbbmJpdHNdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9pbl9sYXJnZV9yYW5nZV0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrIH5uYml0cyA9XG4gICAgbGV0IHNwYW4gPSBtYXggLSBtaW4gKyAxIGluXG4gICAgaWYgc3BhbiA8PSBtYXNrICgqIFtzcGFuXSBpcyBzbWFsbCBlbm91Z2ggKilcbiAgICAmJiBzcGFuID4gMCAgICAgKCogbm8gb3ZlcmZsb3cgb2NjdXJyZWQgd2hlbiBjb21wdXRpbmcgW3NwYW5dICopXG4gICAgdGhlblxuICAgICAgKCogSnVzdCBkcmF3IGEgbnVtYmVyIGluIFtbMCwgc3BhbildIGFuZCBzaGlmdCBpdCBieSBbbWluXS4gKilcbiAgICAgIG1pbiArIGludF9hdXggcyBzcGFuIG1hc2tcbiAgICBlbHNlXG4gICAgICAoKiBTcGFuIHRvbyBsYXJnZSwgdXNlIHRoZSBhbHRlcm5hdGl2ZSBkcmF3aW5nIG1ldGhvZC4gKilcbiAgICAgIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHNcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuXG4gICAgIFdlIG11c3QgaGF2ZSBbbWluIDw9IG1heF0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRfaW5fcmFuZ2VcIjtcbiAgICAoKiBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzEtYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zIHN1cHBvcnRlZCBieSBPQ2FtbC5cbiAgICAgICBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzItYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBKYXZhU2NyaXB0IGFuZCBvbiA2NC1iaXQgT0NhbWwuICopXG4gICAgaWYgbWluID49IG1pbl9pbnQzMSAmJiBtYXggPD0gbWF4X2ludDMxIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMxIH5uYml0czozMVxuICAgIGVsc2UgaWYgbWluID49IG1pbl9pbnQzMiAmJiBtYXggPD0gbWF4X2ludDMyIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMyIH5uYml0czozMlxuICAgIGVsc2VcbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludCB+bmJpdHM6U3lzLmludF9zaXplXG5cbiAgKCogUmV0dXJuIDMyIHJhbmRvbSBiaXRzIGFzIGFuIFtpbnQzMl0gKilcbiAgbGV0IGJpdHMzMiBzID1cbiAgICBJbnQ2NC50b19pbnQzMiAobmV4dCBzKVxuXG4gICgqIFJldHVybiBhbiBbaW50MzJdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgciA9IEludDMyLnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHMzMiBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50MzIuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFsKVxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQzMl0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQzMiAobmV4dCBzKSBpblxuICAgIGlmIHIgPCBtaW4gfHwgciA+IG1heCB0aGVuIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCBlbHNlIHJcblxuICBsZXQgaW50MzJfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMl9pbl9yYW5nZVwiXG4gICAgZWxzZVxuICAgICAgbGV0IHNwYW4gPSBJbnQzMi5zdWNjIChJbnQzMi5zdWIgbWF4IG1pbikgaW5cbiAgICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9pbl9yYW5nZV9hdXhdLiAqKVxuICAgICAgaWYgc3BhbiA8PSBJbnQzMi56ZXJvIHRoZW5cbiAgICAgICAgaW50MzJfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4XG4gICAgICBlbHNlXG4gICAgICAgIEludDMyLmFkZCBtaW4gKGludDMyYXV4IHMgc3BhbilcblxuICAoKiBSZXR1cm4gNjQgcmFuZG9tIGJpdHMgYXMgYW4gW2ludDY0XSAqKVxuICBsZXQgYml0czY0IHMgPVxuICAgIG5leHQgc1xuXG4gICgqIFJldHVybiBhbiBbaW50NjRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgciA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHM2NCBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50NjQuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFMKVxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQ2NF0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBuZXh0IHMgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggZWxzZSByXG5cbiAgbGV0IGludDY0X2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRfaW5fcmFuZ2VcIlxuICAgIGVsc2VcbiAgICAgIGxldCBzcGFuID0gSW50NjQuc3VjYyAoSW50NjQuc3ViIG1heCBtaW4pIGluXG4gICAgICAoKiBFeHBsYW5hdGlvbiBvZiB0aGlzIHRlc3Q6IHNlZSBjb21tZW50IGluIFtpbnRfaW5fcmFuZ2VfYXV4XS4gKilcbiAgICAgIGlmIHNwYW4gPD0gSW50NjQuemVybyB0aGVuXG4gICAgICAgIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heFxuICAgICAgZWxzZVxuICAgICAgICBJbnQ2NC5hZGQgbWluIChpbnQ2NGF1eCBzIHNwYW4pXG5cbiAgKCogUmV0dXJuIDMyIG9yIDY0IHJhbmRvbSBiaXRzIGFzIGEgW25hdGl2ZWludF0gKilcbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG4gICgqIFJldHVybiBhIFtuYXRpdmVpbnRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuICAoKiBSZXR1cm4gYSBbbmF0aXZlaW50XSBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnRfaW5fcmFuZ2UgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIH5taW4gfm1heCAtPlxuICAgICAgTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMl9pbl9yYW5nZSBzXG4gICAgICAgIH5taW46KE5hdGl2ZWludC50b19pbnQzMiBtaW4pIH5tYXg6KE5hdGl2ZWludC50b19pbnQzMiBtYXgpKVxuICAgIGVsc2UgZnVuIHMgfm1pbiB+bWF4IC0+XG4gICAgICBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0X2luX3JhbmdlIHNcbiAgICAgICAgfm1pbjooSW50NjQub2ZfbmF0aXZlaW50IG1pbikgfm1heDooSW50NjQub2ZfbmF0aXZlaW50IG1heCkpXG5cbiAgKCogUmV0dXJuIGEgZmxvYXQgMCA8IHggPCAxIHVuaWZvcm1seSBkaXN0cmlidXRlZCBhbW9uZyB0aGVcbiAgICAgbXVsdGlwbGVzIG9mIDJeLTUzICopXG4gIGxldCByZWMgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IGIgPSBuZXh0IHMgaW5cbiAgICBsZXQgbiA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxMSBpblxuICAgIGlmIG4gPD4gMEwgdGhlbiBJbnQ2NC50b19mbG9hdCBuICouIDB4MS5wLTUzIGVsc2UgcmF3ZmxvYXQgc1xuXG4gICgqIFJldHVybiBhIGZsb2F0IGJldHdlZW4gMCBhbmQgW2JvdW5kXSAqKVxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICAoKiBSZXR1cm4gYSByYW5kb20gQm9vbGVhbiAqKVxuICBsZXQgYm9vbCBzID0gbmV4dCBzIDwgMExcblxuICAoKiBTcGxpdCBhIG5ldyBQUk5HIG9mZiB0aGUgZ2l2ZW4gUFJORyAqKVxuICBsZXQgc3BsaXQgcyA9XG4gICAgbGV0IGkxID0gYml0czY0IHMgaW4gbGV0IGkyID0gYml0czY0IHMgaW5cbiAgICBsZXQgaTMgPSBiaXRzNjQgcyBpbiBsZXQgaTQgPSBiaXRzNjQgcyBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5lbmRcblxubGV0IG1rX2RlZmF1bHQgKCkgPVxuICAoKiBUaGlzIGlzIHRoZSBzdGF0ZSBvYnRhaW5lZCB3aXRoIFtTdGF0ZS5tYWtlIFt8IDMxNDE1OTI2NSB8XV0uICopXG4gIFN0YXRlLm1rICgtNjE5Njg3NDI4OTU2NzcwNTA5N0wpXG4gICAgICAgICAgIDU4NjU3MzI0OTgzMzcxMzE4OUxcbiAgICAgICAgICAgKC04NTkxMjY4ODAzODY1MDQzNDA3TClcbiAgICAgICAgICAgNjM4ODYxMzU5NTg0OTc3MjA0NExcblxubGV0IHJhbmRvbV9rZXkgPVxuICBEb21haW4uRExTLm5ld19rZXkgfnNwbGl0X2Zyb21fcGFyZW50OlN0YXRlLnNwbGl0IG1rX2RlZmF1bHRcblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludF9pbl9yYW5nZSB+bWluIH5tYXggPVxuICBTdGF0ZS5pbnRfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgaW50MzJfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUuaW50MzJfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBuYXRpdmVpbnRfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUubmF0aXZlaW50X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludDY0X2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLmludDY0X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLnJlaW5pdCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgc2VlZFxubGV0IGluaXQgc2VlZCA9IGZ1bGxfaW5pdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBTcGxpdHRpbmcgKilcblxubGV0IHNwbGl0ICgpID0gU3RhdGUuc3BsaXQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9ibGl0IiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2dyZWF0ZXJ0aGFuIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmUiLCJjYW1sX2ludDY0X3N1YiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfbGVzc3RoYW4iLCJjYW1sX2x4bV9uZXh0IiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9JbnQzMiIsIlN0ZGxpYl9JbnQ2NCIsIlN0ZGxpYiIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9EaWdlc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0JpZ2FycmF5IiwiU3RkbGliX05hdGl2ZWludCIsImNyZWF0ZSIsInBhcmFtIiwic2V0IiwicyIsImkxIiwiaTIiLCJpMyIsImk0IiwibWsiLCJzZXJpYWxpemF0aW9uX3ByZWZpeCIsInRvX2JpbmFyeV9zdHJpbmciLCJidWYiLCJpIiwib2ZfYmluYXJ5X3N0cmluZyIsImNvcHkiLCJzcmMiLCJkc3QiLCJyZWluaXQiLCJzZWVkIiwibiIsImIiLCJkMSIsImQyIiwibWFrZSIsIm1ha2Vfc2VsZl9pbml0IiwiYml0cyIsImludF9hdXgiLCJtYXNrIiwiciIsInYiLCJtYXhfaW50MzEiLCJpbnQiLCJib3VuZCIsIm1heF9pbnQzMiIsImZ1bGxfaW50IiwiaW50X2luX3JhbmdlX2F1eCIsIm1pbiIsIm1heCIsIm5iaXRzIiwic3BhbiIsImRyb3AiLCJpbnRfaW5fcmFuZ2UiLCJiaXRzMzIiLCJpbnQzMmF1eCIsImludDMyIiwiaW50MzJfaW5fcmFuZ2UiLCJpbnQ2NGF1eCIsImludDY0IiwiaW50NjRfaW5fcmFuZ2UiLCJuYXRpdmViaXRzIiwibmF0aXZlaW50IiwibmF0aXZlaW50X2luX3JhbmdlIiwiZmxvYXQiLCJib29sIiwic3BsaXQiLCJta19kZWZhdWx0IiwicmFuZG9tX2tleSIsInNjYWxlIiwiYml0czY0IiwiZnVsbF9pbml0IiwiaW5pdCIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyx1QkFB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LFVBQUF6QztBQUFBQSxJQUU5QixPQUEyQixPQUEzQixtREFBZ0M7QUFBQTtBQUFBLFlBQUEwQyxLQUFBMUMsTUFDbEQsMkJBQW9CO0FBQUEsWUFBQTJDLFVBQUE1RCxPQUNQLE9BQWUsVUFBZix3QkFBZTtBQUFBLFlBQUFxRCxRQUFBckQ7QUFBQUEsSUFJakIsT0FBMkIsTUFBM0IsNkNBQTJCO0FBQUE7QUFBQSxZQUFBNkQsVUFBQTdEO0FBQUFBLElBSXhCLE9BQTJCLEtBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQThELFVBQUFoRDtBQUFBQSxRQUFBQyxNQUMxQjtBQUFBLElBaFMzQiw2QkFnU3dEO0FBQUE7QUFBQSxHQWpDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHBWOUQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNTc2NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9oYXNodGJsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIHRoZSBsb2FkIGZhY3RvciBiZWNvbWVzIHRvbyBoaWdoLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSBBdG9taWMubWFrZSByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IEF0b21pYy5zZXQgcmFuZG9taXplZCB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9IEF0b21pYy5nZXQgcmFuZG9taXplZFxuXG5sZXQgcHJuZ19rZXkgPSBEb21haW4uRExTLm5ld19rZXkgUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0XG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCBwcm5nX2tleSkgZWxzZSAwXG4gIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzZWVkZWRfaGFzaDogaW50IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZTogaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weTogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmU6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGUgOiA/cmFuZG9tOmJvb2wgLT4gaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZSA6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILnNlZWRlZF9oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IGtleSBuZXh0XG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIG1lbV9pbl9idWNrZXQga2V5IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IHNlZWRlZF9oYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgcmVjIG1lbV9pbl9idWNrZXQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBrZXkgbmV4dFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbWVtX2luX2J1Y2tldCBrZXkgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9jb21wYXJlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3N5c19nZXRlbnYiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N5cyIsIlN0ZGxpYiIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1JhbmRvbSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfSW50IiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N0cmluZyIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiaCIsImZsaXBfb25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJleG4iLCJyYW5kb21pemVkX2RlZmF1bHQiLCJyYW5kb21pemVkIiwicmFuZG9taXplIiwicGFyYW0iLCJpc19yYW5kb21pemVkIiwicHJuZ19rZXkiLCJwb3dlcl8yX2Fib3ZlIiwieCIsIm4iLCJjcmVhdGUiLCJvcHQiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJzIiwic2VlZCIsImNsZWFyIiwicmVzZXQiLCJsZW4iLCJjb3B5X2J1Y2tldGxpc3QiLCJrZXkiLCJkYXRhIiwibmV4dCIsInByZWMiLCJjb3B5IiwibGVuZ3RoIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImkiLCJjZWxsIiwibmlkeCIsIm1hdGNoIiwicmVzaXplIiwib3NpemUiLCJpdGVyIiwib2xkX3RyYXYiLCJkIiwiZmlsdGVyX21hcF9pbnBsYWNlIiwic2xvdCIsImZvbGQiLCJpbml0IiwiYWNjdSIsImIiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJtIiwiaGlzdG8iLCJsIiwidG9fc2VxIiwidGJsIiwidGJsX2RhdGEiLCJhdXgiLCJidWNrIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwiTWFrZVNlZWRlZCIsIkgiLCJrZXlfaW5kZXgiLCJhZGQiLCJidWNrZXQiLCJyZW1vdmUiLCJrIiwiZmluZCIsImsxIiwiZDEiLCJuZXh0MSIsImsyIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfb3B0IiwiZmluZF9hbGwiLCJibG9jayIsImRzdCIsIm9mZnNldCIsInJlcGxhY2UiLCJtZW0iLCJhZGRfc2VxIiwidiIsInJlcGxhY2Vfc2VxIiwib2Zfc2VxIiwiTWFrZSIsImVxdWFsIiwic2VlZGVkX2hhc2giLCJpbmNsdWRlIiwic3oiLCJoYXNoIiwiaGFzaF9wYXJhbSIsIm4xIiwibjIiLCJyZWJ1aWxkIl0sIm1hcHBpbmdzIjoiSUFB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LHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyxxQkFBWTtBQUFBO0FBQUEsZUFBRTtBQUFBO0FBQUEsWUFBQW9CLFlBQUFoQyxLQUFBdEI7QUFBQUEsSUFHckM7QUFBQTtBQUFBLHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyx5QkFBZ0I7QUFBQTtBQUFBLGVBQUU7QUFBQTtBQUFBLFlBQUFxQixPQUFBdkQ7QUFBQUEsUUFBQXNCLE1BRy9CO0FBQUEsSUFDVjtBQUFBLElBQWlCO0FBQUEsR0FDZDtBQUFBLFlBQUEyQyxRQUFBdkYsS0FBQWQ7QUFBQUE7QUFBQUEsS0FBQWdCLFNBRU8sZUFBVztBQUFBLEtBQUFDLElBQ2I7QUFBQSxJQUNSO0FBQUE7QUFBQSxVQUNtQztBQUFBLE1BQUFDLE9BQWxCO0FBQUE7QUFBQSxTQUFBQSxPQUNWO0FBQUE7QUFBQSxTQUVQO0FBQUEsS0FBQWxCLE1BRVM7QUFBQSxJQUlUO0FBQUEsa0JBQW1CO0FBQUEsSUFBbUM7QUFBQSxHQUNwRDtBQUFBLEdBOWpCeUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzRDdEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjY1NzgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZm9ybWF0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBlbmRfd2l0aF9uZXdsaW5lIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5sZXQgcHBfcHJpbnRfbm90aGluZyBfc3RhdGUgKCkgPSAoKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB+ZW5kX3dpdGhfbmV3bGluZTp0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lOmZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgaWYgbWFyZ2luID49IHBwX2luZmluaXR5IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA+PSBwcF9pbmZpbml0eVwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtTdGRsaWIub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbU3RkbGliLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cbigqIEluaXRpYWxpc2UgZG9tYWluIGxvY2FsIHN0YXRlICopXG5tb2R1bGUgRExTID0gRG9tYWluLkRMU1xuXG5sZXQgc3RkYnVmX2tleSA9IERMUy5uZXdfa2V5IHBwX21ha2VfYnVmZmVyXG5sZXQgXyA9IERMUy5zZXQgc3RkYnVmX2tleSBzdGRidWZcblxubGV0IHN0cl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBmb3JtYXR0ZXJfb2ZfYnVmZmVyIChETFMuZ2V0IHN0ZGJ1Zl9rZXkpKVxubGV0IF8gPSBETFMuc2V0IHN0cl9mb3JtYXR0ZXJfa2V5IHN0cl9mb3JtYXR0ZXJcblxubGV0IGJ1ZmZlcmVkX291dF9zdHJpbmcga2V5IHN0ciBvZnMgbGVuID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgKERvbWFpbi5ETFMuZ2V0IGtleSkgc3RyIG9mcyBsZW5cblxubGV0IGJ1ZmZlcmVkX291dF9mbHVzaCBvYyBrZXkgKCkgPVxuICBsZXQgYnVmID0gRG9tYWluLkRMUy5nZXQga2V5IGluXG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBsZXQgc3RyID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBvdXRwdXRfc3Vic3RyaW5nIG9jIHN0ciAwIGxlbiA7XG4gIFN0ZGxpYi5mbHVzaCBvYztcbiAgQnVmZmVyLmNsZWFyIGJ1ZlxuXG5sZXQgc3RkX2J1Zl9rZXkgPSBEb21haW4uRExTLm5ld19rZXkgKGZ1biAoKSAtPiBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplKVxubGV0IGVycl9idWZfa2V5ID0gRG9tYWluLkRMUy5uZXdfa2V5IChmdW4gKCkgLT4gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZSlcblxubGV0IHN0ZF9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBzdGRfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZG91dCBzdGRfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IHN0ZF9mb3JtYXR0ZXJfa2V5IHN0ZF9mb3JtYXR0ZXJcblxubGV0IGVycl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBlcnJfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZGVyciBlcnJfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IGVycl9mb3JtYXR0ZXJfa2V5IGVycl9mb3JtYXR0ZXJcblxubGV0IGdldF9zdGRfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleVxubGV0IGdldF9lcnJfZm9ybWF0dGVyICgpID0gRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdHJfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdGRidWYgKCkgPSBETFMuZ2V0IHN0ZGJ1Zl9rZXlcblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiB+ZW5kX3dpdGhfbmV3bGluZTpmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPVxuICBsZXQgc3RkYnVmID0gRExTLmdldCBzdGRidWZfa2V5IGluXG4gIGxldCBzdHJfZm9ybWF0dGVyID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleSBpblxuICBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbmxldCBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplIGluXG4gICAgbGV0IG91dHB1dCcgPSBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgaW5cbiAgICBsZXQgZmx1c2gnICgpID1cbiAgICAgIG91dHB1dCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgMCAoQnVmZmVyLmxlbmd0aCBidWYpO1xuICAgICAgQnVmZmVyLmNsZWFyIGJ1ZjtcbiAgICAgIGZsdXNoICgpXG4gICAgaW5cbiAgICBtYWtlX2Zvcm1hdHRlciBvdXRwdXQnIGZsdXNoJylcblxubGV0IHN5bmNocm9uaXplZF9mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCB2ID0gcHBfb3Blbl9oYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl92Ym94IHYgPSBwcF9vcGVuX3Zib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX2h2Ym94IHYgPSBwcF9vcGVuX2h2Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ob3Zib3ggdiA9IHBwX29wZW5faG92Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ib3ggdiA9IHBwX29wZW5fYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgY2xvc2VfYm94IHYgPSBwcF9jbG9zZV9ib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX3N0YWcgdiA9IHBwX29wZW5fc3RhZyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3N0YWcgdiA9IHBwX2Nsb3NlX3N0YWcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9hcyB2IHcgPSBwcF9wcmludF9hcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdiB3XG5hbmQgcHJpbnRfc3RyaW5nIHYgPSBwcF9wcmludF9zdHJpbmcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ieXRlcyB2ID0gcHBfcHJpbnRfYnl0ZXMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pbnQgdiA9IHBwX3ByaW50X2ludCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2Zsb2F0IHYgPSBwcF9wcmludF9mbG9hdCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2NoYXIgdiA9IHBwX3ByaW50X2NoYXIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ib29sIHYgPSBwcF9wcmludF9ib29sIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfYnJlYWsgdiB3ID0gcHBfcHJpbnRfYnJlYWsgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHYgd1xuYW5kIHByaW50X2N1dCB2ID0gcHBfcHJpbnRfY3V0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfc3BhY2UgdiA9IHBwX3ByaW50X3NwYWNlIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZm9yY2VfbmV3bGluZSB2ID0gcHBfZm9yY2VfbmV3bGluZSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2ZsdXNoIHYgPSBwcF9wcmludF9mbHVzaCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X25ld2xpbmUgdiA9IHBwX3ByaW50X25ld2xpbmUgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pZl9uZXdsaW5lIHYgPSBwcF9wcmludF9pZl9uZXdsaW5lIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBvcGVuX3Rib3ggdiA9IHBwX29wZW5fdGJveCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3Rib3ggdiA9IHBwX2Nsb3NlX3Rib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YnJlYWsgdiB3ID0gcHBfcHJpbnRfdGJyZWFrIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcblxuYW5kIHNldF90YWIgdiA9IHBwX3NldF90YWIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YWIgdiA9IHBwX3ByaW50X3RhYiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X21hcmdpbiB2ID0gcHBfc2V0X21hcmdpbiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXJnaW4gdiA9IHBwX2dldF9tYXJnaW4gKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcblxuYW5kIHNldF9tYXhfaW5kZW50IHYgPSBwcF9zZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXhfaW5kZW50IHYgPSBwcF9nZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2dlb21ldHJ5IH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBwcF9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBzYWZlX3NldF9nZW9tZXRyeSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBnZXRfZ2VvbWV0cnkgdiA9IHBwX2dldF9nZW9tZXRyeSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHVwZGF0ZV9nZW9tZXRyeSB2ID0gcHBfdXBkYXRlX2dlb21ldHJ5IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfbWF4X2JveGVzIHYgPSBwcF9zZXRfbWF4X2JveGVzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21heF9ib3hlcyB2ID0gcHBfZ2V0X21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIG92ZXJfbWF4X2JveGVzIHYgPSBwcF9vdmVyX21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX3NldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX2dldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHYgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgdiA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyB2ID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiB3ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyB2ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfc2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBnZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfbWFya190YWdzIHYgPVxuICBwcF9zZXRfbWFya190YWdzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21hcmtfdGFncyB2ID1cbiAgcHBfZ2V0X21hcmtfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHNldF90YWdzIHYgPVxuICBwcF9zZXRfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG5sZXQgcHBfcHJpbnRfaXRlciA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgaXRlciBwcF92IHBwZiB2ID1cbiAgbGV0IGlzX2ZpcnN0ID0gcmVmIHRydWUgaW5cbiAgbGV0IHBwX3YgdiA9XG4gICAgaWYgIWlzX2ZpcnN0IHRoZW4gaXNfZmlyc3QgOj0gZmFsc2UgZWxzZSBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHZcbiAgaW5cbiAgaXRlciBwcF92IHZcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgTGlzdC5pdGVyIHBwX3YgcHBmIHZcblxuKCogVG8gZm9ybWF0IGFuIGFycmF5ICopXG5sZXQgcHBfcHJpbnRfYXJyYXkgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgQXJyYXkuaXRlciBwcF92IHBwZiB2XG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgU2VxLml0ZXIgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9zdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcblxubGV0IHByaW50ZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgYWNjKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBlcHJpbnRmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIChETFMuZ2V0IGVycl9mb3JtYXR0ZXJfa2V5KSBhY2MpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpICgpO1xuICBwcF9wcmludF9mbHVzaCAoRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleSkgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbmxldCAoKSA9IERvbWFpbi5iZWZvcmVfZmlyc3Rfc3Bhd24gKGZ1biAoKSAtPlxuICBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpO1xuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIHN0ZF9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3Rkb3V0IHN0ZF9idWZfa2V5fTtcblxuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIGVycl9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3RkZXJyIGVycl9idWZfa2V5fTtcbilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUXVldWUiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RhY2siLCJTdGRsaWJfSW50IiwiU3RkbGliX0J5dGVzIiwiaWQiLCJ4IiwiU3RyaW5nX3RhZyIsInBwX2VucXVldWUiLCJzdGF0ZSIsInRva2VuIiwicHBfb3V0cHV0X3N0cmluZyIsInMiLCJwcF9vdXRwdXRfbmV3bGluZSIsImZvcm1hdF9wcF90ZXh0Iiwic2l6ZSIsInRleHQiLCJjc3QiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJwYXJhbSIsIndpZHRoIiwiYWZ0ZXIiLCJvZmZzZXQiLCJiZWZvcmUiLCJpbmRlbnQiLCJyZWFsX2luZGVudCIsIm4iLCJicmVha19zYW1lX2xpbmUiLCJmb3JtYXRfcHBfdG9rZW4iLCJtYXRjaCIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJsIiwibGVuZ3RoIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwiYm94X3R5cGUiLCJpbnNlcnRpb25fcG9pbnQiLCJmaXJzdCIsInRhYiIsInRhaWwiLCJoZWFkIiwidHkiLCJ0Ym94IiwicHBfaW5maW5pdHkiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50IiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJ1bmtub3duIiwiaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIiwic3RhY2siLCJzZXRfc2l6ZSIsInF1ZXVlX2VsZW0iLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiYiIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInplcm8iLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfc2V0X3ByaW50X3RhZ3MiLCJwcF9zZXRfbWFya190YWdzIiwicHBfZ2V0X3ByaW50X3RhZ3MiLCJwcF9nZXRfbWFya190YWdzIiwicHBfc2V0X3RhZ3MiLCJwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwY3QiLCJwb3QiLCJtY3QiLCJtb3QiLCJwcF9yaW5pdCIsInBwX2ZsdXNoX3F1ZXVlIiwiZW5kX3dpdGhfbmV3bGluZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJpIiwicHBfcHJpbnRfZmxvYXQiLCJwcF9wcmludF9ib29sIiwicHBfcHJpbnRfY2hhciIsImMiLCJwcF9wcmludF9ub3RoaW5nIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsIm1zZyIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwidXBkYXRlIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiaiIsImgiLCJnIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsIm9jIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsImZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIiwib3V0X2Z1bnMiLCJtYWtlX2Zvcm1hdHRlciIsIm91dHB1dCIsImZsdXNoIiwicHBmIiwiZm9ybWF0dGVyX29mX291dF9jaGFubmVsIiwiZm9ybWF0dGVyX29mX2J1ZmZlciIsInBwX2J1ZmZlcl9zaXplIiwicHBfbWFrZV9idWZmZXIiLCJzdGRidWYiLCJzdGRfZm9ybWF0dGVyIiwiZXJyX2Zvcm1hdHRlciIsInN0cl9mb3JtYXR0ZXIiLCJzdGRidWZfa2V5Iiwic3RyX2Zvcm1hdHRlcl9rZXkiLCJidWZmZXJlZF9vdXRfc3RyaW5nIiwia2V5Iiwic3RyIiwib2ZzIiwibGVuIiwiYnVmZmVyZWRfb3V0X2ZsdXNoIiwiYnVmIiwic3RkX2J1Zl9rZXkiLCJlcnJfYnVmX2tleSIsInN0ZF9mb3JtYXR0ZXJfa2V5IiwiZXJyX2Zvcm1hdHRlcl9rZXkiLCJnZXRfc3RkX2Zvcm1hdHRlciIsImdldF9lcnJfZm9ybWF0dGVyIiwiZ2V0X3N0cl9mb3JtYXR0ZXIiLCJnZXRfc3RkYnVmIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsImZsdXNoX3N0cl9mb3JtYXR0ZXIiLCJtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIiLCJzeW5jaHJvbml6ZWRfZm9ybWF0dGVyX29mX291dF8iLCJtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwic29iIiwiZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiaXRlbXMiLCJhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0iLCJpdGVtIiwiZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9iIiwib3Blbl9oYm94IiwidiIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl9zdGFnIiwiY2xvc2Vfc3RhZyIsInByaW50X2FzIiwidyIsInByaW50X3N0cmluZyIsInByaW50X2J5dGVzIiwicHJpbnRfaW50IiwicHJpbnRfZmxvYXQiLCJwcmludF9jaGFyIiwicHJpbnRfYm9vbCIsInByaW50X2JyZWFrIiwicHJpbnRfY3V0IiwicHJpbnRfc3BhY2UiLCJmb3JjZV9uZXdsaW5lIiwicHJpbnRfZmx1c2giLCJwcmludF9uZXdsaW5lIiwicHJpbnRfaWZfbmV3bGluZSIsIm9wZW5fdGJveCIsImNsb3NlX3Rib3giLCJwcmludF90YnJlYWsiLCJzZXRfdGFiIiwicHJpbnRfdGFiIiwic2V0X21hcmdpbiIsImdldF9tYXJnaW4iLCJzZXRfbWF4X2luZGVudCIsImdldF9tYXhfaW5kZW50Iiwic2V0X2dlb21ldHJ5Iiwic2FmZV9zZXRfZ2VvbWV0cnkiLCJnZXRfZ2VvbWV0cnkiLCJ1cGRhdGVfZ2VvbWV0cnkiLCJzZXRfbWF4X2JveGVzIiwiZ2V0X21heF9ib3hlcyIsIm92ZXJfbWF4X2JveGVzIiwic2V0X2VsbGlwc2lzX3RleHQiLCJnZXRfZWxsaXBzaXNfdGV4dCIsInNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwiLCJzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsInNldF9wcmludF90YWdzIiwiZ2V0X3ByaW50X3RhZ3MiLCJzZXRfbWFya190YWdzIiwiZ2V0X21hcmtfdGFncyIsInNldF90YWdzIiwicHBfcHJpbnRfaXRlciIsIm9wdCIsIml0ZXIiLCJwcF92IiwicHBfc2VwIiwiaXNfZmlyc3QiLCJwcF9wcmludF9saXN0IiwicHBfcHJpbnRfYXJyYXkiLCJwcF9wcmludF9zZXEiLCJzZXEiLCJwcF9wcmludF90ZXh0IiwibGVmdCIsInJpZ2h0IiwicHBfcHJpbnRfb3B0aW9uIiwibm9uZSIsInBwX3ByaW50X3Jlc3VsdCIsIm9rIiwiZXJyb3IiLCJlIiwicHBfcHJpbnRfZWl0aGVyIiwiciIsImNvbXB1dGVfdGFnIiwidGFnX2FjYyIsIm91dHB1dF9mb3JtYXR0aW5nX2xpdCIsImZtdGluZ19saXQiLCJvdXRwdXRfYWNjIiwiYWNjIiwicCIsImJ0eSIsInN0cnB1dF9hY2MiLCJrZnByaW50ZiIsImsiLCJmbXQiLCJpa2ZwcmludGYiLCJpZnByaW50ZiIsImZwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia2RwcmludGYiLCJkcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwiZnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRGg5Q0QiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyODIyMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zY2FuZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIGFsaWFzIHRvIGF2b2lkIHdhcm5pbmcgZm9yIGFtYmlndWl0eSBiZXR3ZWVuXG4gICBTdGRsaWIuZm9ybWF0NlxuICAgYW5kIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG5cbiAgICh0aGUgZm9ybWVyIGlzIGluIGZhY3QgYW4gYWxpYXMgZm9yIHRoZSBsYXR0ZXIsXG4gICAgYnV0IHRoZSBhbWJpZ3VpdHkgd2FybmluZyBkb2Vzbid0IGNhcmUpXG4qKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBTdGRsaWIuZm9ybWF0NlxuXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FubmVycy4gKilcblxuKCogU2Nhbm5pbmcgYnVmZmVycy4gKilcbm1vZHVsZSB0eXBlIFNDQU5OSU5HID0gc2lnXG5cbiAgdHlwZSBpbl9jaGFubmVsXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdmFsIHN0ZGluIDogaW5fY2hhbm5lbFxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgbmV4dF9jaGFyIDogc2NhbmJ1ZiAtPiBjaGFyXG4gICgqIFtTY2FubmluZy5uZXh0X2NoYXIgaWJdIGFkdmFuY2UgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3Rlci5cbiAgICAgSWYgbm8gbW9yZSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQsIHNldHMgYSBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliXSBtYXJrIHRoZSBjdXJyZW50X2NoYXIgYXMgYWxyZWFkeVxuICAgICBzY2FubmVkLiAqKVxuXG4gIHZhbCBwZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLnBlZWtfY2hhciBpYl0gcmV0dXJucyB0aGUgY3VycmVudCBjaGFyIGF2YWlsYWJsZSBpblxuICAgICB0aGUgYnVmZmVyIG9yIHJlYWRzIG9uZSBpZiBuZWNlc3NhcnkgKHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzXG4gICAgIGFscmVhZHkgc2Nhbm5lZCkuXG4gICAgIElmIG5vIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhbiBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgY2hlY2tlZF9wZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogU2FtZSBhcyBbU2Nhbm5pbmcucGVla19jaGFyXSBhYm92ZSBidXQgYWx3YXlzIHJldHVybnMgYSB2YWxpZCBjaGFyIG9yXG4gICAgIGZhaWxzOiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG51bGwgY2hhciB3aGVuIHRoZSByZWFkaW5nIG1ldGhvZCBvZiB0aGVcbiAgICAgaW5wdXQgYnVmZmVyIGhhcyByZWFjaGVkIGFuIGVuZCBvZiBmaWxlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGV4Y2VwdGlvblxuICAgICBbRW5kX29mX2ZpbGVdLiAqKVxuXG4gIHZhbCBzdG9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gY2hhciAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnN0b3JlX2NoYXIgbGltIGliIGNdIGFkZHMgW2NdIHRvIHRoZSB0b2tlbiBidWZmZXJcbiAgICAgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlciBbaWJdLiBJdCBhbHNvIGFkdmFuY2VzIHRoZSBzY2FubmluZyBidWZmZXIgZm9yXG4gICAgIG9uZSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgW2xpbSAtIDFdLCBpbmRpY2F0aW5nIHRoZSBuZXcgbGltaXQgZm9yIHRoZVxuICAgICBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uICopXG5cbiAgdmFsIHNraXBfY2hhciA6IGludCAtPiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc2tpcF9jaGFyIGxpbSBpYl0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuICopXG5cbiAgdmFsIGlnbm9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5pZ25vcmVfY2hhciBpYiBsaW1dIGlnbm9yZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZFxuICAgICBkZWNyZW1lbnRzIHRoZSBsaW1pdC4gKilcblxuICB2YWwgdG9rZW4gOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcudG9rZW4gaWJdIHJldHVybnMgdGhlIHN0cmluZyBzdG9yZWQgaW50byB0aGUgdG9rZW5cbiAgICAgYnVmZmVyIG9mIHRoZSBzY2FubmluZyBidWZmZXI6IGl0IHJldHVybnMgdGhlIHRva2VuIG1hdGNoZWQgYnkgdGhlXG4gICAgIGZvcm1hdC4gKilcblxuICB2YWwgcmVzZXRfdG9rZW4gOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLnJlc2V0X3Rva2VuIGliXSByZXNldHMgdGhlIHRva2VuIGJ1ZmZlciBvZlxuICAgICB0aGUgZ2l2ZW4gc2Nhbm5pbmcgYnVmZmVyLiAqKVxuXG4gIHZhbCBjaGFyX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmNoYXJfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAgIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgbGluZV9jb3VudCA6IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5saW5lX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmV3IGxpbmVcbiAgICAgY2hhcmFjdGVycyByZWFkIHNvIGZhciBmcm9tIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIHRva2VuX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnRva2VuX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIHJlYWRcbiAgICAgc28gZmFyIGZyb20gW2liXS4gKilcblxuICB2YWwgZW9mIDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lb2YgaWJdIHJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgZW5kX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBlbmQgb2YgaW5wdXQgY29uZGl0aW9uXG4gICAgIG9mIHRoZSBnaXZlbiBidWZmZXIgKGlmIG5vIGNoYXIgaGFzIGV2ZXIgYmVlbiByZWFkLCBhbiBhdHRlbXB0IHRvXG4gICAgIHJlYWQgb25lIGlzIHBlcmZvcm1lZCkuICopXG5cbiAgdmFsIGJlZ2lubmluZ19vZl9pbnB1dCA6IHNjYW5idWYgLT4gYm9vbFxuICAoKiBbU2Nhbm5pbmcuYmVnaW5uaW5nX29mX2lucHV0IGliXSB0ZXN0cyB0aGUgYmVnaW5uaW5nIG9mIGlucHV0XG4gICAgIGNvbmRpdGlvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBuYW1lX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBzdHJpbmdcbiAgKCogW1NjYW5uaW5nLm5hbWVfb2ZfaW5wdXQgaWJdIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlclxuICAgICBzb3VyY2UgZm9yIGlucHV0IGJ1ZmZlciBbaWJdLiAqKVxuXG4gIHZhbCBvcGVuX2luIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIG9wZW5faW5fYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZSA6IGZpbGVfbmFtZSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2ZpbGVfYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fc3RyaW5nIDogc3RyaW5nIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZnVuY3Rpb24gOiAodW5pdCAtPiBjaGFyKSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG5cbiAgdmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0XG5cbmVuZFxuXG5cbm1vZHVsZSBTY2FubmluZyA6IFNDQU5OSU5HID0gc3RydWN0XG5cbiAgKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIHNjYW5mLiAqKVxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdHlwZSBpbl9jaGFubmVsX25hbWUgPVxuICAgIHwgRnJvbV9jaGFubmVsIG9mIFN0ZGxpYi5pbl9jaGFubmVsXG4gICAgfCBGcm9tX2ZpbGUgb2YgZmlsZV9uYW1lICogU3RkbGliLmluX2NoYW5uZWxcbiAgICB8IEZyb21fZnVuY3Rpb25cbiAgICB8IEZyb21fc3RyaW5nXG5cblxuICB0eXBlIGluX2NoYW5uZWwgPSB7XG4gICAgbXV0YWJsZSBpY19lb2YgOiBib29sO1xuICAgIG11dGFibGUgaWNfY3VycmVudF9jaGFyIDogY2hhcjtcbiAgICBtdXRhYmxlIGljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBpY19jaGFyX2NvdW50IDogaW50O1xuICAgIG11dGFibGUgaWNfbGluZV9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGljX3Rva2VuX2NvdW50IDogaW50O1xuICAgIGljX2dldF9uZXh0X2NoYXIgOiB1bml0IC0+IGNoYXI7XG4gICAgaWNfdG9rZW5fYnVmZmVyIDogQnVmZmVyLnQ7XG4gICAgaWNfaW5wdXRfbmFtZSA6IGluX2NoYW5uZWxfbmFtZTtcbiAgfVxuXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIGxldCBudWxsX2NoYXIgPSAnXFwwMDAnXG5cbiAgKCogUmVhZHMgYSBuZXcgY2hhcmFjdGVyIGZyb20gaW5wdXQgYnVmZmVyLlxuICAgICBOZXh0X2NoYXIgbmV2ZXIgZmFpbHMsIGV2ZW4gaW4gY2FzZSBvZiBlbmQgb2YgaW5wdXQ6XG4gICAgIGl0IHRoZW4gc2ltcGx5IHNldHMgdGhlIGVuZCBvZiBmaWxlIGNvbmRpdGlvbi4gKilcbiAgbGV0IG5leHRfY2hhciBpYiA9XG4gICAgdHJ5XG4gICAgICBsZXQgYyA9IGliLmljX2dldF9uZXh0X2NoYXIgKCkgaW5cbiAgICAgIGliLmljX2N1cnJlbnRfY2hhciA8LSBjO1xuICAgICAgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDwtIHRydWU7XG4gICAgICBpYi5pY19jaGFyX2NvdW50IDwtIHN1Y2MgaWIuaWNfY2hhcl9jb3VudDtcbiAgICAgIGlmIGMgPSAnXFxuJyB0aGVuIGliLmljX2xpbmVfY291bnQgPC0gc3VjYyBpYi5pY19saW5lX2NvdW50O1xuICAgICAgYyB3aXRoXG4gICAgfCBFbmRfb2ZfZmlsZSAtPlxuICAgICAgbGV0IGMgPSBudWxsX2NoYXIgaW5cbiAgICAgIGliLmljX2N1cnJlbnRfY2hhciA8LSBjO1xuICAgICAgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDwtIGZhbHNlO1xuICAgICAgaWIuaWNfZW9mIDwtIHRydWU7XG4gICAgICBjXG5cblxuICBsZXQgcGVla19jaGFyIGliID1cbiAgICBpZiBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWRcbiAgICB0aGVuIGliLmljX2N1cnJlbnRfY2hhclxuICAgIGVsc2UgbmV4dF9jaGFyIGliXG5cblxuICAoKiBSZXR1cm5zIGEgdmFsaWQgY3VycmVudCBjaGFyIGZvciB0aGUgaW5wdXQgYnVmZmVyLiBJbiBwYXJ0aWN1bGFyXG4gICAgIG5vIGlycmVsZXZhbnQgbnVsbCBjaGFyYWN0ZXIgKGFzIHNldCBieSBbbmV4dF9jaGFyXSBpbiBjYXNlIG9mIGVuZFxuICAgICBvZiBpbnB1dCkgaXMgcmV0dXJuZWQsIHNpbmNlIFtFbmRfb2ZfZmlsZV0gaXMgcmFpc2VkIHdoZW5cbiAgICAgW25leHRfY2hhcl0gc2V0cyB0aGUgZW5kIG9mIGZpbGUgY29uZGl0aW9uIHdoaWxlIHRyeWluZyB0byByZWFkIGFcbiAgICAgbmV3IGNoYXJhY3Rlci4gKilcbiAgbGV0IGNoZWNrZWRfcGVla19jaGFyIGliID1cbiAgICBsZXQgYyA9IHBlZWtfY2hhciBpYiBpblxuICAgIGlmIGliLmljX2VvZiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAgIGNcblxuXG4gIGxldCBlbmRfb2ZfaW5wdXQgaWIgPVxuICAgIGlnbm9yZSAocGVla19jaGFyIGliKTtcbiAgICBpYi5pY19lb2ZcblxuXG4gIGxldCBlb2YgaWIgPSBpYi5pY19lb2ZcblxuICBsZXQgYmVnaW5uaW5nX29mX2lucHV0IGliID0gaWIuaWNfY2hhcl9jb3VudCA9IDBcblxuICBsZXQgbmFtZV9vZl9pbnB1dCBpYiA9XG4gICAgbWF0Y2ggaWIuaWNfaW5wdXRfbmFtZSB3aXRoXG4gICAgfCBGcm9tX2NoYW5uZWwgX2ljIC0+IFwidW5uYW1lZCBTdGRsaWIgaW5wdXQgY2hhbm5lbFwiXG4gICAgfCBGcm9tX2ZpbGUgKGZuYW1lLCBfaWMpIC0+IGZuYW1lXG4gICAgfCBGcm9tX2Z1bmN0aW9uIC0+IFwidW5uYW1lZCBmdW5jdGlvblwiXG4gICAgfCBGcm9tX3N0cmluZyAtPiBcInVubmFtZWQgY2hhcmFjdGVyIHN0cmluZ1wiXG5cblxuICBsZXQgY2hhcl9jb3VudCBpYiA9XG4gICAgaWYgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkXG4gICAgdGhlbiBpYi5pY19jaGFyX2NvdW50IC0gMVxuICAgIGVsc2UgaWIuaWNfY2hhcl9jb3VudFxuXG5cbiAgbGV0IGxpbmVfY291bnQgaWIgPSBpYi5pY19saW5lX2NvdW50XG5cbiAgbGV0IHJlc2V0X3Rva2VuIGliID0gQnVmZmVyLnJlc2V0IGliLmljX3Rva2VuX2J1ZmZlclxuXG4gIGxldCBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYiA9IGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSBmYWxzZVxuXG4gIGxldCB0b2tlbiBpYiA9XG4gICAgbGV0IHRva2VuX2J1ZmZlciA9IGliLmljX3Rva2VuX2J1ZmZlciBpblxuICAgIGxldCB0b2sgPSBCdWZmZXIuY29udGVudHMgdG9rZW5fYnVmZmVyIGluXG4gICAgQnVmZmVyLmNsZWFyIHRva2VuX2J1ZmZlcjtcbiAgICBpYi5pY190b2tlbl9jb3VudCA8LSBzdWNjIGliLmljX3Rva2VuX2NvdW50O1xuICAgIHRva1xuXG5cbiAgbGV0IHRva2VuX2NvdW50IGliID0gaWIuaWNfdG9rZW5fY291bnRcblxuICBsZXQgc2tpcF9jaGFyIHdpZHRoIGliID1cbiAgICBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYjtcbiAgICB3aWR0aFxuXG5cbiAgbGV0IGlnbm9yZV9jaGFyIHdpZHRoIGliID0gc2tpcF9jaGFyICh3aWR0aCAtIDEpIGliXG5cbiAgbGV0IHN0b3JlX2NoYXIgd2lkdGggaWIgYyA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGliLmljX3Rva2VuX2J1ZmZlciBjO1xuICAgIGlnbm9yZV9jaGFyIHdpZHRoIGliXG5cblxuICBsZXQgZGVmYXVsdF90b2tlbl9idWZmZXJfc2l6ZSA9IDEwMjRcblxuICBsZXQgY3JlYXRlIGluYW1lIG5leHQgPSB7XG4gICAgaWNfZW9mID0gZmFsc2U7XG4gICAgaWNfY3VycmVudF9jaGFyID0gbnVsbF9jaGFyO1xuICAgIGljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA9IGZhbHNlO1xuICAgIGljX2NoYXJfY291bnQgPSAwO1xuICAgIGljX2xpbmVfY291bnQgPSAwO1xuICAgIGljX3Rva2VuX2NvdW50ID0gMDtcbiAgICBpY19nZXRfbmV4dF9jaGFyID0gbmV4dDtcbiAgICBpY190b2tlbl9idWZmZXIgPSBCdWZmZXIuY3JlYXRlIGRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemU7XG4gICAgaWNfaW5wdXRfbmFtZSA9IGluYW1lO1xuICB9XG5cblxuICBsZXQgZnJvbV9zdHJpbmcgcyA9XG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA+PSBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZSBlbHNlXG4gICAgICBsZXQgYyA9IHMuWyFpXSBpblxuICAgICAgaW5jciBpO1xuICAgICAgYyBpblxuICAgIGNyZWF0ZSBGcm9tX3N0cmluZyBuZXh0XG5cblxuICBsZXQgZnJvbV9mdW5jdGlvbiA9IGNyZWF0ZSBGcm9tX2Z1bmN0aW9uXG5cbiAgKCogU2Nhbm5pbmcgZnJvbSBhbiBpbnB1dCBjaGFubmVsLiAqKVxuXG4gICgqIFBvc2l0aW9uIG9mIHRoZSBwcm9ibGVtOlxuXG4gICAgIFdlIGNhbm5vdCBwcmV2ZW50IHRoZSBzY2FubmluZyBtZWNoYW5pc20gdG8gdXNlIG9uZSBsb29rYWhlYWQgY2hhcmFjdGVyLFxuICAgICBpZiBuZWVkZWQgYnkgdGhlIHNlbWFudGljcyBvZiB0aGUgZm9ybWF0IHN0cmluZyBzcGVjaWZpY2F0aW9ucyAoZS5nLiBhXG4gICAgIHRyYWlsaW5nICdza2lwIHNwYWNlJyBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtYXQgc3RyaW5nKTsgaW4gdGhpcyBjYXNlLFxuICAgICB0aGUgbWFuZGF0b3J5IGxvb2thaGVhZCBjaGFyYWN0ZXIgaXMgaW5kZWVkIHJlYWQgZnJvbSB0aGUgaW5wdXQgYW5kIG5vdFxuICAgICB1c2VkIHRvIHJldHVybiB0aGUgdG9rZW4gcmVhZC4gSXQgaXMgdGh1cyBtYW5kYXRvcnkgdG8gYmUgYWJsZSB0byBzdG9yZVxuICAgICBhbiB1bnVzZWQgbG9va2FoZWFkIGNoYXJhY3RlciBzb21ld2hlcmUgdG8gZ2V0IGl0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgb2YgdGhlIG5leHQgc2Nhbi5cblxuICAgICBUbyBjaXJjdW12ZW50IHRoaXMgcHJvYmxlbSwgYWxsIHRoZSBzY2FubmluZyBmdW5jdGlvbnMgZ2V0IGEgbG93IGxldmVsXG4gICAgIGlucHV0IGJ1ZmZlciBhcmd1bWVudCB3aGVyZSB0aGV5IHN0b3JlIHRoZSBsb29rYWhlYWQgY2hhcmFjdGVyIHdoZW5cbiAgICAgbmVlZGVkOyBhZGRpdGlvbmFsbHksIHRoZSBpbnB1dCBidWZmZXIgaXMgdGhlIG9ubHkgc291cmNlIG9mIGNoYXJhY3RlciBvZlxuICAgICBhIHNjYW5uZXIuIFRoZSBbc2NhbmJ1Zl0gaW5wdXQgYnVmZmVycyBhcmUgZGVmaW5lZCBpbiBtb2R1bGUgeyFTY2FubmluZ30uXG5cbiAgICAgTm93IHdlIHVuZGVyc3RhbmQgdGhhdCBpdCBpcyBleHRyZW1lbHkgaW1wb3J0YW50IHRoYXQgcmVsYXRlZCBhbmRcbiAgICAgc3VjY2Vzc2l2ZSBjYWxscyB0byBzY2FubmVycyBpbmRlZWQgcmVhZCBmcm9tIHRoZSBzYW1lIGlucHV0IGJ1ZmZlci5cbiAgICAgSW4gZWZmZWN0LCBpZiBhIHNjYW5uZXIgW3NjYW4xXSBpcyByZWFkaW5nIGZyb20gW2liMV0gYW5kIHN0b3JlcyBhblxuICAgICB1bnVzZWQgbG9va2FoZWFkIGNoYXJhY3RlciBbYzFdIGludG8gaXRzIGlucHV0IGJ1ZmZlciBbaWIxXSwgdGhlblxuICAgICBhbm90aGVyIHNjYW5uZXIgW3NjYW4yXSBub3QgcmVhZGluZyBmcm9tIHRoZSBzYW1lIGJ1ZmZlciBbaWIxXSB3aWxsIG1pc3NcbiAgICAgdGhlIGNoYXJhY3RlciBbYzFdLCBzZWVtaW5nbHkgdmFuaXNoZWQgaW4gdGhlIGFpciBmcm9tIHRoZSBwb2ludCBvZiB2aWV3XG4gICAgIG9mIFtzY2FuMl0uXG5cbiAgICAgVGhpcyBtZWNoYW5pc20gd29ya3MgcGVyZmVjdGx5IHRvIHJlYWQgZnJvbSBzdHJpbmdzLCBmcm9tIGZpbGVzLCBhbmQgZnJvbVxuICAgICBmdW5jdGlvbnMsIHNpbmNlIGluIHRob3NlIGNhc2VzLCBhbGxvY2F0aW5nIHR3byBidWZmZXJzIHJlYWRpbmcgZnJvbSB0aGVcbiAgICAgc2FtZSBzb3VyY2UgaXMgdW5uYXR1cmFsLlxuXG4gICAgIFN0aWxsLCB0aGVyZSBpcyBhIGRpZmZpY3VsdHkgaW4gdGhlIGNhc2Ugb2Ygc2Nhbm5pbmcgZnJvbSBhbiBpbnB1dFxuICAgICBjaGFubmVsLiBJbiBlZmZlY3QsIHdoZW4gc2Nhbm5pbmcgZnJvbSBhbiBpbnB1dCBjaGFubmVsIFtpY10sIHRoaXMgY2hhbm5lbFxuICAgICBtYXkgbm90IGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB3aXRoaW4gdGhpcyBsaWJyYXJ5LiBIZW5jZSwgaXQgbWF5IGJlXG4gICAgIHNoYXJlZCAodHdvIGZ1bmN0aW9ucyBvZiB0aGUgdXNlcidzIHByb2dyYW0gbWF5IHN1Y2Nlc3NpdmVseSByZWFkIGZyb21cbiAgICAgW2ljXSkuIFRoaXMgaXMgaGlnaGx5IGVycm9yIHByb25lIHNpbmNlLCBvbmUgb2YgdGhlIGZ1bmN0aW9uIG1heSBzZWVrIHRoZVxuICAgICBpbnB1dCBjaGFubmVsLCB3aGlsZSB0aGUgb3RoZXIgZnVuY3Rpb24gaGFzIHN0aWxsIGFuIHVudXNlZCBsb29rYWhlYWRcbiAgICAgY2hhcmFjdGVyIGluIGl0cyBpbnB1dCBidWZmZXIuIEluIGNvbmNsdXNpb24sIHlvdSBzaG91bGQgbmV2ZXIgbWl4IGRpcmVjdFxuICAgICBsb3cgbGV2ZWwgcmVhZGluZyBhbmQgaGlnaCBsZXZlbCBzY2FubmluZyBmcm9tIHRoZSBzYW1lIGlucHV0IGNoYW5uZWwuXG5cbiAgKilcblxuICAoKiBQZXJmb3JtIGJ1ZmZlcml6ZWQgaW5wdXQgdG8gaW1wcm92ZSBlZmZpY2llbmN5LiAqKVxuICBsZXQgZmlsZV9idWZmZXJfc2l6ZSA9IHJlZiAxMDI0XG5cbiAgKCogVGhlIHNjYW5uZXIgY2xvc2VzIHRoZSBpbnB1dCBjaGFubmVsIGF0IGVuZCBvZiBpbnB1dC4gKilcbiAgbGV0IHNjYW5fY2xvc2VfYXRfZW5kIGljID0gU3RkbGliLmNsb3NlX2luIGljOyByYWlzZSBFbmRfb2ZfZmlsZVxuXG4gICgqIFRoZSBzY2FubmVyIGRvZXMgbm90IGNsb3NlIHRoZSBpbnB1dCBjaGFubmVsIGF0IGVuZCBvZiBpbnB1dDpcbiAgICAgaXQganVzdCByYWlzZXMgW0VuZF9vZl9maWxlXS4gKilcbiAgbGV0IHNjYW5fcmFpc2VfYXRfZW5kIF9pYyA9IHJhaXNlIEVuZF9vZl9maWxlXG5cbiAgbGV0IGZyb21faWMgc2Nhbl9jbG9zZV9pYyBpbmFtZSBpYyA9XG4gICAgbGV0IGxlbiA9ICFmaWxlX2J1ZmZlcl9zaXplIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGxpbSA9IHJlZiAwIGluXG4gICAgbGV0IGVvZiA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBuZXh0ICgpID1cbiAgICAgIGlmICFpIDwgIWxpbSB0aGVuIGJlZ2luIGxldCBjID0gQnl0ZXMuZ2V0IGJ1ZiAhaSBpbiBpbmNyIGk7IGMgZW5kIGVsc2VcbiAgICAgIGlmICFlb2YgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZSBlbHNlIGJlZ2luXG4gICAgICAgIGxpbSA6PSBpbnB1dCBpYyBidWYgMCBsZW47XG4gICAgICAgIGlmICFsaW0gPSAwIHRoZW4gYmVnaW4gZW9mIDo9IHRydWU7IHNjYW5fY2xvc2VfaWMgaWMgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBpIDo9IDE7XG4gICAgICAgICAgQnl0ZXMuZ2V0IGJ1ZiAwXG4gICAgICAgIGVuZFxuICAgICAgZW5kIGluXG4gICAgY3JlYXRlIGluYW1lIG5leHRcblxuXG4gIGxldCBmcm9tX2ljX2Nsb3NlX2F0X2VuZCA9IGZyb21faWMgc2Nhbl9jbG9zZV9hdF9lbmRcbiAgbGV0IGZyb21faWNfcmFpc2VfYXRfZW5kID0gZnJvbV9pYyBzY2FuX3JhaXNlX2F0X2VuZFxuXG4gICgqIFRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLlxuICAgICBPbmUgY291bGQgdHJ5IHRvIGRlZmluZSBbc3RkaW5dIGFzIGEgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgYSBjaGFyYWN0ZXJcbiAgICAgYXQgYSB0aW1lIChubyBidWZmZXJpemF0aW9uIGF0IGFsbCksIGJ1dCB1bmZvcnR1bmF0ZWx5IHRoZSB0b3AtbGV2ZWxcbiAgICAgaW50ZXJhY3Rpb24gd291bGQgYmUgd3JvbmcuIFRoaXMgaXMgZHVlIHRvIHNvbWUga2luZCBvZlxuICAgICAncmFjZSBjb25kaXRpb24nIHdoZW4gcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLFxuICAgICBzaW5jZSB0aGUgaW50ZXJhY3RpdmUgY29tcGlsZXIgYW5kIFtTY2FuZi5zY2FuZl0gd2lsbCBzaW11bHRhbmVvdXNseVxuICAgICByZWFkIHRoZSBtYXRlcmlhbCB0aGV5IG5lZWQgZnJvbSBbU3RkbGliLnN0ZGluXTsgdGhlbiwgY29uZnVzaW9uXG4gICAgIHdpbGwgcmVzdWx0IGZyb20gd2hhdCBzaG91bGQgYmUgcmVhZCBieSB0aGUgdG9wLWxldmVsIGFuZCB3aGF0IHNob3VsZCBiZVxuICAgICByZWFkIGJ5IFtTY2FuZi5zY2FuZl0uXG4gICAgIFRoaXMgaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIGJ5IHRoZSBvbmUgY2hhcmFjdGVyIGxvb2thaGVhZCB0aGF0XG4gICAgIFtTY2FuZi5zY2FuZl0gaXMgc29tZXRpbWVzIG9ibGlnZWQgdG8gbWFpbnRhaW46IHRoZSBsb29rYWhlYWQgY2hhcmFjdGVyXG4gICAgIHdpbGwgYmUgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBbU2NhbmYuc2NhbmZdIGVudHJ5LCBzZWVtaW5nbHkgY29taW5nIGZyb21cbiAgICAgbm93aGVyZS5cbiAgICAgQWxzbyBubyBbRW5kX29mX2ZpbGVdIGlzIHJhaXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBzdGRpbjogaWYgbm90IGVub3VnaFxuICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiByZWFkLCB3ZSBzaW1wbHkgYXNrIHRvIHJlYWQgbW9yZS4gKilcbiAgbGV0IHN0ZGluID1cbiAgICBmcm9tX2ljIHNjYW5fcmFpc2VfYXRfZW5kXG4gICAgICAoRnJvbV9maWxlIChcIi1cIiwgU3RkbGliLnN0ZGluKSkgU3RkbGliLnN0ZGluXG5cbiAgbGV0IG9wZW5faW5fZmlsZSBvcGVuX2luIGZuYW1lID1cbiAgICBtYXRjaCBmbmFtZSB3aXRoXG4gICAgfCBcIi1cIiAtPiBzdGRpblxuICAgIHwgZm5hbWUgLT5cbiAgICAgIGxldCBpYyA9IG9wZW5faW4gZm5hbWUgaW5cbiAgICAgIGZyb21faWNfY2xvc2VfYXRfZW5kIChGcm9tX2ZpbGUgKGZuYW1lLCBpYykpIGljXG5cblxuICBsZXQgb3Blbl9pbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pblxuICBsZXQgb3Blbl9pbl9iaW4gPSBvcGVuX2luX2ZpbGUgU3RkbGliLm9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fZmlsZSA9IG9wZW5faW5cbiAgbGV0IGZyb21fZmlsZV9iaW4gPSBvcGVuX2luX2JpblxuXG4gIGxldCBmcm9tX2NoYW5uZWwgaWMgPVxuICAgIGZyb21faWNfcmFpc2VfYXRfZW5kIChGcm9tX2NoYW5uZWwgaWMpIGljXG5cblxuICBsZXQgY2xvc2VfaW4gaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIGljIC0+XG4gICAgICBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZmlsZSAoX2ZuYW1lLCBpYykgLT4gU3RkbGliLmNsb3NlX2luIGljXG4gICAgfCBGcm9tX2Z1bmN0aW9uIHwgRnJvbV9zdHJpbmcgLT4gKClcblxuZW5kXG5cblxuKCogRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIHNjYW5uZXIgPVxuICAgICAoJ2EsIFNjYW5uaW5nLmluX2NoYW5uZWwsICdiLCAnYywgJ2EgLT4gJ2QsICdkKSBmb3JtYXQ2IC0+ICdjXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBzY2FubmVyX29wdCA9XG4gICAgICgnYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgJ2IsICdjLCAnYSAtPiAnZCBvcHRpb24sICdkKSBmb3JtYXQ2IC0+ICdjXG5cbigqIFJlcG9ydGluZyBlcnJvcnMuICopXG5leGNlcHRpb24gU2Nhbl9mYWlsdXJlIG9mIHN0cmluZ1xuXG5sZXQgYmFkX2lucHV0IHMgPSByYWlzZSAoU2Nhbl9mYWlsdXJlIHMpXG5cbmxldCBiYWRfaW5wdXRfZXNjYXBlIGMgPVxuICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyICVDXCIgYylcblxuXG5sZXQgYmFkX3Rva2VuX2xlbmd0aCBtZXNzYWdlID1cbiAgYmFkX2lucHV0XG4gICAgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgXCJzY2FubmluZyBvZiAlcyBmYWlsZWQ6IFxcXG4gICAgICAgIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIHdhcyB0b28gc2hvcnQgZm9yIHRva2VuXCJcbiAgICAgICBtZXNzYWdlKVxuXG5cbmxldCBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgcHJlbWF0dXJlIGVuZCBvZiBmaWxlIG9jY3VycmVkIGJlZm9yZSBlbmQgb2YgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vIGRvdCBvciBleHBvbmVudCBwYXJ0IGZvdW5kIGluIGZsb2F0IHRva2VuXCJcblxuXG5sZXQgYmFkX2hleF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vdCBhIHZhbGlkIGZsb2F0IGluIGhleGFkZWNpbWFsIG5vdGF0aW9uXCJcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoX2VyciBjIGNpID1cbiAgUHJpbnRmLnNwcmludGYgXCJsb29raW5nIGZvciAlQywgZm91bmQgJUNcIiBjIGNpXG5cblxubGV0IGNoYXJhY3Rlcl9taXNtYXRjaCBjIGNpID1cbiAgYmFkX2lucHV0IChjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kpXG5cblxubGV0IHJlYyBza2lwX3doaXRlcyBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSB0aGVuIGJlZ2luXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT5cbiAgICAgIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBza2lwX3doaXRlcyBpYlxuICAgIHwgXyAtPiAoKVxuICBlbmRcblxuXG4oKiBDaGVja2luZyB0aGF0IFtjXSBpcyBpbmRlZWQgaW4gdGhlIGlucHV0LCB0aGVuIHNraXBzIGl0LlxuICAgSW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyIFtjXSBoYXMgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0aGVcbiAgIGZvcm1hdCBhcyBiZWluZyBtYW5kYXRvcnkgaW4gdGhlIGlucHV0OyBoZW5jZSB3ZSBzaG91bGQgZmFpbCB3aXRoXG4gICBbRW5kX29mX2ZpbGVdIGluIGNhc2Ugb2YgZW5kX29mX2lucHV0LlxuICAgKFJlbWVtYmVyIHRoYXQgW1NjYW5fZmFpbHVyZV0gaXMgcmFpc2VkIG9ubHkgd2hlbiAod2UgY2FuIHByb3ZlIGJ5XG4gICBldmlkZW5jZSkgdGhhdCB0aGUgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGZvcm1hdCBzdHJpbmcgZ2l2ZW4uIFdlIG11c3RcbiAgIHRodXMgZGlmZmVyZW50aWF0ZSBbRW5kX29mX2ZpbGVdIGFzIGFuIGVycm9yIGR1ZSB0byBsYWNrIG9mIGlucHV0LCBhbmRcbiAgIFtTY2FuX2ZhaWx1cmVdIHdoaWNoIGlzIGR1ZSB0byBwcm92YWJseSB3cm9uZyBpbnB1dC4gSSBhbSBub3Qgc3VyZSB0aGlzIGlzXG4gICB3b3J0aCB0aGUgYnVyZGVuOiBpdCBpcyBjb21wbGV4IGFuZCBzb21laG93IHN1YmxpbWluYWw7IHNob3VsZCBiZSBjbGVhcmVyXG4gICB0byBmYWlsIHdpdGggU2Nhbl9mYWlsdXJlIFwiTm90IGVub3VnaCBpbnB1dCB0byBjb21wbGV0ZSBzY2FubmluZ1wiISlcblxuICAgVGhhdCdzIHdoeSwgd2FpdGluZyBmb3IgYSBiZXR0ZXIgc29sdXRpb24sIHdlIHVzZSBjaGVja2VkX3BlZWtfY2hhciBoZXJlLlxuICAgV2UgYXJlIGFsc28gY2FyZWZ1bCB0byB0cmVhdCBcIlxcclxcblwiIGluIHRoZSBpbnB1dCBhcyBhbiBlbmQgb2YgbGluZSBtYXJrZXI6XG4gICBpdCBhbHdheXMgbWF0Y2hlcyBhICdcXG4nIHNwZWNpZmljYXRpb24gaW4gdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcuICopXG5sZXQgcmVjIGNoZWNrX2NoYXIgaWIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcgJyAtPiBza2lwX3doaXRlcyBpYlxuICB8ICdcXG4nIC0+IGNoZWNrX25ld2xpbmUgaWJcbiAgfCBjIC0+IGNoZWNrX3RoaXNfY2hhciBpYiBjXG5cbmFuZCBjaGVja190aGlzX2NoYXIgaWIgYyA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGNpID0gYyB0aGVuIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliIGVsc2VcbiAgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuYW5kIGNoZWNrX25ld2xpbmUgaWIgPVxuICBsZXQgY2kgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBtYXRjaCBjaSB3aXRoXG4gIHwgJ1xcbicgLT4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgfCAnXFxyJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYjsgY2hlY2tfdGhpc19jaGFyIGliICdcXG4nXG4gIHwgXyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcbicgY2lcblxuXG4oKiBFeHRyYWN0aW5nIHRva2VucyBmcm9tIHRoZSBvdXRwdXQgdG9rZW4gYnVmZmVyLiAqKVxuXG5sZXQgdG9rZW5fY2hhciBpYiA9IChTY2FubmluZy50b2tlbiBpYikuWzBdXG5cbmxldCB0b2tlbl9zdHJpbmcgPSBTY2FubmluZy50b2tlblxuXG5sZXQgdG9rZW5fYm9vbCBpYiA9XG4gIG1hdGNoIFNjYW5uaW5nLnRva2VuIGliIHdpdGhcbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgcyAtPiBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaW52YWxpZCBib29sZWFuICclcydcIiBzKVxuXG5cbigqIFRoZSB0eXBlIG9mIGludGVnZXIgY29udmVyc2lvbnMuICopXG50eXBlIGludGVnZXJfY29udmVyc2lvbiA9XG4gIHwgQl9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGJpbmFyeSBjb252ZXJzaW9uICopXG4gIHwgRF9jb252ZXJzaW9uICgqIFNpZ25lZCBkZWNpbWFsIGNvbnZlcnNpb24gKilcbiAgfCBJX2NvbnZlcnNpb24gKCogU2lnbmVkIGludGVnZXIgY29udmVyc2lvbiAqKVxuICB8IE9fY29udmVyc2lvbiAoKiBVbnNpZ25lZCBvY3RhbCBjb252ZXJzaW9uICopXG4gIHwgVV9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IFhfY29udmVyc2lvbiAoKiBVbnNpZ25lZCBoZXhhZGVjaW1hbCBjb252ZXJzaW9uICopXG5cblxubGV0IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyID0gZnVuY3Rpb25cbiAgfCAnYicgLT4gQl9jb252ZXJzaW9uXG4gIHwgJ2QnIC0+IERfY29udmVyc2lvblxuICB8ICdpJyAtPiBJX2NvbnZlcnNpb25cbiAgfCAnbycgLT4gT19jb252ZXJzaW9uXG4gIHwgJ3UnIC0+IFVfY29udmVyc2lvblxuICB8ICd4JyB8ICdYJyAtPiBYX2NvbnZlcnNpb25cbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5cbigqIEV4dHJhY3QgYW4gaW50ZWdlciBsaXRlcmFsIHRva2VuLlxuICAgU2luY2UgdGhlIGZ1bmN0aW9ucyBTdGRsaWIuKmludCpfb2Zfc3RyaW5nIGRvIG5vdCBhY2NlcHQgYSBsZWFkaW5nICssXG4gICB3ZSBza2lwIGl0IGlmIG5lY2Vzc2FyeS4gKilcbmxldCB0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliID1cbiAgbGV0IHRvayA9XG4gICAgbWF0Y2ggY29udiB3aXRoXG4gICAgfCBEX2NvbnZlcnNpb24gfCBJX2NvbnZlcnNpb24gLT4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFVfY29udmVyc2lvbiAtPiBcIjB1XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgT19jb252ZXJzaW9uIC0+IFwiMG9cIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBYX2NvbnZlcnNpb24gLT4gXCIweFwiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IEJfY29udmVyc2lvbiAtPiBcIjBiXCIgXiBTY2FubmluZy50b2tlbiBpYiBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggdG9rIGluXG4gIGlmIGwgPSAwIHx8IHRvay5bMF0gPD4gJysnIHRoZW4gdG9rIGVsc2UgU3RyaW5nLnN1YiB0b2sgMSAobCAtIDEpXG5cblxuKCogQWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbnVtYmVyIHJhaXNlIHRoZSBleGNlcHRpb25cbiAgIEZhaWx1cmUgd2hlbiB0aGUgY29udmVyc2lvbiBpcyBub3QgcG9zc2libGUuXG4gICBUaGlzIGV4Y2VwdGlvbiBpcyB0aGVuIHRyYXBwZWQgaW4gW2tzY2FuZl0uICopXG5sZXQgdG9rZW5faW50IGNvbnYgaWIgPSBpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxuXG5sZXQgdG9rZW5fZmxvYXQgaWIgPSBmbG9hdF9vZl9zdHJpbmcgKFNjYW5uaW5nLnRva2VuIGliKVxuXG4oKiBUbyBzY2FuIG5hdGl2ZSBpbnRzLCBpbnQzMiBhbmQgaW50NjQgaW50ZWdlcnMuXG4gICBXZSBjYW5ub3QgYWNjZXNzIHRvIGNvbnZlcnNpb25zIHRvL2Zyb20gc3RyaW5ncyBmb3IgdGhvc2UgdHlwZXMsXG4gICBOYXRpdmVpbnQub2Zfc3RyaW5nLCBJbnQzMi5vZl9zdHJpbmcsIGFuZCBJbnQ2NC5vZl9zdHJpbmcsXG4gICBzaW5jZSB0aG9zZSBtb2R1bGVzIGFyZSBub3QgYXZhaWxhYmxlIHRvIFtTY2FuZl0uXG4gICBIb3dldmVyLCB3ZSBjYW4gYmluZCBhbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHByaW1pdGl2ZXMgdGhhdCBhcmVcbiAgIGF2YWlsYWJsZSBpbiB0aGUgcnVudGltZS4gKilcbmV4dGVybmFsIG5hdGl2ZWludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gbmF0aXZlaW50XG4gID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQzMl9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgaW50NjRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cblxubGV0IHRva2VuX25hdGl2ZWludCBjb252IGliID0gbmF0aXZlaW50X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcbmxldCB0b2tlbl9pbnQzMiBjb252IGliID0gaW50MzJfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDY0IGNvbnYgaWIgPSBpbnQ2NF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbigqIFNjYW5uaW5nIG51bWJlcnMuICopXG5cbigqIERpZ2l0cyBzY2FubmluZyBmdW5jdGlvbnMgc3VwcG9zZSB0aGF0IG9uZSBjaGFyYWN0ZXIgaGFzIGJlZW4gY2hlY2tlZCBhbmRcbiAgIGlzIGF2YWlsYWJsZSwgc2luY2UgdGhleSByZXR1cm4gYXQgZW5kIG9mIGZpbGUgd2l0aCB0aGUgY3VycmVudGx5IGZvdW5kXG4gICB0b2tlbiBzZWxlY3RlZC5cblxuICAgUHV0IGl0IGluIGFub3RoZXIgd2F5LCB0aGUgZGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzY2FuIGZvciBhIHBvc3NpYmx5XG4gICBlbXB0eSBzZXF1ZW5jZSBvZiBkaWdpdHMsIChoZW5jZSwgYSBzdWNjZXNzZnVsIHNjYW5uaW5nIGZyb20gb25lIG9mIHRob3NlXG4gICBmdW5jdGlvbnMgZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgdG9rZW4gaXMgYSB3ZWxsLWZvcm1lZCBudW1iZXI6IHRvIGdldCBhXG4gICB0cnVlIG51bWJlciwgaXQgaXMgbWFuZGF0b3J5IHRvIGNoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIHZhbGlkIGRpZ2l0IGlzXG4gICBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBkaWdpdCBzY2FubmluZyBmdW5jdGlvbnMpLiAqKVxuXG4oKiBUaGUgZGVjaW1hbCBjYXNlIGlzIHRyZWF0ZWQgZXNwZWNpYWxseSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzLiAqKVxubGV0IHJlYyBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8ICdfJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliIGluXG4gICAgc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWJcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRlY2ltYWwgZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IGMgLT5cbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIGRlY2ltYWwgZGlnaXRcIiBjKVxuXG5cbigqIFRvIHNjYW4gbnVtYmVycyBmcm9tIG90aGVyIGJhc2VzLCB3ZSB1c2UgYSBwcmVkaWNhdGUgYXJndW1lbnQgdG9cbiAgIHNjYW4gZGlnaXRzLiAqKVxubGV0IHNjYW5fZGlnaXRfc3RhciBkaWdpdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIHNjYW5fZGlnaXRzIHdpZHRoIGliID1cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBjIHdoZW4gZGlnaXRwIGMgLT5cbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8ICdfJyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICAgIHNjYW5fZGlnaXRzIHdpZHRoIGliXG4gICAgfCBfIC0+IHdpZHRoIGluXG4gIHNjYW5fZGlnaXRzIHdpZHRoIGliXG5cblxubGV0IHNjYW5fZGlnaXRfcGx1cyBiYXNpcyBkaWdpdHAgd2lkdGggaWIgPVxuICAoKiBFbnN1cmUgd2UgaGF2ZSBnb3QgZW5vdWdoIHdpZHRoIGxlZnQsXG4gICAgIGFuZCByZWFkIGF0IGxlYXN0IG9uZSBkaWdpdC4gKilcbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRpZ2l0c1wiIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBpZiBkaWdpdHAgYyB0aGVuXG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYlxuICBlbHNlXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcImNoYXJhY3RlciAlQyBpcyBub3QgYSB2YWxpZCAlcyBkaWdpdFwiIGMgYmFzaXMpXG5cblxubGV0IGlzX2JpbmFyeV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICcxJyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5cbmxldCBzY2FuX2JpbmFyeV9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJiaW5hcnlcIiBpc19iaW5hcnlfZGlnaXRcblxubGV0IGlzX29jdGFsX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzcnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fb2N0YWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwib2N0YWxcIiBpc19vY3RhbF9kaWdpdFxuXG5sZXQgaXNfaGV4YV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5faGV4YWRlY2ltYWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwiaGV4YWRlY2ltYWxcIiBpc19oZXhhX2RpZ2l0XG5cbigqIFNjYW4gYSBkZWNpbWFsIGludGVnZXIuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCA9IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzXG5cbmxldCBzY2FuX3NpZ24gd2lkdGggaWIgPVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcrJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCAnLScgLT4gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjXG4gIHwgXyAtPiB3aWR0aFxuXG5cbmxldCBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FuIGFuIHVuc2lnbmVkIGludGVnZXIgdGhhdCBjb3VsZCBiZSBnaXZlbiBpbiBhbnkgKGNvbW1vbikgYmFzaXMuXG4gICBJZiBkaWdpdHMgYXJlIHByZWZpeGVkIGJ5IG9uZSBvZiAweCwgMFgsIDBvLCBvciAwYiwgdGhlIG51bWJlciBpc1xuICAgYXNzdW1lZCB0byBiZSB3cml0dGVuIHJlc3BlY3RpdmVseSBpbiBoZXhhZGVjaW1hbCwgaGV4YWRlY2ltYWwsXG4gICBvY3RhbCwgb3IgYmluYXJ5LiAqKVxubGV0IHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICAgIGJlZ2luIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3gnIHwgJ1gnIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gICAgfCAnbycgLT4gc2Nhbl9vY3RhbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdiJyAtPiBzY2FuX2JpbmFyeV9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8IF8gLT4gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgZW5kXG4gIHwgXyAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5faW50X2NvbnZlcnNpb24gY29udiB3aWR0aCBpYiA9XG4gIG1hdGNoIGNvbnYgd2l0aFxuICB8IEJfY29udmVyc2lvbiAtPiBzY2FuX2JpbmFyeV9pbnQgd2lkdGggaWJcbiAgfCBEX2NvbnZlcnNpb24gLT4gc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICB8IElfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2ludCB3aWR0aCBpYlxuICB8IE9fY29udmVyc2lvbiAtPiBzY2FuX29jdGFsX2ludCB3aWR0aCBpYlxuICB8IFVfY29udmVyc2lvbiAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgWF9jb252ZXJzaW9uIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliXG5cblxuKCogU2Nhbm5pbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKilcblxuKCogRnJhY3Rpb25hbCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2ZyYWN0aW9uYWxfcGFydCB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBFeHAgcGFydCBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlZHVjZWQgdG8gMCBkaWdpdHMuICopXG5sZXQgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICdlJyB8ICdFJyBhcyBjIC0+XG4gICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBTY2FuIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIChub3QgdXNpbmcgdGhlXG4gICBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24gc2luY2UgdGhlIGludGVnZXIgcGFydCBjYW4gYmUgZW1wdHkpOlxuICAgYW4gb3B0aW9uYWwgc2lnbiwgZm9sbG93ZWQgYnkgYSBwb3NzaWJseSBlbXB0eSBzZXF1ZW5jZSBvZiBkZWNpbWFsXG4gICBkaWdpdHMgKGUuZy4gLS4xKS4gKilcbmxldCBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuXG5cbigqXG4gICBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgaGF2ZSAoYXMgZm91bmQgaW4gc2NhbmYubWxpKTpcbiAgIHRoZSBmaWVsZCB3aWR0aCBpcyBjb21wb3NlZCBvZiBhbiBvcHRpb25hbCBpbnRlZ2VyIGxpdGVyYWxcbiAgIGluZGljYXRpbmcgdGhlIG1heGltYWwgd2lkdGggb2YgdGhlIHRva2VuIHRvIHJlYWQuXG4gICBVbmZvcnR1bmF0ZWx5LCB0aGUgdHlwZS1jaGVja2VyIGxldCB0aGUgdXNlciB3cml0ZSBhbiBvcHRpb25hbCBwcmVjaXNpb24sXG4gICBzaW5jZSB0aGlzIGlzIHZhbGlkIGZvciBwcmludGYgZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRodXMsIHRoZSBuZXh0IHN0ZXAgZm9yIFNjYW5mIGlzIHRvIHN1cHBvcnQgYSBmdWxsIHdpZHRoIGFuZCBwcmVjaXNpb25cbiAgIGluZGljYXRpb24sIG1vcmUgb3IgbGVzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZm9yIHByaW50ZiwgcG9zc2libHkgZXh0ZW5kZWRcbiAgIHRvIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgW21heCwgbWluXSByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkXG4gICBmb3Igc3RyaW5ncy4gU29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBzcGVjIGZvciBzY2FuZi5tbGk6XG5cbiAgIFRoZSBvcHRpb25hbCBbd2lkdGhdIGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbWF4aW1hbFxuICAgd2lkdGggb2YgdGhlIHRva2VuIHJlYWQuIEZvciBpbnN0YW5jZSwgWyU2ZF0gcmVhZHMgYW4gaW50ZWdlcixcbiAgIGhhdmluZyBhdCBtb3N0IDYgY2hhcmFjdGVycy5cblxuICAgVGhlIG9wdGlvbmFsIFtwcmVjaXNpb25dIGlzIGEgZG90IFsuXSBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyOlxuXG4gICAtIGluIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgY29udmVyc2lvbnMgKFslZl0sIFslZV0sIFslZ10sIFslRl0sIFslRV0sXG4gICBhbmQgWyVGXSBjb252ZXJzaW9ucywgdGhlIFtwcmVjaXNpb25dIGluZGljYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2ZcbiAgIGRpZ2l0cyB0aGF0IG1heSBmb2xsb3cgdGhlIGRlY2ltYWwgcG9pbnQuIEZvciBpbnN0YW5jZSwgWyUuNGZdIHJlYWRzIGFcbiAgIFtmbG9hdF0gd2l0aCBhdCBtb3N0IDQgZnJhY3Rpb25hbCBkaWdpdHMsXG5cbiAgIC0gaW4gdGhlIHN0cmluZyBjb252ZXJzaW9ucyAoWyVzXSwgWyVTXSwgWyVcXFsgcmFuZ2UgXFxdXSksIGFuZCBpbiB0aGVcbiAgIGludGVnZXIgbnVtYmVyIGNvbnZlcnNpb25zIChbJWldLCBbJWRdLCBbJXVdLCBbJXhdLCBbJW9dLCBhbmQgdGhlaXJcbiAgIFtpbnQzMl0sIFtpbnQ2NF0sIGFuZCBbbmF0aXZlX2ludF0gY29ycmVzcG9uZGVudCksIHRoZSBbcHJlY2lzaW9uXVxuICAgaW5kaWNhdGVzIHRoZSByZXF1aXJlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLFxuXG4gICAtIG9uIGFsbCBvdGhlciBjb252ZXJzaW9ucywgdGhlIHdpZHRoIGFuZCBwcmVjaXNpb24gc3BlY2lmeSB0aGUgW21heCwgbWluXVxuICAgcmFuZ2UgZm9yIHRoZSB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC5cbiopXG5sZXQgc2Nhbl9mbG9hdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGgsIHByZWNpc2lvbiBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcuJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgIGxldCB3aWR0aCA9IHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYikgaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuICB8IF8gLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuXG5cbmxldCBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBlcnJvciBzdHIgPVxuICBsZXQgbG93ZXJjYXNlIGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ0EnIC4uICdaJyAtPlxuICAgICAgY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyBpbnRfb2ZfY2hhciAnYScpXG4gICAgfCBfIC0+IGMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCA9IHJlZiB3aWR0aCBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgbG93ZXJjYXNlIGMgPD4gbG93ZXJjYXNlIHN0ci5baV0gdGhlbiBlcnJvciAoKTtcbiAgICBpZiAhd2lkdGggPSAwIHRoZW4gZXJyb3IgKCk7XG4gICAgd2lkdGggOj0gU2Nhbm5pbmcuc3RvcmVfY2hhciAhd2lkdGggaWIgYztcbiAgZG9uZTtcbiAgIXdpZHRoXG5cblxubGV0IHNjYW5faGV4X2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGxldCB3aWR0aCA9IGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJ4XCIgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICBsZXQgd2lkdGggPSBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgICAgKVxuICAgICAgICAgIHwgXyAtPiB3aWR0aCBpblxuICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgICB8IF8gLT4gd2lkdGhcbiAgKVxuICB8ICduJyB8ICdOJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcImFuXCJcbiAgfCAnaScgfCAnSScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJuZmluaXR5XCJcbiAgfCBfIC0+IGJhZF9oZXhfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgKCogVGhlIGVmZmVjdGl2ZSB3aWR0aCBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXNcbiAgICAgICB0aGUgbWluaW11bSBvZiBkZWNsYXJlZCBwcmVjaXNpb24gYW5kIHdpZHRoIGxlZnQuICopXG4gICAgbGV0IHByZWNpc2lvbiA9IEludC5taW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgKCogQWZ0ZXIgc2Nhbm5pbmcgdGhlIGZyYWN0aW9uYWwgcGFydCB3aXRoIFtwcmVjaXNpb25dIHByb3Zpc2lvbmFsIHdpZHRoLFxuICAgICAgIFt3aWR0aF9wcmVjaXNpb25dIGlzIGxlZnQuICopXG4gICAgbGV0IHdpZHRoX3ByZWNpc2lvbiA9IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYiBpblxuICAgICgqIEhlbmNlLCBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHRvb2sgZXhhY3RseVxuICAgICAgIFtwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb25dIGNoYXJzLiAqKVxuICAgIGxldCBmcmFjX3dpZHRoID0gcHJlY2lzaW9uIC0gd2lkdGhfcHJlY2lzaW9uIGluXG4gICAgKCogQW5kIG5ldyBwcm92aXNpb25hbCB3aWR0aCBpcyBbd2lkdGggLSB3aWR0aF9wcmVjaXNpb24uICopXG4gICAgbGV0IHdpZHRoID0gd2lkdGggLSBmcmFjX3dpZHRoIGluXG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgJ2UnIHwgJ0UnIC0+XG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgXyAtPiBiYWRfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+IChcbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAneCcgfCAnWCcgYXMgYyAtPiAoXG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgICBsZXQgd2lkdGggPSBzY2FuX2hleGFkZWNpbWFsX2ludCB3aWR0aCBpYiBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgd2lkdGggLSAocHJlY2lzaW9uIC0gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgcHJlY2lzaW9uIGliKVxuICAgICAgICApXG4gICAgICAgIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBiYWRfZmxvYXQgKCkgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJ3AnIHwgJ1AnIGFzIGMgLT5cbiAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gICAgICAgIHwgXyAtPiB3aWR0aFxuICAgIClcbiAgICB8IF8gLT5cbiAgICAgIHNjYW5fY2FtbF9mbG9hdF9yZXN0IHdpZHRoIHByZWNpc2lvbiBpYlxuICApXG4gIHwgJzEnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWJcbigqIFNwZWNpYWwgY2FzZSBvZiBuYW4gYW5kIGluZmluaXR5OlxuICB8ICdpJyAtPlxuICB8ICduJyAtPlxuKilcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbigqIFNjYW4gYSByZWd1bGFyIHN0cmluZzpcbiAgIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIGEgc3BhY2UsIGlmIG5vIHNjYW5uaW5nIGluZGljYXRpb24gaGFzIGJlZW4gZ2l2ZW47XG4gICBvdGhlcndpc2UsIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzY2FubmluZ1xuICAgaW5kaWNhdGlvbiBbc3RwXS5cbiAgIEl0IGFsc28gc3RvcHMgYXQgZW5kIG9mIGZpbGUgb3Igd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBoYXNcbiAgIGJlZW4gcmVhZC4gKilcbmxldCBzY2FuX3N0cmluZyBzdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIGxvb3Agd2lkdGggPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgIG1hdGNoIHN0cCB3aXRoXG4gICAgICB8IFNvbWUgYycgd2hlbiBjID0gYycgLT4gU2Nhbm5pbmcuc2tpcF9jaGFyIHdpZHRoIGliXG4gICAgICB8IFNvbWUgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGluXG4gIGxvb3Agd2lkdGhcblxuXG4oKiBTY2FuIGEgY2hhcjogcGVlayBzdHJpY3RseSBvbmUgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCwgd2hhdHNvZXZlci4gKilcbmxldCBzY2FuX2NoYXIgd2lkdGggaWIgPVxuICAoKiBUaGUgY2FzZSB3aWR0aCA9IDAgY291bGQgbm90IGhhcHBlbiBoZXJlLCBzaW5jZSBpdCBpcyB0ZXN0ZWQgYmVmb3JlXG4gICAgIGNhbGxpbmcgc2Nhbl9jaGFyLCBpbiB0aGUgbWFpbiBzY2FubmluZyBmdW5jdGlvbi5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiYSBjaGFyYWN0ZXJcIiBlbHNlICopXG4gIFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgKFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliKVxuXG5cbmxldCBjaGFyX2Zvcl9iYWNrc2xhc2ggPSBmdW5jdGlvblxuICB8ICduJyAtPiAnXFwwMTAnXG4gIHwgJ3InIC0+ICdcXDAxMydcbiAgfCAnYicgLT4gJ1xcMDA4J1xuICB8ICd0JyAtPiAnXFwwMDknXG4gIHwgYyAtPiBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyLiAqKVxubGV0IGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjID0gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJ1xuXG5sZXQgY2hhcl9mb3JfZGVjaW1hbF9jb2RlIGMwIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDEwMCAqIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMCArXG4gICAgIDEwICogZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMxICtcbiAgICAgICAgICBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzIgaW5cbiAgaWYgYyA8IDAgfHwgYyA+IDI1NSB0aGVuXG4gICAgYmFkX2lucHV0XG4gICAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgIFwiYmFkIGNoYXJhY3RlciBkZWNpbWFsIGVuY29kaW5nIFxcXFwlYyVjJWNcIiBjMCBjMSBjMikgZWxzZVxuICBjaGFyX29mX2ludCBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGhleGFkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rlci4gKilcbmxldCBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMgPVxuICBsZXQgZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgKCogQ291bGQgYWxzbyBiZTpcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICc5JyB0aGVuIGQgLSBpbnRfb2ZfY2hhciAnMCcgZWxzZVxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJ0YnIHRoZW4gMTAgKyBkIC0gaW50X29mX2NoYXIgJ0EnIGVsc2VcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICdmJyB0aGVuIDEwICsgZCAtIGludF9vZl9jaGFyICdhJyBlbHNlIGFzc2VydCBmYWxzZVxuICAqKVxuICBpZiBkID49IGludF9vZl9jaGFyICdhJyB0aGVuXG4gICAgZCAtIDg3ICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyAqKSBlbHNlXG4gIGlmIGQgPj0gaW50X29mX2NoYXIgJ0EnIHRoZW5cbiAgICBkIC0gNTUgICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyAqKSBlbHNlXG4gICAgZCAtIGludF9vZl9jaGFyICcwJ1xuXG5cbmxldCBjaGFyX2Zvcl9oZXhhZGVjaW1hbF9jb2RlIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDE2ICogaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMSArXG4gICAgICAgICBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMyIGluXG4gIGlmIGMgPCAwIHx8IGMgPiAyNTUgdGhlblxuICAgIGJhZF9pbnB1dFxuICAgICAgKFByaW50Zi5zcHJpbnRmIFwiYmFkIGNoYXJhY3RlciBoZXhhZGVjaW1hbCBlbmNvZGluZyBcXFxcJWMlY1wiIGMxIGMyKSBlbHNlXG4gIGNoYXJfb2ZfaW50IGNcblxuXG4oKiBDYWxsZWQgaW4gcGFydGljdWxhciB3aGVuIGVuY291bnRlcmluZyAnXFxcXCcgYXMgc3RhcnRlciBvZiBhIGNoYXIuXG4gICBTdG9wcyBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgJ1xcJycuICopXG5sZXQgY2hlY2tfbmV4dF9jaGFyIG1lc3NhZ2Ugd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgZWxzZVxuICBjXG5cblxubGV0IGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciA9IGNoZWNrX25leHRfY2hhciBcImEgQ2hhclwiXG5sZXQgY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgPSBjaGVja19uZXh0X2NoYXIgXCJhIFN0cmluZ1wiXG5cbmxldCBzY2FuX2JhY2tzbGFzaF9jaGFyIHdpZHRoIGliID1cbiAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgfCAnXFxcXCcgfCAnXFwnJyB8ICdcXFwiJyB8ICduJyB8ICd0JyB8ICdiJyB8ICdyJyBhcyBjIC0+XG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAoY2hhcl9mb3JfYmFja3NsYXNoIGMpXG4gIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IGdldF9kaWdpdCAoKSA9XG4gICAgICBsZXQgYyA9IFNjYW5uaW5nLm5leHRfY2hhciBpYiBpblxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBjXG4gICAgICB8IGMgLT4gYmFkX2lucHV0X2VzY2FwZSBjIGluXG4gICAgbGV0IGMwID0gYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2RlY2ltYWxfY29kZSBjMCBjMSBjMilcbiAgfCAneCcgLT5cbiAgICBsZXQgZ2V0X2RpZ2l0ICgpID1cbiAgICAgIGxldCBjID0gU2Nhbm5pbmcubmV4dF9jaGFyIGliIGluXG4gICAgICBtYXRjaCBjIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyB8ICdBJyAuLiAnRicgfCAnYScgLi4gJ2YnIGFzIGMgLT4gY1xuICAgICAgfCBjIC0+IGJhZF9pbnB1dF9lc2NhcGUgYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2hleGFkZWNpbWFsX2NvZGUgYzEgYzIpXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dF9lc2NhcGUgY1xuXG5cbigqIFNjYW4gYSBjaGFyYWN0ZXIgKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2NhbWxfY2hhciB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFwnJyAtPiBmaW5kX2NoYXIgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcJycgY1xuXG4gIGFuZCBmaW5kX2NoYXIgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxcXCcgLT5cbiAgICAgIGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpIGliKVxuICAgIHwgYyAtPlxuICAgICAgZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXCcnIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFwnJyBjIGluXG5cbiAgZmluZF9zdGFydCB3aWR0aFxuXG5cbigqIFNjYW4gYSBkZWxpbWl0ZWQgc3RyaW5nIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFxcIicgLT4gZmluZF9zdG9wIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXFwiJyBjXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcXCInIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCAnXFxcXCcgLT4gc2Nhbl9iYWNrc2xhc2ggKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcblxuICBhbmQgc2Nhbl9iYWNrc2xhc2ggd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXHInIC0+IHNraXBfbmV3bGluZSAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciB3aWR0aCBpYilcblxuICBhbmQgc2tpcF9uZXdsaW5lIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAnXFxyJylcblxuICBhbmQgc2tpcF9zcGFjZXMgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICcgJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCB3aWR0aCBpblxuXG4gIGZpbmRfc3RhcnQgd2lkdGhcblxuXG4oKiBTY2FuIGEgYm9vbGVhbiAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fYm9vbCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbGV0IG0gPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3QnIC0+IDRcbiAgICB8ICdmJyAtPiA1XG4gICAgfCBjIC0+XG4gICAgICBiYWRfaW5wdXRcbiAgICAgICAgKFByaW50Zi5zcHJpbnRmIFwidGhlIGNoYXJhY3RlciAlQyBjYW5ub3Qgc3RhcnQgYSBib29sZWFuXCIgYykgaW5cbiAgc2Nhbl9zdHJpbmcgTm9uZSBtIGliXG5cblxuKCogU2NhbiBhIHN0cmluZyBjb250YWluaW5nIGVsZW1lbnRzIGluIGNoYXJfc2V0IGFuZCB0ZXJtaW5hdGVkIGJ5IHNjYW5faW5kaWNcbiAgIGlmIHByb3ZpZGVkLiAqKVxubGV0IHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgc2Nhbl9pbmRpYyB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9jaGFycyBpIHN0cCA9XG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpID4gMCAmJiBub3QgKFNjYW5uaW5nLmVvZiBpYikgJiZcbiAgICAgICBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjICYmXG4gICAgICAgaW50X29mX2NoYXIgYyA8PiBzdHAgdGhlblxuICAgICAgbGV0IF8gPSBTY2FubmluZy5zdG9yZV9jaGFyIG1heF9pbnQgaWIgYyBpblxuICAgICAgc2Nhbl9jaGFycyAoaSAtIDEpIHN0cCBpblxuICBtYXRjaCBzY2FuX2luZGljIHdpdGhcbiAgfCBOb25lIC0+IHNjYW5fY2hhcnMgd2lkdGggKC0xKTtcbiAgfCBTb21lIGMgLT5cbiAgICBzY2FuX2NoYXJzIHdpZHRoIChpbnRfb2ZfY2hhciBjKTtcbiAgICBpZiBub3QgKFNjYW5uaW5nLmVvZiBpYikgdGhlblxuICAgICAgbGV0IGNpID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgICBpZiBjID0gY2lcbiAgICAgIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgICAgIGVsc2UgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuXG4oKiBUaGUgZ2xvYmFsIGVycm9yIHJlcG9ydCBmdW5jdGlvbiBmb3IgW1NjYW5mXS4gKilcbmxldCBzY2FuZl9iYWRfaW5wdXQgaWIgPSBmdW5jdGlvblxuICB8IFNjYW5fZmFpbHVyZSBzIHwgRmFpbHVyZSBzIC0+XG4gICAgbGV0IGkgPSBTY2FubmluZy5jaGFyX2NvdW50IGliIGluXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcInNjYW5mOiBiYWQgaW5wdXQgYXQgY2hhciBudW1iZXIgJWk6ICVzXCIgaSBzKVxuICB8IHggLT4gcmFpc2UgeFxuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiBhIGNvdW50ZXIgZnJvbSBhbiBpbnB1dCBidWZmZXIuICopXG5sZXQgZ2V0X2NvdW50ZXIgaWIgY291bnRlciA9XG4gIG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAtPiBTY2FubmluZy5saW5lX2NvdW50IGliXG4gIHwgQ2hhcl9jb3VudGVyIC0+IFNjYW5uaW5nLmNoYXJfY291bnQgaWJcbiAgfCBUb2tlbl9jb3VudGVyIC0+IFNjYW5uaW5nLnRva2VuX2NvdW50IGliXG5cblxuKCogQ29tcHV0ZSB0aGUgd2lkdGggb2YgYSBwYWRkaW5nIG9wdGlvbiAoc2VlIFwiJTQye1wiIGFuZCBcIiUxMjMoXCIpLiAqKVxubGV0IHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gbWF4X2ludFxuICB8IFNvbWUgd2lkdGggLT4gd2lkdGhcblxuXG5sZXQgc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmcgPVxuICBpZiBmbXRpbmcgPSBFc2NhcGVkX3BlcmNlbnQgdGhlbiAnJScsIFwiXCIgZWxzZVxuICAgIGxldCBzdHIgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nIGluXG4gICAgbGV0IHN0cCA9IHN0ci5bMV0gaW5cbiAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIDIgKFN0cmluZy5sZW5ndGggc3RyIC0gMikgaW5cbiAgICBzdHAsIHN1Yl9zdHJcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUmVhZGVyIG1hbmFnZW1lbnQgKilcblxuKCogQSBjYWxsIHRvIHRha2VfZm9ybWF0X3JlYWRlcnMgb24gYSBmb3JtYXQgaXMgZXZhbHVhdGVkIGludG8gZnVuY3Rpb25zXG4gICB0YWtpbmcgcmVhZGVycyBhcyBhcmd1bWVudHMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIGludG8gYW4gaGV0ZXJvZ2VuZW91cyBsaXN0ICopXG4oKiBXaGVuIGFsbCByZWFkZXJzIGFyZSB0YWtlbiwgZmluYWxseSBwYXNzIHRoZSBsaXN0IG9mIHRoZSByZWFkZXJzIHRvIHRoZVxuICAgY29udGludWF0aW9uIGsuICopXG5sZXQgcmVjIHRha2VfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICBkID1cbmZ1biBrIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IFJlYWRlciBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0XG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFN0cmluZyAoXywgcmVzdCkgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2FtbF9zdHJpbmcgKF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludDMyIChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgTmF0aXZlaW50IChfLCBfLCBfLCByZXN0KSAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQ2NCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZsb2F0IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQm9vbCAoXywgcmVzdCkgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ3VzdG9tIChfLCBfLCByZXN0KSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSksIHJlc3QpIC0+XG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXQgZm10IHJlc3QpXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpLCByZXN0KSAtPlxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBrIChjb25jYXRfZm10IGZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAgICAtPlxuICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAgICAgICAtPiB0YWtlX2lnbm9yZWRfZm9ybWF0X3JlYWRlcnMgayBpZ24gcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgLT4gayBOaWxcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gZm10dHkgY29taW5nIGZyb20gYSBGb3JtYXRfc3Vic3QgXCIlKC4uLiUpXCIuICopXG5hbmQgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyA6IHR5cGUgeCB5IGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCB4LCB5KSBmbXR0eSAtPlxuICAgICAgKHksIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIHgsIGUsIGYpIGZtdCAtPiBkID1cbmZ1biBrIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgUmVhZGVyX3R5IGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3QgZm10XG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdCBmbXRcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gaWdub3JlZCBwYXJhbWV0ZXIuICopXG5hbmQgdGFrZV9pZ25vcmVkX2Zvcm1hdF9yZWFkZXJzIDogdHlwZSB4IHkgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIHgsIHkpIGlnbm9yZWQgLT5cbiAgICAgICh5LCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCB4LCBlLCBmKSBmbXQgLT4gZCA9XG5mdW4gayBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBzY2FubmluZyAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBzY2FubmluZyBmdW5jdGlvbi4gKilcbigqIFNjYW4gYSBzdHJlYW0gYWNjb3JkaW5nIHRvIGEgZm9ybWF0IGFuZCByZWFkZXJzIG9idGFpbmVkIGJ5XG4gICB0YWtlX2Zvcm1hdF9yZWFkZXJzLCBhbmQgYWdncmVnYXRlIHNjYW5uZWQgdmFsdWVzIGludG8gYW5cbiAgIGhldGVyb2dlbmVvdXMgbGlzdC4gKilcbigqIFJldHVybiB0aGUgaGV0ZXJvZ2VuZW91cyBsaXN0IG9mIHNjYW5uZWQgdmFsdWVzLiAqKVxubGV0IHJlYyBtYWtlX3NjYW5mIDogdHlwZSBhIGMgZCBlIGYuXG4gICAgU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoZCwgZSkgaGV0ZXJfbGlzdCAtPiAoYSwgZikgaGV0ZXJfbGlzdCA9XG5mdW4gaWIgZm10IHJlYWRlcnMgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2hhciAwIGliIGluXG4gICAgbGV0IGMgPSB0b2tlbl9jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9jaGFyIDAgaWIgaW5cbiAgICBsZXQgYyA9IHRva2VuX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcblxuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lIHN0cCkgd2lkdGggaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHN0cl9yZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgJ3snKSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW5cbiAgICAgICAgICAgICAgICAgICB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lICdbJykgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuXG4gICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIE5vbmUgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQgYylcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5faW50MzIgYylcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX25hdGl2ZWludCBjKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQ2NCBjKVxuICB8IEZsb2F0ICgoXywgKEZsb2F0X0YgfCBGbG9hdF9DRikpLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW5fY2FtbF9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HKSksXG4gICAgICAgICAgIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2ggfCBGbG9hdF9IKSksIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9oZXhfZmxvYXQgdG9rZW5fZmxvYXRcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gXyBfIGliID0gc2Nhbl9ib29sIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9ib29sXG4gIHwgQWxwaGEgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlYVxcXCJcIlxuICB8IFRoZXRhIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJXRcXFwiXCJcbiAgfCBDdXN0b20gXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlP1xcXCIgKGN1c3RvbSBjb252ZXJ0ZXIpXCJcbiAgfCBSZWFkZXIgZm10X3Jlc3QgLT5cbiAgICBiZWdpbiBtYXRjaCByZWFkZXJzIHdpdGhcbiAgICB8IENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSAtPlxuICAgICAgICBsZXQgeCA9IHJlYWRlciBpYiBpblxuICAgICAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdF9yZXN0IHJlYWRlcnNfcmVzdClcbiAgICB8IE5pbCAtPlxuICAgICAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBtaXNzaW5nIHJlYWRlclwiXG4gICAgZW5kXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIGlmIFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gICAgZWxzZSBiYWRfaW5wdXQgXCJlbmQgb2YgaW5wdXQgbm90IGZvdW5kXCJcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIHN0cjtcbiAgICBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgY2hyO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgKHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCkgaWIgaW5cbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQgPVxuICAgICAgdHJ5IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgcyBmbXR0eVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChmbXQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfc3RyaW5nICh3aWR0aF9vZl9wYWRfb3B0IHBhZF9vcHQpIGliIGluXG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10LCBmbXQnID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdCcgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgICgqIFRPRE86IGZpbmQgYSB3YXkgdG8gYXZvaWQgcmVwYXJzaW5nIHR3aWNlICopXG5cbiAgICAgICAgKCogVE9ETzogdGhlc2UgdHlwZS1jaGVja3MgYmVsb3cgKmNhbiogZmFpbCBiZWNhdXNlIG9mIHR5cGVcbiAgICAgICAgICAgYW1iaWd1aXR5IGluIHByZXNlbmNlIG9mIGlnbm9yZWQtcmVhZGVyczogXCIlX3IlZFwiIGFuZCBcIiVkJV9yXCJcbiAgICAgICAgICAgYXJlIHR5cGVkIGluIHRoZSBzYW1lIHdheS5cblxuICAgICAgICAgICAjIFNjYW5mLnNzY2FuZiBcIlxcXCIlX3IlZFxcXCIzXCIgXCIlKCVkJV9yJSlcIiBpZ25vcmVcbiAgICAgICAgICAgICAoZnVuIGZtdCBuIC0+IHN0cmluZ19vZl9mb3JtYXQgZm10LCBuKVxuICAgICAgICAgICBFeGNlcHRpb246IENhbWxpbnRlcm5hbEZvcm1hdC5UeXBlX21pc21hdGNoLlxuXG4gICAgICAgICAgIFdlIHNob3VsZCBwcm9wZXJseSBjYXRjaCB0aGlzIGV4Y2VwdGlvbi5cbiAgICAgICAgKilcbiAgICAgICAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgZm10dHkpLFxuICAgICAgICB0eXBlX2Zvcm1hdCBmbXQnIChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChGb3JtYXQgKGZtdCwgcyksXG4gICAgICAgICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHdpZHRoID0gd2lkdGhfb2ZfcGFkX29wdCB3aWR0aF9vcHQgaW5cbiAgICBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IChTb21lIHN0cCkgd2lkdGggaWI7XG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIENvbnMgKHMsIG1ha2Vfc2NhbmYgaWIgc3RyX3Jlc3QgcmVhZGVycylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIGxldCB3aWR0aCA9IHdpZHRoX29mX3BhZF9vcHQgd2lkdGhfb3B0IGluXG4gICAgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCBOb25lIHdpZHRoIGliO1xuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgQ29ucyAocywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBsZXQgY291bnQgPSBnZXRfY291bnRlciBpYiBjb3VudGVyIGluXG4gICAgQ29ucyAoY291bnQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQpO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBjaGVja19jaGFyIGliICdAJzsgY2hlY2tfY2hhciBpYiAneyc7XG4gICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnNcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgJ0AnOyBjaGVja19jaGFyIGliICdbJztcbiAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVyc1xuXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICBiZWdpbiBtYXRjaCBtYWtlX3NjYW5mIGliIGZtdCcgcmVhZGVycyB3aXRoXG4gICAgfCBDb25zIChfLCBhcmdfcmVzdCkgLT4gYXJnX3Jlc3RcbiAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICBlbmRcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBOaWxcblxuKCogQ2FzZSBhbmFseXNpcyBvbiBwYWRkaW5nIGFuZCBwcmVjaXNpb24uICopXG4oKiBSZWplY3QgZm9ybWF0cyBjb250YWluaW5nIFwiJSpcIiBvciBcIiUuKlwiLiAqKVxuKCogUGFzcyBwYWRkaW5nIGFuZCBwcmVjaXNpb24gdG8gdGhlIGdlbmVyaWMgc2Nhbm5lciBgc2NhbicuICopXG5hbmQgcGFkX3ByZWNfc2NhbmYgOiB0eXBlIGEgYyBkIGUgZiB4IHkgeiB0IC5cbiAgICBTY2FubmluZy5pbl9jaGFubmVsIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChkLCBlKSBoZXRlcl9saXN0IC0+ICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPlxuICAgICAgKGludCAtPiBpbnQgLT4gU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiB0KSAtPlxuICAgICAgKFNjYW5uaW5nLmluX2NoYW5uZWwgLT4geikgLT5cbiAgICAgICh4LCBmKSBoZXRlcl9saXN0ID1cbmZ1biBpYiBmbXQgcmVhZGVycyBwYWQgcHJlYyBzY2FuIHRva2VuIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIG1heF9pbnQgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGxldCBfID0gc2NhbiBtYXhfaW50IHAgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIHcgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBsZXQgXyA9IHNjYW4gdyBwIGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKExlZnQsIF8pLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUtXFxcIlwiXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgXyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcbiAgfCBBcmdfcGFkZGluZyBfLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgKCogRGVmaW5pbmcgW3NjYW5mXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtzY2FuZl0gKilcblxubGV0IGtzY2FuZl9nZW4gaWIgZWYgYWYgKEZvcm1hdCAoZm10LCBzdHIpKSA9XG4gIGxldCByZWMgYXBwbHkgOiB0eXBlIGEgYiAuIGEgLT4gKGEsIGIpIGhldGVyX2xpc3QgLT4gYiA9XG4gICAgZnVuIGYgYXJncyAtPiBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IENvbnMgKHgsIHIpIC0+IGFwcGx5IChmIHgpIHJcbiAgICB8IE5pbCAtPiBmXG4gIGluXG4gIGxldCBrIHJlYWRlcnMgZiA9XG4gICAgU2Nhbm5pbmcucmVzZXRfdG9rZW4gaWI7XG4gICAgbWF0Y2ggbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycyB3aXRoXG4gICAgfCBleGNlcHRpb24gKFNjYW5fZmFpbHVyZSBfIHwgRmFpbHVyZSBfIHwgRW5kX29mX2ZpbGUgYXMgZXhjKSAtPlxuICAgICAgICBlZiBpYiBleGNcbiAgICB8IGV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICBpbnZhbGlkX2FyZyAobXNnIF4gXCIgaW4gZm9ybWF0IFxcXCJcIiBeIFN0cmluZy5lc2NhcGVkIHN0ciBeIFwiXFxcIlwiKVxuICAgIHwgYXJncyAtPlxuICAgICAgICBhZiAoYXBwbHkgZiBhcmdzKVxuICBpblxuICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG5cbmxldCBrc2NhbmYgaWIgZWYgZm10ID1cbiAga3NjYW5mX2dlbiBpYiBlZiAoZnVuIHggLT4geCkgZm10XG5cbmxldCBrc2NhbmZfb3B0IGliIGZtdCA9XG4gIGtzY2FuZl9nZW4gaWIgKGZ1biBfIF8gLT4gTm9uZSkgKGZ1biB4IC0+IFNvbWUgeCkgZm10XG5cbigqKiopXG5cbmxldCBrYnNjYW5mID0ga3NjYW5mXG5sZXQgYnNjYW5mIGliIGZtdCA9IGtic2NhbmYgaWIgc2NhbmZfYmFkX2lucHV0IGZtdFxubGV0IGJzY2FuZl9vcHQgaWIgZm10ID0ga3NjYW5mX29wdCBpYiBmbXRcblxubGV0IGtzc2NhbmYgcyBlZiBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBlZiBmbXRcbmxldCBzc2NhbmYgcyBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBzY2FuZl9iYWRfaW5wdXQgZm10XG5sZXQgc3NjYW5mX29wdCBzIGZtdCA9IGtzY2FuZl9vcHQgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGZtdFxuXG5sZXQgc2NhbmYgZm10ID0ga3NjYW5mIFNjYW5uaW5nLnN0ZGluIHNjYW5mX2JhZF9pbnB1dCBmbXRcbmxldCBzY2FuZl9vcHQgZm10ID0ga3NjYW5mX29wdCBTY2FubmluZy5zdGRpbiBmbXRcblxuKCoqKilcblxuKCogU2Nhbm5pbmcgZm9ybWF0IHN0cmluZ3MuICopXG5sZXQgYnNjYW5mX2Zvcm1hdCA6XG4gIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICdnKSAtPiAnZyA9XG4gIGZ1biBpYiBmb3JtYXQgZiAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyBtYXhfaW50IGliIGluXG4gICAgbGV0IHN0ciA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQnID1cbiAgICAgIHRyeSBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgZm9ybWF0XG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2cgaW5cbiAgICBmIGZtdCdcblxuXG5sZXQgc3NjYW5mX2Zvcm1hdCA6XG4gIHN0cmluZyAtPiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICAoKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gJ2cpIC0+ICdnID1cbiAgZnVuIHMgZm9ybWF0IGYgLT4gYnNjYW5mX2Zvcm1hdCAoU2Nhbm5pbmcuZnJvbV9zdHJpbmcgcykgZm9ybWF0IGZcblxuXG5sZXQgZm9ybWF0X2Zyb21fc3RyaW5nIHMgZm10ID1cbiAgc3NjYW5mX2Zvcm1hdCAoXCJcXFwiXCIgXiBTdHJpbmcuZXNjYXBlZCBzIF4gXCJcXFwiXCIpIGZtdCAoZnVuIHggLT4geClcblxuXG5sZXQgdW5lc2NhcGVkIHMgPVxuICBzc2NhbmYgKFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiKSBcIiVTJSFcIiAoZnVuIHggLT4geClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIkNhbWxpbnRlcm5hbEZvcm1hdCIsIkNhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcyIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfSW50IiwiU3RkbGliX0J1ZmZlciIsIm51bGxfY2hhciIsIm5leHRfY2hhciIsImliIiwiYyIsImV4biIsInBlZWtfY2hhciIsImNoZWNrZWRfcGVla19jaGFyIiwiZW5kX29mX2lucHV0IiwiYmVnaW5uaW5nX29mX2lucHV0IiwibmFtZV9vZl9pbnB1dCIsIm1hdGNoIiwiZm5hbWUiLCJjaGFyX2NvdW50IiwiaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIiLCJ0b2tlbl9zdHJpbmciLCJ0b2tlbl9idWZmZXIiLCJ0b2siLCJpZ25vcmVfY2hhciIsIndpZHRoIiwic3RvcmVfY2hhciIsImNyZWF0ZSIsImluYW1lIiwibmV4dCIsImZyb21fc3RyaW5nIiwicyIsImxlbiIsImkiLCJwYXJhbSIsImZyb21fZnVuY3Rpb24iLCJzY2FuX2Nsb3NlX2F0X2VuZCIsImljIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImJ1ZiIsImxpbSIsImVvZiIsImNzdCIsInN0ZGluIiwib3Blbl9pbl9maWxlIiwib3Blbl9pbiIsIm9wZW5faW5fYmluIiwiZnJvbV9jaGFubmVsIiwiY2xvc2VfaW4iLCJTY2FuX2ZhaWx1cmUiLCJiYWRfaW5wdXQiLCJiYWRfaW5wdXRfZXNjYXBlIiwiY3N0X3NjYW5uaW5nX29mIiwiYmFkX3Rva2VuX2xlbmd0aCIsIm1lc3NhZ2UiLCJjc3Rfbm90X2FfdmFsaWRfZmxvYXRfaW5faGV4YWQiLCJiYWRfaGV4X2Zsb2F0IiwiY2hhcmFjdGVyX21pc21hdGNoIiwiY2kiLCJjaGVja19jaGFyIiwiY2hlY2tfdGhpc19jaGFyIiwidG9rZW5fY2hhciIsInRva2VuX2Jvb2wiLCJjc3Rfc2NhbmZfbWwiLCJpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciIsInN3aXRjaGVyIiwidG9rZW5faW50X2xpdGVyYWwiLCJjb252IiwibCIsInRva2VuX2Zsb2F0Iiwic2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIiLCJjc3RfY2hhcmFjdGVyIiwic2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXMiLCJzY2FuX2RpZ2l0X3BsdXMiLCJiYXNpcyIsImRpZ2l0cCIsImlzX2JpbmFyeV9kaWdpdCIsImlzX29jdGFsX2RpZ2l0IiwiaXNfaGV4YV9kaWdpdCIsInNjYW5fc2lnbiIsInNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbCIsImNzdF9oZXhhZGVjaW1hbCIsInNjYW5faW50X2NvbnZlcnNpb24iLCJjc3RfYmluYXJ5IiwiY3N0X29jdGFsIiwic2Nhbl9mcmFjdGlvbmFsX3BhcnQiLCJzY2FuX2V4cG9uZW50X3BhcnQiLCJzY2FuX2Zsb2F0IiwicHJlY2lzaW9uIiwiY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmciLCJlcnJvciIsInN0ciIsImxvd2VyY2FzZSIsInNjYW5faGV4X2Zsb2F0IiwiY3N0X25vX2RvdF9vcl9leHBvbmVudF9wYXJ0X2ZvIiwic2Nhbl9jYW1sX2Zsb2F0X3Jlc3QiLCJ3aWR0aF9wcmVjaXNpb24iLCJmcmFjX3dpZHRoIiwic2Nhbl9jYW1sX2Zsb2F0Iiwic2Nhbl9zdHJpbmciLCJzdHAiLCJoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIiwiY2hlY2tfbmV4dF9jaGFyIiwiY3N0X2FfQ2hhciIsInNjYW5fYmFja3NsYXNoX2NoYXIiLCJjMCIsImdldF9kaWdpdCIsImMxIiwiYzIiLCJzY2FuX2NhbWxfc3RyaW5nIiwiY3N0X2FfU3RyaW5nIiwiZmluZF9zdG9wIiwiY291bnRlciIsInNraXBfc3BhY2VzIiwic2Nhbl9jaGFyc19pbl9jaGFyX3NldCIsImNoYXJfc2V0Iiwic2Nhbl9pbmRpYyIsInNjYW5fY2hhcnMiLCJzY2FuZl9iYWRfaW5wdXQiLCJ4Iiwid2lkdGhfb2ZfcGFkX29wdCIsInBhZF9vcHQiLCJzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm10aW5nIiwic3ViX3N0ciIsInRha2VfZm9ybWF0X3JlYWRlcnMiLCJrIiwiZm10IiwicmVzdCIsImZtdHR5IiwiaWduIiwicmVhZGVyIiwibmV3X2siLCJyZWFkZXJzX3Jlc3QiLCJmbXRfcmVzdCIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMiLCJ0eTIiLCJ0eTEiLCJ0eSIsIm1ha2Vfc2NhbmYiLCJyZWFkZXJzIiwicHJlYyIsInBhZCIsImNociIsIm1zZyIsImZvcm1hdHRpbmdfbGl0IiwiY291bnQiLCJhcmdfcmVzdCIsIndpZHRoX29wdCIsImZtdGluZ19saXQiLCJzY2FuIiwibSIsImljb252IiwicGFkX3ByZWNfc2NhbmYiLCJ0b2tlbiIsImNzdF9zY2FuZl9iYWRfY29udmVyc2lvbiIsInAiLCJ3Iiwia3NjYW5mX2dlbiIsImVmIiwiYWYiLCJhcmdzIiwiZXhjIiwia3NjYW5mIiwia3NjYW5mX29wdCIsImJzY2FuZiIsImJzY2FuZl9vcHQiLCJrc3NjYW5mIiwic3NjYW5mIiwic3NjYW5mX29wdCIsInNjYW5mIiwic2NhbmZfb3B0IiwiYnNjYW5mX2Zvcm1hdCIsImZvcm1hdCIsInNzY2FuZl9mb3JtYXQiLCJmb3JtYXRfZnJvbV9zdHJpbmciLCJ1bmVzY2FwZWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsMkJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLFlBQUFDLFVBQUFDO0FBQUFBLElDb0tJO0FBQUEsU0FBQUMsSUFDVTtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBLEtBQ0EsYUFBaUI7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUR6S3ZCO0FBQUE7QUFBQSxLQzZLTTtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsR0FBQztBQUFBLFlBQUFDLFVBQUFILElBSUgsdUJBRUssYUFBWTtBQUFBLFlBQUFJLGtCQUFBSjtBQUFB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QyxVQUFBNUMsS0FDckMsNkJBQTZCO0FBQUEsWUFBQTZDLGNBQUFySyxJQUFBc0ssUUFBQXZMO0FBQUFBLElBU3JDO0FBQUEsUUFBQXFHLE1BQ0U7QUFBQSxJQUNWLFlBQ00sZ0RBQUFvQyxNQUFBO0FBQUEsVUFBQXRIO0FBQUFBLFNBQUFBLE1EaCtDVjtBQUFBO0FBQUEsU0FBQXVJLE1BQUEsUUFBQWpCLE1DaStDMEI7QUFBQTtBQUFBLElBQ3RCLHlCQUFNO0FBQUE7QUFBQSxZQUFBK0MsY0FBQWpKLEdBQUFnSixRQUFBdkw7QUFBQUEsSUFNd0IsT0FBd0IsY0FBeEIsMEJBQWlDO0FBQUE7QUFBQSxZQUFBeUwsbUJBQUFsSixHQUFBa0c7QUFBQUE7QUFBQUEsS0FBQSxJQUkzQztBQUFBO0FBQUEsSUFBUixPQUFnQztBQUFBLGFBQWhDLDZDQUFBUixHQUErQyxTQUFDLEVBQUM7QUFBQTtBQUFBLFdBbmdCTjtBQUFBLFlBQUF5RCxVQUFBbko7QUFBQUEsUUFBQSxJQXVnQjFDO0FBQUEsSUFBUixPQUFpQjtBQUFBLG9CQUFqQiw0Q0FBQTBGLEdBQW1DLFNBQUMsRUFBQztBQUFBO0FBQUEsR0F2Z0JhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6K0IzRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI5ODg2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbGxiYWNrLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJTdGRsaWJfT2JqIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwibmFtZSIsImV4biIsInNsb3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsNEJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsWUFBQUMsbUJBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUN5QmdCO0FBQUEsS0FBQUMsT0FBQTtBQUFBLElBQ2QsNENBQThCO0FBQUE7QUFBQSxHRDFCaEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTkwOSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9maWxlbmFtZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIERhbWllbiBEb2xpZ2V6LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGdlbmVyaWNfcXVvdGUgcXVvdGVxdW90ZSBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBiICdcXCcnO1xuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBpZiBzLltpXSA9ICdcXCcnXG4gICAgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHF1b3RlcXVvdGVcbiAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBiICBzLltpXVxuICBkb25lO1xuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1sxXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Jhc2VuYW1lLmh0bWxcbiAgSW4gc3RlcCAxIG9mIFtbMV1dLCB3ZSBjaG9vc2UgdG8gcmV0dXJuIFwiLlwiIGZvciBlbXB0eSBpbnB1dC5cbiAgICAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBPQ2FtbClcbiAgSW4gc3RlcCAyLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4gIFN0ZXAgNiBpcyBub3QgaW1wbGVtZW50ZWQ6IHdlIGNvbnNpZGVyIHRoYXQgdGhlIFtzdWZmaXhdIG9wZXJhbmQgaXNcbiAgICBhbHdheXMgYWJzZW50LiAgU3VmZml4ZXMgYXJlIGhhbmRsZWQgYnkgW2Nob3Bfc3VmZml4XSBhbmQgW2Nob3BfZXh0ZW5zaW9uXS5cbiopXG5sZXQgZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgZmluZF9lbmQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGZpbmRfZW5kIChuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIG4gKG4gKyAxKVxuICBhbmQgZmluZF9iZWcgbiBwID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIHBcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gU3RyaW5nLnN1YiBuYW1lIChuICsgMSkgKHAgLSBuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIChuIC0gMSkgcFxuICBpblxuICBpZiBuYW1lID0gXCJcIlxuICB0aGVuIGN1cnJlbnRfZGlyX25hbWVcbiAgZWxzZSBmaW5kX2VuZCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1syXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Rpcm5hbWUuaHRtbFxuICBJbiBzdGVwIDYgb2YgW1syXV0sIHdlIGNob29zZSB0byBwcm9jZXNzIFwiLy9cIiBub3JtYWxseS5cbiopXG5sZXQgZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBuYW1lID1cbiAgbGV0IHJlYyB0cmFpbGluZ19zZXAgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIHRyYWlsaW5nX3NlcCAobiAtIDEpXG4gICAgZWxzZSBiYXNlIG5cbiAgYW5kIGJhc2UgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGludGVybWVkaWF0ZV9zZXAgblxuICAgIGVsc2UgYmFzZSAobiAtIDEpXG4gIGFuZCBpbnRlcm1lZGlhdGVfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIChuIC0gMSlcbiAgICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChuICsgMSlcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgdHJhaWxpbmdfc2VwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5tb2R1bGUgdHlwZSBTWVNERVBTID0gc2lnXG4gIHZhbCBudWxsIDogc3RyaW5nXG4gIHZhbCBjdXJyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBwYXJlbnRfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIGRpcl9zZXAgOiBzdHJpbmdcbiAgdmFsIGlzX2Rpcl9zZXAgOiBzdHJpbmcgLT4gaW50IC0+IGJvb2xcbiAgdmFsIGlzX3JlbGF0aXZlIDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGlzX2ltcGxpY2l0IDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNoZWNrX3N1ZmZpeCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbFxuICB2YWwgY2hvcF9zdWZmaXhfb3B0IDogc3VmZml4OnN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvblxuICB2YWwgdGVtcF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcXVvdGUgOiBzdHJpbmcgLT4gc3RyaW5nXG4gIHZhbCBxdW90ZV9jb21tYW5kIDpcbiAgICBzdHJpbmcgLT4gP3N0ZGluOiBzdHJpbmcgLT4gP3N0ZG91dDogc3RyaW5nIC0+ID9zdGRlcnI6IHN0cmluZ1xuICAgICAgICAgICAtPiBzdHJpbmcgbGlzdCAtPiBzdHJpbmdcbiAgdmFsIGJhc2VuYW1lIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgZGlybmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgVW5peCA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwIHMgaSA9IHMuW2ldID0gJy8nXG4gIGxldCBpc19yZWxhdGl2ZSBuID0gU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLydcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gIGxldCBjaGVja19zdWZmaXggbmFtZSBzdWZmID1cbiAgICBTdHJpbmcuZW5kc193aXRoIH5zdWZmaXg6c3VmZiBuYW1lXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgciA9IHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVE1QRElSXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIvdG1wXCJcbiAgbGV0IHF1b3RlID0gZ2VuZXJpY19xdW90ZSBcIidcXFxcJydcIlxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSAoY21kIDo6IGFyZ3MpKVxuICAgIF4gKG1hdGNoIHN0ZGluICB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA8XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBpZiBzdGRlcnIgPSBzdGRvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZSBmKVxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgV2luMzIgOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCJOVUxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIlxcXFxcIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBsZXQgYyA9IHMuW2ldIGluIGMgPSAnLycgfHwgYyA9ICdcXFxcJyB8fCBjID0gJzonXG4gIGxldCBpc19yZWxhdGl2ZSBuID1cbiAgICAoU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLycpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJ1xcXFwnKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAyIHx8IG4uWzFdIDw+ICc6JylcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLlxcXFxcIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uXFxcXFwiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICBTdHJpbmcubGVuZ3RoIG5hbWUgPj0gU3RyaW5nLmxlbmd0aCBzdWZmICYmXG4gICAobGV0IHMgPSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nLmxlbmd0aCBzdWZmKSBpblxuICAgIFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgcyA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3VmZilcblxuICBsZXQgY2hvcF9zdWZmaXhfb3B0IH5zdWZmaXggZmlsZW5hbWUgPVxuICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggc3VmZml4IGFuZCBsZW5fZiA9IFN0cmluZy5sZW5ndGggZmlsZW5hbWUgaW5cbiAgICBpZiBsZW5fZiA+PSBsZW5fcyB0aGVuXG4gICAgICBsZXQgciA9IFN0cmluZy5zdWIgZmlsZW5hbWUgKGxlbl9mIC0gbGVuX3MpIGxlbl9zIGluXG4gICAgICBpZiBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHIgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cblxuICBsZXQgdGVtcF9kaXJfbmFtZSA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJURU1QXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIuXCJcbiAgbGV0IHF1b3RlIHMgPVxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInIGVsc2VcbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1xcXCInIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAwIGk7XG4gICAgICB8IGMgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGIgYzsgbG9vcCAoaSsxKTtcbiAgICBhbmQgbG9vcF9icyBuIGkgPVxuICAgICAgaWYgaSA9IGwgdGhlbiBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIic7XG4gICAgICAgIGFkZF9icyBuO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICB8ICdcXFwiJyAtPiBhZGRfYnMgKDIqbisxKTsgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInOyBsb29wIChpKzEpO1xuICAgICAgICB8ICdcXFxcJyAtPiBsb29wX2JzIChuKzEpIChpKzEpO1xuICAgICAgICB8IF8gICAgLT4gYWRkX2JzIG47IGxvb3AgaVxuICAgICAgZW5kXG4gICAgYW5kIGFkZF9icyBuID0gZm9yIF9qID0gMSB0byBuIGRvIEJ1ZmZlci5hZGRfY2hhciBiICdcXFxcJzsgZG9uZVxuICAgIGluXG4gICAgbG9vcCAwO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4oKlxuUXVvdGluZyBjb21tYW5kcyBmb3IgZXhlY3V0aW9uIGJ5IGNtZC5leGUgaXMgZGlmZmljdWx0LlxuMS0gRWFjaCBhcmd1bWVudCBpcyBmaXJzdCBxdW90ZWQgdXNpbmcgdGhlIFwicXVvdGVcIiBmdW5jdGlvbiBhYm92ZSwgdG9cbiAgIHByb3RlY3QgaXQgYWdhaW5zdCB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sXG4gICB0aGVuIGNtZC5leGUncyBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgd2l0aCAnXicsIHVzaW5nXG4gICB0aGUgXCJxdW90ZV9jbWRcIiBmdW5jdGlvbiBiZWxvdy4gIEZvciBtb3JlIGRldGFpbHMsIHNlZVxuICAgaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vdHdpc3R5bGl0dGxlcGFzc2FnZXNhbGxhbGlrZS8yMDExLzA0LzIzXG4yLSBUaGUgY29tbWFuZCBhbmQgdGhlIHJlZGlyZWN0aW9uIGZpbGVzLCBpZiBhbnksIG11c3QgYmUgZG91YmxlLXF1b3RlZFxuICAgaW4gY2FzZSB0aGV5IGNvbnRhaW4gc3BhY2VzLiAgVGhpcyBxdW90aW5nIGlzIGludGVycHJldGVkIGJ5IGNtZC5leGUsXG4gICBub3QgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sIGhlbmNlIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmVcbiAgIGNhbm5vdCBiZSB1c2VkLiAgVGhlIHR3byBjaGFyYWN0ZXJzIHdlIGRvbid0IGtub3cgaG93IHRvIHF1b3RlXG4gICBpbnNpZGUgYSBkb3VibGUtcXVvdGVkIGNtZC5leGUgc3RyaW5nIGFyZSBkb3VibGUtcXVvdGUgYW5kIHBlcmNlbnQuXG4gICBXZSBqdXN0IGZhaWwgaWYgdGhlIGNvbW1hbmQgbmFtZSBvciB0aGUgcmVkaXJlY3Rpb24gZmlsZSBuYW1lc1xuICAgY29udGFpbiBhIGRvdWJsZSBxdW90ZSAobm90IGFsbG93ZWQgaW4gV2luZG93cyBmaWxlIG5hbWVzLCBhbnl3YXkpXG4gICBvciBhIHBlcmNlbnQuICBTZWUgZnVuY3Rpb24gXCJxdW90ZV9jbWRfZmlsZW5hbWVcIiBiZWxvdy5cbjMtIFRoZSB3aG9sZSBzdHJpbmcgcGFzc2VkIHRvIFN5cy5jb21tYW5kIGlzIHRoZW4gZW5jbG9zZWQgaW4gZG91YmxlXG4gICBxdW90ZXMsIHdoaWNoIGFyZSBpbW1lZGlhdGVseSBzdHJpcHBlZCBieSBjbWQuZXhlLiAgT3RoZXJ3aXNlLFxuICAgc29tZSBvZiB0aGUgZG91YmxlIHF1b3RlcyBmcm9tIHN0ZXAgMiBhYm92ZSBjYW4gYmUgbWlzcGFyc2VkLlxuICAgU2VlIGUuZy4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk5NjUxNDFcbiopXG4gIGxldCBxdW90ZV9jbWQgcyA9XG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyMCkgaW5cbiAgICBTdHJpbmcuaXRlclxuICAgICAgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8ICcoJyB8ICcpJyB8ICchJyB8ICdeJyB8ICclJyB8ICdcXFwiJyB8ICc8JyB8ICc+JyB8ICcmJyB8ICd8JyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ14nOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYylcbiAgICAgIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcbiAgbGV0IHF1b3RlX2NtZF9maWxlbmFtZSBmID1cbiAgICBpZiBTdHJpbmcuZXhpc3RzIChmdW5jdGlvbiAnXFxcIicgfCAnJScgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIGYgdGhlblxuICAgICAgZmFpbHdpdGggKFwiRmlsZW5hbWUucXVvdGVfY29tbWFuZDogYmFkIGZpbGUgbmFtZSBcIiBeIGYpXG4gICAgZWxzZSBpZiBTdHJpbmcuY29udGFpbnMgZiAnICcgdGhlblxuICAgICAgU3RyaW5nLmNvbmNhdCBcIlwiIFtcIlxcXCJcIjsgZjsgXCJcXFwiXCJdXG4gICAgZWxzZVxuICAgICAgZlxuICAoKiBSZWRpcmVjdGlvbnMgaW4gY21kLmV4ZTogc2VlIGh0dHBzOi8vc3M2NC5jb20vbnQvc3ludGF4LXJlZGlyZWN0aW9uLmh0bWxcbiAgICAgYW5kIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3dpbmRvd3MvaXQtcHJvL3dpbmRvd3MteHAvYmI0OTA5ODIodj10ZWNobmV0LjEwKVxuICAqKVxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiXCIgW1xuICAgICAgXCJcXFwiXCI7XG4gICAgICBxdW90ZV9jbWRfZmlsZW5hbWUgY21kO1xuICAgICAgXCIgXCI7XG4gICAgICBxdW90ZV9jbWQgKFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIHF1b3RlIGFyZ3MpKTtcbiAgICAgIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICAobWF0Y2ggc3RkZXJyIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBcIiAyPiYxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICBcIlxcXCJcIlxuICAgIF1cbiAgbGV0IGhhc19kcml2ZSBzID1cbiAgICBsZXQgaXNfbGV0dGVyID0gZnVuY3Rpb25cbiAgICAgIHwgJ0EnIC4uICdaJyB8ICdhJyAuLiAneicgLT4gdHJ1ZVxuICAgICAgfCBfIC0+IGZhbHNlXG4gICAgaW5cbiAgICBTdHJpbmcubGVuZ3RoIHMgPj0gMiAmJiBpc19sZXR0ZXIgcy5bMF0gJiYgcy5bMV0gPSAnOidcbiAgbGV0IGRyaXZlX2FuZF9wYXRoIHMgPVxuICAgIGlmIGhhc19kcml2ZSBzXG4gICAgdGhlbiAoU3RyaW5nLnN1YiBzIDAgMiwgU3RyaW5nLnN1YiBzIDIgKFN0cmluZy5sZW5ndGggcyAtIDIpKVxuICAgIGVsc2UgKFwiXCIsIHMpXG4gIGxldCBkaXJuYW1lIHMgPVxuICAgIGxldCAoZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGxldCBkaXIgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGggaW5cbiAgICBkcml2ZSBeIGRpclxuICBsZXQgYmFzZW5hbWUgcyA9XG4gICAgbGV0IChfZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGhcbmVuZFxuXG5tb2R1bGUgQ3lnd2luIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiL2Rldi9udWxsXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCIvXCJcbiAgbGV0IGlzX2Rpcl9zZXAgPSBXaW4zMi5pc19kaXJfc2VwXG4gIGxldCBpc19yZWxhdGl2ZSA9IFdpbjMyLmlzX3JlbGF0aXZlXG4gIGxldCBpc19pbXBsaWNpdCA9IFdpbjMyLmlzX2ltcGxpY2l0XG4gIGxldCBjaGVja19zdWZmaXggPSBXaW4zMi5jaGVja19zdWZmaXhcbiAgbGV0IGNob3Bfc3VmZml4X29wdCA9IFdpbjMyLmNob3Bfc3VmZml4X29wdFxuICBsZXQgdGVtcF9kaXJfbmFtZSA9IFVuaXgudGVtcF9kaXJfbmFtZVxuICBsZXQgcXVvdGUgPSBVbml4LnF1b3RlXG4gIGxldCBxdW90ZV9jb21tYW5kID0gVW5peC5xdW90ZV9jb21tYW5kXG4gIGxldCBiYXNlbmFtZSA9IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG4gIGxldCBkaXJuYW1lID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuZW5kXG5cbm1vZHVsZSBTeXNkZXBzID1cbiAgKHZhbCAobWF0Y2ggU3lzLm9zX3R5cGUgd2l0aFxuICAgICAgIHwgXCJXaW4zMlwiIC0+IChtb2R1bGUgV2luMzI6IFNZU0RFUFMpXG4gICAgICAgfCBcIkN5Z3dpblwiIC0+IChtb2R1bGUgQ3lnd2luOiBTWVNERVBTKVxuICAgICAgIHwgXyAtPiAobW9kdWxlIFVuaXg6IFNZU0RFUFMpKSlcblxuaW5jbHVkZSBTeXNkZXBzXG5cbmxldCBjb25jYXQgZGlybmFtZSBmaWxlbmFtZSA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBkaXJuYW1lIGluXG4gIGlmIGwgPSAwIHx8IGlzX2Rpcl9zZXAgZGlybmFtZSAobC0xKVxuICB0aGVuIGRpcm5hbWUgXiBmaWxlbmFtZVxuICBlbHNlIGRpcm5hbWUgXiBkaXJfc2VwIF4gZmlsZW5hbWVcblxubGV0IGNob3Bfc3VmZml4IG5hbWUgc3VmZiA9XG4gIGlmIGNoZWNrX3N1ZmZpeCBuYW1lIHN1ZmZcbiAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gU3RyaW5nLmxlbmd0aCBzdWZmKVxuICBlbHNlIGludmFsaWRfYXJnIFwiRmlsZW5hbWUuY2hvcF9zdWZmaXhcIlxuXG5sZXQgZXh0ZW5zaW9uX2xlbiBuYW1lID1cbiAgbGV0IHJlYyBjaGVjayBpMCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaTAgKGkgLSAxKVxuICAgIGVsc2UgU3RyaW5nLmxlbmd0aCBuYW1lIC0gaTBcbiAgaW5cbiAgbGV0IHJlYyBzZWFyY2hfZG90IGkgPVxuICAgIGlmIGkgPCAwIHx8IGlzX2Rpcl9zZXAgbmFtZSBpIHRoZW4gMFxuICAgIGVsc2UgaWYgbmFtZS5baV0gPSAnLicgdGhlbiBjaGVjayBpIChpIC0gMSlcbiAgICBlbHNlIHNlYXJjaF9kb3QgKGkgLSAxKVxuICBpblxuICBzZWFyY2hfZG90IChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5sZXQgZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIFwiXCIgZWxzZSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpIGxcblxubGV0IGNob3BfZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIGludmFsaWRfYXJnIFwiRmlsZW5hbWUuY2hvcF9leHRlbnNpb25cIlxuICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5sZXQgcmVtb3ZlX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBuYW1lIGVsc2UgU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpXG5cbmV4dGVybmFsIG9wZW5fZGVzYzogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuZXh0ZXJuYWwgY2xvc2VfZGVzYzogaW50IC0+IHVuaXQgPSBcImNhbWxfc3lzX2Nsb3NlXCJcblxubGV0IHBybmdfa2V5ID1cbiAgRG9tYWluLkRMUy5uZXdfa2V5IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdFxuXG5sZXQgdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByYW5kb21fc3RhdGUgPSBEb21haW4uRExTLmdldCBwcm5nX2tleSBpblxuICBsZXQgcm5kID0gKFJhbmRvbS5TdGF0ZS5iaXRzIHJhbmRvbV9zdGF0ZSkgbGFuZCAweEZGRkZGRiBpblxuICBjb25jYXQgdGVtcF9kaXIgKFByaW50Zi5zcHJpbnRmIFwiJXMlMDZ4JXNcIiBwcmVmaXggcm5kIHN1ZmZpeClcblxubGV0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSA9XG4gIERvbWFpbi5ETFMubmV3X2tleSB+c3BsaXRfZnJvbV9wYXJlbnQ6RnVuLmlkIChmdW4gKCkgLT4gdGVtcF9kaXJfbmFtZSlcblxubGV0IHNldF90ZW1wX2Rpcl9uYW1lIHMgPSBEb21haW4uRExTLnNldCBjdXJyZW50X3RlbXBfZGlyX25hbWUgc1xubGV0IGdldF90ZW1wX2Rpcl9uYW1lICgpID0gRG9tYWluLkRMUy5nZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lXG5cbmxldCB0ZW1wX2ZpbGUgPyh0ZW1wX2RpciA9IERvbWFpbi5ETFMuZ2V0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSkgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByZWMgdHJ5X25hbWUgY291bnRlciA9XG4gICAgbGV0IG5hbWUgPSB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4IGluXG4gICAgdHJ5XG4gICAgICBjbG9zZV9kZXNjKG9wZW5fZGVzYyBuYW1lIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl9leGNsXSAwbzYwMCk7XG4gICAgICBuYW1lXG4gICAgd2l0aCBTeXNfZXJyb3IgXyBhcyBlIC0+XG4gICAgICBpZiBjb3VudGVyID49IDIwIHRoZW4gcmFpc2UgZSBlbHNlIHRyeV9uYW1lIChjb3VudGVyICsgMSlcbiAgaW4gdHJ5X25hbWUgMFxuXG5sZXQgb3Blbl90ZW1wX2ZpbGUgPyhtb2RlID0gW09wZW5fdGV4dF0pID8ocGVybXMgPSAwbzYwMClcbiAgICA/KHRlbXBfZGlyID0gRG9tYWluLkRMUy5nZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lKVxuICAgIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgKG5hbWUsXG4gICAgICAgb3Blbl9vdXRfZ2VuIChPcGVuX3dyb25seTo6T3Blbl9jcmVhdDo6T3Blbl9leGNsOjptb2RlKSBwZXJtcyBuYW1lKVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAyMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcblxubGV0IHRlbXBfZGlyID8odGVtcF9kaXIgPSBEb21haW4uRExTLmdldCBjdXJyZW50X3RlbXBfZGlyX25hbWUpXG4gICAgPyhwZXJtcyA9IDBvNzAwKSBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIFN5cy5ta2RpciBuYW1lIHBlcm1zO1xuICAgICAgbmFtZVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAyMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9lcXVhbCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9SYW5kb20iLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TeXMiLCJjc3QiLCJnZW5lcmljX2Jhc2VuYW1lIiwiaXNfZGlyX3NlcCIsImN1cnJlbnRfZGlyX25hbWUiLCJuYW1lIiwibiIsInAiLCJnZW5lcmljX2Rpcm5hbWUiLCJzIiwiaSIsImlzX3JlbGF0aXZlIiwiaXNfaW1wbGljaXQiLCJjaGVja19zdWZmaXgiLCJzdWZmIiwiY2hvcF9zdWZmaXhfb3B0Iiwic3VmZml4IiwiZmlsZW5hbWUiLCJsZW5fcyIsImxlbl9mIiwiciIsImR1bW15IiwidGVtcF9kaXJfbmFtZSIsImV4biIsInF1b3RlIiwibCIsImIiLCJjc3RfMiIsImNzdF8yXzEiLCJxdW90ZV9jb21tYW5kIiwiY21kIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJhcmdzIiwiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY3N0X2Rldl9udWxsIiwiVW5peCIsImMiLCJsb29wIiwiY291bnRlciIsImxvb3BfYnMiLCJtYXRjaCIsImFkZF9icyIsImoiLCJxdW90ZV9jbWRfZmlsZW5hbWUiLCJwYXJhbSIsImRyaXZlX2FuZF9wYXRoIiwicGF0aCIsImRyaXZlIiwiZGlyIiwiV2luMzIiLCJDeWd3aW4iLCJTeXNkZXBzIiwibnVsbCQiLCJwYXJlbnRfZGlyX25hbWUiLCJkaXJfc2VwIiwiY29uY2F0IiwiY2hvcF9zdWZmaXgiLCJleHRlbnNpb25fbGVuIiwiaTAiLCJleHRlbnNpb24iLCJjaG9wX2V4dGVuc2lvbiIsInJlbW92ZV9leHRlbnNpb24iLCJwcm5nX2tleSIsInRlbXBfZmlsZV9uYW1lIiwidGVtcF9kaXIiLCJwcmVmaXgiLCJyYW5kb21fc3RhdGUiLCJybmQiLCJjdXJyZW50X3RlbXBfZGlyX25hbWUiLCJzZXRfdGVtcF9kaXJfbmFtZSIsImdldF90ZW1wX2Rpcl9uYW1lIiwidGVtcF9maWxlIiwib3B0IiwiZSIsIm9wZW5fdGVtcF9maWxlIiwibW9kZSIsInBlcm1zIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMs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O0FBQUFBO0FBQUFBLEtBQUFtRDtBQUFBQSxPQUVGLFdBQWE7QUFBQSxLQUFBWSxRQUFiO0FBQUEsS0FBQXRDLFVBU1I7QUFBQTtBQUFBLFNBQUFwQyxPQU5VO0FBQUEsS0FDWCxJQUNFO0FBQUEsV0FBQXVFO0FBQUFBLFVBQUFBLElEalhOO0FBQUE7QUFBQSxNQ29YTSxrQkFBc0I7QUFBQSxVQUFBbkMsWUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQzFCO0FBQUEsR0FwQ3lEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEalZ4RSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwNjMxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfTGlzdCIsImxlbmd0aCIsImNvbXBhcmVfbGVuZ3RocyIsImNvbXBhcmVfbGVuZ3RoX3dpdGgiLCJpc19lbXB0eSIsImNvbnMiLCJoZCIsInRsIiwibnRoIiwibnRoX29wdCIsInJldiIsImluaXQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwiY29uY2F0IiwiZmxhdHRlbiIsImVxdWFsIiwiY29tcGFyZSIsIml0ZXIiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJyZXZfbWFwIiwiZmlsdGVyX21hcCIsImNvbmNhdF9tYXAiLCJmb2xkX2xlZnRfbWFwIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsIml0ZXIyIiwibWFwMiIsInJldl9tYXAyIiwiZm9sZF9sZWZ0MiIsImZvbGRfcmlnaHQyIiwiZm9yX2FsbCIsImV4aXN0cyIsImZvcl9hbGwyIiwiZXhpc3RzMiIsIm1lbSIsIm1lbXEiLCJmaW5kIiwiZmluZF9vcHQiLCJmaW5kX2luZGV4IiwiZmluZF9tYXAiLCJmaW5kX21hcGkiLCJmaWx0ZXIiLCJmaW5kX2FsbCIsImZpbHRlcmkiLCJwYXJ0aXRpb24iLCJwYXJ0aXRpb25fbWFwIiwiYXNzb2MiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInJlbW92ZV9hc3NxIiwic3BsaXQiLCJjb21iaW5lIiwic29ydCIsInN0YWJsZV9zb3J0IiwiZmFzdF9zb3J0Iiwic29ydF91bmlxIiwibWVyZ2UiLCJ0b19zZXEiLCJvZl9zZXEiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxLQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwNzc2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvZm10Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIFZlcnkgc21hbGwgdG9vbGluZyBmb3IgZm9ybWF0IHByaW50ZXJzLiAqKVxuXG5pbmNsdWRlIEZvcm1hdFxuXG50eXBlICdhIHQgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxubGV0IGxpc3QgPSBwcF9wcmludF9saXN0XG5sZXQgYXJyYXkgP3BwX3NlcCBmIGZtdCBhcnIgPSBsaXN0ID9wcF9zZXAgZiBmbXQgKEFycmF5LnRvX2xpc3QgYXJyKVxubGV0IHN0ciA9IHBwX3ByaW50X3N0cmluZ1xubGV0IHNleHAgZm10IHMgcHAgeCA9IGZwcmludGYgZm10IFwiQFs8Mz4oJXNAICVhKUBdXCIgcyBwcCB4XG5sZXQgYnl0ZXMgZm10IHQgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlU1wiIChCeXRlcy50b19zdHJpbmcgdClcblxubGV0IHBhaXIgcHAxIHBwMiBmbXQgKHYxLCB2MikgPVxuICBwcDEgZm10IHYxO1xuICBwcF9wcmludF9zcGFjZSBmbXQgKCk7XG4gIHBwMiBmbXQgdjJcbjs7XG5cbmxldCB0cmlwbGUgcHAxIHBwMiBwcDMgZm10ICh2MSwgdjIsIHYzKSA9XG4gIHBwMSBmbXQgdjE7XG4gIHBwX3ByaW50X3NwYWNlIGZtdCAoKTtcbiAgcHAyIGZtdCB2MjtcbiAgcHBfcHJpbnRfc3BhY2UgZm10ICgpO1xuICBwcDMgZm10IHYzXG47O1xuXG5sZXQgb3B0IGYgZm10IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IHBwX3ByaW50X3N0cmluZyBmbXQgXCI8Tm9uZT5cIlxuICB8IFNvbWUgeCAtPiBmcHJpbnRmIGZtdCBcIiVhXCIgZiB4XG47O1xuXG5sZXQgaW50ID0gcHBfcHJpbnRfaW50XG5cbmxldCBvcHRpbnQgZm10ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBpIC0+IGZwcmludGYgZm10IFwiQCAlZFwiIGlcbjs7XG5cbmxldCBjaGFyIGZtdCBjID0gRm9ybWF0LmZwcmludGYgZm10IFwiJWNcIiBjXG5sZXQgYm9vbCA9IEZvcm1hdC5wcF9wcmludF9ib29sXG5sZXQgbGl0IHMgZm10ICgpID0gcHBfcHJpbnRfc3RyaW5nIGZtdCBzXG5cbmxldCB0b190b19zdHJpbmcgcHAgeCA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBwcCBmbXQgeDtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcbjs7XG5cbmxldCBxdW90ZWRfc3RyaW5nIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiBzXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Gb3JtYXQiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0FycmF5IiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfaW50IiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9saXN0IiwiZnByaW50ZiIsImFycmF5IiwicHBfc2VwIiwiZm10IiwiYXJyIiwiY3N0XzMiLCJjc3QiLCJzZXhwIiwicyIsInBwIiwieCIsImNzdF9TIiwiYnl0ZXMiLCJ0IiwicGFpciIsInBwMSIsInBwMiIsInBhcmFtIiwidjIiLCJ2MSIsInRyaXBsZSIsInBwMyIsInYzIiwib3B0Iiwib3B0aW50IiwiaSIsImNoYXIiLCJjIiwiYm9vbCIsImxpdCIsInRvX3RvX3N0cmluZyIsImIiLCJxdW90ZWRfc3RyaW5nIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsWUFBQUMsTUFBQUMsUUFBQWpCLEdBQUFrQixLQUFBQztBQUFBQSxJQ09pRCxPQUFtQiw4QkFBbkIsaUNBQW1CO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFEUHBFO0FBQUEsSUFBQUMsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFKLEtBQUFLLEdBQUFDLElBQUFDLEdDU3NCLDRDQUFvQztBQUFBLE9BQUFDLFFEVDFEO0FBQUEsWUFBQUMsTUFBQVQsS0FBQVU7QUFBQUEsUUFBQSxJQ1UwQztBQUFBLElBQW1CO0FBQUE7QUFBQSxZQUFBQyxLQUFBQyxLQUFBQyxLQUFBYixLQUFBYztBQUFBQSxRQUFBQyxLQUVwRCxVQUFBQyxLQUFBO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUFxQiwrQkFDWDtBQUFBO0FBQUEsWUFBQUMsT0FBQUwsS0FBQUMsS0FBQUssS0FBQWxCLEtBQUFjO0FBQUFBLFFBQUFLLEtBR0QsVUFBQUosS0FBQSxVQUFBQyxLQUFBO0FBQUEsSUFDVDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQXFCLCtCQUNYO0FBQUE7QUFBQSxXRHZCWjtBQUFBLFlBQUFJLElBQUF0QyxHQUFBa0IsS0FBQU87QUFBQUEsSUMyQkUsUUFDVSxxQ0FDc0I7QUFBQSxRQUFBQSxNQUZoQztBQUFBLElBRVksMENBQW9CO0FBQUE7QUFBQSxXRDdCbEM7QUFBQSxZQUFBYyxPQUFBckIsS0FBQWM7QUFBQUEsSUNrQ1csWUFDQztBQUFBLFFBQUFRLElBREQ7QUFBQSxJQUVHLHFDQUFvQjtBQUFBO0FBQUEsV0RwQ2xDO0FBQUEsWUFBQUMsS0FBQXZCLEtBQUF3QjtBQUFBQSxJQ3VDaUIsMkRBQXlCO0FBQUE7QUFBQSxPQUFBQyxPRHZDMUM7QUFBQSxZQUFBQyxJQUFBckIsR0FBQUwsS0FBQWMsT0N5Q21CLDhCQUFxQjtBQUFBLFlBQUFhLGFBQUFyQixJQUFBQztBQUFBQTtBQUFBQSxLQUFBcUIsSUFHOUI7QUFBQSxLQUFBNUIsTUFDRTtBQUFBLElBQ1Y7QUFBQSxJQUFRLHFDQUNTO0FBQUE7QUFBQSxXRC9DbkI7QUFBQSxZQUFBNkIsY0FBQTdCLEtBQUFLO0FBQUFBLElDa0QwQiwyREFBeUI7QUFBQTtBQUFBLEdEbERuRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwODkzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYml0X3ZlY3Rvci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsInR5cGUgdCA9XG4gIHsgbGVuIDogaW50XG4gIDsgYml0cyA6IEJ5dGVzLnRcbiAgfVxuXG5sZXQgYnl0ZSBzIGkgPSBDaGFyLmNvZGUgKEJ5dGVzLnVuc2FmZV9nZXQgcyBpKVxubGV0IHNldF9ieXRlIHMgaSB4ID0gQnl0ZXMudW5zYWZlX3NldCBzIGkgKENoYXIuY2hyIHgpXG5sZXQgbGVuZ3RoIHQgPSB0LmxlblxuXG5sZXQgdW5zYWZlX3NldCB2IG4gYiA9XG4gIGxldCBpID0gbiBsc3IgMyBpblxuICBsZXQgYyA9IGJ5dGUgdi5iaXRzIGkgaW5cbiAgbGV0IG1hc2sgPSAxIGxzbCAobiBsYW5kIDcpIGluXG4gIHNldF9ieXRlIHYuYml0cyBpIChpZiBiIHRoZW4gYyBsb3IgbWFzayBlbHNlIGMgbGFuZCBsbm90IG1hc2spXG47O1xuXG5sZXQgc2V0IHYgbiBiID1cbiAgaWYgbiA8IDAgfHwgbiA+PSB2LmxlbiB0aGVuIGludmFsaWRfYXJnIFwiQml0X3ZlY3Rvci5zZXRcIjtcbiAgdW5zYWZlX3NldCB2IG4gYlxuOztcblxubGV0IHVuc2FmZV9nZXQgdiBuID1cbiAgbGV0IGkgPSBuIGxzciAzIGluXG4gIGJ5dGUgdi5iaXRzIGkgbGFuZCAoMSBsc2wgKG4gbGFuZCA3KSkgPiAwXG47O1xuXG5sZXQgZ2V0IHYgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPj0gdi5sZW4gdGhlbiBpbnZhbGlkX2FyZyBcIkJpdF92ZWN0b3IuZ2V0XCI7XG4gIHVuc2FmZV9nZXQgdiBuXG47O1xuXG5sZXQgcmVzZXRfemVybyB0ID0gQnl0ZXMuZmlsbCB0LmJpdHMgMCAoQnl0ZXMubGVuZ3RoIHQuYml0cykgJ1xcMDAwJ1xuXG5sZXQgY3JlYXRlX3plcm8gbGVuID1cbiAgbGV0IGJpdHMgPVxuICAgIGxldCByID0gbGVuIGxhbmQgNyBpblxuICAgIGxldCBxID0gbGVuIGxzciAzIGluXG4gICAgbGV0IGxlbiA9IGlmIHIgPSAwIHRoZW4gcSBlbHNlIHEgKyAxIGluXG4gICAgQnl0ZXMubWFrZSBsZW4gJ1xcMDAwJ1xuICBpblxuICB7IGxlbjsgYml0cyB9XG47O1xuXG5sZXQgcHAgZm10IHsgbGVuOyBiaXRzIH0gPVxuICBsZXQgbGVuIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcImxlblwiIEZtdC5pbnQgbGVuIGluXG4gIGxldCBiaXRzIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcImJpdHNcIiBGbXQuYnl0ZXMgYml0cyBpblxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUAuJWFALlwiIGxlbiAoKSBiaXRzICgpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGw0IiwiZiIsImEwIiwiYTEiLCJhMiIsImEzIiwiZ2xvYmFsX2RhdGEiLCJSZV9GbXQiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX0J5dGVzIiwiU3RkbGliIiwiU3RkbGliX0NoYXIiLCJsZW5ndGgiLCJ0Iiwic2V0IiwidiIsIm4iLCJiIiwiaSIsInMiLCJjIiwibWFzayIsIngiLCJnZXQiLCJyZXNldF96ZXJvIiwiY3JlYXRlX3plcm8iLCJsZW4iLCJyIiwicSIsImJpdHMiLCJwcCIsImZtdCIsInBhcmFtIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUMsSUFBQUMsSUFBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLFlBQUFDLE9BQUFDLEdDT2UsWUFBSztBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFVbEI7QUFBQSxVQUE0QjtBQUFBO0FBQUEsS0FBQUMsSUFQNUI7QUFBQSxLQUFBQyxJQUNBO0FBQUEsS0FBQUMsSUFOYTtBQUFBLEtBQUFDLE9BT2I7QUFBQSxLQUFBQyxJQUNBLG1CQUFvRDtBQUFBLEtBQUFILE1BQXBEO0FBQUEsSUFQb0Qsc0NBQVo7QUFBQSxJQUFZO0FBQUEsR0FZcEM7QUFBQSxZQUFBSSxJQUFBUixHQUFBQztBQUFBQSxRQUFBLElBU2hCO0FBQUEsVUFBNEI7QUFBQSxRQUFBRSxJQUw1QixhQUFBQyxJQUNBO0FBQUEsSUFsQmEsK0RBa0JBO0FBQUEsR0FLQztBQUFBLFlBQUFLLFdBQUFYO0FBQUFBLElBR0c7QUFBQSxrRUFBZ0Q7QUFBQTtBQUFBLFlBQUFZLFlBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLElBR2pFO0FBQUEsS0FBQUMsSUFFRTtBQUFBLEtBQUFGLFFBQ0E7QUFBQSxLQUFBRyxPQUNBO0FBQUEsSUFFRjtBQUFBLEdBQWE7QUFBQSxXRHhDZjtBQUFBLFlBQUFDLEdBQUFDLEtBQUFDO0FBQUFBLFFBQUFILE9DMkNPLFVBQUFILE1BQUE7QUFBQSxhQUFBQSxNQUFBSyxLQUFBQztBQUFBQSxLQUNZLHVEQUE4QjtBQUFBO0FBQUEsYUFBQUgsT0FBQUUsS0FBQUM7QUFBQUEsS0FDN0IsMERBQWtDO0FBQUE7QUFBQSxJQUNwRDtBQUFBLHdFQUE0QztBQUFBO0FBQUEsR0Q5QzlDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzA5NjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9keW4ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPVxuICB8IEludCBvZiBpbnRcbiAgfCBUdXBsZSBvZiB0IGxpc3RcbiAgfCBFbnVtIG9mIHN0cmluZ1xuICB8IFN0cmluZyBvZiBzdHJpbmdcbiAgfCBMaXN0IG9mIHQgbGlzdFxuICB8IFZhcmlhbnQgb2Ygc3RyaW5nICogdCBsaXN0XG4gIHwgUmVjb3JkIG9mIChzdHJpbmcgKiB0KSBsaXN0XG5cbmxldCB2YXJpYW50IHggeSA9IFZhcmlhbnQgKHgsIHkpXG5sZXQgbGlzdCB4ID0gTGlzdCB4XG5sZXQgaW50IHggPSBJbnQgeFxubGV0IHBhaXIgeCB5ID0gVHVwbGUgWyB4OyB5IF1cbmxldCByZWNvcmQgZmllbGRzID0gUmVjb3JkIGZpZWxkc1xubGV0IGVudW0geCA9IEVudW0geFxubGV0IHN0cmluZyBzID0gU3RyaW5nIHNcblxubGV0IHJlc3VsdCBvayBlcnIgPSBmdW5jdGlvblxuICB8IE9rIHMgLT4gdmFyaWFudCBcIk9rXCIgWyBvayBzIF1cbiAgfCBFcnJvciBlIC0+IHZhcmlhbnQgXCJFcnJvclwiIFsgZXJyIGUgXVxuOztcblxubGV0IG9wdGlvbiBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGVudW0gXCJOb25lXCJcbiAgfCBTb21lIHMgLT4gdmFyaWFudCBcIlNvbWVcIiBbIGYgcyBdXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwidmFyaWFudCIsIngiLCJ5IiwibGlzdCIsImludCIsInBhaXIiLCJyZWNvcmQiLCJmaWVsZHMiLCJlbnVtJCIsInN0cmluZyIsInMiLCJyZXN1bHQiLCJvayIsImVyciIsInBhcmFtIiwiZSIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUMsR0FBQUMsR0NTa0IsaUJBQWM7QUFBQSxZQUFBQyxLQUFBRixHQUNuQixjQUFNO0FBQUEsWUFBQUcsSUFBQUgsR0FDUCxjQUFLO0FBQUEsWUFBQUksS0FBQUosR0FBQUMsR0FDRiw4QkFBYztBQUFBLFlBQUFJLE9BQUFDLFFBQ1QsbUJBQWE7QUFBQSxZQUFBQyxNQUFBUCxHQUNwQixjQUFNO0FBQUEsWUFBQVEsT0FBQUMsR0FDSixjQUFRO0FBQUEsWUFBQUMsT0FBQUMsSUFBQUMsS0FBQUM7QUFBQUEsSUFFWjtBQUFBLFNBQUFKLElBQUEsVUFBQVIsSUFDZ0I7QUFBQSxLQVRUO0FBQUE7QUFBQSxRQUFBYSxJQVFQLFVBQUFiLE1BRXNCO0FBQUEsSUFWZjtBQUFBLEdBVXNCO0FBQUEsWUFBQWMsT0FBQWxCLEdBQUFnQjtBQUFBQSxJQUc3QixZQVJFO0FBQUEsUUFBQUosSUFRRixVQUFBUixJQUVvQjtBQUFBLElBZmI7QUFBQSxHQWVrQjtBQUFBLEdEeEJwQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMxMDAyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvY2F0ZWdvcnkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPSBpbnRcblxubGV0IGVxdWFsICh4IDogaW50KSAoeSA6IGludCkgPSB4ID0geVxubGV0IGNvbXBhcmUgKHggOiBpbnQpICh5IDogaW50KSA9IGNvbXBhcmUgeCB5XG5sZXQgdG9faW50IHggPSB4XG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG5sZXQgaW50ZXJzZWN0IHggeSA9IHggbGFuZCB5IDw+IDBcbmxldCAoICsrICkgeCB5ID0geCBsb3IgeVxubGV0IGR1bW15ID0gLTFcbmxldCBpbmV4aXN0YW50ID0gMVxubGV0IGxldHRlciA9IDJcbmxldCBub3RfbGV0dGVyID0gNFxubGV0IG5ld2xpbmUgPSA4XG5sZXQgbGFzdG5ld2xpbmUgPSAxNlxubGV0IHNlYXJjaF9ib3VuZGFyeSA9IDMyXG5sZXQgdG9fZHluID0gRHluLmludFxuXG5sZXQgZnJvbV9jaGFyID0gZnVuY3Rpb25cbiAgKCogU2hvdWxkIG1hdGNoIFtjd29yZF0gZGVmaW5pdGlvbiAqKVxuICB8ICdhJyAuLiAneidcbiAgfCAnQScgLi4gJ1onXG4gIHwgJzAnIC4uICc5J1xuICB8ICdfJyB8ICdcXDE3MCcgfCAnXFwxODEnIHwgJ1xcMTg2J1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU1JyAtPiBsZXR0ZXJcbiAgfCAnXFxuJyAtPiBub3RfbGV0dGVyICsrIG5ld2xpbmVcbiAgfCBfIC0+IG5vdF9sZXR0ZXJcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0Zvcm1hdCIsIlJlX0R5biIsImVxdWFsIiwieCIsInkiLCJjb21wYXJlIiwidG9faW50IiwicHAiLCJpbnRlcnNlY3QiLCJzeW1ib2wiLCJ0b19keW4iLCJsZXR0ZXIiLCJub3RfbGV0dGVyIiwiZnJvbV9jaGFyIiwicGFyYW0iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdDRWdDLHVCQUFLO0FBQUEsT0FBQUMsVURGckM7QUFBQSxZQUFBQyxPQUFBSCxHQ0llLFNBQUM7QUFBQSxPQUFBSSxLREpoQjtBQUFBLFlBQUFDLFVBQUFMLEdBQUFDLEdDTW9CLDZCQUFhO0FBQUEsWUFBQUssT0FBQU4sR0FBQUMsR0FDaEIsYUFBTztBQUFBLE9BQUFNLFNEUHhCLFdBQUFDLFNBQUEsR0FBQUMsYUFBQTtBQUFBLFlBQUFDLFVBQUFDO0FBQUFBO0FBQUFBO0FBQUFBLEtDaUJnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0NBVkM7QUFBQSxNQVVEO0FBQUE7QUFBQSxLQVFRO0FBQUE7QUFBQSxJQUVmO0FBQUEsR0FBVTtBQUFBLEdEM0JuQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMxMDYzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvZGVuc2VfbWFwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibGV0IG1ha2UgfnNpemUgfmYgPVxuICBsZXQgY2FjaGUgPSBBcnJheS5pbml0IHNpemUgZiBpblxuICBmdW4gaSAtPiBjYWNoZS4oaSlcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsIlN0ZGxpYl9BcnJheSIsIm1ha2UiLCJzaXplIiwiZiIsImNhY2hlIiwiaSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsS0FBQUMsTUFBQUM7QUFBQUEsUUFBQUMsUUNDYztBQUFBLElBQ1osZ0JBQUFDLEdBQVMsZ0RBQVMsRUFBbEI7QUFBQSxHQUFrQjtBQUFBLEdERnBCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzEwODAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9pbXBvcnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJtb2R1bGUgTGlzdCA9IFN0ZGxpYi5MaXN0TGFiZWxzXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGxldCBlcXVhbCA9ICggPSApXG4gIGxldCBjb21wYXJlID0gY29tcGFyZVxuZW5kXG5cbm1vZHVsZSBQaHlzX2VxdWFsID0gc3RydWN0XG4gIGxldCBlcXVhbCA9ICggPT0gKVxuZW5kXG5cbmxldCAoID0gKSA9IEludC5lcXVhbFxubGV0ICggPT0gKSA9IFsgYFVzZV9waHlzX2VxdWFsIF1cbmxldCAoIDwgKSAoeCA6IGludCkgKHkgOiBpbnQpID0geCA8IHlcbmxldCAoID4gKSAoeCA6IGludCkgKHkgOiBpbnQpID0geCA+IHlcbmxldCBtaW4gPSBJbnQubWluXG5sZXQgbWF4ID0gSW50Lm1heFxubGV0IGNvbXBhcmUgPSBJbnQuY29tcGFyZVxuXG5tb2R1bGUgSW50ID0gc3RydWN0XG4gIGxldFtAd2FybmluZyBcIi0zMlwiXSBoYXNoICh4IDogaW50KSA9IEhhc2h0YmwuaGFzaCB4XG5cbiAgaW5jbHVkZSBTdGRsaWIuSW50XG5lbmRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSW50IiwiZXF1YWwiLCJjb21wYXJlIiwic3ltYm9sIiwieCIsInkiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwibWludXNfb25lIiwiYWJzIiwibWF4X2ludCIsIm1pbl9pbnQiLCJsb2dub3QiLCJ0b19zdHJpbmciLCJzZWVkZWRfaGFzaCIsImhhc2giXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxZQUFBRCxRQUFBO0FBQUEsT0FBQUUsU0FBQTtBQUFBLFlBQUFBLFNBQUFDLEdBQUFDLEdDYWdDLHFCQUFLO0FBQUEsWUFBQUYsU0FBQUMsR0FBQUMsR0FDTCxxQkFBSztBQUFBO0FBQUEsSUFBQUMsTURkckM7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUwsWUFBQTtBQUFBLElBQUFNLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBYixVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFJLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQVEsWUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzExNDcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jc2V0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIExpc3QgPSBzdHJ1Y3QgZW5kXG5vcGVuIEltcG9ydFxuXG4oKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG50eXBlIGMgPSBpbnRcblxubGV0IGVxdWFsX2MgPSBJbnQuZXF1YWxcbmxldCB0b19pbnQgeCA9IHhcbmxldCBvZl9pbnQgeCA9IHhcbmxldCB0b19jaGFyIHQgPSBDaGFyLmNociB0XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCBudWxsX2NoYXIgPSAtMVxuXG50eXBlIHQgPSAoYyAqIGMpIGxpc3RcblxubGV0IGNvbXBhcmVfcGFpciAoeCwgeSkgKHgnLCB5JykgPVxuICBtYXRjaCBJbnQuY29tcGFyZSB4IHgnIHdpdGhcbiAgfCAwIC0+IEludC5jb21wYXJlIHkgeSdcbiAgfCB4IC0+IHhcbjs7XG5cbmxldCBlcXVhbF9wYWlyICh4LCB5KSAoeCcsIHknKSA9IEludC5lcXVhbCB4IHgnICYmIEludC5lcXVhbCB5IHknXG5sZXQgZXF1YWwgeCB5ID0gTGlzdC5lcXVhbCB+ZXE6ZXF1YWxfcGFpciB4IHlcbmxldCBjb21wYXJlIHggeSA9IExpc3QuY29tcGFyZSB+Y21wOmNvbXBhcmVfcGFpciB4IHlcblxubGV0IHJlYyB1bmlvbiBsIGwnID1cbiAgbWF0Y2ggbCwgbCcgd2l0aFxuICB8IF8sIFtdIC0+IGxcbiAgfCBbXSwgXyAtPiBsJ1xuICB8IChjMSwgYzIpIDo6IHIsIChjMScsIGMyJykgOjogcicgLT5cbiAgICBpZiBjMiArIDEgPCBjMSdcbiAgICB0aGVuIChjMSwgYzIpIDo6IHVuaW9uIHIgbCdcbiAgICBlbHNlIGlmIGMyJyArIDEgPCBjMVxuICAgIHRoZW4gKGMxJywgYzInKSA6OiB1bmlvbiBsIHInXG4gICAgZWxzZSBpZiBjMiA8IGMyJ1xuICAgIHRoZW4gdW5pb24gciAoKG1pbiBjMSBjMScsIGMyJykgOjogcicpXG4gICAgZWxzZSB1bmlvbiAoKG1pbiBjMSBjMScsIGMyKSA6OiByKSByJ1xuOztcblxubGV0IHJlYyBpbnRlciBsIGwnID1cbiAgbWF0Y2ggbCwgbCcgd2l0aFxuICB8IF8sIFtdIC0+IFtdXG4gIHwgW10sIF8gLT4gW11cbiAgfCAoYzEsIGMyKSA6OiByLCAoYzEnLCBjMicpIDo6IHInIC0+XG4gICAgaWYgYzIgPCBjMSdcbiAgICB0aGVuIGludGVyIHIgbCdcbiAgICBlbHNlIGlmIGMyJyA8IGMxXG4gICAgdGhlbiBpbnRlciBsIHInXG4gICAgZWxzZSBpZiBjMiA8IGMyJ1xuICAgIHRoZW4gKG1heCBjMSBjMScsIGMyKSA6OiBpbnRlciByIGwnXG4gICAgZWxzZSAobWF4IGMxIGMxJywgYzInKSA6OiBpbnRlciBsIHInXG47O1xuXG5sZXQgcmVjIGRpZmYgbCBsJyA9XG4gIG1hdGNoIGwsIGwnIHdpdGhcbiAgfCBfLCBbXSAtPiBsXG4gIHwgW10sIF8gLT4gW11cbiAgfCAoYzEsIGMyKSA6OiByLCAoYzEnLCBjMicpIDo6IHInIC0+XG4gICAgaWYgYzIgPCBjMSdcbiAgICB0aGVuIChjMSwgYzIpIDo6IGRpZmYgciBsJ1xuICAgIGVsc2UgaWYgYzInIDwgYzFcbiAgICB0aGVuIGRpZmYgbCByJ1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHInJyA9IGlmIGMyJyA8IGMyIHRoZW4gKGMyJyArIDEsIGMyKSA6OiByIGVsc2UgciBpblxuICAgICAgaWYgYzEgPCBjMScgdGhlbiAoYzEsIGMxJyAtIDEpIDo6IGRpZmYgcicnIHInIGVsc2UgZGlmZiByJycgcicpXG47O1xuXG5sZXQgc2luZ2xlID1cbiAgbGV0IHNpbmdsZSBjID0gWyBjLCBjIF0gaW5cbiAgRGVuc2VfbWFwLm1ha2UgKCogYW4gZXh0cmEgY29sb3IgZm9yIGxubCAqKSB+c2l6ZToyNTcgfmY6c2luZ2xlXG47O1xuXG5sZXQgY3NpbmdsZSBpID0gc2luZ2xlIChDaGFyLmNvZGUgaSlcbmxldCBhZGQgYyBsID0gdW5pb24gKHNpbmdsZSBjKSBsXG5sZXQgc2VxIGMgYycgPSBpZiBjIDw9IGMnIHRoZW4gWyBjLCBjJyBdIGVsc2UgWyBjJywgYyBdXG5cbmxldCByZWMgb2Zmc2V0IG8gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgKGMxLCBjMikgOjogciAtPiAoYzEgKyBvLCBjMiArIG8pIDo6IG9mZnNldCBvIHJcbjs7XG5cbmxldCBlbXB0eSA6IHQgPSBbXVxubGV0IGNhbnkgPSBbIDAsIDI1NSBdXG5sZXQgdW5pb25fYWxsIHRzID0gTGlzdC5mb2xkX2xlZnQgfmluaXQ6ZW1wdHkgfmY6dW5pb24gdHNcbmxldCBpbnRlcnNlY3RfYWxsIHRzID0gTGlzdC5mb2xkX2xlZnQgfmluaXQ6Y2FueSB+ZjppbnRlciB0c1xuXG5sZXQgcmVjIG1lbSAoYyA6IGludCkgcyA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGMxLCBjMikgOjogcmVtIC0+IGlmIGMgPD0gYzIgdGhlbiBjID49IGMxIGVsc2UgbWVtIGMgcmVtXG47O1xuXG4oKioqKilcblxubGV0IHJlYyBoYXNoX3JlYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gMFxuICB8IChpLCBqKSA6OiByIC0+IGkgKyAoMTMgKiBqKSArICgyNTcgKiBoYXNoX3JlYyByKVxuOztcblxubGV0IGhhc2ggbCA9IGhhc2hfcmVjIGwgbGFuZCAweDNGRkZGRkZGXG5cbigqKioqKVxuXG5sZXQgcHJpbnRfb25lIGNoIChjMSwgYzIpID1cbiAgaWYgSW50LmVxdWFsIGMxIGMyIHRoZW4gRm9ybWF0LmZwcmludGYgY2ggXCIlZFwiIGMxIGVsc2UgRm9ybWF0LmZwcmludGYgY2ggXCIlZC0lZFwiIGMxIGMyXG47O1xuXG5sZXQgcHAgdHMgPSBGbXQubGlzdCB+cHBfc2VwOihGbXQubGl0IFwiLCBcIikgcHJpbnRfb25lIHRzXG5cbmxldCB0b19keW4gdCA9XG4gIGxldCBvcGVuIER5biBpblxuICBtYXRjaCB0IHdpdGhcbiAgfCBbICh4LCB5KSBdIHdoZW4gSW50LmVxdWFsIHggeSAtPiBpbnQgeFxuICB8IF8gLT4gTGlzdC5tYXAgdCB+ZjooZnVuICh4LCB5KSAtPiBwYWlyIChpbnQgeCkgKGludCB5KSkgfD4gbGlzdFxuOztcblxubGV0IHJlYyBpdGVyIHQgfmYgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBbXSAtPiAoKVxuICB8ICh4LCB5KSA6OiB4cyAtPlxuICAgIGYgeCB5O1xuICAgIGl0ZXIgeHMgfmZcbjs7XG5cbmxldCBvbmVfY2hhciA9IGZ1bmN0aW9uXG4gIHwgWyAoaSwgaikgXSB3aGVuIEludC5lcXVhbCBpIGogLT4gU29tZSBpXG4gIHwgXyAtPiBOb25lXG47O1xuXG5tb2R1bGUgQ1NldE1hcCA9IE1hcC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnQgKiAoaW50ICogaW50KSBsaXN0XG5cbiAgICBsZXQgY29tcGFyZSAoaSwgdSkgKGosIHYpID1cbiAgICAgIGxldCBjID0gSW50LmNvbXBhcmUgaSBqIGluXG4gICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2UgY29tcGFyZSB1IHZcbiAgICA7O1xuICBlbmQpXG5cbmxldCBmb2xkX3JpZ2h0IHQgfmluaXQgfmYgPSBMaXN0LmZvbGRfcmlnaHQgfmY6KGZ1biAoeCwgeSkgYWNjIC0+IGYgeCB5IGFjYykgdCB+aW5pdFxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFtdIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG47O1xuXG5sZXQgcmVjIHByZXBlbmQgcyB4IGwgPVxuICBtYXRjaCBzLCBsIHdpdGhcbiAgfCBbXSwgXyAtPiBsXG4gIHwgX3IsIFtdIC0+IFtdXG4gIHwgKF9jLCBjJykgOjogciwgKFsgKGQsIF9kJykgXSwgX3gnKSA6OiBfcicgd2hlbiBjJyA8IGQgLT4gcHJlcGVuZCByIHggbFxuICB8IChjLCBjJykgOjogciwgKFsgKGQsIGQnKSBdLCB4JykgOjogcicgLT5cbiAgICBpZiBjIDw9IGRcbiAgICB0aGVuXG4gICAgICBpZiBjJyA8IGQnXG4gICAgICB0aGVuIChbIGQsIGMnIF0sIHggQCB4JykgOjogcHJlcGVuZCByIHggKChbIGMnICsgMSwgZCcgXSwgeCcpIDo6IHInKVxuICAgICAgZWxzZSAoWyBkLCBkJyBdLCB4IEAgeCcpIDo6IHByZXBlbmQgcyB4IHInXG4gICAgZWxzZSBpZiBjID4gZCdcbiAgICB0aGVuIChbIGQsIGQnIF0sIHgnKSA6OiBwcmVwZW5kIHMgeCByJ1xuICAgIGVsc2UgKFsgZCwgYyAtIDEgXSwgeCcpIDo6IHByZXBlbmQgcyB4ICgoWyBjLCBkJyBdLCB4JykgOjogcicpXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2Vcbjs7XG5cbmxldCBwaWNrID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBpbnZhbGlkX2FyZyBcIlJlX2NzZXQucGlja1wiXG4gIHwgKHgsIF8pIDo6IF8gLT4geFxuOztcblxubGV0IGNzZXEgYyBjJyA9IHNlcSAob2ZfY2hhciBjKSAob2ZfY2hhciBjJylcbmxldCByZyA9IGNzZXFcbmxldCBjaGFyID0gY3NpbmdsZVxubGV0IHVwcGVyID0gdW5pb25fYWxsIFsgY3NlcSAnQScgJ1onOyBjc2VxICdcXDE5MicgJ1xcMjE0JzsgY3NlcSAnXFwyMTYnICdcXDIyMicgXVxubGV0IGNsb3dlciA9IG9mZnNldCAzMiB1cHBlclxubGV0IGNkaWdpdCA9IGNzZXEgJzAnICc5J1xubGV0IGFzY2lpID0gY3NlcSAnXFwwMDAnICdcXDEyNydcbmxldCBjYWRkIGMgcyA9IGFkZCAob2ZfY2hhciBjKSBzXG5sZXQgc3BhY2UgPSBhZGQgKG9mX2NoYXIgJyAnKSAoY3NlcSAnXFwwMDknICdcXDAxMycpXG5sZXQgeGRpZ2l0ID0gdW5pb25fYWxsIFsgY2RpZ2l0OyBjc2VxICdhJyAnZic7IGNzZXEgJ0EnICdGJyBdXG5cbmxldCBjYWxwaGEgPVxuICBMaXN0LmZvbGRfcmlnaHRcbiAgICB+ZjpjYWRkXG4gICAgWyAnXFwxNzAnOyAnXFwxODEnOyAnXFwxODYnOyAnXFwyMjMnOyAnXFwyNTUnIF1cbiAgICB+aW5pdDoodW5pb24gY2xvd2VyIHVwcGVyKVxuOztcblxubGV0IGNhbG51bSA9IHVuaW9uIGNhbHBoYSBjZGlnaXRcblxubGV0IGNhc2VfaW5zZW5zIHMgPVxuICB1bmlvbl9hbGwgWyBzOyBvZmZzZXQgMzIgKGludGVyIHMgdXBwZXIpOyBvZmZzZXQgKC0zMikgKGludGVyIHMgY2xvd2VyKSBdXG47O1xuXG5sZXQgY3dvcmQgPSBjYWRkICdfJyBjYWxudW1cbmxldCBub3RubCA9IGRpZmYgY2FueSAoY3NpbmdsZSAnXFxuJylcbmxldCBubCA9IGNzaW5nbGUgJ1xcbidcblxubGV0IHNldCBzdHIgPVxuICBsZXQgcyA9IHJlZiBlbXB0eSBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgcyA6PSB1bmlvbiAoY3NpbmdsZSBzdHIuW2ldKSAhc1xuICBkb25lO1xuICAhc1xuOztcblxubGV0IGJsYW5rID0gc2V0IFwiXFx0IFwiXG5cbigqIENSLXNvbWVkYXkgcmdyaW5iZXJnOiB0aGlzIFtsb3dlcl0gZG9lc24ndCBtYXRjaCBbY2xvd2VyXSAqKVxubGV0IGxvd2VyID0gdW5pb25fYWxsIFsgcmcgJ2EnICd6JzsgY2hhciAnXFwxODEnOyByZyAnXFwyMjMnICdcXDI0Nic7IHJnICdcXDI0OCcgJ1xcMjU1JyBdXG5sZXQgYWxwaGEgPSB1bmlvbl9hbGwgWyBsb3dlcjsgdXBwZXI7IGNoYXIgJ1xcMTcwJzsgY2hhciAnXFwxODYnIF1cbmxldCBhbG51bSA9IHVuaW9uX2FsbCBbIGFscGhhOyBjZGlnaXQgXVxubGV0IHdvcmRjID0gdW5pb25fYWxsIFsgYWxudW07IGNoYXIgJ18nIF1cbmxldCBjbnRybCA9IHVuaW9uX2FsbCBbIHJnICdcXDAwMCcgJ1xcMDMxJzsgcmcgJ1xcMTI3JyAnXFwxNTknIF1cbmxldCBncmFwaCA9IHVuaW9uX2FsbCBbIHJnICdcXDAzMycgJ1xcMTI2JzsgcmcgJ1xcMTYwJyAnXFwyNTUnIF1cbmxldCBwcmludCA9IHVuaW9uX2FsbCBbIHJnICdcXDAzMicgJ1xcMTI2JzsgcmcgJ1xcMTYwJyAnXFwyNTUnIF1cblxubGV0IHB1bmN0ID1cbiAgdW5pb25fYWxsXG4gICAgWyByZyAnXFwwMzMnICdcXDA0NydcbiAgICA7IHJnICdcXDA1OCcgJ1xcMDY0J1xuICAgIDsgcmcgJ1xcMDkxJyAnXFwwOTYnXG4gICAgOyByZyAnXFwxMjMnICdcXDEyNidcbiAgICA7IHJnICdcXDE2MCcgJ1xcMTY5J1xuICAgIDsgcmcgJ1xcMTcxJyAnXFwxODAnXG4gICAgOyByZyAnXFwxODInICdcXDE4NSdcbiAgICA7IHJnICdcXDE4NycgJ1xcMTkxJ1xuICAgIDsgY2hhciAnXFwyMTUnXG4gICAgOyBjaGFyICdcXDI0NydcbiAgICBdXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfRHluIiwiUmVfRm10IiwiU3RkbGliX0Zvcm1hdCIsIlN0ZGxpYl9DaGFyIiwiUmVfRGVuc2VfbWFwIiwiU3RkbGliX01hcCIsImVxdWFsX2MiLCJ0b19pbnQiLCJ4Iiwib2ZfaW50IiwidG9fY2hhciIsInQiLCJvZl9jaGFyIiwiYyIsImNvbXBhcmVfcGFpciIsInBhcmFtIiwieSIsImVxdWFsX3BhaXIiLCJlcXVhbCIsImNvbXBhcmUiLCJ1bmlvbiIsImwiLCJyIiwiYzIiLCJjMSIsIm1hdGNoIiwiaW50ZXIiLCJkaWZmIiwic2luZ2xlIiwiY3NpbmdsZSIsImkiLCJhZGQiLCJvZmZzZXQiLCJvIiwiZW1wdHkiLCJ1bmlvbl9hbGwiLCJ0cyIsImNhbnkiLCJpbnRlcnNlY3RfYWxsIiwibWVtIiwicyIsInJlbSIsImhhc2hfcmVjIiwiaiIsImhhc2giLCJwcmludF9vbmUiLCJjaCIsInBwIiwidG9fZHluIiwiaXRlciIsInhzIiwib25lX2NoYXIiLCJ2IiwidSIsIkNTZXRNYXAiLCJmb2xkX3JpZ2h0IiwiaW5pdCIsImFjYyIsImlzX2VtcHR5IiwicHJlcGVuZCIsImQiLCJwaWNrIiwiY3NlcSIsInVwcGVyIiwiY2xvd2VyIiwiY2RpZ2l0IiwiYXNjaWkiLCJjYWRkIiwic3BhY2UiLCJ4ZGlnaXQiLCJjYWxwaGEiLCJjYWxudW0iLCJjYXNlX2luc2VucyIsImN3b3JkIiwibm90bmwiLCJubCIsInNldCIsInN0ciIsImJsYW5rIiwibG93ZXIiLCJhbHBoYSIsImFsbnVtIiwid29yZGMiLCJjbnRybCIsImdyYXBoIiwicHJpbnQiLCJwdW5jdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJ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QUE7QUFBQSxJQUVqQztBQUFBLEdBQUU7QUFBQTtBQUFBLElBQUFzQyxRQUdRO0FBQUEsUUFHdUQ7QUFBQSxRQUFsQjtBQUFBLFFBdklqQztBQUFBLElBQUFDLFFBdUlKLGNBQVk7QUFBQSxRQXZJUjtBQUFBLElBQUFDO0FBQUFBLE1Bd0lKLG9DQXhJSTtBQUFBLElBQUFDLFFBeUlKO0FBQUEsSUFBQUMsUUFDQSx5QkExSUk7QUFBQSxRQTJJMEI7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUFDa0I7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUFDa0I7QUFBQSxJQUFBQyxRQUE5QixjQUFZO0FBQUEsUUE3SVI7QUFBQTtBQUFBLFFBd0pWO0FBQUEsUUFEQTtBQUFBLFFBREE7QUFBQSxRQURBO0FBQUEsUUFEQTtBQUFBLFFBREE7QUFBQSxRQURBO0FBQUEsSUFBQUMsUUFGSixjQUNJO0FBQUEsR0FVRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR4UEwiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMTU4MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2hhc2hfc2V0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxubW9kdWxlIEFycmF5ID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIHQgPSBCeXRlcy50XG5cbiAgbGV0IHdvcmRzID0gOFxuICBsZXRbQGlubGluZV0gbGVuZ3RoIHQgPSBCeXRlcy5sZW5ndGggdCAvIHdvcmRzXG4gIGxldFtAaW5saW5lXSB1bnNhZmVfZ2V0IHQgaSA9IEludDY0LnRvX2ludCAoQnl0ZXMuZ2V0X2ludDY0X25lIHQgKGkgKiB3b3JkcykpXG4gIGxldFtAaW5saW5lXSB1bnNhZmVfc2V0IHQgaSB4ID0gQnl0ZXMuc2V0X2ludDY0X25lIHQgKGkgKiB3b3JkcykgKEludDY0Lm9mX2ludCB4KVxuXG4gIGxldFtAaW5saW5lXSBtYWtlIGxlbiB4ID1cbiAgICBsZXQgdCA9IEJ5dGVzLmNyZWF0ZSAobGVuICogd29yZHMpIGluXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCB0IC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCB0IGkgeFxuICAgIGRvbmU7XG4gICAgdFxuICA7O1xuXG4gIGxldFtAaW5saW5lXSBtYWtlX2Fic2VudCBsZW4gPSBCeXRlcy5tYWtlIChsZW4gKiB3b3JkcykgJ1xcMjU1J1xuICBsZXQgY2xlYXIgdCA9IEJ5dGVzLmZpbGwgdCAwIChCeXRlcy5sZW5ndGggdCkgJ1xcMjU1J1xuXG4gIGxldCBmb2xkX2xlZnQgdCB+aW5pdCB+ZiA9XG4gICAgbGV0IGluaXQgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggdCAtIDEgZG9cbiAgICAgIGluaXQgOj0gZiAhaW5pdCAodW5zYWZlX2dldCB0IGkpXG4gICAgZG9uZTtcbiAgICAhaW5pdFxuICA7O1xuZW5kXG5cbigqIEEgc3BlY2lhbGl6ZWQgaGFzaCB0YWJsZSB0aGF0IG1ha2VzIHRoZSBmb2xsb3dpbmcgdHJhZGUtb2ZmczpcbiAgIC0gT3BlbiBhZGRyZXNpbmcuIEJ1Y2tldGluZyBpcyBxdWl0ZSBtZW1vcnkgaW50ZW5zaXZlIGFuZCBkdW5lIGlzIGFscmVhZHlcbiAgICAgYSBtZW1vcnkgaG9nLlxuICAgLSBObyBib3hpbmcgZm9yIGVtcHR5IHNsb3RzLiBXZSBtYWtlIHVzZSBvZiB0aGUgZmFjdCB0aGF0IGlkJ3MgYXJlIG5ldmVyXG4gICAgIG5lZ2F0aXZlIHRvIGFjaGlldmUgdGhpcy5cbiAgIC0gTm8gc2F2aW5nIG9mIHRoZSBoYXNoLiBSZWNvbXB1dGluZyB0aGUgaGFzaCBmb3IgaWQncyBpcyBhIG5vLW9wLlxuKilcblxudHlwZSBub25yZWMgdGFibGUgPVxuICB7IG11dGFibGUgdGFibGUgOiBBcnJheS50XG4gIDsgbXV0YWJsZSBzaXplIDogaW50XG4gIH1cblxudHlwZSB0ID0gdGFibGUgT3B0aW9uLnQgcmVmXG5cbmxldCBpbml0IHQgPVxuICBpZiBPcHRpb24uaXNfbm9uZSAhdCB0aGVuIHQgOj0gT3B0aW9uLnNvbWUgeyBzaXplID0gMDsgdGFibGUgPSBBcnJheS5tYWtlIDAgKC0xKSB9O1xuICBPcHRpb24uZ2V0ICF0XG47O1xuXG5sZXRbQGlubGluZV0gc2hvdWxkX2dyb3cgdCA9XG4gIGxldCBzbG90cyA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gIHNsb3RzID0gMCB8fCAodC5zaXplID4gMCAmJiBzbG90cyAvIHQuc2l6ZSA8IDIpXG47O1xuXG5sZXQgYWJzZW50ID0gLTFcblxubGV0ICgpID1cbiAgbGV0IHggPSBBcnJheS5tYWtlX2Fic2VudCAxIGluXG4gIGFzc2VydCAoQXJyYXkudW5zYWZlX2dldCB4IDAgPSBhYnNlbnQpXG47O1xuXG5sZXQgY3JlYXRlICgpID0gcmVmIE5vbmVcblxubGV0W0BpbmxpbmVdIGluZGV4X29mX29mZnNldCBzbG90cyBpbmRleCBpID1cbiAgbGV0IGkgPSBpbmRleCArICFpIGluXG4gIGlmIGkgPj0gc2xvdHMgdGhlbiBpIC0gc2xvdHMgZWxzZSBpXG47O1xuXG5sZXQgY2xlYXIgdCA9XG4gIG1hdGNoICF0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB0IC0+XG4gICAgdC5zaXplIDwtIDA7XG4gICAgQXJyYXkuY2xlYXIgdC50YWJsZVxuOztcblxubGV0IGFkZCB0IHggPVxuICBsZXQgaGFzaCA9IEludC5oYXNoIHggaW5cbiAgbGV0IHNsb3RzID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgbGV0IGluZGV4ID0gaGFzaCBsYW5kIChzbG90cyAtIDEpIGluXG4gIGxldCBpbnNlcnRpbmcgPSByZWYgdHJ1ZSBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpbnNlcnRpbmcgZG9cbiAgICBsZXQgaWR4ID0gaW5kZXhfb2Zfb2Zmc2V0IHNsb3RzIGluZGV4IGkgaW5cbiAgICBsZXQgZWxlbSA9IEFycmF5LnVuc2FmZV9nZXQgdC50YWJsZSBpZHggaW5cbiAgICBpZiBlbGVtID0gYWJzZW50XG4gICAgdGhlbiAoXG4gICAgICBBcnJheS51bnNhZmVfc2V0IHQudGFibGUgaWR4IHg7XG4gICAgICBpbnNlcnRpbmcgOj0gZmFsc2UpXG4gICAgZWxzZSBpbmNyIGlcbiAgZG9uZTtcbiAgdC5zaXplIDwtIHQuc2l6ZSArIDFcbjs7XG5cbmxldCByZXNpemUgdCA9XG4gIGxldCBvbGRfdGFibGUgPSB0LnRhYmxlIGluXG4gIGxldCBzbG90cyA9IEFycmF5Lmxlbmd0aCBvbGRfdGFibGUgaW5cbiAgbGV0IHRhYmxlID0gQXJyYXkubWFrZV9hYnNlbnQgKGlmIHNsb3RzID0gMCB0aGVuIDEgZWxzZSBzbG90cyBsc2wgMSkgaW5cbiAgdC50YWJsZSA8LSB0YWJsZTtcbiAgZm9yIGkgPSAwIHRvIHNsb3RzIC0gMSBkb1xuICAgIGxldCBlbGVtID0gQXJyYXkudW5zYWZlX2dldCBvbGRfdGFibGUgaSBpblxuICAgIGlmIGVsZW0gPD4gYWJzZW50IHRoZW4gYWRkIHQgZWxlbVxuICBkb25lXG47O1xuXG5sZXQgYWRkIHQgeCA9XG4gIGxldCB0ID0gaW5pdCB0IGluXG4gIGlmIHNob3VsZF9ncm93IHQgdGhlbiByZXNpemUgdDtcbiAgYWRkIHQgeFxuOztcblxubGV0W0BpbmxpbmVdIGlzX2VtcHR5IHQgPVxuICBsZXQgdCA9ICF0IGluXG4gIGlmIE9wdGlvbi5pc19ub25lIHRcbiAgdGhlbiB0cnVlXG4gIGVsc2UgKFxuICAgIGxldCB0ID0gT3B0aW9uLmdldCB0IGluXG4gICAgdC5zaXplID0gMClcbjs7XG5cbmxldCBtZW0gdCB4ID1cbiAgbGV0IHQgPSAhdCBpblxuICBpZiBPcHRpb24uaXNfbm9uZSB0IHx8IChPcHRpb24uZ2V0IHQpLnNpemUgPSAwXG4gIHRoZW4gZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IHQgPSBPcHRpb24uZ2V0IHQgaW5cbiAgICBsZXQgaGFzaCA9IEludC5oYXNoIHggaW5cbiAgICBsZXQgc2xvdHMgPSBBcnJheS5sZW5ndGggdC50YWJsZSBpblxuICAgIGxldCBpbmRleCA9IGhhc2ggbGFuZCAoc2xvdHMgLSAxKSBpblxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgZm91bmQgPSByZWYgZmFsc2UgaW5cbiAgICB3aGlsZSAobm90ICFmb3VuZCkgJiYgIWkgPCBzbG90cyBkb1xuICAgICAgbGV0IGlkeCA9IGluZGV4X29mX29mZnNldCBzbG90cyBpbmRleCBpIGluXG4gICAgICBsZXQgZWxlbSA9IEFycmF5LnVuc2FmZV9nZXQgdC50YWJsZSBpZHggaW5cbiAgICAgIGlmIEludC5lcXVhbCBlbGVtIHhcbiAgICAgIHRoZW4gZm91bmQgOj0gdHJ1ZVxuICAgICAgZWxzZSBpZiBJbnQuZXF1YWwgZWxlbSBhYnNlbnRcbiAgICAgIHRoZW4gaSA6PSBzbG90c1xuICAgICAgZWxzZSBpbmNyIGlcbiAgICBkb25lO1xuICAgICFmb3VuZClcbjs7XG5cbmxldCBwcCBmbXQgdCA9XG4gIGxldCB7IHRhYmxlOyBzaXplIH0gPSBpbml0IHQgaW5cbiAgbGV0IHRhYmxlID1cbiAgICBBcnJheS5mb2xkX2xlZnQgdGFibGUgfmluaXQ6W10gfmY6KGZ1biBhY2MgaSAtPiBpZiBpID0gYWJzZW50IHRoZW4gYWNjIGVsc2UgaSA6OiBhY2MpXG4gICAgfD4gTGlzdC5yZXZcbiAgICB8PiBTdGRsaWIuQXJyYXkub2ZfbGlzdFxuICBpblxuICBsZXQgdGFibGUgZm10ICgpID0gRm10LnNleHAgZm10IFwidGFibGVcIiBGbXQuKGFycmF5IGludCkgdGFibGUgaW5cbiAgbGV0IHNpemUgZm10ICgpID0gRm10LnNleHAgZm10IFwic2l6ZVwiIEZtdC5pbnQgc2l6ZSBpblxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUAuJWFALlwiIHRhYmxlICgpIHNpemUgKClcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9jYWxsNCIsImYiLCJhMCIsImExIiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiUmVfRm10IiwiUmVfSW1wb3J0IiwiU3RkbGliX0xpc3RMYWJlbHMiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX09wdGlvbiIsIlN0ZGxpYl9CeXRlcyIsIkFzc2VydF9mYWlsdXJlIiwibGVuZ3RoIiwidCIsInVuc2FmZV9nZXQiLCJpIiwidW5zYWZlX3NldCIsIngiLCJtYWtlX2Fic2VudCIsImxlbiIsImluaXQiLCJhYnNlbnQiLCJjcmVhdGUiLCJwYXJhbSIsImluZGV4X29mX29mZnNldCIsInNsb3RzIiwiaW5kZXgiLCJjbGVhciIsIm1hdGNoIiwiaGFzaCIsImluc2VydGluZyIsImlkeCIsImVsZW0iLCJhZGQiLCJvbGRfdGFibGUiLCJ0YWJsZSIsImlzX2VtcHR5IiwibWVtIiwiZm91bmQiLCJwcCIsImZtdCIsInNpemUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFD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QUFBTSxPQUFBO0FBQUEsU0ExSGI7QUFBQSxLQUFBckIsU0EySGY7QUFBQSxJQTNIdUI7QUFBQSxTQUFBQSxTQUFBO0FBQUE7QUFBQSxTQUFBQSxTQUFBLFFBQUFMLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUEsTUFDSDtBQUFBLFdBMkhpQztBQUFBLFdBM0hqQjtBQUFBLHNCQUFBSyxTQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBMkhsQztBQUFBLEtBQUFlLFVBQUE7QUFBQSxhQUFBQSxRQUFBSyxLQUFBakI7QUFBQUEsU0FBQSxJQUkyQztBQUFBLEtBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBVDtBQUFBLHNCQUFnQjtBQUFBO0FBQUEsYUFBQWtCLE9BQUFELEtBQUFqQjtBQUFBQSxLQUMzQyx5REFBZ0M7QUFBQTtBQUFBLElBQ2xEO0FBQUEsMEVBQThDO0FBQUE7QUFBQSxHQTlGUjtBQUFBO0FBQUE7QUFBQSxFRDNEeEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMTc4NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL21hcmtfaW5mb3MubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG50eXBlIHQgPSBpbnQgYXJyYXlcblxubGV0IG1ha2UgbWFya3MgPVxuICBsZXQgbGVuID0gMSArIExpc3QuZm9sZF9sZWZ0IH5mOihmdW4gbWEgKGksIF8pIC0+IG1heCBtYSBpKSB+aW5pdDooLTEpIG1hcmtzIGluXG4gIGxldCB0ID0gQXJyYXkubWFrZSBsZW4gKC0xKSBpblxuICBsZXQgc2V0IChpLCB2KSA9IHQuKGkpIDwtIHYgaW5cbiAgTGlzdC5pdGVyIH5mOnNldCBtYXJrcztcbiAgdFxuOztcblxubGV0IHRlc3QgdCBpID0gaWYgMiAqIGkgPj0gQXJyYXkubGVuZ3RoIHQgdGhlbiBmYWxzZSBlbHNlIHQuKDIgKiBpKSA8PiAtMVxuXG5tb2R1bGUgT2Zmc2V0ID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCBpc19wcmVzZW50IHQgPSB0ID49IDBcbiAgbGV0IGdldF9ub19jaGVjayB0ID0gdFxuZW5kXG5cbmxldCBzdGFydF9vZmZzZXQgdCBpID1cbiAgbGV0IHN0YXJ0X2kgPSAyICogaSBpblxuICBpZiBzdGFydF9pICsgMSA+PSBBcnJheS5sZW5ndGggdCB0aGVuIC0xIGVsc2UgdC4oc3RhcnRfaSlcbjs7XG5cbmxldCBzdG9wX29mZnNldCB0IGkgPVxuICBsZXQgc3RvcF9pID0gKDIgKiBpKSArIDEgaW5cbiAgaWYgc3RvcF9pID49IEFycmF5Lmxlbmd0aCB0IHRoZW4gLTEgZWxzZSB0LihzdG9wX2kpXG47O1xuXG5sZXQgb2Zmc2V0IHQgaSA9XG4gIGxldCBzdGFydF9pID0gMiAqIGkgaW5cbiAgbGV0IHN0b3BfaSA9IHN0YXJ0X2kgKyAxIGluXG4gIGlmIHN0b3BfaSA+PSBBcnJheS5sZW5ndGggdFxuICB0aGVuIE5vbmVcbiAgZWxzZSAoXG4gICAgbGV0IHN0YXJ0ID0gdC4oc3RhcnRfaSkgaW5cbiAgICBpZiBzdGFydCA9IC0xXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSAoXG4gICAgICBsZXQgc3RvcCA9IHQuKHN0b3BfaSkgaW5cbiAgICAgIFNvbWUgKHN0YXJ0LCBzdG9wKSkpXG47O1xuXG5sZXQgaXRlcmkgdCB+ZiA9XG4gIGZvciBpID0gMCB0byAoQXJyYXkubGVuZ3RoIHQgLyAyKSAtIDEgZG9cbiAgICBsZXQgaWR4ID0gMiAqIGkgaW5cbiAgICBsZXQgc3RhcnQgPSB0LihpZHgpIGluXG4gICAgaWYgc3RhcnQgPD4gLTFcbiAgICB0aGVuIChcbiAgICAgIGxldCBzdG9wID0gdC4oaWR4ICsgMSkgaW5cbiAgICAgIGYgaSBzdGFydCBzdG9wKVxuICBkb25lXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9jYWxsMyIsImYiLCJhMCIsImExIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwibWFrZSIsIm1hcmtzIiwibGVuIiwibWEiLCJwYXJhbSIsImkiLCJ0Iiwic2V0IiwidiIsInRlc3QiLCJpc19wcmVzZW50IiwiZ2V0X25vX2NoZWNrIiwic3RhcnRfb2Zmc2V0Iiwic3RhcnRfaSIsInN0b3Bfb2Zmc2V0Iiwic3RvcF9pIiwib2Zmc2V0Iiwic3RhcnQiLCJzdG9wIiwiaXRlcmkiLCJpZHgiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsWUFBQUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQUM7QUFBQUEsT0NLZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBQUMsSUFBQUM7QUFBQUEsZUFBQUMsSUFBa0I7QUFBQSxXQUFrQixxQ0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBQUMsSUFDbkQ7QUFBQSxhQUFBQyxJQUFBSDtBQUFBQSxTQUFBSSxJQUNBLFVBQUFILElBQUE7QUFBQSxLQUFTO0FBQUEsS0FBVTtBQUFBO0FBQUEsSUFDM0I7QUFBQSxJQUFzQjtBQUFBLEdBQ3JCO0FBQUEsWUFBQUksS0FBQUgsR0FBQUQ7QUFBQUEsSUFHWSxnQ0FBZ0M7QUFBQSxZQUFXO0FBQUEsdURBQVM7QUFBQSxHQUFNO0FBQUEsWUFBQUssV0FBQUosR0FLcEQsc0JBQU07QUFBQSxZQUFBSyxhQUFBTCxHQUNKLFNBQUM7QUFBQSxZQUFBTSxhQUFBTixHQUFBRDtBQUFBQSxRQUFBUSxVQUl0QjtBQUFBLElBQ0E7QUFBQTtBQUFBLGNBQThDLHlDQUFXO0FBQUE7QUFBQSxZQUFBQyxZQUFBUixHQUFBRDtBQUFBQSxRQUFBVSxTQUl6RDtBQUFBLElBQ0E7QUFBQTtBQUFBLGNBQXlDLHVDQUFVO0FBQUE7QUFBQSxZQUFBQyxPQUFBVixHQUFBRDtBQUFBQSxRQUFBUSxVQUluRCxXQUFBRSxTQUNBO0FBQUEsSUFDQSwyQkFDSztBQUFBLFFBQUFFLFFBRVM7QUFBQSxJQUNULHVDQUNFO0FBQUEsUUFBQUMsT0FFUTtBQUFBLElBQ1g7QUFBQSxHQUFvQjtBQUFBLFlBQUFDLE1BQUFiLEdBQUFiO0FBQUFBLFFBQUEsSUFJeEI7QUFBQTtBQUFBLFNBQUFZLElBQUE7QUFBQTtBQUFBLFVBQUFlLE1BQ0UsV0FBQUgsUUFDWTtBQUFBLE1BQ1o7QUFBQSxlQUNLLGFBQUFDLE9BQ1E7QUFBQSxPQUNYO0FBQUE7QUFBQSxjQUhGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUhGO0FBQUEsR0FPSTtBQUFBLEdEckROIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzE4ODMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wbWFyay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm1vZHVsZSBQbWFyayA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgZXF1YWwgKHggOiBpbnQpICh5IDogaW50KSA9IHggPSB5XG4gIGxldCBjb21wYXJlICh4IDogaW50KSAoeSA6IGludCkgPSBjb21wYXJlIHggeVxuICBsZXQgciA9IEF0b21pYy5tYWtlIDFcbiAgbGV0IGdlbiAoKSA9IEF0b21pYy5mZXRjaF9hbmRfYWRkIHIgMVxuICBsZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG5lbmRcblxuaW5jbHVkZSBQbWFya1xuXG5tb2R1bGUgU2V0ID0gc3RydWN0XG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoUG1hcmspXG5cbiAgbGV0W0B3YXJuaW5nIFwiLTMyXCJdIHRvX2xpc3QgeCA9XG4gICAgbGV0IG9wZW4gU2V0IGluXG4gICAgdG9fc2VxIHggfD4gTGlzdC5vZl9zZXFcbiAgOztcblxuICBpbmNsdWRlIFNldFxuZW5kXG5cbmxldCB0b19keW4gPSBEeW4uaW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYl9Gb3JtYXQiLCJTdGRsaWJfU2V0IiwiUmVfRHluIiwiZXF1YWwiLCJ4IiwieSIsImNvbXBhcmUiLCJyIiwiZ2VuIiwicGFyYW0iLCJwcCIsIlNldCIsImVtcHR5IiwiYWRkIiwic2luZ2xldG9uIiwicmVtb3ZlIiwidW5pb24iLCJpbnRlciIsImRpc2pvaW50IiwiZGlmZiIsImNhcmRpbmFsIiwiZWxlbWVudHMiLCJtaW5fZWx0IiwibWluX2VsdF9vcHQiLCJtYXhfZWx0IiwibWF4X2VsdF9vcHQiLCJjaG9vc2UiLCJjaG9vc2Vfb3B0IiwiZmluZCIsImZpbmRfb3B0IiwiZmluZF9maXJzdCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsIml0ZXIiLCJmb2xkIiwibWFwIiwiZmlsdGVyIiwiZmlsdGVyX21hcCIsInBhcnRpdGlvbiIsInNwbGl0IiwiaXNfZW1wdHkiLCJtZW0iLCJzdWJzZXQiLCJmb3JfYWxsIiwiZXhpc3RzIiwidG9fbGlzdCIsIm9mX2xpc3QiLCJ0b19zZXFfZnJvbSIsInRvX3NlcSIsInRvX3Jldl9zZXEiLCJhZGRfc2VxIiwib2Zfc2VxIiwidG9fZHluIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsTUFBQUMsR0FBQUMsR0NHa0MsdUJBQUs7QUFBQSxPQUFBQyxVREh2QywwQkFBQUMsSUNLVTtBQUFBLFlBQUFDLElBQUFDLE9BQ0ssd0NBQXdCO0FBQUE7QUFBQSxJQUFBQyxLQURoQjtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBdkMsVUFBQTtBQUFBLElBQUFHLFlBQUE7QUFBQSxJQUFBcUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFREx2QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMyMDA0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYXV0b21hdGEubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG4oKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG5sZXQgaGFzaF9jb21iaW5lIGggYWNjdSA9IChhY2N1ICogNjU1OTkpICsgaFxuXG5tb2R1bGUgSWRzIDogc2lnXG4gIG1vZHVsZSBJZCA6IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgemVybyA6IHRcbiAgICB2YWwgaGFzaCA6IHQgLT4gaW50XG4gICAgdmFsIHBwIDogdCBGbXQudFxuXG4gICAgbW9kdWxlIEhhc2hfc2V0IDogc2lnXG4gICAgICB0eXBlIGlkIDo9IHRcbiAgICAgIHR5cGUgdFxuXG4gICAgICB2YWwgY3JlYXRlIDogdW5pdCAtPiB0XG4gICAgICB2YWwgbWVtIDogdCAtPiBpZCAtPiBib29sXG4gICAgICB2YWwgYWRkIDogdCAtPiBpZCAtPiB1bml0XG4gICAgICB2YWwgY2xlYXIgOiB0IC0+IHVuaXRcbiAgICBlbmRcbiAgZW5kXG5cbiAgdHlwZSB0XG5cbiAgdmFsIGNyZWF0ZSA6IHVuaXQgLT4gdFxuICB2YWwgbmV4dCA6IHQgLT4gSWQudFxuZW5kID0gc3RydWN0XG4gIG1vZHVsZSBJZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbW9kdWxlIEhhc2hfc2V0ID0gSGFzaF9zZXRcblxuICAgIGxldCBlcXVhbCA9IEludC5lcXVhbFxuICAgIGxldCB6ZXJvID0gMFxuICAgIGxldCBoYXNoIHggPSB4XG4gICAgbGV0IHBwID0gRm10LmludFxuICBlbmRcblxuICB0eXBlIHQgPSBpbnQgcmVmXG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiAwXG5cbiAgbGV0IG5leHQgdCA9XG4gICAgaW5jciB0O1xuICAgICF0XG4gIDs7XG5lbmRcblxubW9kdWxlIElkID0gSWRzLklkXG5cbm1vZHVsZSBTZW0gPSBzdHJ1Y3RcbiAgdHlwZSB0ID1cbiAgICBbIGBMb25nZXN0XG4gICAgfCBgU2hvcnRlc3RcbiAgICB8IGBGaXJzdFxuICAgIF1cblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IGBTaG9ydGVzdCAtPiBcInNob3J0XCJcbiAgICB8IGBMb25nZXN0IC0+IFwibG9uZ1wiXG4gICAgfCBgRmlyc3QgLT4gXCJmaXJzdFwiXG4gIDs7XG5cbiAgbGV0IHRvX2R5biB0ID0gRHluLmVudW0gKHRvX3N0cmluZyB0KVxuICBsZXQgZXF1YWwgPSBQb2x5LmVxdWFsXG4gIGxldCBwcCBjaCBrID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBjaCAodG9fc3RyaW5nIGspXG5lbmRcblxubW9kdWxlIFJlcF9raW5kID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgWyBgR3JlZWR5XG4gICAgfCBgTm9uX2dyZWVkeVxuICAgIF1cblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IGBHcmVlZHkgLT4gXCJHcmVlZHlcIlxuICAgIHwgYE5vbl9ncmVlZHkgLT4gXCJOb25fZ3JlZWR5XCJcbiAgOztcblxuICBsZXQgdG9fZHluIHQgPSBEeW4uZW51bSAodG9fc3RyaW5nIHQpXG4gIGxldCBwcCBmbXQgdCA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10ICh0b19zdHJpbmcgdClcbmVuZFxuXG5tb2R1bGUgTWFyayA6IHNpZ1xuICB0eXBlIHQgPSBwcml2YXRlIGludFxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgcHAgOiB0IEZtdC50XG4gIHZhbCB0b19keW4gOiB0IC0+IER5bi50XG4gIHZhbCBzdGFydCA6IHRcbiAgdmFsIHByZXYgOiB0IC0+IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbiAgdmFsIG5leHQyIDogdCAtPiB0XG4gIHZhbCBncm91cF9jb3VudCA6IHQgLT4gaW50XG4gIHZhbCBvdXRzaWRlX3JhbmdlIDogdCAtPiBzdGFydF9pbmNsdXNpdmU6dCAtPiBzdG9wX2luY2x1c2l2ZTp0IC0+IGJvb2xcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgZXF1YWwgPSBJbnQuZXF1YWxcbiAgbGV0IGNvbXBhcmUgPSBJbnQuY29tcGFyZVxuICBsZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfaW50XG4gIGxldCB0b19keW4gPSBEeW4uaW50XG4gIGxldCBzdGFydCA9IDBcbiAgbGV0IHByZXYgeCA9IHByZWQgeFxuICBsZXQgbmV4dCB4ID0gc3VjYyB4XG4gIGxldCBuZXh0MiB4ID0geCArIDJcbiAgbGV0IGdyb3VwX2NvdW50IHggPSB4IC8gMlxuXG4gIGxldCBvdXRzaWRlX3JhbmdlIHQgfnN0YXJ0X2luY2x1c2l2ZSB+c3RvcF9pbmNsdXNpdmUgPVxuICAgIHQgPCBzdGFydF9pbmNsdXNpdmUgfHwgdCA+IHN0b3BfaW5jbHVzaXZlXG4gIDs7XG5lbmRcblxubW9kdWxlIElkeCA6IHNpZ1xuICB0eXBlIHQgPSBwcml2YXRlIGludFxuXG4gIHZhbCBwcCA6IHQgRm10LnRcbiAgdmFsIHRvX2R5biA6IHQgLT4gRHluLnRcbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaW5pdGlhbCA6IHRcbiAgdmFsIHVzZWQgOiB0IC0+IGJvb2xcbiAgdmFsIG1ha2UgOiBpbnQgLT4gdFxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCB0b19keW4gPSBEeW4uaW50XG4gIGxldCB0b19pbnQgeCA9IHhcbiAgbGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2ludFxuICBsZXQgdXNlZCB0ID0gdCA+PSAwXG4gIGxldCBtYWtlIHggPSB4XG4gIGxldCBlcXVhbCA9IEludC5lcXVhbFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpbml0aWFsID0gMFxuZW5kXG5cbm1vZHVsZSBFeHByID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBpZCA6IElkLnRcbiAgICA7IGRlZiA6IGRlZlxuICAgIH1cblxuICBhbmQgZGVmID1cbiAgICB8IENzdCBvZiBDc2V0LnRcbiAgICB8IEFsdCBvZiB0IGxpc3RcbiAgICB8IFNlcSBvZiBTZW0udCAqIHQgKiB0XG4gICAgfCBFcHNcbiAgICB8IFJlcCBvZiBSZXBfa2luZC50ICogU2VtLnQgKiB0XG4gICAgfCBNYXJrIG9mIE1hcmsudFxuICAgIHwgRXJhc2Ugb2YgTWFyay50ICogTWFyay50XG4gICAgfCBCZWZvcmUgb2YgQ2F0ZWdvcnkudFxuICAgIHwgQWZ0ZXIgb2YgQ2F0ZWdvcnkudFxuICAgIHwgUG1hcmsgb2YgUG1hcmsudFxuXG4gIGxldCB3cmFwX3NlbSBzZW0gc2VtJyB2ID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBsZXQgbmFtZSA9IFNlbS50b19zdHJpbmcgc2VtJyBpblxuICAgIG1hdGNoIHNlbSB3aXRoXG4gICAgfCBTb21lIHNlbSB3aGVuIFNlbS5lcXVhbCBzZW0gc2VtJyAtPiB2XG4gICAgfCBOb25lIHwgU29tZSBfIC0+XG4gICAgICAobWF0Y2ggdiB3aXRoXG4gICAgICAgfCBMaXN0IHYgLT4gdmFyaWFudCBuYW1lIHZcbiAgICAgICB8IF8gLT4gdmFyaWFudCBuYW1lIFsgdiBdKVxuICA7O1xuXG4gIGxldCByZWMgc2VxX2FzX2xpc3Qgc2VtID0gZnVuY3Rpb25cbiAgICB8IEVwcyAtPiBbXVxuICAgIHwgQ3N0IGNzIC0+IFsgQ3N0IGNzIF1cbiAgICB8IFNlcSAoc2VtJywgeCwgeSkgLT5cbiAgICAgIGlmIFNlbS5lcXVhbCBzZW0gc2VtJ1xuICAgICAgdGhlbiB4LmRlZiA6OiBzZXFfYXNfbGlzdCBzZW0geS5kZWZcbiAgICAgIGVsc2UgcmFpc2Vfbm90cmFjZSBOb3RfZm91bmRcbiAgICB8IF8gLT4gcmFpc2Vfbm90cmFjZSBOb3RfZm91bmRcbiAgOztcblxuICBsZXQgc2VxX2FzX2xpc3Qgc2VtIHQgPVxuICAgIG1hdGNoIHNlcV9hc19saXN0IHNlbSB0IHdpdGhcbiAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gTm9uZVxuICAgIHwgcyAtPiBTb21lIHNcbiAgOztcblxuICBsZXQgcmVjIGR5bl9vZl9kZWYgc2VtID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBmdW5jdGlvblxuICAgIHwgQ3N0IGNzZXQgLT4gQ3NldC50b19keW4gY3NldFxuICAgIHwgQWx0IGFsdCAtPiB2YXJpYW50IFwiQWx0XCIgKExpc3QubWFwIH5mOih0b19keW4gc2VtKSBhbHQpXG4gICAgfCBTZXEgKHNlbScsIHgsIHkpIC0+XG4gICAgICBsZXQgdG9fZHluID0gdG9fZHluIChTb21lIHNlbScpIGluXG4gICAgICBsZXQgeCA9XG4gICAgICAgIG1hdGNoIHNlcV9hc19saXN0IHNlbScgeS5kZWYgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gdmFyaWFudCBcIlNlcVwiIFsgdG9fZHluIHg7IHRvX2R5biB5IF1cbiAgICAgICAgfCBTb21lIHkgLT4gdmFyaWFudCBcIlNlcVwiICh0b19keW4geCA6OiBMaXN0Lm1hcCB5IH5mOihkeW5fb2ZfZGVmIHNlbSkpXG4gICAgICBpblxuICAgICAgd3JhcF9zZW0gc2VtIHNlbScgeFxuICAgIHwgRXBzIC0+IEVudW0gXCJFcHNcIlxuICAgIHwgUmVwIChfLCBzZW0nLCB0KSAtPiB3cmFwX3NlbSBzZW0gc2VtJyAodmFyaWFudCBcIlJlcFwiIFsgdG9fZHluIChTb21lIHNlbScpIHQgXSlcbiAgICB8IE1hcmsgbSAtPiB2YXJpYW50IFwiTWFya1wiIFsgTWFyay50b19keW4gbSBdXG4gICAgfCBQbWFyayBtIC0+IHZhcmlhbnQgXCJQbWFya1wiIFsgUG1hcmsudG9fZHluIG0gXVxuICAgIHwgRXJhc2UgKHgsIHkpIC0+IHZhcmlhbnQgXCJFcmFzZVwiIFsgTWFyay50b19keW4geDsgTWFyay50b19keW4geSBdXG4gICAgfCBCZWZvcmUgYyAtPiB2YXJpYW50IFwiQmVmb3JlXCIgWyBDYXRlZ29yeS50b19keW4gYyBdXG4gICAgfCBBZnRlciBjIC0+IHZhcmlhbnQgXCJBZnRlclwiIFsgQ2F0ZWdvcnkudG9fZHluIGMgXVxuXG4gIGFuZCB0b19keW4gc2VtIHsgaWQgPSBfOyBkZWYgfSA9IGR5bl9vZl9kZWYgc2VtIGRlZlxuXG4gIGxldCByZWMgcHBfd2l0aF9zZW0gc2VtIGNoIGUgPVxuICAgIGxldCBvcGVuIEZtdCBpblxuICAgIG1hdGNoIGUuZGVmIHdpdGhcbiAgICB8IENzdCBsIC0+IHNleHAgY2ggXCJjc3RcIiBDc2V0LnBwIGxcbiAgICB8IEFsdCBsIC0+IHNleHAgY2ggXCJhbHRcIiAobGlzdCAocHBfd2l0aF9zZW0gc2VtKSkgbFxuICAgIHwgU2VxIChrLCBlLCBlJykgLT5cbiAgICAgIHNleHAgY2ggXCJzZXFcIiAodHJpcGxlIFNlbS5wcCAocHBfd2l0aF9zZW0gc2VtKSAocHBfd2l0aF9zZW0gc2VtKSkgKGssIGUsIGUnKVxuICAgIHwgRXBzIC0+IHN0ciBjaCBcImVwc1wiXG4gICAgfCBSZXAgKF9yaywgaywgZSkgLT4gc2V4cCBjaCBcInJlcFwiIChwYWlyIFNlbS5wcCAocHBfd2l0aF9zZW0gKFNvbWUgaykpKSAoaywgZSlcbiAgICB8IE1hcmsgaSAtPiBzZXhwIGNoIFwibWFya1wiIE1hcmsucHAgaVxuICAgIHwgUG1hcmsgaSAtPiBzZXhwIGNoIFwicG1hcmtcIiBQbWFyay5wcCBpXG4gICAgfCBFcmFzZSAoYiwgZSkgLT4gc2V4cCBjaCBcImVyYXNlXCIgKHBhaXIgTWFyay5wcCBNYXJrLnBwKSAoYiwgZSlcbiAgICB8IEJlZm9yZSBjIC0+IHNleHAgY2ggXCJiZWZvcmVcIiBDYXRlZ29yeS5wcCBjXG4gICAgfCBBZnRlciBjIC0+IHNleHAgY2ggXCJhZnRlclwiIENhdGVnb3J5LnBwIGNcbiAgOztcblxuICBsZXQgcHAgPSBwcF93aXRoX3NlbSBOb25lXG4gIGxldCBlcHNfZXhwciA9IHsgaWQgPSBJZC56ZXJvOyBkZWYgPSBFcHMgfVxuICBsZXQgbWsgaWRzIGRlZiA9IHsgaWQgPSBJZHMubmV4dCBpZHM7IGRlZiB9XG4gIGxldCBlbXB0eSBpZHMgPSBtayBpZHMgKEFsdCBbXSlcbiAgbGV0IGNzdCBpZHMgcyA9IGlmIENzZXQuaXNfZW1wdHkgcyB0aGVuIGVtcHR5IGlkcyBlbHNlIG1rIGlkcyAoQ3N0IHMpXG4gIGxldCBlcHMgaWRzID0gbWsgaWRzIEVwc1xuICBsZXQgcmVwIGlkcyBraW5kIHNlbSB4ID0gbWsgaWRzIChSZXAgKGtpbmQsIHNlbSwgeCkpXG4gIGxldCBtYXJrIGlkcyBtID0gbWsgaWRzIChNYXJrIG0pXG4gIGxldCBwbWFyayBpZHMgaSA9IG1rIGlkcyAoUG1hcmsgaSlcbiAgbGV0IGVyYXNlIGlkcyBtIG0nID0gbWsgaWRzIChFcmFzZSAobSwgbScpKVxuICBsZXQgYmVmb3JlIGlkcyBjID0gbWsgaWRzIChCZWZvcmUgYylcbiAgbGV0IGFmdGVyIGlkcyBjID0gbWsgaWRzIChBZnRlciBjKVxuXG4gIGxldCBhbHQgaWRzID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGVtcHR5IGlkc1xuICAgIHwgWyBjIF0gLT4gY1xuICAgIHwgbCAtPiBtayBpZHMgKEFsdCBsKVxuICA7O1xuXG4gIGxldCBzZXEgaWRzIChraW5kIDogU2VtLnQpIHggeSA9XG4gICAgbWF0Y2ggeC5kZWYsIHkuZGVmIHdpdGhcbiAgICB8IEFsdCBbXSwgXyAtPiB4XG4gICAgfCBfLCBBbHQgW10gLT4geVxuICAgIHwgRXBzLCBfIC0+IHlcbiAgICB8IF8sIEVwcyB3aGVuIFNlbS5lcXVhbCBraW5kIGBGaXJzdCAtPiB4XG4gICAgfCBfIC0+IG1rIGlkcyAoU2VxIChraW5kLCB4LCB5KSlcbiAgOztcblxuICBsZXQgaXNfZXBzIGV4cHIgPVxuICAgIG1hdGNoIGV4cHIuZGVmIHdpdGhcbiAgICB8IEVwcyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG4gIDs7XG5cbiAgbGV0IHJlYyByZW5hbWUgaWRzIHggPVxuICAgIG1hdGNoIHguZGVmIHdpdGhcbiAgICB8IENzdCBfIHwgRXBzIHwgTWFyayBfIHwgUG1hcmsgXyB8IEVyYXNlIF8gfCBCZWZvcmUgXyB8IEFmdGVyIF8gLT4gbWsgaWRzIHguZGVmXG4gICAgfCBBbHQgbCAtPiBtayBpZHMgKEFsdCAoTGlzdC5tYXAgfmY6KHJlbmFtZSBpZHMpIGwpKVxuICAgIHwgU2VxIChrLCB5LCB6KSAtPiBtayBpZHMgKFNlcSAoaywgcmVuYW1lIGlkcyB5LCByZW5hbWUgaWRzIHopKVxuICAgIHwgUmVwIChnLCBrLCB5KSAtPiBtayBpZHMgKFJlcCAoZywgaywgcmVuYW1lIGlkcyB5KSlcbiAgOztcbmVuZFxuXG50eXBlIGV4cHIgPSBFeHByLnRcblxuaW5jbHVkZSBFeHByXG5cbm1vZHVsZSBNYXJrcyA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHsgbWFya3MgOiAoTWFyay50ICogSWR4LnQpIGxpc3RcbiAgICA7IHBtYXJrcyA6IFBtYXJrLlNldC50XG4gICAgfVxuXG4gIGxldCB0b19keW4geyBtYXJrczsgcG1hcmtzIH0gOiBEeW4udCA9XG4gICAgbGV0IG9wZW4gRHluIGluXG4gICAgcmVjb3JkXG4gICAgICBbICggXCJtYXJrc1wiXG4gICAgICAgICwgTGlzdC5tYXAgbWFya3MgfmY6KGZ1biAobSwgaWR4KSAtPiBwYWlyIChNYXJrLnRvX2R5biBtKSAoSWR4LnRvX2R5biBpZHgpKVxuICAgICAgICAgIHw+IGxpc3QgKVxuICAgICAgOyBcInBtYXJrc1wiLCBQbWFyay5TZXQudG9fbGlzdCBwbWFya3MgfD4gTGlzdC5tYXAgfmY6UG1hcmsudG9fZHluIHw+IGxpc3RcbiAgICAgIF1cbiAgOztcblxuICBsZXQgZXF1YWwgeyBtYXJrczsgcG1hcmtzIH0gdCA9XG4gICAgTGlzdC5lcXVhbFxuICAgICAgfmVxOihmdW4gKHgsIHkpICh4JywgeScpIC0+IE1hcmsuZXF1YWwgeCB4JyAmJiBJZHguZXF1YWwgeSB5JylcbiAgICAgIG1hcmtzXG4gICAgICB0Lm1hcmtzXG4gICAgJiYgUG1hcmsuU2V0LmVxdWFsIHBtYXJrcyB0LnBtYXJrc1xuICA7O1xuXG4gIGxldCBlbXB0eSA9IHsgbWFya3MgPSBbXTsgcG1hcmtzID0gUG1hcmsuU2V0LmVtcHR5IH1cblxuICBsZXQgaGFzaF9tYXJrc19vZmZzZXQgPVxuICAgIGxldCBmIGFjYyAoKGEgOiBNYXJrLnQpLCAoaSA6IElkeC50KSkgPVxuICAgICAgaGFzaF9jb21iaW5lIChhIDo+IGludCkgKGhhc2hfY29tYmluZSAoaSA6PiBpbnQpIGFjYylcbiAgICBpblxuICAgIGZ1biBsIGluaXQgLT4gTGlzdC5mb2xkX2xlZnQgbCB+aW5pdCB+ZlxuICA7O1xuXG4gIGxldCBoYXNoIG0gYWNjdSA9IGhhc2hfbWFya3Nfb2Zmc2V0IG0ubWFya3MgKGhhc2hfY29tYmluZSAoSGFzaHRibC5oYXNoIG0ucG1hcmtzKSBhY2N1KVxuXG4gIGxldCBtYXJrc19zZXRfaWR4ID1cbiAgICBsZXQgcmVjIG1hcmtzX3NldF9pZHggaWR4IG1hcmtzID1cbiAgICAgIG1hdGNoIG1hcmtzIHdpdGhcbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKGEsIGlkeCcpIDo6IHJlbSAtPlxuICAgICAgICBpZiBJZHguZXF1YWwgaWR4JyBJZHgudW5rbm93biB0aGVuIChhLCBpZHgpIDo6IG1hcmtzX3NldF9pZHggaWR4IHJlbSBlbHNlIG1hcmtzXG4gICAgaW5cbiAgICBmdW4gbWFya3MgaWR4IC0+IHsgbWFya3Mgd2l0aCBtYXJrcyA9IG1hcmtzX3NldF9pZHggaWR4IG1hcmtzLm1hcmtzIH1cbiAgOztcblxuICBsZXQgZmlsdGVyIHQgKGIgOiBNYXJrLnQpIChlIDogTWFyay50KSA9XG4gICAgeyB0IHdpdGhcbiAgICAgIG1hcmtzID1cbiAgICAgICAgTGlzdC5maWx0ZXIgdC5tYXJrcyB+ZjooZnVuICgoaSA6IE1hcmsudCksIF8pIC0+XG4gICAgICAgICAgTWFyay5vdXRzaWRlX3JhbmdlIGkgfnN0YXJ0X2luY2x1c2l2ZTpiIH5zdG9wX2luY2x1c2l2ZTplKVxuICAgIH1cbiAgOztcblxuICBsZXQgc2V0X21hcmsgdCAoaSA6IE1hcmsudCkgPVxuICAgIHsgdCB3aXRoIG1hcmtzID0gKGksIElkeC51bmtub3duKSA6OiBMaXN0LnJlbW92ZV9hc3NxIGkgdC5tYXJrcyB9XG4gIDs7XG5cbiAgbGV0IHNldF9wbWFyayB0IGkgPSB7IHQgd2l0aCBwbWFya3MgPSBQbWFyay5TZXQuYWRkIGkgdC5wbWFya3MgfVxuXG4gIGxldCBwcCBmbXQgeyBtYXJrczsgcG1hcmtzIH0gPVxuICAgIEZvcm1hdC5wcF9vcGVuX2JveCBmbXQgMTtcbiAgICAobWF0Y2ggbWFya3Mgd2l0aFxuICAgICB8IFtdIC0+ICgpXG4gICAgIHwgXyA6OiBfIC0+XG4gICAgICAgRm9ybWF0LmZwcmludGZcbiAgICAgICAgIGZtdFxuICAgICAgICAgXCJAWzwyPm1hcmtzQCAlYUBdXCJcbiAgICAgICAgIChGb3JtYXQucHBfcHJpbnRfbGlzdCAoZnVuIGZtdCAoYSwgaSkgLT5cbiAgICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhLSVhXCIgTWFyay5wcCBhIElkeC5wcCBpKSlcbiAgICAgICAgIG1hcmtzKTtcbiAgICAobWF0Y2ggUG1hcmsuU2V0LnRvX2xpc3QgcG1hcmtzIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IHBtYXJrcyAtPlxuICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbPDI+cG1hcmtzICVhQF1cIiAoRm9ybWF0LnBwX3ByaW50X2xpc3QgUG1hcmsucHApIHBtYXJrcyk7XG4gICAgRm9ybWF0LnBwX2Nsb3NlX2JveCBmbXQgKClcbiAgOztcbmVuZFxuXG5tb2R1bGUgU3RhdHVzID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgfCBGYWlsZWRcbiAgICB8IE1hdGNoIG9mIE1hcmtfaW5mb3MudCAqIFBtYXJrLlNldC50XG4gICAgfCBSdW5uaW5nXG5lbmRcblxubW9kdWxlIERlc2MgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBwIDogdCBGbXQudFxuXG4gIG1vZHVsZSBFIDogc2lnXG4gICAgdHlwZSBub25yZWMgdCA9IHByaXZhdGVcbiAgICAgIHwgVFNlcSBvZiBTZW0udCAqIHQgKiBFeHByLnRcbiAgICAgIHwgVEV4cCBvZiBNYXJrcy50ICogRXhwci50XG4gICAgICB8IFRNYXRjaCBvZiBNYXJrcy50XG4gIGVuZFxuXG4gIHZhbCB0b19keW4gOiB0IC0+IER5bi50XG4gIHZhbCBmb2xkX3JpZ2h0IDogdCAtPiBpbml0OidhY2MgLT4gZjooRS50IC0+ICdhY2MgLT4gJ2FjYykgLT4gJ2FjY1xuICB2YWwgdHNlcSA6IFNlbS50IC0+IHQgLT4gRXhwci50IC0+IHQgLT4gdFxuICB2YWwgaW5pdGlhbCA6IEV4cHIudCAtPiB0XG4gIHZhbCBlbXB0eSA6IHRcbiAgdmFsIHNldF9pZHggOiBJZHgudCAtPiB0IC0+IHRcbiAgdmFsIGhhc2ggOiB0IC0+IGludCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHN0YXR1cyA6IHQgLT4gU3RhdHVzLnRcbiAgdmFsIGZpcnN0X21hdGNoIDogdCAtPiBNYXJrcy50IG9wdGlvblxuICB2YWwgcmVtb3ZlX21hdGNoZXMgOiB0IC0+IHRcbiAgdmFsIHNwbGl0X2F0X21hdGNoIDogdCAtPiB0ICogdFxuICB2YWwgYWRkX21hdGNoIDogdCAtPiBNYXJrcy50IC0+IHRcbiAgdmFsIGFkZF9lcHMgOiB0IC0+IE1hcmtzLnQgLT4gdFxuICB2YWwgYWRkX2V4cHIgOiB0IC0+IEUudCAtPiB0XG4gIHZhbCBpdGVyX21hcmtzIDogdCAtPiBmOihNYXJrcy50IC0+IHVuaXQpIC0+IHVuaXRcbiAgdmFsIHJlbW92ZV9kdXBsaWNhdGVzIDogSWQuSGFzaF9zZXQudCAtPiB0IC0+IEV4cHIudCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgbW9kdWxlIEUgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPVxuICAgICAgfCBUU2VxIG9mIFNlbS50ICogdCBsaXN0ICogRXhwci50XG4gICAgICB8IFRFeHAgb2YgTWFya3MudCAqIEV4cHIudFxuICAgICAgfCBUTWF0Y2ggb2YgTWFya3MudFxuXG4gICAgbGV0IHJlYyBlcXVhbF9saXN0IGwxIGwyID0gTGlzdC5lcXVhbCB+ZXE6ZXF1YWwgbDEgbDJcblxuICAgIGFuZCBlcXVhbCB4IHkgPVxuICAgICAgbWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IFRTZXEgKF8sIGwxLCBlMSksIFRTZXEgKF8sIGwyLCBlMikgLT4gSWQuZXF1YWwgZTEuaWQgZTIuaWQgJiYgZXF1YWxfbGlzdCBsMSBsMlxuICAgICAgfCBURXhwIChtYXJrczEsIGUxKSwgVEV4cCAobWFya3MyLCBlMikgLT5cbiAgICAgICAgSWQuZXF1YWwgZTEuaWQgZTIuaWQgJiYgTWFya3MuZXF1YWwgbWFya3MxIG1hcmtzMlxuICAgICAgfCBUTWF0Y2ggbWFya3MxLCBUTWF0Y2ggbWFya3MyIC0+IE1hcmtzLmVxdWFsIG1hcmtzMSBtYXJrczJcbiAgICAgIHwgXywgXyAtPiBmYWxzZVxuICAgIDs7XG5cbiAgICBsZXQgcmVjIGhhc2ggKHQgOiB0KSBhY2N1ID1cbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgfCBUU2VxIChfLCBsLCBlKSAtPlxuICAgICAgICBoYXNoX2NvbWJpbmUgMHgxNzJhMWJjZSAoaGFzaF9jb21iaW5lIChJZC5oYXNoIGUuaWQpIChoYXNoX2xpc3QgbCBhY2N1KSlcbiAgICAgIHwgVEV4cCAobWFya3MsIGUpIC0+XG4gICAgICAgIGhhc2hfY29tYmluZSAweDJiNGMwZDc3IChoYXNoX2NvbWJpbmUgKElkLmhhc2ggZS5pZCkgKE1hcmtzLmhhc2ggbWFya3MgYWNjdSkpXG4gICAgICB8IFRNYXRjaCBtYXJrcyAtPiBoYXNoX2NvbWJpbmUgMHgxYzIwNWFkNSAoTWFya3MuaGFzaCBtYXJrcyBhY2N1KVxuXG4gICAgYW5kIGhhc2hfbGlzdCA9XG4gICAgICBsZXQgZiBhY2MgeCA9IGhhc2ggeCBhY2MgaW5cbiAgICAgIGZ1biBsIGluaXQgLT4gTGlzdC5mb2xkX2xlZnQgbCB+aW5pdCB+ZlxuICAgIDs7XG4gIGVuZFxuXG4gIHR5cGUgdCA9IEUudCBsaXN0XG5cbiAgbGV0IHJlYyB0b19keW4gc2VtIHQgPSBEeW4ubGlzdCAoTGlzdC5tYXAgfmY6KGR5bl9vZl9lIHNlbSkgdClcblxuICBhbmQgZHluX29mX2Ugc2VtID1cbiAgICBsZXQgb3BlbiBEeW4gaW5cbiAgICBmdW5jdGlvblxuICAgIHwgRS5UU2VxIChzZW0nLCB4LCB5KSAtPlxuICAgICAgd3JhcF9zZW1cbiAgICAgICAgc2VtXG4gICAgICAgIHNlbSdcbiAgICAgICAgKHZhcmlhbnQgXCJUU2VxXCIgWyB0b19keW4gKFNvbWUgc2VtJykgeDsgRXhwci50b19keW4gKFNvbWUgc2VtJykgeSBdKVxuICAgIHwgVEV4cCAobWFya3MsIGUpIC0+XG4gICAgICBsZXQgZSA9XG4gICAgICAgIGxldCBiYXNlID0gWyBFeHByLnRvX2R5biBzZW0gZSBdIGluXG4gICAgICAgIGlmIE1hcmtzLihlcXVhbCBlbXB0eSBtYXJrcykgdGhlbiBiYXNlIGVsc2UgTWFya3MudG9fZHluIG1hcmtzIDo6IGJhc2VcbiAgICAgIGluXG4gICAgICB2YXJpYW50IFwiVEV4cFwiIGVcbiAgICB8IFRNYXRjaCBtIC0+IHZhcmlhbnQgXCJUTWFya3NcIiBbIE1hcmtzLnRvX2R5biBtIF1cbiAgOztcblxuICBsZXQgdG9fZHluIHQgPSB0b19keW4gTm9uZSB0XG5cbiAgb3BlbiBFXG5cbiAgbGV0IGVxdWFsID0gRS5lcXVhbF9saXN0XG4gIGxldCBoYXNoID0gRS5oYXNoX2xpc3RcblxuICBsZXQgdHNlcScga2luZCB4IHkgPVxuICAgIG1hdGNoIHggd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgVEV4cCAobWFya3MsIHsgZGVmID0gRXBzOyBfIH0pIF0gLT4gWyBURXhwIChtYXJrcywgeSkgXVxuICAgIHwgXyAtPiBbIFRTZXEgKGtpbmQsIHgsIHkpIF1cbiAgOztcblxuICBsZXQgdHNlcSBraW5kIHggeSByZW0gPSB0c2VxJyBraW5kIHggeSBAIHJlbVxuXG4gIGxldCByZWMgZm9sZF9yaWdodCB0IH5pbml0IH5mID1cbiAgICBtYXRjaCB0IHdpdGhcbiAgICB8IFtdIC0+IGluaXRcbiAgICB8IHggOjogeHMgLT4gZiB4IChmb2xkX3JpZ2h0IHhzIH5pbml0IH5mKVxuICA7O1xuXG4gIGxldCByZWMgaXRlcl9tYXJrcyB0IH5mID1cbiAgICBMaXN0Lml0ZXIgdCB+ZjooZnVuIChlIDogRS50KSAtPlxuICAgICAgbWF0Y2ggZSB3aXRoXG4gICAgICB8IFRTZXEgKF8sIGwsIF8pIC0+IGl0ZXJfbWFya3MgbCB+ZlxuICAgICAgfCBURXhwIChtYXJrcywgXykgfCBUTWF0Y2ggbWFya3MgLT4gZiBtYXJrcylcbiAgOztcblxuICBsZXQgcmVjIHByaW50X3N0YXRlX3JlYyBjaCBlICh5IDogRXhwci50KSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBUTWF0Y2ggbWFya3MgLT4gRm9ybWF0LmZwcmludGYgY2ggXCJAWzwyPihUTWF0Y2hAICVhKUBdXCIgTWFya3MucHAgbWFya3NcbiAgICB8IFRTZXEgKHNlbSwgbCcsIHgpIC0+XG4gICAgICBGb3JtYXQuZnByaW50ZiBjaCBcIkBbPDI+KFRTZXFAICVhQCBcIiBTZW0ucHAgc2VtO1xuICAgICAgcHJpbnRfc3RhdGVfbHN0IGNoIGwnIHg7XG4gICAgICBGb3JtYXQuZnByaW50ZiBjaCBcIkAgJWEpQF1cIiBFeHByLnBwIHhcbiAgICB8IFRFeHAgKG1hcmtzLCB7IGRlZiA9IEVwczsgXyB9KSAtPlxuICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAWzwyPihURXhwQCAlYUAgKCVhKUAgKGVwcykpQF1cIiBJZC5wcCB5LmlkIE1hcmtzLnBwIG1hcmtzXG4gICAgfCBURXhwIChtYXJrcywgeCkgLT5cbiAgICAgIEZvcm1hdC5mcHJpbnRmIGNoIFwiQFs8Mj4oVEV4cEAgJWFAICglYSlAICVhKUBdXCIgSWQucHAgeC5pZCBNYXJrcy5wcCBtYXJrcyBFeHByLnBwIHhcblxuICBhbmQgcHJpbnRfc3RhdGVfbHN0IGNoIGwgeSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBGb3JtYXQuZnByaW50ZiBjaCBcIigpXCJcbiAgICB8IGUgOjogcmVtIC0+XG4gICAgICBwcmludF9zdGF0ZV9yZWMgY2ggZSB5O1xuICAgICAgTGlzdC5pdGVyIHJlbSB+ZjooZnVuIGUgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAIHwgXCI7XG4gICAgICAgIHByaW50X3N0YXRlX3JlYyBjaCBlIHkpXG4gIDs7XG5cbiAgbGV0IHBwIGNoIHQgPSBwcmludF9zdGF0ZV9sc3QgY2ggWyB0IF0geyBpZCA9IElkLnplcm87IGRlZiA9IEVwcyB9XG5cbiAgbGV0IHJlYyBmaXJzdF9tYXRjaCA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCBUTWF0Y2ggbWFya3MgOjogXyAtPiBTb21lIG1hcmtzXG4gICAgfCBfIDo6IHIgLT4gZmlyc3RfbWF0Y2ggclxuICA7O1xuXG4gIGxldCByZW1vdmVfbWF0Y2hlcyB0ID1cbiAgICBMaXN0LmZpbHRlciB0IH5mOihmdW5jdGlvblxuICAgICAgfCBUTWF0Y2ggXyAtPiBmYWxzZVxuICAgICAgfCBfIC0+IHRydWUpXG4gIDs7XG5cbiAgbGV0IHNwbGl0X2F0X21hdGNoID1cbiAgICBsZXQgcmVjIHNwbGl0X2F0X21hdGNoX3JlYyBsID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFRNYXRjaCBfIDo6IHIgLT4gTGlzdC5yZXYgbCwgcmVtb3ZlX21hdGNoZXMgclxuICAgICAgfCB4IDo6IHIgLT4gc3BsaXRfYXRfbWF0Y2hfcmVjICh4IDo6IGwpIHJcbiAgICBpblxuICAgIGZ1biBsIC0+IHNwbGl0X2F0X21hdGNoX3JlYyBbXSBsXG4gIDs7XG5cbiAgbGV0IHN0YXR1cyA6IF8gLT4gU3RhdHVzLnQgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gRmFpbGVkXG4gICAgfCBUTWF0Y2ggbSA6OiBfIC0+IE1hdGNoIChNYXJrX2luZm9zLm1ha2UgKG0ubWFya3MgOj4gKGludCAqIGludCkgbGlzdCksIG0ucG1hcmtzKVxuICAgIHwgXyAtPiBSdW5uaW5nXG4gIDs7XG5cbiAgbGV0IHNldF9pZHggPVxuICAgIGxldCByZWMgZiBpZHggPSBmdW5jdGlvblxuICAgICAgfCBUTWF0Y2ggbWFya3MgLT4gVE1hdGNoIChNYXJrcy5tYXJrc19zZXRfaWR4IG1hcmtzIGlkeClcbiAgICAgIHwgVFNlcSAoa2luZCwgbCwgeCkgLT4gVFNlcSAoa2luZCwgc2V0X2lkeCBpZHggbCwgeClcbiAgICAgIHwgVEV4cCAobWFya3MsIHgpIC0+IFRFeHAgKE1hcmtzLm1hcmtzX3NldF9pZHggbWFya3MgaWR4LCB4KVxuICAgIGFuZCBzZXRfaWR4IGlkeCB4cyA9IExpc3QubWFwIHhzIH5mOihmIGlkeCkgaW5cbiAgICBzZXRfaWR4XG4gIDs7XG5cbiAgbGV0W0BvY2FtbC53YXJuaW5nIFwiLTMyXCJdIHBwIGZtdCB0ID1cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJbJWFdXCIgKEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXA6KEZtdC5saXQgXCI7IFwiKSBwcCkgdFxuICA7O1xuXG4gIGxldCBlbXB0eSA9IFtdXG4gIGxldCBpbml0aWFsIGV4cHIgPSBbIFRFeHAgKE1hcmtzLmVtcHR5LCBleHByKSBdXG4gIGxldCBhZGRfbWF0Y2ggdCBtYXJrcyA9IFRNYXRjaCBtYXJrcyA6OiB0XG4gIGxldCBhZGRfZXBzIHQgbWFya3MgPSBURXhwIChtYXJrcywgZXBzX2V4cHIpIDo6IHRcbiAgbGV0IGFkZF9leHByIHQgZXhwciA9IGV4cHIgOjogdFxuXG4gIGxldCByZW1vdmVfZHVwbGljYXRlcyA9XG4gICAgbGV0IHJlYyBsb29wIHNlZW4gbCB5ID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoVE1hdGNoIF8gYXMgeCkgOjogXyAtPlxuICAgICAgICAoKiBUcnVuY2F0ZSBhZnRlciBmaXJzdCBtYXRjaCAqKVxuICAgICAgICBbIHggXVxuICAgICAgfCBUU2VxIChraW5kLCBsLCB4KSA6OiByIC0+XG4gICAgICAgIGxldCBsID0gbG9vcCBzZWVuIGwgeCBpblxuICAgICAgICBsZXQgciA9IGxvb3Agc2VlbiByIHkgaW5cbiAgICAgICAgdHNlcSBraW5kIGwgeCByXG4gICAgICB8IChURXhwIChfbWFya3MsIHsgZGVmID0gRXBzOyBfIH0pIGFzIGUpIDo6IHIgLT5cbiAgICAgICAgaWYgSWQuSGFzaF9zZXQubWVtIHNlZW4geS5pZFxuICAgICAgICB0aGVuIGxvb3Agc2VlbiByIHlcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgSWQuSGFzaF9zZXQuYWRkIHNlZW4geS5pZDtcbiAgICAgICAgICBlIDo6IGxvb3Agc2VlbiByIHkpXG4gICAgICB8IChURXhwIChfbWFya3MsIHgpIGFzIGUpIDo6IHIgLT5cbiAgICAgICAgaWYgSWQuSGFzaF9zZXQubWVtIHNlZW4geC5pZFxuICAgICAgICB0aGVuIGxvb3Agc2VlbiByIHlcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgSWQuSGFzaF9zZXQuYWRkIHNlZW4geC5pZDtcbiAgICAgICAgICBlIDo6IGxvb3Agc2VlbiByIHkpXG4gICAgaW5cbiAgICBmdW4gc2VlbiBsIHkgLT5cbiAgICAgIElkLkhhc2hfc2V0LmNsZWFyIHNlZW47XG4gICAgICBsb29wIHNlZW4gbCB5XG4gIDs7XG5lbmRcblxubW9kdWxlIEUgPSBEZXNjLkVcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBpZHggOiBJZHgudFxuICAgIDsgY2F0ZWdvcnkgOiBDYXRlZ29yeS50XG4gICAgOyBkZXNjIDogRGVzYy50XG4gICAgOyBtdXRhYmxlIHN0YXR1cyA6IFN0YXR1cy50IG9wdGlvblxuICAgIDsgaGFzaCA6IGludFxuICAgIH1cbiAgKCogVGhyZWFkLXNhZmV0eTogV2UgdXNlIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcgdG8gYWNjZXNzIGZpZWxkXG4gICAgIFtzdGF0dXNdIGluIGZ1bmN0aW9uIFtzdGF0dXNdIGJlbG93LiAqKVxuXG4gIGxldCBwcCBmbXQgdCA9IERlc2MucHAgZm10IHQuZGVzY1xuICBsZXRbQGlubGluZV0gaWR4IHQgPSB0LmlkeFxuICBsZXQgdG9fZHluIHQgPSBEZXNjLnRvX2R5biB0LmRlc2NcblxuICBsZXQgZHVtbXkgPVxuICAgIHsgaWR4ID0gSWR4LnVua25vd25cbiAgICA7IGNhdGVnb3J5ID0gQ2F0ZWdvcnkuZHVtbXlcbiAgICA7IGRlc2MgPSBEZXNjLmVtcHR5XG4gICAgOyBzdGF0dXMgPSBOb25lXG4gICAgOyBoYXNoID0gLTFcbiAgICB9XG4gIDs7XG5cbiAgbGV0IGhhc2ggaWR4IGNhdCBkZXNjID1cbiAgICBEZXNjLmhhc2ggZGVzYyAoaGFzaF9jb21iaW5lIGlkeCAoaGFzaF9jb21iaW5lIChDYXRlZ29yeS50b19pbnQgY2F0KSAwKSlcbiAgICBsYW5kIDB4M0ZGRkZGRkZcbiAgOztcblxuICBsZXQgbWsgaWR4IGNhdCBkZXNjID1cbiAgICB7IGlkeDsgY2F0ZWdvcnkgPSBjYXQ7IGRlc2M7IHN0YXR1cyA9IE5vbmU7IGhhc2ggPSBoYXNoIChpZHggOj4gaW50KSBjYXQgZGVzYyB9XG4gIDs7XG5cbiAgbGV0IGNyZWF0ZSBjYXQgZSA9IG1rIElkeC5pbml0aWFsIGNhdCAoRGVzYy5pbml0aWFsIGUpXG5cbiAgbGV0IGVxdWFsIHsgaWR4OyBjYXRlZ29yeTsgZGVzYzsgc3RhdHVzID0gXzsgaGFzaCB9IHQgPVxuICAgIEludC5lcXVhbCBoYXNoIHQuaGFzaFxuICAgICYmIElkeC5lcXVhbCBpZHggdC5pZHhcbiAgICAmJiBDYXRlZ29yeS5lcXVhbCBjYXRlZ29yeSB0LmNhdGVnb3J5XG4gICAgJiYgRGVzYy5lcXVhbCBkZXNjIHQuZGVzY1xuICA7O1xuXG4gICgqIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtdXRleCBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkICopXG4gIGxldCBzdGF0dXNfbm9fbXV0ZXggcyA9XG4gICAgbWF0Y2ggcy5zdGF0dXMgd2l0aFxuICAgIHwgU29tZSBzIC0+IHNcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBzdCA9IERlc2Muc3RhdHVzIHMuZGVzYyBpblxuICAgICAgcy5zdGF0dXMgPC0gU29tZSBzdDtcbiAgICAgIHN0XG4gIDs7XG5cbiAgbGV0IHN0YXR1cyBtIHMgPVxuICAgIG1hdGNoIHMuc3RhdHVzIHdpdGhcbiAgICB8IFNvbWUgcyAtPiBzXG4gICAgfCBOb25lIC0+XG4gICAgICBNdXRleC5sb2NrIG07XG4gICAgICBsZXQgc3QgPSBzdGF0dXNfbm9fbXV0ZXggcyBpblxuICAgICAgTXV0ZXgudW5sb2NrIG07XG4gICAgICBzdFxuICA7O1xuXG4gIG1vZHVsZSBUYWJsZSA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgICB0eXBlIG5vbnJlYyB0ID0gdFxuXG4gICAgICBsZXQgZXF1YWwgPSBlcXVhbFxuICAgICAgbGV0IGhhc2ggdCA9IHQuaGFzaFxuICAgIGVuZClcbmVuZFxuXG4oKioqKiBGaW5kIGEgZnJlZSBpbmRleCAqKioqKVxuXG5tb2R1bGUgV29ya2luZ19hcmVhID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgeyBtdXRhYmxlIGlkcyA6IEJpdF92ZWN0b3IudFxuICAgIDsgc2VlbiA6IElkLkhhc2hfc2V0LnRcbiAgICA7IGluZGV4X2NvdW50IDogaW50IEF0b21pYy50XG4gICAgfVxuXG4gIGxldCBjcmVhdGUgKCkgPVxuICAgIHsgaWRzID0gQml0X3ZlY3Rvci5jcmVhdGVfemVybyAxXG4gICAgOyBzZWVuID0gSWQuSGFzaF9zZXQuY3JlYXRlICgpXG4gICAgOyBpbmRleF9jb3VudCA9IEF0b21pYy5tYWtlIDBcbiAgICB9XG4gIDs7XG5cbiAgbGV0IGluZGV4X2NvdW50IHcgPSBBdG9taWMuZ2V0IHcuaW5kZXhfY291bnRcblxuICBsZXQgbWFya191c2VkX2luZGljZXMgdGJsID1cbiAgICBEZXNjLml0ZXJfbWFya3MgfmY6KGZ1biBtYXJrcyAtPlxuICAgICAgTGlzdC5pdGVyIG1hcmtzLm1hcmtzIH5mOihmdW4gKF8sIGkpIC0+XG4gICAgICAgIGlmIElkeC51c2VkIGkgdGhlbiBCaXRfdmVjdG9yLnNldCB0YmwgKGkgOj4gaW50KSB0cnVlKSlcbiAgOztcblxuICBsZXQgcmVjIGZpbmRfZnJlZSB0YmwgaWR4IGxlbiA9XG4gICAgaWYgaWR4ID0gbGVuIHx8IG5vdCAoQml0X3ZlY3Rvci5nZXQgdGJsIGlkeCkgdGhlbiBpZHggZWxzZSBmaW5kX2ZyZWUgdGJsIChpZHggKyAxKSBsZW5cbiAgOztcblxuICBsZXQgZnJlZV9pbmRleCB0IGwgPVxuICAgIEJpdF92ZWN0b3IucmVzZXRfemVybyB0LmlkcztcbiAgICBtYXJrX3VzZWRfaW5kaWNlcyB0LmlkcyBsO1xuICAgIGxldCBsZW4gPSBCaXRfdmVjdG9yLmxlbmd0aCB0LmlkcyBpblxuICAgIGxldCBpZHggPSBmaW5kX2ZyZWUgdC5pZHMgMCBsZW4gaW5cbiAgICBpZiBpZHggPSBsZW5cbiAgICB0aGVuIChcbiAgICAgIHQuaWRzIDwtIEJpdF92ZWN0b3IuY3JlYXRlX3plcm8gKDIgKiBsZW4pO1xuICAgICAgKCogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBtdXRleCBpcyBsb2NrZWQuIFNvIHdlXG4gICAgICAgICBhcmUgc3VyZSB0aGF0IHRoaXMgaXMgYWx3YXlzIGNvaGVyZW50IHdpdGggdGhlIGxlbmd0aCBvZlxuICAgICAgICAgW3QuaWRzXS4gKilcbiAgICAgIEF0b21pYy5zZXQgdC5pbmRleF9jb3VudCAoMiAqIGxlbikpO1xuICAgIElkeC5tYWtlIGlkeFxuICA7O1xuZW5kXG5cbigqKioqIENvbXB1dGF0aW9uIG9mIHRoZSBuZXh0IHN0YXRlICoqKiopXG5cbnR5cGUgY3R4ID1cbiAgeyBjIDogQ3NldC5jXG4gIDsgcHJldl9jYXQgOiBDYXRlZ29yeS50XG4gIDsgbmV4dF9jYXQgOiBDYXRlZ29yeS50XG4gIH1cblxubGV0IHJlYyBkZWx0YV9leHByICh7IGM7IF8gfSBhcyBjdHgpIG1hcmtzICh4IDogRXhwci50KSByZW0gPVxuICAoKkZvcm1hdC5lcHJpbnRmIFwiJWRALlwiIHguaWQ7KilcbiAgbWF0Y2ggeC5kZWYgd2l0aFxuICB8IENzdCBzIC0+IGlmIENzZXQubWVtIGMgcyB0aGVuIERlc2MuYWRkX2VwcyByZW0gbWFya3MgZWxzZSByZW1cbiAgfCBBbHQgbCAtPiBkZWx0YV9hbHQgY3R4IG1hcmtzIGwgcmVtXG4gIHwgU2VxIChraW5kLCB5LCB6KSAtPlxuICAgIGxldCB5ID0gZGVsdGFfZXhwciBjdHggbWFya3MgeSBEZXNjLmVtcHR5IGluXG4gICAgZGVsdGFfc2VxIGN0eCBraW5kIHkgeiByZW1cbiAgfCBSZXAgKHJlcF9raW5kLCBraW5kLCB5KSAtPiBkZWx0YV9yZXAgY3R4IG1hcmtzIHggcmVwX2tpbmQga2luZCB5IHJlbVxuICB8IEVwcyAtPiBEZXNjLmFkZF9tYXRjaCByZW0gbWFya3NcbiAgfCBNYXJrIGkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5zZXRfbWFyayBtYXJrcyBpKVxuICB8IFBtYXJrIGkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5zZXRfcG1hcmsgbWFya3MgaSlcbiAgfCBFcmFzZSAoYiwgZSkgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIChNYXJrcy5maWx0ZXIgbWFya3MgYiBlKVxuICB8IEJlZm9yZSBjYXQgLT5cbiAgICBpZiBDYXRlZ29yeS5pbnRlcnNlY3QgY3R4Lm5leHRfY2F0IGNhdCB0aGVuIERlc2MuYWRkX21hdGNoIHJlbSBtYXJrcyBlbHNlIHJlbVxuICB8IEFmdGVyIGNhdCAtPlxuICAgIGlmIENhdGVnb3J5LmludGVyc2VjdCBjdHgucHJldl9jYXQgY2F0IHRoZW4gRGVzYy5hZGRfbWF0Y2ggcmVtIG1hcmtzIGVsc2UgcmVtXG5cbmFuZCBkZWx0YV9yZXAgY3R4IG1hcmtzIHggcmVwX2tpbmQga2luZCB5IHJlbSA9XG4gIGxldCB5LCBtYXJrcycgPVxuICAgIGxldCB5ID0gZGVsdGFfZXhwciBjdHggbWFya3MgeSBEZXNjLmVtcHR5IGluXG4gICAgbWF0Y2ggRGVzYy5maXJzdF9tYXRjaCB5IHdpdGhcbiAgICB8IE5vbmUgLT4geSwgbWFya3NcbiAgICB8IFNvbWUgbWFya3MgLT4gRGVzYy5yZW1vdmVfbWF0Y2hlcyB5LCBtYXJrc1xuICBpblxuICBtYXRjaCByZXBfa2luZCB3aXRoXG4gIHwgYEdyZWVkeSAtPiBEZXNjLnRzZXEga2luZCB5IHggKERlc2MuYWRkX21hdGNoIHJlbSBtYXJrcycpXG4gIHwgYE5vbl9ncmVlZHkgLT4gRGVzYy5hZGRfbWF0Y2ggKERlc2MudHNlcSBraW5kIHkgeCByZW0pIG1hcmtzXG5cbmFuZCBkZWx0YV9hbHQgY3R4IG1hcmtzIGwgcmVtID0gTGlzdC5mb2xkX3JpZ2h0IGwgfmluaXQ6cmVtIH5mOihkZWx0YV9leHByIGN0eCBtYXJrcylcblxuYW5kIGRlbHRhX3NlcSBjdHggKGtpbmQgOiBTZW0udCkgeSB6IHJlbSA9XG4gIG1hdGNoIERlc2MuZmlyc3RfbWF0Y2ggeSB3aXRoXG4gIHwgTm9uZSAtPiBEZXNjLnRzZXEga2luZCB5IHogcmVtXG4gIHwgU29tZSBtYXJrcyAtPlxuICAgIChtYXRjaCBraW5kIHdpdGhcbiAgICAgfCBgTG9uZ2VzdCAtPiBEZXNjLnRzZXEga2luZCAoRGVzYy5yZW1vdmVfbWF0Y2hlcyB5KSB6IChkZWx0YV9leHByIGN0eCBtYXJrcyB6IHJlbSlcbiAgICAgfCBgU2hvcnRlc3QgLT4gZGVsdGFfZXhwciBjdHggbWFya3MgeiAoRGVzYy50c2VxIGtpbmQgKERlc2MucmVtb3ZlX21hdGNoZXMgeSkgeiByZW0pXG4gICAgIHwgYEZpcnN0IC0+XG4gICAgICAgbGV0IHksIHknID0gRGVzYy5zcGxpdF9hdF9tYXRjaCB5IGluXG4gICAgICAgRGVzYy50c2VxIGtpbmQgeSB6IChkZWx0YV9leHByIGN0eCBtYXJrcyB6IChEZXNjLnRzZXEga2luZCB5JyB6IHJlbSkpKVxuOztcblxubGV0IHJlYyBkZWx0YV9lIGN0eCBtYXJrcyAoeCA6IEUudCkgcmVtID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgVFNlcSAoa2luZCwgeSwgeikgLT5cbiAgICBsZXQgeSA9IGRlbHRhX2Rlc2MgY3R4IG1hcmtzIHkgRGVzYy5lbXB0eSBpblxuICAgIGRlbHRhX3NlcSBjdHgga2luZCB5IHogcmVtXG4gIHwgVEV4cCAobWFya3MsIGUpIC0+IGRlbHRhX2V4cHIgY3R4IG1hcmtzIGUgcmVtXG4gIHwgVE1hdGNoIF8gLT4gRGVzYy5hZGRfZXhwciByZW0geFxuXG5hbmQgZGVsdGFfZGVzYyBjdHggbWFya3MgKGwgOiBEZXNjLnQpIHJlbSA9XG4gIERlc2MuZm9sZF9yaWdodCBsIH5pbml0OnJlbSB+ZjooZnVuIHkgYWNjIC0+IGRlbHRhX2UgY3R4IG1hcmtzIHkgYWNjKVxuOztcblxubGV0IGRlbHRhICh0YmxfcmVmIDogV29ya2luZ19hcmVhLnQpIG5leHRfY2F0IGNoYXIgKHN0IDogU3RhdGUudCkgPVxuICBsZXQgZXhwciA9XG4gICAgbGV0IHByZXZfY2F0ID0gc3QuY2F0ZWdvcnkgaW5cbiAgICBsZXQgY3R4ID0geyBjID0gY2hhcjsgbmV4dF9jYXQ7IHByZXZfY2F0IH0gaW5cbiAgICBEZXNjLnJlbW92ZV9kdXBsaWNhdGVzXG4gICAgICB0YmxfcmVmLnNlZW5cbiAgICAgIChkZWx0YV9kZXNjIGN0eCBNYXJrcy5lbXB0eSBzdC5kZXNjIERlc2MuZW1wdHkpXG4gICAgICBFeHByLmVwc19leHByXG4gIGluXG4gIGxldCBpZHggPSBXb3JraW5nX2FyZWEuZnJlZV9pbmRleCB0YmxfcmVmIGV4cHIgaW5cbiAgbGV0IGV4cHIgPSBEZXNjLnNldF9pZHggaWR4IGV4cHIgaW5cbiAgU3RhdGUubWsgaWR4IG5leHRfY2F0IGV4cHJcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDQiLCJhMiIsImEzIiwiY2FtbF9jYWxsNiIsImE0IiwiYTUiLCJnbG9iYWxfZGF0YSIsIlJlX0NzZXQiLCJSZV9DYXRlZ29yeSIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfSW1wb3J0IiwiUmVfQml0X3ZlY3RvciIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfTXV0ZXgiLCJSZV9EeW4iLCJTdGRsaWJfRm9ybWF0IiwiUmVfRm10IiwiUmVfTWFya19pbmZvcyIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiUmVfUG1hcmsiLCJTdGRsaWJfSGFzaHRibCIsIlJlX0hhc2hfc2V0IiwiaGFzaF9jb21iaW5lIiwiaCIsImFjY3UiLCJlcXVhbCIsInBwIiwiY3JlYXRlIiwicGFyYW0iLCJ0b19zdHJpbmciLCJ0b19keW4iLCJ0IiwiY2giLCJrIiwiZm10IiwiY29tcGFyZSIsInByZXYiLCJ4IiwibmV4dCIsIm5leHQyIiwiZ3JvdXBfY291bnQiLCJ0b19pbnQiLCJ3cmFwX3NlbSIsInNlbSIsInYiLCJuYW1lIiwiY3MiLCJ5IiwiZHluX29mX2RlZiIsImNzZXQiLCJhbHQiLCJzIiwiZXhuIiwibWF0Y2giLCJjc3RfU2VxIiwibSIsImMiLCJkZWYiLCJwcF93aXRoX3NlbSIsImUiLCJsIiwiaSIsImIiLCJtayIsImlkcyIsImVtcHR5IiwiY3N0IiwiZXBzIiwicmVwIiwia2luZCIsIm1hcmsiLCJwbWFyayIsImVyYXNlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJzZXEiLCJpc19lcHMiLCJleHByIiwicmVuYW1lIiwieiIsImciLCJjc3RfbWFya3MiLCJwbWFya3MiLCJtYXJrcyIsImlkeCIsImFjYyIsImEiLCJoYXNoIiwiaW5pdCIsInVua25vd24iLCJtYXJrc19zZXRfaWR4IiwicmVtIiwiY3N0XzIiLCJlcXVhbF9saXN0IiwibDEiLCJsMiIsImUxIiwiZTIiLCJtYXJrczEiLCJtYXJrczIiLCJsZXRyZWNfZnVuY3Rpb25fY29udGV4dCIsImhhc2hfbGlzdCIsImJhc2UiLCJ0c2VxIiwiZm9sZF9yaWdodCIsInhzIiwiaXRlcl9tYXJrcyIsImNzdF9URXhwIiwicHJpbnRfc3RhdGVfcmVjIiwicHJpbnRfc3RhdGVfbHN0IiwiemVybyIsImZpcnN0X21hdGNoIiwiciIsInJlbW92ZV9tYXRjaGVzIiwic2V0X2lkeCIsImFkZF9tYXRjaCIsImxvb3AiLCJzZWVuIiwiZHVtbXkiLCJjYXQiLCJkZXNjIiwiY2F0ZWdvcnkiLCJzdGF0dXNfbm9fbXV0ZXgiLCJzdCIsInN0YXR1cyIsIlRhYmxlIiwiaW5kZXhfY291bnQiLCJ3IiwiZXBzX2V4cHIiLCJkZWx0YV9leHByIiwiY291bnRlciIsImN0eCIsInJlcF9raW5kIiwic3RvcF9pbmNsdXNpdmUiLCJzdGFydF9pbmNsdXNpdmUiLCJkZWx0YV9zZXEiLCJkZWx0YV9kZXNjIiwiZGVsdGEiLCJ0YmxfcmVmIiwibmV4dF9jYXQiLCJjaGFyIiwicHJldl9jYXQiLCJ0YmwiLCJsZW4iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdB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QUE7QUFBQSxFRHZrQkoiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMjk4NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2NvbG9yX21hcC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEluIHJlYWxpdHksIHRoaXMgY2FuIHJlYWxseSBiZSByZXByZXNlbnRlZCBhcyBhIGJvb2wgYXJyYXkuXG5cbiAgIFRoZSByZXByZXNlbnRhdGlvbiBpcyBiZXN0IHRob3VnaHQgb2YgYXMgYSBsaXN0IG9mIGFsbCBjaGFycyBhbG9uZyB3aXRoIGFcbiAgIGZsYWc6XG5cbiAgIChhLCAwKSwgKGIsIDEpLCAoYywgMCksIChkLCAwKSwgLi4uXG5cbiAgIGNoYXJhY3RlcnMgYmVsb25naW5nIHRvIHRoZSBzYW1lIGNvbG9yIGFyZSByZXByZXNlbnRlZCBieSBzZXF1bmNlcyBvZlxuICAgY2hhcmFjdGVycyB3aXRoIHRoZSBmbGFnIHNldCB0byAwLlxuKilcblxudHlwZSB0ID0gQnl0ZXMudFxuXG5tb2R1bGUgUmVwciA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmdcblxuICBsZXQgcmVwciB0IGNvbG9yID0gdC5bQ3NldC50b19pbnQgY29sb3JdXG4gIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5lbmRcblxubW9kdWxlIFRhYmxlID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBnZXRfY2hhciB0IGMgPSB0LltDc2V0LnRvX2ludCBjXVxuICBsZXQgZ2V0IHQgYyA9IENzZXQub2ZfY2hhciAoU3RyaW5nLnVuc2FmZV9nZXQgdCAoQ2hhci5jb2RlIGMpKVxuXG4gIGxldCB0cmFuc2xhdGVfY29sb3JzIChjbSA6IHQpIGNzZXQgPVxuICAgIENzZXQuZm9sZF9yaWdodCBjc2V0IH5pbml0OkNzZXQuZW1wdHkgfmY6KGZ1biBpIGogbCAtPlxuICAgICAgbGV0IHN0YXJ0ID0gZ2V0X2NoYXIgY20gaSBpblxuICAgICAgbGV0IHN0b3AgPSBnZXRfY2hhciBjbSBqIGluXG4gICAgICBDc2V0LnVuaW9uIChDc2V0LmNzZXEgc3RhcnQgc3RvcCkgbClcbiAgOztcbmVuZFxuXG5sZXQgbWFrZSAoKSA9IEJ5dGVzLm1ha2UgMjU3ICdcXDAwMCdcblxubGV0IGZsYXR0ZW4gY20gPVxuICBsZXQgYyA9IEJ5dGVzLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGNvbG9yX3JlcHIgPSBCeXRlcy5jcmVhdGUgMjU2IGluXG4gIGxldCB2ID0gcmVmIDAgaW5cbiAgQnl0ZXMuc2V0IGMgMCAnXFwwMDAnO1xuICBCeXRlcy5zZXQgY29sb3JfcmVwciAwICdcXDAwMCc7XG4gIGZvciBpID0gMSB0byAyNTUgZG9cbiAgICBpZiBCeXRlcy5nZXQgY20gaSA8PiAnXFwwMDAnIHRoZW4gaW5jciB2O1xuICAgIEJ5dGVzLnNldCBjIGkgKENoYXIuY2hyICF2KTtcbiAgICBCeXRlcy5zZXQgY29sb3JfcmVwciAhdiAoQ2hhci5jaHIgaSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjLCBCeXRlcy5zdWJfc3RyaW5nIGNvbG9yX3JlcHIgMCAoIXYgKyAxKVxuOztcblxuKCogbWFyayBhbGwgdGhlIGVuZHBvaW50cyBvZiB0aGUgaW50ZXJ2YWxzIG9mIHRoZSBjaGFyIHNldCB3aXRoIHRoZSAxIGJ5dGUgKilcbmxldCBzcGxpdCB0IHNldCA9XG4gIENzZXQuaXRlciBzZXQgfmY6KGZ1biBpIGogLT5cbiAgICBCeXRlcy5zZXQgdCAoQ3NldC50b19pbnQgaSkgJ1xcMDAxJztcbiAgICBCeXRlcy5zZXQgdCAoQ3NldC50b19pbnQgaiArIDEpICdcXDAwMScpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9zdHJpbmdfZ2V0IiwiZ2xvYmFsX2RhdGEiLCJSZV9Dc2V0IiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJyZXByIiwidCIsImNvbG9yIiwibGVuZ3RoIiwiZ2V0X2NoYXIiLCJjIiwiZ2V0IiwidHJhbnNsYXRlX2NvbG9ycyIsImNtIiwiY3NldCIsImkiLCJqIiwibCIsInN0YXJ0Iiwic3RvcCIsIm1ha2UiLCJwYXJhbSIsImZsYXR0ZW4iLCJjb2xvcl9yZXByIiwidiIsInNwbGl0Iiwic2V0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQztBQUFBQSxJQ2dCd0IsT0FBSCxtQkFBRyw2QkFBa0I7QUFBQTtBQUFBLE9BQUFDLFNEaEIxQztBQUFBLFlBQUFDLFNBQUFILEdBQUFJO0FBQUFBLElDdUJ3QixPQUFILG1CQUFHLHlCQUFjO0FBQUE7QUFBQSxZQUFBQyxJQUFBTCxHQUFBSTtBQUFBQSxJQUN0QixrRUFBZ0Q7QUFBQTtBQUFBLFlBQUFFLGlCQUFBQyxJQUFBQztBQUFBQSxJQUc1RDtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFBQyxHQUFBQyxHQUFBQztBQUFBQTtBQUFBQSxlQUFBQyxRQUNjO0FBQUEsZUFBQUMsT0FDRDtBQUFBLG1CQUNBO0FBQUEsY0FBc0Isa0NBQUU7QUFBQSxlQUFDO0FBQUE7QUFBQSxZQUFBQyxLQUFBQyxPQUk1Qix5Q0FBcUI7QUFBQSxZQUFBQyxRQUFBVDtBQUFBQSxRQUFBSCxJQUd6Qix3QkFBQWEsYUFDUztBQUFBLElBRWpCO0FBQUEsSUFDQTtBQUFBLFFBQUFDLElBQTZCLEdBQUFULElBQUE7QUFBQTtBQUFBLEtBRXhCO0FBQUEsVUFBQVMsTUFBOEIsV0FBQUEsTUFDakM7QUFBQTtBQUFBLFVBQUFBLE1BRGlCO0FBQUEsS0FDakIscUJBQWM7QUFBQSxLQUNkLGdDQUF3QjtBQUFBLGFBQVk7QUFBQTtBQUFBLGNBRVo7QUFBQSxNQUExQiw2Q0FBd0I7QUFBQTtBQUFBLEtBRmM7QUFBQTtBQUFBO0FBQUEsR0FFMEI7QUFBQSxZQUFBQyxNQUFBbkIsR0FBQW9CO0FBQUFBLElBS2hFO0FBQUE7QUFBQTtBQUFBLHNCQUFBWCxHQUFBQztBQUFBQSxjQUNFLGtCQUFZO0FBQUEsY0FDQyxPQUFiLGtCQUFhLG9DQUF5QjtBQUFBLGVBQUM7QUFBQTtBQUFBLEdEdEQzQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMzMDY4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvYXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxudHlwZSAoJ2EsIF8pIGFzdCA9XG4gIHwgQWx0ZXJuYXRpdmUgOiAnYSBsaXN0IC0+ICgnYSwgWz4gYFVuY2FzZWQgXSkgYXN0XG4gIHwgTm9fY2FzZSA6ICdhIC0+ICgnYSwgWz4gYENhc2VkIF0pIGFzdFxuICB8IENhc2UgOiAnYSAtPiAoJ2EsIFs+IGBDYXNlZCBdKSBhc3RcblxubGV0IGR5bl9vZl9hc3QgZiA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IEFsdGVybmF0aXZlIHhzIC0+IHZhcmlhbnQgXCJBbHRlcm5hdGl2ZVwiIChMaXN0Lm1hcCB4cyB+ZilcbiAgfCBOb19jYXNlIGEgLT4gdmFyaWFudCBcIk5vX2Nhc2VcIiBbIGYgYSBdXG4gIHwgQ2FzZSBhIC0+IHZhcmlhbnQgXCJDYXNlXCIgWyBmIGEgXVxuOztcblxubGV0IGVtcHR5X2FsdGVybmF0aXZlIDogKCdhLCAnYikgYXN0ID0gQWx0ZXJuYXRpdmUgW11cblxubGV0IGVxdWFsX2FzdCAodHlwZSBhKSBlcSAoeCA6IChhLCBbIGBVbmNhc2VkIF0pIGFzdCkgKHkgOiAoYSwgWyBgVW5jYXNlZCBdKSBhc3QpID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgQWx0ZXJuYXRpdmUgYSwgQWx0ZXJuYXRpdmUgYiAtPiBMaXN0LmVxdWFsIH5lcSBhIGJcbjs7XG5cbmxldCBwcF9hc3QgKHR5cGUgYSBiKSBmIGZtdCAoYXN0IDogKGEsIGIpIGFzdCkgPVxuICBsZXQgb3BlbiBGbXQgaW5cbiAgbGV0IHZhciBzIHJlID0gc2V4cCBmbXQgcyBmIHJlIGluXG4gIG1hdGNoIGFzdCB3aXRoXG4gIHwgQWx0ZXJuYXRpdmUgYWx0IC0+IHNleHAgZm10IFwiQWx0ZXJuYXRpdmVcIiAobGlzdCBmKSBhbHRcbiAgfCBDYXNlIGMgLT4gdmFyIFwiQ2FzZVwiIGNcbiAgfCBOb19jYXNlIGMgLT4gdmFyIFwiTm9fY2FzZVwiIGNcbjs7XG5cbnR5cGUgY3NldCA9XG4gIHwgQ3NldCBvZiBDc2V0LnRcbiAgfCBJbnRlcnNlY3Rpb24gb2YgY3NldCBsaXN0XG4gIHwgQ29tcGxlbWVudCBvZiBjc2V0IGxpc3RcbiAgfCBEaWZmZXJlbmNlIG9mIGNzZXQgKiBjc2V0XG4gIHwgQ2FzdCBvZiAoY3NldCwgWyBgQ2FzZWQgfCBgVW5jYXNlZCBdKSBhc3RcblxubGV0IHJlYyBkeW5fb2ZfY3NldCA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IENzZXQgY3NldCAtPiB2YXJpYW50IFwiQ3NldFwiIFsgQ3NldC50b19keW4gY3NldCBdXG4gIHwgSW50ZXJzZWN0aW9uIHhzIC0+IHZhcmlhbnQgXCJJbnRlcnNlY3Rpb25cIiAoTGlzdC5tYXAgeHMgfmY6ZHluX29mX2NzZXQpXG4gIHwgQ29tcGxlbWVudCB4cyAtPiB2YXJpYW50IFwiQ29tcGxlbWVudFwiIChMaXN0Lm1hcCB4cyB+ZjpkeW5fb2ZfY3NldClcbiAgfCBEaWZmZXJlbmNlICh4LCB5KSAtPiB2YXJpYW50IFwiRGlmZmVyZW5jZVwiIFsgZHluX29mX2NzZXQgeDsgZHluX29mX2NzZXQgeSBdXG4gIHwgQ2FzdCBjIC0+IHZhcmlhbnQgXCJDYXN0XCIgWyBkeW5fb2ZfYXN0IGR5bl9vZl9jc2V0IGMgXVxuOztcblxudHlwZSAoJ2EsICdjYXNlKSBnZW4gPVxuICB8IFNldCBvZiAnYVxuICB8IEFzdCBvZiAoKCdhLCAnY2FzZSkgZ2VuLCAnY2FzZSkgYXN0XG4gIHwgU2VxdWVuY2Ugb2YgKCdhLCAnY2FzZSkgZ2VuIGxpc3RcbiAgfCBSZXBlYXQgb2YgKCdhLCAnY2FzZSkgZ2VuICogaW50ICogaW50IG9wdGlvblxuICB8IEJlZ19vZl9saW5lXG4gIHwgRW5kX29mX2xpbmVcbiAgfCBCZWdfb2Zfd29yZFxuICB8IEVuZF9vZl93b3JkXG4gIHwgTm90X2JvdW5kXG4gIHwgQmVnX29mX3N0clxuICB8IEVuZF9vZl9zdHJcbiAgfCBMYXN0X2VuZF9vZl9saW5lXG4gIHwgU3RhcnRcbiAgfCBTdG9wXG4gIHwgR3JvdXAgb2Ygc3RyaW5nIG9wdGlvbiAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IE5vX2dyb3VwIG9mICgnYSwgJ2Nhc2UpIGdlblxuICB8IE5lc3Qgb2YgKCdhLCAnY2FzZSkgZ2VuXG4gIHwgUG1hcmsgb2YgUG1hcmsudCAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IFNlbSBvZiBBdXRvbWF0YS5TZW0udCAqICgnYSwgJ2Nhc2UpIGdlblxuICB8IFNlbV9ncmVlZHkgb2YgQXV0b21hdGEuUmVwX2tpbmQudCAqICgnYSwgJ2Nhc2UpIGdlblxuXG5sZXQgcmVjIGR5bl9vZl9nZW4gZiA9XG4gIGxldCBvcGVuIER5biBpblxuICBmdW5jdGlvblxuICB8IFNldCBhIC0+IHZhcmlhbnQgXCJTZXRcIiBbIGYgYSBdXG4gIHwgQXN0IGFzdCAtPiB2YXJpYW50IFwiQXN0XCIgWyBkeW5fb2ZfYXN0IChkeW5fb2ZfZ2VuIGYpIGFzdCBdXG4gIHwgU2VxdWVuY2UgeHMgLT4gdmFyaWFudCBcIlNlcXVlbmNlXCIgKExpc3QubWFwIHhzIH5mOihkeW5fb2ZfZ2VuIGYpKVxuICB8IFJlcGVhdCAoZ2VuLCBtaW4sIG1heCkgLT5cbiAgICBsZXQgYmFzZSA9XG4gICAgICBtYXRjaCBtYXggd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgeCAtPiBbIGludCB4IF1cbiAgICBpblxuICAgIHZhcmlhbnQgXCJSZXBlYXRcIiAoZHluX29mX2dlbiBmIGdlbiA6OiBpbnQgbWluIDo6IGJhc2UpXG4gIHwgQmVnX29mX2xpbmUgLT4gZW51bSBcIkJlZ19vZl9saW5lXCJcbiAgfCBFbmRfb2ZfbGluZSAtPiBlbnVtIFwiRW5kX29mX2xpbmVcIlxuICB8IEJlZ19vZl93b3JkIC0+IGVudW0gXCJCZWdfb2Zfd29yZFwiXG4gIHwgRW5kX29mX3dvcmQgLT4gZW51bSBcIkVuZF9vZl93b3JkXCJcbiAgfCBOb3RfYm91bmQgLT4gZW51bSBcIk5vdF9ib3VuZFwiXG4gIHwgQmVnX29mX3N0ciAtPiBlbnVtIFwiQmVnX29mX3N0clwiXG4gIHwgRW5kX29mX3N0ciAtPiBlbnVtIFwiRW5kX29mX3N0clwiXG4gIHwgTGFzdF9lbmRfb2ZfbGluZSAtPiBlbnVtIFwiTGFzdF9lbmRfb2ZfbGluZVwiXG4gIHwgU3RhcnQgLT4gZW51bSBcIlN0YXJ0XCJcbiAgfCBTdG9wIC0+IGVudW0gXCJTdG9wXCJcbiAgfCBHcm91cCAobmFtZSwgdCkgLT5cbiAgICBsZXQgYXJncyA9XG4gICAgICBsZXQgYXJncyA9IFsgZHluX29mX2dlbiBmIHQgXSBpblxuICAgICAgbWF0Y2ggbmFtZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXJnc1xuICAgICAgfCBTb21lIG5hbWUgLT4gc3RyaW5nIG5hbWUgOjogYXJnc1xuICAgIGluXG4gICAgdmFyaWFudCBcIkdyb3VwXCIgYXJnc1xuICB8IE5vX2dyb3VwIHggLT4gdmFyaWFudCBcIk5vX2dyb3VwXCIgWyBkeW5fb2ZfZ2VuIGYgeCBdXG4gIHwgTmVzdCB4IC0+IHZhcmlhbnQgXCJOZXN0XCIgWyBkeW5fb2ZfZ2VuIGYgeCBdXG4gIHwgUG1hcmsgKHBtYXJrLCB0KSAtPiB2YXJpYW50IFwiUG1hcmtcIiBbIFBtYXJrLnRvX2R5biBwbWFyazsgZHluX29mX2dlbiBmIHQgXVxuICB8IFNlbSAoc2VtLCB0KSAtPiB2YXJpYW50IFwiU2VtXCIgWyBBdXRvbWF0YS5TZW0udG9fZHluIHNlbTsgZHluX29mX2dlbiBmIHQgXVxuICB8IFNlbV9ncmVlZHkgKHJlcCwgdCkgLT5cbiAgICB2YXJpYW50IFwiU2VtX2dyZWVkeVwiIFsgQXV0b21hdGEuUmVwX2tpbmQudG9fZHluIHJlcDsgZHluX29mX2dlbiBmIHQgXVxuOztcblxubGV0IHJlYyBwcF9nZW4gcHBfY3NldCBmbXQgdCA9XG4gIGxldCBvcGVuIEZvcm1hdCBpblxuICBsZXQgb3BlbiBGbXQgaW5cbiAgbGV0IHBwID0gcHBfZ2VuIHBwX2NzZXQgaW5cbiAgbGV0IHZhciBzIHJlID0gc2V4cCBmbXQgcyBwcCByZSBpblxuICBsZXQgc2VxIHMgcmVsID0gc2V4cCBmbXQgcyAobGlzdCBwcCkgcmVsIGluXG4gIG1hdGNoIHQgd2l0aFxuICB8IFNldCBjc2V0IC0+IHBwX2NzZXQgZm10IGNzZXRcbiAgfCBTZXF1ZW5jZSBzcSAtPiBzZXEgXCJTZXF1ZW5jZVwiIHNxXG4gIHwgUmVwZWF0IChyZSwgc3RhcnQsIHN0b3ApIC0+XG4gICAgbGV0IHBwJyBmbXQgKCkgPSBmcHJpbnRmIGZtdCBcIiVhQCAlZCVhXCIgcHAgcmUgc3RhcnQgb3B0aW50IHN0b3AgaW5cbiAgICBzZXhwIGZtdCBcIlJlcGVhdFwiIHBwJyAoKVxuICB8IEJlZ19vZl9saW5lIC0+IHN0ciBmbXQgXCJCZWdfb2ZfbGluZVwiXG4gIHwgRW5kX29mX2xpbmUgLT4gc3RyIGZtdCBcIkVuZF9vZl9saW5lXCJcbiAgfCBCZWdfb2Zfd29yZCAtPiBzdHIgZm10IFwiQmVnX29mX3dvcmRcIlxuICB8IEVuZF9vZl93b3JkIC0+IHN0ciBmbXQgXCJFbmRfb2Zfd29yZFwiXG4gIHwgTm90X2JvdW5kIC0+IHN0ciBmbXQgXCJOb3RfYm91bmRcIlxuICB8IEJlZ19vZl9zdHIgLT4gc3RyIGZtdCBcIkJlZ19vZl9zdHJcIlxuICB8IEVuZF9vZl9zdHIgLT4gc3RyIGZtdCBcIkVuZF9vZl9zdHJcIlxuICB8IExhc3RfZW5kX29mX2xpbmUgLT4gc3RyIGZtdCBcIkxhc3RfZW5kX29mX2xpbmVcIlxuICB8IFN0YXJ0IC0+IHN0ciBmbXQgXCJTdGFydFwiXG4gIHwgU3RvcCAtPiBzdHIgZm10IFwiU3RvcFwiXG4gIHwgR3JvdXAgKE5vbmUsIGMpIC0+IHZhciBcIkdyb3VwXCIgY1xuICB8IEdyb3VwIChTb21lIG4sIGMpIC0+IHNleHAgZm10IFwiTmFtZWRfZ3JvdXBcIiAocGFpciBzdHIgcHApIChuLCBjKVxuICB8IE5lc3QgYyAtPiB2YXIgXCJOZXN0XCIgY1xuICB8IFBtYXJrIChtLCByKSAtPiBzZXhwIGZtdCBcIlBtYXJrXCIgKHBhaXIgUG1hcmsucHAgcHApIChtLCByKVxuICB8IEFzdCBhIC0+IHBwX2FzdCBwcCBmbXQgYVxuICB8IFNlbSAoc2VtLCBhKSAtPiBzZXhwIGZtdCBcIlNlbVwiIChwYWlyIEF1dG9tYXRhLlNlbS5wcCBwcCkgKHNlbSwgYSlcbiAgfCBTZW1fZ3JlZWR5IChrLCByZSkgLT4gc2V4cCBmbXQgXCJTZW1fZ3JlZWR5XCIgKHBhaXIgQXV0b21hdGEuUmVwX2tpbmQucHAgcHApIChrLCByZSlcbiAgfCBOb19ncm91cCBjIC0+IHZhciBcIk5vX2dyb3VwXCIgY1xuOztcblxubGV0IHJlYyBwcF9jc2V0IGZtdCBjc2V0ID1cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCBzZXEgcyByZWwgPSBzZXhwIGZtdCBzIChsaXN0IHBwX2NzZXQpIHJlbCBpblxuICBtYXRjaCBjc2V0IHdpdGhcbiAgfCBDYXN0IHMgLT4gcHBfYXN0IHBwX2NzZXQgZm10IHNcbiAgfCBDc2V0IHMgLT4gc2V4cCBmbXQgXCJTZXRcIiBDc2V0LnBwIHNcbiAgfCBJbnRlcnNlY3Rpb24gYyAtPiBzZXEgXCJJbnRlcnNlY3Rpb25cIiBjXG4gIHwgQ29tcGxlbWVudCBjIC0+IHNlcSBcIkNvbXBsZW1lbnRcIiBjXG4gIHwgRGlmZmVyZW5jZSAoYSwgYikgLT4gc2V4cCBmbXQgXCJEaWZmZXJlbmNlXCIgKHBhaXIgcHBfY3NldCBwcF9jc2V0KSAoYSwgYilcbjs7XG5cbmxldCByZWMgZXF1YWwgY3NldCB4MSB4MiA9XG4gIG1hdGNoIHgxLCB4MiB3aXRoXG4gIHwgU2V0IHMxLCBTZXQgczIgLT4gY3NldCBzMSBzMlxuICB8IFNlcXVlbmNlIGwxLCBTZXF1ZW5jZSBsMiAtPiBMaXN0LmVxdWFsIH5lcTooZXF1YWwgY3NldCkgbDEgbDJcbiAgfCBSZXBlYXQgKHgxJywgaTEsIGoxKSwgUmVwZWF0ICh4MicsIGkyLCBqMikgLT5cbiAgICBJbnQuZXF1YWwgaTEgaTIgJiYgT3B0aW9uLmVxdWFsIEludC5lcXVhbCBqMSBqMiAmJiBlcXVhbCBjc2V0IHgxJyB4MidcbiAgfCBCZWdfb2ZfbGluZSwgQmVnX29mX2xpbmVcbiAgfCBFbmRfb2ZfbGluZSwgRW5kX29mX2xpbmVcbiAgfCBCZWdfb2Zfd29yZCwgQmVnX29mX3dvcmRcbiAgfCBFbmRfb2Zfd29yZCwgRW5kX29mX3dvcmRcbiAgfCBOb3RfYm91bmQsIE5vdF9ib3VuZFxuICB8IEJlZ19vZl9zdHIsIEJlZ19vZl9zdHJcbiAgfCBFbmRfb2Zfc3RyLCBFbmRfb2Zfc3RyXG4gIHwgTGFzdF9lbmRfb2ZfbGluZSwgTGFzdF9lbmRfb2ZfbGluZVxuICB8IFN0YXJ0LCBTdGFydFxuICB8IFN0b3AsIFN0b3AgLT4gdHJ1ZVxuICB8IEdyb3VwIF8sIEdyb3VwIF8gLT5cbiAgICAoKiBEbyBub3QgbWVyZ2UgZ3JvdXBzISAqKVxuICAgIGZhbHNlXG4gIHwgUG1hcmsgKG0xLCByMSksIFBtYXJrIChtMiwgcjIpIC0+IFBtYXJrLmVxdWFsIG0xIG0yICYmIGVxdWFsIGNzZXQgcjEgcjJcbiAgfCBOZXN0IHgsIE5lc3QgeSAtPiBlcXVhbCBjc2V0IHggeVxuICB8IEFzdCB4LCBBc3QgeSAtPiBlcXVhbF9hc3QgKGVxdWFsIGNzZXQpIHggeVxuICB8IFNlbSAoc2VtLCBhKSwgU2VtIChzZW0nLCBhJykgLT4gUG9seS5lcXVhbCBzZW0gc2VtJyAmJiBlcXVhbCBjc2V0IGEgYSdcbiAgfCBTZW1fZ3JlZWR5IChyZXAsIGEpLCBTZW1fZ3JlZWR5IChyZXAnLCBhJykgLT4gUG9seS5lcXVhbCByZXAgcmVwJyAmJiBlcXVhbCBjc2V0IGEgYSdcbiAgfCBfIC0+IGZhbHNlXG47O1xuXG50eXBlIHQgPSAoY3NldCwgWyBgQ2FzZWQgfCBgVW5jYXNlZCBdKSBnZW5cbnR5cGUgbm9fY2FzZSA9IChDc2V0LnQsIFsgYFVuY2FzZWQgXSkgZ2VuXG5cbmxldCB0b19keW4gPSBkeW5fb2ZfZ2VuIGR5bl9vZl9jc2V0XG5sZXQgcHAgPSBwcF9nZW4gcHBfY3NldFxubGV0IGNzZXQgY3NldCA9IFNldCAoQ3NldCBjc2V0KVxuXG5sZXQgcmVjIGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgPSBmdW5jdGlvblxuICB8IENzZXQgcyAtPiBpZiBpZ25fY2FzZSB0aGVuIENzZXQuY2FzZV9pbnNlbnMgcyBlbHNlIHNcbiAgfCBDYXN0IChBbHRlcm5hdGl2ZSBsKSAtPiBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSkgbCB8PiBDc2V0LnVuaW9uX2FsbFxuICB8IENvbXBsZW1lbnQgbCAtPlxuICAgIExpc3QubWFwIH5mOihoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlKSBsIHw+IENzZXQudW5pb25fYWxsIHw+IENzZXQuZGlmZiBDc2V0LmNhbnlcbiAgfCBEaWZmZXJlbmNlIChyLCByJykgLT5cbiAgICBDc2V0LmludGVyXG4gICAgICAoaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSByKVxuICAgICAgKENzZXQuZGlmZiBDc2V0LmNhbnkgKGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgcicpKVxuICB8IEludGVyc2VjdGlvbiBsIC0+IExpc3QubWFwIH5mOihoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlKSBsIHw+IENzZXQuaW50ZXJzZWN0X2FsbFxuICB8IENhc3QgKE5vX2Nhc2UgYSkgLT4gaGFuZGxlX2Nhc2VfY3NldCB0cnVlIGFcbiAgfCBDYXN0IChDYXNlIGEpIC0+IGhhbmRsZV9jYXNlX2NzZXQgZmFsc2UgYVxuOztcblxubGV0IHJlYyBoYW5kbGVfY2FzZSBpZ25fY2FzZSA6IHQgLT4gKENzZXQudCwgWyBgVW5jYXNlZCBdKSBnZW4gPSBmdW5jdGlvblxuICB8IFNldCBzIC0+IFNldCAoaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSBzKVxuICB8IFNlcXVlbmNlIGwgLT4gU2VxdWVuY2UgKExpc3QubWFwIH5mOihoYW5kbGVfY2FzZSBpZ25fY2FzZSkgbClcbiAgfCBBc3QgKEFsdGVybmF0aXZlIGwpIC0+XG4gICAgbGV0IGwgPSBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2UgaWduX2Nhc2UpIGwgaW5cbiAgICBBc3QgKEFsdGVybmF0aXZlIGwpXG4gIHwgUmVwZWF0IChyLCBpLCBqKSAtPiBSZXBlYXQgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIsIGksIGopXG4gIHwgKCBCZWdfb2ZfbGluZVxuICAgIHwgRW5kX29mX2xpbmVcbiAgICB8IEJlZ19vZl93b3JkXG4gICAgfCBFbmRfb2Zfd29yZFxuICAgIHwgTm90X2JvdW5kXG4gICAgfCBCZWdfb2Zfc3RyXG4gICAgfCBFbmRfb2Zfc3RyXG4gICAgfCBMYXN0X2VuZF9vZl9saW5lXG4gICAgfCBTdGFydFxuICAgIHwgU3RvcCApIGFzIHIgLT4gclxuICB8IFNlbSAoaywgcikgLT4gU2VtIChrLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IFNlbV9ncmVlZHkgKGssIHIpIC0+IFNlbV9ncmVlZHkgKGssIGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgR3JvdXAgKG4sIHIpIC0+IEdyb3VwIChuLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IE5vX2dyb3VwIHIgLT4gTm9fZ3JvdXAgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgTmVzdCByIC0+IE5lc3QgKGhhbmRsZV9jYXNlIGlnbl9jYXNlIHIpXG4gIHwgQXN0IChDYXNlIHIpIC0+IGhhbmRsZV9jYXNlIGZhbHNlIHJcbiAgfCBBc3QgKE5vX2Nhc2UgcikgLT4gaGFuZGxlX2Nhc2UgdHJ1ZSByXG4gIHwgUG1hcmsgKGksIHIpIC0+IFBtYXJrIChpLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuOztcblxubW9kdWxlIEV4cG9ydCA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID0gdFxuXG4gIGxldCBwcCA9IHBwXG5cbiAgbGV0IHNlcSA9IGZ1bmN0aW9uXG4gICAgfCBbIHIgXSAtPiByXG4gICAgfCBsIC0+IFNlcXVlbmNlIGxcbiAgOztcblxuICBsZXQgY2hhciA9XG4gICAgbGV0IGYgPSBEZW5zZV9tYXAubWFrZSB+c2l6ZToyNTYgfmY6KGZ1biBpIC0+IGNzZXQgKENzZXQuY3NpbmdsZSAoQ2hhci5jaHIgaSkpKSBpblxuICAgIGZ1biBjIC0+IGYgKENoYXIuY29kZSBjKVxuICA7O1xuXG4gIGxldCBhbnkgPSBjc2V0IENzZXQuY2FueVxuXG4gIGxldCBzdHIgcyA6IHQgPVxuICAgIGxldCBsID0gcmVmIFtdIGluXG4gICAgZm9yIGkgPSBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgICBsIDo9IGNoYXIgcy5baV0gOjogIWxcbiAgICBkb25lO1xuICAgIHNlcSAhbFxuICA7O1xuXG4gIGxldCBhc19zZXRfZWxlbXMgZWxlbXMgPVxuICAgIG1hdGNoXG4gICAgICBMaXN0Lm1hcCBlbGVtcyB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTZXQgZSAtPiBlXG4gICAgICAgIHwgXyAtPiByYWlzZV9ub3RyYWNlIEV4aXQpXG4gICAgd2l0aFxuICAgIHwgZXhjZXB0aW9uIEV4aXQgLT4gTm9uZVxuICAgIHwgZSAtPiBTb21lIGVcbiAgOztcblxuICBsZXQgZW1wdHkgOiB0ID0gQXN0IGVtcHR5X2FsdGVybmF0aXZlXG5cbiAgbGV0IGFsdCAoZWxlbXMgOiB0IGxpc3QpIDogdCA9XG4gICAgbWF0Y2ggZWxlbXMgd2l0aFxuICAgIHwgW10gLT4gZW1wdHlcbiAgICB8IFsgeCBdIC0+IHhcbiAgICB8IF8gLT5cbiAgICAgIChtYXRjaCBhc19zZXRfZWxlbXMgZWxlbXMgd2l0aFxuICAgICAgIHwgTm9uZSAtPiBBc3QgKEFsdGVybmF0aXZlIGVsZW1zKVxuICAgICAgIHwgU29tZSBlbGVtcyAtPiBTZXQgKENhc3QgKEFsdGVybmF0aXZlIGVsZW1zKSkpXG4gIDs7XG5cbiAgbGV0IGVwc2lsb24gPSBzZXEgW11cblxuICBsZXQgcmVwbiByIGkgaiA9XG4gICAgaWYgaSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnJlcG5cIjtcbiAgICBtYXRjaCBqLCBpIHdpdGhcbiAgICB8IFNvbWUgaiwgXyB3aGVuIGogPCBpIC0+IGludmFsaWRfYXJnIFwiUmUucmVwblwiXG4gICAgfCBTb21lIDAsIDAgLT4gZXBzaWxvblxuICAgIHwgU29tZSAxLCAxIC0+IHJcbiAgICB8IF8gLT4gUmVwZWF0IChyLCBpLCBqKVxuICA7O1xuXG4gIGxldCByZXAgciA9IHJlcG4gciAwIE5vbmVcbiAgbGV0IHJlcDEgciA9IHJlcG4gciAxIE5vbmVcbiAgbGV0IG9wdCByID0gcmVwbiByIDAgKFNvbWUgMSlcbiAgbGV0IGJvbCA9IEJlZ19vZl9saW5lXG4gIGxldCBlb2wgPSBFbmRfb2ZfbGluZVxuICBsZXQgYm93ID0gQmVnX29mX3dvcmRcbiAgbGV0IGVvdyA9IEVuZF9vZl93b3JkXG4gIGxldCB3b3JkIHIgPSBzZXEgWyBib3c7IHI7IGVvdyBdXG4gIGxldCBub3RfYm91bmRhcnkgPSBOb3RfYm91bmRcbiAgbGV0IGJvcyA9IEJlZ19vZl9zdHJcbiAgbGV0IGVvcyA9IEVuZF9vZl9zdHJcbiAgbGV0IHdob2xlX3N0cmluZyByID0gc2VxIFsgYm9zOyByOyBlb3MgXVxuICBsZXQgbGVvbCA9IExhc3RfZW5kX29mX2xpbmVcbiAgbGV0IHN0YXJ0ID0gU3RhcnRcbiAgbGV0IHN0b3AgPSBTdG9wXG5cbiAgdHlwZSAnYiBmID0geyBmIDogJ2EuICdhIC0+ICgnYSwgJ2IpIGFzdCB9XG5cbiAgbGV0IG1ha2Vfc2V0IGYgdCA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBTZXQgeCAtPiBTZXQgKENhc3QgKGYuZiB4KSlcbiAgICB8IF8gLT4gQXN0IChmLmYgdClcbiAgOztcblxuICBsZXQgcHJlc2VydmVfc2V0IGYgdCA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBTZXQgXyAtPiB0XG4gICAgfCBfIC0+IGYgdFxuICA7O1xuXG4gIGxldCBsb25nZXN0ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW0gKGBMb25nZXN0LCB0KSlcbiAgbGV0IHNob3J0ZXN0ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW0gKGBTaG9ydGVzdCwgdCkpXG4gIGxldCBmaXJzdCA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gU2VtIChgRmlyc3QsIHQpKVxuICBsZXQgZ3JlZWR5ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW1fZ3JlZWR5IChgR3JlZWR5LCB0KSlcbiAgbGV0IG5vbl9ncmVlZHkgPSBwcmVzZXJ2ZV9zZXQgKGZ1biB0IC0+IFNlbV9ncmVlZHkgKGBOb25fZ3JlZWR5LCB0KSlcbiAgbGV0IGdyb3VwID9uYW1lIHIgPSBHcm91cCAobmFtZSwgcilcbiAgbGV0IG5vX2dyb3VwID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBOb19ncm91cCB0KVxuICBsZXQgbmVzdCByID0gTmVzdCByXG4gIGxldCBzZXQgc3RyID0gY3NldCAoQ3NldC5zZXQgc3RyKVxuXG4gIGxldCBtYXJrIHIgPVxuICAgIGxldCBpID0gUG1hcmsuZ2VuICgpIGluXG4gICAgaSwgUG1hcmsgKGksIHIpXG4gIDs7XG5cbiAgKCoqKiogQ2hhcmFjdGVyIHNldHMgKioqKilcbiAgbGV0IGFzX3NldF9vcl9lcnJvciBuYW1lIGVsZW1zID1cbiAgICBtYXRjaCBhc19zZXRfZWxlbXMgZWxlbXMgd2l0aFxuICAgIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBuYW1lXG4gICAgfCBTb21lIHMgLT4gc1xuICA7O1xuXG4gIGxldCBpbnRlciBlbGVtcyA9IFNldCAoSW50ZXJzZWN0aW9uIChhc19zZXRfb3JfZXJyb3IgXCJSZS5pbnRlclwiIGVsZW1zKSlcbiAgbGV0IGNvbXBsIGVsZW1zID0gU2V0IChDb21wbGVtZW50IChhc19zZXRfb3JfZXJyb3IgXCJSZS5jb21wbFwiIGVsZW1zKSlcblxuICBsZXQgZGlmZiByIHInID1cbiAgICBtYXRjaCByLCByJyB3aXRoXG4gICAgfCBTZXQgciwgU2V0IHInIC0+IFNldCAoRGlmZmVyZW5jZSAociwgcicpKVxuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIlJlLmRpZmZcIlxuICA7O1xuXG4gIGxldCBjYXNlID1cbiAgICBsZXQgZiA9IHsgZiA9IChmdW4gciAtPiBDYXNlIHIpIH0gaW5cbiAgICBmdW4gdCAtPiBtYWtlX3NldCBmIHRcbiAgOztcblxuICBsZXQgbm9fY2FzZSA9XG4gICAgbGV0IGYgPSB7IGYgPSAoZnVuIHIgLT4gTm9fY2FzZSByKSB9IGluXG4gICAgZnVuIHQgLT4gbWFrZV9zZXQgZiB0XG4gIDs7XG5cbiAgbGV0IHdpdG5lc3MgdCA9XG4gICAgbGV0IHJlYyB3aXRuZXNzICh0IDogbm9fY2FzZSkgPVxuICAgICAgbWF0Y2ggdCB3aXRoXG4gICAgICB8IFNldCBjIC0+IFN0cmluZy5tYWtlIDEgKENzZXQudG9fY2hhciAoQ3NldC5waWNrIGMpKVxuICAgICAgfCBTZXF1ZW5jZSB4cyAtPiBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIH5mOndpdG5lc3MgeHMpXG4gICAgICB8IEFzdCAoQWx0ZXJuYXRpdmUgKHggOjogXykpIC0+IHdpdG5lc3MgeFxuICAgICAgfCBBc3QgKEFsdGVybmF0aXZlIFtdKSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgUmVwZWF0IChyLCBmcm9tLCBfdG8pIC0+XG4gICAgICAgIGxldCB3ID0gd2l0bmVzcyByIGluXG4gICAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCB3ICogZnJvbSkgaW5cbiAgICAgICAgZm9yIF9pID0gMSB0byBmcm9tIGRvXG4gICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiB3XG4gICAgICAgIGRvbmU7XG4gICAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG4gICAgICB8IE5vX2dyb3VwIHIgLT4gd2l0bmVzcyByXG4gICAgICB8IFNlbV9ncmVlZHkgKF8sIHIpIHwgU2VtIChfLCByKSB8IE5lc3QgciB8IFBtYXJrIChfLCByKSB8IEdyb3VwIChfLCByKSAtPiB3aXRuZXNzIHJcbiAgICAgIHwgQmVnX29mX2xpbmVcbiAgICAgIHwgRW5kX29mX2xpbmVcbiAgICAgIHwgQmVnX29mX3dvcmRcbiAgICAgIHwgRW5kX29mX3dvcmRcbiAgICAgIHwgTm90X2JvdW5kXG4gICAgICB8IEJlZ19vZl9zdHJcbiAgICAgIHwgTGFzdF9lbmRfb2ZfbGluZVxuICAgICAgfCBTdGFydFxuICAgICAgfCBTdG9wXG4gICAgICB8IEVuZF9vZl9zdHIgLT4gXCJcIlxuICAgIGluXG4gICAgd2l0bmVzcyAoaGFuZGxlX2Nhc2UgZmFsc2UgdClcbiAgOztcbmVuZFxuXG5vcGVuIEV4cG9ydFxuXG5sZXQgcmVjIG1lcmdlX3NlcXVlbmNlcyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCBBc3QgKEFsdGVybmF0aXZlIGwnKSA6OiByIC0+IG1lcmdlX3NlcXVlbmNlcyAobCcgQCByKVxuICB8IFNlcXVlbmNlICh4IDo6IHkpIDo6IHIgLT5cbiAgICAobWF0Y2ggbWVyZ2Vfc2VxdWVuY2VzIHIgd2l0aFxuICAgICB8IFNlcXVlbmNlICh4JyA6OiB5JykgOjogcicgd2hlbiBlcXVhbCBDc2V0LmVxdWFsIHggeCcgLT5cbiAgICAgICBTZXF1ZW5jZSBbIHg7IEFzdCAoQWx0ZXJuYXRpdmUgWyBzZXEgeTsgc2VxIHknIF0pIF0gOjogcidcbiAgICAgfCByJyAtPiBTZXF1ZW5jZSAoeCA6OiB5KSA6OiByJylcbiAgfCB4IDo6IHIgLT4geCA6OiBtZXJnZV9zZXF1ZW5jZXMgclxuOztcblxuKCpYWFggVXNlIGEgYmV0dGVyIGFsZ29yaXRobSBhbGxvd2luZyBub24tY29udGlndW91cyByZWdpb25zPyAqKVxuXG5sZXQgY29sb3JpemUgY29sb3JfbWFwIChyZWdleHAgOiBub19jYXNlKSA9XG4gIGxldCBsbmwgPSByZWYgZmFsc2UgaW5cbiAgbGV0IHJlYyBjb2xvcml6ZSByZWdleHAgPVxuICAgIG1hdGNoIChyZWdleHAgOiBub19jYXNlKSB3aXRoXG4gICAgfCBTZXQgcyAtPiBDb2xvcl9tYXAuc3BsaXQgY29sb3JfbWFwIHNcbiAgICB8IFNlcXVlbmNlIGwgLT4gTGlzdC5pdGVyIH5mOmNvbG9yaXplIGxcbiAgICB8IEFzdCAoQWx0ZXJuYXRpdmUgbCkgLT4gTGlzdC5pdGVyIH5mOmNvbG9yaXplIGxcbiAgICB8IFJlcGVhdCAociwgXywgXykgLT4gY29sb3JpemUgclxuICAgIHwgQmVnX29mX2xpbmUgfCBFbmRfb2ZfbGluZSAtPiBDb2xvcl9tYXAuc3BsaXQgY29sb3JfbWFwIENzZXQubmxcbiAgICB8IEJlZ19vZl93b3JkIHwgRW5kX29mX3dvcmQgfCBOb3RfYm91bmQgLT4gQ29sb3JfbWFwLnNwbGl0IGNvbG9yX21hcCBDc2V0LmN3b3JkXG4gICAgfCBCZWdfb2Zfc3RyIHwgRW5kX29mX3N0ciB8IFN0YXJ0IHwgU3RvcCAtPiAoKVxuICAgIHwgTGFzdF9lbmRfb2ZfbGluZSAtPiBsbmwgOj0gdHJ1ZVxuICAgIHwgTm9fZ3JvdXAgciB8IEdyb3VwIChfLCByKSB8IE5lc3QgciB8IFBtYXJrIChfLCByKSAtPiBjb2xvcml6ZSByXG4gICAgfCBTZW0gKF8sIHIpIHwgU2VtX2dyZWVkeSAoXywgcikgLT4gY29sb3JpemUgclxuICBpblxuICBjb2xvcml6ZSByZWdleHA7XG4gICFsbmxcbjs7XG5cbmxldCByZWMgYW5jaG9yZWRfYXN0IDogKHQsIF8pIGFzdCAtPiBib29sID0gZnVuY3Rpb25cbiAgfCBBbHRlcm5hdGl2ZSBhbHMgLT4gTGlzdC5mb3JfYWxsIH5mOmFuY2hvcmVkIGFsc1xuICB8IE5vX2Nhc2UgciB8IENhc2UgciAtPiBhbmNob3JlZCByXG5cbmFuZCBhbmNob3JlZCA6IHQgLT4gYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQXN0IGEgLT4gYW5jaG9yZWRfYXN0IGFcbiAgfCBTZXF1ZW5jZSBsIC0+IExpc3QuZXhpc3RzIH5mOmFuY2hvcmVkIGxcbiAgfCBSZXBlYXQgKHIsIGksIF8pIC0+IGkgPiAwICYmIGFuY2hvcmVkIHJcbiAgfCBOb19ncm91cCByIHwgU2VtIChfLCByKSB8IFNlbV9ncmVlZHkgKF8sIHIpIHwgR3JvdXAgKF8sIHIpIHwgTmVzdCByIHwgUG1hcmsgKF8sIHIpIC0+XG4gICAgYW5jaG9yZWQgclxuICB8IFNldCBfXG4gIHwgQmVnX29mX2xpbmVcbiAgfCBFbmRfb2ZfbGluZVxuICB8IEJlZ19vZl93b3JkXG4gIHwgRW5kX29mX3dvcmRcbiAgfCBOb3RfYm91bmRcbiAgfCBFbmRfb2Zfc3RyXG4gIHwgTGFzdF9lbmRfb2ZfbGluZVxuICB8IFN0b3AgLT4gZmFsc2VcbiAgfCBCZWdfb2Zfc3RyIHwgU3RhcnQgLT4gdHJ1ZVxuOztcblxubGV0IHRfb2ZfY3NldCB4ID0gU2V0IHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw1IiwiYTIiLCJhMyIsImE0IiwiZ2xvYmFsX2RhdGEiLCJSZV9Dc2V0IiwiUmVfRHluIiwiU3RkbGliX0xpc3RMYWJlbHMiLCJSZV9QbWFyayIsIlJlX0F1dG9tYXRhIiwiUmVfRm10IiwiU3RkbGliX0Zvcm1hdCIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9PcHRpb24iLCJTdGRsaWIiLCJSZV9Db2xvcl9tYXAiLCJTdGRsaWJfU3RyaW5nIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0NoYXIiLCJSZV9EZW5zZV9tYXAiLCJjc3RfQWx0ZXJuYXRpdmUiLCJjc3RfQ2FzZSIsImNzdF9Ob19jYXNlIiwiZHluX29mX2FzdCIsInBhcmFtIiwieHMiLCJhIiwicHBfYXN0IiwiZm10IiwiYXN0IiwidmFyJCIsInMiLCJyZSIsImFsdCIsImMiLCJjc3RfQ29tcGxlbWVudCIsImNzdF9EaWZmZXJlbmNlIiwiY3N0X0ludGVyc2VjdGlvbiIsImR5bl9vZl9jc2V0IiwiY3NldCIsInkiLCJ4IiwiY3N0X0JlZ19vZl9saW5lIiwiY3N0X0JlZ19vZl9zdHIiLCJjc3RfQmVnX29mX3dvcmQiLCJjc3RfRW5kX29mX2xpbmUiLCJjc3RfRW5kX29mX3N0ciIsImNzdF9FbmRfb2Zfd29yZCIsImNzdF9Hcm91cCIsImNzdF9MYXN0X2VuZF9vZl9saW5lIiwiY3N0X05lc3QiLCJjc3RfTm9fZ3JvdXAiLCJjc3RfTm90X2JvdW5kIiwiY3N0X1BtYXJrIiwiY3N0X1JlcGVhdCIsImNzdF9TZW0iLCJjc3RfU2VtX2dyZWVkeSIsImNzdF9TZXF1ZW5jZSIsImNzdF9TZXQiLCJjc3RfU3RhcnQiLCJjc3RfU3RvcCIsImR5bl9vZl9nZW4iLCJtYXgiLCJtaW4iLCJnZW4iLCJiYXNlIiwidCIsIm5hbWUiLCJhcmdzIiwicG1hcmsiLCJzZW0iLCJyZXAiLCJwcF9nZW4iLCJwcF9jc2V0IiwicHAiLCJyZWwiLCJzdG9wIiwic3RhcnQiLCJtYXRjaCIsIm4iLCJyIiwibSIsImsiLCJzZXEiLCJiIiwiZXF1YWwiLCJ4MSIsIngyIiwiczIiLCJzMSIsImoyIiwiaTIiLCJqMSIsImkxIiwicjIiLCJtMiIsInIxIiwibTEiLCJsMiIsImwxIiwiZXEiLCJ0b19keW4iLCJoYW5kbGVfY2FzZV9jc2V0IiwiaWduX2Nhc2UiLCJsIiwiaGFuZGxlX2Nhc2UiLCJqIiwiaSIsImNoYXIiLCJhbnkiLCJzdHIiLCJhc19zZXRfZWxlbXMiLCJlbGVtcyIsImUiLCJleG4iLCJlbXB0eSIsImVwc2lsb24iLCJyZXBuIiwiY3N0X1JlX3JlcG4iLCJyZXAxIiwib3B0IiwiYm93IiwiZW93Iiwid29yZCIsImJvcyIsImVvcyIsIndob2xlX3N0cmluZyIsIm1ha2Vfc2V0IiwibG9uZ2VzdCIsInNob3J0ZXN0IiwiZmlyc3QiLCJncmVlZHkiLCJub25fZ3JlZWR5IiwiZ3JvdXAiLCJub19ncm91cCIsIm5lc3QiLCJzZXQiLCJtYXJrIiwiYXNfc2V0X29yX2Vycm9yIiwiaW50ZXIiLCJjb21wbCIsImRpZmYiLCJjYXNlJCIsIm5vX2Nhc2UiLCJ3aXRuZXNzIiwiY3N0IiwiZnJvbSIsInciLCJtZXJnZV9zZXF1ZW5jZXMiLCJjb2xvcml6ZSIsImNvbG9yX21hcCIsInJlZ2V4cCIsImxubCIsImFuY2hvcmVkIiwiYWxzIiwidF9vZl9jc2V0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURqV0oiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNDAyNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2dyb3VwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogUmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gKilcbnR5cGUgdCA9XG4gIHsgKCogSW5wdXQgc3RyaW5nLiBNYXRjaGVkIHN0cmluZ3MgYXJlIHN1YnN0cmluZ3Mgb2YgcyAqKVxuICAgIHMgOiBzdHJpbmdcbiAgICAgICgqIE1hcHBpbmcgZnJvbSBncm91cCBpbmRpY2VzIHRvIHBvc2l0aW9ucyBpbiBncG9zLiBncm91cCBpIGhhcyBwb3NpdGlvbnMgMippXG4gICAgICAgICAtIDEsIDIqaSArIDEgaW4gZ3Bvcy4gSWYgdGhlIGdyb3VwIHdhc24ndCBtYXRjaGVkLCB0aGVuIGl0cyBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgIHZhbHVlcyBpbiBtYXJrcyB3aWxsIGJlIC0xLC0xICopXG4gIDsgbWFya3MgOiBNYXJrX2luZm9zLnRcbiAgOyAoKiBNYXJrcyBwb3NpdGlvbnMuIGkuZS4gdGhvc2UgbWFya3MgY3JlYXRlZCB3aXRoIFJlLm1hcmtzICopXG4gICAgcG1hcmtzIDogUG1hcmsuU2V0LnRcbiAgOyAoKiBHcm91cCBwb3NpdGlvbnMuIEFkamFjZW50IGVsZW1lbnRzIGFyZSAoc3RhcnQsIHN0b3ApIG9mIGdyb3VwIG1hdGNoLlxuICAgICAgIGluZGV4ZWQgYnkgdGhlIHZhbHVlcyBpbiBtYXJrcy4gU28gZ3JvdXAgaSBpbiBhbiByZSB3b3VsZCBiZSB0aGUgc3Vic3RyaW5nOlxuXG4gICAgICAgc3RhcnQgPSB0Lmdwb3MuKG1hcmtzLigyKmkpKSAtIDFcbiAgICAgICBzdG9wID0gdC5ncG9zLihtYXJrcy4oMippICsgMSkpIC0gMSAqKVxuICAgIGdwb3MgOiBpbnQgYXJyYXlcbiAgOyAoKiBOdW1iZXIgb2YgZ3JvdXBzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY29udGFpbnMuIE1hdGNoZWQgb3Igbm90ICopXG4gICAgZ2NvdW50IDogaW50XG4gIH1cblxubGV0IGNyZWF0ZSBzIH5nY291bnQgfmdwb3MgbWFya3MgcG1hcmtzID0geyBzOyBnY291bnQ7IGdwb3M7IG1hcmtzOyBwbWFya3MgfVxuXG5tb2R1bGUgT2Zmc2V0ID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCBhYnNlbnQgPSAtMVxuICBsZXQgaXNfcHJlc2VudCB0ID0gdCA+PSAwXG4gIGxldCBnZXRfbm9fY2hlY2sgdCA9IHRcbmVuZFxuXG5sZXQgc3RhcnRfb2Zmc2V0IHQgaSA9XG4gIGxldCBpID0gTWFya19pbmZvcy5zdGFydF9vZmZzZXQgdC5tYXJrcyBpIGluXG4gIGlmIE1hcmtfaW5mb3MuT2Zmc2V0LmlzX3ByZXNlbnQgaVxuICB0aGVuIHQuZ3Bvcy4oTWFya19pbmZvcy5PZmZzZXQuZ2V0X25vX2NoZWNrIGkpXG4gIGVsc2UgT2Zmc2V0LmFic2VudFxuOztcblxubGV0IHN0b3Bfb2Zmc2V0IHQgaSA9XG4gIGxldCBpID0gTWFya19pbmZvcy5zdG9wX29mZnNldCB0Lm1hcmtzIGkgaW5cbiAgaWYgTWFya19pbmZvcy5PZmZzZXQuaXNfcHJlc2VudCBpXG4gIHRoZW4gdC5ncG9zLihNYXJrX2luZm9zLk9mZnNldC5nZXRfbm9fY2hlY2sgaSlcbiAgZWxzZSBPZmZzZXQuYWJzZW50XG47O1xuXG5sZXQgb2Zmc2V0X29wdCB0IGkgPVxuICBNYXJrX2luZm9zLm9mZnNldCB0Lm1hcmtzIGlcbiAgfD4gT3B0aW9uLm1hcCAoZnVuIChzdGFydCwgc3RvcCkgLT4gdC5ncG9zLihzdGFydCksIHQuZ3Bvcy4oc3RvcCkpXG47O1xuXG5sZXQgb3Jfbm90X2ZvdW5kID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IFNvbWUgcyAtPiBzXG47O1xuXG5sZXQgb2Zmc2V0IHQgaSA9IG9mZnNldF9vcHQgdCBpIHw+IG9yX25vdF9mb3VuZFxuXG5sZXQgZ2V0X29wdCB0IGkgPVxuICBvZmZzZXRfb3B0IHQgaSB8PiBPcHRpb24ubWFwIChmdW4gKHAxLCBwMikgLT4gU3RyaW5nLnN1YiB0LnMgcDEgKHAyIC0gcDEpKVxuOztcblxubGV0IHBtYXJrcyB0ID0gdC5wbWFya3NcbmxldCBnZXQgdCBpID0gZ2V0X29wdCB0IGkgfD4gb3Jfbm90X2ZvdW5kXG5sZXQgc3RhcnRfb3B0IHN1YnMgaSA9IG9mZnNldF9vcHQgc3VicyBpIHw+IE9wdGlvbi5tYXAgZnN0XG5sZXQgc3RhcnQgc3VicyBpID0gc3RhcnRfb3B0IHN1YnMgaSB8PiBvcl9ub3RfZm91bmRcbmxldCBzdG9wX29wdCBzdWJzIGkgPSBvZmZzZXRfb3B0IHN1YnMgaSB8PiBPcHRpb24ubWFwIHNuZFxubGV0IHN0b3Agc3VicyBpID0gc3RvcF9vcHQgc3VicyBpIHw+IG9yX25vdF9mb3VuZFxubGV0IHRlc3QgdCBpID0gTWFya19pbmZvcy50ZXN0IHQubWFya3MgaVxubGV0IGdldF9vcHQgdCBpID0gaWYgdGVzdCB0IGkgdGhlbiBTb21lIChnZXQgdCBpKSBlbHNlIE5vbmVcbmxldCBkdW1teV9vZmZzZXQgPSAtMSwgLTFcblxubGV0IGFsbF9vZmZzZXQgdCA9XG4gIGxldCByZXMgPSBBcnJheS5tYWtlIHQuZ2NvdW50IGR1bW15X29mZnNldCBpblxuICBNYXJrX2luZm9zLml0ZXJpIHQubWFya3MgfmY6KGZ1biBpIHN0YXJ0IHN0b3AgLT5cbiAgICBsZXQgcDEgPSB0Lmdwb3MuKHN0YXJ0KSBpblxuICAgIGxldCBwMiA9IHQuZ3Bvcy4oc3RvcCkgaW5cbiAgICByZXMuKGkpIDwtIHAxLCBwMik7XG4gIHJlc1xuOztcblxubGV0IGR1bW15X3N0cmluZyA9IFwiXCJcblxubGV0IGFsbCB0ID1cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgdC5nY291bnQgZHVtbXlfc3RyaW5nIGluXG4gIE1hcmtfaW5mb3MuaXRlcmkgdC5tYXJrcyB+ZjooZnVuIGkgc3RhcnQgc3RvcCAtPlxuICAgIGxldCBwMSA9IHQuZ3Bvcy4oc3RhcnQpIGluXG4gICAgbGV0IHAyID0gdC5ncG9zLihzdG9wKSBpblxuICAgIHJlcy4oaSkgPC0gU3RyaW5nLnN1YiB0LnMgcDEgKHAyIC0gcDEpKTtcbiAgcmVzXG47O1xuXG5sZXQgcHAgZm10IHQgPVxuICBsZXQgbWF0Y2hlcyA9XG4gICAgbGV0IG9mZnNldHMgPSBhbGxfb2Zmc2V0IHQgaW5cbiAgICBsZXQgc3RycyA9IGFsbCB0IGluXG4gICAgQXJyYXkudG9fbGlzdCAoQXJyYXkuaW5pdCAoQXJyYXkubGVuZ3RoIHN0cnMpIChmdW4gaSAtPiBzdHJzLihpKSwgb2Zmc2V0cy4oaSkpKVxuICBpblxuICBsZXQgb3BlbiBGb3JtYXQgaW5cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCBwcF9tYXRjaCBmbXQgKHN0ciwgKHN0YXJ0LCBzdG9wKSkgPSBmcHJpbnRmIGZtdCBcIkBbKCVzICglZCAlZCkpQF1cIiBzdHIgc3RhcnQgc3RvcCBpblxuICBzZXhwIGZtdCBcIkdyb3VwXCIgKGxpc3QgcHBfbWF0Y2gpIG1hdGNoZXNcbjs7XG5cbmxldCBuYl9ncm91cHMgdCA9IHQuZ2NvdW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDMiLCJmIiwiYTAiLCJhMSIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX0FycmF5IiwiUmVfRm10IiwiU3RkbGliX1N0cmluZyIsIlJlX01hcmtfaW5mb3MiLCJTdGRsaWJfT3B0aW9uIiwiU3RkbGliIiwiY3JlYXRlIiwicyIsImdjb3VudCIsImdwb3MiLCJtYXJrcyIsInBtYXJrcyIsImlzX3ByZXNlbnQiLCJ0IiwiZ2V0X25vX2NoZWNrIiwiYWJzZW50Iiwic3RhcnRfb2Zmc2V0IiwiaSIsInN0b3Bfb2Zmc2V0Iiwib2Zmc2V0X29wdCIsInBhcmFtIiwic3RvcCIsInN0YXJ0Iiwib3Jfbm90X2ZvdW5kIiwib2Zmc2V0IiwiZ2V0IiwicDIiLCJwMSIsInN0YXJ0X29wdCIsInN1YnMiLCJzdG9wX29wdCIsInRlc3QiLCJnZXRfb3B0IiwiZHVtbXlfb2Zmc2V0IiwiYWxsX29mZnNldCIsInJlcyIsImNzdCIsImFsbCIsInBwIiwiZm10Iiwib2Zmc2V0cyIsInN0cnMiLCJtYXRjaGVzIiwicHBfbWF0Y2giLCJtYXRjaCIsInN0ciIsIm5iX2dyb3VwcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQyxRQUFBQyxNQUFBQyxPQUFBQyxRQ29CMEM7QUFBQSxHQUFrQztBQUFBLFlBQUFDLFdBQUFDLEdBTXZELHNCQUFNO0FBQUEsWUFBQUMsYUFBQUQsR0FDSixTQUFDO0FBQUEsT0FBQUUsU0QzQnhCO0FBQUEsWUFBQUMsYUFBQUgsR0FBQUk7QUFBQUEsUUFBQUEsTUMrQlU7QUFBQSxJQUNMLDBDQUVFO0FBQUEsWUFEUTtBQUFBLElBQVIsdUNBQXlDO0FBQUEsR0FDNUI7QUFBQSxZQUFBQyxZQUFBTCxHQUFBSTtBQUFBQSxRQUFBQSxNQUlWO0FBQUEsSUFDTCwwQ0FFRTtBQUFBLFlBRFE7QUFBQSxJQUFSLHVDQUF5QztBQUFBLEdBQzVCO0FBQUEsWUFBQUUsV0FBQU4sR0FBQUk7QUFBQUEsUUFBQSxJQUlsQjtBQUFBLElBQ0c7QUFBQTtBQUFBLHNCQUFBRztBQUFBQTtBQUFBQSxlQUFBQyxPQUFXO0FBQUEsZUFBQUMsUUFBQTtBQUFBLG1CQUFzQztBQUFBLGNBQWhCLHVEQUFjO0FBQUEsYUFBZ0I7QUFBQTtBQUFBO0FBQUEsWUFBQUMsYUFBQUg7QUFBQUEsSUFHakQsWUFDUDtBQUFBLFFBQUFiLElBRE87QUFBQSxJQUVMO0FBQUEsR0FBQztBQUFBLFlBQUFpQixPQUFBWCxHQUFBSSxHQUdFLE9BQWMsYUFBZCxpQkFBOEI7QUFBQSxZQUFBTixPQUFBRSxHQU1oQyxZQUFRO0FBQUEsWUFBQVksSUFBQVosR0FBQUk7QUFBQUEsUUFBQSxJQUhyQjtBQUFBLElBQWtCLE9BSUs7QUFBQSxhQUpMO0FBQUE7QUFBQSx3QkFBQUc7QUFBQUEsb0JBQUFNLEtBQVcsVUFBQUMsS0FBQTtBQUFBLGdCQUFpQiwwREFBNEI7QUFBQTtBQUFBLGtCQUluQztBQUFBO0FBQUEsWUFBQUMsVUFBQUMsTUFBQVo7QUFBQUEsUUFBQSxJQUNsQjtBQUFBLElBQXFCLCtDRDlENUMsaUJDOEQwRDtBQUFBO0FBQUEsWUFBQUssTUFBQU8sTUFBQVosR0FDdkMsT0FBZ0IsYUFBaEIsbUJBQWdDO0FBQUEsWUFBQWEsU0FBQUQsTUFBQVo7QUFBQUEsUUFBQSxJQUM3QjtBQUFBLElBQXFCLCtDRGhFM0MsaUJDZ0V5RDtBQUFBO0FBQUEsWUFBQUksS0FBQVEsTUFBQVosR0FDdkMsT0FBZSxhQUFmLGtCQUErQjtBQUFBLFlBQUFjLEtBQUFsQixHQUFBSSxHQUNsQywyQ0FBeUI7QUFBQSxZQUFBZSxRQUFBbkIsR0FBQUksR0FDbkIsd0JBQW1CLGNBQW1CO0FBQUEsT0FBQWdCLGVEbkUzRDtBQUFBLFlBQUFDLFdBQUFyQjtBQUFBQSxRQUFBc0IsTUN1RVk7QUFBQSxJQUNWO0FBQUE7QUFBQTtBQUFBLGVBQUFsQixHQUFBSyxPQUFBRDtBQUFBQTtBQUFBQSxRQUFBTSxLQUNXO0FBQUEsUUFBQUQsS0FDQTtBQUFBLE9BQ1Q7QUFBQSxPQUFpQjtBQUFBO0FBQUEsSUFBQztBQUFBLEdBQ2pCO0FBQUEsT0FBQVUsTUQ1RUw7QUFBQSxZQUFBQyxJQUFBeEI7QUFBQUEsUUFBQXNCLE1Da0ZZO0FBQUEsSUFDVjtBQUFBO0FBQUE7QUFBQSxlQUFBbEIsR0FBQUssT0FBQUQ7QUFBQUE7QUFBQUEsUUFBQU0sS0FDVztBQUFBLFFBQUFELEtBQ0E7QUFBQSxZQUNFO0FBQUEsT0FBWDtBQUFBLE9BQXNDO0FBQUE7QUFBQSxJQUFDO0FBQUEsR0FDdEM7QUFBQTtBQUFBO0FBQUEsTUR2Rkw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFZLEdBQUFDLEtBQUExQjtBQUFBQTtBQUFBQSxLQUFBMkIsVUM0RmtCO0FBQUEsS0FBQUMsT0FDSDtBQUFBO0FBQUEsT0FDRztBQUFBO0FBQUE7QUFBQSxrQkFBQXhCO0FBQUFBLGNBQUEsSUFBb0Q7QUFBQSxVQUFWLCtDQUFRO0FBQUEsU0FBYTtBQUFBLEtBQUF5QixVQUE3RTtBQUFBLGFBQUFDLFNBQUFKLEtBQUFuQjtBQUFBQSxTQUFBd0IsUUFJVyxVQUFBdkIsT0FBQSxVQUFBQyxRQUFBLFVBQUF1QixNQUFBO0FBQUEsS0FBMkI7QUFBQSxzRUFBNkM7QUFBQTtBQUFBLFlBQ3BFO0FBQUEsSUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFmO0FBQUEscUJBQXVCO0FBQUE7QUFBQSxZQUFBQyxVQUFBakMsR0FHeEIsWUFBUTtBQUFBLEdEdEcxQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM0MjA1LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvc2xpY2UubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG50eXBlIHQgPVxuICB7IHMgOiBzdHJpbmdcbiAgOyBwb3MgOiBpbnRcbiAgOyBsZW4gOiBpbnRcbiAgfVxuXG5tb2R1bGUgTCA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID0gdCBsaXN0XG5cbiAgbGV0IGdldF9zdWJzdHJpbmcgc2xpY2VzIH5zdGFydCB+c3RvcCA9XG4gICAgaWYgc3RvcCA9IHN0YXJ0XG4gICAgdGhlbiBcIlwiXG4gICAgZWxzZSAoXG4gICAgICBsZXQgc2xpY2VzID1cbiAgICAgICAgbGV0IHJlYyBkcm9wIHNsaWNlcyByZW1haW5zID1cbiAgICAgICAgICBpZiByZW1haW5zID0gMFxuICAgICAgICAgIHRoZW4gc2xpY2VzXG4gICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICBtYXRjaCBzbGljZXMgd2l0aFxuICAgICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgKHsgcyA9IF87IHBvczsgbGVuIH0gYXMgc2xpY2UpIDo6IHhzIC0+XG4gICAgICAgICAgICAgIGxldCByZW1haW5zJyA9IHJlbWFpbnMgLSBsZW4gaW5cbiAgICAgICAgICAgICAgaWYgcmVtYWlucycgPj0gMFxuICAgICAgICAgICAgICB0aGVuIGRyb3AgeHMgcmVtYWlucydcbiAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgbGV0IHBvcyA9IHBvcyArIHJlbWFpbnMgaW5cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gbGVuIC0gcmVtYWlucyBpblxuICAgICAgICAgICAgICAgIHsgc2xpY2Ugd2l0aCBwb3M7IGxlbiB9IDo6IHhzKSlcbiAgICAgICAgaW5cbiAgICAgICAgZHJvcCBzbGljZXMgc3RhcnRcbiAgICAgIGluXG4gICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoc3RvcCAtIHN0YXJ0KSBpblxuICAgICAgbGV0IHJlYyB0YWtlIHNsaWNlcyByZW1haW5zID1cbiAgICAgICAgaWYgcmVtYWlucyA+IDBcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbWF0Y2ggc2xpY2VzIHdpdGhcbiAgICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgeyBzOyBwb3M7IGxlbiB9IDo6IHhzIC0+XG4gICAgICAgICAgICBsZXQgcmVtYWlucycgPSByZW1haW5zIC0gbGVuIGluXG4gICAgICAgICAgICBpZiByZW1haW5zJyA+IDBcbiAgICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgbGVuO1xuICAgICAgICAgICAgICB0YWtlIHhzIHJlbWFpbnMnKVxuICAgICAgICAgICAgZWxzZSBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgcmVtYWlucylcbiAgICAgIGluXG4gICAgICB0YWtlIHNsaWNlcyAoc3RvcCAtIHN0YXJ0KTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWYpXG4gIDs7XG5cbiAgbGV0IHJlYyBkcm9wIHQgcmVtYWlucyA9XG4gICAgaWYgcmVtYWlucyA9IDBcbiAgICB0aGVuIHRcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoeyBzID0gXzsgcG9zOyBsZW4gfSBhcyBzbGljZSkgOjogdCAtPlxuICAgICAgICBpZiByZW1haW5zID49IGxlblxuICAgICAgICB0aGVuIGRyb3AgdCAocmVtYWlucyAtIGxlbilcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgbGV0IGRlbHRhID0gbGVuIC0gcmVtYWlucyBpblxuICAgICAgICAgIHsgc2xpY2Ugd2l0aCBwb3MgPSBwb3MgKyBkZWx0YTsgbGVuID0gbGVuIC0gZGVsdGEgfSA6OiB0KSlcbiAgOztcblxuICBsZXQgZHJvcF9yZXYgdCByZW1haW5zID1cbiAgICAoKiBUT0RPIFVzZSBhIHByb3BlciBmdW5jdGlvbmFsIHF1ZXVlICopXG4gICAgaWYgcmVtYWlucyA9IDAgdGhlbiB0IGVsc2UgTGlzdC5yZXYgKGRyb3AgKExpc3QucmV2IHQpIHJlbWFpbnMpXG4gIDs7XG5lbmRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWJfTGlzdExhYmVscyIsIlN0ZGxpYl9CdWZmZXIiLCJBc3NlcnRfZmFpbHVyZSIsImNzdF9saWJfc2xpY2VfbWwiLCJnZXRfc3Vic3RyaW5nIiwic2xpY2VzIiwicmVtYWlucyIsInN0b3AiLCJzbGljZSIsImxlbiIsInBvcyIsImJ1ZiIsIm1hdGNoIiwicyIsImRyb3BfcmV2IiwidCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxjQUFBQyxRQUFBQyxTQUFBQztBQUFBQTtBQUFBQTtBQUFBQSxLQ1lPLDJDQUNFO0FBQUEsU0FBQUYsV0FEVSxRQUFBQyxZQUFBO0FBQUE7QUFBQSxNQUtOLDhDQUFBRCxXQUFXO0FBQUEsTUFFVDtBQUFBLE9BRUs7QUFBQTtBQUFBLE9BQUFBLFdBRkw7QUFBQSxPQUFBRyxRQUFBO0FBQUEsT0FBQUMsTUFBQTtBQUFBLE9BQUFDLE1BQUE7QUFBQSxPQUFBSixZQUlEO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBQUksUUFFSztBQUFBLE1BQUFELFFBRUg7QUFBQSxNQUFBSixXQUNBO0FBQUE7QUFBQTtBQUFBLEtBQUFNLE1BSUE7QUFBQSxLQUFBTCxZQWNWO0FBQUEsS0FBQUQsV0FBQTtBQUFBLEtBQUFDLFlBQUE7QUFBQTtBQUFBLEtBWks7QUFBQSxNQUNFO0FBQUEsT0FFSztBQUFBO0FBQUEsT0FBQUQsV0FGTDtBQUFBLE9BQUFPLFFBQUE7QUFBQSxPQUFBSCxRQUFBO0FBQUEsT0FBQUMsUUFBQTtBQUFBLE9BQUFHLElBQUE7QUFBQSxPQUFBUCxZQUlEO0FBQUEsTUFDRztBQUFBLE9BRUQ7QUFBQSxPQUFrQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BRS9CO0FBQUE7QUFBQSxLQUVlLHVDQUNOO0FBQUE7QUFBQTtBQUFBLFlBQUFRLFNBQUFDLEtBQUFUO0FBQUFBLElBbUJuQiwwQ0FBaUI7QUFBQTtBQUFBLEtBQUFTLE1BQXNCO0FBQUEsS0FBQUEsSUFBTjtBQUFBLEtBQUFULFVBQUE7QUFBQTtBQUFBLEtBZmpDO0FBQUEsY0FBVztBQUFBO0FBQUEsVUFBQVMsTUFFVCxNQUFBUCxRQUFBLE1BQUFDLE1BQUEsVUFBQUMsTUFBQTtBQUFBLE1BSUQ7QUFBQSxXQUFBSixZQUNLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFVLFFBQ0E7QUFBQSxXQUVIO0FBQUE7QUFBQTtBQUFBLGNBTkk7QUFBQSxLQVdxRDtBQUFBO0FBQUE7QUFBQSxHRG5FbkUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNDMwNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2NvbXBpbGUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJvcGVuIEltcG9ydFxuXG5sZXQgcmVjIGl0ZXIgbiBmIHYgPSBpZiBJbnQuZXF1YWwgbiAwIHRoZW4gdiBlbHNlIGl0ZXIgKG4gLSAxKSBmIChmIHYpXG5cbm1vZHVsZSBJZHggOiBzaWdcbiAgdHlwZSB0IFtAQGltbWVkaWF0ZV1cblxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIG1ha2VfYnJlYWsgOiBBdXRvbWF0YS5JZHgudCAtPiB0XG4gIHZhbCBvZl9pZHggOiBBdXRvbWF0YS5JZHgudCAtPiB0XG4gIHZhbCBpc19pZHggOiB0IC0+IGJvb2xcbiAgdmFsIGlzX2JyZWFrIDogdCAtPiBib29sXG4gIHZhbCBpc191bmtub3duIDogdCAtPiBib29sXG4gIHZhbCBpZHggOiB0IC0+IGludFxuICB2YWwgYnJlYWtfaWR4IDogdCAtPiBpbnRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdW5rbm93biA9IC0yXG4gIGxldCBicmVhayA9IC0zXG4gIGxldCBvZl9pZHggKHggOiBBdXRvbWF0YS5JZHgudCkgPSBBdXRvbWF0YS5JZHgudG9faW50IHggW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGlzX2lkeCB0ID0gdCA+PSAwIFtAQGlubGluZSBhbHdheXNdXG4gIGxldCBpc19icmVhayB4ID0geCA8PSBicmVhayBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgaXNfdW5rbm93biB4ID0geCA9IHVua25vd24gW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGlkeCB0ID0gdCBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgbWFrZV9icmVhayAoaWR4IDogQXV0b21hdGEuSWR4LnQpID0gLTUgLSBBdXRvbWF0YS5JZHgudG9faW50IGlkeCBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgYnJlYWtfaWR4IHQgPSAodCArIDUpICogLTEgW0BAaW5saW5lIGFsd2F5c11cbmVuZFxuXG50eXBlIG1hdGNoX2luZm8gPVxuICB8IE1hdGNoIG9mIEdyb3VwLnRcbiAgfCBGYWlsZWRcbiAgfCBSdW5uaW5nIG9mIHsgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSA6IGludCB9XG5cbnR5cGUgc3RhdGVfaW5mbyA9XG4gIHsgaWR4IDogSWR4LnRcbiAgOyAoKiBJbmRleCBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcG9zaXRpb24gdGFibGUuXG4gICAgICAgTm90IHlldCBjb21wdXRlZCB0cmFuc2l0aW9ucyBwb2ludCB0byBhIGR1bW15IHN0YXRlIHdoZXJlXG4gICAgICAgW2lkeF0gaXMgc2V0IHRvIFt1bmtub3duXTtcbiAgICAgICBJZiBbaWR4XSBpcyBzZXQgdG8gW2JyZWFrXSBmb3Igc3RhdGVzIHRoYXQgZWl0aGVyIGFsd2F5c1xuICAgICAgIHN1Y2NlZWQgb3IgYWx3YXlzIGZhaWwuICopXG4gICAgbXV0YWJsZSBmaW5hbCA6IChDYXRlZ29yeS50ICogKEF1dG9tYXRhLklkeC50ICogQXV0b21hdGEuU3RhdHVzLnQpKSBsaXN0XG4gIDsgKCogTWFwcGluZyBmcm9tIHRoZSBjYXRlZ29yeSBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG9cbiAgICAgICAtIHRoZSBpbmRleCB3aGVyZSB0aGUgbmV4dCBwb3NpdGlvbiBzaG91bGQgYmUgc2F2ZWRcbiAgICAgICAtIHBvc3NpYmx5LCB0aGUgbGlzdCBvZiBtYXJrcyAoYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGljZXMpXG4gICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBiZXN0IG1hdGNoICopXG4gICAgZGVzYyA6IEF1dG9tYXRhLlN0YXRlLnQgKCogRGVzY3JpcHRpb24gb2YgdGhpcyBzdGF0ZSBvZiB0aGUgYXV0b21hdGEgKilcbiAgfVxuXG4oKiBUaHJlYWQtc2FmZXR5OiB3ZSB1c2UgZG91YmxlLWNoZWNrZWQgbG9ja2luZyB0byBhY2Nlc3MgZmllbGQgW2ZpbmFsXS4gKilcblxuKCogQSBzdGF0ZSBbdF0gaXMgYSBwYWlyIGNvbXBvc2VkIG9mIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG4gICBzdGF0ZSBbc3RhdGVfaW5mb10gYW5kIGEgdHJhbnNpdGlvbiB0YWJsZSBbdCBhcnJheV0sIGluZGV4ZWQgYnlcbiAgIGNvbG9yLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29uLCB0byBhdm9pZCBhbiBpbmRpcmVjdGlvbiwgd2UgbWFudWFsbHlcbiAgIHVuYm94IHRoZSB0cmFuc2l0aW9uIHRhYmxlOiB3ZSBhbGxvY2F0ZSBhIHNpbmdsZSBhcnJheSwgd2l0aCB0aGVcbiAgIHN0YXRlIGluZm9ybWF0aW9uIGF0IGluZGV4IDAsIGZvbGxvd2VkIGJ5IHRoZSB0cmFuc2l0aW9ucy4gKilcbm1vZHVsZSBTdGF0ZSA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgbWFrZSA6IG5jb2w6aW50IC0+IHN0YXRlX2luZm8gLT4gdFxuICB2YWwgbWFrZV9icmVhayA6IHN0YXRlX2luZm8gLT4gdFxuICB2YWwgZ2V0X2luZm8gOiB0IC0+IHN0YXRlX2luZm9cbiAgdmFsIGZvbGxvd190cmFuc2l0aW9uIDogdCAtPiBjb2xvcjpDc2V0LmMgLT4gdFxuICB2YWwgc2V0X3RyYW5zaXRpb24gOiB0IC0+IGNvbG9yOkNzZXQuYyAtPiB0IC0+IHVuaXRcbiAgdmFsIGlzX3Vua25vd25fdHJhbnNpdGlvbiA6IHQgLT4gY29sb3I6Q3NldC5jIC0+IGJvb2xcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBUYWJsZSBvZiB0IGFycmF5IFtAQHVuYm94ZWRdXG5cbiAgKCogVGhyZWFkLXNhZmV0eTpcbiAgICAgV2Ugc3RvcmUgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGF0IGluZGV4IDAuIEZvciBvdGhlciBlbGVtZW50c1xuICAgICBvZiB0aGUgdHJhbnNpdGlvbiB0YWJsZSwgd2hpY2ggYXJlIGxhemlseSBjb21wdXRlZCwgd2UgdXNlXG4gICAgIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcuICopXG5cbiAgbGV0IGdldF9pbmZvIChUYWJsZSBzdCkgOiBzdGF0ZV9pbmZvID0gT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IHN0IDApXG4gIFtAQGlubGluZSBhbHdheXNdXG4gIDs7XG5cbiAgbGV0IHNldF9pbmZvIChUYWJsZSBzdCkgKGluZm8gOiBzdGF0ZV9pbmZvKSA9IHN0LigwKSA8LSBPYmoubWFnaWMgaW5mb1xuXG4gIGxldCBmb2xsb3dfdHJhbnNpdGlvbiAoVGFibGUgc3QpIH5jb2xvciA9IEFycmF5LnVuc2FmZV9nZXQgc3QgKDEgKyBDc2V0LnRvX2ludCBjb2xvcilcbiAgW0BAaW5saW5lIGFsd2F5c11cbiAgOztcblxuICBsZXQgc2V0X3RyYW5zaXRpb24gKFRhYmxlIHN0KSB+Y29sb3Igc3QnID0gc3QuKDEgKyBDc2V0LnRvX2ludCBjb2xvcikgPC0gc3QnXG5cbiAgbGV0IGlzX3Vua25vd25fdHJhbnNpdGlvbiBzdCB+Y29sb3IgPVxuICAgIGxldCBzdCcgPSBmb2xsb3dfdHJhbnNpdGlvbiBzdCB+Y29sb3IgaW5cbiAgICBsZXQgaW5mbyA9IGdldF9pbmZvIHN0JyBpblxuICAgIElkeC5pc191bmtub3duIGluZm8uaWR4XG4gIDs7XG5cbiAgbGV0IGR1bW15IChpbmZvIDogc3RhdGVfaW5mbykgPSBUYWJsZSBbfCBPYmoubWFnaWMgaW5mbyB8XVxuICBsZXQgdW5rbm93bl9zdGF0ZSA9IGR1bW15IHsgaWR4ID0gSWR4LnVua25vd247IGZpbmFsID0gW107IGRlc2MgPSBBdXRvbWF0YS5TdGF0ZS5kdW1teSB9XG5cbiAgbGV0IG1ha2Ugfm5jb2wgc3RhdGUgPVxuICAgIGxldCBzdCA9IFRhYmxlIChBcnJheS5tYWtlIChuY29sICsgMSkgdW5rbm93bl9zdGF0ZSkgaW5cbiAgICBzZXRfaW5mbyBzdCBzdGF0ZTtcbiAgICBzdFxuICA7O1xuXG4gIGxldCBtYWtlX2JyZWFrIHN0YXRlID0gVGFibGUgW3wgT2JqLm1hZ2ljIHN0YXRlIHxdXG5lbmRcblxuKCogQXV0b21hdGEgKGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbikgKilcbnR5cGUgcmUgPVxuICB7IGluaXRpYWwgOiBBdXRvbWF0YS5leHByXG4gIDsgKCogVGhlIHdob2xlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zdGF0ZXMgOiAoQ2F0ZWdvcnkudCAqIFN0YXRlLnQpIGxpc3RcbiAgOyAoKiBJbml0aWFsIHN0YXRlcywgaW5kZXhlZCBieSBpbml0aWFsIGNhdGVnb3J5ICopXG4gICAgY29sb3JzIDogQ29sb3JfbWFwLlRhYmxlLnRcbiAgOyAoKiBDb2xvciB0YWJsZSAqKVxuICAgIGNvbG9yX3JlcHIgOiBDb2xvcl9tYXAuUmVwci50XG4gIDsgKCogVGFibGUgZnJvbSBjb2xvcnMgdG8gb25lIGNoYXJhY3RlciBvZiB0aGlzIGNvbG9yICopXG4gICAgbmNvbG9yIDogaW50XG4gIDsgKCogTnVtYmVyIG9mIGNvbG9ycy4gKilcbiAgICBsbmwgOiBDc2V0LmNcbiAgOyAoKiBDb2xvciBvZiB0aGUgbGFzdCBuZXdsaW5lLiBbQ3NldC5udWxsX2NoYXJdIGlmIHVubmVjZXNzYXJ5ICopXG4gICAgdGJsIDogQXV0b21hdGEuV29ya2luZ19hcmVhLnRcbiAgOyAoKiBUZW1wb3JhcnkgdGFibGUgdXNlZCB0byBjb21wdXRlIHRoZSBmaXJzdCBhdmFpbGFibGUgaW5kZXhcbiAgICAgICB3aGVuIGNvbXB1dGluZyBhIG5ldyBzdGF0ZSAqKVxuICAgIHN0YXRlcyA6IFN0YXRlLnQgQXV0b21hdGEuU3RhdGUuVGFibGUudFxuICA7ICgqIFN0YXRlcyBvZiB0aGUgZGV0ZXJtaW5pc3RpYyBhdXRvbWF0YSAqKVxuICAgIGdyb3VwX25hbWVzIDogKHN0cmluZyAqIGludCkgbGlzdFxuICA7ICgqIE5hbWVkIGdyb3VwcyBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uICopXG4gICAgZ3JvdXBfY291bnQgOiBpbnRcbiAgOyAoKiBOdW1iZXIgb2YgZ3JvdXBzIGluIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKilcbiAgICBtdXRleCA6IE11dGV4LnRcbiAgfVxuXG4oKiBUaHJlYWQtc2FmZXR5OlxuICAgV2UgdXNlIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcgdG8gYWNjZXNzIGZpZWxkIFtpbml0aWFsX3N0YXRlc10uIFRoZVxuICAgc3RhdGUgdGFibGUgW3N0YXRlc10gYW5kIHRoZSB3b3JraW5nIGFyZWEgW3RibF0gYXJlIG9ubHkgYWNjZXNzZWRcbiAgIHdpdGggdGhlIG11dGV4IFttdXRleF0gbG9ja2VkLlxuICAgVGhlIHdvcmtpbmcgYXJlYSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgdGhyZWFkcy4gVGhpcyBtaWdodCBiZVxuICAgaW5lZmZpY2llbnQgaWYgbWFueSB0aHJlYWRzIGFyZSB1cGRhdGluZyB0aGUgYXV0b21hdG9uLiBJdCBzZWVtc1xuICAgY29tcGxpY2F0ZWQgdG8gbWFuYWdlIGEgd29ya2luZyBhcmVhIHBlciBkb21haW4gYW5kIHBlciByZWd1bGFyXG4gICBleHByZXNzaW9uLiBTbywgaWYgdGhpcyBiZWNvbWVzIGFuIGlzc3VlLCBpdCBtaWdodCBqdXN0IGJlIHNpbXBsZXJcbiAgIHRvIGFsbG9jYXRlIGEgZnJlc2ggd29ya2luZyBhcmVhIHdoZW5ldmVyIG5lZWRlZC5cbiopXG5cbmxldCBwcF9yZSBjaCByZSA9IEF1dG9tYXRhLnBwIGNoIHJlLmluaXRpYWxcbmxldCBncm91cF9jb3VudCByZSA9IHJlLmdyb3VwX2NvdW50XG5sZXQgZ3JvdXBfbmFtZXMgcmUgPSByZS5ncm91cF9uYW1lc1xuXG5tb2R1bGUgUG9zaXRpb25zID0gc3RydWN0XG4gICgqIEluZm9ybWF0aW9uIHVzZWQgZHVyaW5nIG1hdGNoaW5nICopXG4gIHR5cGUgdCA9XG4gICAgeyBtdXRhYmxlIHBvc2l0aW9ucyA6IGludCBhcnJheVxuICAgIDsgKCogQXJyYXkgb2YgbWFyayBwb3NpdGlvbnNcbiAgICAgICAgIFRoZSBtYXJrIGFyZSBvZmYgYnkgb25lIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICopXG4gICAgICBtdXRhYmxlIGxlbmd0aCA6IGludFxuICAgIH1cblxuICBsZXQgZW1wdHkgPSB7IHBvc2l0aW9ucyA9IFt8fF07IGxlbmd0aCA9IDAgfVxuICBsZXQgbGVuZ3RoIHQgPSB0Lmxlbmd0aFxuICBsZXQgdW5zYWZlX3NldCB0IGlkeCBwb3MgPSBBcnJheS51bnNhZmVfc2V0IHQucG9zaXRpb25zIGlkeCBwb3NcblxuICBsZXQgcmVjIHJlc2l6ZSBpZHggdCA9XG4gICAgdC5sZW5ndGggPC0gMiAqIHQubGVuZ3RoO1xuICAgIGlmIGlkeCA+PSB0Lmxlbmd0aFxuICAgIHRoZW4gcmVzaXplIGlkeCB0XG4gICAgZWxzZSAoXG4gICAgICBsZXQgcG9zID0gdC5wb3NpdGlvbnMgaW5cbiAgICAgIHQucG9zaXRpb25zIDwtIEFycmF5Lm1ha2UgdC5sZW5ndGggMDtcbiAgICAgIEFycmF5LmJsaXQgcG9zIDAgdC5wb3NpdGlvbnMgMCAoQXJyYXkubGVuZ3RoIHBvcykpXG4gIDs7XG5cbiAgbGV0IHNldCB0IGlkeCBwb3MgPVxuICAgIGlmIGlkeCA+PSBsZW5ndGggdCB0aGVuIHJlc2l6ZSBpZHggdDtcbiAgICB1bnNhZmVfc2V0IHQgaWR4IHBvc1xuICA7O1xuXG4gIGxldCBhbGwgdCA9IHQucG9zaXRpb25zXG4gIGxldCBmaXJzdCB0ID0gdC5wb3NpdGlvbnMuKDApXG5cbiAgbGV0IG1ha2Ugfmdyb3VwcyByZSA9XG4gICAgaWYgZ3JvdXBzXG4gICAgdGhlbiAoXG4gICAgICAoKiBXZSBpbml0aWFsaXplIHRoaXMgdGFibGUgd2l0aCBhIHJlYXNvbmFibGUgc2l6ZS4gVGhlIHJlcXVpcmVkXG4gICAgICAgICBzaXplIG1heSBjaGFuZ2Ugd2hlbiB0aGUgYXV0b21hdG9uIGdldHMgdXBkYXRlZC4gU28gd2UgYXJlXG4gICAgICAgICBhbHdheXMgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBsYXJnZSBlbm91Z2ggYmVmb3JlIG1vZGlmeWluZyBpdC4gKilcbiAgICAgIGxldCBsZW5ndGggPSBBdXRvbWF0YS5Xb3JraW5nX2FyZWEuaW5kZXhfY291bnQgcmUudGJsICsgMSBpblxuICAgICAgeyBwb3NpdGlvbnMgPSBBcnJheS5tYWtlIGxlbmd0aCAwOyBsZW5ndGggfSlcbiAgICBlbHNlIGVtcHR5XG4gIDs7XG5lbmRcblxuKCoqKiopXG5cbmxldCBjYXRlZ29yeSByZSB+Y29sb3IgPVxuICBpZiBDc2V0LmVxdWFsX2MgY29sb3IgQ3NldC5udWxsX2NoYXJcbiAgdGhlbiBDYXRlZ29yeS5pbmV4aXN0YW50ICgqIFNwZWNpYWwgY2F0ZWdvcnkgZm9yIHRoZSBsYXN0IG5ld2xpbmUgKilcbiAgZWxzZSBpZiBDc2V0LmVxdWFsX2MgY29sb3IgcmUubG5sXG4gIHRoZW4gQ2F0ZWdvcnkuKGxhc3RuZXdsaW5lICsrIG5ld2xpbmUgKysgbm90X2xldHRlcilcbiAgZWxzZSBDYXRlZ29yeS5mcm9tX2NoYXIgKENvbG9yX21hcC5SZXByLnJlcHIgcmUuY29sb3JfcmVwciBjb2xvcilcbjs7XG5cbigqKioqKVxuXG5sZXQgZmluZF9zdGF0ZSByZSBkZXNjID1cbiAgdHJ5IEF1dG9tYXRhLlN0YXRlLlRhYmxlLmZpbmQgcmUuc3RhdGVzIGRlc2Mgd2l0aFxuICB8IE5vdF9mb3VuZCAtPlxuICAgIGxldCBzdCA9XG4gICAgICBsZXQgYnJlYWtfc3RhdGUgPVxuICAgICAgICBtYXRjaCBBdXRvbWF0YS5TdGF0ZS5zdGF0dXNfbm9fbXV0ZXggZGVzYyB3aXRoXG4gICAgICAgIHwgUnVubmluZyAtPiBmYWxzZVxuICAgICAgICB8IEZhaWxlZCB8IE1hdGNoIF8gLT4gdHJ1ZVxuICAgICAgaW5cbiAgICAgIGxldCBzdCA9XG4gICAgICAgIHsgaWR4ID1cbiAgICAgICAgICAgIChsZXQgaWR4ID0gQXV0b21hdGEuU3RhdGUuaWR4IGRlc2MgaW5cbiAgICAgICAgICAgICBpZiBicmVha19zdGF0ZSB0aGVuIElkeC5tYWtlX2JyZWFrIGlkeCBlbHNlIElkeC5vZl9pZHggaWR4KVxuICAgICAgICA7IGZpbmFsID0gW11cbiAgICAgICAgOyBkZXNjXG4gICAgICAgIH1cbiAgICAgIGluXG4gICAgICBpZiBicmVha19zdGF0ZSB0aGVuIFN0YXRlLm1ha2VfYnJlYWsgc3QgZWxzZSBTdGF0ZS5tYWtlIH5uY29sOnJlLm5jb2xvciBzdFxuICAgIGluXG4gICAgQXV0b21hdGEuU3RhdGUuVGFibGUuYWRkIHJlLnN0YXRlcyBkZXNjIHN0O1xuICAgIHN0XG47O1xuXG4oKioqKiBNYXRjaCB3aXRoIG1hcmtzICoqKiopXG5cbmxldCBkZWx0YSByZSBjYXQgfmNvbG9yIHN0ID0gQXV0b21hdGEuZGVsdGEgcmUudGJsIGNhdCBjb2xvciBzdC5kZXNjXG5cbmxldCB2YWxpZGF0ZSByZSAocyA6IHN0cmluZykgfnBvcyBzdCA9XG4gIGxldCBjb2xvciA9IENvbG9yX21hcC5UYWJsZS5nZXQgcmUuY29sb3JzIHMuW3Bvc10gaW5cbiAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgaWYgU3RhdGUuaXNfdW5rbm93bl90cmFuc2l0aW9uIHN0IH5jb2xvclxuICB0aGVuIChcbiAgICBsZXQgc3QnID1cbiAgICAgIGxldCBkZXNjJyA9XG4gICAgICAgIGxldCBjYXQgPSBjYXRlZ29yeSByZSB+Y29sb3IgaW5cbiAgICAgICAgZGVsdGEgcmUgY2F0IH5jb2xvciAoU3RhdGUuZ2V0X2luZm8gc3QpXG4gICAgICBpblxuICAgICAgZmluZF9zdGF0ZSByZSBkZXNjJ1xuICAgIGluXG4gICAgU3RhdGUuc2V0X3RyYW5zaXRpb24gc3QgfmNvbG9yIHN0Jyk7XG4gIE11dGV4LnVubG9jayByZS5tdXRleFxuOztcblxubGV0IG5leHQgY29sb3JzIHN0IHMgcG9zID1cbiAgU3RhdGUuZm9sbG93X3RyYW5zaXRpb24gc3QgfmNvbG9yOihDb2xvcl9tYXAuVGFibGUuZ2V0IGNvbG9ycyAoU3RyaW5nLnVuc2FmZV9nZXQgcyBwb3MpKVxuOztcblxubGV0IHJlYyBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0ID1cbiAgaWYgcG9zIDwgbGFzdFxuICB0aGVuIChcbiAgICBsZXQgc3QnID0gbmV4dCBjb2xvcnMgc3QgcyBwb3MgaW5cbiAgICBsZXQgaWR4ID0gKFN0YXRlLmdldF9pbmZvIHN0JykuaWR4IGluXG4gICAgaWYgSWR4LmlzX2lkeCBpZHhcbiAgICB0aGVuXG4gICAgICBpZiBJZHguaWR4IGlkeCA8IFBvc2l0aW9ucy5sZW5ndGggcG9zaXRpb25zXG4gICAgICB0aGVuIChcbiAgICAgICAgUG9zaXRpb25zLnVuc2FmZV9zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgcG9zO1xuICAgICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCcpXG4gICAgICBlbHNlIChcbiAgICAgICAgKCogUmVzaXplIHBvc2l0aW9uIGFycmF5ICopXG4gICAgICAgIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgcG9zO1xuICAgICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCcpXG4gICAgZWxzZSBpZiBJZHguaXNfYnJlYWsgaWR4XG4gICAgdGhlbiAoXG4gICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmJyZWFrX2lkeCBpZHgpIHBvcztcbiAgICAgIHN0JylcbiAgICBlbHNlIChcbiAgICAgICgqIFVua25vd24gKilcbiAgICAgIHZhbGlkYXRlIHJlIHMgfnBvcyBzdDA7XG4gICAgICBsb29wIHJlIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0MCkpXG4gIGVsc2Ugc3Rcbjs7XG5cbmxldCByZWMgbG9vcF9ub19tYXJrIHJlIH5jb2xvcnMgcyB+cG9zIH5sYXN0IHN0MCBzdCA9XG4gIGlmIHBvcyA8IGxhc3RcbiAgdGhlbiAoXG4gICAgbGV0IHN0JyA9IG5leHQgY29sb3JzIHN0IHMgcG9zIGluXG4gICAgbGV0IGlkeCA9IChTdGF0ZS5nZXRfaW5mbyBzdCcpLmlkeCBpblxuICAgIGlmIElkeC5pc19pZHggaWR4XG4gICAgdGhlbiBsb29wX25vX21hcmsgcmUgfmNvbG9ycyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCdcbiAgICBlbHNlIGlmIElkeC5pc19icmVhayBpZHhcbiAgICB0aGVuIHN0J1xuICAgIGVsc2UgKFxuICAgICAgKCogVW5rbm93biAqKVxuICAgICAgdmFsaWRhdGUgcmUgcyB+cG9zIHN0MDtcbiAgICAgIGxvb3Bfbm9fbWFyayByZSB+Y29sb3JzIHMgfnBvcyB+bGFzdCBzdDAgc3QwKSlcbiAgZWxzZSBzdFxuOztcblxubGV0IGZpbmFsIHJlIHN0IGNhdCA9XG4gIHRyeSBMaXN0LmFzc3EgY2F0IHN0LmZpbmFsIHdpdGhcbiAgfCBOb3RfZm91bmQgLT5cbiAgICBNdXRleC5sb2NrIHJlLm11dGV4O1xuICAgIGxldCByZXMgPVxuICAgICAgdHJ5IExpc3QuYXNzcSBjYXQgc3QuZmluYWwgd2l0aFxuICAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IHN0JyA9IGRlbHRhIHJlIGNhdCB+Y29sb3I6Q3NldC5udWxsX2NoYXIgc3QgaW5cbiAgICAgICAgbGV0IHJlcyA9IEF1dG9tYXRhLlN0YXRlLmlkeCBzdCcsIEF1dG9tYXRhLlN0YXRlLnN0YXR1c19ub19tdXRleCBzdCcgaW5cbiAgICAgICAgc3QuZmluYWwgPC0gKGNhdCwgcmVzKSA6OiBzdC5maW5hbDtcbiAgICAgICAgcmVzXG4gICAgaW5cbiAgICBNdXRleC51bmxvY2sgcmUubXV0ZXg7XG4gICAgcmVzXG47O1xuXG5sZXQgZmluZF9pbml0aWFsX3N0YXRlIHJlIGNhdCA9XG4gIHRyeSBMaXN0LmFzc3EgY2F0IHJlLmluaXRpYWxfc3RhdGVzIHdpdGhcbiAgfCBOb3RfZm91bmQgLT5cbiAgICBNdXRleC5sb2NrIHJlLm11dGV4O1xuICAgIGxldCByZXMgPVxuICAgICAgdHJ5IExpc3QuYXNzcSBjYXQgcmUuaW5pdGlhbF9zdGF0ZXMgd2l0aFxuICAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IHN0ID0gZmluZF9zdGF0ZSByZSAoQXV0b21hdGEuU3RhdGUuY3JlYXRlIGNhdCByZS5pbml0aWFsKSBpblxuICAgICAgICByZS5pbml0aWFsX3N0YXRlcyA8LSAoY2F0LCBzdCkgOjogcmUuaW5pdGlhbF9zdGF0ZXM7XG4gICAgICAgIHN0XG4gICAgaW5cbiAgICBNdXRleC51bmxvY2sgcmUubXV0ZXg7XG4gICAgcmVzXG47O1xuXG5sZXQgZ2V0X2NvbG9yIHJlIChzIDogc3RyaW5nKSBwb3MgPVxuICBpZiBwb3MgPCAwXG4gIHRoZW4gQ3NldC5udWxsX2NoYXJcbiAgZWxzZSAoXG4gICAgbGV0IHNsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBpZiBwb3MgPj0gc2xlblxuICAgIHRoZW4gQ3NldC5udWxsX2NoYXJcbiAgICBlbHNlIGlmIHBvcyA9IHNsZW4gLSAxXG4gICAgICAgICAgICAmJiAobm90IChDc2V0LmVxdWFsX2MgcmUubG5sIENzZXQubnVsbF9jaGFyKSlcbiAgICAgICAgICAgICYmIENoYXIuZXF1YWwgKFN0cmluZy51bnNhZmVfZ2V0IHMgcG9zKSAnXFxuJ1xuICAgIHRoZW4gKCogU3BlY2lhbCBjYXNlIGZvciB0aGUgbGFzdCBuZXdsaW5lICopXG4gICAgICByZS5sbmxcbiAgICBlbHNlIENvbG9yX21hcC5UYWJsZS5nZXQgcmUuY29sb3JzIChTdHJpbmcudW5zYWZlX2dldCBzIHBvcykpXG47O1xuXG5sZXQgcmVjIGhhbmRsZV9sYXN0X25ld2xpbmUgcmUgcG9zaXRpb25zIH5wb3Mgc3Qgfmdyb3VwcyA9XG4gIGxldCBzdCcgPSBTdGF0ZS5mb2xsb3dfdHJhbnNpdGlvbiBzdCB+Y29sb3I6cmUubG5sIGluXG4gIGxldCBpbmZvID0gU3RhdGUuZ2V0X2luZm8gc3QnIGluXG4gIGlmIElkeC5pc19pZHggaW5mby5pZHhcbiAgdGhlbiAoXG4gICAgaWYgZ3JvdXBzIHRoZW4gUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKElkeC5pZHggaW5mby5pZHgpIHBvcztcbiAgICBzdCcpXG4gIGVsc2UgaWYgSWR4LmlzX2JyZWFrIGluZm8uaWR4XG4gIHRoZW4gKFxuICAgIGlmIGdyb3VwcyB0aGVuIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguYnJlYWtfaWR4IGluZm8uaWR4KSBwb3M7XG4gICAgc3QnKVxuICBlbHNlIChcbiAgICAoKiBVbmtub3duICopXG4gICAgbGV0IGNvbG9yID0gcmUubG5sIGluXG4gICAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgICBpZiBTdGF0ZS5pc191bmtub3duX3RyYW5zaXRpb24gc3QgfmNvbG9yXG4gICAgdGhlbiAoXG4gICAgICBsZXQgc3QnID1cbiAgICAgICAgbGV0IGRlc2MgPVxuICAgICAgICAgIGxldCBjYXQgPSBjYXRlZ29yeSByZSB+Y29sb3IgaW5cbiAgICAgICAgICBsZXQgcmVhbF9jID0gQ29sb3JfbWFwLlRhYmxlLmdldCByZS5jb2xvcnMgJ1xcbicgaW5cbiAgICAgICAgICBkZWx0YSByZSBjYXQgfmNvbG9yOnJlYWxfYyAoU3RhdGUuZ2V0X2luZm8gc3QpXG4gICAgICAgIGluXG4gICAgICAgIGZpbmRfc3RhdGUgcmUgZGVzY1xuICAgICAgaW5cbiAgICAgIFN0YXRlLnNldF90cmFuc2l0aW9uIHN0IH5jb2xvciBzdCcpO1xuICAgIE11dGV4LnVubG9jayByZS5tdXRleDtcbiAgICBoYW5kbGVfbGFzdF9uZXdsaW5lIHJlIHBvc2l0aW9ucyB+cG9zIHN0IH5ncm91cHMpXG47O1xuXG5sZXQgcmVjIHNjYW5fc3RyIHJlIHBvc2l0aW9ucyAocyA6IHN0cmluZykgaW5pdGlhbF9zdGF0ZSB+bGFzdCB+cG9zIH5ncm91cHMgPVxuICBpZiBsYXN0ID0gU3RyaW5nLmxlbmd0aCBzXG4gICAgICYmIChub3QgKENzZXQuZXF1YWxfYyByZS5sbmwgQ3NldC5udWxsX2NoYXIpKVxuICAgICAmJiBsYXN0ID4gcG9zXG4gICAgICYmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgcyAobGFzdCAtIDEpKSAnXFxuJ1xuICB0aGVuIChcbiAgICBsZXQgbGFzdCA9IGxhc3QgLSAxIGluXG4gICAgbGV0IHN0ID0gc2Nhbl9zdHIgcmUgcG9zaXRpb25zIH5wb3MgcyBpbml0aWFsX3N0YXRlIH5sYXN0IH5ncm91cHMgaW5cbiAgICBpZiBJZHguaXNfYnJlYWsgKFN0YXRlLmdldF9pbmZvIHN0KS5pZHhcbiAgICB0aGVuIHN0XG4gICAgZWxzZSBoYW5kbGVfbGFzdF9uZXdsaW5lIHJlIHBvc2l0aW9ucyB+cG9zOmxhc3Qgc3Qgfmdyb3VwcylcbiAgZWxzZSBpZiBncm91cHNcbiAgdGhlbiBsb29wIHJlIH5jb2xvcnM6cmUuY29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IGluaXRpYWxfc3RhdGUgaW5pdGlhbF9zdGF0ZVxuICBlbHNlIGxvb3Bfbm9fbWFyayByZSB+Y29sb3JzOnJlLmNvbG9ycyBzIH5wb3Mgfmxhc3QgaW5pdGlhbF9zdGF0ZSBpbml0aWFsX3N0YXRlXG47O1xuXG4oKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBmaW5hbCBib3VuZGFyeSBjaGVjayBvbiB0aGUgaW5wdXQuXG4gICBUaGlzIGlzIHVzZWZ1bCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgZmFpbGVkIGJlY2F1c2VcbiAgIG9mIGluc3VmZmljaWVudCBpbnB1dCwgb3IgdG8gdmVyaWZ5IHRoYXQgdGhlIG91dHB1dCBhY3R1YWxseVxuICAgbWF0Y2hlcyBmb3IgcmVnZXggdGhhdCBoYXZlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgd2l0aCByZXNwZWN0XG4gICB0byB0aGUgaW5wdXQgc3RyaW5nLlxuKilcbmxldCBmaW5hbF9ib3VuZGFyeV9jaGVjayByZSBwb3NpdGlvbnMgfmxhc3QgfnNsZW4gcyBzdGF0ZV9pbmZvIH5ncm91cHMgPVxuICBsZXQgaWR4LCByZXMgPVxuICAgIGxldCBmaW5hbF9jYXQgPVxuICAgICAgQ2F0ZWdvcnkuKFxuICAgICAgICBzZWFyY2hfYm91bmRhcnlcbiAgICAgICAgKysgaWYgbGFzdCA9IHNsZW4gdGhlbiBpbmV4aXN0YW50IGVsc2UgY2F0ZWdvcnkgcmUgfmNvbG9yOihnZXRfY29sb3IgcmUgcyBsYXN0KSlcbiAgICBpblxuICAgIGZpbmFsIHJlIHN0YXRlX2luZm8gZmluYWxfY2F0XG4gIGluXG4gIChtYXRjaCBncm91cHMsIHJlcyB3aXRoXG4gICB8IHRydWUsIE1hdGNoIF8gLT4gUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKEF1dG9tYXRhLklkeC50b19pbnQgaWR4KSBsYXN0XG4gICB8IF8gLT4gKCkpO1xuICByZXNcbjs7XG5cbmxldCBtYWtlX21hdGNoX3N0ciByZSBwb3NpdGlvbnMgfmxlbiB+Z3JvdXBzIH5wYXJ0aWFsIHMgfnBvcyA9XG4gIGxldCBzbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsYXN0ID0gaWYgbGVuID0gLTEgdGhlbiBzbGVuIGVsc2UgcG9zICsgbGVuIGluXG4gIGxldCBzdCA9XG4gICAgbGV0IGluaXRpYWxfc3RhdGUgPVxuICAgICAgbGV0IGluaXRpYWxfY2F0ID1cbiAgICAgICAgQ2F0ZWdvcnkuKFxuICAgICAgICAgIHNlYXJjaF9ib3VuZGFyeVxuICAgICAgICAgICsrIGlmIHBvcyA9IDAgdGhlbiBpbmV4aXN0YW50IGVsc2UgY2F0ZWdvcnkgcmUgfmNvbG9yOihnZXRfY29sb3IgcmUgcyAocG9zIC0gMSkpKVxuICAgICAgaW5cbiAgICAgIGZpbmRfaW5pdGlhbF9zdGF0ZSByZSBpbml0aWFsX2NhdFxuICAgIGluXG4gICAgc2Nhbl9zdHIgcmUgcG9zaXRpb25zIHMgaW5pdGlhbF9zdGF0ZSB+cG9zIH5sYXN0IH5ncm91cHNcbiAgaW5cbiAgbGV0IHN0YXRlX2luZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdCBpblxuICBpZiBJZHguaXNfYnJlYWsgc3RhdGVfaW5mby5pZHggfHwgKHBhcnRpYWwgJiYgbm90IGdyb3VwcylcbiAgdGhlbiBBdXRvbWF0YS5TdGF0ZS5zdGF0dXMgcmUubXV0ZXggc3RhdGVfaW5mby5kZXNjXG4gIGVsc2UgaWYgcGFydGlhbCAmJiBncm91cHNcbiAgdGhlbiAoXG4gICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHJlLm11dGV4IHN0YXRlX2luZm8uZGVzYyB3aXRoXG4gICAgfCAoTWF0Y2ggXyB8IEZhaWxlZCkgYXMgc3RhdHVzIC0+IHN0YXR1c1xuICAgIHwgUnVubmluZyAtPlxuICAgICAgKCogVGhpcyBjb3VsZCBiZSBiZWNhdXNlIGl0J3Mgc3RpbGwgbm90IGZ1bGx5IG1hdGNoZWQsIG9yIGl0XG4gICAgICAgICBjb3VsZCBiZSB0aGF0IGJlY2F1c2Ugd2UgbmVlZCB0byBydW4gc3BlY2lhbCBlbmQgb2YgaW5wdXRcbiAgICAgICAgIGNoZWNrcy4gKilcbiAgICAgIChtYXRjaCBmaW5hbF9ib3VuZGFyeV9jaGVjayByZSBwb3NpdGlvbnMgfmxhc3QgfnNsZW4gcyBzdGF0ZV9pbmZvIH5ncm91cHMgd2l0aFxuICAgICAgIHwgTWF0Y2ggXyBhcyBzdGF0dXMgLT4gc3RhdHVzXG4gICAgICAgfCBGYWlsZWQgfCBSdW5uaW5nIC0+XG4gICAgICAgICAoKiBBIGZhaWx1cmUgaGVyZSBqdXN0IG1lYW5zIHRoYXQgd2UgbmVlZCBtb3JlIGRhdGEsIGkuZS5cbiAgICAgICAgICAgIGl0J3MgYSBwYXJ0aWFsIG1hdGNoLiAqKVxuICAgICAgICAgUnVubmluZykpXG4gIGVsc2UgZmluYWxfYm91bmRhcnlfY2hlY2sgcmUgcG9zaXRpb25zIH5sYXN0IH5zbGVuIHMgc3RhdGVfaW5mbyB+Z3JvdXBzXG47O1xuXG5tb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIHQgPVxuICAgIHsgc3RhdGUgOiBTdGF0ZS50XG4gICAgOyByZSA6IHJlXG4gICAgfVxuXG4gIHR5cGUgJ2EgZmVlZCA9XG4gICAgfCBPayBvZiAnYVxuICAgIHwgTm9fbWF0Y2hcblxuICBsZXQgY3JlYXRlIHJlID1cbiAgICBsZXQgY2F0ZWdvcnkgPSBDYXRlZ29yeS4oc2VhcmNoX2JvdW5kYXJ5ICsrIGluZXhpc3RhbnQpIGluXG4gICAgbGV0IHN0YXRlID0gZmluZF9pbml0aWFsX3N0YXRlIHJlIGNhdGVnb3J5IGluXG4gICAgeyBzdGF0ZTsgcmUgfVxuICA7O1xuXG4gIGxldCBmZWVkIHQgcyB+cG9zIH5sZW4gPVxuICAgICgqIFRPRE8gYm91bmQgY2hlY2tzPyAqKVxuICAgIGxldCBsYXN0ID0gcG9zICsgbGVuIGluXG4gICAgbGV0IHN0YXRlID0gbG9vcF9ub19tYXJrIHQucmUgfmNvbG9yczp0LnJlLmNvbG9ycyBzIH5sYXN0IH5wb3MgdC5zdGF0ZSB0LnN0YXRlIGluXG4gICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgIGlmIElkeC5pc19icmVhayBpbmZvLmlkeFxuICAgICAgICYmXG4gICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHQucmUubXV0ZXggaW5mby5kZXNjIHdpdGhcbiAgICAgICB8IEZhaWxlZCAtPiB0cnVlXG4gICAgICAgfCBNYXRjaCBfIHwgUnVubmluZyAtPiBmYWxzZVxuICAgIHRoZW4gTm9fbWF0Y2hcbiAgICBlbHNlIE9rIHsgdCB3aXRoIHN0YXRlIH1cbiAgOztcblxuICBsZXQgZmluYWxpemUgdCBzIH5wb3MgfmxlbiA9XG4gICAgKCogVE9ETyBib3VuZCBjaGVja3M/ICopXG4gICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICBsZXQgc3RhdGUgPSBzY2FuX3N0ciB0LnJlIFBvc2l0aW9ucy5lbXB0eSBzIHQuc3RhdGUgfmxhc3QgfnBvcyB+Z3JvdXBzOmZhbHNlIGluXG4gICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgIG1hdGNoXG4gICAgICBsZXQgX2lkeCwgcmVzID1cbiAgICAgICAgbGV0IGZpbmFsX2NhdCA9IENhdGVnb3J5LihzZWFyY2hfYm91bmRhcnkgKysgaW5leGlzdGFudCkgaW5cbiAgICAgICAgZmluYWwgdC5yZSBpbmZvIGZpbmFsX2NhdFxuICAgICAgaW5cbiAgICAgIHJlc1xuICAgIHdpdGhcbiAgICB8IFJ1bm5pbmcgfCBGYWlsZWQgLT4gZmFsc2VcbiAgICB8IE1hdGNoIF8gLT4gdHJ1ZVxuICA7O1xuXG4gIG1vZHVsZSBHcm91cCA9IHN0cnVjdFxuICAgIHR5cGUgbm9ucmVjIHQgPVxuICAgICAgeyB0IDogdFxuICAgICAgOyBwb3NpdGlvbnMgOiBQb3NpdGlvbnMudFxuICAgICAgOyBzbGljZXMgOiBTbGljZS5MLnRcbiAgICAgIDsgYWJzX3BvcyA6IGludFxuICAgICAgOyBmaXJzdF9tYXRjaF9wb3MgOiBpbnRcbiAgICAgIH1cblxuICAgIGxldCBub19tYXRjaF9zdGFydHNfYmVmb3JlIHQgPSB0LmZpcnN0X21hdGNoX3Bvc1xuXG4gICAgbGV0IGNyZWF0ZSB0ID1cbiAgICAgIHsgdFxuICAgICAgOyBwb3NpdGlvbnMgPSBQb3NpdGlvbnMubWFrZSB+Z3JvdXBzOnRydWUgdC5yZVxuICAgICAgOyBzbGljZXMgPSBbXVxuICAgICAgOyBhYnNfcG9zID0gMFxuICAgICAgOyBmaXJzdF9tYXRjaF9wb3MgPSAwXG4gICAgICB9XG4gICAgOztcblxuICAgIG1vZHVsZSBNYXRjaCA9IHN0cnVjdFxuICAgICAgdHlwZSB0ID1cbiAgICAgICAgeyBwbWFya3MgOiBQbWFyay5TZXQudFxuICAgICAgICA7IHNsaWNlcyA6IFNsaWNlLkwudFxuICAgICAgICA7IG1hcmtzIDogTWFya19pbmZvcy50XG4gICAgICAgIDsgcG9zaXRpb25zIDogaW50IGFycmF5XG4gICAgICAgIDsgc3RhcnRfcG9zIDogaW50XG4gICAgICAgIH1cblxuICAgICAgbGV0IHRlc3RfbWFyayB0IG1hcmsgPSBQbWFyay5TZXQubWVtIG1hcmsgdC5wbWFya3NcblxuICAgICAgbGV0IGdldCB0IGkgPVxuICAgICAgICBNYXJrX2luZm9zLm9mZnNldCB0Lm1hcmtzIGlcbiAgICAgICAgfD4gT3B0aW9uLm1hcCAoZnVuIChzdGFydCwgc3RvcCkgLT5cbiAgICAgICAgICBsZXQgc3RhcnQgPSB0LnBvc2l0aW9ucy4oc3RhcnQpIC0gdC5zdGFydF9wb3MgaW5cbiAgICAgICAgICBsZXQgc3RvcCA9IHQucG9zaXRpb25zLihzdG9wKSAtIHQuc3RhcnRfcG9zIGluXG4gICAgICAgICAgU2xpY2UuTC5nZXRfc3Vic3RyaW5nIHQuc2xpY2VzIH5zdGFydCB+c3RvcClcbiAgICAgIDs7XG5cbiAgICAgIGxldCBtYWtlIH5zdGFydF9wb3MgfnBtYXJrcyB+c2xpY2VzIH5tYXJrcyB+cG9zaXRpb25zID1cbiAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFBvc2l0aW9ucy5hbGwgcG9zaXRpb25zIGluXG4gICAgICAgIHsgcG1hcmtzOyBzbGljZXM7IHBvc2l0aW9uczsgbWFya3M7IHN0YXJ0X3BvcyB9XG4gICAgICA7O1xuICAgIGVuZFxuXG4gICAgbGV0IHJlYyBsb29wIHJlIH5hYnNfcG9zIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3Mgfmxhc3Qgc3QwIHN0ID1cbiAgICAgIGlmIHBvcyA8IGxhc3RcbiAgICAgIHRoZW4gKFxuICAgICAgICBsZXQgc3QnID0gbmV4dCBjb2xvcnMgc3QgcyBwb3MgaW5cbiAgICAgICAgbGV0IGlkeCA9IChTdGF0ZS5nZXRfaW5mbyBzdCcpLmlkeCBpblxuICAgICAgICBpZiBJZHguaXNfaWR4IGlkeFxuICAgICAgICB0aGVuXG4gICAgICAgICAgaWYgSWR4LmlkeCBpZHggPCBQb3NpdGlvbnMubGVuZ3RoIHBvc2l0aW9uc1xuICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgUG9zaXRpb25zLnVuc2FmZV9zZXQgcG9zaXRpb25zIChJZHguaWR4IGlkeCkgKGFic19wb3MgKyBwb3MpO1xuICAgICAgICAgICAgbG9vcCByZSB+YWJzX3BvcyB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zOihwb3MgKyAxKSB+bGFzdCBzdCcgc3QnKVxuICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgKCogUmVzaXplIHBvc2l0aW9uIGFycmF5ICopXG4gICAgICAgICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmlkeCBpZHgpIChhYnNfcG9zICsgcG9zKTtcbiAgICAgICAgICAgIGxvb3AgcmUgfmFic19wb3MgfmNvbG9ycyB+cG9zaXRpb25zIHMgfnBvczoocG9zICsgMSkgfmxhc3Qgc3QnIHN0JylcbiAgICAgICAgZWxzZSBpZiBJZHguaXNfYnJlYWsgaWR4XG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguYnJlYWtfaWR4IGlkeCkgKGFic19wb3MgKyBwb3MpO1xuICAgICAgICAgIHN0JylcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgKCogVW5rbm93biAqKVxuICAgICAgICAgIHZhbGlkYXRlIHJlIHMgfnBvcyBzdDA7XG4gICAgICAgICAgbG9vcCByZSB+YWJzX3BvcyB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IHN0MCBzdDApKVxuICAgICAgZWxzZSBzdFxuICAgIDs7XG5cbiAgICBsZXQgZmVlZCAoeyB0OyBwb3NpdGlvbnM7IHNsaWNlczsgYWJzX3BvczsgZmlyc3RfbWF0Y2hfcG9zID0gXyB9IGFzIHR0KSBzIH5wb3MgfmxlbiA9XG4gICAgICBsZXQgc3RhdGUgPVxuICAgICAgICAoKiBUT0RPIGJvdW5kIGNoZWNrcz8gKilcbiAgICAgICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICAgICAgbG9vcCB0LnJlIH5hYnNfcG9zIH5jb2xvcnM6dC5yZS5jb2xvcnMgcyB+cG9zaXRpb25zIH5sYXN0IH5wb3MgdC5zdGF0ZSB0LnN0YXRlXG4gICAgICBpblxuICAgICAgbGV0IGluZm8gPSBTdGF0ZS5nZXRfaW5mbyBzdGF0ZSBpblxuICAgICAgaWYgSWR4LmlzX2JyZWFrIGluZm8uaWR4XG4gICAgICAgICAmJlxuICAgICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHQucmUubXV0ZXggaW5mby5kZXNjIHdpdGhcbiAgICAgICAgIHwgRmFpbGVkIC0+IHRydWVcbiAgICAgICAgIHwgTWF0Y2ggXyB8IFJ1bm5pbmcgLT4gZmFsc2VcbiAgICAgIHRoZW4gTm9fbWF0Y2hcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgdCA9IHsgdCB3aXRoIHN0YXRlIH0gaW5cbiAgICAgICAgbGV0IHNsaWNlcyA9IHsgU2xpY2UuczsgcG9zOyBsZW4gfSA6OiBzbGljZXMgaW5cbiAgICAgICAgbGV0IGZpcnN0X21hdGNoX3BvcyA9IFBvc2l0aW9ucy5maXJzdCBwb3NpdGlvbnMgaW5cbiAgICAgICAgbGV0IHNsaWNlcyA9IFNsaWNlLkwuZHJvcF9yZXYgc2xpY2VzIChmaXJzdF9tYXRjaF9wb3MgLSB0dC5maXJzdF9tYXRjaF9wb3MpIGluXG4gICAgICAgIGxldCBhYnNfcG9zID0gYWJzX3BvcyArIGxlbiBpblxuICAgICAgICBPayB7IHR0IHdpdGggdDsgc2xpY2VzOyBhYnNfcG9zOyBmaXJzdF9tYXRjaF9wb3MgfSlcbiAgICA7O1xuXG4gICAgbGV0IGZpbmFsaXplXG4gICAgICAoeyB0OyBwb3NpdGlvbnM7IHNsaWNlczsgYWJzX3BvczsgZmlyc3RfbWF0Y2hfcG9zID0gXyB9IGFzIHR0KVxuICAgICAgc1xuICAgICAgfnBvc1xuICAgICAgfmxlblxuICAgICAgOiBNYXRjaC50IGZlZWRcbiAgICAgID1cbiAgICAgICgqIFRPRE8gYm91bmQgY2hlY2tzPyAqKVxuICAgICAgbGV0IGxhc3QgPSBwb3MgKyBsZW4gaW5cbiAgICAgIGxldCBpbmZvID1cbiAgICAgICAgbGV0IHN0YXRlID1cbiAgICAgICAgICBsb29wIHQucmUgfmFic19wb3MgfmNvbG9yczp0LnJlLmNvbG9ycyBzIH5wb3NpdGlvbnMgfmxhc3QgfnBvcyB0LnN0YXRlIHQuc3RhdGVcbiAgICAgICAgaW5cbiAgICAgICAgU3RhdGUuZ2V0X2luZm8gc3RhdGVcbiAgICAgIGluXG4gICAgICBtYXRjaFxuICAgICAgICBtYXRjaCBBdXRvbWF0YS5TdGF0ZS5zdGF0dXMgdC5yZS5tdXRleCBpbmZvLmRlc2Mgd2l0aFxuICAgICAgICB8IChNYXRjaCBfIHwgRmFpbGVkKSBhcyBzIC0+IHNcbiAgICAgICAgfCBSdW5uaW5nIC0+XG4gICAgICAgICAgbGV0IGlkeCwgcmVzID1cbiAgICAgICAgICAgIGxldCBmaW5hbF9jYXQgPSBDYXRlZ29yeS4oc2VhcmNoX2JvdW5kYXJ5ICsrIGluZXhpc3RhbnQpIGluXG4gICAgICAgICAgICBmaW5hbCB0LnJlIGluZm8gZmluYWxfY2F0XG4gICAgICAgICAgaW5cbiAgICAgICAgICAobWF0Y2ggcmVzIHdpdGhcbiAgICAgICAgICAgfCBSdW5uaW5nIHwgRmFpbGVkIC0+ICgpXG4gICAgICAgICAgIHwgTWF0Y2ggXyAtPiBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoQXV0b21hdGEuSWR4LnRvX2ludCBpZHgpIChhYnNfcG9zICsgbGFzdCkpO1xuICAgICAgICAgIHJlc1xuICAgICAgd2l0aFxuICAgICAgfCBSdW5uaW5nIHwgRmFpbGVkIC0+IE5vX21hdGNoXG4gICAgICB8IE1hdGNoIChtYXJrcywgcG1hcmtzKSAtPlxuICAgICAgICBsZXQgZmlyc3RfbWF0Y2hfcG9zaXRpb24gPSBQb3NpdGlvbnMuZmlyc3QgcG9zaXRpb25zIGluXG4gICAgICAgIGxldCBzbGljZXMgPVxuICAgICAgICAgIGxldCBzbGljZXMgPVxuICAgICAgICAgICAgbGV0IHNsaWNlcyA9IHsgU2xpY2UuczsgcG9zOyBsZW4gfSA6OiBzbGljZXMgaW5cbiAgICAgICAgICAgIFNsaWNlLkwuZHJvcF9yZXYgc2xpY2VzIChmaXJzdF9tYXRjaF9wb3NpdGlvbiAtIHR0LmZpcnN0X21hdGNoX3BvcylcbiAgICAgICAgICBpblxuICAgICAgICAgIExpc3QucmV2IHNsaWNlc1xuICAgICAgICBpblxuICAgICAgICBPayAoTWF0Y2gubWFrZSB+c3RhcnRfcG9zOmZpcnN0X21hdGNoX3Bvc2l0aW9uIH5wbWFya3Mgfm1hcmtzIH5zbGljZXMgfnBvc2l0aW9ucylcbiAgICA7O1xuICBlbmRcbmVuZFxuXG5sZXQgbWF0Y2hfc3RyX25vX2JvdW5kcyB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuID1cbiAgbGV0IHBvc2l0aW9ucyA9IFBvc2l0aW9ucy5tYWtlIH5ncm91cHMgcmUgaW5cbiAgbWF0Y2ggbWFrZV9tYXRjaF9zdHIgcmUgcG9zaXRpb25zIH5sZW4gfmdyb3VwcyB+cGFydGlhbCBzIH5wb3Mgd2l0aFxuICB8IE1hdGNoIChtYXJrcywgcG1hcmtzKSAtPlxuICAgIE1hdGNoXG4gICAgICAoR3JvdXAuY3JlYXRlIHMgbWFya3MgcG1hcmtzIH5ncG9zOihQb3NpdGlvbnMuYWxsIHBvc2l0aW9ucykgfmdjb3VudDpyZS5ncm91cF9jb3VudClcbiAgfCBGYWlsZWQgLT4gRmFpbGVkXG4gIHwgUnVubmluZyAtPlxuICAgIGxldCBub19tYXRjaF9zdGFydHNfYmVmb3JlID0gaWYgZ3JvdXBzIHRoZW4gUG9zaXRpb25zLmZpcnN0IHBvc2l0aW9ucyBlbHNlIDAgaW5cbiAgICBSdW5uaW5nIHsgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSB9XG47O1xuXG5sZXQgbWF0Y2hfc3RyX3AgcmUgcyB+cG9zIH5sZW4gPVxuICBpZiBwb3MgPCAwIHx8IGxlbiA8IC0xIHx8IHBvcyArIGxlbiA+IFN0cmluZy5sZW5ndGggc1xuICB0aGVuIGludmFsaWRfYXJnIFwiUmUuZXhlYzogb3V0IG9mIGJvdW5kc1wiO1xuICBtYXRjaCBtYWtlX21hdGNoX3N0ciByZSBQb3NpdGlvbnMuZW1wdHkgfmxlbiB+Z3JvdXBzOmZhbHNlIH5wYXJ0aWFsOmZhbHNlIHMgfnBvcyB3aXRoXG4gIHwgTWF0Y2ggXyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuOztcblxubGV0IG1hdGNoX3N0ciB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuID1cbiAgaWYgcG9zIDwgMCB8fCBsZW4gPCAtMSB8fCBwb3MgKyBsZW4gPiBTdHJpbmcubGVuZ3RoIHNcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmV4ZWM6IG91dCBvZiBib3VuZHNcIjtcbiAgbWF0Y2hfc3RyX25vX2JvdW5kcyB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuXG47O1xuXG5sZXQgbWtfcmUgfmluaXRpYWwgfmNvbG9ycyB+Y29sb3JfcmVwciB+bmNvbG9yIH5sbmwgfmdyb3VwX25hbWVzIH5ncm91cF9jb3VudCA9XG4gIHsgaW5pdGlhbFxuICA7IGluaXRpYWxfc3RhdGVzID0gW11cbiAgOyBjb2xvcnNcbiAgOyBjb2xvcl9yZXByXG4gIDsgbmNvbG9yXG4gIDsgbG5sXG4gIDsgdGJsID0gQXV0b21hdGEuV29ya2luZ19hcmVhLmNyZWF0ZSAoKVxuICA7IHN0YXRlcyA9IEF1dG9tYXRhLlN0YXRlLlRhYmxlLmNyZWF0ZSA5N1xuICA7IGdyb3VwX25hbWVzXG4gIDsgZ3JvdXBfY291bnRcbiAgOyBtdXRleCA9IE11dGV4LmNyZWF0ZSAoKVxuICB9XG47O1xuXG4oKioqKiBDb21waWxhdGlvbiAqKioqKVxuXG5tb2R1bGUgQSA9IEF1dG9tYXRhXG5cbmxldCBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3IgPVxuICBtYXRjaCBraW5kLCBraW5kJyB3aXRoXG4gIHwgYEZpcnN0LCBgRmlyc3QgLT4gY3JcbiAgfCBgRmlyc3QsIGsgLT4gQS5zZXEgaWRzIGsgY3IgKEEuZXBzIGlkcylcbiAgfCBfIC0+IGNyXG47O1xuXG50eXBlIGNvbnRleHQgPVxuICB7IGlkcyA6IEEuSWRzLnRcbiAgOyBraW5kIDogQS5TZW0udFxuICA7IGlnbl9ncm91cCA6IGJvb2xcbiAgOyBncmVlZHkgOiBBLlJlcF9raW5kLnRcbiAgOyBwb3MgOiBBLk1hcmsudCByZWZcbiAgOyBuYW1lcyA6IChzdHJpbmcgKiBpbnQpIGxpc3QgcmVmXG4gIDsgY2FjaGUgOiBDc2V0LnQgQ3NldC5DU2V0TWFwLnQgcmVmXG4gIDsgY29sb3JzIDogQ29sb3JfbWFwLlRhYmxlLnRcbiAgfVxuXG5sZXQgdHJhbnNfc2V0IGNhY2hlIChjbSA6IENvbG9yX21hcC5UYWJsZS50KSBzID1cbiAgbWF0Y2ggQ3NldC5vbmVfY2hhciBzIHdpdGhcbiAgfCBTb21lIGkgLT4gQ3NldC5jc2luZ2xlIChDb2xvcl9tYXAuVGFibGUuZ2V0X2NoYXIgY20gaSlcbiAgfCBOb25lIC0+XG4gICAgbGV0IHYgPSBDc2V0Lmhhc2ggcywgcyBpblxuICAgICh0cnkgQ3NldC5DU2V0TWFwLmZpbmQgdiAhY2FjaGUgd2l0aFxuICAgICB8IE5vdF9mb3VuZCAtPlxuICAgICAgIGxldCBsID0gQ29sb3JfbWFwLlRhYmxlLnRyYW5zbGF0ZV9jb2xvcnMgY20gcyBpblxuICAgICAgIGNhY2hlIDo9IENzZXQuQ1NldE1hcC5hZGQgdiBsICFjYWNoZTtcbiAgICAgICBsKVxuOztcblxubGV0IG1ha2VfcmVwZWF0ZXIgaWRzIGNyIGtpbmQgZ3JlZWR5ID1cbiAgbWF0Y2ggZ3JlZWR5IHdpdGhcbiAgfCBgR3JlZWR5IC0+IGZ1biByZW0gLT4gQS5hbHQgaWRzIFsgQS5zZXEgaWRzIGtpbmQgKEEucmVuYW1lIGlkcyBjcikgcmVtOyBBLmVwcyBpZHMgXVxuICB8IGBOb25fZ3JlZWR5IC0+XG4gICAgZnVuIHJlbSAtPiBBLmFsdCBpZHMgWyBBLmVwcyBpZHM7IEEuc2VxIGlkcyBraW5kIChBLnJlbmFtZSBpZHMgY3IpIHJlbSBdXG47O1xuXG4oKiBYWFggc2hvdWxkIHByb2JhYmx5IGNvbXB1dGUgYSBjYXRlZ29yeSBtYXNrICopXG5sZXQgcmVjIHRyYW5zbGF0ZVxuICAoeyBpZHM7IGtpbmQ7IGlnbl9ncm91cDsgZ3JlZWR5OyBwb3M7IG5hbWVzOyBjYWNoZTsgY29sb3JzIH0gYXMgY3R4KVxuICAoYXN0IDogQXN0Lm5vX2Nhc2UpXG4gID1cbiAgbWF0Y2ggYXN0IHdpdGhcbiAgfCBTZXQgcyAtPiBBLmNzdCBpZHMgKHRyYW5zX3NldCBjYWNoZSBjb2xvcnMgcyksIGtpbmRcbiAgfCBTZXF1ZW5jZSBsIC0+IHRyYW5zX3NlcSBjdHggbCwga2luZFxuICB8IEFzdCAoQWx0ZXJuYXRpdmUgbCkgLT5cbiAgICAobWF0Y2ggQXN0Lm1lcmdlX3NlcXVlbmNlcyBsIHdpdGhcbiAgICAgfCBbIHInIF0gLT5cbiAgICAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgICAgIGVuZm9yY2Vfa2luZCBpZHMga2luZCBraW5kJyBjciwga2luZFxuICAgICB8IG1lcmdlZF9zZXF1ZW5jZXMgLT5cbiAgICAgICAoIEEuYWx0XG4gICAgICAgICAgIGlkc1xuICAgICAgICAgICAoTGlzdC5tYXAgbWVyZ2VkX3NlcXVlbmNlcyB+ZjooZnVuIHInIC0+XG4gICAgICAgICAgICAgIGxldCBjciwga2luZCcgPSB0cmFuc2xhdGUgY3R4IHInIGluXG4gICAgICAgICAgICAgIGVuZm9yY2Vfa2luZCBpZHMga2luZCBraW5kJyBjcikpXG4gICAgICAgLCBraW5kICkpXG4gIHwgUmVwZWF0IChyJywgaSwgaikgLT5cbiAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgIGxldCByZW0gPVxuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IE5vbmUgLT4gQS5yZXAgaWRzIGdyZWVkeSBraW5kJyBjclxuICAgICAgfCBTb21lIGogLT5cbiAgICAgICAgbGV0IGYgPSBtYWtlX3JlcGVhdGVyIGlkcyBjciBraW5kJyBncmVlZHkgaW5cbiAgICAgICAgaXRlciAoaiAtIGkpIGYgKEEuZXBzIGlkcylcbiAgICBpblxuICAgIGl0ZXIgaSAoZnVuIHJlbSAtPiBBLnNlcSBpZHMga2luZCcgKEEucmVuYW1lIGlkcyBjcikgcmVtKSByZW0sIGtpbmRcbiAgfCBCZWdfb2ZfbGluZSAtPiBBLmFmdGVyIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBuZXdsaW5lKSwga2luZFxuICB8IEVuZF9vZl9saW5lIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBuZXdsaW5lKSwga2luZFxuICB8IEJlZ19vZl93b3JkIC0+XG4gICAgKCBBLnNlcVxuICAgICAgICBpZHNcbiAgICAgICAgYEZpcnN0XG4gICAgICAgIChBLmFmdGVyIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBub3RfbGV0dGVyKSlcbiAgICAgICAgKEEuYmVmb3JlIGlkcyBDYXRlZ29yeS5sZXR0ZXIpXG4gICAgLCBraW5kIClcbiAgfCBFbmRfb2Zfd29yZCAtPlxuICAgICggQS5zZXFcbiAgICAgICAgaWRzXG4gICAgICAgIGBGaXJzdFxuICAgICAgICAoQS5hZnRlciBpZHMgQ2F0ZWdvcnkubGV0dGVyKVxuICAgICAgICAoQS5iZWZvcmUgaWRzIENhdGVnb3J5LihpbmV4aXN0YW50ICsrIG5vdF9sZXR0ZXIpKVxuICAgICwga2luZCApXG4gIHwgTm90X2JvdW5kIC0+XG4gICAgKCBBLmFsdFxuICAgICAgICBpZHNcbiAgICAgICAgWyBBLnNlcSBpZHMgYEZpcnN0IChBLmFmdGVyIGlkcyBDYXRlZ29yeS5sZXR0ZXIpIChBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkubGV0dGVyKVxuICAgICAgICA7IChsZXQgY2F0ID0gQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbm90X2xldHRlcikgaW5cbiAgICAgICAgICAgQS5zZXEgaWRzIGBGaXJzdCAoQS5hZnRlciBpZHMgY2F0KSAoQS5iZWZvcmUgaWRzIGNhdCkpXG4gICAgICAgIF1cbiAgICAsIGtpbmQgKVxuICB8IEJlZ19vZl9zdHIgLT4gQS5hZnRlciBpZHMgQ2F0ZWdvcnkuaW5leGlzdGFudCwga2luZFxuICB8IEVuZF9vZl9zdHIgLT4gQS5iZWZvcmUgaWRzIENhdGVnb3J5LmluZXhpc3RhbnQsIGtpbmRcbiAgfCBMYXN0X2VuZF9vZl9saW5lIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBsYXN0bmV3bGluZSksIGtpbmRcbiAgfCBTdGFydCAtPiBBLmFmdGVyIGlkcyBDYXRlZ29yeS5zZWFyY2hfYm91bmRhcnksIGtpbmRcbiAgfCBTdG9wIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS5zZWFyY2hfYm91bmRhcnksIGtpbmRcbiAgfCBTZW0gKGtpbmQnLCByJykgLT5cbiAgICBsZXQgY3IsIGtpbmQnJyA9IHRyYW5zbGF0ZSB7IGN0eCB3aXRoIGtpbmQgPSBraW5kJyB9IHInIGluXG4gICAgZW5mb3JjZV9raW5kIGlkcyBraW5kJyBraW5kJycgY3IsIGtpbmQnXG4gIHwgU2VtX2dyZWVkeSAoZ3JlZWR5JywgcicpIC0+IHRyYW5zbGF0ZSB7IGN0eCB3aXRoIGdyZWVkeSA9IGdyZWVkeScgfSByJ1xuICB8IEdyb3VwIChuLCByJykgLT5cbiAgICBpZiBpZ25fZ3JvdXBcbiAgICB0aGVuIHRyYW5zbGF0ZSBjdHggcidcbiAgICBlbHNlIChcbiAgICAgIGxldCBwID0gIXBvcyBpblxuICAgICAgbGV0ICgpID1cbiAgICAgICAgbWF0Y2ggbiB3aXRoXG4gICAgICAgIHwgU29tZSBuYW1lIC0+IG5hbWVzIDo9IChuYW1lLCBBLk1hcmsuZ3JvdXBfY291bnQgcCkgOjogIW5hbWVzXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgaW5cbiAgICAgIHBvcyA6PSBBLk1hcmsubmV4dDIgIXBvcztcbiAgICAgIGxldCBjciwga2luZCcgPSB0cmFuc2xhdGUgY3R4IHInIGluXG4gICAgICAoIEEuc2VxIGlkcyBgRmlyc3QgKEEubWFyayBpZHMgcCkgKEEuc2VxIGlkcyBgRmlyc3QgY3IgKEEubWFyayBpZHMgKEEuTWFyay5uZXh0IHApKSlcbiAgICAgICwga2luZCcgKSlcbiAgfCBOb19ncm91cCByJyAtPiB0cmFuc2xhdGUgeyBjdHggd2l0aCBpZ25fZ3JvdXAgPSB0cnVlIH0gcidcbiAgfCBOZXN0IHInIC0+XG4gICAgbGV0IGIgPSAhcG9zIGluXG4gICAgbGV0IGNyLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggcicgaW5cbiAgICBsZXQgZSA9IEEuTWFyay5wcmV2ICFwb3MgaW5cbiAgICBpZiBBLk1hcmsuY29tcGFyZSBlIGIgPSAtMVxuICAgIHRoZW4gY3IsIGtpbmQnXG4gICAgZWxzZSBBLnNlcSBpZHMgYEZpcnN0IChBLmVyYXNlIGlkcyBiIGUpIGNyLCBraW5kJ1xuICB8IFBtYXJrIChpLCByJykgLT5cbiAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgIEEuc2VxIGlkcyBgRmlyc3QgKEEucG1hcmsgaWRzIGkpIGNyLCBraW5kJ1xuXG5hbmQgdHJhbnNfc2VxICh7IGlkczsga2luZDsgXyB9IGFzIGN0eCkgPSBmdW5jdGlvblxuICB8IFtdIC0+IEEuZXBzIGlkc1xuICB8IFsgciBdIC0+XG4gICAgbGV0IGNyJywga2luZCcgPSB0cmFuc2xhdGUgY3R4IHIgaW5cbiAgICBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3InXG4gIHwgciA6OiByZW0gLT5cbiAgICBsZXQgY3InLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggciBpblxuICAgIGxldCBjcicnID0gdHJhbnNfc2VxIGN0eCByZW0gaW5cbiAgICBpZiBBLmlzX2VwcyBjcicnIHRoZW4gY3InIGVsc2UgaWYgQS5pc19lcHMgY3InIHRoZW4gY3InJyBlbHNlIEEuc2VxIGlkcyBraW5kJyBjcicgY3InJ1xuOztcblxubGV0IGNvbXBpbGVfMSByZWdleHAgPVxuICBsZXQgcmVnZXhwID0gQXN0LmhhbmRsZV9jYXNlIGZhbHNlIHJlZ2V4cCBpblxuICBsZXQgY29sb3JfbWFwID0gQ29sb3JfbWFwLm1ha2UgKCkgaW5cbiAgbGV0IG5lZWRfbG5sID0gQXN0LmNvbG9yaXplIGNvbG9yX21hcCByZWdleHAgaW5cbiAgbGV0IGNvbG9ycywgY29sb3JfcmVwciA9IENvbG9yX21hcC5mbGF0dGVuIGNvbG9yX21hcCBpblxuICBsZXQgbmNvbG9yID0gQ29sb3JfbWFwLlJlcHIubGVuZ3RoIGNvbG9yX3JlcHIgaW5cbiAgbGV0IGxubCA9IGlmIG5lZWRfbG5sIHRoZW4gQ3NldC5vZl9pbnQgbmNvbG9yIGVsc2UgQ3NldC5udWxsX2NoYXIgaW5cbiAgbGV0IG5jb2xvciA9IGlmIG5lZWRfbG5sIHRoZW4gbmNvbG9yICsgMSBlbHNlIG5jb2xvciBpblxuICBsZXQgY3R4ID1cbiAgICB7IGlkcyA9IEEuSWRzLmNyZWF0ZSAoKVxuICAgIDsga2luZCA9IGBGaXJzdFxuICAgIDsgaWduX2dyb3VwID0gZmFsc2VcbiAgICA7IGdyZWVkeSA9IGBHcmVlZHlcbiAgICA7IHBvcyA9IHJlZiBBLk1hcmsuc3RhcnRcbiAgICA7IG5hbWVzID0gcmVmIFtdXG4gICAgOyBjYWNoZSA9IHJlZiBDc2V0LkNTZXRNYXAuZW1wdHlcbiAgICA7IGNvbG9yc1xuICAgIH1cbiAgaW5cbiAgbGV0IHIsIGtpbmQgPSB0cmFuc2xhdGUgY3R4IHJlZ2V4cCBpblxuICBsZXQgciA9IGVuZm9yY2Vfa2luZCBjdHguaWRzIGBGaXJzdCBraW5kIHIgaW5cbiAgKCpGb3JtYXQuZXByaW50ZiBcIjwlZCAlZD5ALlwiICFpZHMgbmNvbDsqKVxuICBta19yZVxuICAgIH5pbml0aWFsOnJcbiAgICB+Y29sb3JzXG4gICAgfmNvbG9yX3JlcHJcbiAgICB+bmNvbG9yXG4gICAgfmxubFxuICAgIH5ncm91cF9uYW1lczooTGlzdC5yZXYgIShjdHgubmFtZXMpKVxuICAgIH5ncm91cF9jb3VudDooQS5NYXJrLmdyb3VwX2NvdW50ICEoY3R4LnBvcykpXG47O1xuXG5sZXQgY29tcGlsZSByID1cbiAgbGV0IG9wZW4gQXN0LkV4cG9ydCBpblxuICBjb21waWxlXzEgKGlmIEFzdC5hbmNob3JlZCByIHRoZW4gZ3JvdXAgciBlbHNlIHNlcSBbIHNob3J0ZXN0IChyZXAgYW55KTsgZ3JvdXAgciBdKVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9NdXRleCIsIlJlX0NvbG9yX21hcCIsIlJlX0NzZXQiLCJTdGRsaWJfQ2hhciIsIlJlX0F1dG9tYXRhIiwiUmVfQ2F0ZWdvcnkiLCJSZV9Bc3QiLCJTdGRsaWJfTGlzdExhYmVscyIsIlN0ZGxpYiIsIlJlX0dyb3VwIiwiUmVfU2xpY2UiLCJSZV9NYXJrX2luZm9zIiwiU3RkbGliX09wdGlvbiIsIlJlX1BtYXJrIiwiU3RkbGliX0FycmF5IiwiYnJlYWtfaWR4IiwidCIsImdldF9pbmZvIiwicGFyYW0iLCJmb2xsb3dfdHJhbnNpdGlvbiIsImNvbG9yIiwic2V0X3RyYW5zaXRpb24iLCJzdCIsInVua25vd24iLCJpc191bmtub3duX3RyYW5zaXRpb24iLCJpbmZvIiwieCIsInBwX3JlIiwiY2giLCJyZSIsImdyb3VwX2NvdW50IiwiZ3JvdXBfbmFtZXMiLCJ1bnNhZmVfc2V0IiwiaWR4IiwicG9zIiwic2V0IiwiZmlyc3QiLCJlbXB0eSIsIm1ha2UiLCJncm91cHMiLCJsZW5ndGgiLCJjYXRlZ29yeSIsInVua25vd25fc3RhdGUiLCJmaW5kX3N0YXRlIiwiZGVzYyIsImV4biIsIm1hdGNoIiwiYnJlYWtfc3RhdGUiLCJzdGF0ZSIsIm5jb2wiLCJkZWx0YSIsImNhdCIsInZhbGlkYXRlIiwicyIsIm5leHQiLCJjb2xvcnMiLCJsb29wX25vX21hcmsiLCJsYXN0Iiwic3QwIiwiZmluYWwiLCJyZXMiLCJmaW5kX2luaXRpYWxfc3RhdGUiLCJnZXRfY29sb3IiLCJzbGVuIiwic2Nhbl9zdHIiLCJwb3NpdGlvbnMiLCJpbml0aWFsX3N0YXRlIiwicmVhbF9jIiwiZmluYWxfYm91bmRhcnlfY2hlY2siLCJzdGF0ZV9pbmZvIiwiZmluYWxfY2F0IiwibWFrZV9tYXRjaF9zdHIiLCJsZW4iLCJwYXJ0aWFsIiwiaW5pdGlhbF9jYXQiLCJzdGF0dXMiLCJjcmVhdGUiLCJmZWVkIiwiZmluYWxpemUiLCJub19tYXRjaF9zdGFydHNfYmVmb3JlIiwidGVzdF9tYXJrIiwibWFyayIsImdldCIsImkiLCJzdG9wIiwic3RhcnQiLCJsb29wIiwiYWJzX3BvcyIsInR0Iiwic2xpY2VzIiwiZmlyc3RfbWF0Y2hfcG9zIiwicG1hcmtzIiwibWFya3MiLCJmaXJzdF9tYXRjaF9wb3NpdGlvbiIsIm1hdGNoX3N0cl9ub19ib3VuZHMiLCJjc3RfUmVfZXhlY19vdXRfb2ZfYm91bmRzIiwibWF0Y2hfc3RyX3AiLCJtYXRjaF9zdHIiLCJlbmZvcmNlX2tpbmQiLCJpZHMiLCJraW5kIiwiY3IiLCJ0cmFuc2xhdGUiLCJjdHgiLCJhc3QiLCJjYWNoZSIsIm5hbWVzIiwiZ3JlZWR5IiwiaWduX2dyb3VwIiwibCIsIm4iLCJyIiwiYiIsImUiLCJwIiwibmFtZSIsImoiLCJyZW0iLCJ2IiwibWVyZ2VkX3NlcXVlbmNlcyIsInRyYW5zX3NlcSIsImNvbXBpbGUiLCJyZWdleHAiLCJjb2xvcl9tYXAiLCJuZWVkX2xubCIsImNvbG9yX3JlcHIiLCJuY29sb3IiLCJsbmwiLCJpbml0aWFsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxVQUFBQyxHQzBCb0IsNEJBQVk7QUFBQSxZQUFBQyxTQUFBQyxPQStDUyxnQkFBaUM7QUFBQSxZQUFBQyxrQkFBQUQsT0FBQUU7QUFBQUEsSUFNTCx3REFBaUI7QUFBQSxHQUFDO0FBQUEsWUFBQUMsZUFBQUgsT0FBQUUsT0FBQUU7QUFBQUEsUUFBQSxJQUlsQztBQUFBLElBQVI7QUFBQSxHQUFpQztB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O0FBQUEsS0FBQTlFLFFBQ1U7QUFBQSxLQUFBK0UsYUFBMkI7QUFBQSxLQUFBdEUsU0FBQTtBQUFBLEtBQUF1RSxTQUN2QztBQUFBLEtBQUFDLE1BQ2IsV0FBMkI7QUFBQSxLQUFBRCxXQUMzQjtBQUFBLFNBRVU7QUFBQTtBQUFBLEtBQUF2QjtBQUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUF6RCxVQVVJO0FBQUEsS0FBQXNELE9BQW9CO0FBQUEsS0FBQVcsSUFBQTtBQUFBLEtBQUFpQixVQUMxQjtBQUFBLEtBQUFsRyxjQVNPO0FBQUEsS0FBQUMsY0FEQTtBQUFBLFNBN0tMO0FBQUEsU0FIQztBQUFBLElBREg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQStCO0FBQUEsR0F1TDRDO0FBQUEsR0FydUJLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ1RjFGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzUxOTUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9zZWFyY2gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJsZXQgYWxsID8ocG9zID0gMCkgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGlmIHBvcyA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmFsbFwiO1xuICAoKiBpbmRleCBvZiB0aGUgZmlyc3QgcG9zaXRpb24gd2UgZG8gbm90IGNvbnNpZGVyLlxuICAgICAhcG9zIDwgbGltaXQgaXMgYW4gaW52YXJpYW50ICopXG4gIGxldCBsaW1pdCA9XG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzXG4gICAgfCBTb21lIGwgLT5cbiAgICAgIGlmIGwgPCAwIHx8IHBvcyArIGwgPiBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmFsbFwiO1xuICAgICAgcG9zICsgbFxuICBpblxuICAoKiBpdGVyYXRlIG9uIG1hdGNoZXMuIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgc2VhcmNoIGZvciB0aGUgbmV4dFxuICAgICBvbmUganVzdCBhZnRlciBpdHMgZW5kICopXG4gIGxldCByZWMgYXV4IHBvcyBvbl9tYXRjaCAoKSA9XG4gICAgaWYgcG9zID4gbGltaXRcbiAgICB0aGVuIFNlcS5OaWwgKCogbm8gbW9yZSBtYXRjaGVzICopXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaFxuICAgICAgICBDb21waWxlLm1hdGNoX3N0ciB+Z3JvdXBzOnRydWUgfnBhcnRpYWw6ZmFsc2UgcmUgcyB+cG9zIH5sZW46KGxpbWl0IC0gcG9zKVxuICAgICAgd2l0aFxuICAgICAgfCBNYXRjaCBzdWJzdHIgLT5cbiAgICAgICAgbGV0IHAxID0gR3JvdXAuc3RhcnRfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgbGV0IHAyID0gR3JvdXAuc3RvcF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICBpZiBvbl9tYXRjaCAmJiBwMSA9IHBvcyAmJiBwMSA9IHAyXG4gICAgICAgIHRoZW4gKCogc2tpcCBlbXB0eSBtYXRjaCByaWdodCBhZnRlciBhIG1hdGNoICopXG4gICAgICAgICAgYXV4IChwb3MgKyAxKSBmYWxzZSAoKVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBsZXQgcG9zID0gaWYgcDEgPSBwMiB0aGVuIHAyICsgMSBlbHNlIHAyIGluXG4gICAgICAgICAgU2VxLkNvbnMgKHN1YnN0ciwgYXV4IHBvcyAocDEgPD4gcDIpKSlcbiAgICAgIHwgUnVubmluZyBfIHwgRmFpbGVkIC0+IFNlcS5OaWwpXG4gIGluXG4gIGF1eCBwb3MgZmFsc2Vcbjs7XG5cbmxldCBtYXRjaGVzID9wb3MgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGFsbCA/cG9zID9sZW4gcmUgcyB8PiBTZXEubWFwIChmdW4gc3ViIC0+IEdyb3VwLmdldCBzdWIgMClcbjs7XG5cbmxldCBzcGxpdF9mdWxsID8ocG9zID0gMCkgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGlmIHBvcyA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnNwbGl0XCI7XG4gIGxldCBsaW1pdCA9XG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzXG4gICAgfCBTb21lIGwgLT5cbiAgICAgIGlmIGwgPCAwIHx8IHBvcyArIGwgPiBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnNwbGl0XCI7XG4gICAgICBwb3MgKyBsXG4gIGluXG4gICgqIGk6IHN0YXJ0IG9mIGRlbGltaXRlZCBzdHJpbmdcbiAgICAgcG9zOiBmaXJzdCBwb3NpdGlvbiBhZnRlciBsYXN0IG1hdGNoIG9mIFtyZV1cbiAgICAgbGltaXQ6IGZpcnN0IGluZGV4IHdlIGlnbm9yZSAoIXBvcyA8IGxpbWl0IGlzIGFuIGludmFyaWFudCkgKilcbiAgbGV0IHBvczAgPSBwb3MgaW5cbiAgbGV0IHJlYyBhdXggc3RhdGUgaSBwb3MgKCkgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IGBJZGxlIHdoZW4gcG9zID4gbGltaXQgLT5cbiAgICAgICgqIFdlIGhhZCBhbiBlbXB0eSBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKilcbiAgICAgIGFzc2VydCAoaSA9IGxpbWl0KTtcbiAgICAgIFNlcS5OaWxcbiAgICB8IGBJZGxlIC0+XG4gICAgICAobWF0Y2hcbiAgICAgICAgIENvbXBpbGUubWF0Y2hfc3RyIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDpmYWxzZSByZSBzIH5wb3MgfmxlbjoobGltaXQgLSBwb3MpXG4gICAgICAgd2l0aFxuICAgICAgIHwgTWF0Y2ggc3Vic3RyIC0+XG4gICAgICAgICBsZXQgcDEgPSBHcm91cC5zdGFydF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICAgbGV0IHAyID0gR3JvdXAuc3RvcF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICAgbGV0IHBvcyA9IGlmIHAxID0gcDIgdGhlbiBwMiArIDEgZWxzZSBwMiBpblxuICAgICAgICAgbGV0IG9sZF9pID0gaSBpblxuICAgICAgICAgbGV0IGkgPSBwMiBpblxuICAgICAgICAgaWYgb2xkX2kgPSBwMSAmJiBwMSA9IHAyICYmIHAxID4gcG9zMFxuICAgICAgICAgdGhlbiAoKiBTa2lwIGVtcHR5IG1hdGNoIHJpZ2h0IGFmdGVyIGEgZGVsaW1pdGVyICopXG4gICAgICAgICAgIGF1eCBzdGF0ZSBpIHBvcyAoKVxuICAgICAgICAgZWxzZSBpZiBwMSA+IHBvczBcbiAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAoKiBzdHJpbmcgZG9lcyBub3Qgc3RhcnQgYnkgYSBkZWxpbWl0ZXIgKilcbiAgICAgICAgICAgbGV0IHRleHQgPSBTdHJpbmcuc3ViIHMgb2xkX2kgKHAxIC0gb2xkX2kpIGluXG4gICAgICAgICAgIGxldCBzdGF0ZSA9IGBZaWVsZCAoYERlbGltIHN1YnN0cikgaW5cbiAgICAgICAgICAgU2VxLkNvbnMgKGBUZXh0IHRleHQsIGF1eCBzdGF0ZSBpIHBvcykpXG4gICAgICAgICBlbHNlIFNlcS5Db25zIChgRGVsaW0gc3Vic3RyLCBhdXggc3RhdGUgaSBwb3MpXG4gICAgICAgfCBSdW5uaW5nIF8gLT4gU2VxLk5pbFxuICAgICAgIHwgRmFpbGVkIC0+XG4gICAgICAgICBpZiBpIDwgbGltaXRcbiAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICBsZXQgdGV4dCA9IFN0cmluZy5zdWIgcyBpIChsaW1pdCAtIGkpIGluXG4gICAgICAgICAgICgqIHlpZWxkIGxhc3Qgc3RyaW5nICopXG4gICAgICAgICAgIFNlcS5Db25zIChgVGV4dCB0ZXh0LCBhdXggc3RhdGUgbGltaXQgcG9zKSlcbiAgICAgICAgIGVsc2UgU2VxLk5pbClcbiAgICB8IGBZaWVsZCB4IC0+IFNlcS5Db25zICh4LCBhdXggYElkbGUgaSBwb3MpXG4gIGluXG4gIGF1eCBgSWRsZSBwb3MgcG9zXG47O1xuXG5sZXQgc3BsaXQgP3BvcyA/bGVuIHJlIHMgOiBfIFNlcS50ID1cbiAgbGV0IHNlcSA9IHNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgaW5cbiAgbGV0IHJlYyBmaWx0ZXIgc2VxICgpID1cbiAgICBtYXRjaCBzZXEgKCkgd2l0aFxuICAgIHwgU2VxLk5pbCAtPiBTZXEuTmlsXG4gICAgfCBTZXEuQ29ucyAoYERlbGltIF8sIHRsKSAtPiBmaWx0ZXIgdGwgKClcbiAgICB8IFNlcS5Db25zIChgVGV4dCBzLCB0bCkgLT4gU2VxLkNvbnMgKHMsIGZpbHRlciB0bClcbiAgaW5cbiAgZmlsdGVyIHNlcVxuOztcblxubGV0IHNwbGl0X2RlbGltID9wb3MgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGxldCBzZXEgPSBzcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIGluXG4gIGxldCByZWMgZmlsdGVyIH5kZWxpbSBzZXEgKCkgPVxuICAgIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGlmIGRlbGltIHRoZW4gU2VxLkNvbnMgKFwiXCIsIGZ1biAoKSAtPiBTZXEuTmlsKSBlbHNlIFNlcS5OaWxcbiAgICB8IFNlcS5Db25zIChgRGVsaW0gXywgdGwpIC0+XG4gICAgICBpZiBkZWxpbVxuICAgICAgdGhlbiBTZXEuQ29ucyAoXCJcIiwgZnVuICgpIC0+IGZpbHRlciB+ZGVsaW06dHJ1ZSB0bCAoKSlcbiAgICAgIGVsc2UgZmlsdGVyIH5kZWxpbTp0cnVlIHRsICgpXG4gICAgfCBTZXEuQ29ucyAoYFRleHQgcywgdGwpIC0+IFNlcS5Db25zIChzLCBmaWx0ZXIgfmRlbGltOmZhbHNlIHRsKVxuICBpblxuICBmaWx0ZXIgfmRlbGltOnRydWUgc2VxXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJBc3NlcnRfZmFpbHVyZSIsIlJlX0NvbXBpbGUiLCJTdGRsaWJfU3RyaW5nIiwiUmVfR3JvdXAiLCJTdGRsaWIiLCJTdGRsaWJfU2VxIiwiYWxsIiwib3B0IiwibGVuIiwicmUiLCJzIiwicG9zIiwiY3N0X1JlX2FsbCIsImwiLCJsaW1pdCIsImF1eCIsIm9uX21hdGNoIiwicGFyYW0iLCJtYXRjaCIsInN1YnN0ciIsInAxIiwicDIiLCJtYXRjaGVzIiwic3ViIiwic3BsaXRfZnVsbCIsImNzdF9SZV9zcGxpdCIsInN0YXRlIiwiaSIsIm9sZF9pIiwieCIsInRleHQiLCJzcGxpdCIsInNlcSIsImZpbHRlciIsInZhcmlhbnQiLCJ0bCIsInNwbGl0X2RlbGltIiwiZGVsaW0iLCJjc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLElBQUFDLEtBQUFDLEtBQUFDLElBQUFDO0FBQUFBLFFBQUFDLE1DQVEsa0JBQUFDLGFEQVI7QUFBQSxJQ0NFLFlBQWdCO0FBQUEsSUFHaEI7QUFBQTtB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QUFBLFVBQUFnQixVQUFBO0FBQUE7QUFBQSxZQUFBRixRQUFBO0FBQUEsUUFHVjtBQUFBLFFBRUs7QUFBQTtBQUFBO0FBQUEsT0FKTSxpQ0FBQWYsT0FBc0MsU0FBTyxNQUtNO0FBQUE7QUFBQSxNQUZ6RCx5QkFBQUEsT0FBd0IsMEJBQXdCLEdBQWhEO0FBQUE7QUFBQSxTQUFBa0IsS0FKUCxVQUFBekIsSUFBQTtBQUFBLEtBTStELDBCQUF0QiwwQkFBc0I7QUFBQSxJQUFDO0FBQUEsSUFFbEUsbUJEaEhGLDBCQ2dIRTtBQUFBLEdBQXNCO0FBQUEsR0RoSHhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzUzODAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jb3JlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCpcbiAgIFJFIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeVxuXG4gICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVyb21lIFZvdWlsbG9uXG4gICBlbWFpbDogSmVyb21lLlZvdWlsbG9uQHBwcy5qdXNzaWV1LmZyXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGhcbiAgIGxpbmtpbmcgZXhjZXB0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdFxuICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuKilcblxub3BlbiBJbXBvcnRcblxuaW5jbHVkZSBzdHJ1Y3RcbiAgbGV0IGNzZXQgPSBBc3QuY3NldFxuICBsZXQgcmcgYyBjJyA9IGNzZXQgKENzZXQuY3NlcSBjIGMnKVxuICBsZXQgbm90bmwgPSBjc2V0IENzZXQubm90bmxcbiAgbGV0IGxvd2VyID0gY3NldCBDc2V0Lmxvd2VyXG4gIGxldCB1cHBlciA9IGNzZXQgQ3NldC51cHBlclxuICBsZXQgYWxwaGEgPSBjc2V0IENzZXQuYWxwaGFcbiAgbGV0IGRpZ2l0ID0gY3NldCBDc2V0LmNkaWdpdFxuICBsZXQgYWxudW0gPSBjc2V0IENzZXQuYWxudW1cbiAgbGV0IHdvcmRjID0gY3NldCBDc2V0LndvcmRjXG4gIGxldCBhc2NpaSA9IGNzZXQgQ3NldC5hc2NpaVxuICBsZXQgYmxhbmsgPSBjc2V0IENzZXQuYmxhbmtcbiAgbGV0IGNudHJsID0gY3NldCBDc2V0LmNudHJsXG4gIGxldCBncmFwaCA9IGNzZXQgQ3NldC5ncmFwaFxuICBsZXQgcHJpbnQgPSBjc2V0IENzZXQucHJpbnRcbiAgbGV0IHB1bmN0ID0gY3NldCBDc2V0LnB1bmN0XG4gIGxldCBzcGFjZSA9IGNzZXQgQ3NldC5zcGFjZVxuICBsZXQgeGRpZ2l0ID0gY3NldCBDc2V0LnhkaWdpdFxuZW5kXG5cbmluY2x1ZGUgQXN0LkV4cG9ydFxuXG5sZXQgZXhlY19pbnRlcm5hbCA/KHBvcyA9IDApID8obGVuID0gLTEpIH5wYXJ0aWFsIH5ncm91cHMgcmUgcyA9XG4gIENvbXBpbGUubWF0Y2hfc3RyIH5ncm91cHMgfnBhcnRpYWwgcmUgcyB+cG9zIH5sZW5cbjs7XG5cbmxldCBleGVjID9wb3MgP2xlbiByZSBzID1cbiAgbWF0Y2ggZXhlY19pbnRlcm5hbCA/cG9zID9sZW4gfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgd2l0aFxuICB8IE1hdGNoIHN1YnN0ciAtPiBzdWJzdHJcbiAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuOztcblxubGV0IGV4ZWNfb3B0ID9wb3MgP2xlbiByZSBzID1cbiAgbWF0Y2ggZXhlY19pbnRlcm5hbCA/cG9zID9sZW4gfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgd2l0aFxuICB8IE1hdGNoIHN1YnN0ciAtPiBTb21lIHN1YnN0clxuICB8IF8gLT4gTm9uZVxuOztcblxubGV0IGV4ZWNwID8ocG9zID0gMCkgPyhsZW4gPSAtMSkgcmUgcyA9IENvbXBpbGUubWF0Y2hfc3RyX3AgfnBvcyB+bGVuIHJlIHNcblxubGV0IGV4ZWNfcGFydGlhbCA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgfmdyb3VwczpmYWxzZSB+cGFydGlhbDp0cnVlID9wb3MgP2xlbiByZSBzIHdpdGhcbiAgfCBNYXRjaCBfIC0+IGBGdWxsXG4gIHwgUnVubmluZyBfIC0+IGBQYXJ0aWFsXG4gIHwgRmFpbGVkIC0+IGBNaXNtYXRjaFxuOztcblxubGV0IGV4ZWNfcGFydGlhbF9kZXRhaWxlZCA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOnRydWUgP3BvcyA/bGVuIHJlIHMgd2l0aFxuICB8IE1hdGNoIGdyb3VwIC0+IGBGdWxsIGdyb3VwXG4gIHwgUnVubmluZyB7IG5vX21hdGNoX3N0YXJ0c19iZWZvcmUgfSAtPiBgUGFydGlhbCBub19tYXRjaF9zdGFydHNfYmVmb3JlXG4gIHwgRmFpbGVkIC0+IGBNaXNtYXRjaFxuOztcblxubW9kdWxlIE1hcmsgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gUG1hcmsudFxuXG4gIGxldCB0ZXN0IChnIDogR3JvdXAudCkgcCA9IFBtYXJrLlNldC5tZW0gcCAoR3JvdXAucG1hcmtzIGcpXG4gIGxldCBhbGwgKGcgOiBHcm91cC50KSA9IEdyb3VwLnBtYXJrcyBnXG5cbiAgbW9kdWxlIFNldCA9IFBtYXJrLlNldFxuXG4gIGxldCBlcXVhbCA9IFBtYXJrLmVxdWFsXG4gIGxldCBjb21wYXJlID0gUG1hcmsuY29tcGFyZVxuZW5kXG5cbnR5cGUgc3BsaXRfdG9rZW4gPVxuICBbIGBUZXh0IG9mIHN0cmluZ1xuICB8IGBEZWxpbSBvZiBHcm91cC50XG4gIF1cblxubW9kdWxlIEdlbiA9IHN0cnVjdFxuICB0eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG5cbiAgbGV0IGdlbl9vZl9zZXEgKHMgOiAnYSBTZXEudCkgOiAnYSBnZW4gPVxuICAgIGxldCByID0gcmVmIHMgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIG1hdGNoICFyICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBOb25lXG4gICAgICB8IFNlcS5Db25zICh4LCB0bCkgLT5cbiAgICAgICAgciA6PSB0bDtcbiAgICAgICAgU29tZSB4XG4gIDs7XG5cbiAgbGV0IHNwbGl0ID9wb3MgP2xlbiByZSBzIDogXyBnZW4gPSBTZWFyY2guc3BsaXQgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuICBsZXQgc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyA6IF8gZ2VuID0gU2VhcmNoLnNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuICBsZXQgYWxsID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLmFsbCA/cG9zID9sZW4gcmUgcyB8PiBnZW5fb2Zfc2VxXG4gIGxldCBtYXRjaGVzID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLm1hdGNoZXMgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuZW5kXG5cbm1vZHVsZSBHcm91cCA9IEdyb3VwXG5cbigqKiB7MiBEZXByZWNhdGVkIGZ1bmN0aW9uc30gKilcblxubGV0IHNwbGl0X2Z1bGxfc2VxID0gU2VhcmNoLnNwbGl0X2Z1bGxcbmxldCBzcGxpdF9zZXEgPSBTZWFyY2guc3BsaXRcbmxldCBtYXRjaGVzX3NlcSA9IFNlYXJjaC5tYXRjaGVzXG5sZXQgYWxsX3NlcSA9IFNlYXJjaC5hbGxcblxudHlwZSAnYSBnZW4gPSAnYSBHZW4uZ2VuXG5cbmxldCBhbGxfZ2VuID0gR2VuLmFsbFxubGV0IG1hdGNoZXNfZ2VuID0gR2VuLm1hdGNoZXNcbmxldCBzcGxpdF9nZW4gPSBHZW4uc3BsaXRcbmxldCBzcGxpdF9mdWxsX2dlbiA9IEdlbi5zcGxpdF9mdWxsXG5cbnR5cGUgc3Vic3RyaW5ncyA9IEdyb3VwLnRcblxubGV0IGdldCA9IEdyb3VwLmdldFxubGV0IGdldF9vZnMgPSBHcm91cC5vZmZzZXRcbmxldCBnZXRfYWxsID0gR3JvdXAuYWxsXG5sZXQgZ2V0X2FsbF9vZnMgPSBHcm91cC5hbGxfb2Zmc2V0XG5sZXQgdGVzdCA9IEdyb3VwLnRlc3RcblxudHlwZSBtYXJraWQgPSBNYXJrLnRcblxubGV0IG1hcmtlZCA9IE1hcmsudGVzdFxubGV0IG1hcmtfc2V0ID0gTWFyay5hbGxcblxudHlwZSBncm91cHMgPSBHcm91cC50XG5cbm1vZHVsZSBMaXN0ID0gc3RydWN0XG4gIGxldCBsaXN0X29mX3NlcSAocyA6ICdhIFNlcS50KSA6ICdhIGxpc3QgPVxuICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBsIHggLT4geCA6OiBsKSBbXSBzIHw+IExpc3QucmV2XG4gIDs7XG5cbiAgbGV0IGFsbCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5hbGwgP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbiAgbGV0IG1hdGNoZXMgP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2gubWF0Y2hlcyA/cG9zID9sZW4gcmUgcyB8PiBsaXN0X29mX3NlcVxuICBsZXQgc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5zcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIHw+IGxpc3Rfb2Zfc2VxXG4gIGxldCBzcGxpdCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5zcGxpdCA/cG9zID9sZW4gcmUgcyB8PiBsaXN0X29mX3NlcVxuICBsZXQgc3BsaXRfZGVsaW0gP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2guc3BsaXRfZGVsaW0gP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbmVuZFxuXG5pbmNsdWRlIExpc3RcblxuaW5jbHVkZSBzdHJ1Y3RcbiAgb3BlbiBDb21waWxlXG5cbiAgdHlwZSBub25yZWMgcmUgPSByZVxuXG4gIGxldCBjb21waWxlID0gY29tcGlsZVxuICBsZXQgcHBfcmUgPSBwcF9yZVxuICBsZXQgcHJpbnRfcmUgPSBwcF9yZVxuICBsZXQgZ3JvdXBfbmFtZXMgPSBncm91cF9uYW1lc1xuICBsZXQgZ3JvdXBfY291bnQgPSBncm91cF9jb3VudFxuZW5kXG5cbm1vZHVsZSBTZXEgPSBTZWFyY2hcbm1vZHVsZSBTdHJlYW0gPSBDb21waWxlLlN0cmVhbVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJSZV9TZWFyY2giLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3RMYWJlbHMiLCJSZV9Hcm91cCIsIlJlX1BtYXJrIiwiUmVfQ29tcGlsZSIsIlN0ZGxpYiIsIlJlX0NzZXQiLCJSZV9Bc3QiLCJjc2V0IiwicmciLCJjIiwibm90bmwiLCJsb3dlciIsInVwcGVyIiwiYWxwaGEiLCJkaWdpdCIsImFsbnVtIiwid29yZGMiLCJhc2NpaSIsImJsYW5rIiwiY250cmwiLCJncmFwaCIsInByaW50IiwicHVuY3QiLCJzcGFjZSIsInhkaWdpdCIsImluY2x1ZGUiLCJlbXB0eSIsImVwc2lsb24iLCJzdHIiLCJub19jYXNlIiwiY2FzZSQiLCJkaWZmIiwiY29tcGwiLCJyZXBuIiwiaW50ZXIiLCJjaGFyIiwiYW55Iiwic2V0IiwibWFyayIsIm5lc3QiLCJub19ncm91cCIsIndob2xlX3N0cmluZyIsImxlb2wiLCJsb25nZXN0IiwiZ3JlZWR5Iiwibm9uX2dyZWVkeSIsInN0b3AiLCJub3RfYm91bmRhcnkiLCJncm91cCIsIndvcmQiLCJmaXJzdCIsImJvcyIsImJvdyIsImVvdyIsImVvcyIsImJvbCIsInN0YXJ0IiwiZW9sIiwib3B0IiwicmVwIiwicmVwMSIsImFsdCIsInNob3J0ZXN0Iiwic2VxIiwicHAiLCJ3aXRuZXNzIiwiZXhlY19pbnRlcm5hbCIsInBhcnRpYWwiLCJncm91cHMiLCJyZSIsInMiLCJwb3MiLCJsZW4iLCJleGVjIiwibWF0Y2giLCJzdWJzdHIiLCJleGVjX29wdCIsImV4ZWNwIiwiZXhlY19wYXJ0aWFsIiwiZXhlY19wYXJ0aWFsX2RldGFpbGVkIiwibm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSIsIm1hcmtlZCIsImciLCJwIiwibWFya19zZXQiLCJlcXVhbCIsImNvbXBhcmUiLCJnZW5fb2Zfc2VxIiwiciIsInBhcmFtIiwidGwiLCJ4Iiwic3BsaXRfZ2VuIiwic3BsaXRfZnVsbF9nZW4iLCJhbGxfZ2VuIiwibWF0Y2hlc19nZW4iLCJzcGxpdF9mdWxsX3NlcSIsInNwbGl0X3NlcSIsIm1hdGNoZXNfc2VxIiwiYWxsX3NlcSIsImdldCIsImdldF9vZnMiLCJnZXRfYWxsIiwiZ2V0X2FsbF9vZnMiLCJ0ZXN0IiwibGlzdF9vZl9zZXEiLCJsIiwiYWxsIiwibWF0Y2hlcyIsInNwbGl0X2Z1bGwiLCJzcGxpdCIsInNwbGl0X2RlbGltIiwiY29tcGlsZSIsInByaW50X3JlIiwiZ3JvdXBfbmFtZXMiLCJncm91cF9jb3VudCIsIlJlX0NvcmUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsWUFBQUMsR0FBQUMsS0FBQUEsR0MwQnFCLE9BQWdCLEtBQWhCLCtCQUFnQjtBQUFBO0FBQUEsSUFBQUMsUUFDdkI7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsU0FDQztBQUFBLElBQUFDLFVBQWdCO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpDL0IiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNTcyNiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3BhcnNlX2J1ZmZlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsInR5cGUgdCA9XG4gIHsgc3RyIDogc3RyaW5nXG4gIDsgbXV0YWJsZSBwb3MgOiBpbnRcbiAgfVxuXG5leGNlcHRpb24gUGFyc2VfZXJyb3JcblxubGV0IGNyZWF0ZSBzdHIgPSB7IHN0cjsgcG9zID0gMCB9XG5sZXQgdW5nZXQgdCA9IHQucG9zIDwtIHQucG9zIC0gMVxubGV0IGp1bmsgdCA9IHQucG9zIDwtIHQucG9zICsgMVxubGV0IGVvcyB0ID0gdC5wb3MgPSBTdHJpbmcubGVuZ3RoIHQuc3RyXG5sZXQgdGVzdCB0IGMgPSAobm90IChlb3MgdCkpICYmIHQuc3RyLlt0LnBvc10gPSBjXG5cbmxldCB0ZXN0MiB0IGMgYycgPVxuICB0LnBvcyArIDEgPCBTdHJpbmcubGVuZ3RoIHQuc3RyICYmIHQuc3RyLlt0LnBvc10gPSBjICYmIHQuc3RyLlt0LnBvcyArIDFdID0gYydcbjs7XG5cbmxldCBhY2NlcHQgdCBjID1cbiAgbGV0IHIgPSB0ZXN0IHQgYyBpblxuICBpZiByIHRoZW4gdC5wb3MgPC0gdC5wb3MgKyAxO1xuICByXG47O1xuXG5sZXQgZ2V0IHQgPVxuICBsZXQgciA9IHQuc3RyLlt0LnBvc10gaW5cbiAgdC5wb3MgPC0gdC5wb3MgKyAxO1xuICByXG47O1xuXG5sZXQgYWNjZXB0X3MgdCBzJyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMnIGluXG4gIHRyeVxuICAgIGZvciBqID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAoKiBDUi1zb21lZGF5IHJncmluYmVyZzogc3RvcCByZWx5aW5nIG9uIGJvdW5kIGNoZWNrcyAqKVxuICAgICAgdHJ5IGlmIHMnLltqXSA8PiB0LnN0ci5bdC5wb3MgKyBqXSB0aGVuIHJhaXNlX25vdHJhY2UgRXhpdCB3aXRoXG4gICAgICB8IF8gLT4gcmFpc2Vfbm90cmFjZSBFeGl0XG4gICAgZG9uZTtcbiAgICB0LnBvcyA8LSB0LnBvcyArIGxlbjtcbiAgICB0cnVlXG4gIHdpdGhcbiAgfCBFeGl0IC0+IGZhbHNlXG47O1xuXG5sZXQgcmVjIGludGVnZXInIHQgaSA9XG4gIGlmIGVvcyB0XG4gIHRoZW4gU29tZSBpXG4gIGVsc2UgKFxuICAgIG1hdGNoIGdldCB0IHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgZCAtPlxuICAgICAgbGV0IGknID0gKDEwICogaSkgKyAoQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnKSBpblxuICAgICAgaWYgaScgPCBpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBpbnRlZ2VyJyB0IGknXG4gICAgfCBfIC0+XG4gICAgICB1bmdldCB0O1xuICAgICAgU29tZSBpKVxuOztcblxubGV0IGludGVnZXIgdCA9XG4gIGlmIGVvcyB0XG4gIHRoZW4gTm9uZVxuICBlbHNlIChcbiAgICBtYXRjaCBnZXQgdCB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGQgLT4gaW50ZWdlcicgdCAoQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnKVxuICAgIHwgXyAtPlxuICAgICAgdW5nZXQgdDtcbiAgICAgIE5vbmUpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiU3RkbGliIiwiUGFyc2VfZXJyb3IiLCJjcmVhdGUiLCJzdHIiLCJ1bmdldCIsInQiLCJqdW5rIiwiZW9zIiwidGVzdCIsImMiLCJ0ZXN0MiIsImFjY2VwdCIsInIiLCJnZXQiLCJhY2NlcHRfcyIsInMiLCJsZW4iLCJqIiwiZXhuIiwiaW50ZWdlciIsImQiLCJpIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxZQUFBQyxPQUFBQyxLQ09pQixtQkFBZ0I7QUFBQSxZQUFBQyxNQUFBQyxHQUNuQiw4QkFBa0I7QUFBQSxZQUFBQyxLQUFBRCxHQUNuQiw4QkFBa0I7QUFBQSxZQUFBRSxJQUFBRixHQUNuQixvREFBMkI7QUFBQSxZQUFBRyxLQUFBSCxHQUFBSTtBQUFBQSxRQUFBLElBQ25CLGdCQUFPLElBQUs7QUFBQSxJQUFMO0FBQUEsR0FBc0I7QUFBQSxZQUFBQyxNQUFBTCxHQUFBSSxLQUFBQTtBQUFBQSxRQUFBLElBRy9DO0FBQUE7QUFBQTtBQUFBLFVBQW1DO0FBQUEsVUFBYSxJQUFRO0FBQUE7QUFBQSxhQUF4RDtBQUFBO0FBQUEsR0FBOEU7QUFBQSxZQUFBRSxPQUFBTixHQUFBSTtBQUFBQSxRQUFBRyxJQUl0RTtBQUFBLElBQ1IsTUFBVTtBQUFBLElBQ1Y7QUFBQSxHQUFDO0FBQUEsWUFBQUMsSUFBQVI7QUFBQUEsUUFBQU8sSUFJTztBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsR0FBQztBQUFBLFlBQUFFLFNBQUFULEdBQUFVO0FBQUFBLFFBQUFDLE1BSUQ7QUFBQSxJQUNBO0FBQUE7QUFBQTtBQUFBLFVBQUFDLElBQUE7QUFBQTtBQUFBLE9BR0k7QUFBQSxnQkFBaUI7QUFBQSxRQUFWLGdDQUFpQztBQUFBO0FBQUEsYUFBQUMsS0RsQzlDO0FBQUEsZUNrQ007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBR0Y7QUFBQTtBQUFBO0FBQUEsVUFBQUE7QUFBQUEsU0FBQUEsTURyQ0o7QUFBQSwyQkN3Q1k7QUFBQSxLRHhDWjtBQUFBO0FBQUEsR0N3Q2lCO0FBQUEsWUFBQUMsUUFBQWQ7QUFBQUEsSUFrQlosV0FDRTtBQUFBLFFBQUFlLE1BRUc7QUFBQSxJQUFLLHVCQUdULFVBQU87QUFBQSxRQUFBQyxNQUZZLGNBQUFBLElBQUE7QUFBQTtBQUFBLEtBbEJwQixXQUNFO0FBQUEsU0FBQUQsSUFFRztBQUFBLEtBQUsscUJBTVQsVUFBTztBQUFBLFNBQUFDLE1BSlA7QUFBQSxLQUNBLFlBQWU7QUFBQSxLQUFmO0FBQUE7QUFBQSxHQWVLO0FBQUEsR0RqRVgiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNTgyNywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3JlcGxhY2UubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJsZXQgcmVwbGFjZSA/KHBvcyA9IDApID9sZW4gPyhhbGwgPSB0cnVlKSByZSB+ZiBzID1cbiAgaWYgcG9zIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiUmUucmVwbGFjZVwiO1xuICBsZXQgbGltaXQgPVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggc1xuICAgIHwgU29tZSBsIC0+XG4gICAgICBpZiBsIDwgMCB8fCBwb3MgKyBsID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5yZXBsYWNlXCI7XG4gICAgICBwb3MgKyBsXG4gIGluXG4gICgqIGJ1ZmZlciBpbnRvIHdoaWNoIHdlIHdyaXRlIHRoZSByZXN1bHQgKilcbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgKCogaXRlcmF0ZSBvbiBtYXRjaGVkIHN1YnN0cmluZ3MuICopXG4gIGxldCByZWMgaXRlciBwb3Mgb25fbWF0Y2ggPVxuICAgIGlmIHBvcyA8PSBsaW1pdFxuICAgIHRoZW4gKFxuICAgICAgbWF0Y2hcbiAgICAgICAgQ29tcGlsZS5tYXRjaF9zdHIgfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgfnBvcyB+bGVuOihsaW1pdCAtIHBvcylcbiAgICAgIHdpdGhcbiAgICAgIHwgTWF0Y2ggc3Vic3RyIC0+XG4gICAgICAgIGxldCBwMSA9IEdyb3VwLnN0YXJ0X29mZnNldCBzdWJzdHIgMCB8PiBHcm91cC5PZmZzZXQuZ2V0X25vX2NoZWNrIGluXG4gICAgICAgIGxldCBwMiA9IEdyb3VwLnN0b3Bfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgaWYgcG9zID0gcDEgJiYgcDEgPSBwMiAmJiBvbl9tYXRjaFxuICAgICAgICB0aGVuIChcbiAgICAgICAgICAoKiBpZiB3ZSBtYXRjaGVkIGFuIGVtcHR5IHN0cmluZyByaWdodCBhZnRlciBhIG1hdGNoLFxuICAgICAgICAgICAgIHdlIG11c3QgbWFudWFsbHkgYWR2YW5jZSBieSAxICopXG4gICAgICAgICAgaWYgcDIgPCBsaW1pdCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5bcDJdO1xuICAgICAgICAgIGl0ZXIgKHAyICsgMSkgZmFsc2UpXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgICgqIGFkZCBzdHJpbmcgYmV0d2VlbiBwcmV2aW91cyBtYXRjaCBhbmQgY3VycmVudCBtYXRjaCAqKVxuICAgICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGJ1ZiBzIHBvcyAocDEgLSBwb3MpO1xuICAgICAgICAgICgqIHdoYXQgc2hvdWxkIHdlIHJlcGxhY2UgdGhlIG1hdGNoZWQgZ3JvdXAgd2l0aD8gKilcbiAgICAgICAgICBsZXQgcmVwbGFjaW5nID0gZiBzdWJzdHIgaW5cbiAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcmVwbGFjaW5nO1xuICAgICAgICAgIGlmIGFsbFxuICAgICAgICAgIHRoZW5cbiAgICAgICAgICAgICgqIGlmIHdlIG1hdGNoZWQgYW4gZW1wdHkgc3RyaW5nLCB3ZSBtdXN0IG1hbnVhbGx5IGFkdmFuY2UgYnkgMSAqKVxuICAgICAgICAgICAgaXRlclxuICAgICAgICAgICAgICAoaWYgcDEgPSBwMlxuICAgICAgICAgICAgICAgdGhlbiAoXG4gICAgICAgICAgICAgICAgICgqIGEgbm9uIGNoYXIgY291bGQgYmUgcGFzdCB0aGUgZW5kIG9mIHN0cmluZy4gZS5nLiAkICopXG4gICAgICAgICAgICAgICAgIGlmIHAyIDwgbGltaXQgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuW3AyXTtcbiAgICAgICAgICAgICAgICAgcDIgKyAxKVxuICAgICAgICAgICAgICAgZWxzZSBwMilcbiAgICAgICAgICAgICAgKHAxIDw+IHAyKVxuICAgICAgICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYnVmIHMgcDIgKGxpbWl0IC0gcDIpKVxuICAgICAgfCBSdW5uaW5nIF8gLT4gKClcbiAgICAgIHwgRmFpbGVkIC0+IEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGJ1ZiBzIHBvcyAobGltaXQgLSBwb3MpKVxuICBpblxuICBpdGVyIHBvcyBmYWxzZTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuOztcblxubGV0IHJlcGxhY2Vfc3RyaW5nID9wb3MgP2xlbiA/YWxsIHJlIH5ieSBzID0gcmVwbGFjZSA/cG9zID9sZW4gP2FsbCByZSBzIH5mOihmdW4gXyAtPiBieSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiUmVfQ29tcGlsZSIsIlN0ZGxpYl9CdWZmZXIiLCJSZV9Hcm91cCIsIlN0ZGxpYiIsInJlcGxhY2UiLCJsZW4iLCJvcHQiLCJyZSIsInMiLCJwb3MiLCJhbGwiLCJjc3RfUmVfcmVwbGFjZSIsImwiLCJsaW1pdCIsImJ1ZiIsIm9uX21hdGNoIiwibWF0Y2giLCJzdWJzdHIiLCJwMSIsInAyIiwicmVwbGFjaW5nIiwicmVwbGFjZV9zdHJpbmciLCJieSIsInBhcmFtIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxRQUFBLEdBQUFDLEtBQUFDLEtBQUFDLElBQUFWLEdBQUFXO0FBQUFBO0FBQUFBLEtBQUFDLE1DQVk7QUFBQSxLQUFBQyxNQUFBO0FBQUEsS0FBQUMsaUJEQVo7QUFBQSxJQ0NFLFlBQWdCO0FBQUEsSUFDaEI7QUFBQTtBQUFBLE1BQUFDLElBQUE7QUFBQSxVQUlJO0FBQUE7QUFBQSxXQUEyQztBQUFBLFNBQUFDLFFBQzNDO0FBQUE7QUFBQTtBQUFBLFNBQUFBLFFBSFE7QUFBQTtBQUFBLEtBQUFDLE1BTUYsNEJBQVY7QUFBQSxLQUFBTCxRQXNDQTtBQUFBLEtBQUFNLFdBQUE7QUFBQTtBQUFBLEtBbkNFO0FBQUE7QUFBQSxPQUFBQyxRQUdJO0FBQUEsTUFBMEU7QUFBQSxPQThCaEU7QUFBQTtBQUFBO0FBQUEsUUFBQUMsU0E5QmdFO0FBQUEsWUFHakU7QUFBQSxRQUFBQyxLQUFBO0FBQUEsWUFDQTtBQUFBLFFBQUFDLEtBQUE7QUFBQSxPQUNUO0FBQUEsUUFDSztBQUFBLGlCQUdvQztBQUFBLFNBQXBCO0FBQUE7QUFBQSxZQUFBVixRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FHQTtBQUFBLFdBQUFXLFlBRWdCO0FBQUEsT0FDaEI7QUFBQSxPQUErQjtBQUFBLFlBQUFMLGFBSTdCO0FBQUE7QUFBQSxRQUVRO0FBQUEsaUJBRW9DO0FBQUEsU0FBcEI7QUFBQTtBQUFBLFFBQ25CO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FHRjtBQUFBO0FBQUE7QUFBQSxLQUlDLHVDQUNLO0FBQUE7QUFBQTtBQUFBLFlBQUFNLGVBQUFaLEtBQUFKLEtBQUFLLEtBQUFILElBQUFlLElBQUFkO0FBQUFBLElBR3dCLDJDQUFBZSxPQUF5QyxVQUFFLEtBQUM7QUFBQTtBQUFBLEdEcER6RiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM1OTE5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvcG9zaXhfY2xhc3MubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJtb2R1bGUgUmUgPSBDb3JlXG5cbmxldCBvZl9uYW1lID0gZnVuY3Rpb25cbiAgfCBcImFscGhhXCIgLT4gUmUuYWxwaGFcbiAgfCBcImFsbnVtXCIgLT4gUmUuYWxudW1cbiAgfCBcImFzY2lpXCIgLT4gUmUuYXNjaWlcbiAgfCBcImJsYW5rXCIgLT4gUmUuYmxhbmtcbiAgfCBcImNudHJsXCIgLT4gUmUuY250cmxcbiAgfCBcImRpZ2l0XCIgLT4gUmUuZGlnaXRcbiAgfCBcImxvd2VyXCIgLT4gUmUubG93ZXJcbiAgfCBcInByaW50XCIgLT4gUmUucHJpbnRcbiAgfCBcInNwYWNlXCIgLT4gUmUuc3BhY2VcbiAgfCBcInVwcGVyXCIgLT4gUmUudXBwZXJcbiAgfCBcIndvcmRcIiAtPiBSZS53b3JkY1xuICB8IFwicHVuY3RcIiAtPiBSZS5wdW5jdFxuICB8IFwiZ3JhcGhcIiAtPiBSZS5ncmFwaFxuICB8IFwieGRpZ2l0XCIgLT4gUmUueGRpZ2l0XG4gIHwgY2xhc3NfIC0+IGludmFsaWRfYXJnIChcIkludmFsaWQgcGNyZSBjbGFzczogXCIgXiBjbGFzc18pXG47O1xuXG5sZXQgbmFtZXMgPVxuICBbIFwiYWxwaGFcIlxuICA7IFwiYWxudW1cIlxuICA7IFwiYXNjaWlcIlxuICA7IFwiYmxhbmtcIlxuICA7IFwiY250cmxcIlxuICA7IFwiZGlnaXRcIlxuICA7IFwibG93ZXJcIlxuICA7IFwicHJpbnRcIlxuICA7IFwic3BhY2VcIlxuICA7IFwidXBwZXJcIlxuICA7IFwid29yZFwiXG4gIDsgXCJwdW5jdFwiXG4gIDsgXCJncmFwaFwiXG4gIDsgXCJ4ZGlnaXRcIlxuICBdXG47O1xuXG5sZXQgcGFyc2UgYnVmID1cbiAgbGV0IGFjY2VwdCA9IFBhcnNlX2J1ZmZlci5hY2NlcHQgYnVmIGluXG4gIGxldCBhY2NlcHRfcyA9IFBhcnNlX2J1ZmZlci5hY2NlcHRfcyBidWYgaW5cbiAgbWF0Y2ggYWNjZXB0ICc6JyB3aXRoXG4gIHwgZmFsc2UgLT4gTm9uZVxuICB8IHRydWUgLT5cbiAgICBsZXQgY29tcGwgPSBhY2NlcHQgJ14nIGluXG4gICAgbGV0IGNscyA9XG4gICAgICB0cnkgTGlzdC5maW5kIGFjY2VwdF9zIG5hbWVzIHdpdGhcbiAgICAgIHwgTm90X2ZvdW5kIC0+IHJhaXNlIFBhcnNlX2J1ZmZlci5QYXJzZV9lcnJvclxuICAgIGluXG4gICAgaWYgbm90IChhY2NlcHRfcyBcIjpdXCIpIHRoZW4gcmFpc2UgUGFyc2VfYnVmZmVyLlBhcnNlX2Vycm9yO1xuICAgIGxldCBwb3NpeF9jbGFzcyA9IG9mX25hbWUgY2xzIGluXG4gICAgU29tZSAoaWYgY29tcGwgdGhlbiBSZS5jb21wbCBbIHBvc2l4X2NsYXNzIF0gZWxzZSBwb3NpeF9jbGFzcylcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJjc3RfYWxudW0iLCJjc3RfYWxwaGEiLCJjc3RfYXNjaWkiLCJjc3RfYmxhbmsiLCJjc3RfY250cmwiLCJjc3RfZGlnaXQiLCJjc3RfZ3JhcGgiLCJjc3RfbG93ZXIiLCJjc3RfcHJpbnQiLCJjc3RfcHVuY3QiLCJjc3Rfc3BhY2UiLCJjc3RfdXBwZXIiLCJjc3Rfd29yZCIsImNzdF94ZGlnaXQiLCJuYW1lcyIsIlJlX1BhcnNlX2J1ZmZlciIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliIiwiUmVfQ29yZSIsIm9mX25hbWUiLCJjbGFzcyQiLCJzd2l0Y2gkIiwicGFyc2UiLCJidWYiLCJhY2NlcHRfcyIsImNvbXBsIiwiY2xzIiwiZXhuIiwicG9zaXhfY2xhc3MiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLFlBQUFDLFFBQUFDO0FBQUFBLFFBQUFDLFVDRWM7QUFBQTtBQUFBLHNCQU9DO0FBQUEsS0FQRCx5QkFRQztBQUFBLEtBUkQseUJBWUM7QUFBQSxLQVpELHlCQVNDO0FBQUEsS0FURCx5QkFVQztBQUFBLEtBVkQsd0JBV0E7QUFBQSxLQVhBLDBCQWNFO0FBQUE7QUFBQTtBQUFBLEtBZEYseUJBRUM7QUFBQSxLQUZELHlCQUNDO0FBQUEsS0FERCx5QkFHQztBQUFBLEtBSEQseUJBSUM7QUFBQSxLQUpELHlCQUtDO0FBQUEsS0FMRCx5QkFNQztBQUFBLEtBTkQseUJBYUM7QUFBQTtBQUFBLFlBRVc7QUFBQSxJQUFpQztBQUFBO0FBQUEsWUFBQUMsTUFBQUM7QUFBQUEsUUFBQSxJQXNCekQsd0JBQ0E7QUFBQSxhQUFBQyxTQUFBLEdBQWU7QUFBQSxJQURGLGlCQUdGO0FBQUEsUUFBQUMsUUFIRTtBQUFBLElBTVgsUUFBQUMsTUFDTTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLE1EOUNWO0FBQUE7QUFBQSxNQytDcUI7QUFBQSxLRC9DckI7QUFBQTtBQUFBLElDd0NpQjtBQUFBLEtBU2U7QUFBQTtBQUFBLEtBQUFDLGNBQ1Y7QUFBQSxTQUNsQixRQUFvQjtBQUFBLElBQXBCO0FBQUEsR0FBOEQ7QUFBQSxHRG5EbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNjAxOCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3BlcmwubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKlxuICAgUkUgLSBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5XG5cbiAgIENvcHlyaWdodCAoQykgMjAwMSBKZXJvbWUgVm91aWxsb25cbiAgIGVtYWlsOiBKZXJvbWUuVm91aWxsb25AcHBzLmp1c3NpZXUuZnJcblxuICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aFxuICAgbGlua2luZyBleGNlcHRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0XG4gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBXG4qKVxuXG5tb2R1bGUgUmUgPSBDb3JlXG5cbmV4Y2VwdGlvbiBQYXJzZV9lcnJvciA9IFBhcnNlX2J1ZmZlci5QYXJzZV9lcnJvclxuZXhjZXB0aW9uIE5vdF9zdXBwb3J0ZWRcblxubGV0IGFjY19kaWdpdHMgPVxuICBsZXQgcmVjIGxvb3AgYmFzZSBkaWdpdHMgYWNjIGkgPVxuICAgIG1hdGNoIGRpZ2l0cyB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGQgOjogZGlnaXRzIC0+XG4gICAgICBsZXQgYWNjID0gYWNjICsgKGQgKiBpKSBpblxuICAgICAgbGV0IGkgPSBpICogaSBpblxuICAgICAgbG9vcCBiYXNlIGRpZ2l0cyBhY2MgaVxuICBpblxuICBmdW4gfmJhc2UgfmRpZ2l0cyAtPiBsb29wIGJhc2UgZGlnaXRzIDAgMVxuOztcblxubGV0IGNoYXJfb2ZfaW50IHggPVxuICBtYXRjaCBjaGFyX29mX2ludCB4IHdpdGhcbiAgfCB4IC0+IHhcbiAgfCBleGNlcHRpb24gXyAtPiByYWlzZSBQYXJzZV9lcnJvclxuOztcblxudHlwZSBlbGVtID1cbiAgfCBDaGFyIG9mIGNoYXJcbiAgfCBTZXQgb2YgQXN0LnRcblxubGV0IGNoYXJfYiA9IENoYXIgJ1xcMDA4J1xubGV0IGNoYXJfbmV3bGluZSA9IENoYXIgJ1xcbidcbmxldCBjaGFyX2NyID0gQ2hhciAnXFxyJ1xubGV0IGNoYXJfdGFiID0gQ2hhciAnXFx0J1xubGV0IHdvcmRfY2hhciA9IFsgUmUuYWxudW07IFJlLmNoYXIgJ18nIF1cbmxldCB3b3JkID0gU2V0IChSZS5hbHQgd29yZF9jaGFyKVxubGV0IG5vdF93b3JkID0gU2V0IChSZS5hbHQgd29yZF9jaGFyKVxubGV0IHNwYWNlID0gU2V0IFJlLnNwYWNlXG5sZXQgbm90X3NwYWNlID0gU2V0IChSZS5jb21wbCBbIFJlLnNwYWNlIF0pXG5sZXQgZGlnaXQgPSBTZXQgUmUuZGlnaXRcbmxldCBub3RfZGlnaXQgPSBTZXQgKFJlLmNvbXBsIFsgUmUuZGlnaXQgXSlcblxubGV0IHBhcnNlIH5tdWx0aWxpbmUgfmRvbGxhcl9lbmRvbmx5IH5kb3RhbGwgfnVuZ3JlZWR5IHMgPVxuICBsZXQgYnVmID0gUGFyc2VfYnVmZmVyLmNyZWF0ZSBzIGluXG4gIGxldCBhY2NlcHQgPSBQYXJzZV9idWZmZXIuYWNjZXB0IGJ1ZiBpblxuICBsZXQgZW9zICgpID0gUGFyc2VfYnVmZmVyLmVvcyBidWYgaW5cbiAgbGV0IHRlc3QgYyA9IFBhcnNlX2J1ZmZlci50ZXN0IGJ1ZiBjIGluXG4gIGxldCB1bmdldCAoKSA9IFBhcnNlX2J1ZmZlci51bmdldCBidWYgaW5cbiAgbGV0IGdldCAoKSA9IFBhcnNlX2J1ZmZlci5nZXQgYnVmIGluXG4gIGxldCBncmVlZHlfbW9kIHIgPVxuICAgIGxldCBnciA9IGFjY2VwdCAnPycgaW5cbiAgICBsZXQgZ3IgPSBpZiB1bmdyZWVkeSB0aGVuIG5vdCBnciBlbHNlIGdyIGluXG4gICAgaWYgZ3IgdGhlbiBSZS5ub25fZ3JlZWR5IHIgZWxzZSBSZS5ncmVlZHkgclxuICBpblxuICBsZXQgcmVjIHJlZ2V4cCAoKSA9IHJlZ2V4cCcgWyBicmFuY2ggKCkgXVxuICBhbmQgcmVnZXhwJyBsZWZ0ID1cbiAgICBpZiBhY2NlcHQgJ3wnIHRoZW4gcmVnZXhwJyAoYnJhbmNoICgpIDo6IGxlZnQpIGVsc2UgUmUuYWx0IChMaXN0LnJldiBsZWZ0KVxuICBhbmQgYnJhbmNoICgpID0gYnJhbmNoJyBbXVxuICBhbmQgYnJhbmNoJyBsZWZ0ID1cbiAgICBpZiBlb3MgKCkgfHwgdGVzdCAnfCcgfHwgdGVzdCAnKSdcbiAgICB0aGVuIFJlLnNlcSAoTGlzdC5yZXYgbGVmdClcbiAgICBlbHNlIGJyYW5jaCcgKHBpZWNlICgpIDo6IGxlZnQpXG4gIGFuZCBpbl9icmFjZSB+ZiB+aW5pdCA9XG4gICAgbWF0Y2ggYWNjZXB0ICd7JyB3aXRoXG4gICAgfCBmYWxzZSAtPiBOb25lXG4gICAgfCB0cnVlIC0+XG4gICAgICBsZXQgcmVjIGxvb3AgYWNjID1cbiAgICAgICAgaWYgYWNjZXB0ICd9J1xuICAgICAgICB0aGVuIGFjY1xuICAgICAgICBlbHNlIChcbiAgICAgICAgICBsZXQgYWNjID0gZiBhY2MgaW5cbiAgICAgICAgICBsb29wIGFjYylcbiAgICAgIGluXG4gICAgICBTb21lIChsb29wIGluaXQpXG4gIGFuZCBwaWVjZSAoKSA9XG4gICAgbGV0IHIgPSBhdG9tICgpIGluXG4gICAgaWYgYWNjZXB0ICcqJ1xuICAgIHRoZW4gZ3JlZWR5X21vZCAoUmUucmVwIHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJysnXG4gICAgdGhlbiBncmVlZHlfbW9kIChSZS5yZXAxIHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJz8nXG4gICAgdGhlbiBncmVlZHlfbW9kIChSZS5vcHQgcilcbiAgICBlbHNlIGlmIGFjY2VwdCAneydcbiAgICB0aGVuIChcbiAgICAgIG1hdGNoIFBhcnNlX2J1ZmZlci5pbnRlZ2VyIGJ1ZiB3aXRoXG4gICAgICB8IFNvbWUgaSAtPlxuICAgICAgICBsZXQgaiA9IGlmIGFjY2VwdCAnLCcgdGhlbiBQYXJzZV9idWZmZXIuaW50ZWdlciBidWYgZWxzZSBTb21lIGkgaW5cbiAgICAgICAgaWYgbm90IChhY2NlcHQgJ30nKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgICAobWF0Y2ggaiB3aXRoXG4gICAgICAgICB8IFNvbWUgaiB3aGVuIGogPCBpIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICAgICB8IF8gLT4gKCkpO1xuICAgICAgICBncmVlZHlfbW9kIChSZS5yZXBuIHIgaSBqKVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIHVuZ2V0ICgpO1xuICAgICAgICByKVxuICAgIGVsc2UgclxuICBhbmQgYXRvbSAoKSA9XG4gICAgaWYgYWNjZXB0ICcuJ1xuICAgIHRoZW4gaWYgZG90YWxsIHRoZW4gUmUuYW55IGVsc2UgUmUubm90bmxcbiAgICBlbHNlIGlmIGFjY2VwdCAnKCdcbiAgICB0aGVuXG4gICAgICBpZiBhY2NlcHQgJz8nXG4gICAgICB0aGVuXG4gICAgICAgIGlmIGFjY2VwdCAnOidcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbGV0IHIgPSByZWdleHAgKCkgaW5cbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnKScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgcilcbiAgICAgICAgZWxzZSBpZiBhY2NlcHQgJyMnXG4gICAgICAgIHRoZW4gY29tbWVudCAoKVxuICAgICAgICBlbHNlIGlmIGFjY2VwdCAnPCdcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgbGV0IG5hbWUgPSBuYW1lICgpIGluXG4gICAgICAgICAgbGV0IHIgPSByZWdleHAgKCkgaW5cbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnKScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgUmUuZ3JvdXAgfm5hbWUgcilcbiAgICAgICAgZWxzZSByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCByID0gcmVnZXhwICgpIGluXG4gICAgICAgIGlmIG5vdCAoYWNjZXB0ICcpJykgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgUmUuZ3JvdXAgcilcbiAgICBlbHNlIGlmIGFjY2VwdCAnXidcbiAgICB0aGVuIGlmIG11bHRpbGluZSB0aGVuIFJlLmJvbCBlbHNlIFJlLmJvc1xuICAgIGVsc2UgaWYgYWNjZXB0ICckJ1xuICAgIHRoZW4gaWYgbXVsdGlsaW5lIHRoZW4gUmUuZW9sIGVsc2UgaWYgZG9sbGFyX2VuZG9ubHkgdGhlbiBSZS5sZW9sIGVsc2UgUmUuZW9zXG4gICAgZWxzZSBpZiBhY2NlcHQgJ1snXG4gICAgdGhlbiBpZiBhY2NlcHQgJ14nIHRoZW4gUmUuY29tcGwgKGJyYWNrZXQgW10pIGVsc2UgUmUuYWx0IChicmFja2V0IFtdKVxuICAgIGVsc2UgaWYgYWNjZXB0ICdcXFxcJ1xuICAgIHRoZW4gKFxuICAgICAgKCogWFhYXG4gICAgICAgICAtIEJhY2stcmVmZXJlbmNlc1xuICAgICAgICAgLSBcXGN4IChjb250cm9sLXgpLCBcXGRkZFxuICAgICAgKilcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgJ3cnIC0+IFJlLmFsdCBbIFJlLmFsbnVtOyBSZS5jaGFyICdfJyBdXG4gICAgICB8ICdXJyAtPiBSZS5jb21wbCBbIFJlLmFsbnVtOyBSZS5jaGFyICdfJyBdXG4gICAgICB8ICdzJyAtPiBSZS5zcGFjZVxuICAgICAgfCAnUycgLT4gUmUuY29tcGwgWyBSZS5zcGFjZSBdXG4gICAgICB8ICdkJyAtPiBSZS5kaWdpdFxuICAgICAgfCAnRCcgLT4gUmUuY29tcGwgWyBSZS5kaWdpdCBdXG4gICAgICB8ICdiJyAtPiBSZS5hbHQgWyBSZS5ib3c7IFJlLmVvdyBdXG4gICAgICB8ICdCJyAtPiBSZS5ub3RfYm91bmRhcnlcbiAgICAgIHwgJ0EnIC0+IFJlLmJvc1xuICAgICAgfCAnWicgLT4gUmUubGVvbFxuICAgICAgfCAneicgLT4gUmUuZW9zXG4gICAgICB8ICdHJyAtPiBSZS5zdGFydFxuICAgICAgfCAnZScgLT4gUmUuY2hhciAnXFx4MWInXG4gICAgICB8ICdmJyAtPiBSZS5jaGFyICdcXHgwYydcbiAgICAgIHwgJ24nIC0+IFJlLmNoYXIgJ1xcbidcbiAgICAgIHwgJ3InIC0+IFJlLmNoYXIgJ1xccidcbiAgICAgIHwgJ3QnIC0+IFJlLmNoYXIgJ1xcdCdcbiAgICAgIHwgJ1EnIC0+IHF1b3RlIChCdWZmZXIuY3JlYXRlIDEyKVxuICAgICAgfCAnRScgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgIHwgJ3gnIC0+XG4gICAgICAgIGxldCBjMSwgYzIgPVxuICAgICAgICAgIG1hdGNoIGluX2JyYWNlIH5pbml0OltdIH5mOihmdW4gYWNjIC0+IGhleGRpZ2l0ICgpIDo6IGFjYykgd2l0aFxuICAgICAgICAgIHwgU29tZSBbIGMxOyBjMiBdIC0+IGMxLCBjMlxuICAgICAgICAgIHwgU29tZSBbIGMyIF0gLT4gMCwgYzJcbiAgICAgICAgICB8IFNvbWUgXyAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgbGV0IGMxID0gaGV4ZGlnaXQgKCkgaW5cbiAgICAgICAgICAgIGxldCBjMiA9IGhleGRpZ2l0ICgpIGluXG4gICAgICAgICAgICBjMSwgYzJcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGNvZGUgPSAoYzEgKiAxNikgKyBjMiBpblxuICAgICAgICBSZS5jaGFyIChjaGFyX29mX2ludCBjb2RlKVxuICAgICAgfCAnbycgLT5cbiAgICAgICAgKG1hdGNoXG4gICAgICAgICAgIGluX2JyYWNlIH5pbml0OltdIH5mOihmdW4gYWNjIC0+XG4gICAgICAgICAgICAgbWF0Y2ggbWF5YmVfb2N0YWxkaWdpdCAoKSB3aXRoXG4gICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICAgICAgICAgfCBTb21lIHAgLT4gcCA6OiBhY2MpXG4gICAgICAgICB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgICAgIHwgU29tZSBkaWdpdHMgLT4gUmUuY2hhciAoY2hhcl9vZl9pbnQgKGFjY19kaWdpdHMgfmJhc2U6OCB+ZGlnaXRzKSkpXG4gICAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8ICcwJyAuLiAnNycgYXMgbjEgLT5cbiAgICAgICAgbGV0IG4yID0gbWF5YmVfb2N0YWxkaWdpdCAoKSBpblxuICAgICAgICBsZXQgbjMgPSBtYXliZV9vY3RhbGRpZ2l0ICgpIGluXG4gICAgICAgIChtYXRjaCBuMiwgbjMgd2l0aFxuICAgICAgICAgfCBTb21lIG4yLCBTb21lIG4zIC0+XG4gICAgICAgICAgIGxldCBuMSA9IENoYXIuY29kZSBuMSAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgUmUuY2hhciAoY2hhcl9vZl9pbnQgKChuMSAqICg4ICogOCkpICsgKG4yICogOCkgKyBuMykpXG4gICAgICAgICB8IF8sIF8gLT4gcmFpc2UgTm90X3N1cHBvcnRlZClcbiAgICAgIHwgJzgnIC4uICc5JyAtPiByYWlzZSBOb3Rfc3VwcG9ydGVkXG4gICAgICB8IGMgLT4gUmUuY2hhciBjKVxuICAgIGVsc2UgKFxuICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBtYXRjaCBnZXQgKCkgd2l0aFxuICAgICAgfCAnKicgfCAnKycgfCAnPycgfCAneycgfCAnXFxcXCcgLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgIHwgYyAtPiBSZS5jaGFyIGMpXG4gIGFuZCBxdW90ZSBidWYgPVxuICAgIGlmIGFjY2VwdCAnXFxcXCdcbiAgICB0aGVuIChcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgJ0UnIC0+IFJlLnN0ciAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICAgIHwgYyAtPlxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJztcbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgICBxdW90ZSBidWYpXG4gICAgZWxzZSAoXG4gICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKGdldCAoKSk7XG4gICAgICBxdW90ZSBidWYpXG4gIGFuZCBoZXhkaWdpdCAoKSA9XG4gICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgZCAtPiBDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdhJyAuLiAnZicgYXMgZCAtPiBDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgJ0EnIC4uICdGJyBhcyBkIC0+IENoYXIuY29kZSBkIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gIGFuZCBtYXliZV9vY3RhbGRpZ2l0ICgpID1cbiAgICBpZiBlb3MgKClcbiAgICB0aGVuIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICcwJyAuLiAnNycgYXMgZCAtPiBTb21lIChDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnMCcpXG4gICAgICB8IF8gLT4gTm9uZSlcbiAgYW5kIG5hbWUgKCkgPVxuICAgIGlmIGVvcyAoKVxuICAgIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICgnXycgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJykgYXMgYyAtPlxuICAgICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYztcbiAgICAgICAgbmFtZScgYlxuICAgICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yKVxuICBhbmQgbmFtZScgYiA9XG4gICAgaWYgZW9zICgpXG4gICAgdGhlbiByYWlzZSBQYXJzZV9lcnJvclxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgKCdfJyB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JykgYXMgYyAtPlxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgICBuYW1lJyBiXG4gICAgICB8ICc+JyAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgICAgfCBfIC0+IHJhaXNlIFBhcnNlX2Vycm9yKVxuICBhbmQgYnJhY2tldCBzID1cbiAgICBpZiBzIDw+IFtdICYmIGFjY2VwdCAnXSdcbiAgICB0aGVuIHNcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGNoYXIgKCkgd2l0aFxuICAgICAgfCBTZXQgc3QgLT4gYnJhY2tldCAoc3QgOjogcylcbiAgICAgIHwgQ2hhciBjIC0+XG4gICAgICAgIGlmIGFjY2VwdCAnLSdcbiAgICAgICAgdGhlblxuICAgICAgICAgIGlmIGFjY2VwdCAnXSdcbiAgICAgICAgICB0aGVuIFJlLmNoYXIgYyA6OiBSZS5jaGFyICctJyA6OiBzXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnJhY2tldFxuICAgICAgICAgICAgICAobWF0Y2ggY2hhciAoKSB3aXRoXG4gICAgICAgICAgICAgICB8IENoYXIgYycgLT4gUmUucmcgYyBjJyA6OiBzXG4gICAgICAgICAgICAgICB8IFNldCBzdCcgLT4gUmUuY2hhciBjIDo6IFJlLmNoYXIgJy0nIDo6IHN0JyA6OiBzKVxuICAgICAgICBlbHNlIGJyYWNrZXQgKFJlLmNoYXIgYyA6OiBzKSlcbiAgYW5kIGNoYXIgKCkgPVxuICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgIGxldCBjID0gZ2V0ICgpIGluXG4gICAgaWYgYyA9ICdbJ1xuICAgIHRoZW4gKFxuICAgICAgaWYgYWNjZXB0ICc9JyB0aGVuIHJhaXNlIE5vdF9zdXBwb3J0ZWQ7XG4gICAgICBtYXRjaCBQb3NpeF9jbGFzcy5wYXJzZSBidWYgd2l0aFxuICAgICAgfCBTb21lIHNldCAtPiBTZXQgc2V0XG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgaWYgYWNjZXB0ICcuJ1xuICAgICAgICB0aGVuIChcbiAgICAgICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgICBsZXQgYyA9IGdldCAoKSBpblxuICAgICAgICAgIGlmIG5vdCAoYWNjZXB0ICcuJykgdGhlbiByYWlzZSBOb3Rfc3VwcG9ydGVkO1xuICAgICAgICAgIGlmIG5vdCAoYWNjZXB0ICddJykgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgICBDaGFyIGMpXG4gICAgICAgIGVsc2UgQ2hhciBjKVxuICAgIGVsc2UgaWYgYyA9ICdcXFxcJ1xuICAgIHRoZW4gKFxuICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBsZXQgYyA9IGdldCAoKSBpblxuICAgICAgKCogWFhYXG4gICAgICAgICBcXDEyNywgLi4uXG4gICAgICAqKVxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICdiJyAtPiBjaGFyX2JcbiAgICAgIHwgJ24nIC0+IGNoYXJfbmV3bGluZSAoKlhYWCopXG4gICAgICB8ICdyJyAtPiBjaGFyX2NyICgqWFhYKilcbiAgICAgIHwgJ3QnIC0+IGNoYXJfdGFiICgqWFhYKilcbiAgICAgIHwgJ3cnIC0+IHdvcmRcbiAgICAgIHwgJ1cnIC0+IG5vdF93b3JkXG4gICAgICB8ICdzJyAtPiBzcGFjZVxuICAgICAgfCAnUycgLT4gbm90X3NwYWNlXG4gICAgICB8ICdkJyAtPiBkaWdpdFxuICAgICAgfCAnRCcgLT4gbm90X2RpZ2l0XG4gICAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8ICcwJyAuLiAnOScgLT4gcmFpc2UgTm90X3N1cHBvcnRlZFxuICAgICAgfCBfIC0+IENoYXIgYylcbiAgICBlbHNlIENoYXIgY1xuICBhbmQgY29tbWVudCAoKSA9XG4gICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgaWYgYWNjZXB0ICcpJ1xuICAgIHRoZW4gUmUuZXBzaWxvblxuICAgIGVsc2UgKFxuICAgICAgUGFyc2VfYnVmZmVyLmp1bmsgYnVmO1xuICAgICAgY29tbWVudCAoKSlcbiAgaW5cbiAgbGV0IHJlcyA9IHJlZ2V4cCAoKSBpblxuICBpZiBub3QgKGVvcyAoKSkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgcmVzXG47O1xuXG50eXBlIG9wdCA9XG4gIFsgYFVuZ3JlZWR5XG4gIHwgYERvdGFsbFxuICB8IGBEb2xsYXJfZW5kb25seVxuICB8IGBNdWx0aWxpbmVcbiAgfCBgQW5jaG9yZWRcbiAgfCBgQ2FzZWxlc3NcbiAgXVxuXG5sZXQgcmUgPyhvcHRzID0gW10pIHMgPVxuICBsZXQgciA9XG4gICAgcGFyc2VcbiAgICAgIH5tdWx0aWxpbmU6KExpc3QubWVtcSBgTXVsdGlsaW5lIG9wdHMpXG4gICAgICB+ZG9sbGFyX2VuZG9ubHk6KExpc3QubWVtcSBgRG9sbGFyX2VuZG9ubHkgb3B0cylcbiAgICAgIH5kb3RhbGw6KExpc3QubWVtcSBgRG90YWxsIG9wdHMpXG4gICAgICB+dW5ncmVlZHk6KExpc3QubWVtcSBgVW5ncmVlZHkgb3B0cylcbiAgICAgIHNcbiAgaW5cbiAgbGV0IHIgPSBpZiBMaXN0Lm1lbXEgYEFuY2hvcmVkIG9wdHMgdGhlbiBSZS5zZXEgWyBSZS5zdGFydDsgciBdIGVsc2UgciBpblxuICBsZXQgciA9IGlmIExpc3QubWVtcSBgQ2FzZWxlc3Mgb3B0cyB0aGVuIFJlLm5vX2Nhc2UgciBlbHNlIHIgaW5cbiAgclxuOztcblxubGV0IGNvbXBpbGUgPSBSZS5jb21waWxlXG5sZXQgY29tcGlsZV9wYXQgPyhvcHRzID0gW10pIHMgPSBjb21waWxlIChyZSB+b3B0cyBzKVxuXG5sZXQgcmVfcmVzdWx0ID9vcHRzIHMgPVxuICBtYXRjaCByZSA/b3B0cyBzIHdpdGhcbiAgfCBzIC0+IE9rIHNcbiAgfCBleGNlcHRpb24gTm90X3N1cHBvcnRlZCAtPiBFcnJvciBgTm90X3N1cHBvcnRlZFxuICB8IGV4Y2VwdGlvbiBQYXJzZV9lcnJvciAtPiBFcnJvciBgUGFyc2VfZXJyb3Jcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9MaXN0IiwiUmVfQ29yZSIsIlJlX1BhcnNlX2J1ZmZlciIsIlN0ZGxpYl9CdWZmZXIiLCJSZV9Qb3NpeF9jbGFzcyIsIlN0ZGxpYiIsIlBhcnNlX2Vycm9yIiwiTm90X3N1cHBvcnRlZCIsImNoYXJfb2ZfaW50IiwieCIsImV4biIsIndvcmRfY2hhciIsIndvcmQiLCJub3Rfd29yZCIsInNwYWNlIiwibm90X3NwYWNlIiwiZGlnaXQiLCJub3RfZGlnaXQiLCJjaGFyX2IiLCJjaGFyX25ld2xpbmUiLCJjaGFyX2NyIiwiY2hhcl90YWIiLCJyZSIsIm9wdCIsInMiLCJvcHRzIiwidW5ncmVlZHkiLCJkb3RhbGwiLCJkb2xsYXJfZW5kb25seSIsIm11bHRpbGluZSIsImJ1ZiIsImVvcyIsInBhcmFtIiwidGVzdCIsImMiLCJnZXQiLCJncmVlZHlfbW9kIiwiciIsImdyIiwicmVnZXhwIiwibGVmdCIsImJyYW5jaCIsIm1hdGNoIiwiaSIsImoiLCJhdG9tIiwibjEiLCJzd2l0Y2hlciIsImFjYyIsInAiLCJkaWdpdHMiLCJkIiwiYzEiLCJjMiIsImNvZGUiLCJuMiIsIm4zIiwiYiIsIm5hbWUiLCJoZXhkaWdpdCIsIm1heWJlX29jdGFsZGlnaXQiLCJicmFja2V0Iiwic3QiLCJjaGFyIiwic2V0IiwicmVzIiwiY29tcGlsZSIsImNvbXBpbGVfcGF0IiwicmVfcmVzdWx0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFB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S0RyVy9CLHdCQ3NXNkI7QUFBQSxLRHRXN0I7QUFBQTtBQUFBLElDb1dTO0FBQUEsR0FFc0M7QUFBQSxHQTNTSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzRDNDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzY1MjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wY3JlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIFJlID0gQ29yZVxuXG5leGNlcHRpb24gUGFyc2VfZXJyb3IgPSBQZXJsLlBhcnNlX2Vycm9yXG5leGNlcHRpb24gTm90X3N1cHBvcnRlZCA9IFBlcmwuTm90X3N1cHBvcnRlZFxuXG50eXBlIHJlZ2V4cCA9IFJlLnJlXG5cbnR5cGUgZmxhZyA9XG4gIFsgYENBU0VMRVNTXG4gIHwgYE1VTFRJTElORVxuICB8IGBBTkNIT1JFRFxuICB8IGBET1RBTExcbiAgXVxuXG50eXBlIHNwbGl0X3Jlc3VsdCA9XG4gIHwgVGV4dCBvZiBzdHJpbmdcbiAgfCBEZWxpbSBvZiBzdHJpbmdcbiAgfCBHcm91cCBvZiBpbnQgKiBzdHJpbmdcbiAgfCBOb0dyb3VwXG5cbnR5cGUgZ3JvdXBzID0gQ29yZS5Hcm91cC50XG5cbmxldCByZSA/KGZsYWdzID0gW10pIHBhdCA9XG4gIGxldCBvcHRzID1cbiAgICBMaXN0Lm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgYENBU0VMRVNTIC0+IGBDYXNlbGVzc1xuICAgICAgICB8IGBNVUxUSUxJTkUgLT4gYE11bHRpbGluZVxuICAgICAgICB8IGBBTkNIT1JFRCAtPiBgQW5jaG9yZWRcbiAgICAgICAgfCBgRE9UQUxMIC0+IGBEb3RhbGwpXG4gICAgICBmbGFnc1xuICBpblxuICBQZXJsLnJlIH5vcHRzIHBhdFxuOztcblxubGV0IHJlX3Jlc3VsdCA/ZmxhZ3MgcyA9XG4gIG1hdGNoIHJlID9mbGFncyBzIHdpdGhcbiAgfCBzIC0+IE9rIHNcbiAgfCBleGNlcHRpb24gTm90X3N1cHBvcnRlZCAtPiBFcnJvciBgTm90X3N1cHBvcnRlZFxuICB8IGV4Y2VwdGlvbiBQYXJzZV9lcnJvciAtPiBFcnJvciBgUGFyc2VfZXJyb3Jcbjs7XG5cbmxldCByZWdleHAgP2ZsYWdzIHBhdCA9IFJlLmNvbXBpbGUgKHJlID9mbGFncyBwYXQpXG5sZXQgZXh0cmFjdCB+cmV4IHMgPSBSZS5Hcm91cC5hbGwgKFJlLmV4ZWMgcmV4IHMpXG5sZXQgZXhlYyB+cmV4ID9wb3MgcyA9IFJlLmV4ZWMgcmV4ID9wb3Mgc1xubGV0IG5hbWVzIHJleCA9IFJlLmdyb3VwX25hbWVzIHJleCB8PiBMaXN0Lm1hcCBmc3QgfD4gQXJyYXkub2ZfbGlzdFxuXG5sZXQgZ2V0X25hbWVkX3N1YnN0cmluZ19vcHQgcmV4IG5hbWUgcyA9XG4gIGxldCByZWMgbG9vcCA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCAobiwgaSkgOjogcmVtIHdoZW4gbiA9IG5hbWUgLT5cbiAgICAgIChtYXRjaCBSZS5Hcm91cC5nZXRfb3B0IHMgaSB3aXRoXG4gICAgICAgfCBOb25lIC0+IGxvb3AgcmVtXG4gICAgICAgfCBTb21lIF8gYXMgcyAtPiBzKVxuICAgIHwgXyA6OiByZW0gLT4gbG9vcCByZW1cbiAgaW5cbiAgbG9vcCAoUmUuZ3JvdXBfbmFtZXMgcmV4KVxuOztcblxubGV0IGdldF9zdWJzdHJpbmdfb2ZzIHMgaSA9IFJlLkdyb3VwLm9mZnNldCBzIGlcbmxldCBwbWF0Y2ggfnJleCBzID0gUmUuZXhlY3AgcmV4IHNcblxubGV0IHN1YnN0aXR1dGUgfnJleCB+c3Vic3Qgc3RyID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgbGV0IHJlYyBsb29wIHBvcyBvbl9tYXRjaCA9XG4gICAgaWYgUmUuZXhlY3AgfnBvcyByZXggc3RyXG4gICAgdGhlbiAoXG4gICAgICBsZXQgc3MgPSBSZS5leGVjIH5wb3MgcmV4IHN0ciBpblxuICAgICAgbGV0IHN0YXJ0LCBmaW4gPSBSZS5Hcm91cC5vZmZzZXQgc3MgMCBpblxuICAgICAgaWYgb25fbWF0Y2ggJiYgc3RhcnQgPSBwb3MgJiYgc3RhcnQgPSBmaW5cbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiAoKiBFbXB0eSBtYXRjaCBmb2xsb3dpbmcgYSBtYXRjaCAqKVxuICAgICAgICAgICBwb3MgPCBTdHJpbmcubGVuZ3RoIHN0clxuICAgICAgICB0aGVuIChcbiAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiBzdHIuW3Bvc107XG4gICAgICAgICAgbG9vcCAocG9zICsgMSkgZmFsc2UpKVxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBwYXQgPSBSZS5Hcm91cC5nZXQgc3MgMCBpblxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHN0ciBwb3MgKHN0YXJ0IC0gcG9zKTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiAoc3Vic3QgcGF0KTtcbiAgICAgICAgaWYgc3RhcnQgPSBmaW5cbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgaWYgKCogTWFudWFsbHkgYWR2YW5jZSBieSBvbmUgYWZ0ZXIgYW4gZW1wdHkgbWF0Y2ggKilcbiAgICAgICAgICAgICBmaW4gPCBTdHJpbmcubGVuZ3RoIHN0clxuICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgc3RyLltmaW5dO1xuICAgICAgICAgICAgbG9vcCAoZmluICsgMSkgZmFsc2UpKVxuICAgICAgICBlbHNlIGxvb3AgZmluIHRydWUpKVxuICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzdHIgcG9zIChTdHJpbmcubGVuZ3RoIHN0ciAtIHBvcylcbiAgaW5cbiAgbG9vcCAwIGZhbHNlO1xuICBCdWZmZXIuY29udGVudHMgYlxuOztcblxubGV0IHNwbGl0IH5yZXggcyA9XG4gIGxldCByZWMgc3BsaXQgYWNjdSBzdGFydCA9XG4gICAgaWYgc3RhcnQgPSBTdHJpbmcubGVuZ3RoIHNcbiAgICB0aGVuIGFjY3VcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoXG4gICAgICAgIGxldCBnID0gUmUuZXhlYyByZXggcyB+cG9zOnN0YXJ0IGluXG4gICAgICAgIGlmIEdyb3VwLnN0b3AgZyAwID0gc3RhcnQgdGhlbiBSZS5leGVjIHJleCBzIH5wb3M6KHN0YXJ0ICsgMSkgZWxzZSBnXG4gICAgICB3aXRoXG4gICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gU3RyaW5nLnN1YiBzIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMgLSBzdGFydCkgOjogYWNjdVxuICAgICAgfCBnIC0+XG4gICAgICAgIGxldCBuZXh0ID0gR3JvdXAuc3RvcCBnIDAgaW5cbiAgICAgICAgc3BsaXQgKFN0cmluZy5zdWIgcyBzdGFydCAoR3JvdXAuc3RhcnQgZyAwIC0gc3RhcnQpIDo6IGFjY3UpIG5leHQpXG4gIGluXG4gIG1hdGNoIFJlLmV4ZWMgcmV4IHMgfnBvczowIHdpdGhcbiAgfCBnIC0+XG4gICAgTGlzdC5yZXZcbiAgICAgIChpZiBHcm91cC5zdGFydCBnIDAgPSAwXG4gICAgICAgdGhlbiBzcGxpdCBbXSAoR3JvdXAuc3RvcCBnIDApXG4gICAgICAgZWxzZSBzcGxpdCBbIFN0cmluZy5zdWIgcyAwIChHcm91cC5zdGFydCBnIDApIF0gKEdyb3VwLnN0b3AgZyAwKSlcbiAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGlmIHMgPSBcIlwiIHRoZW4gW10gZWxzZSBbIHMgXVxuOztcblxuKCogRnJvbSBQQ1JFICopXG5sZXQgc3RyaW5nX3Vuc2FmZV9zdWIgcyBvZnMgbGVuID1cbiAgbGV0IHIgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gIEJ5dGVzLnVuc2FmZV9ibGl0IHMgb2ZzIHIgMCBsZW47XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgclxuOztcblxubGV0IHF1b3RlIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKGxlbiBsc2wgMSkgaW5cbiAgbGV0IHBvcyA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICB8ICgnXFxcXCcgfCAnXicgfCAnJCcgfCAnLicgfCAnWycgfCAnfCcgfCAnKCcgfCAnKScgfCAnPycgfCAnKicgfCAnKycgfCAneycpIGFzIGMgLT5cbiAgICAgIEJ5dGVzLnVuc2FmZV9zZXQgYnVmICFwb3MgJ1xcXFwnO1xuICAgICAgaW5jciBwb3M7XG4gICAgICBCeXRlcy51bnNhZmVfc2V0IGJ1ZiAhcG9zIGM7XG4gICAgICBpbmNyIHBvc1xuICAgIHwgYyAtPlxuICAgICAgQnl0ZXMudW5zYWZlX3NldCBidWYgIXBvcyBjO1xuICAgICAgaW5jciBwb3NcbiAgZG9uZTtcbiAgc3RyaW5nX3Vuc2FmZV9zdWIgYnVmIDAgIXBvc1xuOztcblxubGV0IGZ1bGxfc3BsaXQgPyhtYXggPSAwKSB+cmV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPSAwXG4gIHRoZW4gW11cbiAgZWxzZSBpZiBtYXggPSAxXG4gIHRoZW4gWyBUZXh0IHMgXVxuICBlbHNlIChcbiAgICBsZXQgcmVzdWx0cyA9IFJlLnNwbGl0X2Z1bGwgcmV4IHMgaW5cbiAgICBsZXQgbWF0Y2hlcyA9XG4gICAgICBMaXN0Lm1hcFxuICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICB8IGBUZXh0IHMgLT4gWyBUZXh0IHMgXVxuICAgICAgICAgIHwgYERlbGltIGQgLT5cbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gUmUuR3JvdXAuYWxsX29mZnNldCBkIGluXG4gICAgICAgICAgICBsZXQgZGVsaW0gPSBSZS5Hcm91cC5nZXQgZCAwIGluXG4gICAgICAgICAgICBEZWxpbSBkZWxpbVxuICAgICAgICAgICAgOjpcbiAgICAgICAgICAgIChsZXQgbCA9IHJlZiBbXSBpblxuICAgICAgICAgICAgIGZvciBpID0gMSB0byBBcnJheS5sZW5ndGggbWF0Y2hlcyAtIDEgZG9cbiAgICAgICAgICAgICAgIGxcbiAgICAgICAgICAgICAgIDo9IChpZiBtYXRjaGVzLihpKSA9ICgtMSwgLTEpIHRoZW4gTm9Hcm91cCBlbHNlIEdyb3VwIChpLCBSZS5Hcm91cC5nZXQgZCBpKSlcbiAgICAgICAgICAgICAgICAgIDo6ICFsXG4gICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICBMaXN0LnJldiAhbCkpXG4gICAgICAgIHJlc3VsdHNcbiAgICBpblxuICAgIExpc3QuY29uY2F0IG1hdGNoZXMpXG47O1xuXG50eXBlIHN1YnN0cmluZ3MgPSBHcm91cC50XG5cbmxldCBnZXRfc3Vic3RyaW5nIHMgaSA9IFJlLkdyb3VwLmdldCBzIGlcblxubGV0IGdldF9uYW1lZF9zdWJzdHJpbmcgcmV4IG5hbWUgcyA9XG4gIG1hdGNoIGdldF9uYW1lZF9zdWJzdHJpbmdfb3B0IHJleCBuYW1lIHMgd2l0aFxuICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgU29tZSBzIC0+IHNcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlJlX0NvcmUiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9CeXRlcyIsIlJlX0dyb3VwIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfQXJyYXkiLCJSZV9QZXJsIiwiUGFyc2VfZXJyb3IiLCJOb3Rfc3VwcG9ydGVkIiwicmUiLCJvcHQiLCJwYXQiLCJmbGFncyIsIm9wdHMiLCJwYXJhbSIsInJlX3Jlc3VsdCIsInMiLCJleG4iLCJyZWdleHAiLCJleHRyYWN0IiwicmV4IiwiZXhlYyIsInBvcyIsIm5hbWVzIiwiZ2V0X25hbWVkX3N1YnN0cmluZ19vcHQiLCJuYW1lIiwibWF0Y2giLCJyZW0iLCJpIiwibiIsImdldF9zdWJzdHJpbmdfb2ZzIiwicG1hdGNoIiwic3Vic3RpdHV0ZSIsInN1YnN0Iiwic3RyIiwiYiIsIm9uX21hdGNoIiwic3MiLCJmaW4iLCJzdGFydCIsInNwbGl0IiwiYWNjdSIsImciLCJxdW90ZSIsImxlbiIsImJ1ZiIsImMiLCJyIiwiZnVsbF9zcGxpdCIsIm1heCIsInJlc3VsdHMiLCJtYXRjaGVzIiwidmFyaWFudCIsImQiLCJkZWxpbSIsImwiLCJnZXRfc3Vic3RyaW5nIiwiZ2V0X25hbWVkX3N1YnN0cmluZyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsWUFBQUMsR0FBQUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQUMsUUNzQk87QUFBQSxLQUFBQztBQUFBQSxPQUVIO0FBQUE7QUFBQSxrQkFBQUM7QUFBQUEsVUFDRTtB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ckMsS0FBQUssTUFBQVQ7QUFBQUEsUUFBQVUsUUFHaEM7QUFBQSxJQUFrQyxZQUM5QjtBQUFBLFFBQUFWLE1BRDhCO0FBQUEsSUFFNUI7QUFBQSxHQUFDO0FBQUEsR0RqTGYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNjgyMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlJlX0NvcmUiLCJSZV9SZXBsYWNlIiwiR3JvdXAiLCJjb21waWxlIiwiZ3JvdXBfY291bnQiLCJncm91cF9uYW1lcyIsImV4ZWMiLCJleGVjX29wdCIsImV4ZWNwIiwiZXhlY19wYXJ0aWFsIiwiZXhlY19wYXJ0aWFsX2RldGFpbGVkIiwiTWFyayIsImFsbCIsImFsbF9nZW4iLCJhbGxfc2VxIiwibWF0Y2hlcyIsIm1hdGNoZXNfZ2VuIiwibWF0Y2hlc19zZXEiLCJzcGxpdCIsInNwbGl0X2RlbGltIiwic3BsaXRfZ2VuIiwic3BsaXRfc2VxIiwic3BsaXRfZnVsbCIsInNwbGl0X2Z1bGxfZ2VuIiwic3BsaXRfZnVsbF9zZXEiLCJTZXEiLCJzdHIiLCJjaGFyIiwiYWx0Iiwic2VxIiwiZW1wdHkiLCJlcHNpbG9uIiwicmVwIiwicmVwMSIsInJlcG4iLCJvcHQiLCJib2wiLCJlb2wiLCJib3ciLCJlb3ciLCJib3MiLCJlb3MiLCJsZW9sIiwic3RhcnQiLCJzdG9wIiwid29yZCIsIm5vdF9ib3VuZGFyeSIsIndob2xlX3N0cmluZyIsImxvbmdlc3QiLCJzaG9ydGVzdCIsImZpcnN0IiwiZ3JlZWR5Iiwibm9uX2dyZWVkeSIsImdyb3VwIiwibm9fZ3JvdXAiLCJuZXN0IiwibWFyayIsInNldCIsInJnIiwiaW50ZXIiLCJkaWZmIiwiY29tcGwiLCJhbnkiLCJub3RubCIsImFsbnVtIiwid29yZGMiLCJhbHBoYSIsImFzY2lpIiwiYmxhbmsiLCJjbnRybCIsImRpZ2l0IiwiZ3JhcGgiLCJsb3dlciIsInByaW50IiwicHVuY3QiLCJzcGFjZSIsInVwcGVyIiwieGRpZ2l0IiwiY2FzZSQiLCJub19jYXNlIiwicHAiLCJwcF9yZSIsInByaW50X3JlIiwid2l0bmVzcyIsImdldCIsImdldF9vZnMiLCJnZXRfYWxsIiwiZ2V0X2FsbF9vZnMiLCJ0ZXN0IiwibWFya2VkIiwibWFya19zZXQiLCJTdHJlYW0iLCJyZXBsYWNlIiwicmVwbGFjZV9zdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxLQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGlCQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzcwMjIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5peC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2RpbV8xIiwiY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zeXNfZXhpdCIsImNhbWxfdW5peF9jbG9zZSIsImNhbWxfdW5peF9nZXRwd25hbSIsImNhbWxfdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlcyIsImNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIiwiY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlIiwiY2FtbF91bml4X3dyaXRlX2JpZ2FycmF5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInVuaXhfZXJyb3JfbWVzc2FnZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX011dGV4IiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfRnVuIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQ2FsbGJhY2siLCJTdGRsaWJfUHJpbnRleGMiLCJjc3RfVW5peF9Vbml4X2Vycm9yIiwiVW5peF9lcnJvciIsImNzdCIsInBhcmFtIiwicyIsImUiLCJtc2ciLCJ4IiwiaGFuZGxlX3VuaXhfZXJyb3IiLCJhcmciLCJleG4iLCJmdW5fbmFtZSIsImVyciIsInJlYWQiLCJmZCIsImJ1ZiIsIm9mcyIsImxlbiIsInJlYWRfYmlnYXJyYXkiLCJ3cml0ZSIsIndyaXRlX2JpZ2FycmF5Iiwic2luZ2xlX3dyaXRlIiwic2luZ2xlX3dyaXRlX2JpZ2FycmF5Iiwid3JpdGVfc3Vic3RyaW5nIiwic2luZ2xlX3dyaXRlX3N1YnN0cmluZyIsIm1hcF9maWxlIiwib3B0Iiwia2luZCIsImxheW91dCIsInNoYXJlZCIsImRpbXMiLCJwb3MiLCJwYXVzZSIsInNpZ3MiLCJzbGVlcCIsImR1cmF0aW9uIiwiaXNfaW5ldDZfYWRkciIsImNzdF8wXzBfMF8wIiwiaW5ldF9hZGRyX2FueSIsImNzdF8xMjdfMF8wXzEiLCJpbmV0X2FkZHJfbG9vcGJhY2siLCJpbmV0Nl9hZGRyX2FueSIsImluZXQ2X2FkZHJfbG9vcGJhY2siLCJkb21haW5fb2Zfc29ja2FkZHIiLCJhIiwicmVjdiIsImZsYWdzIiwicmVjdmZyb20iLCJzZW5kIiwic2VuZHRvIiwiYWRkciIsInNlbmRfc3Vic3RyaW5nIiwic2VuZHRvX3N1YnN0cmluZyIsImdldHNvY2tvcHQiLCJzZXRzb2Nrb3B0IiwidiIsImdldHNvY2tvcHRfaW50Iiwic2V0c29ja29wdF9pbnQiLCJnZXRzb2Nrb3B0X29wdGludCIsInNldHNvY2tvcHRfb3B0aW50IiwiZ2V0c29ja29wdF9mbG9hdCIsInNldHNvY2tvcHRfZmxvYXQiLCJnZXRzb2Nrb3B0X2Vycm9yIiwiY3N0X3RjcCIsImNzdF91ZHAiLCJnZXRhZGRyaW5mbyIsIm5vZGUiLCJzZXJ2aWNlIiwib3B0cyIsIm9wdF9zb2NrdHlwZSIsIm9wdF9wcm90b2NvbCIsInAiLCJnZXRfcG9ydCIsInR5IiwibWF0Y2giLCJwb3J0cyIsImFkZHJlc3NlcyIsInBvcnQiLCJuYW1lIiwiZ2V0bmFtZWluZm8iLCJob3N0bmFtZSIsIndhaXRwaWRfbm9uX2ludHIiLCJwaWQiLCJjcmVhdGVfcHJvY2Vzc19nZW4iLCJjbWQiLCJhcmdzIiwib3B0ZW52IiwibmV3X3N0ZGluIiwibmV3X3N0ZG91dCIsIm5ld19zdGRlcnIiLCJ0b2Nsb3NlIiwiY2xvc2VfYWZ0ZXIiLCJmaWxlX2Rlc2NyX25vdF9zdGFuZGFyZCIsInJlZGlyZWN0aW9ucyIsImNyZWF0ZV9wcm9jZXNzIiwiY3JlYXRlX3Byb2Nlc3NfZW52IiwiZW52IiwiY3N0X2MiLCJjc3RfYmluX3NoIiwic2hlbGwiLCJzeXN0ZW0iLCJwb3Blbl9wcm9jZXNzZXMiLCJwb3Blbl9tdXRleCIsIm9wZW5fcHJvYyIsInByb2ciLCJlbnZvcHQiLCJwcm9jIiwiaW5wdXQiLCJvdXRwdXQiLCJlcnJvciIsInN0ZGluIiwic3RkZXJyIiwib3Blbl9wcm9jZXNzX2FyZ3NfaW4iLCJpbl93cml0ZSIsImluX3JlYWQiLCJpbmNoYW4iLCJzdGRvdXQiLCJvcGVuX3Byb2Nlc3NfYXJnc19vdXQiLCJvdXRfd3JpdGUiLCJvdXRfcmVhZCIsIm91dGNoYW4iLCJvcGVuX3Byb2Nlc3NfYXJncyIsIm9wZW5fcHJvY2Vzc19hcmdzX2Z1bGwiLCJlcnJfd3JpdGUiLCJlcnJfcmVhZCIsImVycmNoYW4iLCJvcGVuX3Byb2Nlc3Nfc2hlbGwiLCJmbiIsIm9wZW5fcHJvY2Vzc19pbiIsIm9wZW5fcHJvY2Vzc19vdXQiLCJvcGVuX3Byb2Nlc3MiLCJvcGVuX3Byb2Nlc3NfZnVsbCIsImZpbmRfcHJvY19pZCIsInJlbW92ZV9wcm9jX2lkIiwicHJvY2Vzc19pbl9waWQiLCJwcm9jZXNzX291dF9waWQiLCJwcm9jZXNzX3BpZCIsInByb2Nlc3NfZnVsbF9waWQiLCJjbG9zZV9wcm9jZXNzX2luIiwiY2xvc2VfcHJvY2Vzc19vdXQiLCJjbG9zZV9wcm9jZXNzIiwiY2xvc2VfcHJvY2Vzc19mdWxsIiwib3Blbl9jb25uZWN0aW9uIiwic29ja2FkZHIiLCJzb2NrIiwic2h1dGRvd25fY29ubmVjdGlvbiIsImVzdGFibGlzaF9zZXJ2ZXIiLCJzZXJ2ZXJfZnVuIiwiaWQiLCJVbml4Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsZ0NBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLDJCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxHQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLFFBQUE7QUFBQTtBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQUEsTUFBQSw0QkFBQTtBQUFBLFVBQUFDLElBQUEsVUFBQUEsTUFBQSxVQUFBQyxJQUFBO0FBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUMsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBLHVCQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUE7QUFBQSxlQUFBQSxNQUFBO0FBQUEsdUJBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBQyxJQUFBLE1BQUFELE1BQUE7QUFBQSxNQUFBLG1FQUFBO0FBQUEsS0FBQTtBQUFBLFlBQUFFLGtCQUFBekIsR0FBQTBCO0FBQUFBLElBQUEsWUFBQTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUEsTUFBQUQsUUFBQTtBQUFBLE1BQUFFLFdBQUE7QUFBQSxNQUFBQyxNQUFBO0FBQUEsVUFBQSx5QkFBQTtBQUFBO0FBQUEsS0FBQTtBQUFBLEtBQUE7QUFBQSxLQUFBO0FBQUEsS0FBQTtBQUFBLE1BQUE7QUFBQSxNQUFBO0FBQUEsTUFBQTtBQUFBO0FBQUEsS0FBQTtBQUFBLGFBQUE7QUFBQSxLQUFBO0FBQUEsS0FBQSwrQkFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBO0FBQUEsWUFBQUMsS0FBQUMsSUFBQUMsS0FBQUMsS0FBQUM7QUFBQUEsSUFBQTtBQUFBLEtBQUEsZ0RBQUE7QUFBQSxJQUFBLHdD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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUE7QUFBQTtBQUFBLEVBQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozODA1MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJ1bml4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiXSwibmFtZXMiOlsicnVudGltZSIsIlVuaXgiLCJVbml4X2Vycm9yIiwiZXJyb3JfbWVzc2FnZSIsImhhbmRsZV91bml4X2Vycm9yIiwiZW52aXJvbm1lbnQiLCJ1bnNhZmVfZW52aXJvbm1lbnQiLCJnZXRlbnYiLCJ1bnNhZmVfZ2V0ZW52IiwicHV0ZW52IiwiZXhlY3YiLCJleGVjdmUiLCJleGVjdnAiLCJleGVjdnBlIiwiZm9yayIsIndhaXQiLCJ3YWl0cGlkIiwic3lzdGVtIiwiZXhpdCIsImdldHBpZCIsImdldHBwaWQiLCJuaWNlIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuZmlsZSIsImNsb3NlIiwiZnN5bmMiLCJyZWFkIiwicmVhZF9iaWdhcnJheSIsIndyaXRlIiwid3JpdGVfYmlnYXJyYXkiLCJzaW5nbGVfd3JpdGUiLCJ3cml0ZV9zdWJzdHJpbmciLCJzaW5nbGVfd3JpdGVfc3Vic3RyaW5nIiwic2luZ2xlX3dyaXRlX2JpZ2FycmF5IiwiaW5fY2hhbm5lbF9vZl9kZXNjciIsIm91dF9jaGFubmVsX29mX2Rlc2NyIiwiZGVzY3Jfb2ZfaW5fY2hhbm5lbCIsImRlc2NyX29mX291dF9jaGFubmVsIiwibHNlZWsiLCJ0cnVuY2F0ZSIsImZ0cnVuY2F0ZSIsInN0YXQiLCJsc3RhdCIsImZzdGF0IiwiaXNhdHR5IiwiTGFyZ2VGaWxlIiwibWFwX2ZpbGUiLCJ1bmxpbmsiLCJyZW5hbWUiLCJsaW5rIiwicmVhbHBhdGgiLCJjaG1vZCIsImZjaG1vZCIsImNob3duIiwiZmNob3duIiwidW1hc2siLCJhY2Nlc3MiLCJkdXAiLCJkdXAyIiwic2V0X25vbmJsb2NrIiwiY2xlYXJfbm9uYmxvY2siLCJzZXRfY2xvc2Vfb25fZXhlYyIsImNsZWFyX2Nsb3NlX29uX2V4ZWMiLCJta2RpciIsInJtZGlyIiwiY2hkaXIiLCJnZXRjd2QiLCJjaHJvb3QiLCJvcGVuZGlyIiwicmVhZGRpciIsInJld2luZGRpciIsImNsb3NlZGlyIiwicGlwZSIsIm1rZmlmbyIsImNyZWF0ZV9wcm9jZXNzIiwiY3JlYXRlX3Byb2Nlc3NfZW52Iiwib3Blbl9wcm9jZXNzX2luIiwib3Blbl9wcm9jZXNzX291dCIsIm9wZW5fcHJvY2VzcyIsIm9wZW5fcHJvY2Vzc19mdWxsIiwib3Blbl9wcm9jZXNzX2FyZ3MiLCJvcGVuX3Byb2Nlc3NfYXJnc19pbiIsIm9wZW5fcHJvY2Vzc19hcmdzX291dCIsIm9wZW5fcHJvY2Vzc19hcmdzX2Z1bGwiLCJwcm9jZXNzX2luX3BpZCIsInByb2Nlc3Nfb3V0X3BpZCIsInByb2Nlc3NfcGlkIiwicHJvY2Vzc19mdWxsX3BpZCIsImNsb3NlX3Byb2Nlc3NfaW4iLCJjbG9zZV9wcm9jZXNzX291dCIsImNsb3NlX3Byb2Nlc3MiLCJjbG9zZV9wcm9jZXNzX2Z1bGwiLCJzeW1saW5rIiwiaGFzX3N5bWxpbmsiLCJyZWFkbGluayIsInNlbGVjdCIsImxvY2tmIiwia2lsbCIsInNpZ3Byb2NtYXNrIiwic2lncGVuZGluZyIsInNpZ3N1c3BlbmQiLCJwYXVzZSIsInRpbWUiLCJnZXR0aW1lb2ZkYXkiLCJnbXRpbWUiLCJsb2NhbHRpbWUiLCJta3RpbWUiLCJhbGFybSIsInNsZWVwIiwic2xlZXBmIiwidGltZXMiLCJ1dGltZXMiLCJnZXRpdGltZXIiLCJzZXRpdGltZXIiLCJnZXR1aWQiLCJnZXRldWlkIiwic2V0dWlkIiwiZ2V0Z2lkIiwiZ2V0ZWdpZCIsInNldGdpZCIsImdldGdyb3VwcyIsInNldGdyb3VwcyIsImluaXRncm91cHMiLCJnZXRsb2dpbiIsImdldHB3bmFtIiwiZ2V0Z3JuYW0iLCJnZXRwd3VpZCIsImdldGdyZ2lkIiwiaW5ldF9hZGRyX29mX3N0cmluZyIsInN0cmluZ19vZl9pbmV0X2FkZHIiLCJpbmV0X2FkZHJfYW55IiwiaW5ldF9hZGRyX2xvb3BiYWNrIiwiaW5ldDZfYWRkcl9hbnkiLCJpbmV0Nl9hZGRyX2xvb3BiYWNrIiwiaXNfaW5ldDZfYWRkciIsInNvY2tldCIsImRvbWFpbl9vZl9zb2NrYWRkciIsInNvY2tldHBhaXIiLCJhY2NlcHQiLCJiaW5kIiwiY29ubmVjdCIsImxpc3RlbiIsInNodXRkb3duIiwiZ2V0c29ja25hbWUiLCJnZXRwZWVybmFtZSIsInJlY3YiLCJyZWN2ZnJvbSIsInNlbmQiLCJzZW5kX3N1YnN0cmluZyIsInNlbmR0byIsInNlbmR0b19zdWJzdHJpbmciLCJnZXRzb2Nrb3B0Iiwic2V0c29ja29wdCIsImdldHNvY2tvcHRfaW50Iiwic2V0c29ja29wdF9pbnQiLCJnZXRzb2Nrb3B0X29wdGludCIsInNldHNvY2tvcHRfb3B0aW50IiwiZ2V0c29ja29wdF9mbG9hdCIsInNldHNvY2tvcHRfZmxvYXQiLCJnZXRzb2Nrb3B0X2Vycm9yIiwib3Blbl9jb25uZWN0aW9uIiwic2h1dGRvd25fY29ubmVjdGlvbiIsImVzdGFibGlzaF9zZXJ2ZXIiLCJnZXRob3N0bmFtZSIsImdldGhvc3RieW5hbWUiLCJnZXRob3N0YnlhZGRyIiwiZ2V0cHJvdG9ieW5hbWUiLCJnZXRwcm90b2J5bnVtYmVyIiwiZ2V0c2VydmJ5bmFtZSIsImdldHNlcnZieXBvcnQiLCJnZXRhZGRyaW5mbyIsImdldG5hbWVpbmZvIiwidGNnZXRhdHRyIiwidGNzZXRhdHRyIiwidGNzZW5kYnJlYWsiLCJ0Y2RyYWluIiwidGNmbHVzaCIsInRjZmxvdyIsInNldHNpZCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzg0MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3R5cGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIENvcmUgdHlwZXMgZm9yIHRoZSBTWCBsYW5ndWFnZS5cblxuICAgIFRoZSBbdmFsdWVdIHN1bSB0eXBlIHJlcHJlc2VudHMgZXZlcnkgcG9zc2libGUgU1ggcnVudGltZSB2YWx1ZS5cbiAgICBPQ2FtbCdzIGFsZ2VicmFpYyB0eXBlcyBtYWtlIHRoZSBDRUsgbWFjaGluZSdzIGZyYW1lIGRpc3BhdGNoIGFcbiAgICBwYXR0ZXJuIG1hdGNoIOKAlCBleGFjdGx5IHdoYXQgdGhlIHNwZWMgZGVzY3JpYmVzLiAqKVxuXG4oKiogezEgU3ltYm9sIGludGVybmluZ30gKilcblxuKCoqIE1hcCBzeW1ib2wgbmFtZXMgdG8gc21hbGwgaW50ZWdlcnMgZm9yIE8oMSkgZW52IGxvb2t1cHMuXG4gICAgVGhlIGludGVybiB0YWJsZSBpcyBwb3B1bGF0ZWQgb25jZSBwZXIgdW5pcXVlIHN5bWJvbCBuYW1lO1xuICAgIGFsbCBzdWJzZXF1ZW50IGVudiBvcGVyYXRpb25zIHVzZSB0aGUgaW50ZWdlciBrZXkuICopXG5cbmxldCBzeW1fdG9faWQgOiAoc3RyaW5nLCBpbnQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0IGlkX3RvX3N5bSA6IChpbnQsIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNTEyXG5sZXQgc3ltX25leHQgID0gcmVmIDBcblxubGV0IGludGVybiBzID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBzeW1fdG9faWQgcyB3aXRoXG4gIHwgU29tZSBpZCAtPiBpZFxuICB8IE5vbmUgLT5cbiAgICBsZXQgaWQgPSAhc3ltX25leHQgaW5cbiAgICBpbmNyIHN5bV9uZXh0O1xuICAgIEhhc2h0YmwucmVwbGFjZSBzeW1fdG9faWQgcyBpZDtcbiAgICBIYXNodGJsLnJlcGxhY2UgaWRfdG9fc3ltIGlkIHM7XG4gICAgaWRcblxubGV0IHVuaW50ZXJuIGlkID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBpZF90b19zeW0gaWQgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiBcIjxzeW06XCIgXiBzdHJpbmdfb2ZfaW50IGlkIF4gXCI+XCJcblxuXG4oKiogezEgRW52aXJvbm1lbnR9ICopXG5cbigqKiBMZXhpY2FsIHNjb3BlIGNoYWluLiAgRWFjaCBmcmFtZSBob2xkcyBhIG11dGFibGUgYmluZGluZyB0YWJsZVxuICAgIGtleWVkIGJ5IGludGVybmVkIHN5bWJvbCBJRHMgZm9yIGZhc3QgbG9va3VwLiAqKVxudHlwZSBlbnYgPSB7XG4gIGJpbmRpbmdzIDogKGludCwgdmFsdWUpIEhhc2h0YmwudDtcbiAgcGFyZW50ICAgOiBlbnYgb3B0aW9uO1xufVxuXG4oKiogezEgVmFsdWVzfSAqKVxuXG5hbmQgdmFsdWUgPVxuICB8IE5pbFxuICB8IEJvb2wgICAgb2YgYm9vbFxuICB8IEludGVnZXIgb2YgaW50ICAgICgqKiBFeGFjdCBpbnRlZ2VyIOKAlCBkaXN0aW5jdCBmcm9tIGluZXhhY3QgZmxvYXQuICopXG4gIHwgTnVtYmVyICBvZiBmbG9hdCAgKCoqIEluZXhhY3QgZmxvYXQuICopXG4gIHwgU3RyaW5nICBvZiBzdHJpbmdcbiAgfCBTeW1ib2wgb2Ygc3RyaW5nXG4gIHwgS2V5d29yZCBvZiBzdHJpbmdcbiAgfCBMaXN0ICAgb2YgdmFsdWUgbGlzdFxuICB8IERpY3QgICBvZiBkaWN0XG4gIHwgTGFtYmRhIG9mIGxhbWJkYVxuICB8IENvbXBvbmVudCBvZiBjb21wb25lbnRcbiAgfCBJc2xhbmQgb2YgaXNsYW5kXG4gIHwgTWFjcm8gIG9mIG1hY3JvXG4gIHwgVGh1bmsgIG9mIHZhbHVlICogZW52XG4gIHwgQ29udGludWF0aW9uIG9mICh2YWx1ZSAtPiB2YWx1ZSkgKiBkaWN0IG9wdGlvblxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiBvZiB2YWx1ZSBsaXN0ICogaW50ICAoKiogVW5kZWxpbWl0ZWQgY29udGludWF0aW9uIOKAlCBjYXB0dXJlZCBrb250IGZyYW1lcyArIHdpbmRlcnMgZGVwdGggYXQgY2FwdHVyZSAqKVxuICB8IE5hdGl2ZUZuIG9mIHN0cmluZyAqICh2YWx1ZSBsaXN0IC0+IHZhbHVlKVxuICB8IFNpZ25hbCBvZiBzaWduYWxcbiAgfCBSYXdIVE1MIG9mIHN0cmluZ1xuICB8IFNwcmVhZCBvZiAoc3RyaW5nICogdmFsdWUpIGxpc3RcbiAgfCBTeEV4cHIgb2Ygc3RyaW5nICAoKiogT3BhcXVlIFNYIHdpcmUtZm9ybWF0IHN0cmluZyDigJQgYXNlciBvdXRwdXQuICopXG4gIHwgRW52IG9mIGVudiAgKCoqIEZpcnN0LWNsYXNzIGVudmlyb25tZW50IOKAlCB1c2VkIGJ5IENFSyBtYWNoaW5lIHN0YXRlIGRpY3RzLiAqKVxuICB8IExpc3RSZWYgb2YgdmFsdWUgbGlzdCByZWYgICgqKiBNdXRhYmxlIGxpc3Qg4oCUIEpTLXN0eWxlIGFycmF5IGZvciBhcHBlbmQhICopXG4gIHwgQ2VrU3RhdGUgb2YgY2VrX3N0YXRlICAoKiogT3B0aW1pemVkIENFSyBtYWNoaW5lIHN0YXRlIOKAlCBhdm9pZHMgRGljdCBhbGxvY2F0aW9uLiAqKVxuICB8IENla0ZyYW1lIG9mIGNla19mcmFtZSAgKCoqIE9wdGltaXplZCBDRUsgY29udGludWF0aW9uIGZyYW1lLiAqKVxuICB8IFZtQ2xvc3VyZSBvZiB2bV9jbG9zdXJlICAoKiogVk0tY29tcGlsZWQgY2xvc3VyZSDigJQgY2FsbGFibGUgd2l0aGluIHRoZSBWTSB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgVk0uICopXG4gIHwgVm1GcmFtZSBvZiB2bV9mcmFtZSAgKCoqIFZNIGNhbGwgZnJhbWUg4oCUIG9uZSBwZXIgZnVuY3Rpb24gaW52b2NhdGlvbi4gKilcbiAgfCBWbU1hY2hpbmUgb2Ygdm1fbWFjaGluZSAgKCoqIFZNIHN0YXRlIOKAlCBzdGFjaywgZnJhbWVzLCBnbG9iYWxzLiAqKVxuICB8IFJlY29yZCBvZiByZWNvcmQgICgqKiBSN1JTIHJlY29yZCDigJQgb3BhcXVlLCBnZW5lcmF0aXZlLCBmaWVsZC1pbmRleGVkLiAqKVxuICB8IFBhcmFtZXRlciBvZiBwYXJhbWV0ZXIgICgqKiBSN1JTIHBhcmFtZXRlciDigJQgZHluYW1pYyBiaW5kaW5nIHZpYSBrb250LXN0YWNrIHByb3ZpZGUgZnJhbWVzLiAqKVxuICB8IFZlY3RvciBvZiB2YWx1ZSBhcnJheSAgKCoqIFI3UlMgdmVjdG9yIOKAlCBtdXRhYmxlIGZpeGVkLXNpemUgYXJyYXkuICopXG4gIHwgU3RyaW5nQnVmZmVyIG9mIEJ1ZmZlci50ICAoKiogTXV0YWJsZSBzdHJpbmcgYnVmZmVyIOKAlCBPKDEpIGFtb3J0aXplZCBhcHBlbmQuICopXG4gIHwgSGFzaFRhYmxlIG9mICh2YWx1ZSwgdmFsdWUpIEhhc2h0YmwudCAgKCoqIE11dGFibGUgaGFzaCB0YWJsZSB3aXRoIGFyYml0cmFyeSBrZXlzLiAqKVxuICB8IENoYXIgb2YgaW50ICAoKiogVW5pY29kZSBjb2RlcG9pbnQg4oCUIFI3UlMgY2hhciB0eXBlLiAqKVxuICB8IEVvZiAgICAgICAgICAgICgqKiBFT0Ygc2VudGluZWwg4oCUIHJldHVybmVkIGJ5IHJlYWQtY2hhciBldGMuIGF0IGVuZCBvZiBpbnB1dC4gKilcbiAgfCBQb3J0IG9mIHN4X3BvcnQgICgqKiBTdHJpbmcgcG9ydCDigJQgaW5wdXQgKHN0cmluZyBjdXJzb3IpIG9yIG91dHB1dCAoYnVmZmVyKS4gKilcbiAgfCBSYXRpb25hbCBvZiBpbnQgKiBpbnQgICgqKiBFeGFjdCByYXRpb25hbDogbnVtZXJhdG9yLCBkZW5vbWluYXRvciAocmVkdWNlZCwgZGVub20+MCkuICopXG4gIHwgU3hTZXQgb2YgKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCAgKCoqIE11dGFibGUgc2V0IGtleWVkIGJ5IGluc3BlY3QodmFsdWUpLiAqKVxuICB8IFN4UmVnZXhwIG9mIHN0cmluZyAqIHN0cmluZyAqIFJlLnJlICAoKiogUmVnZXhwOiBzb3VyY2UsIGZsYWdzLCBjb21waWxlZC4gKilcbiAgfCBTeEJ5dGV2ZWN0b3Igb2YgYnl0ZXMgICgqKiBNdXRhYmxlIGJ5dGV2ZWN0b3Ig4oCUIFI3UlMgYnl0ZXZlY3RvciB0eXBlLiAqKVxuICB8IEFkdFZhbHVlIG9mIGFkdF92YWx1ZSAgKCoqIE5hdGl2ZSBhbGdlYnJhaWMgZGF0YSB0eXBlIGluc3RhbmNlIOKAlCBvcGFxdWUgc3VtIHR5cGUuICopXG5cbigqKiBBbGdlYnJhaWMgZGF0YSB0eXBlIGluc3RhbmNlIOKAlCBwcm9kdWNlZCBieSBbZGVmaW5lLXR5cGVdIGNvbnN0cnVjdG9ycy5cbiAgICBbYXZfdHlwZV0gaXMgdGhlIHR5cGUgbmFtZSAoZS5nLiBcIk1heWJlXCIpLCBbYXZfY3Rvcl0gaXMgdGhlIGNvbnN0cnVjdG9yXG4gICAgbmFtZSAoZS5nLiBcIkp1c3RcIiksIFthdl9maWVsZHNdIGFyZSB0aGUgcG9zaXRpb25hbCBmaWVsZCB2YWx1ZXMuICopXG5hbmQgYWR0X3ZhbHVlID0ge1xuICBhdl90eXBlICAgOiBzdHJpbmc7XG4gIGF2X2N0b3IgICA6IHN0cmluZztcbiAgYXZfZmllbGRzIDogdmFsdWUgYXJyYXk7XG59XG5cbigqKiBTdHJpbmcgaW5wdXQgcG9ydDogc291cmNlIHN0cmluZyArIG11dGFibGUgY3Vyc29yIHBvc2l0aW9uLiAqKVxuYW5kIHN4X3BvcnRfa2luZCA9XG4gIHwgUG9ydElucHV0IG9mIHN0cmluZyAqIGludCByZWZcbiAgfCBQb3J0T3V0cHV0IG9mIEJ1ZmZlci50XG5cbmFuZCBzeF9wb3J0ID0ge1xuICBtdXRhYmxlIHNwX2Nsb3NlZCA6IGJvb2w7XG4gIHNwX2tpbmQgOiBzeF9wb3J0X2tpbmQ7XG59XG5cbigqKiBDRUsgbWFjaGluZSBzdGF0ZSDigJQgcmVjb3JkIGluc3RlYWQgb2YgRGljdCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgNSBmaWVsZHMgw5cgNTVLIHN0ZXBzL3NlYyA9IDI3NUsgSGFzaHRibCBhbGxvY2F0aW9ucy9zZWMgZWxpbWluYXRlZC4gKilcbmFuZCBjZWtfc3RhdGUgPSB7XG4gIGNzX2NvbnRyb2wgOiB2YWx1ZTtcbiAgY3NfZW52ICAgICA6IHZhbHVlO1xuICBjc19rb250ICAgIDogdmFsdWU7XG4gIGNzX3BoYXNlICAgOiBzdHJpbmc7XG4gIGNzX3ZhbHVlICAgOiB2YWx1ZTtcbn1cblxuKCoqIENFSyBjb250aW51YXRpb24gZnJhbWUg4oCUIHRhZ2dlZCByZWNvcmQgY292ZXJpbmcgYWxsIDI5IGZyYW1lIHR5cGVzLlxuICAgIEZpZWxkcyBhcmUgbmFtZWQgZ2VuZXJpY2FsbHk7IG5vdCBhbGwgYXJlIHVzZWQgYnkgZXZlcnkgZnJhbWUgdHlwZS5cbiAgICBFbGltaW5hdGVzIH4xMDBLIEhhc2h0YmwgYWxsb2NhdGlvbnMgcGVyIHBhZ2UgcmVuZGVyLiAqKVxuYW5kIGNla19mcmFtZSA9IHtcbiAgY2ZfdHlwZSAgICAgIDogc3RyaW5nOyAgICAgICAgKCogZnJhbWUgdHlwZSB0YWc6IFwiaWZcIiwgXCJsZXRcIiwgXCJjYWxsXCIsIGV0Yy4gKilcbiAgY2ZfZW52ICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogZW52aXJvbm1lbnQg4oCUIGV2ZXJ5IGZyYW1lIGhhcyB0aGlzICopXG4gIGNmX25hbWUgICAgICA6IHZhbHVlOyAgICAgICAgICgqIGxldC9kZWZpbmUvc2V0L3Njb3BlOiBiaW5kaW5nIG5hbWUgKilcbiAgY2ZfYm9keSAgICAgIDogdmFsdWU7ICAgICAgICAgKCogd2hlbi9sZXQ6IGJvZHkgZXhwciAqKVxuICBtdXRhYmxlIGNmX3JlbWFpbmluZyA6IHZhbHVlOyAgKCogYmVnaW4vY29uZC9tYXAvZXRjOiByZW1haW5pbmcgZXhwcnMgKilcbiAgY2ZfZiAgICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbC9tYXAvZmlsdGVyL2V0YzogZnVuY3Rpb24gKilcbiAgY2ZfYXJncyAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbDogcmF3IGFyZ3M7IGFyZzogZXZhbGVkIGFyZ3MgKilcbiAgbXV0YWJsZSBjZl9yZXN1bHRzICAgOiB2YWx1ZTsgKCogbWFwL2ZpbHRlci9kaWN0OiBhY2N1bXVsYXRlZCByZXN1bHRzOyBwcm92aWRlOiBzdWJzY3JpYmVycyAqKVxuICBtdXRhYmxlIGNmX2V4dHJhIDogdmFsdWU7ICAgICAoKiBleHRyYSBmaWVsZDogc2NoZW1lLCBpbmRleGVkLCB2YWx1ZSwgcGhhc2UsIGV0Yy4gKilcbiAgbXV0YWJsZSBjZl9leHRyYTIgICAgOiB2YWx1ZTsgKCogc2Vjb25kIGV4dHJhOiBlbWl0dGVkLCBldGMuICopXG59XG5cbigqKiBNdXRhYmxlIHN0cmluZy1rZXllZCB0YWJsZSAoU1ggZGljdHMgc3VwcG9ydCBbZGljdC1zZXQhXSkuICopXG5hbmQgZGljdCA9IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnRcblxuYW5kIGxhbWJkYSA9IHtcbiAgbF9wYXJhbXMgIDogc3RyaW5nIGxpc3Q7XG4gIGxfYm9keSAgICA6IHZhbHVlO1xuICBsX2Nsb3N1cmUgOiBlbnY7XG4gIG11dGFibGUgbF9uYW1lIDogc3RyaW5nIG9wdGlvbjtcbiAgbXV0YWJsZSBsX2NvbXBpbGVkIDogdm1fY2xvc3VyZSBvcHRpb247ICAoKiogTGF6eSBKSVQgY2FjaGUgKilcbiAgbXV0YWJsZSBsX2NhbGxfY291bnQgOiBpbnQ7ICAgICAgICAgICAgICAoKiogVGllcmVkLWNvbXBpbGF0aW9uIGNvdW50ZXIg4oCUIEpJVCBhZnRlciB0aHJlc2hvbGQgY2FsbHMgKilcbiAgbF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiogVW5pcXVlIGlkZW50aXR5IGZvciBMUlUgY2FjaGUgdHJhY2tpbmcgKilcbn1cblxuYW5kIGNvbXBvbmVudCA9IHtcbiAgY19uYW1lICAgICAgICAgOiBzdHJpbmc7XG4gIGNfcGFyYW1zICAgICAgIDogc3RyaW5nIGxpc3Q7XG4gIGNfaGFzX2NoaWxkcmVuIDogYm9vbDtcbiAgY19ib2R5ICAgICAgICAgOiB2YWx1ZTtcbiAgY19jbG9zdXJlICAgICAgOiBlbnY7XG4gIGNfYWZmaW5pdHkgICAgIDogc3RyaW5nOyAgKCoqIFwiYXV0b1wiIHwgXCJjbGllbnRcIiB8IFwic2VydmVyXCIgKilcbiAgbXV0YWJsZSBjX2ZpbGUgOiBzdHJpbmcgb3B0aW9uOyAgKCoqIFNvdXJjZSBmaWxlIHBhdGggKilcbiAgbXV0YWJsZSBjX2NvbXBpbGVkIDogdm1fY2xvc3VyZSBvcHRpb247ICAoKiogTGF6eSBKSVQgY2FjaGUgKilcbn1cblxuYW5kIGlzbGFuZCA9IHtcbiAgaV9uYW1lICAgICAgICAgOiBzdHJpbmc7XG4gIGlfcGFyYW1zICAgICAgIDogc3RyaW5nIGxpc3Q7XG4gIGlfaGFzX2NoaWxkcmVuIDogYm9vbDtcbiAgaV9ib2R5ICAgICAgICAgOiB2YWx1ZTtcbiAgaV9jbG9zdXJlICAgICAgOiBlbnY7XG4gIG11dGFibGUgaV9maWxlIDogc3RyaW5nIG9wdGlvbjsgICgqKiBTb3VyY2UgZmlsZSBwYXRoICopXG4gIG11dGFibGUgaV9jb21waWxlZCA6IHZtX2Nsb3N1cmUgb3B0aW9uOyAgKCoqIExhenkgSklUIGNhY2hlICopXG59XG5cbmFuZCBtYWNybyA9IHtcbiAgbV9wYXJhbXMgICAgIDogc3RyaW5nIGxpc3Q7XG4gIG1fcmVzdF9wYXJhbSA6IHN0cmluZyBvcHRpb247XG4gIG1fYm9keSAgICAgICA6IHZhbHVlO1xuICBtX2Nsb3N1cmUgICAgOiBlbnY7XG4gIG1fbmFtZSAgICAgICA6IHN0cmluZyBvcHRpb247XG59XG5cbmFuZCBzaWduYWwgPSB7XG4gIG11dGFibGUgc192YWx1ZSAgICAgICA6IHZhbHVlO1xuICBtdXRhYmxlIHNfc3Vic2NyaWJlcnMgOiAodW5pdCAtPiB1bml0KSBsaXN0O1xuICBtdXRhYmxlIHNfZGVwcyAgICAgICAgOiBzaWduYWwgbGlzdDtcbn1cblxuKCoqIFI3UlMgcmVjb3JkIHR5cGUgZGVzY3JpcHRvciDigJQgb25lIHBlciBbZGVmaW5lLXJlY29yZC10eXBlXSBjYWxsLlxuICAgIFN0b3JlZCBpbiBbcnRkX3RhYmxlXTsgY2xvc3VyZXMgY2FwdHVyZSBvbmx5IHRoZSBpbnRlZ2VyIHVpZC4gKilcbmFuZCByZWNvcmRfdHlwZSA9IHtcbiAgcnRfbmFtZSAgICAgOiBzdHJpbmc7ICAgICAgICgqKiBlLmcuLCBcInBvaW50XCIgKilcbiAgcnRfdWlkICAgICAgOiBpbnQ7ICAgICAgICAgICgqKiB1bmlxdWUgaWRlbnRpdHkg4oCUIGdlbmVyYXRpdmUgKilcbiAgcnRfZmllbGRzICAgOiBzdHJpbmcgYXJyYXk7ICgqKiBmaWVsZCBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlciAqKVxuICBydF9jdG9yX21hcCA6IGludCBhcnJheTsgICAgKCoqIGN0b3JfbWFwW2ldID0gZmllbGQgaW5kZXggZm9yIGN0b3IgcGFyYW0gaSAqKVxufVxuXG4oKiogUjdSUyByZWNvcmQgaW5zdGFuY2Ug4oCUIG9wYXF1ZSwgYWNjZXNzZWQgb25seSB0aHJvdWdoIGdlbmVyYXRlZCBmdW5jdGlvbnMuICopXG5hbmQgcmVjb3JkID0ge1xuICByX3R5cGUgICA6IHJlY29yZF90eXBlO1xuICByX2ZpZWxkcyA6IHZhbHVlIGFycmF5OyAgICAgKCoqIG11dGFibGUgdmlhIEFycmF5LnNldCBmb3IgcmVjb3JkLXNldCEgKilcbn1cblxuKCoqIFI3UlMgcGFyYW1ldGVyIOKAlCBkeW5hbWljIGJpbmRpbmcgdmlhIHByb3ZpZGUgZnJhbWVzIG9uIHRoZSBrb250IHN0YWNrLlxuICAgIENhbGxpbmcgWyhwYXJhbSldIHNlYXJjaGVzIGtvbnQgZm9yIHRoZSBuZWFyZXN0IHByb3ZpZGUgZnJhbWUga2V5ZWRcbiAgICBieSBbcG1fdWlkXTsgaWYgbm90IGZvdW5kIHJldHVybnMgW3BtX2RlZmF1bHRdLiAqKVxuYW5kIHBhcmFtZXRlciA9IHtcbiAgcG1fdWlkICAgICAgIDogc3RyaW5nOyAgICAgICgqKiB1bmlxdWUgSUQg4oCUIHVzZWQgYXMgcHJvdmlkZSBmcmFtZSBrZXkgKilcbiAgcG1fZGVmYXVsdCAgIDogdmFsdWU7ICAgICAgICgqKiBpbml0aWFsL2RlZmF1bHQgdmFsdWUgKilcbiAgcG1fY29udmVydGVyIDogdmFsdWUgb3B0aW9uOyAoKiogb3B0aW9uYWwgY29udmVydGVyIGZ1bmN0aW9uICopXG59XG5cbigqKiB7MSBCeXRlY29kZSBWTSB0eXBlc31cblxuICAgIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtLm1sKSBiZWNhdXNlIFt2bV9jb2RlLmNvbnN0YW50c10gcmVmZXJlbmNlc1xuICAgIFt2YWx1ZV0gYW5kIFtsYW1iZGEubF9jb21waWxlZF0gcmVmZXJlbmNlcyBbdm1fY2xvc3VyZV0g4oCUIG11dHVhbFxuICAgIHJlY3Vyc2lvbiByZXF1aXJlcyBhbGwgdHlwZXMgaW4gb25lIFthbmRdIGNoYWluLiAqKVxuXG4oKiogQ29tcGlsZWQgZnVuY3Rpb24gYm9keSDigJQgYnl0ZWNvZGUgKyBjb25zdGFudCBwb29sLiAqKVxuYW5kIHZtX2NvZGUgPSB7XG4gIHZjX2FyaXR5ICAgICA6IGludDtcbiAgdmNfcmVzdF9hcml0eSA6IGludDsgICgqKiAtMSA9IG5vICZyZXN0OyA+PSAwID0gbnVtYmVyIG9mIHBvc2l0aW9uYWwgcGFyYW1zIGJlZm9yZSAmcmVzdCAqKVxuICB2Y19sb2NhbHMgICAgOiBpbnQ7XG4gIHZjX2J5dGVjb2RlICA6IGludCBhcnJheTtcbiAgdmNfY29uc3RhbnRzIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgdmNfYnl0ZWNvZGVfbGlzdCAgOiB2YWx1ZSBsaXN0IG9wdGlvbjsgICgqKiBMYXp5IGNhY2hlIGZvciB0cmFuc3BpbGVkIFZNICopXG4gIG11dGFibGUgdmNfY29uc3RhbnRzX2xpc3QgOiB2YWx1ZSBsaXN0IG9wdGlvbjsgICgqKiBMYXp5IGNhY2hlIGZvciB0cmFuc3BpbGVkIFZNICopXG59XG5cbigqKiBVcHZhbHVlIGNlbGwg4oCUIHNoYXJlZCBtdXRhYmxlIHJlZmVyZW5jZSB0byBhIGNhcHR1cmVkIHZhcmlhYmxlLiAqKVxuYW5kIHZtX3VwdmFsdWVfY2VsbCA9IHtcbiAgbXV0YWJsZSB1dl92YWx1ZSA6IHZhbHVlO1xufVxuXG4oKiogQ2xvc3VyZSDigJQgY29tcGlsZWQgY29kZSArIGNhcHR1cmVkIHVwdmFsdWVzICsgbGl2ZSBlbnYgcmVmZXJlbmNlLiAqKVxuYW5kIHZtX2Nsb3N1cmUgPSB7XG4gIHZtX2NvZGUgICAgIDogdm1fY29kZTtcbiAgdm1fdXB2YWx1ZXMgOiB2bV91cHZhbHVlX2NlbGwgYXJyYXk7XG4gIHZtX25hbWUgICAgIDogc3RyaW5nIG9wdGlvbjtcbiAgdm1fZW52X3JlZiAgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50O1xuICB2bV9jbG9zdXJlX2VudiA6IGVudiBvcHRpb247ICAoKiogT3JpZ2luYWwgY2xvc3VyZSBlbnYgZm9yIGlubmVyIGZ1bmN0aW9ucyAqKVxufVxuXG4oKiogVk0gY2FsbCBmcmFtZSDigJQgb25lIHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uLlxuICAgIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtLm1sKSBzbyBpdCBjYW4gYmUgYSBbdmFsdWVdIHZhcmlhbnQuICopXG5hbmQgdm1fZnJhbWUgPSB7XG4gIHZmX2Nsb3N1cmUgICAgOiB2bV9jbG9zdXJlO1xuICBtdXRhYmxlIHZmX2lwIDogaW50O1xuICB2Zl9iYXNlICAgICAgIDogaW50O1xuICB2Zl9sb2NhbF9jZWxscyA6IChpbnQsIHZtX3VwdmFsdWVfY2VsbCkgSGFzaHRibC50O1xufVxuXG4oKiogVk0gc3RhdGUg4oCUIHN0YWNrIG1hY2hpbmUgd2l0aCBmcmFtZSBsaXN0LlxuICAgIERlZmluZWQgaGVyZSBmb3IgdGhlIHNhbWUgbXV0dWFsLXJlY3Vyc2lvbiByZWFzb24uICopXG5hbmQgdm1fbWFjaGluZSA9IHtcbiAgbXV0YWJsZSB2bV9zdGFjayAgIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgdm1fc3AgICAgICA6IGludDtcbiAgbXV0YWJsZSB2bV9mcmFtZXMgIDogdm1fZnJhbWUgbGlzdDtcbiAgdm1fZ2xvYmFscyAgICAgICAgIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudDtcbiAgbXV0YWJsZSB2bV9wZW5kaW5nX2NlayA6IHZhbHVlIG9wdGlvbjtcbn1cblxuXG4oKiogezEgRm9yd2FyZCByZWYgZm9yIGNhbGxpbmcgVk0gY2xvc3VyZXMgZnJvbSBvdXRzaWRlIHRoZSBWTX0gKilcblxubGV0IF92bV9jYWxsX2Nsb3N1cmVfcmVmIDogKHZtX2Nsb3N1cmUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IHJhaXNlIChGYWlsdXJlIFwiVk0gY2FsbF9jbG9zdXJlIG5vdCBpbml0aWFsaXplZFwiKSlcblxuKCoqIEZvcndhcmQgcmVmIGZvciBjYWxsaW5nIENFSyBldmFsdWF0b3IgZnJvbSBwcmltaXRpdmVzIChhdm9pZHMgZGVwZW5kZW5jeSBjeWNsZSkuICopXG5sZXQgX2Nla19jYWxsX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IHJhaXNlIChGYWlsdXJlIFwiQ0VLIGNhbGwgbm90IGluaXRpYWxpemVkXCIpKVxuXG4oKiogRm9yd2FyZCByZWY6IGV2YWx1YXRlIGEgTGFtYmRhIHZpYSBDRUsgKHN1cHBvcnRzIHBlcmZvcm0vc3VzcGVuc2lvbikuXG4gICAgU2V0IGJ5IHN4X3ZtLm1sIHRvIGJyZWFrIHRoZSBzeF9ydW50aW1lIOKGkiBzeF9yZWYgZGVwZW5kZW5jeSBjeWNsZS4gKilcbmxldCBfY2VrX2V2YWxfbGFtYmRhX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEZhaWx1cmUgXCJDRUsgZXZhbCBsYW1iZGEgbm90IGluaXRpYWxpemVkXCIpKVxuXG5cbigqKiB7MSBFcnJvcnN9ICopXG5cbmV4Y2VwdGlvbiBFdmFsX2Vycm9yIG9mIHN0cmluZ1xuZXhjZXB0aW9uIFBhcnNlX2Vycm9yIG9mIHN0cmluZ1xuXG4oKiogUmFpc2VkIHdoZW4gYSBWbUNsb3N1cmUgaGl0cyBPUF9QRVJGT1JNIGluc2lkZSBhIENFSyBldmFsdWF0aW9uLlxuICAgIFRoZSBDRUsgc3RlcCBsb29wIGNhdGNoZXMgdGhpcyBhbmQgY3JlYXRlcyBhIHByb3BlciBpby1zdXNwZW5kZWQgc3RhdGVcbiAgICB3aXRoIHRoZSBjb250aW51YXRpb24gcHJlc2VydmVkIGZvciByZXN1bWUuIERlZmluZWQgaGVyZSAobm90IGluIHN4X3ZtKVxuICAgIHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBjeWNsZSBiZXR3ZWVuIHN4X3J1bnRpbWUgYW5kIHN4X3ZtLiAqKVxuZXhjZXB0aW9uIENla1BlcmZvcm1SZXF1ZXN0IG9mIHZhbHVlXG5cbigqKiBIb29rOiByZXNvbHZlIElPIHN1c3BlbnNpb24gaW5saW5lIGluIGNla19ydW4uXG4gICAgV2hlbiBzZXQsIGNla19ydW4gY2FsbHMgdGhpcyBpbnN0ZWFkIG9mIHJhaXNpbmcgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIuXG4gICAgVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBzdXNwZW5kZWQgc3RhdGUgYW5kIHJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgIFVzZWQgYnkgdGhlIEhUVFAgc2VydmVyIHRvIGhhbmRsZSBwZXJmb3JtICh0ZXh0LW1lYXN1cmUpIGR1cmluZyBhc2VyLiAqKVxubGV0IF9jZWtfaW9fcmVzb2x2ZXIgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiogSG9vazogaGFuZGxlIENFSyBJTyBzdXNwZW5zaW9uIGluIGV2YWxfZXhwciAoY2VrX3J1bl9pdGVyYXRpdmUpLlxuICAgIFdoZW4gc2V0LCBjYWxsZWQgd2l0aCB0aGUgc3VzcGVuZGVkIENFSyBzdGF0ZSBpbnN0ZWFkIG9mIHJhaXNpbmdcbiAgICBcIklPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHRcIi4gVXNlZCBieSB0aGUgYnJvd3NlciBXQVNNIGtlcm5lbFxuICAgIHRvIGNvbnZlcnQgQ0VLIHN1c3BlbnNpb25zIHRvIFZtU3VzcGVuZGVkIGZvciBfZHJpdmVBc3luYyBoYW5kbGluZy4gKilcbmxldCBfY2VrX2lvX3N1c3BlbmRfaG9vayA6ICh2YWx1ZSAtPiB2YWx1ZSkgb3B0aW9uIHJlZiA9IHJlZiBOb25lXG5cbigqKiBEZWZhdWx0IFZNIGdsb2JhbHMgZm9yIHN0dWIgVk1zIGNyZWF0ZWQgZHVyaW5nIElPIHN1c3BlbnNpb24uXG4gICAgU2V0IGJ5IHN4X2Jyb3dzZXIubWwgdG8gX3ZtX2dsb2JhbHMgc28gQ0VLIHJlc3VtZSBjYW4gYWNjZXNzIHBsYXRmb3JtIGZ1bmN0aW9ucy4gKilcbmxldCBfZGVmYXVsdF92bV9nbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCByZWYgPSByZWYgKEhhc2h0YmwuY3JlYXRlIDApXG5cbigqKiBIb29rOiBjb252ZXJ0IFZNIHN1c3BlbnNpb24gZXhjZXB0aW9ucyB0byBDZWtQZXJmb3JtUmVxdWVzdC5cbiAgICBTZXQgYnkgc3hfdm0gYWZ0ZXIgaXQgZGVmaW5lcyBWbVN1c3BlbmRlZC4gQ2FsbGVkIGJ5IHN4X3J1bnRpbWUuc3hfYXBwbHlfY2VrLiAqKVxubGV0IF9jb252ZXJ0X3ZtX3N1c3BlbnNpb24gOiAoZXhuIC0+IHVuaXQpIHJlZiA9IHJlZiAoZnVuIF8gLT4gKCkpXG5cbigqKiBIb29rOiBjb252ZXJ0IFZNIHN1c3BlbnNpb24gdG8gYSBfX3ZtX3N1c3BlbmRlZCBtYXJrZXIgZGljdC5cbiAgICBSZXR1cm5zIFNvbWUoZGljdCkgZm9yIFZtU3VzcGVuZGVkLCBOb25lIG90aGVyd2lzZS5cbiAgICBUaGUgZGljdCBoYXMga2V5czogX192bV9zdXNwZW5kZWQsIHJlcXVlc3QsIHJlc3VtZS5cbiAgICBVc2VkIGJ5IHN4X2FwcGx5X2NlayBzbyBjb250aW51ZV93aXRoX2NhbGwgY2FuIGJ1aWxkIGEgcHJvcGVyXG4gICAgc3VzcGVuZGVkIENFSyBzdGF0ZSB3aXRoIHZtLXJlc3VtZS1mcmFtZSBvbiB0aGUga29udC4gKilcbmxldCBfdm1fc3VzcGVuc2lvbl90b19kaWN0IDogKGV4biAtPiB2YWx1ZSBvcHRpb24pIHJlZiA9IHJlZiAoZnVuIF8gLT4gTm9uZSlcblxuXG4oKiogezEgUmVjb3JkIHR5cGUgZGVzY3JpcHRvciB0YWJsZX0gKilcblxubGV0IHJ0ZF90YWJsZSA6IChpbnQsIHJlY29yZF90eXBlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSAxNlxubGV0IHJ0ZF9jb3VudGVyID0gcmVmIDBcblxuKCoqIHsxIFBhcmFtZXRlciBVSUQgY291bnRlcn0gKilcblxubGV0IHBhcmFtX2NvdW50ZXIgPSByZWYgMFxuXG5cbigqKiB7MSBFbnZpcm9ubWVudCBvcGVyYXRpb25zfSAqKVxuXG5sZXQgbWFrZV9lbnYgKCkgPVxuICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IE5vbmUgfVxuXG5sZXQgZW52X2V4dGVuZCBwYXJlbnQgPVxuICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IFNvbWUgcGFyZW50IH1cblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGFmdGVyIGV2ZXJ5IGVudl9iaW5kIHdpdGggKGVudiwgbmFtZSwgdmFsdWUpLlxuICAgVXNlZCBieSBicm93c2VyIGtlcm5lbCB0byBzeW5jIFZNIGdsb2JhbHMgdGFibGUuICopXG5sZXQgX2Vudl9iaW5kX2hvb2sgOiAoZW52IC0+IHN0cmluZyAtPiB2YWx1ZSAtPiB1bml0KSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGFmdGVyIFZNIEdMT0JBTF9TRVQgd3JpdGVzIHRvIHZtLmdsb2JhbHMuXG4gICBVc2VkIGJ5IGJyb3dzZXIga2VybmVsIHRvIHN5bmMgbXV0YXRpb25zIGJhY2sgdG8gZ2xvYmFsX2Vudi4gKilcbmxldCBfdm1fZ2xvYmFsX3NldF9ob29rIDogKHN0cmluZyAtPiB2YWx1ZSAtPiB1bml0KSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGJ5IGNla19ydW4gb24gaW1wb3J0IHN1c3BlbnNpb24uXG4gICBJZiBzZXQsIHRoZSBob29rIGxvYWRzIHRoZSBsaWJyYXJ5IGFuZCByZXR1cm5zIHRydWU7IGNla19ydW4gdGhlbiByZXN1bWVzLiAqKVxubGV0IF9pbXBvcnRfaG9vayA6ICh2YWx1ZSAtPiBib29sKSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogT3B0aW9uYWwgaG9vazogY2FsbGVkIGJ5IHZtX2dsb2JhbF9nZXQgd2hlbiBhIHN5bWJvbCBpc24ndCBmb3VuZC5cbiAgIFJlY2VpdmVzIHRoZSBzeW1ib2wgbmFtZS4gSWYgdGhlIGhvb2sgY2FuIHJlc29sdmUgaXQgKGUuZy4gYnkgbG9hZGluZyBhXG4gICBsaWJyYXJ5IHRoYXQgZXhwb3J0cyBpdCksIGl0IHJldHVybnMgU29tZSB2YWx1ZS4gT3RoZXJ3aXNlIE5vbmUuXG4gICBUaGlzIGVuYWJsZXMgdHJhbnNwYXJlbnQgbGF6eSBtb2R1bGUgbG9hZGluZyDigJQganVzdCB1c2UgYSBzeW1ib2wgYW5kXG4gICB0aGUgVk0gbG9hZHMgd2hhdGV2ZXIgbW9kdWxlIHByb3ZpZGVzIGl0LiAqKVxubGV0IF9zeW1ib2xfcmVzb2x2ZV9ob29rIDogKHN0cmluZyAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgZW52X2JpbmQgZW52IG5hbWUgdiA9XG4gIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2O1xuICAobWF0Y2ggIV9lbnZfYmluZF9ob29rIHdpdGggU29tZSBmIC0+IGYgZW52IG5hbWUgdiB8IE5vbmUgLT4gKCkpO1xuICBOaWxcblxuKCogSW50ZXJuYWw6IHNjb3BlLWNoYWluIGxvb2t1cCB3aXRoIHByZS1pbnRlcm5lZCBJRCAqKVxubGV0IHJlYyBlbnZfaGFzX2lkIGVudiBpZCA9XG4gIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB8fFxuICBtYXRjaCBlbnYucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9oYXNfaWQgcCBpZCB8IE5vbmUgLT4gZmFsc2VcblxubGV0IGVudl9oYXMgZW52IG5hbWUgPSBlbnZfaGFzX2lkIGVudiAoaW50ZXJuIG5hbWUpXG5cbmxldCByZWMgZW52X2dldF9pZCBlbnYgaWQgbmFtZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZW52LmJpbmRpbmdzIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT5cbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfZ2V0X2lkIHAgaWQgbmFtZVxuICAgIHwgTm9uZSAtPlxuICAgICAgKCogU3ltYm9sIG5vdCBpbiBhbnkgc2NvcGUg4oCUIHRyeSB0aGUgcmVzb2x2ZSBob29rICh0cmFuc3BhcmVudCBsYXp5IGxvYWRpbmcpLlxuICAgICAgICAgVGhlIGhvb2sgbG9hZHMgdGhlIG1vZHVsZSB0aGF0IGV4cG9ydHMgdGhpcyBzeW1ib2wsIG1ha2luZyBpdCBhdmFpbGFibGUuICopXG4gICAgICBtYXRjaCAhX3N5bWJvbF9yZXNvbHZlX2hvb2sgd2l0aFxuICAgICAgfCBTb21lIGhvb2sgLT5cbiAgICAgICAgKG1hdGNoIGhvb2sgbmFtZSB3aXRoXG4gICAgICAgICB8IFNvbWUgdiAtPlxuICAgICAgICAgICAoKiBDYWNoZSBpbiB0aGUgcm9vdCBlbnYgc28gc3Vic2VxdWVudCBsb29rdXBzIGFyZSBpbnN0YW50ICopXG4gICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgaWQgdjsgdlxuICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVuZGVmaW5lZCBzeW1ib2w6IFwiIF4gbmFtZSkpKVxuICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVuZGVmaW5lZCBzeW1ib2w6IFwiIF4gbmFtZSkpXG5cbmxldCBlbnZfZ2V0IGVudiBuYW1lID0gZW52X2dldF9pZCBlbnYgKGludGVybiBuYW1lKSBuYW1lXG5cbmxldCByZWMgZW52X3NldF9pZCBlbnYgaWQgdiA9XG4gIGlmIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB0aGVuIGJlZ2luXG4gICAgSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyBpZCB2O1xuICAgIChtYXRjaCAhX2Vudl9iaW5kX2hvb2sgd2l0aCBTb21lIGYgLT4gZiBlbnYgKHVuaW50ZXJuIGlkKSB2IHwgTm9uZSAtPiAoKSk7XG4gICAgTmlsXG4gIGVuZCBlbHNlXG4gICAgbWF0Y2ggZW52LnBhcmVudCB3aXRoXG4gICAgfCBTb21lIHAgLT4gZW52X3NldF9pZCBwIGlkIHZcbiAgICB8IE5vbmUgLT4gSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyBpZCB2OyBOaWxcblxubGV0IGVudl9zZXQgZW52IG5hbWUgdiA9IGVudl9zZXRfaWQgZW52IChpbnRlcm4gbmFtZSkgdlxuXG5sZXQgZW52X21lcmdlIGJhc2Ugb3ZlcmxheSA9XG4gIGlmIGJhc2UgPT0gb3ZlcmxheSB0aGVuXG4gICAgeyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBpc19kZXNjZW5kYW50IGUgZGVwdGggPVxuICAgICAgaWYgZGVwdGggPiAxMDAgdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBlID09IGJhc2UgdGhlbiB0cnVlXG4gICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGlzX2Rlc2NlbmRhbnQgcCAoZGVwdGggKyAxKSB8IE5vbmUgLT4gZmFsc2VcbiAgICBpblxuICAgIGlmIGlzX2Rlc2NlbmRhbnQgb3ZlcmxheSAwIHRoZW5cbiAgICAgIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBiYXNlIH1cbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgZSA9IHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBiYXNlIH0gaW5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT5cbiAgICAgICAgaWYgbm90IChlbnZfaGFzX2lkIGJhc2UgaWQpIHRoZW4gSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdlxuICAgICAgKSBvdmVybGF5LmJpbmRpbmdzO1xuICAgICAgZVxuICAgIGVuZFxuICBlbmRcblxuXG4oKiogezEgVmFsdWUgZXh0cmFjdGlvbiBoZWxwZXJzfSAqKVxuXG4oKiogRm9ybWF0IGEgZmxvYXQgc2FmZWx5IOKAlCBkZWZ1c2UgW2ludF9vZl9mbG9hdF0gb3ZlcmZsb3cgb24gaHVnZVxuICAgIGludGVnZXItdmFsdWVkIGZsb2F0cywga2VlcCBbJWddIGZvciBmcmFjdGlvbnMgKHVuY2hhbmdlZCkuICopXG5sZXQgZm9ybWF0X251bWJlciBuID1cbiAgaWYgRmxvYXQuaXNfbmFuIG4gdGhlbiBcIm5hblwiXG4gIGVsc2UgaWYgbiA9IEZsb2F0LmluZmluaXR5IHRoZW4gXCJpbmZcIlxuICBlbHNlIGlmIG4gPSBGbG9hdC5uZWdfaW5maW5pdHkgdGhlbiBcIi1pbmZcIlxuICBlbHNlIGlmIEZsb2F0LmlzX2ludGVnZXIgbiAmJiBGbG9hdC5hYnMgbiA8IDFlMTYgdGhlblxuICAgIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICBlbHNlIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuXG4gICAgUHJpbnRmLnNwcmludGYgXCIlLjE3Z1wiIG5cbiAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuXG5sZXQgdmFsdWVfdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzIHwgU3ltYm9sIHMgLT4gcyB8IEtleXdvcmQgayAtPiBrXG4gIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IGZvcm1hdF9udW1iZXIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCIgfCBfIC0+IFwiPHZhbHVlPlwiXG5cbmxldCB2YWx1ZV90b19zdHJpbmdfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gIHwgXyAtPiBbXVxuXG5sZXQgdmFsdWVfdG9fYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGIgfCBOaWwgLT4gZmFsc2UgfCBfIC0+IHRydWVcblxubGV0IHZhbHVlX3RvX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IFNvbWUgcyB8IFN5bWJvbCBzIC0+IFNvbWUgcyB8IE5pbCAtPiBOb25lIHwgXyAtPiBOb25lXG5cblxuKCoqIHsxIENvbnN0cnVjdG9ycyDigJQgYWNjZXB0IFt2YWx1ZV0gYXJncyBmcm9tIHRyYW5zcGlsZWQgY29kZX0gKilcblxubGV0IHVud3JhcF9lbnZfdmFsID0gZnVuY3Rpb25cbiAgfCBFbnYgZSAtPiBlXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2VfbGFtYmRhOiBleHBlY3RlZCBlbnYgZm9yIGNsb3N1cmVcIilcblxuKCogTGFtYmRhIFVJRCDigJQgbWludGVkIG9uIGNvbnN0cnVjdGlvbiwgdXNlZCBhcyBMUlUgY2FjaGUga2V5IChQaGFzZSAyKS4gKilcbmxldCBsYW1iZGFfdWlkX2NvdW50ZXIgPSByZWYgMFxubGV0IG5leHRfbGFtYmRhX3VpZCAoKSA9IGluY3IgbGFtYmRhX3VpZF9jb3VudGVyOyAhbGFtYmRhX3VpZF9jb3VudGVyXG5cbmxldCBtYWtlX2xhbWJkYSBwYXJhbXMgYm9keSBjbG9zdXJlID1cbiAgbGV0IHBzID0gbWF0Y2ggcGFyYW1zIHdpdGhcbiAgICB8IExpc3QgaXRlbXMgLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gICAgfCBfIC0+IHZhbHVlX3RvX3N0cmluZ19saXN0IHBhcmFtc1xuICBpblxuICBMYW1iZGEgeyBsX3BhcmFtcyA9IHBzOyBsX2JvZHkgPSBib2R5OyBsX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBsX25hbWUgPSBOb25lOyBsX2NvbXBpbGVkID0gTm9uZTsgbF9jYWxsX2NvdW50ID0gMDsgbF91aWQgPSBuZXh0X2xhbWJkYV91aWQgKCkgfVxuXG4oKiogezEgSklUIGNhY2hlIGNvbnRyb2x9XG5cbiAgICBUaWVyZWQgY29tcGlsYXRpb246IG9ubHkgSklUIGEgbGFtYmRhIGFmdGVyIGl0J3MgYmVlbiBjYWxsZWQgW2ppdF90aHJlc2hvbGRdXG4gICAgdGltZXMuIFRoaXMgZmlsdGVycyBvdXQgb25lLXNob3QgbGFtYmRhcyAodGVzdCBoYXJuZXNzLCBkeW5hbWljIGV2YWwsIFJFUExzKVxuICAgIHNvIHRoZXkgbmV2ZXIgZW50ZXIgdGhlIEpJVCBjYWNoZS4gQ291bnRlcnMgYXJlIGV4cG9zZWQgdG8gU1ggYXMgWyhqaXQtc3RhdHMpXS5cblxuICAgIFRoZXNlIGxpdmUgaGVyZSAoaW4gc3hfdHlwZXMpIHJhdGhlciB0aGFuIHN4X3ZtIHNvIFtzeF9wcmltaXRpdmVzXSBjYW4gcmVhZFxuICAgIHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIHN4X3ByaW1pdGl2ZXMg4oaSIHN4X3ZtIGRlcGVuZGVuY3kgY3ljbGUuICopXG5sZXQgaml0X3RocmVzaG9sZCA9IHJlZiA0XG5sZXQgaml0X2NvbXBpbGVkX2NvdW50ID0gcmVmIDBcbmxldCBqaXRfc2tpcHBlZF9jb3VudCA9IHJlZiAwXG5sZXQgaml0X3RocmVzaG9sZF9za2lwcGVkX2NvdW50ID0gcmVmIDBcblxuKCoqIFJ1bnRpbWUsIGRhdGEtZHJpdmVuIEpJVCBleGNsdXNpb24gc2V0LiBOYW1lcyBhZGRlZCBoZXJlIGFyZSBuZXZlclxuICAgIEpJVC1jb21waWxlZCDigJQgdGhleSBydW4gb24gdGhlIENFSyBpbnRlcnByZXRlciBpbnN0ZWFkLlxuXG4gICAgVGhpcyBpcyBob3cgYSBndWVzdCBpbnRlcnByZXRlciBkZWNsYXJlcyBpdHMgKmludGVycHJldC1vbmx5KiBmdW5jdGlvbnM6XG4gICAgdGhvc2UgdGhhdCBjYXB0dXJlIG9yIGludm9rZSBmaXJzdC1jbGFzcyBjb250aW51YXRpb25zIChlLmcuIFNtYWxsdGFsaydzXG4gICAgW2NhbGwvY2NdLWJhc2VkIG5vbi1sb2NhbCByZXR1cm4gW15leHByXSwgb3IgYmxvY2sgZXNjYXBlKS4gVGhlIHN0YWNrIFZNXG4gICAgY2Fubm90IHRyYW5zZmVyIGNvbnRyb2wgdGhyb3VnaCBhIENFSyBjb250aW51YXRpb24sIHNvIGEgSklULWNvbXBpbGVkXG4gICAgZnJhbWUgb24gdGhlIE9DYW1sL1ZNIHN0YWNrIGJldHdlZW4gYSBbY2FsbC9jY10gYW5kIGl0cyBbKGsgdildIGludm9jYXRpb25cbiAgICB3b3VsZCBlaXRoZXIgZmFpbCBhdCBydW50aW1lIG9yICh3b3JzZSkgcmUtcnVuIHdpdGggZHVwbGljYXRlZCBzaWRlXG4gICAgZWZmZWN0cy4gTWFya2luZyB0aGUgZGlzcGF0Y2ggY29yZSBpbnRlcnByZXQtb25seSBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgb25cbiAgICB0aGUgQ0VLIHdoaWxlIHB1cmUgaGVscGVycyBzdGlsbCBKSVQuXG5cbiAgICBQb3B1bGF0ZWQgZnJvbSBTWCB2aWEgdGhlIFtqaXQtZXhjbHVkZSFdIHByaW1pdGl2ZSAoc2VlIHN4X3ByaW1pdGl2ZXMpLlxuICAgIENvbnN1bHRlZCBpbiBbU3hfdm0uaml0X2NvbXBpbGVfbGFtYmRhXSwgc28gaXQgY292ZXJzIEJPVEggSklUIGVudHJ5XG4gICAgcG9pbnRzOiB0aGUgQ0VLIGNhbGwgaG9vayBhbmQgdGhlIGluLVZNIHRpZXJlZC1jb21waWxhdGlvbiBwYXRoLiAqKVxubGV0IGppdF9leGNsdWRlZCA6IChzdHJpbmcsIHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG5cbigqKiBOYW1lc3BhY2UtcHJlZml4IGV4Y2x1c2lvbnMuIEEgZ3Vlc3QgaW50ZXJwcmV0ZXIgZGVjbGFyZXMgaXRzIHdob2xlXG4gICAgZnVuY3Rpb24gbmFtZXNwYWNlIGludGVycHJldC1vbmx5IHdpdGggb25lIGVudHJ5IChlLmcuIFtcImVyLVwiXSwgW1wic2NtLVwiXSksXG4gICAgd2hpY2ggaXMgZmFyIG1vcmUgcm9idXN0IHRoYW4gZW51bWVyYXRpbmcgZXZlcnkgZnVuY3Rpb24g4oCUIGEgbmFtZS1saXN0XG4gICAgbWlzc2VzIGZ1bmN0aW9ucyBpbiBleHRyYSBmaWxlcyAodGhlIGVybGFuZyBWTSBkaXNwYXRjaGVyLCBldGMuKSBhbmRcbiAgICBzaWxlbnRseSByZWdyZXNzZXMuIFNldCB2aWEgW2ppdC1leGNsdWRlIV0gd2l0aCBhIHRyYWlsaW5nIFtcIipcIl1cbiAgICAoZS5nLiBbKGppdC1leGNsdWRlISBcImVyLSpcIildKS4gQ2hlY2tlZCB2aWEgW2ppdF9uYW1lX2V4Y2x1ZGVkXS4gKilcbmxldCBqaXRfZXhjbHVkZWRfcHJlZml4ZXMgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW11cblxuKCoqIFRydWUgaWYgW25hbWVdIGlzIGV4Y2x1ZGVkIGZyb20gSklUIOKAlCBieSBleGFjdCBuYW1lIG9yIGJ5IG5hbWVzcGFjZSBwcmVmaXguICopXG5sZXQgaml0X25hbWVfZXhjbHVkZWQgbmFtZSA9XG4gIEhhc2h0YmwubWVtIGppdF9leGNsdWRlZCBuYW1lXG4gIHx8IExpc3QuZXhpc3RzIChmdW4gcCAtPlxuICAgICAgIFN0cmluZy5sZW5ndGggbmFtZSA+PSBTdHJpbmcubGVuZ3RoIHBcbiAgICAgICAmJiBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBwKSA9IHApICFqaXRfZXhjbHVkZWRfcHJlZml4ZXNcblxuKCoqIE5hbWVzIG9mIGZ1bmN0aW9ucyB0aGF0IEVTVEFCTElTSCBhbiBlc2NhcGluZyBjb250aW51YXRpb24gdmlhIGNhbGwvY2NcbiAgICAoZS5nLiBDb21tb24tTGlzcCdzIFtjbC1yZXN0YXJ0LWNhc2VdIC8gW2NsLWhhbmRsZXItY2FzZV0g4oCUIHRoZSBjb25kaXRpb25cbiAgICBzeXN0ZW0pLiBBbnkgU1ggZnVuY3Rpb24gdGhhdCAqY2FsbHMqIG9uZSBvZiB0aGVzZSBpcyBpdHNlbGYgdW5zYWZlIHRvIEpJVDpcbiAgICBKSVQtY29tcGlsaW5nIHRoZSBjYWxsZXIgZm9yY2VzIHRoZSBjYWxsL2NjLXdyYXBwaW5nIGZvcm0gdG8gcnVuIGluIGEgbmVzdGVkXG4gICAgY2VrLXJ1biwgd2hlcmUgaW52b2tpbmcgdGhlIGNhcHR1cmVkIGNvbnRpbnVhdGlvbiBydW5zLXRvLWNvbXBsZXRpb24tYW5kLVxuICAgIHJldHVybnMgaW5zdGVhZCBvZiBlc2NhcGluZyDigJQgc28gYSByZXN0YXJ0L25vbi1sb2NhbCBleGl0IHNpbGVudGx5IGZhaWxzXG4gICAgYW5kIHRoZSBib2R5IGZhbGxzIHRocm91Z2ggKG9ic2VydmVkIGFzIHJlc3VsdCBhY2N1bXVsYXRpb24gLyBuby1hYm9ydCkuXG5cbiAgICBUaGVzZSBjYWxsZXJzIGFyZSBOT1QgYSBmaXhlZCBuYW1lc3BhY2UgKHRoZXkgYXJlIGFyYml0cmFyeSB1c2VyL3Rlc3QgY29kZSksXG4gICAgc28gdGhleSBjYW5ub3QgYmUgcHJlZml4LWV4Y2x1ZGVkLiBJbnN0ZWFkIGEgZ3Vlc3QgZGVjbGFyZXMgaXRzIGVzY2FwaW5nXG4gICAgZm9ybXMgaGVyZSAodmlhIFtqaXQtZXhjbHVkZS1jYWxsZXJzLW9mIV0pIGFuZCBbaml0X2NvbXBpbGVfbGFtYmRhXSBza2lwc1xuICAgIGFueSBmdW5jdGlvbiB3aG9zZSBjb25zdGFudCBwb29sIHJlZmVyZW5jZXMgb25lIG9mIHRoZW0uICopXG5sZXQgaml0X2V4Y2x1ZGVkX2NhbGxlcl9uYW1lcyA6IChzdHJpbmcsIHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2XG5cbigqKiB7MiBKSVQgY2FjaGUgTFJVIGV2aWN0aW9uIOKAlCBQaGFzZSAyfVxuXG4gICAgT25jZSBhIGxhbWJkYSBjcm9zc2VzIHRoZSB0aHJlc2hvbGQsIGl0cyBbbF9jb21waWxlZF0gc2xvdCBpcyBmaWxsZWQuXG4gICAgVG8gYm91bmQgbWVtb3J5IHVuZGVyIHVuYm91bmRlZCBjb21waWxhdGlvbiBwcmVzc3VyZSwgdHJhY2sgYWxsIGxpdmVcbiAgICBjb21waWxlZCBsYW1iZGFzIGluIEZJRk8gb3JkZXIsIGFuZCBldmljdCBmcm9tIHRoZSBoZWFkIHdoZW4gdGhlIGNvdW50XG4gICAgZXhjZWVkcyBbaml0X2J1ZGdldF0uXG5cbiAgICBbbGFtYmRhX3VpZF9jb3VudGVyXSBtaW50cyB1bmlxdWUgaWRlbnRpdGllcyBvbiBsYW1iZGEgY3JlYXRpb247IHRoZVxuICAgIExSVSBxdWV1ZSBob2xkcyB0aGVzZSBJRHMgcGFpcmVkIHdpdGggYSBiYWNrLXJlZmVyZW5jZSB0byB0aGUgbGFtYmRhXG4gICAgc28gd2UgY2FuIGNsZWFyIGl0cyBbbF9jb21waWxlZF0gc2xvdCBvbiBldmljdGlvbi5cblxuICAgIEJ1ZGdldCBvZiAwID0gbm8gY2FjaGUgKGRpc2FibGUgSklUIGVudGlyZWx5KS5cbiAgICBCdWRnZXQgb2YgW21heF9pbnRdID0gdW5ib3VuZGVkIChsZWdhY3kgYmVoYXZpb3VyKS4gRGVmYXVsdCA1MDAwIGlzXG4gICAgYSBnZW5lcm91cyBjZWlsaW5nIGZvciBhbnkgcmVhbGlzdGljIHBhZ2U7IHRoZSB0ZXN0IGhhcm5lc3MgY29tcGlsZXNcbiAgICB+MzAwMCBkaXN0aW5jdCBvbmUtc2hvdCBsYW1iZGFzIGluIGEgZnVsbCBydW4gYnV0IHRpZXJlZCBjb21waWxhdGlvblxuICAgIChQaGFzZSAxKSBtZWFucyBtb3N0IG5ldmVyIGVudGVyIHRoZSBjYWNoZSwgc28gc3RlYWR5LXN0YXRlIGNvdW50XG4gICAgc3RheXMgc21hbGwuXG5cbiAgICBbbGFtYmRhX3VpZF9jb3VudGVyXSBhbmQgW25leHRfbGFtYmRhX3VpZF0gYXJlIGRlZmluZWQgYWJvdmVcbiAgICBbbWFrZV9sYW1iZGFdICh3aGljaCB1c2VzIHRoZW0gb24gY29uc3RydWN0aW9uKS4gKilcbmxldCBqaXRfYnVkZ2V0ID0gcmVmIDUwMDBcbmxldCBqaXRfZXZpY3RlZF9jb3VudCA9IHJlZiAwXG5cbigqKiBMaXZlIGNvbXBpbGVkIGxhbWJkYXMgaW4gRklGTyBvcmRlciDigJQgZnJvbnQgaXMgb2xkZXN0LCBiYWNrIGlzIG5ld2VzdC5cbiAgICBFYWNoIGVudHJ5IGlzICh1aWQsIGxhbWJkYSk7IG9uIGV2aWN0aW9uIHdlIGNsZWFyIGxhbWJkYS5sX2NvbXBpbGVkIGFuZFxuICAgIGRyb3AgZnJvbSB0aGUgcXVldWUuIFVzaW5nIGEgbXV0YWJsZSBRdWV1ZSByYXRoZXIgdGhhbiBhIGhhbmQtcm9sbGVkXG4gICAgbGlua2VkIGxpc3QgYmVjYXVzZSBldmljdGlvbiBpcyBhbW9ydGlzZWQgTygxKSBhdCB0aGUgaGVhZCBhbmQgaW5zZXJ0c1xuICAgIGFyZSBPKDEpIGF0IHRoZSB0YWlsLiAqKVxubGV0IGppdF9jYWNoZV9xdWV1ZSA6IChpbnQgKiB2YWx1ZSkgUXVldWUudCA9IFF1ZXVlLmNyZWF0ZSAoKVxubGV0IGppdF9jYWNoZV9zaXplICgpID0gUXVldWUubGVuZ3RoIGppdF9jYWNoZV9xdWV1ZVxuXG5sZXQgbWFrZV9jb21wb25lbnQgbmFtZSBwYXJhbXMgaGFzX2NoaWxkcmVuIGJvZHkgY2xvc3VyZSBhZmZpbml0eSA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBoYyA9IHZhbHVlX3RvX2Jvb2wgaGFzX2NoaWxkcmVuIGluXG4gIGxldCBhZmYgPSBtYXRjaCBhZmZpbml0eSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiYXV0b1wiIGluXG4gIENvbXBvbmVudCB7XG4gICAgY19uYW1lID0gbjsgY19wYXJhbXMgPSBwczsgY19oYXNfY2hpbGRyZW4gPSBoYztcbiAgICBjX2JvZHkgPSBib2R5OyBjX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBjX2FmZmluaXR5ID0gYWZmO1xuICAgIGNfZmlsZSA9IE5vbmU7IGNfY29tcGlsZWQgPSBOb25lO1xuICB9XG5cbmxldCBtYWtlX2lzbGFuZCBuYW1lIHBhcmFtcyBoYXNfY2hpbGRyZW4gYm9keSBjbG9zdXJlID1cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IGhjID0gdmFsdWVfdG9fYm9vbCBoYXNfY2hpbGRyZW4gaW5cbiAgSXNsYW5kIHtcbiAgICBpX25hbWUgPSBuOyBpX3BhcmFtcyA9IHBzOyBpX2hhc19jaGlsZHJlbiA9IGhjO1xuICAgIGlfYm9keSA9IGJvZHk7IGlfY2xvc3VyZSA9IHVud3JhcF9lbnZfdmFsIGNsb3N1cmU7XG4gICAgaV9maWxlID0gTm9uZTsgaV9jb21waWxlZCA9IE5vbmU7XG4gIH1cblxubGV0IG1ha2VfbWFjcm8gcGFyYW1zIHJlc3RfcGFyYW0gYm9keSBjbG9zdXJlIG5hbWUgPVxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IHJwID0gdmFsdWVfdG9fc3RyaW5nX29wdCByZXN0X3BhcmFtIGluXG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nX29wdCBuYW1lIGluXG4gIE1hY3JvIHtcbiAgICBtX3BhcmFtcyA9IHBzOyBtX3Jlc3RfcGFyYW0gPSBycDtcbiAgICBtX2JvZHkgPSBib2R5OyBtX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBtX25hbWUgPSBuO1xuICB9XG5cbmxldCBtYWtlX3RodW5rIGV4cHIgZW52ID0gVGh1bmsgKGV4cHIsIHVud3JhcF9lbnZfdmFsIGVudilcblxubGV0IG1ha2Vfc3ltYm9sIG5hbWUgPSBTeW1ib2wgKHZhbHVlX3RvX3N0cmluZyBuYW1lKVxubGV0IG1ha2Vfa2V5d29yZCBuYW1lID0gS2V5d29yZCAodmFsdWVfdG9fc3RyaW5nIG5hbWUpXG5cblxuKCoqIHsxIFR5cGUgaW5zcGVjdGlvbn0gKilcblxubGV0IHR5cGVfb2YgPSBmdW5jdGlvblxuICB8IE5pbCAgICAgICAgICAgIC0+IFwibmlsXCJcbiAgfCBCb29sIF8gICAgICAgICAtPiBcImJvb2xlYW5cIlxuICB8IEludGVnZXIgXyAgICAgIC0+IFwibnVtYmVyXCJcbiAgfCBOdW1iZXIgXyAgICAgICAtPiBcIm51bWJlclwiXG4gIHwgU3RyaW5nIF8gICAgICAgLT4gXCJzdHJpbmdcIlxuICB8IFN5bWJvbCBfICAgICAgIC0+IFwic3ltYm9sXCJcbiAgfCBLZXl3b3JkIF8gICAgICAtPiBcImtleXdvcmRcIlxuICB8IExpc3QgXyB8IExpc3RSZWYgXyAtPiBcImxpc3RcIlxuICB8IERpY3QgXyAgICAgICAgIC0+IFwiZGljdFwiXG4gIHwgTGFtYmRhIF8gICAgICAgLT4gXCJsYW1iZGFcIlxuICB8IENvbXBvbmVudCBfICAgIC0+IFwiY29tcG9uZW50XCJcbiAgfCBJc2xhbmQgXyAgICAgICAtPiBcImlzbGFuZFwiXG4gIHwgTWFjcm8gXyAgICAgICAgLT4gXCJtYWNyb1wiXG4gIHwgVGh1bmsgXyAgICAgICAgLT4gXCJ0aHVua1wiXG4gIHwgQ29udGludWF0aW9uIChfLCBfKSAtPiBcImNvbnRpbnVhdGlvblwiXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSAtPiBcImNvbnRpbnVhdGlvblwiXG4gIHwgTmF0aXZlRm4gXyAgICAgLT4gXCJmdW5jdGlvblwiXG4gIHwgU2lnbmFsIF8gICAgICAgLT4gXCJzaWduYWxcIlxuICB8IFJhd0hUTUwgXyAgICAgIC0+IFwicmF3LWh0bWxcIlxuICB8IFNwcmVhZCBfICAgICAgIC0+IFwic3ByZWFkXCJcbiAgfCBTeEV4cHIgXyAgICAgICAtPiBcInN4LWV4cHJcIlxuICB8IEVudiBfICAgICAgICAgIC0+IFwiZW52XCJcbiAgfCBDZWtTdGF0ZSBfICAgICAtPiBcImRpY3RcIiAgKCogQ0VLIHN0YXRlIGJlaGF2ZXMgYXMgYSBkaWN0IGZvciB0eXBlIGNoZWNrcyAqKVxuICB8IENla0ZyYW1lIF8gICAgIC0+IFwiZGljdFwiXG4gIHwgVm1DbG9zdXJlIF8gICAgLT4gXCJmdW5jdGlvblwiXG4gIHwgVm1GcmFtZSBfICAgICAgLT4gXCJ2bS1mcmFtZVwiXG4gIHwgVm1NYWNoaW5lIF8gICAgLT4gXCJ2bS1tYWNoaW5lXCJcbiAgfCBSZWNvcmQgciAgICAgICAtPiByLnJfdHlwZS5ydF9uYW1lXG4gIHwgUGFyYW1ldGVyIF8gICAgLT4gXCJwYXJhbWV0ZXJcIlxuICB8IFZlY3RvciBfICAgICAgIC0+IFwidmVjdG9yXCJcbiAgfCBTdHJpbmdCdWZmZXIgXyAtPiBcInN0cmluZy1idWZmZXJcIlxuICB8IEhhc2hUYWJsZSBfICAgIC0+IFwiaGFzaC10YWJsZVwiXG4gIHwgQ2hhciBfICAgICAgICAgLT4gXCJjaGFyXCJcbiAgfCBFb2YgICAgICAgICAgICAtPiBcImVvZi1vYmplY3RcIlxuICB8IFBvcnQgeyBzcF9raW5kID0gUG9ydElucHV0IF87IF8gfSAgLT4gXCJpbnB1dC1wb3J0XCJcbiAgfCBQb3J0IHsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgXzsgXyB9IC0+IFwib3V0cHV0LXBvcnRcIlxuICB8IFJhdGlvbmFsIF8gIC0+IFwicmF0aW9uYWxcIlxuICB8IFN4U2V0IF8gICAgICAgICAgLT4gXCJzZXRcIlxuICB8IFN4UmVnZXhwIF8gICAgICAgLT4gXCJyZWdleHBcIlxuICB8IFN4Qnl0ZXZlY3RvciBfICAgLT4gXCJieXRldmVjdG9yXCJcbiAgfCBBZHRWYWx1ZSBhICAgICAgIC0+IGEuYXZfdHlwZVxuXG5sZXQgaXNfbmlsID0gZnVuY3Rpb24gTmlsIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfbGFtYmRhID0gZnVuY3Rpb24gTGFtYmRhIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19jb21wb25lbnQgPSBmdW5jdGlvbiBDb21wb25lbnQgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX2lzbGFuZCA9IGZ1bmN0aW9uIElzbGFuZCBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfbWFjcm8gPSBmdW5jdGlvbiBNYWNybyBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfdGh1bmsgPSBmdW5jdGlvbiBUaHVuayBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfc2lnbmFsID0gZnVuY3Rpb25cbiAgfCBTaWduYWwgXyAtPiB0cnVlXG4gIHwgRGljdCBkIC0+IEhhc2h0YmwubWVtIGQgXCJfX3NpZ25hbFwiXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgaXNfcmVjb3JkID0gZnVuY3Rpb24gUmVjb3JkIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxubGV0IGlzX2NhbGxhYmxlID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBDb250aW51YXRpb24gKF8sIF8pIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSB8IFZtQ2xvc3VyZSBfIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxuKCoqIHsxIFRydXRoaW5lc3N9ICopXG5cbigqKiBTWCB0cnV0aGluZXNzOiBldmVyeXRoaW5nIGlzIHRydXRoeSBleGNlcHQgW05pbF0gYW5kIFtCb29sIGZhbHNlXS4gKilcbmxldCBzeF90cnV0aHkgPSBmdW5jdGlvblxuICB8IE5pbCB8IEJvb2wgZmFsc2UgLT4gZmFsc2VcbiAgfCBfIC0+IHRydWVcblxuXG4oKiogezEgQWNjZXNzb3JzfSAqKVxuXG5sZXQgc3ltYm9sX25hbWUgPSBmdW5jdGlvblxuICB8IFN5bWJvbCBzIC0+IFN0cmluZyBzXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBzeW1ib2wsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBrZXl3b3JkX25hbWUgPSBmdW5jdGlvblxuICB8IEtleXdvcmQgayAtPiBTdHJpbmcga1xuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQga2V5d29yZCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGxhbWJkYV9wYXJhbXMgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgbC5sX3BhcmFtcylcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGxhbWJkYSwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGxhbWJkYV9ib2R5ID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgbCAtPiBsLmxfYm9keVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IEVudiBsLmxfY2xvc3VyZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX25hbWUgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IChtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBTdHJpbmcgbiB8IE5vbmUgLT4gTmlsKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgc2V0X2xhbWJkYV9uYW1lIGwgbiA9IG1hdGNoIGwgd2l0aFxuICB8IExhbWJkYSBsIC0+IGwubF9uYW1lIDwtIFNvbWUgbjsgTmlsXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1sYW1iZGEtbmFtZSE6IG5vdCBhIGxhbWJkYVwiKVxuXG5sZXQgY29tcG9uZW50X25hbWUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IFN0cmluZyBjLmNfbmFtZVxuICB8IElzbGFuZCBpIC0+IFN0cmluZyBpLmlfbmFtZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2ZpbGUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IChtYXRjaCBjLmNfZmlsZSB3aXRoIFNvbWUgZiAtPiBTdHJpbmcgZiB8IE5vbmUgLT4gTmlsKVxuICB8IElzbGFuZCBpIC0+IChtYXRjaCBpLmlfZmlsZSB3aXRoIFNvbWUgZiAtPiBTdHJpbmcgZiB8IE5vbmUgLT4gTmlsKVxuICB8IF8gLT4gTmlsXG5cbmxldCBjb21wb25lbnRfc2V0X2ZpbGUgdiBmID1cbiAgKG1hdGNoIHYsIGYgd2l0aFxuICB8IENvbXBvbmVudCBjLCBTdHJpbmcgcyAtPiBjLmNfZmlsZSA8LSBTb21lIHNcbiAgfCBJc2xhbmQgaSwgU3RyaW5nIHMgLT4gaS5pX2ZpbGUgPC0gU29tZSBzXG4gIHwgXyAtPiAoKSk7IE5pbFxuXG5sZXQgY29tcG9uZW50X3NldF9maWxlX2IgPSBjb21wb25lbnRfc2V0X2ZpbGVcblxubGV0IGNvbXBvbmVudF9wYXJhbXMgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYy5jX3BhcmFtcylcbiAgfCBJc2xhbmQgaSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfYm9keSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gYy5jX2JvZHlcbiAgfCBJc2xhbmQgaSAtPiBpLmlfYm9keVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IEVudiBjLmNfY2xvc3VyZVxuICB8IElzbGFuZCBpIC0+IEVudiBpLmlfY2xvc3VyZVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgY29tcG9uZW50LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgY29tcG9uZW50X2hhc19jaGlsZHJlbiA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gQm9vbCBjLmNfaGFzX2NoaWxkcmVuXG4gIHwgSXNsYW5kIGkgLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfYWZmaW5pdHkgPSBmdW5jdGlvblxuICB8IENvbXBvbmVudCBjIC0+IFN0cmluZyBjLmNfYWZmaW5pdHlcbiAgfCBJc2xhbmQgXyAtPiBTdHJpbmcgXCJjbGllbnRcIlxuICB8IF8gLT4gU3RyaW5nIFwiYXV0b1wiXG5cbmxldCBtYWNyb19wYXJhbXMgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBtLm1fcGFyYW1zKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbWFjcm8sIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBtYWNyb19yZXN0X3BhcmFtID0gZnVuY3Rpb25cbiAgfCBNYWNybyBtIC0+IChtYXRjaCBtLm1fcmVzdF9wYXJhbSB3aXRoIFNvbWUgcyAtPiBTdHJpbmcgcyB8IE5vbmUgLT4gTmlsKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbWFjcm8sIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBtYWNyb19ib2R5ID0gZnVuY3Rpb25cbiAgfCBNYWNybyBtIC0+IG0ubV9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX2Nsb3N1cmUgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gRW52IG0ubV9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IHRodW5rX2V4cHIgPSBmdW5jdGlvblxuICB8IFRodW5rIChlLCBfKSAtPiBlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCB0aHVuaywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IHRodW5rX2VudiA9IGZ1bmN0aW9uXG4gIHwgVGh1bmsgKF8sIGUpIC0+IEVudiBlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCB0aHVuaywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuXG4oKiogezEgUmVjb3JkIG9wZXJhdGlvbnN9ICopXG5cbmxldCB2YWxfdG9faW50ID0gZnVuY3Rpb25cbiAgfCBJbnRlZ2VyIG4gLT4gblxuICB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBbbWFrZV9ydGQgbmFtZSBmaWVsZHMgY3Rvcl9wYXJhbXNdIOKAlCBjcmVhdGUgYSByZWNvcmQgdHlwZSBkZXNjcmlwdG9yLlxuICAgIENhbGxlZCBhcyBbbWFrZS1ydGRdIGZyb20gdHJhbnNwaWxlZCBldmFsdWF0b3IuIFRha2VzIDMgc2VwYXJhdGUgYXJncy4gKilcbmxldCBtYWtlX3J0ZCBuYW1lIGZpZWxkcyBjdG9yX3BhcmFtcyA9XG4gIGxldCB1aWQgPSAhcnRkX2NvdW50ZXIgaW5cbiAgaW5jciBydGRfY291bnRlcjtcbiAgbGV0IGZpZWxkX25hbWVzID0gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIChtYXRjaCBmaWVsZHMgd2l0aCBMaXN0IGwgLT4gbCB8IF8gLT4gW10pIGluXG4gIGxldCBjdG9yX25hbWVzID0gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIChtYXRjaCBjdG9yX3BhcmFtcyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSkgaW5cbiAgbGV0IGZpZWxkX2FyciA9IEFycmF5Lm9mX2xpc3QgZmllbGRfbmFtZXMgaW5cbiAgbGV0IGN0b3JfbWFwID0gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biBjcCAtPlxuICAgIGxldCByZWMgZmluZCBqID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwibWFrZS1ydGQ6IGN0b3IgcGFyYW0gJXMgbm90IGluIGZpZWxkc1wiIGNwKSlcbiAgICAgIHwgZiA6OiBfIHdoZW4gZiA9IGNwIC0+IGpcbiAgICAgIHwgXyA6OiByZXN0IC0+IGZpbmQgKGogKyAxKSByZXN0XG4gICAgaW4gZmluZCAwIGZpZWxkX25hbWVzXG4gICkgY3Rvcl9uYW1lcykgaW5cbiAgbGV0IHJ0ID0geyBydF9uYW1lID0gdmFsdWVfdG9fc3RyaW5nIG5hbWU7IHJ0X3VpZCA9IHVpZDsgcnRfZmllbGRzID0gZmllbGRfYXJyOyBydF9jdG9yX21hcCA9IGN0b3JfbWFwIH0gaW5cbiAgSGFzaHRibC5hZGQgcnRkX3RhYmxlIHVpZCBydDtcbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgdWlkKVxuXG4oKiogW21ha2VfcmVjb3JkIHVpZF92YWwgYXJnc19saXN0XSDigJQgY3JlYXRlIGEgcmVjb3JkIGZyb20gdWlkICsgYXJncyBsaXN0LlxuICAgIDItYXJnIGRpcmVjdCBjYWxsOiAobWFrZS1yZWNvcmQgcnRkLXVpZCBjdG9yLWFyZ3MtbGlzdCkuICopXG5sZXQgbWFrZV9yZWNvcmQgdWlkX3ZhbCBhcmdzX2xpc3QgPVxuICBsZXQgdWlkID0gdmFsX3RvX2ludCB1aWRfdmFsIGluXG4gIGxldCBjdG9yX2FyZ3MgPSBtYXRjaCBhcmdzX2xpc3Qgd2l0aCBMaXN0IGwgLT4gbCB8IF8gLT4gW10gaW5cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBydGRfdGFibGUgdWlkIHdpdGhcbiAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQ6IHVua25vd24gcnRkXCIpXG4gIHwgU29tZSBydCAtPlxuICAgIGxldCBuX2N0b3IgPSBBcnJheS5sZW5ndGggcnQucnRfY3Rvcl9tYXAgaW5cbiAgICBsZXQgbl9hcmdzID0gTGlzdC5sZW5ndGggY3Rvcl9hcmdzIGluXG4gICAgaWYgbl9hcmdzIDw+IG5fY3RvciB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlczogZXhwZWN0ZWQgJWQgYXJncywgZ290ICVkXCJcbiAgICAgICAgcnQucnRfbmFtZSBuX2N0b3Igbl9hcmdzKSk7XG4gICAgbGV0IGZpZWxkcyA9IEFycmF5Lm1ha2UgKEFycmF5Lmxlbmd0aCBydC5ydF9maWVsZHMpIE5pbCBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpIGFyZyAtPlxuICAgICAgZmllbGRzLihydC5ydF9jdG9yX21hcC4oaSkpIDwtIGFyZ1xuICAgICkgY3Rvcl9hcmdzO1xuICAgIFJlY29yZCB7IHJfdHlwZSA9IHJ0OyByX2ZpZWxkcyA9IGZpZWxkcyB9XG5cbigqKiBbcmVjb3JkX3JlZiB2IGlkeF0g4oCUIGFjY2VzcyBmaWVsZCBieSBpbmRleC4gMi1hcmcgZGlyZWN0IGNhbGwuICopXG5sZXQgcmVjb3JkX3JlZiB2IGlkeCA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IFJlY29yZCByIC0+XG4gICAgbGV0IGkgPSB2YWxfdG9faW50IGlkeCBpblxuICAgIGlmIGkgPCAwIHx8IGkgPj0gQXJyYXkubGVuZ3RoIHIucl9maWVsZHMgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kcyBmb3IgJXNcIiBpIHIucl90eXBlLnJ0X25hbWUpKTtcbiAgICByLnJfZmllbGRzLihpKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVjb3JkLXJlZjogbm90IGEgcmVjb3JkLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG4oKiogW3JlY29yZF9zZXRfYiB2IGlkeCBuZXdfdmFsXSDigJQgbXV0YXRlIGZpZWxkIGJ5IGluZGV4LiAzLWFyZyBkaXJlY3QgY2FsbC5cbiAgICBOYW1lZCByZWNvcmRfc2V0X2IgYmVjYXVzZSB0cmFuc3BpbGVyIG1hbmdsZXMgcmVjb3JkLXNldCEgdG8gcmVjb3JkX3NldF9iLiAqKVxubGV0IHJlY29yZF9zZXRfYiB2IGlkeCBuZXdfdmFsID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgUmVjb3JkIHIgLT5cbiAgICBsZXQgaSA9IHZhbF90b19pbnQgaWR4IGluXG4gICAgaWYgaSA8IDAgfHwgaSA+PSBBcnJheS5sZW5ndGggci5yX2ZpZWxkcyB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJyZWNvcmQtc2V0ITogaW5kZXggJWQgb3V0IG9mIGJvdW5kcyBmb3IgJXNcIiBpIHIucl90eXBlLnJ0X25hbWUpKTtcbiAgICByLnJfZmllbGRzLihpKSA8LSBuZXdfdmFsOyBOaWxcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInJlY29yZC1zZXQhOiBub3QgYSByZWNvcmQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBbcmVjb3JkX3R5cGVfcCB2IHVpZF92YWxdIOKAlCB0eXBlIHByZWRpY2F0ZS4gMi1hcmcgZGlyZWN0IGNhbGwuXG4gICAgTmFtZWQgcmVjb3JkX3R5cGVfcCBiZWNhdXNlIHRyYW5zcGlsZXIgbWFuZ2xlcyByZWNvcmQtdHlwZT8gdG8gcmVjb3JkX3R5cGVfcC4gKilcbmxldCByZWNvcmRfdHlwZV9wIHYgdWlkX3ZhbCA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IFJlY29yZCByIC0+IEJvb2wgKHIucl90eXBlLnJ0X3VpZCA9IHZhbF90b19pbnQgdWlkX3ZhbClcbiAgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCoqIFtyZWNvcmRfcCB2XSDigJQgZ2VuZXJpYyByZWNvcmQgcHJlZGljYXRlLlxuICAgIE5hbWVkIHJlY29yZF9wIGJlY2F1c2UgdHJhbnNwaWxlciBtYW5nbGVzIHJlY29yZD8gdG8gcmVjb3JkX3AuICopXG5sZXQgcmVjb3JkX3AgdiA9IEJvb2wgKGlzX3JlY29yZCB2KVxuXG4oKiogW21ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIHJ0ZF91aWRdIOKAlCByZXR1cm5zIGEgTmF0aXZlRm4gdGhhdCBjb25zdHJ1Y3RzIHJlY29yZHMuXG4gICAgQ2FsbGVkIGZyb20gdHJhbnNwaWxlZCBzZi1kZWZpbmUtcmVjb3JkLXR5cGUuICopXG5sZXQgbWFrZV9yZWNvcmRfY29uc3RydWN0b3IgdWlkX3ZhbCA9XG4gIGxldCB1aWQgPSB2YWxfdG9faW50IHVpZF92YWwgaW5cbiAgbGV0IHJ0ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBydGRfdGFibGUgdWlkIHdpdGhcbiAgICB8IFNvbWUgcnQgLT4gcnQgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtY29uc3RydWN0b3I6IHVua25vd24gcnRkXCIpIGluXG4gIE5hdGl2ZUZuIChydC5ydF9uYW1lLCBmdW4gYXJncyAtPlxuICAgIGxldCBuX2N0b3IgPSBBcnJheS5sZW5ndGggcnQucnRfY3Rvcl9tYXAgaW5cbiAgICBsZXQgbl9hcmdzID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIGlmIG5fYXJncyA8PiBuX2N0b3IgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiJXM6IGV4cGVjdGVkICVkIGFyZ3MsIGdvdCAlZFwiIHJ0LnJ0X25hbWUgbl9jdG9yIG5fYXJncykpO1xuICAgIGxldCBmaWVsZHMgPSBBcnJheS5tYWtlIChBcnJheS5sZW5ndGggcnQucnRfZmllbGRzKSBOaWwgaW5cbiAgICBMaXN0Lml0ZXJpIChmdW4gaSBhcmcgLT4gZmllbGRzLihydC5ydF9jdG9yX21hcC4oaSkpIDwtIGFyZykgYXJncztcbiAgICBSZWNvcmQgeyByX3R5cGUgPSBydDsgcl9maWVsZHMgPSBmaWVsZHMgfSlcblxuKCoqIFttYWtlX3JlY29yZF9wcmVkaWNhdGUgcnRkX3VpZF0g4oCUIHJldHVybnMgYSBOYXRpdmVGbiB0aGF0IHRlc3RzIHJlY29yZCB0eXBlLiAqKVxubGV0IG1ha2VfcmVjb3JkX3ByZWRpY2F0ZSB1aWRfdmFsID1cbiAgbGV0IHVpZCA9IHZhbF90b19pbnQgdWlkX3ZhbCBpblxuICBOYXRpdmVGbiAoXCI/XCIsIGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmVjb3JkIHJdIC0+IEJvb2wgKHIucl90eXBlLnJ0X3VpZCA9IHVpZClcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIHByZWRpY2F0ZTogZXhwZWN0ZWQgMSBhcmdcIikpXG5cbigqKiBbbWFrZV9yZWNvcmRfYWNjZXNzb3IgZmllbGRfaWR4XSDigJQgcmV0dXJucyBhIE5hdGl2ZUZuIHRoYXQgcmVhZHMgYSBmaWVsZC4gKilcbmxldCBtYWtlX3JlY29yZF9hY2Nlc3NvciBpZHhfdmFsID1cbiAgbGV0IGlkeCA9IHZhbF90b19pbnQgaWR4X3ZhbCBpblxuICBOYXRpdmVGbiAoXCJyZWZcIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSZWNvcmQgcl0gLT5cbiAgICAgIGlmIGlkeCA8IDAgfHwgaWR4ID49IEFycmF5Lmxlbmd0aCByLnJfZmllbGRzIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkIGFjY2Vzc29yOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzXCIgaWR4KSk7XG4gICAgICByLnJfZmllbGRzLihpZHgpXG4gICAgfCBbdl0gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVjb3JkIGFjY2Vzc29yOiBub3QgYSByZWNvcmQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIGFjY2Vzc29yOiBleHBlY3RlZCAxIGFyZ1wiKSlcblxuKCoqIFttYWtlX3JlY29yZF9tdXRhdG9yIGZpZWxkX2lkeF0g4oCUIHJldHVybnMgYSBOYXRpdmVGbiB0aGF0IHNldHMgYSBmaWVsZC4gKilcbmxldCBtYWtlX3JlY29yZF9tdXRhdG9yIGlkeF92YWwgPVxuICBsZXQgaWR4ID0gdmFsX3RvX2ludCBpZHhfdmFsIGluXG4gIE5hdGl2ZUZuIChcInNldCFcIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSZWNvcmQgcjsgbmV3X3ZhbF0gLT5cbiAgICAgIGlmIGlkeCA8IDAgfHwgaWR4ID49IEFycmF5Lmxlbmd0aCByLnJfZmllbGRzIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwicmVjb3JkIG11dGF0b3I6IGluZGV4ICVkIG91dCBvZiBib3VuZHNcIiBpZHgpKTtcbiAgICAgIHIucl9maWVsZHMuKGlkeCkgPC0gbmV3X3ZhbDsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkIG11dGF0b3I6IGV4cGVjdGVkIChyZWNvcmQgdmFsdWUpXCIpKVxuXG5cbigqKiB7MSBSN1JTIHBhcmFtZXRlciBhY2Nlc3NvcnMg4oCUIGNhbGxlZCBmcm9tIHRyYW5zcGlsZWQgZXZhbHVhdG9yfSAqKVxuXG5sZXQgcGFyYW1ldGVyX3AgdiA9IG1hdGNoIHYgd2l0aCBQYXJhbWV0ZXIgXyAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcbmxldCBwYXJhbWV0ZXJfdWlkIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBQYXJhbWV0ZXIgcCAtPiBTdHJpbmcgcC5wbV91aWRcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLXVpZDogbm90IGEgcGFyYW1ldGVyXCIpXG5sZXQgcGFyYW1ldGVyX2RlZmF1bHQgdiA9IG1hdGNoIHYgd2l0aFxuICB8IFBhcmFtZXRlciBwIC0+IHAucG1fZGVmYXVsdFxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItZGVmYXVsdDogbm90IGEgcGFyYW1ldGVyXCIpXG5sZXQgcGFyYW1ldGVyX2NvbnZlcnRlciB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgUGFyYW1ldGVyIHAgLT4gKG1hdGNoIHAucG1fY29udmVydGVyIHdpdGggU29tZSBjIC0+IGMgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLWNvbnZlcnRlcjogbm90IGEgcGFyYW1ldGVyXCIpXG5cblxuKCoqIHsxIERpY3Qgb3BlcmF0aW9uc30gKilcblxubGV0IG1ha2VfZGljdCAoKSA6IGRpY3QgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbmxldCBkaWN0X2dldCAoZCA6IGRpY3QpIGtleSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBrZXkgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsXG5cbmxldCBkaWN0X2hhcyAoZCA6IGRpY3QpIGtleSA9IEhhc2h0YmwubWVtIGQga2V5XG5cbmxldCBkaWN0X3NldCAoZCA6IGRpY3QpIGtleSB2ID0gSGFzaHRibC5yZXBsYWNlIGQga2V5IHZcblxubGV0IGRpY3RfZGVsZXRlIChkIDogZGljdCkga2V5ID0gSGFzaHRibC5yZW1vdmUgZCBrZXlcblxuKCoga2V5cy92YWxzIG9yZGVyOiBPQ2FtbCBIYXNodGJsIGZvbGQgb3JkZXIgaXMgdW5zcGVjaWZpZWQgKGluIHByYWN0aWNlXG4gICByZXZlcnNlIGluc2VydGlvbiBmb3IgZnJlc2ggdGFibGVzKS4gTk9URSAoMjAyNi0wNyByZXZpZXcpOiB0aGlzIGlzIGFcbiAgIGRldGVybWluaXNtIGZvb3RndW4gZm9yIHNlcmlhbGl6YXRpb24vY29udGVudC1hZGRyZXNzaW5nLCBidXQgcmVuZGVyXG4gICBhdHRyIGVtaXNzaW9uIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgb3JkZXIgKHRlc3RzIHBpbiBzb3VyY2Utb3JkZXJcbiAgIGF0dHJpYnV0ZXMpLCBzbyBjaGFuZ2luZyBpdCBpcyBnYXRlZCBvbiB0aGUgaW5zZXJ0aW9uLW9yZGVyIGRpY3QgcnVsaW5nXG4gICAoUlVMSU5HUyBSMjkpIOKAlCBkbyBub3QgXCJmaXhcIiBsb2NhbGx5LiAqKVxubGV0IGRpY3Rfa2V5cyAoZCA6IGRpY3QpID1cbiAgSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBTdHJpbmcgayA6OiBhY2MpIGQgW11cblxubGV0IGRpY3RfdmFscyAoZCA6IGRpY3QpID1cbiAgSGFzaHRibC5mb2xkIChmdW4gXyB2IGFjYyAtPiB2IDo6IGFjYykgZCBbXVxuXG5cbigqKiB7MSBWYWx1ZSBkaXNwbGF5fSAqKVxuXG4oKiBTaW5nbGUgc2hhcmVkIGJ1ZmZlciBmb3IgdGhlIGVudGlyZSBpbnNwZWN0IHJlY3Vyc2lvbiDigJQgZWxpbWluYXRlc1xuICAgdGhlIHBlci1sZXZlbCBbU3RyaW5nLmNvbmNhdCAoTGlzdC5tYXAgaW5zcGVjdCAuLi4pXSBhbGxvY2F0aW9uLiAqKVxubGV0IHJlYyBpbnNwZWN0X2ludG8gYnVmID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwibmlsXCJcbiAgfCBCb29sIHRydWUgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJmYWxzZVwiXG4gIHwgSW50ZWdlciBuIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCBuKVxuICB8IE51bWJlciBuIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoZm9ybWF0X251bWJlciBuKVxuICB8IFN0cmluZyBzIC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICAgIFN0cmluZy5pdGVyIChmdW5jdGlvblxuICAgICAgfCAnXCInICAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXG4nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcdFwiXG4gICAgICB8IGMgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjKSBzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICB8IFN5bWJvbCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgS2V5d29yZCBrIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJzonOyBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgKG1hdGNoIGl0ZW1zIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IHggOjogcmVzdCAtPlxuICAgICAgIGluc3BlY3RfaW50byBidWYgeDtcbiAgICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnOyBpbnNwZWN0X2ludG8gYnVmIHYpIHJlc3QpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG4gIHwgRGljdCBkIC0+XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAneyc7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIGZpcnN0IDo9IGZhbHNlIGVsc2UgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc6JzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGs7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJzsgaW5zcGVjdF9pbnRvIGJ1ZiB2KSBkO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ30nXG4gIHwgTGFtYmRhIGwgLT5cbiAgICBsZXQgdGFnID0gbWF0Y2ggbC5sX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJsYW1iZGFcIiBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJzwnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgdGFnO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJygnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN0cmluZy5jb25jYXQgXCIsIFwiIGwubF9wYXJhbXMpO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIik+XCJcbiAgfCBDb21wb25lbnQgYyAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxDb21wb25lbnQgflwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgYy5jX25hbWU7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnKCc7IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgYy5jX3BhcmFtcyk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiKT5cIlxuICB8IElzbGFuZCBpIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPElzbGFuZCB+XCI7IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpLmlfbmFtZTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcoJzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuY29uY2F0IFwiLCBcIiBpLmlfcGFyYW1zKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIpPlwiXG4gIHwgTWFjcm8gbSAtPlxuICAgIGxldCB0YWcgPSBtYXRjaCBtLm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIm1hY3JvXCIgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc8JzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHRhZztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcoJzsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuY29uY2F0IFwiLCBcIiBtLm1fcGFyYW1zKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIpPlwiXG4gIHwgVGh1bmsgXyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8dGh1bms+XCJcbiAgfCBDb250aW51YXRpb24gKF8sIF8pIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjb250aW51YXRpb24+XCJcbiAgfCBDYWxsY2NDb250aW51YXRpb24gKF8sIF8pIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjYWxsY2MtY29udGludWF0aW9uPlwiXG4gIHwgTmF0aXZlRm4gKG5hbWUsIF8pIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPG5hdGl2ZTpcIjsgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG5hbWU7IEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgU2lnbmFsIF8gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPHNpZ25hbD5cIlxuICB8IFJhd0hUTUwgcyAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXCI8cmF3LWh0bWw6XCI7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKTtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI+XFxcIlwiXG4gIHwgU3ByZWFkIF8gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPHNwcmVhZD5cIlxuICB8IFN4RXhwciBzIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcIjxzeC1leHByOlwiO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSk7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPlxcXCJcIlxuICB8IEVudiBfIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxlbnY+XCJcbiAgfCBDZWtTdGF0ZSBfIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjxjZWstc3RhdGU+XCJcbiAgfCBDZWtGcmFtZSBmIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPGZyYW1lOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgZi5jZl90eXBlOyBCdWZmZXIuYWRkX2NoYXIgYnVmICc+J1xuICB8IFZtQ2xvc3VyZSBjbCAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjx2bTpcIjtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJhbm9uXCIpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgUmVjb3JkIHIgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8cmVjb3JkOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgci5yX3R5cGUucnRfbmFtZTtcbiAgICBBcnJheS5pdGVyaSAoZnVuIGkgdiAtPlxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgci5yX3R5cGUucnRfZmllbGRzLihpKTtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz0nO1xuICAgICAgaW5zcGVjdF9pbnRvIGJ1ZiB2KSByLnJfZmllbGRzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgUGFyYW1ldGVyIHAgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8cGFyYW1ldGVyOlwiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgcC5wbV91aWQ7IEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nXG4gIHwgVmVjdG9yIGFyciAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiMoXCI7XG4gICAgQXJyYXkuaXRlcmkgKGZ1biBpIHYgLT5cbiAgICAgIGlmIGkgPiAwIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBpbnNwZWN0X2ludG8gYnVmIHYpIGFycjtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcpJ1xuICB8IFZtRnJhbWUgZiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8dm0tZnJhbWU6aXA9JWQgYmFzZT0lZD5cIiBmLnZmX2lwIGYudmZfYmFzZSlcbiAgfCBWbU1hY2hpbmUgbSAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8dm0tbWFjaGluZTpzcD0lZCBmcmFtZXM9JWQ+XCIgbS52bV9zcCAoTGlzdC5sZW5ndGggbS52bV9mcmFtZXMpKVxuICB8IFN0cmluZ0J1ZmZlciBiIC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxzdHJpbmctYnVmZmVyOiVkPlwiIChCdWZmZXIubGVuZ3RoIGIpKVxuICB8IEhhc2hUYWJsZSBodCAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8aGFzaC10YWJsZTolZD5cIiAoSGFzaHRibC5sZW5ndGggaHQpKVxuICB8IENoYXIgbiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiNcXFxcXCI7XG4gICAgKG1hdGNoIG4gd2l0aFxuICAgICB8IDMyIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcInNwYWNlXCJcbiAgICAgfCAxMCAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJuZXdsaW5lXCJcbiAgICAgfCA5IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcInRhYlwiXG4gICAgIHwgMTMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwicmV0dXJuXCJcbiAgICAgfCAwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIm51bFwiXG4gICAgIHwgMjcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiZXNjYXBlXCJcbiAgICAgfCAxMjcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiZGVsZXRlXCJcbiAgICAgfCA4IC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImJhY2tzcGFjZVwiXG4gICAgIHwgXyAtPiBCdWZmZXIuYWRkX3V0Zl84X3VjaGFyIGJ1ZiAoVWNoYXIub2ZfaW50IG4pKVxuICB8IEVvZiAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIjIWVvZlwiXG4gIHwgUG9ydCB7IHNwX2tpbmQgPSBQb3J0SW5wdXQgKF8sIHBvcyk7IHNwX2Nsb3NlZCB9IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxpbnB1dC1wb3J0OnBvcz0lZCVzPlwiICFwb3MgKGlmIHNwX2Nsb3NlZCB0aGVuIFwiOmNsb3NlZFwiIGVsc2UgXCJcIikpXG4gIHwgUG9ydCB7IHNwX2tpbmQgPSBQb3J0T3V0cHV0IGI7IHNwX2Nsb3NlZCB9IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxvdXRwdXQtcG9ydDpsZW49JWQlcz5cIiAoQnVmZmVyLmxlbmd0aCBiKSAoaWYgc3BfY2xvc2VkIHRoZW4gXCI6Y2xvc2VkXCIgZWxzZSBcIlwiKSlcbiAgfCBSYXRpb25hbCAobiwgZCkgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgbik7IEJ1ZmZlci5hZGRfY2hhciBidWYgJy8nO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCBkKVxuICB8IFN4U2V0IGh0IC0+XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxzZXQ6JWQ+XCIgKEhhc2h0YmwubGVuZ3RoIGh0KSlcbiAgfCBTeFJlZ2V4cCAoc3JjLCBmbGFncywgXykgLT5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCIjL1wiOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgc3JjO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJy8nOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgZmxhZ3NcbiAgfCBTeEJ5dGV2ZWN0b3IgYiAtPlxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiN1OChcIjtcbiAgICBsZXQgbiA9IEJ5dGVzLmxlbmd0aCBiIGluXG4gICAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgICBpZiBpID4gMCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKSlcbiAgICBkb25lO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG4gIHwgQWR0VmFsdWUgYSAtPlxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJygnOyBCdWZmZXIuYWRkX3N0cmluZyBidWYgYS5hdl9jdG9yO1xuICAgIEFycmF5Lml0ZXIgKGZ1biB2IC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnOyBpbnNwZWN0X2ludG8gYnVmIHYpIGEuYXZfZmllbGRzO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyknXG5cbmxldCBpbnNwZWN0IHYgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBpbnNwZWN0X2ludG8gYnVmIHY7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZnJlc2hfb29faWQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfVWNoYXIiLCJTdGRsaWJfUXVldWUiLCJTdGRsaWJfRmxvYXQiLCJzeW1fdG9faWQiLCJpZF90b19zeW0iLCJzeW1fbmV4dCIsImludGVybiIsInMiLCJtYXRjaCIsImlkIiwidW5pbnRlcm4iLCJ2bV9jYWxsX2Nsb3N1cmVfcmVmIiwicGFyYW0iLCJjZWtfY2FsbF9yZWYiLCJjZWtfZXZhbF9sYW1iZGFfcmVmIiwiRXZhbF9lcnJvciIsIlBhcnNlX2Vycm9yIiwiQ2VrUGVyZm9ybVJlcXVlc3QiLCJkZWZhdWx0X3ZtX2dsb2JhbHMiLCJjb252ZXJ0X3ZtX3N1c3BlbnNpb24iLCJ2bV9zdXNwZW5zaW9uX3RvX2RpY3QiLCJydGRfdGFibGUiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJwYXJlbnQiLCJlbnZfYmluZF9ob29rIiwiZW52X2JpbmQiLCJlbnYiLCJuYW1lIiwidiIsImVudl9oYXNfaWQiLCJlbnZfaGFzIiwic3ltYm9sX3Jlc29sdmVfaG9vayIsImVudl9nZXRfaWQiLCJjc3RfVW5kZWZpbmVkX3N5bWJvbCIsImhvb2siLCJlbnZfZ2V0IiwiZW52X3NldF9pZCIsImVudl9zZXQiLCJlbnZfbWVyZ2UiLCJiYXNlIiwib3ZlcmxheSIsImUiLCJkZXB0aCIsInAiLCJmb3JtYXRfbnVtYmVyIiwibiIsImNzdCIsImNzdF9mYWxzZSIsImNzdF90cnVlIiwidmFsdWVfdG9fc3RyaW5nIiwidmFsdWVfdG9fc3RyaW5nX2xpc3QiLCJpdGVtcyIsInZhbHVlX3RvX2Jvb2wiLCJiIiwidmFsdWVfdG9fc3RyaW5nX29wdCIsInVud3JhcF9lbnZfdmFsIiwibGFtYmRhX3VpZF9jb3VudGVyIiwibmV4dF9sYW1iZGFfdWlkIiwibWFrZV9sYW1iZGEiLCJwYXJhbXMiLCJib2R5IiwiY2xvc3VyZSIsInBzIiwiaml0X2V4Y2x1ZGVkIiwiaml0X2V4Y2x1ZGVkX3ByZWZpeGVzIiwiaml0X25hbWVfZXhjbHVkZWQiLCJqaXRfZXhjbHVkZWRfY2FsbGVyX25hbWVzIiwiaml0X2NhY2hlX3F1ZXVlIiwiaml0X2NhY2hlX3NpemUiLCJjc3RfYXV0byIsIm1ha2VfY29tcG9uZW50IiwiaGFzX2NoaWxkcmVuIiwiYWZmaW5pdHkiLCJoYyIsImFmZiIsIm1ha2VfaXNsYW5kIiwibWFrZV9tYWNybyIsInJlc3RfcGFyYW0iLCJycCIsIm1ha2VfdGh1bmsiLCJleHByIiwibWFrZV9zeW1ib2wiLCJtYWtlX2tleXdvcmQiLCJjc3RfbGFtYmRhIiwiY3N0X21hY3JvIiwiY3N0X25pbCIsInR5cGVfb2YiLCJjc3RfY29udGludWF0aW9uIiwiY3N0X2RpY3QiLCJjc3RfZnVuY3Rpb24iLCJjc3RfbnVtYmVyIiwiciIsImEiLCJpc19uaWwiLCJpc19sYW1iZGEiLCJpc19jb21wb25lbnQiLCJpc19pc2xhbmQiLCJpc19tYWNybyIsImlzX3RodW5rIiwiaXNfc2lnbmFsIiwiZCIsImlzX3JlY29yZCIsImlzX2NhbGxhYmxlIiwic3hfdHJ1dGh5Iiwic3ltYm9sX25hbWUiLCJrZXl3b3JkX25hbWUiLCJrIiwiY3N0X0V4cGVjdGVkX2xhbWJkYV9nb3QiLCJsYW1iZGFfcGFyYW1zIiwibCIsImxhbWJkYV9ib2R5IiwibGFtYmRhX2Nsb3N1cmUiLCJsYW1iZGFfbmFtZSIsInNldF9sYW1iZGFfbmFtZSIsImNzdF9FeHBlY3RlZF9jb21wb25lbnRfZ290IiwiY29tcG9uZW50X25hbWUiLCJjIiwiY29tcG9uZW50X2ZpbGUiLCJpIiwiY29tcG9uZW50X3NldF9maWxlIiwiY29tcG9uZW50X3BhcmFtcyIsImNvbXBvbmVudF9ib2R5IiwiY29tcG9uZW50X2Nsb3N1cmUiLCJjb21wb25lbnRfaGFzX2NoaWxkcmVuIiwiY29tcG9uZW50X2FmZmluaXR5IiwiY3N0X0V4cGVjdGVkX21hY3JvX2dvdCIsIm1hY3JvX3BhcmFtcyIsIm0iLCJtYWNyb19yZXN0X3BhcmFtIiwibWFjcm9fYm9keSIsIm1hY3JvX2Nsb3N1cmUiLCJjc3RfRXhwZWN0ZWRfdGh1bmtfZ290IiwidGh1bmtfZXhwciIsInRodW5rX2VudiIsInZhbF90b19pbnQiLCJydGRfY291bnRlciIsIm1ha2VfcnRkIiwiZmllbGRzIiwiY3Rvcl9wYXJhbXMiLCJ1aWQiLCJmaWVsZF9uYW1lcyIsImN0b3JfbmFtZXMiLCJmaWVsZF9hcnIiLCJjcCIsImoiLCJyZXN0IiwiY3Rvcl9tYXAiLCJydCIsImNzdF9hcmdzX2dvdCIsImNzdF9zX2V4cGVjdGVkX2RfYXJnc19nb3RfZCIsImNzdF9leHBlY3RlZCIsIm1ha2VfcmVjb3JkIiwidWlkX3ZhbCIsImFyZ3NfbGlzdCIsImN0b3JfYXJncyIsIm5fY3RvciIsIm5fYXJncyIsImFyZyIsImNzdF9vdXRfb2ZfYm91bmRzX2ZvciIsInJlY29yZF9yZWYiLCJpZHgiLCJyZWNvcmRfc2V0X2IiLCJuZXdfdmFsIiwicmVjb3JkX3R5cGVfcCIsInJlY29yZF9wIiwibWFrZV9yZWNvcmRfY29uc3RydWN0b3IiLCJhcmdzIiwibWFrZV9yZWNvcmRfcHJlZGljYXRlIiwiY3N0X291dF9vZl9ib3VuZHMiLCJtYWtlX3JlY29yZF9hY2Nlc3NvciIsImlkeF92YWwiLCJtYWtlX3JlY29yZF9tdXRhdG9yIiwicGFyYW1ldGVyX3AiLCJwYXJhbWV0ZXJfdWlkIiwicGFyYW1ldGVyX2RlZmF1bHQiLCJwYXJhbWV0ZXJfY29udmVydGVyIiwibWFrZV9kaWN0IiwiZGljdF9nZXQiLCJrZXkiLCJkaWN0X2hhcyIsImRpY3Rfc2V0IiwiZGljdF9kZWxldGUiLCJkaWN0X2tleXMiLCJhY2MiLCJkaWN0X3ZhbHMiLCJpbnNwZWN0X2ludG8iLCJidWYiLCJmaXJzdCIsInRhZyIsImNsIiwiYXJyIiwiaHQiLCJzcF9jbG9zZWQiLCJjc3RfY2xvc2VkIiwicG9zIiwiZmxhZ3MiLCJzcmMiLCJ4IiwiaW5zcGVjdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxZQ1kwQztBQUFBLElBQUFDLFlBQ0E7QUFBQSxJQUFBQyxXQUFrQjtBQUFBLFlBQUFDLE9BQUFDO0FBQUFBLFFBQUFDLFFBSXBEO0FBQUEsSUFBNEIsY0FBQUMsS0FBQSxVQUNyQjtBQUFBLFFBQUFBLE9BRVg7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUE4QjtBQUFBLEdBQzVCO0FBQUEsWUFBQUMsU0FBQUQ7QUFBQUEsUUFBQUQsUUFHRTtBQUFBLElBQTZCLGNBQUFELElBQUEsVUFDdkI7QUFBQSxZQUNRO0FBQUEsSUFBc0I7QUFBQTtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUFoQmdCO0FBQUEsbUJBQUFDO0FBQUFBLFFBb1AxQztBQUFBO0FBQUEsT0FBaUQ7QUFBQSxJQUFBQztBQUFBQSxNQXBQUDtBQUFBLG1CQUFBRDtBQUFBQSxRQXdQMUM7QUFBQTtBQUFBLE9BQTBDO0FBQUEsSUFBQUU7QUFBQUEsTUF4UEE7QUFBQSxtQkFBQUY7QUFBQUEsUUE2UDFDO0FBQUE7QUFBQSxPQUFpRDtBQUFBLElBQUFHLGFBN1BQO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxJQUFBQyxxQkF5UkU7QUFBQSxJQUFBQyx3QkFBa0IsYUFBQVAsT0FJakIsU0FBRTtBQUFBLElBQUFRLHdCQUplLGFBQUFSLE9BV1QsU0FBSTtBQUFBLElBQUFTLFlBSzVCO0FBQUEsWUFBQUMsU0FBQVY7QUFBQUEsSUFXaEMsa0RBQWlCO0FBQUEsR0FBaUI7QUFBQSxZQUFBVyxXQUFBQztBQUFBQSxJQUdsQyw0REFBaUI7QUFBQSxHQUF3QjtBQUFBLE9BQUFDLGdCQWRRO0FBQUEsWUFBQUMsU0FBQUMsS0FBQUMsTUFBQUM7QUFBQUEsUUFBQSxJQW9DakM7QUFBQSxJQUE3QjtBQUFBLFFBQUFyQixRQUE0QztBQUFBLGtCQUFBdEIsSUFBQSxVQUNOO0FBQUEsSUFDdEM7QUFBQSxHQUFHO0FBQUEsWUFBQTRDLFdBQUFILE9BQUFsQjtBQUFBQSxRQUFBa0IsTUFJSDtBQUFBO0FBQUE7QUFBQSxLQUEyQjtBQUFBO0FBQUE7QUFBQSxVQUFBbkIsUUFBQTtBQUFBLG9CQUFBbUIsUUFBQSxVQUNLO0FBQUEsY0FBMEI7QUFBQTtBQUFBLEtBRC9CO0FBQUE7QUFBQSxHQUNvQztBQUFBLFlBQUFJLFFBQUFKLEtBQUFDLE1BRTNCLE9BQWEsZ0JBQWIsYUFBYTtBQUFBLE9BQUFJLHNCQTdDYTtBQUFBLFlBQUFDLFdBQUFOLE9BQUFsQixJQUFBbUI7QUFBQUEsUUFBQUQsTUFnRDlEO0FBQUE7QUFBQSxTQUFBbkIsUUFBTTtBQUFBLEtBQWdDLGNBQUFxQixJQUFBLFVBQzFCO0FBQUEsU0FBQXJCLFVBRVY7QUFBQTtBQUFBO0FBQUEsT0FBQUEsVUFLRTtBQUFBLE9BQUEwQix1QkQ5V047QUFBQSxNQzhXTTtBQUFBLE9BTzRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFBQyxPQVA1QixZQUFBM0IsVUFFUztBQUFBLE1BQVM7QUFBQSxPQUlhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFBcUIsTUFKYjtBQUFBLE1BR2I7QUFBQSxNQUFpQztBQUFBO0FBQUEsU0FBQUYsUUFWeEM7QUFBQSxLQUNZO0FBQUE7QUFBQSxHQVdnRDtBQUFBLFlBQUFTLFFBQUFULEtBQUFDLE1BRTFCLE9BQWEsZ0JBQWIsbUJBQWtCO0FBQUEsWUFBQVMsV0FBQVYsT0FBQWxCLElBQUFvQjtBQUFBQSxRQUFBRixNQUd0RDtBQUFBO0FBQUEsS0FBRztBQUFBLE1BQ0Q7QUFBQSxVQUFBbkIsUUFBaUM7QUFBQSxvQkFBQXRCLElBQUEsVUFDSyxtQkFBTTtBQUFBLE1BQzVDO0FBQUE7QUFBQSxTQUFBc0IsVUFFQTtBQUFBLG1CQUVVLDhDQUFpQztBQUFBLFNBQUFtQixRQUYzQztBQUFBLEtBQ1k7QUFBQTtBQUFBLEdBQ29DO0FBQUEsWUFBQVcsUUFBQVgsS0FBQUMsTUFBQUMsR0FFWixPQUFhLGdCQUFiLGdCQUFlO0FBQUEsWUFBQVUsVUFBQUMsTUFBQUM7QUFBQUEsSUFHckQ7QUFBQSxLQUNlLDBEQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQUFDLElBTzNCLFNBQUFDLFFBQUE7QUFBQTtBQUFBLFFBSkQ7QUFBQSxRQUNLO0FBQUEsWUFBQW5DLFFBQ0E7QUFBQTtBQUFBLFlBQUFvQyxJQUFBLFVBQUFELFVBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBc0M7QUFBQTtBQUFBO0FBQUEsY0FEbEQ7QUFBQTtBQUFBO0FBQUEsYUFESDtBQUFBO0FBQUEsSUFJSSxNQUNYLDBEQUFpQjtBQUFBLFFBQUFELE1BRVQ7QUFBQSxJQUNyQjtBQUFBO0FBQUEsZUFBQWpDLElBQUFvQjtBQUFBQSxXQUFBLElBQ1M7QUFBQSxPQUFvQixXQUFNLGdEQUErQjtBQUFBO0FBQUE7QUFBQSxJQUNoRDtBQUFBLEdBR25CO0FBQUE7QUFBQSxRQWpHMkQ7QUFBQTtBQUFBLFlBQUFnQixjQUFBQztBQUFBQSxJQXlHM0QsbUNBQW9CO0FBQUEsSUFDbEIsMEJBQTJCO0FBQUEsSUFDM0IsMEJBQStCO0FBQUEsSUFDNUIscUNBQXNCO0FBQUEsS0FDNUIsbUNBR3dCO0FBQUEsSUFGbEI7QUFBQSxjQUNOO0FBQUEsY0FDRyw2Q0FBcUI7QUFBQTtBQUFBLE9BQUFDLE1EdGE1QixJQUFBQyxZQUFBLFNBQUFDLFdBQUE7QUFBQSxZQUFBQyxnQkFBQXRDO0FBQUFBLElDd2FzQiw4Q0FLWDtBQUFBO0FBQUEsS0FMVztBQUFBO0FBQUEsOENBS1E7QUFBQTtBQUFBLFlBQUFrQyxJQUxSLFVBRUwsK0JBR2E7QUFBQTtBQUFBLFlBQUFBLE1BTFIsVUFHTix5QkFFYztBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUF2QyxJQUxSO0FBQUE7QUFBQSxJQUtEO0FBQUEsR0FBUztBQUFBLFlBQUE0QyxxQkFBQXZDO0FBQUFBO0FBQUFBLElBQUE7QUFBQSxLQUVIO0FBQUE7QUFBQSxZQUFBd0MsUUFBQTtBQUFBO0FBQUEsWUFBQUEsUUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNzQix5REFDdEM7QUFBQTtBQUFBLElBQUY7QUFBQSxHQUFFO0FBQUEsWUFBQUMsY0FBQXpDO0FBQUFBLElBRVMsOENBQ0s7QUFBQSxnQ0FBQTBDLElBREwsVUFDTjtBQUFBLElBQXdCO0FBQUEsR0FBSTtBQUFBLFlBQUFDLG9CQUFBM0M7QUFBQUEsSUFFaEIsOENBQzJCO0FBQUEsd0NBQUFMLElBRDNCO0FBQUEsSUFDdUM7QUFBQSxHQUFJO0FBQUEsWUFBQWlELGVBQUE1QztBQUFBQSxJQUtoRCxxREFBQThCLElBQUEsVUFDUjtBQUFBLElBQ0o7QUFBQTtBQUFBLEdBQTBEO0FBQUEsT0FBQWUscUJBeElIO0FBQUEsWUFBQUMsZ0JBQUE5QztBQUFBQSxJQTRJdkM7QUFBQSxJQUF5QjtBQUFBLEdBQW1CO0FBQUEsWUFBQStDLFlBQUFDLFFBQUFDLE1BQUFDO0FBQUFBO0FBQUFBO0FBQUFBLEtBR25FO0FBQUE7QUFBQSxPQUFBVixRQUFBO0FBQUEsT0FBQVcsS0FDa0I7QUFBQTtBQUFBO0FBQUEsU0FBQUEsS0FDVDtBQUFBO0FBQUEsWUFFOEg7QUFBQSxJQUFwRiw4REFBc0I7QUFBQSxHQUFrRjtBQUFBO0FBQUEsSUFBQUMsZUE4Qi9HO0FBQUEsSUFBQUMsd0JBQWlCO0FBQUEsWUFBQUMsa0JBQUF0QztBQUFBQSxRQUFBLElBWTdEO0FBQUEsSUFBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHdCQUFBZ0I7QUFBQUE7QUFBQUEsaUJBQUE7QUFBQSxtQkFFeEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUNHO0FBQUE7QUFBQSx1Q0FESDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUMwQztBQUFBLHdDQUF3QjtBQUFBO0FBQUE7QUFBQSxJQUFBdUIsNEJBY2Q7QUFBQSxJQUFBQyxrQkE4QmI7QUFBQSxZQUFBQyxlQUFBekQ7QUFBQUEsSUFDdEIsbURBQTRCO0FBQUE7QUFBQSxPQUFBMEQsV0RuaUJwRDtBQUFBLFlBQUFDO0FBQUFBLElBQUEzQyxNQUFBZ0MsUUFBQVksY0FBQVgsTUFBQUMsU0FBQVc7QUFBQUE7QUFBQUEsS0FBQTNCLElDc2lCVTtBQUFBLEtBQUFpQixLQUNDO0FBQUEsS0FBQVcsS0FDQTtBQUFBLElBQ1Q7QUFBQSxTQUFBQyxNQUFBO0FBQUE7QUFBQSxTQUFBcEUsSUFBQSxhQUFBb0UsTUFBMEM7QUFBQSxJQUdiLG9FQUFzQjtBQUFBLEdBRWxEO0FBQUEsWUFBQUMsWUFBQWhELE1BQUFnQyxRQUFBWSxjQUFBWCxNQUFBQztBQUFBQTtBQUFBQSxLQUFBaEIsSUFHTztBQUFBLEtBQUFpQixLQUNDO0FBQUEsS0FBQVcsS0FDQTtBQUFBLElBR29CLGdFQUFzQjtBQUFBLEdBRWxEO0FBQUEsWUFBQUcsV0FBQWpCLFFBQUFrQixZQUFBakIsTUFBQUMsU0FBQWxDO0FBQUFBO0FBQUFBLEtBQUFtQyxLQUdRO0FBQUEsS0FBQWdCLEtBQ0E7QUFBQSxLQUFBakMsSUFDRDtBQUFBLElBR3FCLDBEQUFzQjtBQUFBLEdBQ2xEO0FBQUEsWUFBQWtDLFdBQUFDLE1BQUF0RCxLQUVvQyxzQ0FBa0IsQ0FBQztBQUFBLFlBQUF1RCxZQUFBdEQsTUFFNUIsaUNBQXNCO0FBQUEsWUFBQXVELGFBQUF2RCxNQUNwQixpQ0FBc0I7QUFBQSxPQUFBd0QsYUR0a0J0RCxVQUFBQyxZQUFBLFNBQUFDLFVBQUE7QUFBQSxZQUFBQyxRQUFBM0U7QUFBQUEsSUMya0JjLHlFQXlDbUI7QUFBQTtBQUFBLEtBQUE0RSxtQkRwbkJqQztBQUFBLEtBQUFDLFdBQUE7QUFBQSxLQUFBQyxlQUFBO0FBQUEsS0FBQUMsYUFBQTtBQUFBLElDMmtCYztBQUFBO0FBQUEsT0FFUTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FFQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDSztBQUFBO0FBQUEsT0FDTTtBQUFBO0FBQUEsT0FDWDtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsT0FDQTtBQUFBO0FBQUEsV0FBQUMsSUEzQlIsVUE0QlE7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BakNSLDBEQXlDbUI7QUFBQTtBQUFBLE9BSmQ7QUFBQTtBQUFBLE9BQ0s7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLFdBQUFDLElBeENWLFVBeUNVO0FBQUEsZUFqQ0U7QUFBQTtBQUFBLEdBaUNPO0FBQUEsWUFBQUMsT0FBQWxGO0FBQUFBLElBRXBCLHlDQUFnQjtBQUFBLElBQVk7QUFBQSxHQUFLO0FBQUEsWUFBQW1GLFVBQUFuRjtBQUFBQSxJQUM5QixnREFBcUI7QUFBQSxJQUFZO0FBQUEsR0FBSztBQUFBLFlBQUFvRixhQUFBcEY7QUFBQUEsSUFDbkMsZ0RBQXdCO0FBQUEsSUFBWTtBQUFBLEdBQUs7QUFBQSxZQUFBcUYsVUFBQXJGO0FBQUFBLElBQzVDLGlEQUFxQjtBQUFBLElBQVk7QUFBQSxHQUFLO0FBQUEsWUFBQXNGLFNBQUF0RjtBQUFBQSxJQUN2QyxpREFBb0I7QUFBQSxJQUFZO0FBQUEsR0FBSztBQUFBLFlBQUF1RixTQUFBdkY7QUFBQUEsSUFDckMsaURBQW9CO0FBQUEsSUFBWTtBQUFBLEdBQUs7QUFBQSxZQUFBd0YsVUFBQXhGO0FBQUFBLElBQ3BDO0FBQUE7QUFBQTtBQUFBLFlBQUF5RixJQUFBLFVBRUYsa0RBQ0E7QUFBQTtBQUFBLFFBRkU7QUFBQTtBQUFBLElBRVA7QUFBQSxHQUFLO0FBQUEsWUFBQUMsVUFBQTFGO0FBQUFBLElBRUUsaURBQXFCO0FBQUEsSUFBWTtBQUFBLEdBQUs7QUFBQSxZQUFBMkYsWUFBQTNGO0FBQUFBLElBRXBDO0FBQUEsOERBQzJFO0FBQUEsSUFDcEY7QUFBQSxHQUFLO0FBQUEsWUFBQTRGLFVBQUE1RjtBQUFBQTtBQUFBQTtBQUFBQSxLQU1FO0FBQUE7QUFBQSxLQUNRO0FBQUE7QUFBQSxJQUNmO0FBQUEsR0FBSTtBQUFBLFlBQUE2RixZQUFBNUU7QUFBQUEsSUFLSyw0Q0FBQXRCLElBQUEsTUFDRjtBQUFBLFlBQ3NDO0FBQUEsSUFBM0I7QUFBQTtBQUFBO0FBQUEsR0FBc0M7QUFBQSxZQUFBbUcsYUFBQTdFO0FBQUFBLElBRTlDLDRDQUFBOEUsSUFBQSxNQUNGO0FBQUEsWUFDc0M7QUFBQSxJQUE1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBdUM7QUFBQSxPQUFBQywwQkR4cEJsRTtBQUFBLFlBQUFDLGNBQUFoRjtBQUFBQSxJQzBwQm9CO0FBQUEsU0FBQWlGLElBQUE7QUFBQSxLQUNDLCtDQUFBdkcsR0FBb0IsY0FBUSxTQUFhO0FBQUE7QUFBQSxZQUNSO0FBQUEsSUFBM0I7QUFBQTtBQUFBO0FBQUEsR0FBc0M7QUFBQSxZQUFBd0csWUFBQWxGO0FBQUFBLElBRS9DLDRDQUFBaUYsSUFBQSxNQUNGO0FBQUEsWUFDc0M7QUFBQSxJQUEzQjtBQUFBO0FBQUE7QUFBQSxHQUFzQztBQUFBLFlBQUFFLGVBQUFuRjtBQUFBQSxJQUU1Qyw0Q0FBQWlGLElBQUEsTUFDTDtBQUFBLFlBQ3NDO0FBQUEsSUFBM0I7QUFBQTtBQUFBO0FBQUEsR0FBc0M7QUFBQSxZQUFBRyxZQUFBcEY7QUFBQUEsSUFFL0M7QUFBQSxTQUFBaUYsSUFBQSxNQUFBdEcsUUFDRjtBQUFBLGlCQUFrRDtBQUFBLFNBQUFzQyxJQUFsRDtBQUFBLEtBQStCO0FBQUE7QUFBQSxZQUNPO0FBQUEsSUFBM0I7QUFBQTtBQUFBO0FBQUEsR0FBc0M7QUFBQSxZQUFBb0UsZ0JBQUFKLEdBQUFoRTtBQUFBQSxJQUV2QztBQUFBLFNBQUFnRSxNQUFBO0FBQUEsS0FDVjtBQUFBLEtBQW9CO0FBQUE7QUFBQSxJQUMzQjtBQUFBO0FBQUEsR0FBbUQ7QUFBQSxPQUFBSyw2QkQ1cUI1RDtBQUFBLFlBQUFDLGVBQUF2RjtBQUFBQSxJQzhxQnFCLG9EQUFBd0YsSUFBQTtBQUFBLFlBR29DO0FBQUEsSUFBOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXlDO0FBQUEsWUFBQUMsZUFBQTFHO0FBQUFBLElBRS9DO0FBQUE7QUFBQTtBQUFBLFlBQUF5RyxJQUFBLFVBQUE3RyxRQUNGO0FBQUEsb0JBQWtEO0FBQUEsWUFBQXRCLElBQWxEO0FBQUEsUUFBK0I7QUFBQTtBQUFBLFlBQUFxSSxJQUQ3QixVQUFBL0csVUFFTDtBQUFBLHNCQUFrRDtBQUFBLFlBQUF0QixNQUFsRDtBQUFBLFFBQStCO0FBQUE7QUFBQSxJQUN0QztBQUFBLEdBQUc7QUFBQSxZQUFBc0ksbUJBQUEzRixHQUFBM0M7QUFBQUEsSUFHVjtBQUFBO0FBQUE7QUFBQSxvREFBQXFCLElBQUEsTUFBQThHLElBQUEsTUFDMkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUQzQjtBQUFBLGFBQUE5RyxNQUFBLE1BQUFnSCxJQUFBO0FBQUEsU0FFd0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUNaO0FBQUEsR0FBRztBQUFBLFlBQUFFLGlCQUFBNUY7QUFBQUEsSUFJTTtBQUFBO0FBQUE7QUFBQSxZQUFBd0YsSUFBQTtBQUFBLFFBQ0M7QUFBQSxvREFBQTlHLEdBQW9CLGNBQVEsU0FBYTtBQUFBO0FBQUEsWUFBQWdILElBRDFDO0FBQUEsUUFFRjtBQUFBLG9EQUFBaEgsR0FBb0IsY0FBUSxTQUFhO0FBQUE7QUFBQSxZQUNMO0FBQUEsSUFBOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXlDO0FBQUEsWUFBQW1ILGVBQUE3RjtBQUFBQSxJQUUvQyxvREFBQXdGLElBQUE7QUFBQSxZQUdvQztBQUFBLElBQTlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUF5QztBQUFBLFlBQUFNLGtCQUFBOUY7QUFBQUEsSUFFNUMsb0RBQUF3RixJQUFBO0FBQUEsWUFHaUM7QUFBQSxJQUE5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBeUM7QUFBQSxZQUFBTyx1QkFBQS9GO0FBQUFBLElBRXZDLG9EQUFBd0YsSUFBQTtBQUFBLFlBRzRCO0FBQUEsSUFBOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXlDO0FBQUEsV0FoTFA7QUFBQSxZQUFBUSxtQkFBQWpIO0FBQUFBLElBa0xwQztBQUFBO0FBQUE7QUFBQSxZQUFBeUcsTUFBQSxVQUNOO0FBQUE7QUFBQSxRQUNIO0FBQUE7QUFBQSxJQUNQO0FBQUEsR0FBYTtBQUFBLE9BQUFTLHlCRHZ0QnRCO0FBQUEsWUFBQUMsYUFBQWxHO0FBQUFBLElDeXRCbUI7QUFBQSxTQUFBbUcsSUFBQTtBQUFBLEtBQ0MsK0NBQUF6SCxHQUFvQixjQUFRLFNBQWE7QUFBQTtBQUFBLFlBQ1I7QUFBQSxJQUExQjtBQUFBO0FBQUE7QUFBQSxHQUFxQztBQUFBLFlBQUEwSCxpQkFBQXBHO0FBQUFBLElBRXpDO0FBQUEsU0FBQW1HLElBQUEsTUFBQXhILFFBQ1I7QUFBQSxpQkFBd0Q7QUFBQSxTQUFBRCxJQUF4RDtBQUFBLEtBQXFDO0FBQUE7QUFBQSxZQUNDO0FBQUEsSUFBMUI7QUFBQTtBQUFBO0FBQUEsR0FBcUM7QUFBQSxZQUFBMkgsV0FBQXJHO0FBQUFBLElBRS9DLDZDQUFBbUcsSUFBQSxNQUNGO0FBQUEsWUFDc0M7QUFBQSxJQUExQjtBQUFBO0FBQUE7QUFBQSxHQUFxQztBQUFBLFlBQUFHLGNBQUF0RztBQUFBQSxJQUU1Qyw2Q0FBQW1HLElBQUEsTUFDTDtBQUFBLFlBQ3NDO0FBQUEsSUFBMUI7QUFBQTtBQUFBO0FBQUEsR0FBcUM7QUFBQSxPQUFBSSx5QkR2dUJoRTtBQUFBLFlBQUFDLFdBQUF4RztBQUFBQSxJQ3l1QmlCLDZDQUFBYSxJQUFBLE1BQ0c7QUFBQSxZQUNpQztBQUFBLElBQTFCO0FBQUE7QUFBQTtBQUFBLEdBQXFDO0FBQUEsWUFBQTRGLFVBQUF6RztBQUFBQSxJQUVoRCw2Q0FBQWEsSUFBQSxNQUNJO0FBQUEsWUFDaUM7QUFBQSxJQUExQjtBQUFBO0FBQUE7QUFBQSxHQUFxQztBQUFBLFlBQUE2RixXQUFBMUc7QUFBQUEsSUFLL0M7QUFBQTtBQUFBO0FBQUEsWUFBQWlCLElBQUEsTUFDQTtBQUFBO0FBQUEsWUFBQUEsTUFEQSxNQUVEO0FBQUE7QUFBQSxZQUNzQztBQUFBLElBQTNCO0FBQUE7QUFBQTtBQUFBLEdBQXNDO0FBQUE7QUFBQSxJQUFBMEYsY0FqY0Q7QUFBQTtBQUFBLE1BNE9IO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFNBQUE3RyxNQUFBOEcsUUFBQUM7QUFBQUEsUUFBQUMsTUEwTjNEO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQSxLQUNBLHNEQUFBOUIsTUFBQSxlQUF3RTtBQUFBLGFBQVM7QUFBQTtBQUFBLFFBQUErQixjQUEvRDtBQUFBO0FBQUE7QUFBQSxLQUNsQixnRUFBQS9CLElBQUEsb0JBQTRFO0FBQUEsYUFBUztBQUFBO0FBQUE7QUFBQSxLQUFBZ0MsYUFBcEU7QUFBQSxLQUFBQyxZQUNEO0FBQUE7QUFBQSxPQUNhO0FBQUE7QUFBQSxrQkFBQUM7QUFBQUEsY0FBQUMsSUFLeEIsR0FBQXJJLFFBQUE7QUFBQTtBQUFBLFdBSlU7QUFBQSxZQUNlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBMUIsSUFEZjtBQUFBLFdBRVMsYUFBSTtBQUFBLGVBQUFnSyxPQUFKLFVBQUFELE1BQ0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUNJO0FBQUE7QUFBQSxLQUFBRSxXQUxSO0FBQUEsS0FBQUMsS0FPTTtBQUFBLElBQ3JCO0FBQUEsSUFDeUI7QUFBQTtBQUFBO0FBQUEsSUFBQUMsZUQxd0IzQjtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBO0FBQUEsTUNraUI2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsWUFBQUMsU0FBQUM7QUFBQUEsUUFBQWQsTUE2T2pEO0FBQUE7QUFBQTtBQUFBLEtBQ1YsNERBQUE5QixJQUFBLGNBQUE2QyxZQUErQztBQUFBLFNBQUFBLFlBQVM7QUFBQTtBQUFBLFFBQUFuSixRQUNsRDtBQUFBLElBQThCO0FBQUEsS0FDMUI7QUFBQTtBQUFBO0FBQUEsS0FBQTRJLEtBRDBCO0FBQUEsS0FBQVEsU0FHbEM7QUFBQSxLQUFBQyxTQUNhO0FBQUEsSUFDYjtBQUFBLGFBQ29CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBQW5CLFNBRVA7QUFBQSxJQUNiO0FBQUE7QUFBQSxlQUFBbkIsR0FBQXVDO0FBQUFBLFdBQUEsSUFDVTtBQUFBLE9BQVI7QUFBQSxPQUFrQztBQUFBO0FBQUE7QUFBQSxJQUN6QjtBQUFBLEdBQzhCO0FBQUE7QUFBQSxJQUFBQyx3QkQ3eEI3QztBQUFBO0FBQUEsTUNraUI2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQW5JLEdBQUFvSTtBQUFBQSxJQStQM0Q7QUFBQTtBQUFBLE1BQUFyRSxJQUFBO0FBQUEsTUFBQTJCLElBRVU7QUFBQSxVQUNSO0FBQUE7QUFBQSxhQUVBLHVDQUFjO0FBQUEsYUFETTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFFdUM7QUFBQSxJQUFwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBK0M7QUFBQTtBQUFBO0FBQUEsTUFyUWI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUEyQyxhQUFBckksR0FBQW9JLEtBQUFFO0FBQUFBLElBMFEzRDtBQUFBO0FBQUEsTUFBQXZFLElBQUE7QUFBQSxNQUFBMkIsSUFFVTtBQUFBLFVBQ1I7QUFBQTtBQUFBO0FBQUEsY0FDb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNwQjtBQUFBLEtBQXlCO0FBQUE7QUFBQSxZQUNtQztBQUFBLElBQXJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFnRDtBQUFBLFdBaFJkO0FBQUEsWUFBQTZDLGNBQUF2SSxHQUFBNEg7QUFBQUEsSUFxUjNEO0FBQUEsU0FBQTdELElBQUEsVUFDc0M7QUFBQSxLQUFrQjtBQUFBO0FBQUEsSUFDakQ7QUFBQSxHQUFVO0FBQUEsWUFBQXlFLFNBQUF4SSxHQUlHLHdCQUFhO0FBQUE7QUFBQTtBQUFBLE1BM1IwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXlJLHdCQUFBYjtBQUFBQTtBQUFBQSxLQUFBYixNQWdTakQ7QUFBQSxLQUFBcEksUUFDSztBQUFBLElBQThCO0FBQUEsS0FDakI7QUFBQTtBQUFBLFFBQUE0SSxLQURpQjtBQUFBLElBRTdDO0FBQUE7QUFBQSxxQkFBQW1CO0FBQUFBO0FBQUFBLGNBQUFYLFNBQ0U7QUFBQSxjQUFBQyxTQUNhO0FBQUEsYUFDYjtBQUFBLHNCQUNvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBQUFuQixTQUNQO0FBQUEsYUFDYjtBQUFBO0FBQUEsd0JBQUFuQixHQUFBdUM7QUFBQUEsb0JBQUEsSUFBaUM7QUFBQSxnQkFBUjtBQUFBLGdCQUFrQztBQUFBO0FBQUE7QUFBQSxhQUFNO0FBQUEsWUFDeEIsRUFQM0M7QUFBQSxHQU80QztBQUFBLFdBMVNlO0FBQUEsWUFBQVUsc0JBQUFmO0FBQUFBLFFBQUFiLE1BOFNqRDtBQUFBLElBQ1Y7QUFBQTtBQUFBLHFCQUFBMkI7QUFBQUE7QUFBQUEsYUFBQTtBQUFBLHNCQUNFO0FBQUE7QUFBQTtBQUFBLG1CQUFBM0UsSUFBQTtBQUFBLGVBQ2dCO0FBQUE7QUFBQSxjQURoQixjQUVTO0FBQUE7QUFBQSxhQUNGO0FBQUE7QUFBQSxZQUFxRCxFQUo5RDtBQUFBLEdBSStEO0FBQUE7QUFBQSxJQUFBNkUsb0JEcjFCakU7QUFBQTtBQUFBLE1Da2lCNkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLHFCQUFBQztBQUFBQSxRQUFBVixNQXVUakQ7QUFBQSxJQUNWO0FBQUE7QUFBQSxxQkFBQU07QUFBQUE7QUFBQUEsYUFBQTtBQUFBLGtCQUFBMUksSUFDRTtBQUFBO0FBQUE7QUFBQSxtQkFBQStELElBQUEsVUFFRTtBQUFBO0FBQUEsZ0JBQ29CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUNwQiwyQ0FBZ0I7QUFBQTtBQUFBLGNBSmxCO0FBQUEsdUJBS29FO0FBQUEsZUFBekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQ3BCO0FBQUE7QUFBQSxZQUFvRCxFQVA3RDtBQUFBLEdBTzhEO0FBQUE7QUFBQTtBQUFBLE1BL1RIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBZ0Ysb0JBQUFEO0FBQUFBLFFBQUFWLE1BbVVqRDtBQUFBLElBQ1Y7QUFBQTtBQUFBLHFCQUFBTTtBQUFBQSxhQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBSixVQUFBO0FBQUEsaUJBQUF2RSxJQUFBO0FBQUEscUJBRUU7QUFBQTtBQUFBO0FBQUEsaUJBQ29CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDcEI7QUFBQSxnQkFBMkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUN0QjtBQUFBO0FBQUE7QUFBQSxZQUE0RCxFQU5yRTtBQUFBLEdBTXNFO0FBQUEsV0ExVVg7QUFBQSxZQUFBaUYsWUFBQWhKO0FBQUFBLElBK1V6Qyx5Q0FBNEI7QUFBQSxJQUFpQjtBQUFBLEdBQVU7QUFBQSxZQUFBaUosY0FBQWpKO0FBQUFBLElBQ3JELDZDQUFBZSxJQUFBLE1BQ0g7QUFBQSxJQUNWO0FBQUE7QUFBQSxHQUFtRDtBQUFBLFlBQUFtSSxrQkFBQWxKO0FBQUFBLElBQ2xDLDZDQUFBZSxJQUFBLE1BQ1A7QUFBQSxJQUNWO0FBQUE7QUFBQSxHQUF1RDtBQUFBLFlBQUFvSSxvQkFBQW5KO0FBQUFBLElBQ3BDO0FBQUEsU0FBQWUsSUFBQSxNQUFBcEMsUUFDVDtBQUFBLGlCQUFpRDtBQUFBLFNBQUE2RyxJQUFqRDtBQUFBLEtBQXFDO0FBQUE7QUFBQSxJQUMvQztBQUFBO0FBQUEsR0FBeUQ7QUFBQSxZQUFBNEQsVUFBQXJLLE9BS3hDLHlDQUFnQjtBQUFBLFlBQUFzSyxTQUFBN0UsR0FBQThFO0FBQUFBLFFBQUEzSyxRQUdsQztBQUFBLElBQXNCLFlBQTRCO0FBQUEsUUFBQXFCLElBQTVCO0FBQUEsSUFBZ0I7QUFBQSxHQUFlO0FBQUEsWUFBQXVKLFNBQUEvRSxHQUFBOEUsS0FFL0IsMkNBQWlCO0FBQUEsWUFBQUUsU0FBQWhGLEdBQUE4RSxLQUFBdEo7QUFBQUEsSUFFZiwrQ0FBdUI7QUFBQTtBQUFBLFlBQUF5SixZQUFBakYsR0FBQThFLEtBRXRCLDRDQUFvQjtBQUFBLFlBQUFJLFVBQUFsRjtBQUFBQSxJQVNuRDtBQUFBLDRCQUFBTSxHQUFBL0YsT0FBQTRLLEtBQTZCLHdCQUFlLFFBQU07QUFBQTtBQUFBLFlBQUFDLFVBQUFwRjtBQUFBQSxJQUdsRDtBQUFBLDRCQUFBekYsT0FBQWlCLEdBQUEySixLQUE2QixtQkFBUSxRQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFsWGdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBRSxhQUFBQyxLQUFBL0s7QUFBQUEsSUF5WHhDO0FBQUE7QUFBQSxlQUNWO0FBQUEsZUE4R0EsMENBd0JnQjtBQUFBLFFBQUFtQyxRRGxpQzNCLE1BQUFBLFFBQUEsTUFBQUEsUUFBQTtBQUFBLElDMjVCcUI7QUFBQTtBQUFBO0FBQUEsaUJBRUo7QUFBQSxpQkFDQyw0Q0FvSVM7QUFBQTtBQUFBLFdBQUFELElBdklOLGNBSWtCO0FBQUEsT0FBaUIsMkNBbUk3QjtBQUFBO0FBQUEsV0FBQUEsTUF2SU4sY0FLaUI7QUFBQSxPQUFpQiwyQ0FrSTVCO0FBQUE7QUFBQSxXQUFBdkMsTUF2SU47QUFBQSxPQU9qQjtBQUFBLE9BQ0E7QUFBQTtBQUFBLGtCQUFBOEc7QUFBQUEsVUFBWSxhQUNBLCtDQUtzQjtBQUFBLFVBTnRCO0FBQUEsd0JBRUEsZ0RBSXNCO0FBQUE7QUFBQTtBQUFBLFdBTnRCO0FBQUE7QUFBQSxjQUtBLCtDQUNzQjtBQUFBO0FBQUEsY0FIdEIsK0NBR3NCO0FBQUE7QUFBQSxjQUZ0QiwrQ0FFc0I7QUFBQTtBQUFBLFVBQXRCLDJDQUFzQjtBQUFBO0FBQUE7QUFBQSxPQUFFLDRDQXlIYjtBQUFBO0FBQUEsV0FBQTlHLE1BdklOLFVBZ0JMLDZDQXVIVztBQUFBO0FBQUEsV0FBQW9HLElBdklOO0FBQUEsT0FpQko7QUFBQSxPQUF1QiwyQ0FzSGI7QUFBQTtBQUFBLFdBQUF2RCxRQXZJTjtBQUFBO0FBQUEsV0FBQWlELElBQUE7QUFBQSxPQTJCakI7QUFBQSxXQUFBdUYsUUFBdUI7QUFBQSxPQUV2QjtBQUFBO0FBQUEsa0JBQUFqRixHQUFBOUU7QUFBQUEsVUFDRTtBQUFBLFdBQWU7QUFBQTtBQUFBLFdBQW9CO0FBQUEsVUFDbkM7QUFBQSxVQUF5QjtBQUFBLFVBQ3pCO0FBQUEsVUFBdUIsMkJBQW9CO0FBQUE7QUFBQTtBQUFBLE9BQUcsNkNBdUd6QjtBQUFBO0FBQUEsV0FBQWlGLElBdklOLFVBQUF0RyxRQW1DakI7QUFBQSxxQkFBQXNDLE1BQUEsVUFBQStJLE1BQXdDLGNBQUFBLE1BQXhDO0FBQUEsT0FDQTtBQUFBLE9BQXlCO0FBQUEsT0FDekI7QUFBQSxlQUErQztBQUFBLE9BQXRCO0FBQUEsT0FBcUQsK0NBa0d2RDtBQUFBO0FBQUEsV0FBQXhFLElBdklOO0FBQUEsT0F3Q2pCO0FBQUEsT0FBc0M7QUFBQSxPQUN0QztBQUFBLGVBQStDO0FBQUEsT0FBdEI7QUFBQSxPQUFxRCwrQ0E4RnZEO0FBQUE7QUFBQSxXQUFBRSxJQXZJTjtBQUFBLE9BNENqQjtBQUFBLE9BQW1DO0FBQUEsT0FDbkM7QUFBQSxlQUErQztBQUFBLE9BQXRCO0FBQUEsT0FBcUQsK0NBMEZ2RDtBQUFBO0FBQUEsV0FBQVMsSUF2SU4sVUFBQXhILFVBZ0RqQjtBQUFBO0FBQUEsWUFBQXNDLE1BQUEsWUFBQStJLFFBQXdDO0FBQUE7QUFBQSxZQUFBQSxRQUF4QztBQUFBLE9BQ0E7QUFBQSxPQUF5QjtBQUFBLE9BQ3pCO0FBQUEsZUFBK0M7QUFBQSxPQUF0QjtBQUFBLE9BQXFELCtDQXFGdkQ7QUFBQTtBQUFBLE9BbkZaLG1EQW1GWTtBQUFBO0FBQUEsT0FsRkEsMERBa0ZBO0FBQUE7QUFBQSxPQWpGTSxpRUFpRk47QUFBQTtBQUFBLFdBQUFqSyxPQXZJTjtBQUFBLE9Bd0RqQjtBQUFBLE9BQWtDO0FBQUEsT0FBMEIsNENBK0VyQztBQUFBO0FBQUEsT0E5RVgsb0RBOEVXO0FBQUE7QUFBQSxXQUFBckIsTUF2SU47QUFBQSxPQTJEakI7QUFBQSxlQUNzQixzQkFEYztBQUFBLE9BQ3BDO0FBQUEsT0FBdUQsK0NBMkVoQztBQUFBO0FBQUEsT0F6RVgsb0RBeUVXO0FBQUE7QUFBQSxXQUFBQSxNQXZJTjtBQUFBLE9BZ0VqQjtBQUFBLGVBQ3NCLHNCQURhO0FBQUEsT0FDbkM7QUFBQSxPQUF1RCwrQ0FzRWhDO0FBQUE7QUFBQSxPQXBFZCxpREFvRWM7QUFBQTtBQUFBLFdBQUE2QyxRQXZJTjtBQUFBO0FBQUEsT0FvRUgsdURBbUVTO0FBQUE7QUFBQSxXQUFBbEUsSUF2SU47QUFBQSxPQXNFakI7QUFBQSxPQUFpQztBQUFBLE9BQStCLDRDQWlFekM7QUFBQTtBQUFBLFdBQUE0TSxLQXZJTjtBQUFBLE9Bd0VqQjtBQUFBLFdBQUF0TCxVQUE0QjtBQUFBLHVCQUFBc0MsTUFBQSxZQUFBQSxNQUMyQixjQUFBQSxNQUQzQjtBQUFBLE9BQzVCO0FBQUEsT0FBMEUsNENBOERuRDtBQUFBO0FBQUE7QUFBQSxRQUFBNUQsTUF2SU47QUFBQSxZQTRGSztBQUFBO0FBQUE7QUFBQSxPQUE2RCwyQ0EyQzVEO0FBQUE7QUFBQTtBQUFBLFFBQUE4SSxNQXZJTjtBQUFBLFlBOEY0RDtBQUFBLFlBQXZEO0FBQUE7QUFBQSxPQUFpRiwyQ0F5Q2hGO0FBQUE7QUFBQSxXQUFBcEMsTUF2SU47QUFBQSxPQTRFakI7QUFBQSxPQUFrQztBQUFBLE9BQ2xDO0FBQUE7QUFBQSxrQkFBQTJCLEdBQUExRjtBQUFBQSxVQUNFO0FBQUEsa0JBQ3NCO0FBQUEsVUFBdEI7QUFBQSxVQUNBO0FBQUEsVUFBdUIsMkJBQ0w7QUFBQTtBQUFBO0FBQUEsT0FBWSw0Q0FzRFQ7QUFBQTtBQUFBLFdBQUFlLE1BdklOO0FBQUEsT0FvRmpCO0FBQUEsT0FBcUM7QUFBQSxPQUE4Qiw0Q0FtRDVDO0FBQUE7QUFBQSxXQUFBbUosTUF2SU47QUFBQSxPQXNGakI7QUFBQSxPQUNBO0FBQUE7QUFBQSxrQkFBQXhFLEdBQUExRjtBQUFBQSxVQUNFLFVBQWM7QUFBQSxVQUNkLDJCQUFrQjtBQUFBO0FBQUE7QUFBQSxPQUFLLDRDQThDRjtBQUFBO0FBQUE7QUFBQSxRQUFBeUIsSUF2SU47QUFBQSxZQWdHMEM7QUFBQSxZQUFyQztBQUFBLE9BQXVELDJDQXVDdEQ7QUFBQTtBQUFBO0FBQUEsUUFBQTBJLEtBdklOO0FBQUEsWUFrR3VDO0FBQUEsWUFBbEM7QUFBQSxPQUFzRCwyQ0FxQ3JEO0FBQUE7QUFBQSxXQUFBbEosTUF2SU47QUFBQSxPQW9HakI7QUFBQSxPQUEyQjtBQUFBLHdCQVFqQixrREEyQmE7QUFBQTtBQUFBO0FBQUEsUUFuQ0k7QUFBQTtBQUFBLFdBTW5CLCtDQTZCZTtBQUFBO0FBQUEsV0ExQmYscURBMEJlO0FBQUE7QUFBQSxXQS9CZiwrQ0ErQmU7QUFBQTtBQUFBLFdBaENkLG1EQWdDYztBQUFBO0FBQUEsV0E5QmQsa0RBOEJjO0FBQUE7QUFBQSxXQTVCZCxrREE0QmM7QUFBQTtBQUFBLFdBakNkLGlEQWlDYztBQUFBO0FBQUEsZUF6Qlk7QUFBQSxPQUFnQiwyQ0F5QjVCO0FBQUE7QUFBQTtBQUFBLFlBdklOO0FBQUEsUUFBQW1KLFlBQUE7QUFBQSxRQUFBekwsVUFBQTtBQUFBLFFBQUEwTCxhRDM1QnJCO0FBQUEsT0MyNUJxQjtBQUFBO0FBQUEsU0FBQUMsTUFBQTtBQUFBLGFBaUhqQjtBQUFBLGFBQXNCO0FBQUE7QUFBQSxRQUFtRiwyQ0FzQmxGO0FBQUE7QUFBQTtBQUFBLFFBQUE3SSxNQXZJTjtBQUFBLFlBbUhqQjtBQUFBLFlBQStEO0FBQUEsWUFBekM7QUFBQSxPQUFpRywyQ0FvQmhHO0FBQUE7QUFBQSxXQUFBK0MsTUF2SU4sVUFBQXZELE1BQUEsY0FxSEs7QUFBQSxPQUF0QjtBQUFBLE9BQXlDO0FBQUEsZUFDbkI7QUFBQSxPQUFpQiwyQ0FpQmhCO0FBQUE7QUFBQTtBQUFBLFFBQUFrSixPQXZJTjtBQUFBLFlBd0hnQztBQUFBLFlBQTNCO0FBQUEsT0FBK0MsMkNBZTlDO0FBQUE7QUFBQSxXQUFBSSxRQXZJTixVQUFBQyxNQUFBO0FBQUEsT0EwSGpCO0FBQUEsT0FBNEI7QUFBQSxPQUM1QjtBQUFBLE9BQXVCLCtDQVlBO0FBQUE7QUFBQSxXQUFBL0ksTUF2SU47QUFBQSxPQTZIakI7QUFBQSxXQUFBUixNQUE0Qix1Q0FFNUI7QUFBQTtBQUFBLFlBQUF5RSxNQUFBO0FBQUE7QUFBQSxTQUNFLFlBQWM7QUFBQTtBQUFBLGNBQ2tDO0FBQUEsY0FBMUI7QUFBQSxTQUF0QjtBQUFBLGlCQUFpRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FFbkUsNENBSXVCO0FBQUE7QUFBQSxXQUFBMUIsSUF2SU47QUFBQSxPQXFJakI7QUFBQSxPQUF5QjtBQUFBLE9BQ3pCO0FBQUE7QUFBQSxrQkFBQWhFO0FBQUFBLFVBQXFCO0FBQUEsVUFBdUIsMkJBQW9CO0FBQUE7QUFBQTtBQUFBLE9BQWEsNENBQ3REO0FBQUE7QUFBQSxJQXBIdkI7QUFBQSxJQUF1QjtBQUFBLFNBQUFxSCxPQUFBLFVBQUFvRCxJQUFBO0FBQUEsS0FJcEI7QUFBQSxLQUNBO0FBQUE7QUFBQSxnQkFBQXpLO0FBQUFBLFFBQW9CO0FBQUEsUUFBdUIsMkJBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFDbEUsNENBOEd1QjtBQUFBO0FBQUEsWUFBQTBLLFFBQUExSztBQUFBQSxRQUFBOEosTUFHZjtBQUFBLElBQ1Y7QUFBQSxJQUFrQix1Q0FDQztBQUFBO0FBQUEsR0FyZ0J3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURsaUI3RCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM5OTUzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9jYm9yLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIGRhZy1jYm9yIGVuY29kZSAvIGRlY29kZSDigJQgcHVyZSBPQ2FtbCwgV0FTTS1zYWZlLlxuXG4gICAgUkZDIDg5NDkgZGV0ZXJtaW5pc3RpYyBzdWJzZXQgYXMgY29uc3RyYWluZWQgYnkgSVBMRCBkYWctY2JvclxuICAgIChSRkMgODc0Mik6IHVuc2lnbmVkL25lZ2F0aXZlIGludHMsIHRleHQgc3RyaW5ncywgYXJyYXlzLCBtYXBzXG4gICAgd2l0aCBrZXlzIHNvcnRlZCBieSAqKmxlbmd0aC10aGVuLWJ5dGV3aXNlKiosIGJvb2wsIG51bGwsIGFuZFxuICAgIHRhZyA0MiAoQ0lEIGxpbmssIGRlY29kZS1zaWRlIHBhc3N0aHJvdWdoKS4gRmxvYXRzIGFyZSBub3RcbiAgICBzdXBwb3J0ZWQgKG5vIGZlZC1zeCBzaGFwZSBuZWVkcyB0aGVtIHlldCkg4oCUIGVuY29kaW5nIGEgW051bWJlcl1cbiAgICBvciBkZWNvZGluZyBhIGZsb2F0IGhlYWQgcmFpc2VzLiBSZWZlcmVuY2U6IFJGQyA4OTQ5IMKnMywgwqc0LjIuICopXG5cbm9wZW4gU3hfdHlwZXNcblxuZXhjZXB0aW9uIENib3JfZXJyb3Igb2Ygc3RyaW5nXG5cbigqIC0tLS0gRW5jb2RlciAtLS0tICopXG5cbmxldCB3cml0ZV9oZWFkIGJ1ZiBtYWpvciB2ID1cbiAgbGV0IG0gPSBtYWpvciBsc2wgNSBpblxuICAoKiBXaWR0aCBzZWxlY3Rpb24gKyBiaWctZW5kaWFuIGJ5dGUgZW1pc3Npb24gdmlhIEludDY0LCBzbyB0aGUgd2ViIHRhcmdldHNcbiAgICAgY29tcHV0ZSBpZGVudGljYWxseSB0byBuYXRpdmU6IG9uIGpzX29mX29jYW1sIFtpbnRdIGlzIDMyLWJpdCwgc28gdGhlXG4gICAgIGxpdGVyYWwgMHgxMDAwMDAwMDAgKDJeMzIpIHRydW5jYXRlcyB0byAwIChzZW5kaW5nIHNtYWxsIHZhbHVlcyB0byB0aGVcbiAgICAgOC1ieXRlIGJyYW5jaCkgYW5kIFt2IGxzciAoOCppKV0gd2l0aCBpPj00IGlzIHNoaWZ0LW1vZC0zMi4gSW50NjQgaGFzIHRoZVxuICAgICBmdWxsIDY0LWJpdCB3aWR0aCBhbmQgd2VsbC1kZWZpbmVkIHNoaWZ0cyBvbiBldmVyeSB0YXJnZXQuICopXG4gIGxldCB2NjQgPSBJbnQ2NC5vZl9pbnQgdiBpblxuICBsZXQgcHV0X2JlIG5ieXRlcyA9XG4gICAgZm9yIGkgPSBuYnl0ZXMgLSAxIGRvd250byAwIGRvXG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmXG4gICAgICAgIChDaGFyLmNociAoSW50NjQudG9faW50XG4gICAgICAgICAgIChJbnQ2NC5sb2dhbmQgKEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgdjY0ICg4ICogaSkpIDB4RkZMKSkpXG4gICAgZG9uZVxuICBpblxuICBpZiB2IDwgMjQgdGhlblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChtIGxvciB2KSlcbiAgZWxzZSBpZiB2IDwgMHgxMDAgdGhlbiBiZWdpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChtIGxvciAyNCkpOyBwdXRfYmUgMVxuICBlbmQgZWxzZSBpZiB2IDwgMHgxMDAwMCB0aGVuIGJlZ2luXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG0gbG9yIDI1KSk7IHB1dF9iZSAyXG4gIGVuZCBlbHNlIGlmIEludDY0LmNvbXBhcmUgdjY0IDB4MTAwMDAwMDAwTCA8IDAgdGhlbiBiZWdpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChtIGxvciAyNikpOyBwdXRfYmUgNFxuICBlbmQgZWxzZSBiZWdpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChtIGxvciAyNykpOyBwdXRfYmUgOFxuICBlbmRcblxuKCogZGFnLWNib3IgbWFwIGtleSBvcmRlcjogc2hvcnRlciBrZXkgZmlyc3QsIHRoZW4gYnl0ZXdpc2UuICopXG5sZXQga2V5X29yZGVyIGEgYiA9XG4gIGxldCBsYSA9IFN0cmluZy5sZW5ndGggYSBhbmQgbGIgPSBTdHJpbmcubGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlbiBjb21wYXJlIGxhIGxiIGVsc2UgY29tcGFyZSBhIGJcblxubGV0IHJlYyBlbmNvZGVfaW50byBidWYgKHYgOiB2YWx1ZSkgOiB1bml0ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgSW50ZWdlciBuIC0+XG4gICAgaWYgbiA+PSAwIHRoZW4gd3JpdGVfaGVhZCBidWYgMCBuXG4gICAgZWxzZSB3cml0ZV9oZWFkIGJ1ZiAxICgtMSAtIG4pXG4gIHwgU3RyaW5nIHMgLT5cbiAgICB3cml0ZV9oZWFkIGJ1ZiAzIChTdHJpbmcubGVuZ3RoIHMpO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgU3ltYm9sIHMgfCBLZXl3b3JkIHMgLT5cbiAgICB3cml0ZV9oZWFkIGJ1ZiAzIChTdHJpbmcubGVuZ3RoIHMpO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgQm9vbCBmYWxzZSAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHhmNCdcbiAgfCBCb29sIHRydWUgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xceGY1J1xuICB8IE5pbCAgICAgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFx4ZjYnXG4gIHwgTGlzdCBpdGVtcyAtPlxuICAgIHdyaXRlX2hlYWQgYnVmIDQgKExpc3QubGVuZ3RoIGl0ZW1zKTtcbiAgICBMaXN0Lml0ZXIgKGVuY29kZV9pbnRvIGJ1ZikgaXRlbXNcbiAgfCBEaWN0IGQgLT5cbiAgICBsZXQga2V5cyA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIGQgW10gaW5cbiAgICBsZXQga2V5cyA9IExpc3Quc29ydF91bmlxIGtleV9vcmRlciBrZXlzIGluXG4gICAgd3JpdGVfaGVhZCBidWYgNSAoTGlzdC5sZW5ndGgga2V5cyk7XG4gICAgTGlzdC5pdGVyIChmdW4gayAtPlxuICAgICAgd3JpdGVfaGVhZCBidWYgMyAoU3RyaW5nLmxlbmd0aCBrKTtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBrO1xuICAgICAgZW5jb2RlX2ludG8gYnVmIChIYXNodGJsLmZpbmQgZCBrKSkga2V5c1xuICB8IE51bWJlciBfIC0+XG4gICAgcmFpc2UgKENib3JfZXJyb3IgXCJjYm9yLWVuY29kZTogZmxvYXRzIHVuc3VwcG9ydGVkIChkYWctY2JvciBzdWJzZXQpXCIpXG4gIHwgXyAtPlxuICAgIHJhaXNlIChDYm9yX2Vycm9yXG4gICAgICAgICAgICAgKFwiY2Jvci1lbmNvZGU6IHVuZW5jb2RhYmxlIHZhbHVlIFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGVuY29kZSAodiA6IHZhbHVlKSA6IHN0cmluZyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGVuY29kZV9pbnRvIGJ1ZiB2O1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbigqIC0tLS0gRGVjb2RlciAtLS0tICopXG5cbmxldCBkZWNvZGUgKHMgOiBzdHJpbmcpIDogdmFsdWUgPVxuICBsZXQgcG9zID0gcmVmIDAgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgYnl0ZSAoKSA9XG4gICAgaWYgIXBvcyA+PSBsZW4gdGhlbiByYWlzZSAoQ2Jvcl9lcnJvciBcImNib3ItZGVjb2RlOiB0cnVuY2F0ZWRcIik7XG4gICAgbGV0IGMgPSBDaGFyLmNvZGUgcy5bIXBvc10gaW4gaW5jciBwb3M7IGNcbiAgaW5cbiAgbGV0IHJlYWRfdWludCBhaSA9XG4gICAgaWYgYWkgPCAyNCB0aGVuIGFpXG4gICAgZWxzZSBpZiBhaSA9IDI0IHRoZW4gYnl0ZSAoKVxuICAgIGVsc2UgaWYgYWkgPSAyNSB0aGVuIGxldCBhID0gYnl0ZSAoKSBpbiBsZXQgYiA9IGJ5dGUgKCkgaW4gKGEgbHNsIDgpIGxvciBiXG4gICAgZWxzZSBpZiBhaSA9IDI2IHRoZW4gYmVnaW5cbiAgICAgIGxldCB2ID0gcmVmIDAgaW5cbiAgICAgIGZvciBfID0gMCB0byAzIGRvIHYgOj0gKCF2IGxzbCA4KSBsb3IgYnl0ZSAoKSBkb25lOyAhdlxuICAgIGVuZCBlbHNlIGlmIGFpID0gMjcgdGhlbiBiZWdpblxuICAgICAgbGV0IHYgPSByZWYgMCBpblxuICAgICAgZm9yIF8gPSAwIHRvIDcgZG8gdiA6PSAoIXYgbHNsIDgpIGxvciBieXRlICgpIGRvbmU7ICF2XG4gICAgZW5kIGVsc2UgcmFpc2UgKENib3JfZXJyb3IgXCJjYm9yLWRlY29kZTogYmFkIGFkZGl0aW9uYWwgaW5mb1wiKVxuICBpblxuICBsZXQgcmVhZF9ieXRlcyBuID1cbiAgICBpZiAhcG9zICsgbiA+IGxlbiB0aGVuIHJhaXNlIChDYm9yX2Vycm9yIFwiY2Jvci1kZWNvZGU6IHRydW5jYXRlZFwiKTtcbiAgICBsZXQgciA9IFN0cmluZy5zdWIgcyAhcG9zIG4gaW4gcG9zIDo9ICFwb3MgKyBuOyByXG4gIGluXG4gIGxldCByZWMgaXRlbSAoKSA9XG4gICAgbGV0IGIgPSBieXRlICgpIGluXG4gICAgbGV0IG1ham9yID0gYiBsc3IgNSBhbmQgYWkgPSBiIGxhbmQgMHgxZiBpblxuICAgIG1hdGNoIG1ham9yIHdpdGhcbiAgICB8IDAgLT4gSW50ZWdlciAocmVhZF91aW50IGFpKVxuICAgIHwgMSAtPiBJbnRlZ2VyICgtMSAtIHJlYWRfdWludCBhaSlcbiAgICB8IDIgLT4gU3RyaW5nIChyZWFkX2J5dGVzIChyZWFkX3VpbnQgYWkpKVxuICAgIHwgMyAtPiBTdHJpbmcgKHJlYWRfYnl0ZXMgKHJlYWRfdWludCBhaSkpXG4gICAgfCA0IC0+XG4gICAgICBsZXQgbiA9IHJlYWRfdWludCBhaSBpblxuICAgICAgTGlzdCAoTGlzdC5pbml0IG4gKGZ1biBfIC0+IGl0ZW0gKCkpKVxuICAgIHwgNSAtPlxuICAgICAgbGV0IG4gPSByZWFkX3VpbnQgYWkgaW5cbiAgICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgICBmb3IgXyA9IDEgdG8gbiBkb1xuICAgICAgICBsZXQgayA9IG1hdGNoIGl0ZW0gKCkgd2l0aFxuICAgICAgICAgIHwgU3RyaW5nIGsgLT4ga1xuICAgICAgICAgIHwgXyAtPiByYWlzZSAoQ2Jvcl9lcnJvciBcImNib3ItZGVjb2RlOiBub24tc3RyaW5nIG1hcCBrZXlcIilcbiAgICAgICAgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgayAoaXRlbSAoKSlcbiAgICAgIGRvbmU7XG4gICAgICBEaWN0IGRcbiAgICB8IDYgLT5cbiAgICAgICgqIFRhZzogdGFnLTQyIENJRCBsaW5rIOKGkiBwYXNzIHRoZSBpbm5lciBpdGVtIHRocm91Z2guICopXG4gICAgICBpZ25vcmUgKHJlYWRfdWludCBhaSk7IGl0ZW0gKClcbiAgICB8IDcgLT5cbiAgICAgIChtYXRjaCBhaSB3aXRoXG4gICAgICAgfCAyMCAtPiBCb29sIGZhbHNlXG4gICAgICAgfCAyMSAtPiBCb29sIHRydWVcbiAgICAgICB8IDIyIC0+IE5pbFxuICAgICAgIHwgMjMgLT4gTmlsXG4gICAgICAgfCBfIC0+XG4gICAgICAgICByYWlzZSAoQ2Jvcl9lcnJvclxuICAgICAgICAgICAgICAgICAgXCJjYm9yLWRlY29kZTogZmxvYXRzL3NpbXBsZSB1bnN1cHBvcnRlZCAoZGFnLWNib3Igc3Vic2V0KVwiKSlcbiAgICB8IF8gLT4gcmFpc2UgKENib3JfZXJyb3IgXCJjYm9yLWRlY29kZTogYmFkIG1ham9yIHR5cGVcIilcbiAgaW5cbiAgbGV0IHYgPSBpdGVtICgpIGluXG4gIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9MaXN0IiwiU3hfdHlwZXMiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfSW50NjQiLCJDYm9yX2Vycm9yIiwid3JpdGVfaGVhZCIsImJ1ZiIsIm1ham9yIiwidiIsIm0iLCJ2NjQiLCJwdXRfYmUiLCJuYnl0ZXMiLCJpIiwia2V5X29yZGVyIiwiYSIsImIiLCJsYSIsImxiIiwiZW5jb2RlX2ludG8iLCJuIiwicyIsIml0ZW1zIiwiZCIsImtleXMiLCJrIiwicGFyYW0iLCJhY2MiLCJlbmNvZGUiLCJkZWNvZGUiLCJsZW4iLCJjc3RfY2Jvcl9kZWNvZGVfdHJ1bmNhdGVkIiwicG9zIiwiYnl0ZSIsImMiLCJyZWFkX3VpbnQiLCJhaSIsImZvciQiLCJpdGVtIiwic3dpdGNoZXIiLCJyIiwibWF0Y2giXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBQyxLQUFBQyxPQUFBQztBQUFBQSxRQUFBQyxJQ2dCRSxZQUFBQyxNQU1VO0FBQUEsYUFBQUMsT0FBQUM7QUFBQUEsU0FBQSxJQUVSO0FBQUE7QUFBQSxVQUFBQyxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFFSTtBQUFBO0FBQUEsWUFDK0Q7QUFBQSxjQUE1RDtBQUFBLGdCQUFjO0FBQUEsT0FGbkI7QUFBQSxlQUVtRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FIckU7QUFBQSxJQUlJO0FBQUEsSUFFTjtBQUFBLGFBQ3NCO0FBQUEsS0FBb0IsMkNBU3ZDO0FB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QTtBQUFBO0FBQUE7QUFBQSxVQU5IO0FBQUE7QUFBQSxhQUNTO0FBQUE7QUFBQSxhQUNBO0FBQUEscUJBRlQ7QUFBQTtBQUFBO0FBQUEsY0FBQW5CLElBdkJGO0FBQUEsVUFOQTtBQUFBLFdBQXVCO0FBQUE7QUFBQSxjQUFBb0IsSUFDZjtBQUFBLFVBQXVCO0FBQUEsVUFBaUI7QUFBQTtBQUFBO0FBQUEsVUFBQXBCLE1BY3RDLGVBQUFHLE1BQ0E7QUFBQSxNQUNSO0FBQUEsV0FBQWMsT0FBQTtBQUFBO0FBQUEsWUFBQUksUUFDZ0I7QUFBQSxRQUFPO0FBQUEsYUFBQWhCLElBQUEsY0FJRDtBQUFBLFNBQXBCO0FBQUEsaUJBQTZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUZwQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSVg7QUFBQTtBQUFBLFNBQUFMLE1BWlE7QUFBQSxLQUNIO0FBQUEsc0RBQUFNLE9BQXVCLGNBQU8sSUFBRTtBQUFBLElBd0JnQjtBQUFBLFFBQUFsQixJQUVqRDtBQUFBLElBQ1I7QUFBQSxHQUFDO0FBQUEsR0RqSkgiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0MDIwNywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfc2hhMi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTSEEtMiAoU0hBLTI1NiwgU0hBLTUxMikg4oCUIHB1cmUgT0NhbWwsIFdBU00tc2FmZS5cblxuICAgIE5vIEMgc3R1YnMsIG5vIGV4dGVybmFsIGRlcHMuIFVzZWQgYnkgdGhlIGZlZC1zeCBob3N0IHByaW1pdGl2ZXNcbiAgICBbY3J5cHRvLXNoYTI1Nl0gLyBbY3J5cHRvLXNoYTUxMl0uIFJlZmVyZW5jZTogRklQUyAxODAtNC4gKilcblxuKCogLS0tLSBTSEEtMjU2IChGSVBTIDE4MC00IMKnNi4yKS4gMzItYml0IHdvcmRzIHZpYSBJbnQzMiwgTk9UIG5hdGl2ZSBpbnQuXG4gICBPbiB0aGUgd2ViIHRhcmdldHMgdGhlIGtlcm5lbCBpcyBjb21waWxlZCBieSBqc19vZl9vY2FtbCAoMzItYml0IGludCkgYW5kXG4gICB3YXNtX29mX29jYW1sICgzMS1iaXQgaW50KSwgd2hlcmUgbmF0aXZlIFtpbnRdIHNpbGVudGx5IHRydW5jYXRlcyB0aGUgMzItYml0XG4gICByb3VuZCB3b3JkcyDigJQgcHJvZHVjaW5nIFdST05HIGRpZ2VzdHMgKGFuZCwgZG93bnN0cmVhbSwgYmFkIENJRHMgYW5kIGFcbiAgIENoYXIuY2hyIGNyYXNoIGF0IGtlcm5lbCBpbml0KS4gSW50MzIgaGFzIHdlbGwtZGVmaW5lZCB3cmFwLWFyb3VuZCBtb2QgMl4zMiBvblxuICAgZXZlcnkgdGFyZ2V0LCBzbyB0aGlzIG1hdGNoZXMgdGhlIDYzLWJpdCBuYXRpdmUgYnVpbGQgZXhhY3RseS4gLS0tLSAqKVxuXG5sZXQgazI1NiA9IFt8XG4gIDB4NDI4YTJmOThsOyAweDcxMzc0NDkxbDsgMHhiNWMwZmJjZmw7IDB4ZTliNWRiYTVsO1xuICAweDM5NTZjMjVibDsgMHg1OWYxMTFmMWw7IDB4OTIzZjgyYTRsOyAweGFiMWM1ZWQ1bDtcbiAgMHhkODA3YWE5OGw7IDB4MTI4MzViMDFsOyAweDI0MzE4NWJlbDsgMHg1NTBjN2RjM2w7XG4gIDB4NzJiZTVkNzRsOyAweDgwZGViMWZlbDsgMHg5YmRjMDZhN2w7IDB4YzE5YmYxNzRsO1xuICAweGU0OWI2OWMxbDsgMHhlZmJlNDc4Nmw7IDB4MGZjMTlkYzZsOyAweDI0MGNhMWNjbDtcbiAgMHgyZGU5MmM2Zmw7IDB4NGE3NDg0YWFsOyAweDVjYjBhOWRjbDsgMHg3NmY5ODhkYWw7XG4gIDB4OTgzZTUxNTJsOyAweGE4MzFjNjZkbDsgMHhiMDAzMjdjOGw7IDB4YmY1OTdmYzdsO1xuICAweGM2ZTAwYmYzbDsgMHhkNWE3OTE0N2w7IDB4MDZjYTYzNTFsOyAweDE0MjkyOTY3bDtcbiAgMHgyN2I3MGE4NWw7IDB4MmUxYjIxMzhsOyAweDRkMmM2ZGZjbDsgMHg1MzM4MGQxM2w7XG4gIDB4NjUwYTczNTRsOyAweDc2NmEwYWJibDsgMHg4MWMyYzkyZWw7IDB4OTI3MjJjODVsO1xuICAweGEyYmZlOGExbDsgMHhhODFhNjY0Ymw7IDB4YzI0YjhiNzBsOyAweGM3NmM1MWEzbDtcbiAgMHhkMTkyZTgxOWw7IDB4ZDY5OTA2MjRsOyAweGY0MGUzNTg1bDsgMHgxMDZhYTA3MGw7XG4gIDB4MTlhNGMxMTZsOyAweDFlMzc2YzA4bDsgMHgyNzQ4Nzc0Y2w7IDB4MzRiMGJjYjVsO1xuICAweDM5MWMwY2IzbDsgMHg0ZWQ4YWE0YWw7IDB4NWI5Y2NhNGZsOyAweDY4MmU2ZmYzbDtcbiAgMHg3NDhmODJlZWw7IDB4NzhhNTYzNmZsOyAweDg0Yzg3ODE0bDsgMHg4Y2M3MDIwOGw7XG4gIDB4OTBiZWZmZmFsOyAweGE0NTA2Y2VibDsgMHhiZWY5YTNmN2w7IDB4YzY3MTc4ZjJsIHxdXG5cbmxldCByb3RyMzIgKHggOiBpbnQzMikgKG4gOiBpbnQpIDogaW50MzIgPVxuICBJbnQzMi5sb2dvciAoSW50MzIuc2hpZnRfcmlnaHRfbG9naWNhbCB4IG4pIChJbnQzMi5zaGlmdF9sZWZ0IHggKDMyIC0gbikpXG5cbmxldCBzaGEyNTZfaGV4IChtc2cgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGggPSBbfCAweDZhMDllNjY3bDsgMHhiYjY3YWU4NWw7IDB4M2M2ZWYzNzJsOyAweGE1NGZmNTNhbDtcbiAgICAgICAgICAgICAweDUxMGU1MjdmbDsgMHg5YjA1Njg4Y2w7IDB4MWY4M2Q5YWJsOyAweDViZTBjZDE5bCB8XSBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBtc2cgaW5cbiAgKCogUGFkZGVkIGxlbmd0aDogbXVsdGlwbGUgb2YgNjQgYnl0ZXMuICopXG4gIGxldCBiaXRsZW4gPSBJbnQ2NC5tdWwgKEludDY0Lm9mX2ludCBsZW4pIDhMIGluXG4gIGxldCBwYWRsZW4gPVxuICAgIGxldCByID0gKGxlbiArIDEpIG1vZCA2NCBpblxuICAgIGlmIHIgPD0gNTYgdGhlbiA1NiAtIHIgZWxzZSAxMjAgLSByXG4gIGluXG4gIGxldCB0b3RhbCA9IGxlbiArIDEgKyBwYWRsZW4gKyA4IGluXG4gIGxldCBidWYgPSBCeXRlcy5tYWtlIHRvdGFsICdcXDAwMCcgaW5cbiAgQnl0ZXMuYmxpdF9zdHJpbmcgbXNnIDAgYnVmIDAgbGVuO1xuICBCeXRlcy5zZXQgYnVmIGxlbiAnXFx4ODAnO1xuICAoKiA2NC1iaXQgYmlnLWVuZGlhbiBiaXQgbGVuZ3RoLiBJbnQ2NCBzaGlmdHMgc28gdGhlIGhpZ2ggYnl0ZXMgKHNoaWZ0ID49IDMyKVxuICAgICBhcmUgY29ycmVjdCBvbiB0aGUgMzItYml0IHdlYiB0YXJnZXRzIOKAlCBuYXRpdmUgaW50IGBsc3IgMzJgIGlzIHNoaWZ0LW1vZC0zMlxuICAgICBvbiBqc19vZl9vY2FtbCBhbmQgd291bGQgbGVhayB0aGUgbG93IGxlbmd0aCBieXRlIGludG8gYSBoaWdoZXIgd29yZC4gKilcbiAgZm9yIGkgPSAwIHRvIDcgZG9cbiAgICBCeXRlcy5zZXQgYnVmICh0b3RhbCAtIDEgLSBpKVxuICAgICAgKENoYXIuY2hyIChJbnQ2NC50b19pbnRcbiAgICAgICAgIChJbnQ2NC5sb2dhbmQgKEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYml0bGVuICg4ICogaSkpIDB4RkZMKSkpXG4gIGRvbmU7XG4gIGxldCBieXRlIGkgPSBJbnQzMi5vZl9pbnQgKENoYXIuY29kZSAoQnl0ZXMuZ2V0IGJ1ZiBpKSkgaW5cbiAgbGV0IHcgPSBBcnJheS5tYWtlIDY0IDBsIGluXG4gIGxldCBuYmxvY2tzID0gdG90YWwgLyA2NCBpblxuICBmb3IgYiA9IDAgdG8gbmJsb2NrcyAtIDEgZG9cbiAgICBsZXQgYmFzZSA9IGIgKiA2NCBpblxuICAgIGZvciB0ID0gMCB0byAxNSBkb1xuICAgICAgbGV0IG8gPSBiYXNlICsgdCAqIDQgaW5cbiAgICAgIHcuKHQpIDwtXG4gICAgICAgIEludDMyLmxvZ29yXG4gICAgICAgICAgKEludDMyLmxvZ29yXG4gICAgICAgICAgICAgKEludDMyLnNoaWZ0X2xlZnQgKGJ5dGUgbykgMjQpXG4gICAgICAgICAgICAgKEludDMyLnNoaWZ0X2xlZnQgKGJ5dGUgKG8gKyAxKSkgMTYpKVxuICAgICAgICAgIChJbnQzMi5sb2dvclxuICAgICAgICAgICAgIChJbnQzMi5zaGlmdF9sZWZ0IChieXRlIChvICsgMikpIDgpXG4gICAgICAgICAgICAgKGJ5dGUgKG8gKyAzKSkpXG4gICAgZG9uZTtcbiAgICBmb3IgdCA9IDE2IHRvIDYzIGRvXG4gICAgICBsZXQgczAgPVxuICAgICAgICBJbnQzMi5sb2d4b3JcbiAgICAgICAgICAoSW50MzIubG9neG9yIChyb3RyMzIgdy4odCAtIDE1KSA3KSAocm90cjMyIHcuKHQgLSAxNSkgMTgpKVxuICAgICAgICAgIChJbnQzMi5zaGlmdF9yaWdodF9sb2dpY2FsIHcuKHQgLSAxNSkgMykgaW5cbiAgICAgIGxldCBzMSA9XG4gICAgICAgIEludDMyLmxvZ3hvclxuICAgICAgICAgIChJbnQzMi5sb2d4b3IgKHJvdHIzMiB3Lih0IC0gMikgMTcpIChyb3RyMzIgdy4odCAtIDIpIDE5KSlcbiAgICAgICAgICAoSW50MzIuc2hpZnRfcmlnaHRfbG9naWNhbCB3Lih0IC0gMikgMTApIGluXG4gICAgICB3Lih0KSA8LVxuICAgICAgICBJbnQzMi5hZGQgKEludDMyLmFkZCB3Lih0IC0gMTYpIHMwKSAoSW50MzIuYWRkIHcuKHQgLSA3KSBzMSlcbiAgICBkb25lO1xuICAgIGxldCBhID0gcmVmIGguKDApIGFuZCBiYiA9IHJlZiBoLigxKSBhbmQgYyA9IHJlZiBoLigyKVxuICAgIGFuZCBkID0gcmVmIGguKDMpIGFuZCBlID0gcmVmIGguKDQpIGFuZCBmID0gcmVmIGguKDUpXG4gICAgYW5kIGcgPSByZWYgaC4oNikgYW5kIGhoID0gcmVmIGguKDcpIGluXG4gICAgZm9yIHQgPSAwIHRvIDYzIGRvXG4gICAgICBsZXQgczEgPVxuICAgICAgICBJbnQzMi5sb2d4b3JcbiAgICAgICAgICAoSW50MzIubG9neG9yIChyb3RyMzIgIWUgNikgKHJvdHIzMiAhZSAxMSkpIChyb3RyMzIgIWUgMjUpIGluXG4gICAgICBsZXQgY2ggPVxuICAgICAgICBJbnQzMi5sb2d4b3IgKEludDMyLmxvZ2FuZCAhZSAhZilcbiAgICAgICAgICAoSW50MzIubG9nYW5kIChJbnQzMi5sb2dub3QgIWUpICFnKSBpblxuICAgICAgbGV0IHQxID1cbiAgICAgICAgSW50MzIuYWRkXG4gICAgICAgICAgKEludDMyLmFkZCAoSW50MzIuYWRkICFoaCBzMSkgKEludDMyLmFkZCBjaCBrMjU2Lih0KSkpIHcuKHQpIGluXG4gICAgICBsZXQgczAgPVxuICAgICAgICBJbnQzMi5sb2d4b3JcbiAgICAgICAgICAoSW50MzIubG9neG9yIChyb3RyMzIgIWEgMikgKHJvdHIzMiAhYSAxMykpIChyb3RyMzIgIWEgMjIpIGluXG4gICAgICBsZXQgbWFqID1cbiAgICAgICAgSW50MzIubG9neG9yXG4gICAgICAgICAgKEludDMyLmxvZ3hvciAoSW50MzIubG9nYW5kICFhICFiYikgKEludDMyLmxvZ2FuZCAhYSAhYykpXG4gICAgICAgICAgKEludDMyLmxvZ2FuZCAhYmIgIWMpIGluXG4gICAgICBsZXQgdDIgPSBJbnQzMi5hZGQgczAgbWFqIGluXG4gICAgICBoaCA6PSAhZzsgZyA6PSAhZjsgZiA6PSAhZTtcbiAgICAgIGUgOj0gSW50MzIuYWRkICFkIHQxO1xuICAgICAgZCA6PSAhYzsgYyA6PSAhYmI7IGJiIDo9ICFhO1xuICAgICAgYSA6PSBJbnQzMi5hZGQgdDEgdDJcbiAgICBkb25lO1xuICAgIGguKDApIDwtIEludDMyLmFkZCBoLigwKSAhYTtcbiAgICBoLigxKSA8LSBJbnQzMi5hZGQgaC4oMSkgIWJiO1xuICAgIGguKDIpIDwtIEludDMyLmFkZCBoLigyKSAhYztcbiAgICBoLigzKSA8LSBJbnQzMi5hZGQgaC4oMykgIWQ7XG4gICAgaC4oNCkgPC0gSW50MzIuYWRkIGguKDQpICFlO1xuICAgIGguKDUpIDwtIEludDMyLmFkZCBoLig1KSAhZjtcbiAgICBoLig2KSA8LSBJbnQzMi5hZGQgaC4oNikgIWc7XG4gICAgaC4oNykgPC0gSW50MzIuYWRkIGguKDcpICFoaFxuICBkb25lO1xuICBsZXQgb3V0ID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBBcnJheS5pdGVyIChmdW4geCAtPiBCdWZmZXIuYWRkX3N0cmluZyBvdXQgKFByaW50Zi5zcHJpbnRmIFwiJTA4bHhcIiB4KSkgaDtcbiAgQnVmZmVyLmNvbnRlbnRzIG91dFxuXG4oKiAtLS0tIFNIQS01MTIgKEZJUFMgMTgwLTQgwqc2LjQpLiA2NC1iaXQgd29yZHMgdmlhIEludDY0LlxuICAgMTI4LWJpdCBsZW5ndGggYXBwZW5kOyB3ZSBvbmx5IHN1cHBvcnQgbWVzc2FnZXMgd2hvc2UgYml0IGxlbmd0aFxuICAgZml0cyBpbiA2NCBiaXRzIChoaWdoIHdvcmQgaXMgYWx3YXlzIHplcm8pLiAtLS0tICopXG5cbmxldCBrNTEyID0gW3xcbiAgMHg0MjhhMmY5OGQ3MjhhZTIyTDsgMHg3MTM3NDQ5MTIzZWY2NWNkTDsgMHhiNWMwZmJjZmVjNGQzYjJmTDtcbiAgMHhlOWI1ZGJhNTgxODlkYmJjTDsgMHgzOTU2YzI1YmYzNDhiNTM4TDsgMHg1OWYxMTFmMWI2MDVkMDE5TDtcbiAgMHg5MjNmODJhNGFmMTk0ZjliTDsgMHhhYjFjNWVkNWRhNmQ4MTE4TDsgMHhkODA3YWE5OGEzMDMwMjQyTDtcbiAgMHgxMjgzNWIwMTQ1NzA2ZmJlTDsgMHgyNDMxODViZTRlZTRiMjhjTDsgMHg1NTBjN2RjM2Q1ZmZiNGUyTDtcbiAgMHg3MmJlNWQ3NGYyN2I4OTZmTDsgMHg4MGRlYjFmZTNiMTY5NmIxTDsgMHg5YmRjMDZhNzI1YzcxMjM1TDtcbiAgMHhjMTliZjE3NGNmNjkyNjk0TDsgMHhlNDliNjljMTllZjE0YWQyTDsgMHhlZmJlNDc4NjM4NGYyNWUzTDtcbiAgMHgwZmMxOWRjNjhiOGNkNWI1TDsgMHgyNDBjYTFjYzc3YWM5YzY1TDsgMHgyZGU5MmM2ZjU5MmIwMjc1TDtcbiAgMHg0YTc0ODRhYTZlYTZlNDgzTDsgMHg1Y2IwYTlkY2JkNDFmYmQ0TDsgMHg3NmY5ODhkYTgzMTE1M2I1TDtcbiAgMHg5ODNlNTE1MmVlNjZkZmFiTDsgMHhhODMxYzY2ZDJkYjQzMjEwTDsgMHhiMDAzMjdjODk4ZmIyMTNmTDtcbiAgMHhiZjU5N2ZjN2JlZWYwZWU0TDsgMHhjNmUwMGJmMzNkYTg4ZmMyTDsgMHhkNWE3OTE0NzkzMGFhNzI1TDtcbiAgMHgwNmNhNjM1MWUwMDM4MjZmTDsgMHgxNDI5Mjk2NzBhMGU2ZTcwTDsgMHgyN2I3MGE4NTQ2ZDIyZmZjTDtcbiAgMHgyZTFiMjEzODVjMjZjOTI2TDsgMHg0ZDJjNmRmYzVhYzQyYWVkTDsgMHg1MzM4MGQxMzlkOTViM2RmTDtcbiAgMHg2NTBhNzM1NDhiYWY2M2RlTDsgMHg3NjZhMGFiYjNjNzdiMmE4TDsgMHg4MWMyYzkyZTQ3ZWRhZWU2TDtcbiAgMHg5MjcyMmM4NTE0ODIzNTNiTDsgMHhhMmJmZThhMTRjZjEwMzY0TDsgMHhhODFhNjY0YmJjNDIzMDAxTDtcbiAgMHhjMjRiOGI3MGQwZjg5NzkxTDsgMHhjNzZjNTFhMzA2NTRiZTMwTDsgMHhkMTkyZTgxOWQ2ZWY1MjE4TDtcbiAgMHhkNjk5MDYyNDU1NjVhOTEwTDsgMHhmNDBlMzU4NTU3NzEyMDJhTDsgMHgxMDZhYTA3MDMyYmJkMWI4TDtcbiAgMHgxOWE0YzExNmI4ZDJkMGM4TDsgMHgxZTM3NmMwODUxNDFhYjUzTDsgMHgyNzQ4Nzc0Y2RmOGVlYjk5TDtcbiAgMHgzNGIwYmNiNWUxOWI0OGE4TDsgMHgzOTFjMGNiM2M1Yzk1YTYzTDsgMHg0ZWQ4YWE0YWUzNDE4YWNiTDtcbiAgMHg1YjljY2E0Zjc3NjNlMzczTDsgMHg2ODJlNmZmM2Q2YjJiOGEzTDsgMHg3NDhmODJlZTVkZWZiMmZjTDtcbiAgMHg3OGE1NjM2ZjQzMTcyZjYwTDsgMHg4NGM4NzgxNGExZjBhYjcyTDsgMHg4Y2M3MDIwODFhNjQzOWVjTDtcbiAgMHg5MGJlZmZmYTIzNjMxZTI4TDsgMHhhNDUwNmNlYmRlODJiZGU5TDsgMHhiZWY5YTNmN2IyYzY3OTE1TDtcbiAgMHhjNjcxNzhmMmUzNzI1MzJiTDsgMHhjYTI3M2VjZWVhMjY2MTljTDsgMHhkMTg2YjhjNzIxYzBjMjA3TDtcbiAgMHhlYWRhN2RkNmNkZTBlYjFlTDsgMHhmNTdkNGY3ZmVlNmVkMTc4TDsgMHgwNmYwNjdhYTcyMTc2ZmJhTDtcbiAgMHgwYTYzN2RjNWEyYzg5OGE2TDsgMHgxMTNmOTgwNGJlZjkwZGFlTDsgMHgxYjcxMGIzNTEzMWM0NzFiTDtcbiAgMHgyOGRiNzdmNTIzMDQ3ZDg0TDsgMHgzMmNhYWI3YjQwYzcyNDkzTDsgMHgzYzllYmUwYTE1YzliZWJjTDtcbiAgMHg0MzFkNjdjNDljMTAwZDRjTDsgMHg0Y2M1ZDRiZWNiM2U0MmI2TDsgMHg1OTdmMjk5Y2ZjNjU3ZTJhTDtcbiAgMHg1ZmNiNmZhYjNhZDZmYWVjTDsgMHg2YzQ0MTk4YzRhNDc1ODE3TCB8XVxuXG5sZXQgKCAmOiApID0gSW50NjQubG9nYW5kXG5sZXQgKCB8OiApID0gSW50NjQubG9nb3JcbmxldCAoIF46ICkgPSBJbnQ2NC5sb2d4b3JcbmxldCAoICs6ICkgPSBJbnQ2NC5hZGRcbmxldCBsbm90NjQgPSBJbnQ2NC5sb2dub3RcblxubGV0IHJvdHI2NCB4IG4gPVxuICAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCB4IG4pIHw6IChJbnQ2NC5zaGlmdF9sZWZ0IHggKDY0IC0gbikpXG5cbmxldCBzaGE1MTJfaGV4IChtc2cgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGggPSBbfCAweDZhMDllNjY3ZjNiY2M5MDhMOyAweGJiNjdhZTg1ODRjYWE3M2JMO1xuICAgICAgICAgICAgIDB4M2M2ZWYzNzJmZTk0ZjgyYkw7IDB4YTU0ZmY1M2E1ZjFkMzZmMUw7XG4gICAgICAgICAgICAgMHg1MTBlNTI3ZmFkZTY4MmQxTDsgMHg5YjA1Njg4YzJiM2U2YzFmTDtcbiAgICAgICAgICAgICAweDFmODNkOWFiZmI0MWJkNmJMOyAweDViZTBjZDE5MTM3ZTIxNzlMIHxdIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIG1zZyBpblxuICBsZXQgYml0bGVuID0gSW50NjQubXVsIChJbnQ2NC5vZl9pbnQgbGVuKSA4TCBpblxuICAoKiBQYWQgdG8gYSBtdWx0aXBsZSBvZiAxMjggYnl0ZXM7IDE2LWJ5dGUgYmlnLWVuZGlhbiBsZW5ndGguICopXG4gIGxldCBwYWRsZW4gPVxuICAgIGxldCByID0gKGxlbiArIDEpIG1vZCAxMjggaW5cbiAgICBpZiByIDw9IDExMiB0aGVuIDExMiAtIHIgZWxzZSAyNDAgLSByXG4gIGluXG4gIGxldCB0b3RhbCA9IGxlbiArIDEgKyBwYWRsZW4gKyAxNiBpblxuICBsZXQgYnVmID0gQnl0ZXMubWFrZSB0b3RhbCAnXFwwMDAnIGluXG4gIEJ5dGVzLmJsaXRfc3RyaW5nIG1zZyAwIGJ1ZiAwIGxlbjtcbiAgQnl0ZXMuc2V0IGJ1ZiBsZW4gJ1xceDgwJztcbiAgKCogTG93IDY0IGJpdHMgb2YgdGhlIGJpdCBsZW5ndGggKGhpZ2ggNjQgc3RheSAwKS4gSW50NjQgc2hpZnRzIHNvIHRoZSBieXRlc1xuICAgICBhdCBzaGlmdCA+PSAzMiBhcmUgY29ycmVjdCBvbiB0aGUgMzItYml0IHdlYiB0YXJnZXRzIChqcyBzaGlmdC1tb2QtMzIpLiAqKVxuICBmb3IgaSA9IDAgdG8gNyBkb1xuICAgIEJ5dGVzLnNldCBidWYgKHRvdGFsIC0gMSAtIGkpXG4gICAgICAoQ2hhci5jaHIgKEludDY0LnRvX2ludFxuICAgICAgICAgKEludDY0LmxvZ2FuZCAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCBiaXRsZW4gKDggKiBpKSkgMHhGRkwpKSlcbiAgZG9uZTtcbiAgbGV0IHcgPSBBcnJheS5tYWtlIDgwIDBMIGluXG4gIGxldCBuYmxvY2tzID0gdG90YWwgLyAxMjggaW5cbiAgZm9yIGIgPSAwIHRvIG5ibG9ja3MgLSAxIGRvXG4gICAgbGV0IGJhc2UgPSBiICogMTI4IGluXG4gICAgZm9yIHQgPSAwIHRvIDE1IGRvXG4gICAgICBsZXQgbyA9IGJhc2UgKyB0ICogOCBpblxuICAgICAgbGV0IHYgPSByZWYgMEwgaW5cbiAgICAgIGZvciBqID0gMCB0byA3IGRvXG4gICAgICAgIHYgOj0gSW50NjQubG9nb3IgKEludDY0LnNoaWZ0X2xlZnQgIXYgOClcbiAgICAgICAgICAgICAgIChJbnQ2NC5vZl9pbnQgKENoYXIuY29kZSAoQnl0ZXMuZ2V0IGJ1ZiAobyArIGopKSkpXG4gICAgICBkb25lO1xuICAgICAgdy4odCkgPC0gIXZcbiAgICBkb25lO1xuICAgIGZvciB0ID0gMTYgdG8gNzkgZG9cbiAgICAgIGxldCBzMCA9XG4gICAgICAgIChyb3RyNjQgdy4odCAtIDE1KSAxKSBeOiAocm90cjY0IHcuKHQgLSAxNSkgOClcbiAgICAgICAgXjogKEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgdy4odCAtIDE1KSA3KSBpblxuICAgICAgbGV0IHMxID1cbiAgICAgICAgKHJvdHI2NCB3Lih0IC0gMikgMTkpIF46IChyb3RyNjQgdy4odCAtIDIpIDYxKVxuICAgICAgICBeOiAoSW50NjQuc2hpZnRfcmlnaHRfbG9naWNhbCB3Lih0IC0gMikgNikgaW5cbiAgICAgIHcuKHQpIDwtIHcuKHQgLSAxNikgKzogczAgKzogdy4odCAtIDcpICs6IHMxXG4gICAgZG9uZTtcbiAgICBsZXQgYSA9IHJlZiBoLigwKSBhbmQgYmIgPSByZWYgaC4oMSkgYW5kIGMgPSByZWYgaC4oMilcbiAgICBhbmQgZCA9IHJlZiBoLigzKSBhbmQgZSA9IHJlZiBoLig0KSBhbmQgZiA9IHJlZiBoLig1KVxuICAgIGFuZCBnID0gcmVmIGguKDYpIGFuZCBoaCA9IHJlZiBoLig3KSBpblxuICAgIGZvciB0ID0gMCB0byA3OSBkb1xuICAgICAgbGV0IHMxID0gKHJvdHI2NCAhZSAxNCkgXjogKHJvdHI2NCAhZSAxOCkgXjogKHJvdHI2NCAhZSA0MSkgaW5cbiAgICAgIGxldCBjaCA9ICghZSAmOiAhZikgXjogKChsbm90NjQgIWUpICY6ICFnKSBpblxuICAgICAgbGV0IHQxID0gIWhoICs6IHMxICs6IGNoICs6IGs1MTIuKHQpICs6IHcuKHQpIGluXG4gICAgICBsZXQgczAgPSAocm90cjY0ICFhIDI4KSBeOiAocm90cjY0ICFhIDM0KSBeOiAocm90cjY0ICFhIDM5KSBpblxuICAgICAgbGV0IG1haiA9ICghYSAmOiAhYmIpIF46ICghYSAmOiAhYykgXjogKCFiYiAmOiAhYykgaW5cbiAgICAgIGxldCB0MiA9IHMwICs6IG1haiBpblxuICAgICAgaGggOj0gIWc7IGcgOj0gIWY7IGYgOj0gIWU7XG4gICAgICBlIDo9ICFkICs6IHQxO1xuICAgICAgZCA6PSAhYzsgYyA6PSAhYmI7IGJiIDo9ICFhO1xuICAgICAgYSA6PSB0MSArOiB0MlxuICAgIGRvbmU7XG4gICAgaC4oMCkgPC0gaC4oMCkgKzogIWE7XG4gICAgaC4oMSkgPC0gaC4oMSkgKzogIWJiO1xuICAgIGguKDIpIDwtIGguKDIpICs6ICFjO1xuICAgIGguKDMpIDwtIGguKDMpICs6ICFkO1xuICAgIGguKDQpIDwtIGguKDQpICs6ICFlO1xuICAgIGguKDUpIDwtIGguKDUpICs6ICFmO1xuICAgIGguKDYpIDwtIGguKDYpICs6ICFnO1xuICAgIGguKDcpIDwtIGguKDcpICs6ICFoaFxuICBkb25lO1xuICBsZXQgb3V0ID0gQnVmZmVyLmNyZWF0ZSAxMjggaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4geCAtPiBCdWZmZXIuYWRkX3N0cmluZyBvdXQgKFByaW50Zi5zcHJpbnRmIFwiJTAxNkx4XCIgeCkpIGg7XG4gIEJ1ZmZlci5jb250ZW50cyBvdXRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2ludDY0X2FkZCIsImNhbWxfaW50NjRfYW5kIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X29yIiwiY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IiwiY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfeG9yIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX29ial9kdXAiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0ludDMyIiwiU3RkbGliX0ludDY0IiwiazI1NiIsInJvdHIzMiIsIngiLCJuIiwic2hhMjU2X2hleCIsIm1zZyIsImgiLCJsZW4iLCJiaXRsZW4iLCJyIiwicGFkbGVuIiwidG90YWwiLCJidWYiLCJpIiwiYnl0ZSIsInciLCJuYmxvY2tzIiwiYiIsImJhc2UiLCJ0IiwibyIsInMwIiwiczEiLCJoaCIsImUiLCJkIiwiYyIsImJiIiwiY2giLCJ0MSIsIm1haiIsInQyIiwiYSIsIm91dCIsIms1MTIiLCJsbm90NjQiLCJyb3RyNjQiLCJzaGE1MTJfaGV4IiwidiIsImoiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FB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QUFBLFdBQWtCO0FBQUEsV0FBa0I7QUFBQSxXQUNwQztBQUFBLE9BQUFDLE9BQW1CO0FBQUEsT0FBQUEsS0FDL0I7QUFBQSxPQUFBakMsTUFBQTtBQUFBLE9BQUFrQyxNQUFBO0FBQUEsT0FBQUMsSUFBQTtBQUFBLE9BQUFDLElBQUE7QUFBQSxPQUFBQyxPQUFBO0FBQUEsT0FBQUEsS0FBQTtBQUFBLE9BQUFSLElBQUE7QUFBQTtBQUFBO0FBQUEsWUFDK0M7QUFBQSxZQUFsQjtBQUFBLFFBQUFHLEtBQWxCO0FBQUEsUUFBQU07QUFBQUEsVUFDQTtBQUFBLHNDQUFjLGVBQUM7QUFBQSxZQUNnQjtBQUFBLFFBQUFDO0FBQUFBLFVBQS9CO0FBQUE7QUFBQTtBQUFBLGNBQW1CO0FBQUE7QUFBQSxZQUNpQjtBQUFBLFlBQWxCO0FBQUEsUUFBQVIsS0FBbEI7QUFBQSxRQUFBUztBQUFBQSxVQUNDO0FBQUE7QUFBQSxZQUFlLHNDQUFjO0FBQUEsUUFBQUMsS0FDOUI7QUFBQSxRQUFBUCxNQUVKO0FBQUEsUUFBQVEsSUFFQTtBQUFBLFlBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFFTjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxjQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFBQyxNQUViO0FBQUEsSUFDVjtBQUFBO0FBQUEsZUFBQS9CO0FBQUFBLFdBQUEsSUFDa0M7QUFBQSxPQUEyQjtBQUFBO0FBQUE7QUFBQSxJQUFHO0FBQUE7QUFBQSxHRDNPbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0MDc0NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfY2lkLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIENJRHYxIGNvbXB1dGF0aW9uIOKAlCBwdXJlIE9DYW1sLCBXQVNNLXNhZmUuXG5cbiAgICBNdWx0aWhhc2ggKyBDSUR2MSArIG11bHRpYmFzZSBiYXNlMzItbG93ZXIgKFJGQyA0NjQ4LCBubyBwYWQsXG4gICAgbXVsdGliYXNlIHByZWZpeCAnYicpLiBDb2RlY3M6IGRhZy1jYm9yIDB4NzEsIHJhdyAweDU1LiBIYXNoXG4gICAgY29kZXM6IHNoYTItMjU2IDB4MTIsIHNoYTMtMjU2IDB4MTYuIFJlZmVyZW5jZTogdGhlIG11bHRpZm9ybWF0c1xuICAgIHNwZWNzICh1bnNpZ25lZC12YXJpbnQsIG11bHRpaGFzaCwgY2lkLCBtdWx0aWJhc2UpLiBObyBkZXBzLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqIFVuc2lnbmVkIExFQjEyOCAobXVsdGlmb3JtYXRzIHVuc2lnbmVkLXZhcmludCkuICopXG5sZXQgdmFyaW50IChuIDogaW50KSA6IHN0cmluZyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDQgaW5cbiAgbGV0IG4gPSByZWYgbiBpblxuICBsZXQgY29udCA9IHJlZiB0cnVlIGluXG4gIHdoaWxlICFjb250IGRvXG4gICAgbGV0IGIgPSAhbiBsYW5kIDB4N2YgaW5cbiAgICBuIDo9ICFuIGxzciA3O1xuICAgIGlmICFuID0gMCB0aGVuIChCdWZmZXIuYWRkX2NoYXIgYnVmIChDaGFyLmNociBiKTsgY29udCA6PSBmYWxzZSlcbiAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChiIGxvciAweDgwKSlcbiAgZG9uZTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4oKiBSRkMgNDY0OCBiYXNlMzIgbG93ZXJjYXNlLCBubyBwYWRkaW5nLiAqKVxubGV0IGIzMl9hbHBoYSA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjdcIlxuXG5sZXQgYmFzZTMyX2xvd2VyIChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlICgoU3RyaW5nLmxlbmd0aCBzICogOCArIDQpIC8gNSkgaW5cbiAgbGV0IGFjYyA9IHJlZiAwIGFuZCBiaXRzID0gcmVmIDAgaW5cbiAgU3RyaW5nLml0ZXIgKGZ1biBjIC0+XG4gICAgYWNjIDo9ICghYWNjIGxzbCA4KSBsb3IgKENoYXIuY29kZSBjKTtcbiAgICBiaXRzIDo9ICFiaXRzICsgODtcbiAgICB3aGlsZSAhYml0cyA+PSA1IGRvXG4gICAgICBiaXRzIDo9ICFiaXRzIC0gNTtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYjMyX2FscGhhLlsoIWFjYyBsc3IgIWJpdHMpIGxhbmQgMHgxZl1cbiAgICBkb25lO1xuICAgICgqIEtlZXAgb25seSB0aGUgdW5jb25zdW1lZCBsb3cgW2JpdHNdIGJpdHMsIHNvIFthY2NdIHN0YXlzIHRpbnkgKDwgMl4xMykuXG4gICAgICAgV2l0aG91dCB0aGlzIGl0IGdyb3dzIGJ5IDggYml0cyBwZXIgYnl0ZSBhbmQgb3ZlcmZsb3dzIG5hdGl2ZSBbaW50XSBvblxuICAgICAgIHRoZSAzMi1iaXQgd2ViIHRhcmdldHMsIGNvcnJ1cHRpbmcgdGhlIGVtaXR0ZWQgc3ltYm9scy4gKilcbiAgICBhY2MgOj0gIWFjYyBsYW5kICgoMSBsc2wgIWJpdHMpIC0gMSkpIHM7XG4gIGlmICFiaXRzID4gMCB0aGVuXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBiMzJfYWxwaGEuWyghYWNjIGxzbCAoNSAtICFiaXRzKSkgbGFuZCAweDFmXTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4oKiBcImFiZWZcIiAtPiB0aGUgMiByYXcgYnl0ZXMuICopXG5sZXQgdW5oZXggKGggOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIGggLyAyIGluXG4gIGxldCBiID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgQnl0ZXMuc2V0IGIgaVxuICAgICAgKENoYXIuY2hyIChpbnRfb2Zfc3RyaW5nIChcIjB4XCIgXiBTdHJpbmcuc3ViIGggKDIgKiBpKSAyKSkpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG4oKiBtdWx0aWhhc2ggPSB2YXJpbnQoY29kZSkgfHwgdmFyaW50KGxlbikgfHwgZGlnZXN0ICopXG5sZXQgbXVsdGloYXNoIChjb2RlIDogaW50KSAoZGlnZXN0IDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIHZhcmludCBjb2RlIF4gdmFyaW50IChTdHJpbmcubGVuZ3RoIGRpZ2VzdCkgXiBkaWdlc3RcblxuKCogQ0lEdjEgPSAweDAxIHx8IHZhcmludChjb2RlYykgfHwgbXVsdGloYXNoIDsgbXVsdGliYXNlICdiJyBiYXNlMzIuICopXG5sZXQgY2lkdjEgKGNvZGVjIDogaW50KSAobWggOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgXCJiXCIgXiBiYXNlMzJfbG93ZXIgKFwiXFx4MDFcIiBeIHZhcmludCBjb2RlYyBeIG1oKVxuXG5sZXQgY29kZWNfZGFnX2Nib3IgPSAweDcxXG5sZXQgbWhfc2hhMl8yNTYgPSAweDEyXG5cbigqIENhbm9uaWNhbGl6ZSBhbiBTWCB2YWx1ZTogZGFnLWNib3IgZW5jb2RlIC0+IHNoYTItMjU2IC0+XG4gICBtdWx0aWhhc2ggLT4gQ0lEdjEgKGRhZy1jYm9yIGNvZGVjKS4gKilcbmxldCBjaWRfZnJvbV9zeCAodiA6IHZhbHVlKSA6IHN0cmluZyA9XG4gIGxldCBjYm9yID0gU3hfY2Jvci5lbmNvZGUgdiBpblxuICBsZXQgZGlnZXN0ID0gdW5oZXggKFN4X3NoYTIuc2hhMjU2X2hleCBjYm9yKSBpblxuICBjaWR2MSBjb2RlY19kYWdfY2JvciAobXVsdGloYXNoIG1oX3NoYTJfMjU2IGRpZ2VzdClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiZ2xvYmFsX2RhdGEiLCJTeF9jYm9yIiwiU3hfc2hhMiIsIlN0ZGxpYiIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9CdWZmZXIiLCJ2YXJpbnQiLCJuIiwiYnVmIiwiY29udCIsImIiLCJjc3RfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLCJiYXNlMzJfbG93ZXIiLCJzIiwiYWNjIiwiYml0cyIsImMiLCJ1bmhleCIsImgiLCJpIiwibXVsdGloYXNoIiwiY29kZSIsImRpZ2VzdCIsImNpZHYxIiwiY29kZWMiLCJtaCIsImNvZGVjX2RhZ19jYm9yIiwibWhfc2hhMl8yNTYiLCJjaWRfZnJvbV9zeCIsInYiLCJjYm9yIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsWUFBQUMsT0FBQUM7QUFBQUEsUUFBQUMsTUNXWSxnQ0FBQUMsT0FHVixHQUFBRixNQUFBO0FBQUE7QUFBQSxnQkFNQSx1Q0FBbUI7QUFBQSxTQUFBRyxJQUxqQixXQUFBSCxNQUNBO0FBQUEsS0FDQTtBQUFBLGNBQW9DO0FBQUEsTUFBcEI7QUFBQSxNQUFnQztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQ3ZCO0FBQUEsTUFBcEI7QUFBQSxNQUEyQztBQUFBO0FBQUE7QUFBQSxHQUUvQjtBQUFBLE9BQUFJLGlDRHBCckI7QUFBQSxZQUFBQyxhQUFBQztBQUFBQTtBQUFBQSxLQUFBTDtBQUFBQSxPQzBCWTtBQUFBLGlCQUFWO0FBQUEsS0FBQU0sTUFDQTtBQUFBLEtBQUFDLE9BQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxlQUFBQztBQUFBQSxPQUNFO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQSx3QkFPQTtBQUFBLFFBTkU7QUFBQTtBQUFBO0FBQUEsV0FDb0I7QUFBQTtBQUFBLFFBQXBCO0FBQUE7QUFBQSxNQUtrQztBQUFBO0FBQUEsSUFBRztBQUFBO0FBQUE7QUFBQSxRQUVuQjtBQUFBO0FBQUEsS0FBcEI7QUFBQTtBQUFBLElBQ0YsdUNBQW1CO0FBQUE7QUFBQSxZQUFBQyxNQUFBQztBQUFBQTtBQUFBQSxLQUFBWCxJQUluQjtBQUFBLEtBQUFHLElBQ1E7QUFBQSxTQUNSO0FBQUE7QUFBQSxTQUFBUyxJQUFBO0FBQUE7QUFBQTtBQUFBLFdBRXFDO0FBQUEsV0FBdkIsMkJBQWU7QUFBQSxNQUQzQiw2QkFDRTtBQUFBLGNBQTBEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUU5RCxxQ0FBd0I7QUFBQTtBQUFBLFlBQUFDLFVBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUFJVixPQUFkO0FBQUEsU0FBYztBQUFBLFNBQWQ7QUFBQSxJQUFXLGtDQUF5QztBQUFBO0FBQUEsWUFBQUMsTUFBQUMsT0FBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQUl2QjtBQUFBO0FBQUEsU0FBdkIsYUFBYTtBQUFBLElBQTRCO0FBQUE7QUFBQSxPQUFBQyxpQkQzRGpELEtBQUFDLGNBQUE7QUFBQSxZQUFBQyxZQUFBQztBQUFBQTtBQUFBQSxLQUFBQyxPQ21FYTtBQUFBLEtBQUFSLFNBQ0UsTUFBTTtBQUFBLElBQ0UsT0FBOEIsc0JBQTlCLCtCQUE4QjtBQUFBO0FBQUEsR0RyRXJEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDA4NzEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X2NzdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBDb25jcmV0ZSBTeW50YXggVHJlZSBmb3IgU1gg4oCUIGxvc3NsZXNzIHNvdXJjZSByZXByZXNlbnRhdGlvbi5cblxuICAgIEV2ZXJ5IHBpZWNlIG9mIHNvdXJjZSB0ZXh0IGlzIHByZXNlcnZlZDogd2hpdGVzcGFjZSwgY29tbWVudHMsXG4gICAgZGVsaW1pdGVycywgcmF3IHRva2VuIHRleHQuICBUaGUgQ1NUIHN1cHBvcnRzIHR3byBwcm9qZWN0aW9uczpcbiAgICAtIFtjc3RfdG9fc291cmNlXTogcmVjb25zdHJ1Y3QgdGhlIGV4YWN0IG9yaWdpbmFsIHNvdXJjZVxuICAgIC0gW2NzdF90b19hc3RdOiBzdHJpcCB0cml2aWEsIHByb2R1Y2UgW1N4X3R5cGVzLnZhbHVlXSBmb3IgZXZhbHVhdGlvblxuXG4gICAgVHJpdmlhIGF0dGFjaGVzIHRvIG5vZGVzIChsZWFkaW5nIG9uIGV2ZXJ5IG5vZGUsIHRyYWlsaW5nIG9uXG4gICAgY29udGFpbmVycyBiZWZvcmUgdGhlIGNsb3NlIGRlbGltaXRlcikuICBObyBzZXBhcmF0ZSBjb21tZW50IG1hcC4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiogezEgVHlwZXN9ICopXG5cbnR5cGUgdHJpdmlhID1cbiAgfCBXaGl0ZXNwYWNlIG9mIHN0cmluZyAgICAgICgqKiBSdW5zIG9mIHNwYWNlcywgdGFicywgbmV3bGluZXMgKilcbiAgfCBMaW5lQ29tbWVudCBvZiBzdHJpbmcgICAgICgqKiBcIjs7XCIgdGhyb3VnaCBlbmQgb2YgbGluZSwgaW5jbHVkaW5nIHRoZSBcIjtcIiBjaGFycyAqKVxuXG50eXBlIHNwYW4gPSB7XG4gIHN0YXJ0X29mZnNldCA6IGludDtcbiAgZW5kX29mZnNldCAgIDogaW50O1xufVxuXG50eXBlIGNzdF9ub2RlID1cbiAgfCBDc3RBdG9tIG9mIHtcbiAgICAgIGxlYWRpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICB0b2tlbiA6IHN0cmluZzsgICAgICAgICAgICAgICgqKiBSYXcgc291cmNlIHRleHQgb2YgdGhlIHRva2VuICopXG4gICAgICB2YWx1ZSA6IHZhbHVlOyAgICAgICAgICAgICAgICgqKiBQYXJzZWQgc2VtYW50aWMgdmFsdWUgKilcbiAgICAgIHNwYW4gIDogc3BhbjtcbiAgICB9XG4gIHwgQ3N0TGlzdCBvZiB7XG4gICAgICBsZWFkaW5nX3RyaXZpYSA6IHRyaXZpYSBsaXN0O1xuICAgICAgb3Blbl9kZWxpbSAgOiBjaGFyOyAgICAgICAgICAoKiogJygnIG9yICdbJyAqKVxuICAgICAgY2hpbGRyZW4gICAgOiBjc3Rfbm9kZSBsaXN0O1xuICAgICAgY2xvc2VfZGVsaW0gOiBjaGFyOyAgICAgICAgICAoKiogJyknIG9yICddJyAqKVxuICAgICAgdHJhaWxpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7ICAoKiogVHJpdmlhIGJldHdlZW4gbGFzdCBjaGlsZCBhbmQgY2xvc2UgZGVsaW0gKilcbiAgICAgIHNwYW4gOiBzcGFuO1xuICAgIH1cbiAgfCBDc3REaWN0IG9mIHtcbiAgICAgIGxlYWRpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICBjaGlsZHJlbiA6IGNzdF9ub2RlIGxpc3Q7ICAgICgqKiBBbHRlcm5hdGluZyBrZXkvdmFsdWUgYXRvbXMgKilcbiAgICAgIHRyYWlsaW5nX3RyaXZpYSA6IHRyaXZpYSBsaXN0O1xuICAgICAgc3BhbiA6IHNwYW47XG4gICAgfVxuXG5cbigqKiB7MSBDU1Qg4oaSIFNvdXJjZSAobG9zc2xlc3MgcmVjb25zdHJ1Y3Rpb24pfSAqKVxuXG5sZXQgdHJpdmlhX3RvX3N0cmluZyB0cyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICB8IFdoaXRlc3BhY2UgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc1xuICAgIHwgTGluZUNvbW1lbnQgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc1xuICApIHRzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCByZWMgY3N0X3RvX3NvdXJjZSBub2RlID1cbiAgbWF0Y2ggbm9kZSB3aXRoXG4gIHwgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhOyB0b2tlbjsgXyB9IC0+XG4gICAgdHJpdmlhX3RvX3N0cmluZyBsZWFkaW5nX3RyaXZpYSBeIHRva2VuXG4gIHwgQ3N0TGlzdCB7IGxlYWRpbmdfdHJpdmlhOyBvcGVuX2RlbGltOyBjaGlsZHJlbjsgY2xvc2VfZGVsaW07IHRyYWlsaW5nX3RyaXZpYTsgXyB9IC0+XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh0cml2aWFfdG9fc3RyaW5nIGxlYWRpbmdfdHJpdmlhKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIG9wZW5fZGVsaW07XG4gICAgTGlzdC5pdGVyIChmdW4gYyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGNzdF90b19zb3VyY2UgYykpIGNoaWxkcmVuO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAodHJpdmlhX3RvX3N0cmluZyB0cmFpbGluZ190cml2aWEpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgY2xvc2VfZGVsaW07XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IENzdERpY3QgeyBsZWFkaW5nX3RyaXZpYTsgY2hpbGRyZW47IHRyYWlsaW5nX3RyaXZpYTsgXyB9IC0+XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh0cml2aWFfdG9fc3RyaW5nIGxlYWRpbmdfdHJpdmlhKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICd7JztcbiAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoY3N0X3RvX3NvdXJjZSBjKSkgY2hpbGRyZW47XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh0cml2aWFfdG9fc3RyaW5nIHRyYWlsaW5nX3RyaXZpYSk7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnfSc7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY3N0X3RvX3NvdXJjZV9maWxlIG5vZGVzID1cbiAgU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCBjc3RfdG9fc291cmNlIG5vZGVzKVxuXG4oKiogUmVjb25zdHJ1Y3Qgc291cmNlIGZyb20gYSBwYXJzZWQgZmlsZSAobm9kZXMgKyB0cmFpbGluZyB0cml2aWEpLiAqKVxubGV0IGNzdF9maWxlX3RvX3NvdXJjZSBub2RlcyB0cmFpbGluZyA9XG4gIGNzdF90b19zb3VyY2VfZmlsZSBub2RlcyBeIHRyaXZpYV90b19zdHJpbmcgdHJhaWxpbmdcblxuXG4oKiogezEgQ1NUIOKGkiBBU1QgKHN0cmlwIHRyaXZpYSBmb3IgZXZhbHVhdGlvbil9ICopXG5cbmxldCByZWMgY3N0X3RvX2FzdCA9IGZ1bmN0aW9uXG4gIHwgQ3N0QXRvbSB7IHZhbHVlOyBfIH0gLT4gdmFsdWVcbiAgfCBDc3RMaXN0IHsgY2hpbGRyZW47IF8gfSAtPlxuICAgIExpc3QgKExpc3QubWFwIGNzdF90b19hc3QgY2hpbGRyZW4pXG4gIHwgQ3N0RGljdCB7IGNoaWxkcmVuOyBfIH0gLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIGxldCByZWMgcGFpcnMgPSBmdW5jdGlvblxuICAgICAgfCBrIDo6IHYgOjogcmVzdCAtPlxuICAgICAgICBsZXQga2V5X3N0ciA9IG1hdGNoIGNzdF90b19hc3QgayB3aXRoXG4gICAgICAgICAgfCBLZXl3b3JkIGsgLT4gayB8IFN0cmluZyBrIC0+IGsgfCBTeW1ib2wgayAtPiBrIHwgXyAtPiBcIlwiXG4gICAgICAgIGluXG4gICAgICAgIGRpY3Rfc2V0IGQga2V5X3N0ciAoY3N0X3RvX2FzdCB2KTtcbiAgICAgICAgcGFpcnMgcmVzdFxuICAgICAgfCBfIC0+ICgpXG4gICAgaW5cbiAgICBwYWlycyBjaGlsZHJlbjtcbiAgICBEaWN0IGRcblxuXG4oKiogQ29udmVydCBjaGFyYWN0ZXIgb2Zmc2V0IHRvIGxpbmUvY29sICgxLWJhc2VkIGxpbmVzLCAwLWJhc2VkIGNvbHMpICopXG5sZXQgb2Zmc2V0X3RvX2xvYyBzcmMgb2Zmc2V0ID1cbiAgbGV0IGxpbmUgPSByZWYgMSBhbmQgY29sID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIG1pbiAob2Zmc2V0IC0gMSkgKFN0cmluZy5sZW5ndGggc3JjIC0gMSkgZG9cbiAgICBpZiBzcmMuW2ldID0gJ1xcbicgdGhlbiAoaW5jciBsaW5lOyBjb2wgOj0gMClcbiAgICBlbHNlIGNvbCA6PSAhY29sICsgMVxuICBkb25lO1xuICAoIWxpbmUsICFjb2wpXG5cbigqKiBDU1Qg4oaSIEFTVCB3aXRoIHNvdXJjZSBsb2NhdGlvbiBkaWN0cyAoezpmb3JtIHZhbHVlIDpsaW5lIE4gOmNvbCBOfSkgKilcbmxldCBjc3RfdG9fYXN0X2xvYyBzcmMgbm9kZXMgPVxuICBMaXN0Lm1hcCAoZnVuIG5vZGUgLT5cbiAgICBsZXQgc3BhbiA9IG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBDc3RBdG9tIHsgc3BhbjsgXyB9IC0+IHNwYW5cbiAgICAgIHwgQ3N0TGlzdCB7IHNwYW47IF8gfSAtPiBzcGFuXG4gICAgICB8IENzdERpY3QgeyBzcGFuOyBfIH0gLT4gc3BhblxuICAgIGluXG4gICAgbGV0IHZhbHVlID0gY3N0X3RvX2FzdCBub2RlIGluXG4gICAgbGV0IChsaW5lLCBjb2wpID0gb2Zmc2V0X3RvX2xvYyBzcmMgc3Bhbi5zdGFydF9vZmZzZXQgaW5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIGRpY3Rfc2V0IGQgXCJmb3JtXCIgdmFsdWU7XG4gICAgZGljdF9zZXQgZCBcImxpbmVcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgbGluZSkpO1xuICAgIGRpY3Rfc2V0IGQgXCJjb2xcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgY29sKSk7XG4gICAgRGljdCBkXG4gICkgbm9kZXNcblxuXG4oKiogezEgQ1NUIGVkaXRpbmcg4oCUIGFwcGx5IEFTVC1sZXZlbCBlZGl0cyBiYWNrIHRvIHRoZSBDU1R9ICopXG5cbigqKiBSZXBsYWNlIHRoZSBDU1Qgbm9kZSBhdCBbcGF0aF0gd2l0aCBbbmV3X3NvdXJjZV0sIHByZXNlcnZpbmcgdGhlXG4gICAgb3JpZ2luYWwgbm9kZSdzIGxlYWRpbmcgdHJpdmlhLiAgW25ld19zb3VyY2VdIGlzIHBhcnNlZCBhcyBDU1Qgc29cbiAgICBhbnkgY29tbWVudHMgaW4gaXQgYXJlIHByZXNlcnZlZC4gKilcbmxldCBhcHBseV9lZGl0IHBhdGggbmV3X2NzdF9ub2RlcyBvcmlnaW5hbF9jc3Rfbm9kZXMgPVxuICBsZXQgcmVjIGdvIG5vZGVzIGlkeF9wYXRoID1cbiAgICBtYXRjaCBpZHhfcGF0aCB3aXRoXG4gICAgfCBbXSAtPiBub2RlcyAgKCogc2hvdWxkbid0IGhhcHBlbiAqKVxuICAgIHwgW3RhcmdldF0gLT5cbiAgICAgIExpc3QubWFwaSAoZnVuIGkgbm9kZSAtPlxuICAgICAgICBpZiBpID0gdGFyZ2V0IHRoZW5cbiAgICAgICAgICBtYXRjaCBuZXdfY3N0X25vZGVzIHdpdGhcbiAgICAgICAgICB8IFtyZXBsYWNlbWVudF0gLT5cbiAgICAgICAgICAgICgqIFByZXNlcnZlIG9yaWdpbmFsIGxlYWRpbmcgdHJpdmlhICopXG4gICAgICAgICAgICBsZXQgb3JpZ190cml2aWEgPSBtYXRjaCBub2RlIHdpdGhcbiAgICAgICAgICAgICAgfCBDc3RBdG9tIHsgbGVhZGluZ190cml2aWE7IF8gfSAtPiBsZWFkaW5nX3RyaXZpYVxuICAgICAgICAgICAgICB8IENzdExpc3QgeyBsZWFkaW5nX3RyaXZpYTsgXyB9IC0+IGxlYWRpbmdfdHJpdmlhXG4gICAgICAgICAgICAgIHwgQ3N0RGljdCB7IGxlYWRpbmdfdHJpdmlhOyBfIH0gLT4gbGVhZGluZ190cml2aWFcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQgd2l0aFxuICAgICAgICAgICAgIHwgQ3N0QXRvbSByIC0+IENzdEF0b20geyByIHdpdGggbGVhZGluZ190cml2aWEgPSBvcmlnX3RyaXZpYSB9XG4gICAgICAgICAgICAgfCBDc3RMaXN0IHIgLT4gQ3N0TGlzdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IG9yaWdfdHJpdmlhIH1cbiAgICAgICAgICAgICB8IENzdERpY3QgciAtPiBDc3REaWN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gb3JpZ190cml2aWEgfSlcbiAgICAgICAgICB8IF8gLT4gbm9kZSAgKCogbXVsdGktbm9kZSByZXBsYWNlbWVudDogdXNlIGFzLWlzICopXG4gICAgICAgIGVsc2Ugbm9kZVxuICAgICAgKSBub2Rlc1xuICAgIHwgdGFyZ2V0IDo6IHJlc3QgLT5cbiAgICAgIExpc3QubWFwaSAoZnVuIGkgbm9kZSAtPlxuICAgICAgICBpZiBpID0gdGFyZ2V0IHRoZW5cbiAgICAgICAgICBtYXRjaCBub2RlIHdpdGhcbiAgICAgICAgICB8IENzdExpc3QgciAtPlxuICAgICAgICAgICAgQ3N0TGlzdCB7IHIgd2l0aCBjaGlsZHJlbiA9IGdvIHIuY2hpbGRyZW4gcmVzdCB9XG4gICAgICAgICAgfCBDc3REaWN0IHIgLT5cbiAgICAgICAgICAgIENzdERpY3QgeyByIHdpdGggY2hpbGRyZW4gPSBnbyByLmNoaWxkcmVuIHJlc3QgfVxuICAgICAgICAgIHwgXyAtPiBub2RlXG4gICAgICAgIGVsc2Ugbm9kZVxuICAgICAgKSBub2Rlc1xuICBpblxuICBnbyBvcmlnaW5hbF9jc3Rfbm9kZXMgcGF0aFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWIiLCJTdGRsaWJfTGlzdCIsIlN4X3R5cGVzIiwiU3RkbGliX1N0cmluZyIsInRyaXZpYV90b19zdHJpbmciLCJ0cyIsImJ1ZiIsInBhcmFtIiwicyIsImNzdF90b19zb3VyY2UiLCJub2RlIiwidG9rZW4iLCJsZWFkaW5nX3RyaXZpYSIsInRyYWlsaW5nX3RyaXZpYSIsImNsb3NlX2RlbGltIiwiY2hpbGRyZW4iLCJvcGVuX2RlbGltIiwiYyIsImNzdCIsImNzdF90b19zb3VyY2VfZmlsZSIsIm5vZGVzIiwiY3N0X2ZpbGVfdG9fc291cmNlIiwidHJhaWxpbmciLCJjc3RfdG9fYXN0IiwidmFsdWUiLCJkIiwibWF0Y2giLCJyZXN0IiwidiIsImsiLCJrZXlfc3RyIiwib2Zmc2V0X3RvX2xvYyIsInNyYyIsIm9mZnNldCIsImNvbCIsImxpbmUiLCJpIiwiY3N0X3RvX2FzdF9sb2MiLCJzcGFuIiwiYXBwbHlfZWRpdCIsInBhdGgiLCJuZXdfY3N0X25vZGVzIiwib3JpZ2luYWxfY3N0X25vZGVzIiwiZ28iLCJpZHhfcGF0aCIsInRhcmdldCIsInJlcGxhY2VtZW50Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsWUFBQUMsaUJBQUFDO0FBQUFBLFFBQUFDLE1DaURZO0FBQUEsSUFDVjtBQUFBO0FBQUEsZUFBQUM7QUFBQUEsT0FBVTtBQUFBLFlBQUFDLElBQUE7QUFBQSxRQUNVLDJDQUVuQjtBQUFBO0FBQUEsV0FBQUEsTUFIUztBQUFBLE9BRVcsNkNBQ3BCO0FBQUE7QUFBQTtBQUFBLElBQUcsdUNBQ2U7QUFBQTtBQUFBLFlBQUFDLGNBQUFDO0FBQUFBLElBR25CO0FBQUE7QUFBQTtBQUFBLFFBQUFDLFFBQUE7QUFBQSxRQUFBQyxpQkFBQTtBQUFBLFlBRUU7QUFBQSxPQUErQixzQ0FnQlo7QUFBQTtBQUFBO0FBQUEsUUFBQUMsa0JBbEJyQjtBQUFBLFFBQUFDLGNBQUE7QUFBQSxRQUFBQyxXQUFBO0FBQUEsUUFBQUMsYUFBQTtBQUFBLFFBQUFKLG1CQUFBO0FBQUEsUUFBQU4sTUFJWTtBQUFBLFlBQ1k7QUFBQSxPQUF0QjtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQSxrQkFBQVc7QUFBQUEsY0FBQSxJQUEwQztBQUFBLFVBQWlCO0FBQUE7QUFBQTtB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T0E5QlQ7QUFBQSxLQXFCRTtBQUFBO0FBQUEsdUJBQUFTLEdBQUExQjtBQUFBQSxlQUNFO0FBQUEsZ0JBQ0U7QUFBQTtBQUFBLG1CQUtPO0FBQUE7QUFBQTtBQUFBLHdCQUh1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFrQjtBQUFBO0FBQUEsMkJBRWxCO0FBQUEsbUJBQWtCO0FBQUE7QUFBQSxlQUU3QztBQUFBLGNBQUk7QUFBQSxvQkFDSjtBQUFBO0FBQUEsSUFFWCxtQ0FBMEI7QUFBQTtBQUFBLEdENUs1QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQxMTE5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9lZDI1NTE5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIEVkMjU1MTkgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiDigJQgcHVyZSBPQ2FtbCwgV0FTTS1zYWZlLlxuXG4gICAgUkZDIDgwMzIgwqc1LjEuNyBjb2ZhY3Rvcmxlc3MgdmVyaWZ5IG92ZXIgZWR3YXJkczI1NTE5LiBJbmNsdWRlcyBhXG4gICAgbWluaW1hbCBhcmJpdHJhcnktcHJlY2lzaW9uIHVuc2lnbmVkIGJpZ251bSAobm8gWmFyaXRoIC8gbm8gZGVwcylcbiAgICBhbmQgdHdpc3RlZC1FZHdhcmRzIGV4dGVuZGVkLWNvb3JkaW5hdGUgcG9pbnQgYXJpdGhtZXRpYy4gVmVyaWZ5XG4gICAgaXMgdG90YWw6IG1hbGZvcm1lZCBpbnB1dHMgcmV0dXJuIFtmYWxzZV0sIG5ldmVyIHJhaXNlLiBTSEEtNTEyXG4gICAgaXMgcmV1c2VkIGZyb20geyFTeF9zaGEyfS4gUmVmZXJlbmNlOiBSRkMgODAzMiwgUkZDIDc3NDguICopXG5cbigqIC0tLS0gTWluaW1hbCBiaWdudW06IGludCBhcnJheSwgbGl0dGxlLWVuZGlhbiwgYmFzZSAyXjI2LiAtLS0tICopXG5cbmxldCBiaXRzID0gMjZcbmxldCBiYXNlID0gMSBsc2wgYml0c1xubGV0IG1hc2sgPSBiYXNlIC0gMVxuXG50eXBlIGJuID0gaW50IGFycmF5ICAoKiBub3JtYWxpemVkOiBubyBoaWdoIHplcm8gbGltYnMsIGxlbmd0aCA+PSAxICopXG5cbmxldCBub3JtIChhIDogYm4pIDogYm4gPVxuICBsZXQgbiA9IHJlZiAoQXJyYXkubGVuZ3RoIGEpIGluXG4gIHdoaWxlICFuID4gMSAmJiBhLighbiAtIDEpID0gMCBkbyBkZWNyIG4gZG9uZTtcbiAgaWYgIW4gPSBBcnJheS5sZW5ndGggYSB0aGVuIGEgZWxzZSBBcnJheS5zdWIgYSAwICFuXG5cbmxldCBiemVybyA6IGJuID0gW3wgMCB8XVxubGV0IG9mX2ludCBuIDogYm4gPVxuICBpZiBuID0gMCB0aGVuIGJ6ZXJvXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHJlZiBbXSBhbmQgbiA9IHJlZiBuIGluXG4gICAgd2hpbGUgIW4gPiAwIGRvIHIgOj0gKCFuIGxhbmQgbWFzaykgOjogIXI7IG4gOj0gIW4gbHNyIGJpdHMgZG9uZTtcbiAgICBub3JtIChBcnJheS5vZl9saXN0IChMaXN0LnJldiAhcikpXG4gIGVuZFxuXG5sZXQgaXNfemVybyAoYSA6IGJuKSA9IEFycmF5Lmxlbmd0aCBhID0gMSAmJiBhLigwKSA9IDBcblxubGV0IGNtcCAoYSA6IGJuKSAoYiA6IGJuKSA6IGludCA9XG4gIGxldCBhID0gbm9ybSBhIGFuZCBiID0gbm9ybSBiIGluXG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW4gY29tcGFyZSBsYSBsYlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSByZWYgMCBhbmQgaSA9IHJlZiAobGEgLSAxKSBpblxuICAgIHdoaWxlICFyID0gMCAmJiAhaSA+PSAwIGRvXG4gICAgICBpZiBhLighaSkgPD4gYi4oIWkpIHRoZW4gciA6PSBjb21wYXJlIGEuKCFpKSBiLighaSk7XG4gICAgICBkZWNyIGlcbiAgICBkb25lOyAhclxuICBlbmRcblxubGV0IGFkZCAoYSA6IGJuKSAoYiA6IGJuKSA6IGJuID1cbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgbGV0IG4gPSAobWF4IGxhIGxiKSArIDEgaW5cbiAgbGV0IHIgPSBBcnJheS5tYWtlIG4gMCBpblxuICBsZXQgY2FycnkgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICBsZXQgcyA9ICFjYXJyeVxuICAgICAgICAgICAgKyAoaWYgaSA8IGxhIHRoZW4gYS4oaSkgZWxzZSAwKVxuICAgICAgICAgICAgKyAoaWYgaSA8IGxiIHRoZW4gYi4oaSkgZWxzZSAwKSBpblxuICAgIHIuKGkpIDwtIHMgbGFuZCBtYXNrOyBjYXJyeSA6PSBzIGxzciBiaXRzXG4gIGRvbmU7XG4gIG5vcm0gclxuXG4oKiBhIC0gYiwgcmVxdWlyZXMgYSA+PSBiICopXG5sZXQgc3ViIChhIDogYm4pIChiIDogYm4pIDogYm4gPVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBhbmQgbGIgPSBBcnJheS5sZW5ndGggYiBpblxuICBsZXQgciA9IEFycmF5Lm1ha2UgbGEgMCBpblxuICBsZXQgYm9ycm93ID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxhIC0gMSBkb1xuICAgIGxldCBzID0gYS4oaSkgLSAhYm9ycm93IC0gKGlmIGkgPCBsYiB0aGVuIGIuKGkpIGVsc2UgMCkgaW5cbiAgICBpZiBzIDwgMCB0aGVuIChyLihpKSA8LSBzICsgYmFzZTsgYm9ycm93IDo9IDEpXG4gICAgZWxzZSAoci4oaSkgPC0gczsgYm9ycm93IDo9IDApXG4gIGRvbmU7XG4gIG5vcm0gclxuXG5sZXQgbXVsIChhIDogYm4pIChiIDogYm4pIDogYm4gPVxuICAoKiBBY2N1bXVsYXRlIGluIEludDY0OiBhIGxpbWIgcHJvZHVjdCBpcyAyNisyNiA9IDUyIGJpdHMsIHdoaWNoIG92ZXJmbG93cyB0aGVcbiAgICAgd2ViIHRhcmdldHMnIGludCAoMzItYml0IGpzX29mX29jYW1sIC8gMzEtYml0IHdhc21fb2Zfb2NhbWwpLiBJbnQ2NCBpcyBhXG4gICAgIHJlYWwgNjQtYml0IHR5cGUgb24gZXZlcnkgdGFyZ2V0LCBzbyB0aGUgY2FycmllcyBhcmUgZXhhY3QuICopXG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGxldCByID0gQXJyYXkubWFrZSAobGEgKyBsYikgMCBpblxuICBsZXQgbWFza0wgPSBJbnQ2NC5vZl9pbnQgbWFzayBpblxuICBmb3IgaSA9IDAgdG8gbGEgLSAxIGRvXG4gICAgbGV0IGNhcnJ5ID0gcmVmIDBMIGluXG4gICAgbGV0IGFpID0gSW50NjQub2ZfaW50IGEuKGkpIGluXG4gICAgZm9yIGogPSAwIHRvIGxiIC0gMSBkb1xuICAgICAgbGV0IHMgPSBJbnQ2NC5hZGQgKEludDY0LmFkZCAoSW50NjQub2ZfaW50IHIuKGkgKyBqKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnQ2NC5tdWwgYWkgKEludDY0Lm9mX2ludCBiLihqKSkpKSAhY2FycnkgaW5cbiAgICAgIHIuKGkgKyBqKSA8LSBJbnQ2NC50b19pbnQgKEludDY0LmxvZ2FuZCBzIG1hc2tMKTtcbiAgICAgIGNhcnJ5IDo9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgcyBiaXRzXG4gICAgZG9uZTtcbiAgICByLihpICsgbGIpIDwtIHIuKGkgKyBsYikgKyBJbnQ2NC50b19pbnQgIWNhcnJ5XG4gIGRvbmU7XG4gIG5vcm0gclxuXG5sZXQgbnVtYml0cyAoYSA6IGJuKSA6IGludCA9XG4gIGxldCBhID0gbm9ybSBhIGluXG4gIGxldCBoaSA9IEFycmF5Lmxlbmd0aCBhIC0gMSBpblxuICBpZiBoaSA9IDAgJiYgYS4oMCkgPSAwIHRoZW4gMFxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGIgPSByZWYgMCBhbmQgdiA9IHJlZiBhLihoaSkgaW5cbiAgICB3aGlsZSAhdiA+IDAgZG8gaW5jciBiOyB2IDo9ICF2IGxzciAxIGRvbmU7XG4gICAgaGkgKiBiaXRzICsgIWJcbiAgZW5kXG5cbmxldCBiaXQgKGEgOiBibikgKGkgOiBpbnQpIDogaW50ID1cbiAgbGV0IGxpbWIgPSBpIC8gYml0cyBhbmQgb2ZmID0gaSBtb2QgYml0cyBpblxuICBpZiBsaW1iID49IEFycmF5Lmxlbmd0aCBhIHRoZW4gMCBlbHNlIChhLihsaW1iKSBsc3Igb2ZmKSBsYW5kIDFcblxuKCogciA9IGEgbW9kIG0gIChtID4gMCksIGJpbmFyeSBsb25nIGRpdmlzaW9uLiAqKVxubGV0IGJuX21vZCAoYSA6IGJuKSAobSA6IGJuKSA6IGJuID1cbiAgaWYgY21wIGEgbSA8IDAgdGhlbiBub3JtIGFcbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gcmVmIGJ6ZXJvIGluXG4gICAgZm9yIGkgPSBudW1iaXRzIGEgLSAxIGRvd250byAwIGRvXG4gICAgICAoKiByID0gcioyICsgYml0ICopXG4gICAgICByIDo9IGFkZCAhciAhcjtcbiAgICAgIGlmIGJpdCBhIGkgPSAxIHRoZW4gciA6PSBhZGQgIXIgW3wgMSB8XTtcbiAgICAgIGlmIGNtcCAhciBtID49IDAgdGhlbiByIDo9IHN1YiAhciBtXG4gICAgZG9uZTtcbiAgICAhclxuICBlbmRcblxubGV0IGRpdl9zbWFsbCAoYSA6IGJuKSAoZCA6IGludCkgOiBibiA9XG4gICgqIFtyZW0gbHNsIGJpdHNdIHJlYWNoZXMgfjJeMzQgKHJlbSA8IGQgPD0gMjU2LCBiaXRzID0gMjYpLCBwYXN0IHRoZSB3ZWJcbiAgICAgdGFyZ2V0cycgaW50IHdpZHRoIOKAlCBhY2N1bXVsYXRlIHRoZSBydW5uaW5nIHJlbWFpbmRlciBpbiBJbnQ2NC4gKilcbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHEgPSBBcnJheS5tYWtlIGxhIDAgaW5cbiAgbGV0IHJlbSA9IHJlZiAwTCBpblxuICBsZXQgZEwgPSBJbnQ2NC5vZl9pbnQgZCBpblxuICBmb3IgaSA9IGxhIC0gMSBkb3dudG8gMCBkb1xuICAgIGxldCBjdXIgPSBJbnQ2NC5sb2dvciAoSW50NjQuc2hpZnRfbGVmdCAhcmVtIGJpdHMpIChJbnQ2NC5vZl9pbnQgYS4oaSkpIGluXG4gICAgcS4oaSkgPC0gSW50NjQudG9faW50IChJbnQ2NC5kaXYgY3VyIGRMKTtcbiAgICByZW0gOj0gSW50NjQucmVtIGN1ciBkTFxuICBkb25lO1xuICBub3JtIHFcblxubGV0IHBvd21vZCAoYjAgOiBibikgKGUgOiBibikgKG0gOiBibikgOiBibiA9XG4gIGxldCByZXN1bHQgPSByZWYgW3wgMSB8XSBhbmQgYiA9IHJlZiAoYm5fbW9kIGIwIG0pIGluXG4gIGxldCBuYiA9IG51bWJpdHMgZSBpblxuICBmb3IgaSA9IDAgdG8gbmIgLSAxIGRvXG4gICAgaWYgYml0IGUgaSA9IDEgdGhlbiByZXN1bHQgOj0gYm5fbW9kIChtdWwgIXJlc3VsdCAhYikgbTtcbiAgICBiIDo9IGJuX21vZCAobXVsICFiICFiKSBtXG4gIGRvbmU7XG4gICFyZXN1bHRcblxubGV0IG9mX2J5dGVzX2xlIChzIDogc3RyaW5nKSA6IGJuID1cbiAgbGV0IGFjYyA9IHJlZiBiemVybyBpblxuICBmb3IgaSA9IFN0cmluZy5sZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBhY2MgOj0gYWRkIChtdWwgIWFjYyAob2ZfaW50IDI1NikpIChvZl9pbnQgKENoYXIuY29kZSBzLltpXSkpXG4gIGRvbmU7XG4gICFhY2NcblxubGV0IHRvX2J5dGVzX2xlIChhIDogYm4pIChuIDogaW50KSA6IHN0cmluZyA9XG4gIGxldCBiID0gQnl0ZXMubWFrZSBuICdcXDAwMCcgaW5cbiAgbGV0IGN1ciA9IHJlZiAobm9ybSBhKSBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICBsZXQgcSA9IGRpdl9zbWFsbCAhY3VyIDI1NiBpblxuICAgIGxldCByID1cbiAgICAgIGxldCBxbSA9IG11bCBxIChvZl9pbnQgMjU2KSBpblxuICAgICAgbGV0IGQgPSBzdWIgIWN1ciBxbSBpblxuICAgICAgaWYgaXNfemVybyBkIHRoZW4gMCBlbHNlIGQuKDApXG4gICAgaW5cbiAgICBCeXRlcy5zZXQgYiBpIChDaGFyLmNociByKTtcbiAgICBjdXIgOj0gcVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJcblxuKCogLS0tLSBGaWVsZCBHRihwKSwgcCA9IDJeMjU1IC0gMTkgLS0tLSAqKVxuXG5sZXQgcCA9XG4gIGxldCB0d29wMjU1ID0gQXJyYXkubWFrZSAxMSAwIGluICAgKCogMTEqMjYgPSAyODYgPiAyNTUgKilcbiAgbGV0IGxpbWIgPSAyNTUgLyBiaXRzIGFuZCBvZmYgPSAyNTUgbW9kIGJpdHMgaW5cbiAgdHdvcDI1NS4obGltYikgPC0gMSBsc2wgb2ZmO1xuICBzdWIgKG5vcm0gdHdvcDI1NSkgKG9mX2ludCAxOSlcblxubGV0IGZtb2QgYSA9IGJuX21vZCBhIHBcbmxldCBmYWRkIGEgYiA9IGZtb2QgKGFkZCBhIGIpXG5sZXQgZnN1YiBhIGIgPSBmbW9kIChhZGQgYSAoc3ViIHAgKGZtb2QgYikpKVxubGV0IGZtdWwgYSBiID0gZm1vZCAobXVsIGEgYilcbmxldCBmcG93IGEgZSA9IHBvd21vZCBhIGUgcFxubGV0IGZpbnYgYSA9IGZwb3cgYSAoc3ViIHAgKG9mX2ludCAyKSkgICAoKiBGZXJtYXQ6IGFeKHAtMikgKilcblxuKCogZ3JvdXAgb3JkZXIgTCA9IDJeMjUyICsgMjc3NDIzMTc3NzczNzIzNTM1MzU4NTE5Mzc3OTA4ODM2NDg0OTMgKilcbmxldCBlbGwgPVxuICBvZl9ieXRlc19sZVxuICAgIFwiXFx4ZWRcXHhkM1xceGY1XFx4NWNcXHgxYVxceDYzXFx4MTJcXHg1OFxceGQ2XFx4OWNcXHhmN1xceGEyXFx4ZGVcXHhmOVxceGRlXFx4MTRcXFxuICAgICBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgxMFwiXG5cbigqIGQgPSAtMTIxNjY1IC8gMTIxNjY2IG1vZCBwICopXG5sZXQgZGNvbnN0ID1cbiAgbGV0IGludjY2NiA9IGZpbnYgKG9mX2ludCAxMjE2NjYpIGluXG4gIGZtb2QgKG11bCAoZnN1YiAob2ZfaW50IDApIChvZl9pbnQgMTIxNjY1KSkgaW52NjY2KVxuXG4oKiBzcXJ0KC0xKSA9IDJeKChwLTEpLzQpIG1vZCBwICopXG5sZXQgc3FydG0xID0gZnBvdyAob2ZfaW50IDIpIChkaXZfc21hbGwgKHN1YiBwIChvZl9pbnQgMSkpIDQpXG5cbigqIC0tLS0gZWR3YXJkczI1NTE5IHBvaW50cyBpbiBleHRlbmRlZCBjb29yZHMgKFgsWSxaLFQpIC0tLS0gKilcblxudHlwZSBwdCA9IHsgeCA6IGJuOyB5IDogYm47IHogOiBibjsgdCA6IGJuIH1cblxubGV0IGlkZW50aXR5ID0geyB4ID0gYnplcm87IHkgPSBvZl9pbnQgMTsgeiA9IG9mX2ludCAxOyB0ID0gYnplcm8gfVxuXG4oKiBhZGQtMjAwOC1od2NkLTMsIGNvbXBsZXRlIGZvciBhID0gLTEgb24gZWQyNTUxOSAqKVxubGV0IHBhZGQgKHAxIDogcHQpIChwMiA6IHB0KSA6IHB0ID1cbiAgbGV0IGEgPSBmbXVsIChmc3ViIHAxLnkgcDEueCkgKGZzdWIgcDIueSBwMi54KSBpblxuICBsZXQgYiA9IGZtdWwgKGZhZGQgcDEueSBwMS54KSAoZmFkZCBwMi55IHAyLngpIGluXG4gIGxldCBjID0gZm11bCAoZm11bCBwMS50IChmbXVsIChvZl9pbnQgMikgZGNvbnN0KSkgcDIudCBpblxuICBsZXQgZGQgPSBmbXVsIChmbXVsIHAxLnogKG9mX2ludCAyKSkgcDIueiBpblxuICBsZXQgZSA9IGZzdWIgYiBhIGluXG4gIGxldCBmID0gZnN1YiBkZCBjIGluXG4gIGxldCBnID0gZmFkZCBkZCBjIGluXG4gIGxldCBoID0gZmFkZCBiIGEgaW5cbiAgeyB4ID0gZm11bCBlIGY7IHkgPSBmbXVsIGcgaDsgdCA9IGZtdWwgZSBoOyB6ID0gZm11bCBmIGcgfVxuXG5sZXQgc2NhbGFyX211bCAobiA6IGJuKSAocSA6IHB0KSA6IHB0ID1cbiAgbGV0IHIgPSByZWYgaWRlbnRpdHkgaW5cbiAgZm9yIGkgPSBudW1iaXRzIG4gLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBwYWRkICFyICFyO1xuICAgIGlmIGJpdCBuIGkgPSAxIHRoZW4gciA6PSBwYWRkICFyIHFcbiAgZG9uZTtcbiAgIXJcblxubGV0IHBuZWdhdGUgKHEgOiBwdCkgOiBwdCA9XG4gIHsgcSB3aXRoIHggPSBmc3ViIChvZl9pbnQgMCkgcS54OyB0ID0gZnN1YiAob2ZfaW50IDApIHEudCB9XG5cbigqIERlY29tcHJlc3MgYSAzMi1ieXRlIGxpdHRsZS1lbmRpYW4gcG9pbnQgZW5jb2RpbmcuICopXG5sZXQgZGVjb21wcmVzcyAocyA6IHN0cmluZykgOiBwdCBvcHRpb24gPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBOb25lXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgc2lnbiA9IChDaGFyLmNvZGUgcy5bMzFdIGxzciA3KSBsYW5kIDEgaW5cbiAgICBsZXQgcycgPSBCeXRlcy5vZl9zdHJpbmcgcyBpblxuICAgIEJ5dGVzLnNldCBzJyAzMSAoQ2hhci5jaHIgKENoYXIuY29kZSBzLlszMV0gbGFuZCAweDdmKSk7XG4gICAgbGV0IHkgPSBvZl9ieXRlc19sZSAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzJykgaW5cbiAgICBpZiBjbXAgeSBwID49IDAgdGhlbiBOb25lXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHkyID0gZm11bCB5IHkgaW5cbiAgICAgIGxldCB1ID0gZnN1YiB5MiAob2ZfaW50IDEpIGluXG4gICAgICBsZXQgdiA9IGZhZGQgKGZtdWwgZGNvbnN0IHkyKSAob2ZfaW50IDEpIGluXG4gICAgICAoKiB4ID0gdSB2XjMgKHUgdl43KV4oKHAtNSkvOCkgKilcbiAgICAgIGxldCB2MyA9IGZtdWwgKGZtdWwgdiB2KSB2IGluXG4gICAgICBsZXQgdjcgPSBmbXVsIChmbXVsIHYzIHYzKSB2IGluXG4gICAgICBsZXQgZXhwID0gZGl2X3NtYWxsIChzdWIgcCAob2ZfaW50IDUpKSA4IGluXG4gICAgICBsZXQgeDAgPSBmbXVsIChmbXVsIHUgdjMpIChmcG93IChmbXVsIHUgdjcpIGV4cCkgaW5cbiAgICAgIGxldCB2eDIgPSBmbXVsIHYgKGZtdWwgeDAgeDApIGluXG4gICAgICBsZXQgeCA9XG4gICAgICAgIGlmIGNtcCB2eDIgdSA9IDAgdGhlbiBTb21lIHgwXG4gICAgICAgIGVsc2UgaWYgY21wIHZ4MiAoZnN1YiAob2ZfaW50IDApIHUpID0gMCB0aGVuIFNvbWUgKGZtdWwgeDAgc3FydG0xKVxuICAgICAgICBlbHNlIE5vbmVcbiAgICAgIGluXG4gICAgICBtYXRjaCB4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICB8IFNvbWUgeCAtPlxuICAgICAgICBpZiBpc196ZXJvIHggJiYgc2lnbiA9IDEgdGhlbiBOb25lXG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgeCA9IGlmIChiaXQgeCAwKSA8PiBzaWduIHRoZW4gZnN1YiAob2ZfaW50IDApIHggZWxzZSB4IGluXG4gICAgICAgICAgU29tZSB7IHg7IHk7IHogPSBvZl9pbnQgMTsgdCA9IGZtdWwgeCB5IH1cbiAgICAgICAgZW5kXG4gICAgZW5kXG4gIGVuZFxuXG4oKiBFbmNvZGUgYSBwb2ludCB0byAzMi1ieXRlIGxpdHRsZS1lbmRpYW4gKHkgd2l0aCB4LXBhcml0eSBiaXQpLiAqKVxubGV0IGVuY29kZSAocSA6IHB0KSA6IHN0cmluZyA9XG4gIGxldCB6aSA9IGZpbnYgcS56IGluXG4gIGxldCB4ID0gZm11bCBxLnggemkgYW5kIHkgPSBmbXVsIHEueSB6aSBpblxuICBsZXQgYiA9IEJ5dGVzLm9mX3N0cmluZyAodG9fYnl0ZXNfbGUgeSAzMikgaW5cbiAgbGV0IGxhc3QgPSBDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIDMxKSBsb3IgKChiaXQgeCAwKSBsc2wgNykgaW5cbiAgQnl0ZXMuc2V0IGIgMzEgKENoYXIuY2hyIGxhc3QpO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJcblxuKCogYmFzZSBwb2ludDogeSA9IDQvNSBtb2QgcCwgeCBldmVuIChzaWduIDApLiAqKVxubGV0IGJhc2VfcG9pbnQgPVxuICBsZXQgYnkgPSBmbXVsIChvZl9pbnQgNCkgKGZpbnYgKG9mX2ludCA1KSkgaW5cbiAgbWF0Y2ggZGVjb21wcmVzcyAodG9fYnl0ZXNfbGUgYnkgMzIpIHdpdGhcbiAgfCBTb21lIHB0IC0+IHB0XG4gIHwgTm9uZSAtPiBmYWlsd2l0aCBcImVkMjU1MTk6IGJhc2UgcG9pbnQgZGVjb21wcmVzcyBmYWlsZWRcIlxuXG5sZXQgdW5oZXggKGggOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIGggLyAyIGluXG4gIGxldCBiID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgQnl0ZXMuc2V0IGIgaVxuICAgICAgKENoYXIuY2hyIChpbnRfb2Zfc3RyaW5nIChcIjB4XCIgXiBTdHJpbmcuc3ViIGggKDIgKiBpKSAyKSkpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG5sZXQgc2hhNTEyX2J5dGVzIHMgPSB1bmhleCAoU3hfc2hhMi5zaGE1MTJfaGV4IHMpXG5cbigqIFJGQyA4MDMyIMKnNS4xLjcgY29mYWN0b3JsZXNzOiBlbmNvZGUoW1NdQiAtIFtrXUEpID09IFIuICopXG5sZXQgdmVyaWZ5IH5wdWJrZXkgfm1zZyB+c2lnXyA6IGJvb2wgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHB1YmtleSA8PiAzMiB8fCBTdHJpbmcubGVuZ3RoIHNpZ18gPD4gNjQgdGhlbiBmYWxzZVxuICBlbHNlXG4gICAgbGV0IHJiID0gU3RyaW5nLnN1YiBzaWdfIDAgMzIgaW5cbiAgICBsZXQgc2IgPSBTdHJpbmcuc3ViIHNpZ18gMzIgMzIgaW5cbiAgICBsZXQgcyA9IG9mX2J5dGVzX2xlIHNiIGluXG4gICAgaWYgY21wIHMgZWxsID49IDAgdGhlbiBmYWxzZVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGRlY29tcHJlc3MgcHVia2V5IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgfCBTb21lIGEgLT5cbiAgICAgICAgbGV0IGggPSBzaGE1MTJfYnl0ZXMgKHJiIF4gcHVia2V5IF4gbXNnKSBpblxuICAgICAgICBsZXQgayA9IGJuX21vZCAob2ZfYnl0ZXNfbGUgaCkgZWxsIGluXG4gICAgICAgIGxldCBzYl9wdCA9IHNjYWxhcl9tdWwgcyBiYXNlX3BvaW50IGluXG4gICAgICAgIGxldCBrYSA9IHNjYWxhcl9tdWwgayBhIGluXG4gICAgICAgIGxldCBjaGsgPSBwYWRkIHNiX3B0IChwbmVnYXRlIGthKSBpblxuICAgICAgICAodHJ5IGVuY29kZSBjaGsgPSByYiB3aXRoIF8gLT4gZmFsc2UpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYiIsIlN4X3NoYTIiLCJTdGRsaWJfQ2hhciIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX0FycmF5Iiwibm9ybSIsImEiLCJuIiwiYnplcm8iLCJvZl9pbnQiLCJyIiwiaXNfemVybyIsImNtcCIsImIiLCJsYSIsImxiIiwiaSIsImFkZCIsImNhcnJ5IiwicyIsInN1YiIsImJvcnJvdyIsIm11bCIsIm1hc2tMIiwiYWkiLCJqIiwibnVtYml0cyIsImhpIiwidiIsImJpdCIsImxpbWIiLCJvZmYiLCJibl9tb2QiLCJtIiwiZGl2X3NtYWxsIiwiZCIsInEiLCJkTCIsInJlbSIsImN1ciIsInBvd21vZCIsImIwIiwiZSIsIm5iIiwicmVzdWx0Iiwib2ZfYnl0ZXNfbGUiLCJhY2MiLCJ0b19ieXRlc19sZSIsInFtIiwidHdvcDI1NSIsInAiLCJmbW9kIiwiZmFkZCIsImZzdWIiLCJmbXVsIiwiZnBvdyIsImZpbnYiLCJlbGwiLCJpbnY2NjYiLCJkY29uc3QiLCJzcXJ0bTEiLCJpZGVudGl0eSIsInBhZGQiLCJwMSIsInAyIiwiYyIsImRkIiwiZiIsImciLCJoIiwic2NhbGFyX211bCIsInBuZWdhdGUiLCJkZWNvbXByZXNzIiwic2lnbiIsInkiLCJ5MiIsInUiLCJ2MyIsInY3IiwiZXhwIiwieDAiLCJ2eDIiLCJ4IiwiZW5jb2RlIiwiemkiLCJsYXN0IiwiYnkiLCJtYXRjaCIsInB0IiwiYmFzZV9wb2ludCIsInVuaGV4Iiwic2hhNTEyX2J5dGVzIiwidmVyaWZ5IiwicHVia2V5IiwibXNnIiwic2lnIiwicmIiLCJzYiIsImsiLCJzYl9wdCIsImthIiwiY2hrIiwiZXhuIiwiU3hfZWQyNTUxOSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsS0FBQUM7QUFBQUEsUUFBQUMsSUNrQkU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFnQjtBQUFBLFdBQUFBLE1BQWtCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUNsQyxnQ0FBbUMsbUNBQWdCO0FBQUE7QUFBQTtBQUFBLFdEbkJyRCxxQ0FBQUMsUUFBQTtBQUFBLFlBQUFDLE9BQUFGO0FBQUFBLElDdUJFLFlBQWM7QUFBQSxRQUFBQSxNQUdaLEdBQUFHLElBQUE7QUFBQTtBQUFBO0FBQUEsY0FDb0I7QUFBQSxNQUFmLE9BQTZCLEtBQTdCLCtCQUNKO0FBQUE7QUFBQSxhQUYwQztBQUFBO0FBQUE7QUFBQTtBQUFBLEdBRTFDO0FBQUEsWUFBQUMsUUFBQUw7QUFBQUE7QUFBQUEsS0FBQSxJQUVrQjtBQUFBLG1CQUFzQjtBQUFBLElBQXRCO0FBQUEsR0FBK0I7QUFBQSxZQUFBTSxJQUFBTixHQUFBTztBQUFBQTtBQUFBQSxLQUFBUCxNQUc1QztBQUFBLEtBQUFPLE1BQWU7QUFBQSxLQUFBQyxLQUN2QjtBQUFBLEtBQUFDLEtBQUE7QUFBQSxJQUNBLGNBQWlCLCtCQU9kO0FBQUEsUUFBQUMsSUFKRCxZQUFBTixJQUFBO0FBQUE7QUFBQTtBQUFBLGNBQ2U7QUFBQSxNQUFWO0FBQUE7QUFBQSxZQUEwQztBQUFBLFFBQUFBLE1BQUQsaUJBQU47QUFBQTtBQUFBLFdBQUFBLE1BQTdCO0FBQUEsVUFBQU0sTUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FDSTtBQUFBO0FBQUEsR0FDTDtBQUFBLFlBQUFDLElBQUFYLEdBQUFPO0FBQUFBO0FBQUFBLEtBQUFDLEtBR0g7QUFBQSxLQUFBQyxLQUFBO0FBQUEsS0FBQVIsSUFDUTtBQUFBLEtBQUFHLElBQ0E7QUFBQSxTQUVSO0FBQUE7QUFBQSxTQUFBUSxRQUFBLEdBQUFGLElBQUE7QUFBQTtBQUFBO0FBQUEsV0FDRSxTQUUwQjtBQUFBLFdBRjFCLFNBQzBCO0FBQUEsT0FBQUcsSUFEMUI7QUFBQSxNQUdBO0FBQUEsY0FBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFdEIsY0FBTTtBQUFBO0FBQUEsWUFBQUMsSUFBQWQsR0FBQU87QUFBQUE7QUFBQUEsS0FBQUMsS0FJTjtBQUFBLEtBQUFDLEtBQUE7QUFBQSxLQUFBTCxJQUNRO0FBQUEsU0FFUjtBQUFBO0FBQUEsU0FBQVcsU0FBQSxHQUFBTCxJQUFBO0FBQUE7QUFBQTtBQUFBLFdBQ0UsU0FBMEM7QUFBQSxPQUFBRyxJQUFsQztBQUFBLE9BQUFFO0FBQUFBLFNBQ1I7QUFBQSxhQUNNO0FBQUEsYUFEUztBQUFBLFdBQWY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFHRixjQUFNO0FBQUE7QUFBQSxZQUFBQyxJQUFBaEIsR0FBQU87QUFBQUE7QUFBQUEsS0FBQUMsS0FNTjtBQUFBLEtBQUFDLEtBQUE7QUFBQSxLQUFBTCxJQUNRO0FBQUEsS0FBQWEsUUFDSTtBQUFBLFNBQ1o7QUFBQTtBQUFBLFNBQUFQLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQVEsS0FFVyxvQkFBYTtBQUFBLFdBQ3RCO0FBQUE7QUFBQSxXQUFBTixVQUFBO0FBQUE7QUFBQSxXQUFBQSxRQUFBLEdBQUFPLElBQUE7QUFBQTtBQUFBO0FBQUEsYUFFMEQ7QUFBQTtBQUFBLFdBQW5DO0FBQUEsaUJBQWMsb0JBQWM7QUFBQSxTQUFBTjtBQUFBQSxXQUR6QztBQUFBLGFBQVU7QUFBQSxlQUFXLG9CQUFjO0FBQUE7QUFBQSxhQUVLO0FBQUEsUUFBaEQ7QUFBQSxTQUFnRCxvQkFBdEI7QUFBQSxnQkFDakIsb0RBQWdDO0FBQUEsd0JBQUFELFVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FFM0M7QUFBQSxXQUF3QjtBQUFBLFdBQVYsZ0NBQWQ7QUFBQTtBQUFBLGNBQThDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUVoRCxjQUFNO0FBQUE7QUFBQSxZQUFBUSxRQUFBcEI7QUFBQUEsUUFBQUEsTUFHRSxTQUFBcUIsS0FDUjtBQUFBLElBQ0EscUJBQWEsNkJBQWU7QUFBQSxRQUFBQyxJQUVBLG1DQUFBZixJQUMxQjtBQUFBO0FBQUEsZ0JBQ0E7QUFBQSxTQUFBQSxNQURnQjtBQUFBLEtBQVE7QUFBQTtBQUFBO0FBQUEsR0FFdkI7QUFBQSxZQUFBZ0IsSUFBQXZCLEdBQUFVO0FBQUFBLFFBQUFjLE9BR0gsWUFBQUMsTUFBQTtBQUFBLElBQ0E7QUFBQTtBQUFBLGVBQXVDLG9EQUF3QjtBQUFBO0FBQUEsWUFBQUMsT0FBQTFCLEdBQUEyQjtBQUFBQSxJQUk1RCxrQkFBaUIsY0FVakI7QUFBQSxZQVBPO0FBQUEsSUFBUztBQUFBLFNBQUF2QixNQUFBO0FBQUE7QUFBQSxTQUFBQSxNQUFBLE9BQUFNLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQU4sSUFFVjtBQUFBLE9BQUFBLE1BQ0Ysa0JBQXNCO0FBQUEsT0FBQUEsTUFDdEIsbUJBQXdCO0FBQUEsV0FBaEI7QUFBQSxzQkFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFYjtBQUFBLEdBQ0M7QUFBQSxZQUFBd0IsVUFBQTVCLEdBQUE2QjtBQUFBQTtBQUFBQSxLQUFBckIsS0FLSDtBQUFBLEtBQUFzQixJQUNRO0FBQUEsS0FBQUMsS0FFQztBQUFBLFNBQ1Q7QUFBQTtBQUFBLFNBQUFDLE1BQUEsR0FBQXRCLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQXVCO0FBQUFBLFNBQ1k7QUFBQSxXQUFZO0FBQUEsV0FBNkIsb0JBQWM7QUFBQSxXQUN6QixvQkFBbEI7QUFBQSxNQUF0QjtBQUFBLGNBQ08scUNBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRXpCLGNBQU07QUFBQTtBQUFBLFlBQUFDLE9BQUFDLElBQUFDLEdBQUFUO0FBQUFBLFFBQUEsSUFHK0IsZUFBQVUsS0FDNUIsZ0JBQ1QsZ0JBRkE7QUFBQSxJQUVBO0FBQUEsU0FBQUMsV0FBQTtBQUFBO0FBQUEsU0FBQS9CLElBQUEsR0FBQStCLFNBQUEsR0FBQTVCLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQTRCLFdBQ0ssa0JBQTJCLE9BQU87QUFBQSxXQUNoQyxPQUFPO0FBQUEsV0FBYTtBQUFBLHNCQUFBQSxXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRTNCO0FBQUEsR0FBTztBQUFBLFlBQUFDLFlBQUExQjtBQUFBQSxRQUFBLElBSVA7QUFBQTtBQUFBLFNBQUEyQixRQUFBO0FBQUE7QUFBQSxTQUFBQSxNQUFBLE9BQUE5QixJQUFBO0FBQUE7QUFBQTtBQUFBLFdBQ3FDLE9BQW1CO0FBQUEsV0FBL0MsSUFBSSxTQUFVO0FBQUEsV0FBd0M7QUFBQSxzQkFBQThCLFFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRS9EO0FBQUEsR0FBSTtBQUFBLFlBQUFDLFlBQUF6QyxHQUFBQztBQUFBQSxRQUFBTSxJQUdJLHNDQUVSLGVBRGM7QUFBQSxJQUNkO0FBQUEsU0FBQTBCLE1BQUEsR0FBQXZCLElBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQW9CLElBQ1U7QUFBQSxPQUFBWSxLQUVHLE9BQU07QUFBQSxPQUFBYixJQUNQO0FBQUEsT0FBQXpCLElBQ0wsaUJBQXNCO0FBQUEsTUFFM0IscUJBQWM7QUFBQSxjQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRzVCLHFDQUF3QjtBQUFBO0FBQUEsT0FBQXVDLFVBS1Y7QUFBQSxHQUVkO0FBQUEsV0FDbUIsWUFBQUMsSUFBbkIsSUFBSTtBQUFBLFlBQUFDLEtBQUE3QyxHQUVPLG1CQUFVO0FBQUEsWUFBQThDLEtBQUE5QyxHQUFBTyxPQUFBUCxNQUNILFdBRFAscUJBQ2dCO0FBQUEsWUFBQStDLEtBQUEvQyxHQUFBTztBQUFBQSxRQUFBUCxNQUNULE9BQU8sT0FGZDtBQUFBLHlCQUUrQjtBQUFBO0FBQUEsWUFBQWdELEtBQUFoRCxHQUFBTyxPQUFBUCxNQUN4QixXQUhQLHFCQUdnQjtBQUFBLFlBQUFpRCxLQUFBakQsR0FBQW9DLEdBQ2Qsc0JBQVk7QUFBQSxZQUFBYyxLQUFBbEQsT0FBQW9DLElBQ1AsT0FBTyxZQURaLHNCQUN1QjtBQUFBO0FBQUEsSUFBQWU7QUFBQUEsTUFJcEM7QUFBQTtBQUFBLElBQUFDLFNBTWEsS0FBSztBQUFBLFFBQ1M7QUFBQSxJQUFBcEQsSUFBdEIsSUFBSyxLQUFNO0FBQUEsSUFBQXFELFNBaEJMO0FBQUEsSUFBQWpCLElBbUJnQixVQUFXLE9BQU87QUFBQSxJQUFBcEMsTUFBN0I7QUFBQSxJQUFBc0QsU0FmSDtBQUFBLFFBcUIrQjtBQUFBLElBQUFDLFdBQWQ7QUFBQSxZQUFBQyxLQUFBQyxJQUFBQztBQUFBQTtBQUFBQSxLQUFBLElBSUE7QUFBQSxLQUFBMUQsSUFBdEIsS0FBSztBQUFBLFNBQ2lCO0FBQUEsS0FBQU8sSUFBdEIsS0FBSztBQUFBLFNBQ2lCO0FBQUEsU0FBTixLQUFNO0FBQUEsS0FBQW9ELElBQXRCLEtBQUs7QUFBQSxTQUNZO0FBQUE7QUFBQSxLQUFBQyxLQUFoQixLQUFLO0FBQUEsS0FBQXhCLElBQ047QUFBQSxLQUFBeUIsSUFDQTtBQUFBLEtBQUFDLElBQ0E7QUFBQSxLQUFBQyxJQUNBO0FBQUEsU0FDMEI7QUFBQSxTQUFjO0FBQUEsU0FBNUI7QUFBQSxJQUFkLCtCQUFRO0FBQUEsR0FBNEM7QUFBQSxZQUFBQyxXQUFBL0QsR0FBQTZCO0FBQUFBLFFBQUEsSUFJbEQ7QUFBQSxJQUFTO0FBQUEsU0FBQTFCLE1BQUE7QUFBQTtBQUFBLFNBQUFBLE1BQUEsVUFBQU0sSUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBTixJQUNWO0FBQUEsT0FBQUEsTUFDRixrQkFBc0I7QUFBQSxXQUFmO0FBQUEsc0JBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRVo7QUFBQSxHQUFFO0FBQUEsWUFBQTZELFFBQUFuQztBQUFBQSxRQUFBLElBR3lDLFVBQUwsS0FBSyxtQkFBekI7QUFBQSxlQUFMLEtBQUssdUJBQWM7QUFBQSxHQUEyQjtBQUFBLFlBQUFvQyxXQUFBckQ7QUFBQUEsSUFJM0Qsb0NBQThCO0FBQUE7QUFBQSxLQUFBc0QsT0FFTjtBQUFBLEtBQUF0RCxNQUNiO0FBQUEsU0FDNEI7QUFBQSxJQUFyQyx3QkFBZ0I7QUFBQSxRQUFBdUQsSUFDUixZQUFZO0FBQUEsSUFDakIsbUJBQWtCO0FBQUE7QUFBQSxLQUFBQyxLQUVWO0FBQUEsS0FBQUMsSUFDRCxTQUFRO0FBQUEsU0FDYztBQUFBLEtBQUFoRCxJQUF0QixLQUFLO0FBQUEsS0FBQWlELEtBRUosS0FBSztBQUFBLEtBQUFDLEtBQ0wsS0FBSztBQUFBLEtBQUFDLE1BQ0osVUFBVSxPQUFPO0FBQUEsS0FBQXpFLElBQ0s7QUFBQSxTQS9EdkI7QUFBQSxLQUFBMEUsS0ErREEsS0FBSztBQUFBLEtBQUFDLE1BQ0osUUFBTztBQUFBLEtBQUFDO0FBQUFBLE9BRVo7QUFBQTtBQUFBLGdCQUNLLFNBQVEsS0FBTSxxQkFBNEI7QUFBQSxJQUdwRCxRQUNVO0FBQUEsUUFBQUEsTUFEVjtBQUFBLElBR0ssK0JBQTJCO0FBQUE7QUFBQSxLQUFBQSxNQUVqQix1QkFBdUIsS0FBSztBQUFBLFNBQ1I7QUFBQSxJQUFkLHFDQUFRO0FBQUEsR0FHOUI7QUFBQSxZQUFBQyxPQUFBL0M7QUFBQUE7QUFBQUEsS0FBQWdELEtBSU07QUFBQSxLQUFBRixJQUNEO0FBQUEsS0FBQVIsSUFBb0I7QUFBQSxTQUNKO0FBQUEsS0FBQTdELElBQWhCO0FBQUEsU0FDbUM7QUFBQSxLQUFBd0UsT0FBdEI7QUFBQSxJQUNyQixzQkFBZTtBQUFBLElBQWUscUNBQ047QUFBQTtBQUFBO0FBQUEsUUFJQyxLQUFNO0FBQUEsSUFBQUMsS0FBdEIsS0FBSztBQUFBLElBQUFDLFFBQ1IsV0FBVztBQUFBLEdBQW1CO0FBQUEsUUFBQUMsS0FBQSxVQUFBQyxhQUN2QjtBQUFBO0FBQUE7QUFBQSxLQUFBQTtBQUFBQSxPQUNIO0FBQUEsWUFBQUMsTUFBQXJCO0FBQUFBO0FBQUFBLEtBQUE5RCxJQUdWO0FBQUEsS0FBQU0sSUFDUTtBQUFBLFNBQ1I7QUFBQTtBQUFBLFNBQUFHLElBQUE7QUFBQTtBQUFBO0FBQUEsV0FFcUM7QUFBQSxXQUF2QiwyQkFBZTtBQUFBLE1BRDNCLHFCQUNFO0FBQUEsY0FBMEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRTlELHFDQUF3QjtBQUFBO0FBQUEsWUFBQTJFLGFBQUF4RSxHQUVDLE9BQXNCLE1BQXRCLDBCQUFzQjtBQUFBLFlBQUF5RSxPQUFBQyxRQUFBQyxLQUFBQztBQUFBQSxJQUkvQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQUFDLEtBRVc7QUFBQSxNQUFBQyxLQUNBO0FBQUEsTUFBQTlFLElBQ0Q7QUFBQSxLQUNMLHFCQUFvQjtBQUFBLFNBQUFvRSxRQUVmO0FBQUEsS0FBaUIsWUFDYjtBQUFBO0FBQUEsTUFBQWpGLElBRGE7QUFBQSxVQUdNO0FBQUEsTUFBQStELElBQW5CLGFBQWE7QUFBQSxNQUFBNkIsSUFDYixPQUFPO0FBQUEsTUFBQUMsUUFDSDtBQUFBLE1BQUFDLEtBQ0g7QUFBQSxNQUFBQyxNQUNDLFlBQVc7QUFBQSxLQUNyQixZQUFLLDRDQUFBQyxLQUEwQjtBQUFBO0FBQUEsSUFmMEI7QUFBQSxHQWVwQjtBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFoQ1A7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEM1F0QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQxNjI5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9wYXJzZXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogUy1leHByZXNzaW9uIHBhcnNlci5cblxuICAgIFJlY3Vyc2l2ZSBkZXNjZW50IG92ZXIgYSBzdHJpbmcsIHByb2R1Y2luZyBbU3hfdHlwZXMudmFsdWUgbGlzdF0uXG4gICAgU3VwcG9ydHM6IGxpc3RzLCBkaWN0cywgc3ltYm9scywga2V5d29yZHMsIHN0cmluZ3MgKHdpdGggZXNjYXBlcyksXG4gICAgbnVtYmVycywgYm9vbGVhbnMsIG5pbCwgY29tbWVudHMsIHF1b3RlL3F1YXNpcXVvdGUvdW5xdW90ZSBzdWdhci4gKilcblxub3BlbiBTeF90eXBlc1xuXG50eXBlIHN0YXRlID0ge1xuICBzcmMgOiBzdHJpbmc7XG4gIGxlbiA6IGludDtcbiAgbXV0YWJsZSBwb3MgOiBpbnQ7XG59XG5cbmxldCBtYWtlX3N0YXRlIHNyYyA9IHsgc3JjOyBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYzsgcG9zID0gMCB9XG5cbmxldCBwZWVrIHMgPSBpZiBzLnBvcyA8IHMubGVuIHRoZW4gU29tZSBzLnNyYy5bcy5wb3NdIGVsc2UgTm9uZVxubGV0IGFkdmFuY2UgcyA9IHMucG9zIDwtIHMucG9zICsgMVxubGV0IGF0X2VuZCBzID0gcy5wb3MgPj0gcy5sZW5cblxubGV0IHNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcyA9XG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gKClcbiAgICBlbHNlIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+IGFkdmFuY2UgczsgZ28gKClcbiAgICB8ICc7JyAtPlxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdIDw+ICdcXG4nIGRvIGFkdmFuY2UgcyBkb25lO1xuICAgICAgaWYgcy5wb3MgPCBzLmxlbiB0aGVuIGFkdmFuY2UgcztcbiAgICAgIGdvICgpXG4gICAgfCBfIC0+ICgpXG4gIGluIGdvICgpXG5cbigqIENoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiDigJQgbWF0Y2hlcyBzcGVjL3BhcnNlci5zeCBpZGVudC1zdGFydC9pZGVudC1jaGFyLlxuICAgaWRlbnQtc3RhcnQ6IGEteiBBLVogXyB+ICogKyAtID4gPCA9IC8gISA/ICZcbiAgIGlkZW50LWNoYXI6ICBpZGVudC1zdGFydCBwbHVzIDAtOSAuIDogLyAjICwgKilcbmxldCBpc19pZGVudF9zdGFydCA9IGZ1bmN0aW9uXG4gIHwgJ2EnLi4neicgfCAnQScuLidaJyB8ICdfJyB8ICd+JyB8ICcqJyB8ICcrJyB8ICctJ1xuICB8ICc+JyB8ICc8JyB8ICc9JyB8ICcvJyB8ICchJyB8ICc/JyB8ICcmJyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgaXNfaWRlbnRfY2hhciA9IGZ1bmN0aW9uXG4gIHwgYyB3aGVuIGlzX2lkZW50X3N0YXJ0IGMgLT4gdHJ1ZVxuICB8ICcwJy4uJzknIHwgJy4nIHwgJzonIHwgJyMnIHwgJywnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbigqIFN5bWJvbCByZWFkaW5nIHVzZXMgaWRlbnRfY2hhcjsgZmlyc3QgY2hhciBtdXN0IGJlIGlkZW50X3N0YXJ0IG9yIGRpZ2l0L2NvbG9uICopXG5sZXQgaXNfc3ltYm9sX2NoYXIgPSBpc19pZGVudF9jaGFyXG5cbmxldCByZWFkX3N0cmluZyBzID1cbiAgKCogcy5wb3MgaXMgb24gdGhlIG9wZW5pbmcgcXVvdGUgKilcbiAgYWR2YW5jZSBzO1xuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBzdHJpbmdcIik7XG4gICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgYWR2YW5jZSBzO1xuICAgIGlmIGMgPSAnXCInIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICAgIGVsc2UgaWYgYyA9ICdcXFxcJyB0aGVuIGJlZ2luXG4gICAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBzdHJpbmcgZXNjYXBlXCIpO1xuICAgICAgbGV0IGVzYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIChtYXRjaCBlc2Mgd2l0aFxuICAgICAgIHwgJ24nIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbidcbiAgICAgICB8ICd0JyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHQnXG4gICAgICAgfCAncicgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxyJ1xuICAgICAgIHwgJ1wiJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICAgICB8ICdcXFxcJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJ1xuICAgICAgIHwgJy8nIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJy8nXG4gICAgICAgfCAndScgLT5cbiAgICAgICAgICgqIFxcdVhYWFgg4oCUIHJlYWQgNCBoZXggZGlnaXRzLCBlbmNvZGUgYXMgVVRGLTggKilcbiAgICAgICAgIGlmIHMucG9zICsgNCA+IHMubGVuIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiSW5jb21wbGV0ZSBcXFxcdSBlc2NhcGVcIik7XG4gICAgICAgICBsZXQgaGV4ID0gU3RyaW5nLnN1YiBzLnNyYyBzLnBvcyA0IGluXG4gICAgICAgICBzLnBvcyA8LSBzLnBvcyArIDQ7XG4gICAgICAgICBsZXQgY29kZSA9IGludF9vZl9zdHJpbmcgKFwiMHhcIiBeIGhleCkgaW5cbiAgICAgICAgIGxldCB1YnVmID0gQnVmZmVyLmNyZWF0ZSA0IGluXG4gICAgICAgICBCdWZmZXIuYWRkX3V0Zl84X3VjaGFyIHVidWYgKFVjaGFyLm9mX2ludCBjb2RlKTtcbiAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoQnVmZmVyLmNvbnRlbnRzIHVidWYpXG4gICAgICAgfCAnYCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnYCdcbiAgICAgICB8IF8gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxcXCc7IEJ1ZmZlci5hZGRfY2hhciBidWYgZXNjKTtcbiAgICAgIGdvICgpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cbmxldCByZWFkX3N5bWJvbCBzID1cbiAgbGV0IHN0YXJ0ID0gcy5wb3MgaW5cbiAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBpc19zeW1ib2xfY2hhciBzLnNyYy5bcy5wb3NdIGRvIGFkdmFuY2UgcyBkb25lO1xuICBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChzLnBvcyAtIHN0YXJ0KVxuXG5sZXQgZ2NkIGEgYiA9XG4gIGxldCByZWMgZyBhIGIgPSBpZiBiID0gMCB0aGVuIGEgZWxzZSBnIGIgKGEgbW9kIGIpIGluIGcgKGFicyBhKSAoYWJzIGIpXG5cbmxldCBtYWtlX3JhdCBuIGQgPVxuICBpZiBkID0gMCB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcInJhdGlvbmFsOiBkaXZpc2lvbiBieSB6ZXJvXCIpO1xuICBsZXQgc2lnbiA9IGlmIGQgPCAwIHRoZW4gLTEgZWxzZSAxIGluXG4gIGxldCBnID0gZ2NkIChhYnMgbikgKGFicyBkKSBpblxuICBsZXQgcm4gPSBzaWduICogbiAvIGcgYW5kIHJkID0gc2lnbiAqIGQgLyBnIGluXG4gIGlmIHJkID0gMSB0aGVuIEludGVnZXIgcm4gZWxzZSBSYXRpb25hbCAocm4sIHJkKVxuXG5sZXQgdHJ5X251bWJlciBzdHIgPVxuICAoKiBJbnRlZ2VycyAobm8gJy4nIG9yICdlJy8nRScpIOKGkiBleGFjdCBJbnRlZ2VyOyByYXRpb25hbHMgTi9EOyBmbG9hdHMg4oaSIGluZXhhY3QgTnVtYmVyICopXG4gIGxldCBoYXNfZGVjID0gU3RyaW5nLmNvbnRhaW5zIHN0ciAnLicgaW5cbiAgbGV0IGhhc19leHAgPSBTdHJpbmcuY29udGFpbnMgc3RyICdlJyB8fCBTdHJpbmcuY29udGFpbnMgc3RyICdFJyBpblxuICBpZiBoYXNfZGVjIHx8IGhhc19leHAgdGhlblxuICAgIG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgc3RyIHdpdGhcbiAgICB8IFNvbWUgbiAtPiBTb21lIChOdW1iZXIgbilcbiAgICB8IE5vbmUgLT4gTm9uZVxuICBlbHNlXG4gICAgbWF0Y2ggU3RyaW5nLnNwbGl0X29uX2NoYXIgJy8nIHN0ciB3aXRoXG4gICAgfCBbbnVtX3M7IGRlbl9zXSB3aGVuIG51bV9zIDw+IFwiXCIgJiYgZGVuX3MgPD4gXCJcIiAtPlxuICAgICAgKG1hdGNoIGludF9vZl9zdHJpbmdfb3B0IG51bV9zLCBpbnRfb2Zfc3RyaW5nX29wdCBkZW5fcyB3aXRoXG4gICAgICAgfCBTb21lIG4sIFNvbWUgZCAtPiAodHJ5IFNvbWUgKG1ha2VfcmF0IG4gZCkgd2l0aCBfIC0+IE5vbmUpXG4gICAgICAgfCBfIC0+IE5vbmUpXG4gICAgfCBfIC0+XG4gICAgICBtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBzdHIgd2l0aFxuICAgICAgfCBTb21lIG4gLT4gU29tZSAoSW50ZWdlciBuKVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICgqIGhhbmRsZXMgXCJuYW5cIiwgXCJpbmZcIiwgXCItaW5mXCIgKilcbiAgICAgICAgbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzdHIgd2l0aFxuICAgICAgICB8IFNvbWUgbiAtPiBTb21lIChOdW1iZXIgbilcbiAgICAgICAgfCBOb25lIC0+IE5vbmVcblxubGV0IHJlYyByZWFkX3ZhbHVlIHMgOiB2YWx1ZSA9XG4gIHNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcztcbiAgaWYgYXRfZW5kIHMgdGhlbiBiZWdpblxuICAgIGxldCBsaW5lID0gcmVmIDEgaW5cbiAgICBTdHJpbmcuaXRlciAoZnVuIGMgLT4gaWYgYyA9ICdcXG4nIHRoZW4gaW5jciBsaW5lKSBzLnNyYztcbiAgICByYWlzZSAoUGFyc2VfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgYXQgbGluZSAlZCAocG9zICVkKVwiICFsaW5lIHMucG9zKSlcbiAgZW5kO1xuICBtYXRjaCBzLnNyYy5bcy5wb3NdIHdpdGhcbiAgfCAnKCcgLT4gcmVhZF9saXN0IHMgJyknXG4gIHwgJ1snIC0+IHJlYWRfbGlzdCBzICddJ1xuICB8ICd7JyAtPiByZWFkX2RpY3Qgc1xuICB8ICdcIicgLT4gU3RyaW5nIChyZWFkX3N0cmluZyBzKVxuICB8ICdcXCcnIC0+IGFkdmFuY2UgczsgTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8ICdgJyAtPiBhZHZhbmNlIHM7IExpc3QgW1N5bWJvbCBcInF1YXNpcXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ1xcXFwnIC0+XG4gICAgKCogQ2hhcmFjdGVyIGxpdGVyYWw6ICNcXGEsICNcXHNwYWNlLCAjXFxuZXdsaW5lLCBldGMuICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBhZnRlciAjXFxcXFwiKTtcbiAgICBsZXQgY2hhcl9zdGFydCA9IHMucG9zIGluXG4gICAgKCogUmVhZCBhIG5hbWUgaWYgc3RhcnRzIHdpdGggaWRlbnQgY2hhciwgZWxzZSBzaW5nbGUgY2hhciAqKVxuICAgIGlmIGlzX2lkZW50X3N0YXJ0IHMuc3JjLltzLnBvc10gdGhlbiBiZWdpblxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBpc19pZGVudF9jaGFyIHMuc3JjLltzLnBvc10gZG8gYWR2YW5jZSBzIGRvbmU7XG4gICAgICBsZXQgbmFtZSA9IFN0cmluZy5zdWIgcy5zcmMgY2hhcl9zdGFydCAocy5wb3MgLSBjaGFyX3N0YXJ0KSBpblxuICAgICAgbGV0IGNwID0gbWF0Y2ggbmFtZSB3aXRoXG4gICAgICAgIHwgXCJzcGFjZVwiIC0+IDMyIHwgXCJuZXdsaW5lXCIgLT4gMTAgfCBcInRhYlwiIC0+IDlcbiAgICAgICAgfCBcInJldHVyblwiIC0+IDEzIHwgXCJudWxcIiAtPiAwIHwgXCJudWxsXCIgLT4gMFxuICAgICAgICB8IFwiZXNjYXBlXCIgLT4gMjcgfCBcImRlbGV0ZVwiIC0+IDEyNyB8IFwiYmFja3NwYWNlXCIgLT4gOFxuICAgICAgICB8IFwiYWx0bW9kZVwiIC0+IDI3IHwgXCJydWJvdXRcIiAtPiAxMjdcbiAgICAgICAgfCBfIC0+IENoYXIuY29kZSBuYW1lLlswXSAgKCogc2luZ2xlIGxldHRlciBsaWtlICNcXGEgKilcbiAgICAgIGluIENoYXIgY3BcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBDaGFyIChDaGFyLmNvZGUgYylcbiAgICBlbmRcbiAgfCAnIycgd2hlbiBzLnBvcyArIDEgPCBzLmxlbiAmJlxuICAgICAgICAgICAgIChzLnNyYy5bcy5wb3MgKyAxXSA9ICd0JyB8fCBzLnNyYy5bcy5wb3MgKyAxXSA9ICdmJykgJiZcbiAgICAgICAgICAgICAocy5wb3MgKyAyID49IHMubGVuIHx8IG5vdCAoaXNfaWRlbnRfY2hhciBzLnNyYy5bcy5wb3MgKyAyXSkpIC0+XG4gICAgKCogI3QgLyAjZiDigJQgYm9vbGVhbiBsaXRlcmFscyAoUjdSUyBzaG9ydGhhbmQpICopXG4gICAgbGV0IGIgPSBzLnNyYy5bcy5wb3MgKyAxXSA9ICd0JyBpblxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIEJvb2wgYlxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJzsnIC0+XG4gICAgKCogRGF0dW0gY29tbWVudDogIzsgZGlzY2FyZHMgbmV4dCBleHByZXNzaW9uICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgaWdub3JlIChyZWFkX3ZhbHVlIHMpO1xuICAgIHJlYWRfdmFsdWUgc1xuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ1xcJycgLT5cbiAgICAoKiBRdW90ZSBzaG9ydGhhbmQ6ICMnZXhwciAtPiAocXVvdGUgZXhwcikgKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnfCcgLT5cbiAgICAoKiBSYXcgc3RyaW5nOiAjfC4uLnwgIOKAlCBlbmRzIGF0IG5leHQgfCAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgbGV0IHJlYyBnbyAoKSA9XG4gICAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCByYXcgc3RyaW5nXCIpO1xuICAgICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBpZiBjID0gJ3wnIHRoZW5cbiAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgIGdvICgpXG4gICAgICBlbmRcbiAgICBpbiBnbyAoKVxuICB8ICcsJyAtPlxuICAgICgqIFVucXVvdGUgLyBzcGxpY2UtdW5xdW90ZSDigJQgbWF0Y2hlcyBzcGVjOiAsIGFsd2F5cyB0cmlnZ2VycyB1bnF1b3RlICopXG4gICAgYWR2YW5jZSBzO1xuICAgIGlmIHMucG9zIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zXSA9ICdAJyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBMaXN0IFtTeW1ib2wgXCJzcGxpY2UtdW5xdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gICAgZW5kIGVsc2VcbiAgICAgIExpc3QgW1N5bWJvbCBcInVucXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8IF8gLT5cbiAgICBiZWdpblxuICAgICAgKCogU3ltYm9sLCBrZXl3b3JkLCBudW1iZXIsIG9yIGJvb2xlYW4gKilcbiAgICAgIGxldCB0b2tlbiA9IHJlYWRfc3ltYm9sIHMgaW5cbiAgICAgIGlmIHRva2VuID0gXCJcIiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsaW5lID0gcmVmIDEgYW5kIGNvbCA9IHJlZiAxIGluXG4gICAgICAgIGZvciBpID0gMCB0byBzLnBvcyAtIDEgZG9cbiAgICAgICAgICBpZiBzLnNyYy5baV0gPSAnXFxuJyB0aGVuIChpbmNyIGxpbmU7IGNvbCA6PSAxKSBlbHNlIGluY3IgY29sXG4gICAgICAgIGRvbmU7XG4gICAgICAgIHJhaXNlIChQYXJzZV9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmV4cGVjdGVkIGNoYXI6ICVjIGF0IGxpbmUgJWQgY29sICVkIChwb3MgJWQpXCJcbiAgICAgICAgICBzLnNyYy5bcy5wb3NdICFsaW5lICFjb2wgcy5wb3MpKVxuICAgICAgZW5kO1xuICAgICAgbWF0Y2ggdG9rZW4gd2l0aFxuICAgICAgfCBcInRydWVcIiAtPiBCb29sIHRydWVcbiAgICAgIHwgXCJmYWxzZVwiIC0+IEJvb2wgZmFsc2VcbiAgICAgIHwgXCJuaWxcIiAtPiBOaWxcbiAgICAgIHwgXyB3aGVuIHRva2VuLlswXSA9ICc6JyAtPlxuICAgICAgICBLZXl3b3JkIChTdHJpbmcuc3ViIHRva2VuIDEgKFN0cmluZy5sZW5ndGggdG9rZW4gLSAxKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBtYXRjaCB0cnlfbnVtYmVyIHRva2VuIHdpdGhcbiAgICAgICAgfCBTb21lIG4gLT4gblxuICAgICAgICB8IE5vbmUgLT4gU3ltYm9sIHRva2VuXG4gICAgZW5kXG5cbmFuZCByZWFkX2xpc3QgcyBjbG9zZV9jaGFyID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIG9wZW5pbmcgcGFyZW4vYnJhY2tldCAqKVxuICBsZXQgaXRlbXMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGxpc3RcIik7XG4gICAgaWYgcy5zcmMuW3MucG9zXSA9IGNsb3NlX2NoYXIgdGhlbiBiZWdpblxuICAgICAgYWR2YW5jZSBzO1xuICAgICAgTGlzdCAoTGlzdC5yZXYgIWl0ZW1zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBpdGVtcyA6PSByZWFkX3ZhbHVlIHMgOjogIWl0ZW1zO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW4gZ28gKClcblxuYW5kIHJlYWRfZGljdCBzID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIHsgKilcbiAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGRpY3RcIik7XG4gICAgaWYgcy5zcmMuW3MucG9zXSA9ICd9JyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBEaWN0IGRcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IGtleSA9IHJlYWRfdmFsdWUgcyBpblxuICAgICAgbGV0IGtleV9zdHIgPSBtYXRjaCBrZXkgd2l0aFxuICAgICAgICB8IEtleXdvcmQgayAtPiBrXG4gICAgICAgIHwgU3RyaW5nIGsgLT4ga1xuICAgICAgICB8IFN5bWJvbCBrIC0+IGtcbiAgICAgICAgfCBfIC0+IHJhaXNlIChQYXJzZV9lcnJvciBcIkRpY3Qga2V5IG11c3QgYmUga2V5d29yZCwgc3RyaW5nLCBvciBzeW1ib2xcIilcbiAgICAgIGluXG4gICAgICBsZXQgdiA9IHJlYWRfdmFsdWUgcyBpblxuICAgICAgZGljdF9zZXQgZCBrZXlfc3RyIHY7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5cbigqKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBTWCB2YWx1ZXMgKEFTVCDigJQgY29tbWVudHMgc3RyaXBwZWQpLiAqKVxubGV0IHBhcnNlX2FsbCBzcmMgPVxuICBsZXQgcyA9IG1ha2Vfc3RhdGUgc3JjIGluXG4gIGxldCByZXN1bHRzID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIHNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcztcbiAgICBpZiBhdF9lbmQgcyB0aGVuIExpc3QucmV2ICFyZXN1bHRzXG4gICAgZWxzZSBiZWdpblxuICAgICAgcmVzdWx0cyA6PSByZWFkX3ZhbHVlIHMgOjogIXJlc3VsdHM7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG4oKiogUGFyc2UgYSBmaWxlIGludG8gYSBsaXN0IG9mIFNYIHZhbHVlcyAoQVNUIOKAlCBjb21tZW50cyBzdHJpcHBlZCkuICopXG5sZXQgcGFyc2VfZmlsZSBwYXRoID1cbiAgbGV0IGljID0gb3Blbl9pbiBwYXRoIGluXG4gIGxldCBuID0gaW5fY2hhbm5lbF9sZW5ndGggaWMgaW5cbiAgbGV0IHNyYyA9IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbiBpblxuICBjbG9zZV9pbiBpYztcbiAgcGFyc2VfYWxsIHNyY1xuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogQ1NUIHBhcnNlciDigJQgbG9zc2xlc3MgY29uY3JldGUgc3ludGF4IHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5vcGVuIFN4X2NzdFxuXG4oKiogQ29sbGVjdCBsZWFkaW5nIHRyaXZpYSAod2hpdGVzcGFjZSArIGNvbW1lbnRzKSBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICopXG5sZXQgY29sbGVjdF90cml2aWEgcyA9XG4gIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBpZiBhdF9lbmQgcyB0aGVuICgpXG4gICAgZWxzZSBtYXRjaCBzLnNyYy5bcy5wb3NdIHdpdGhcbiAgICB8ICcgJyB8ICdcXHQnIHwgJ1xcbicgfCAnXFxyJyAtPlxuICAgICAgbGV0IHN0YXJ0ID0gcy5wb3MgaW5cbiAgICAgIHdoaWxlIHMucG9zIDwgcy5sZW4gJiYgKGxldCBjID0gcy5zcmMuW3MucG9zXSBpbiBjID0gJyAnIHx8IGMgPSAnXFx0JyB8fCBjID0gJ1xcbicgfHwgYyA9ICdcXHInKSBkb1xuICAgICAgICBhZHZhbmNlIHNcbiAgICAgIGRvbmU7XG4gICAgICBpdGVtcyA6PSBXaGl0ZXNwYWNlIChTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChzLnBvcyAtIHN0YXJ0KSkgOjogIWl0ZW1zO1xuICAgICAgZ28gKClcbiAgICB8ICc7JyAtPlxuICAgICAgbGV0IHN0YXJ0ID0gcy5wb3MgaW5cbiAgICAgIHdoaWxlIHMucG9zIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zXSA8PiAnXFxuJyBkbyBhZHZhbmNlIHMgZG9uZTtcbiAgICAgIGxldCB0ZXh0ID0gU3RyaW5nLnN1YiBzLnNyYyBzdGFydCAocy5wb3MgLSBzdGFydCkgaW5cbiAgICAgIGlmIHMucG9zIDwgcy5sZW4gdGhlbiBhZHZhbmNlIHM7XG4gICAgICAoKiBJbmNsdWRlIHRoZSBuZXdsaW5lIGluIHRoZSBjb21tZW50IHRyaXZpYSAqKVxuICAgICAgbGV0IHRleHQgPSBpZiBzLnBvcyA+IDAgJiYgcy5wb3MgPD0gcy5sZW4gJiYgcy5zcmMuW3MucG9zIC0gMV0gPSAnXFxuJ1xuICAgICAgICB0aGVuIHRleHQgXiBcIlxcblwiIGVsc2UgdGV4dCBpblxuICAgICAgaXRlbXMgOj0gTGluZUNvbW1lbnQgdGV4dCA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIHwgXyAtPiAoKVxuICBpblxuICBnbyAoKTtcbiAgTGlzdC5yZXYgIWl0ZW1zXG5cbigqKiBSZWFkIGEgc2luZ2xlIENTVCB2YWx1ZSDigJQgZGlzcGF0Y2hlcyBvbiBmaXJzdCBub24tdHJpdmlhIGNoYXIuICopXG5sZXQgcmVjIHJlYWRfY3N0IHMgOiBjc3Rfbm9kZSA9XG4gIGxldCB0cml2aWEgPSBjb2xsZWN0X3RyaXZpYSBzIGluXG4gIGlmIGF0X2VuZCBzIHRoZW5cbiAgICByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiKTtcbiAgbGV0IHN0YXJ0ID0gcy5wb3MgaW5cbiAgbWF0Y2ggcy5zcmMuW3MucG9zXSB3aXRoXG4gIHwgJygnIC0+IHJlYWRfY3N0X2xpc3QgcyB0cml2aWEgc3RhcnQgJygnICcpJ1xuICB8ICdbJyAtPiByZWFkX2NzdF9saXN0IHMgdHJpdmlhIHN0YXJ0ICdbJyAnXSdcbiAgfCAneycgLT4gcmVhZF9jc3RfZGljdCBzIHRyaXZpYSBzdGFydFxuICB8ICdcXCcnIC0+XG4gICAgKCogUXVvdGUgc3VnYXI6ICd4IOKGkiAocXVvdGUgeCkg4oCUIGVtaXQgYXMgcmF3IHRva2VuICopXG4gICAgYWR2YW5jZSBzO1xuICAgIGxldCBpbm5lciA9IHJlYWRfY3N0IHMgaW5cbiAgICBsZXQgZW5kX3BvcyA9IHMucG9zIGluXG4gICAgbGV0IHRva2VuID0gU3RyaW5nLnN1YiBzLnNyYyBzdGFydCAoZW5kX3BvcyAtIHN0YXJ0KSBpblxuICAgIGxldCB2YWx1ZSA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGNzdF90b19hc3QgaW5uZXJdIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7IHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCAnYCcgLT5cbiAgICBhZHZhbmNlIHM7XG4gICAgbGV0IGlubmVyID0gcmVhZF9jc3QgcyBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gTGlzdCBbU3ltYm9sIFwicXVhc2lxdW90ZVwiOyBjc3RfdG9fYXN0IGlubmVyXSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlOyBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJywnIC0+XG4gICAgYWR2YW5jZSBzO1xuICAgIGxldCBzcGxpY2UgPSBzLnBvcyA8IHMubGVuICYmIHMuc3JjLltzLnBvc10gPSAnQCcgaW5cbiAgICBpZiBzcGxpY2UgdGhlbiBhZHZhbmNlIHM7XG4gICAgbGV0IGlubmVyID0gcmVhZF9jc3QgcyBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHN5bSA9IGlmIHNwbGljZSB0aGVuIFwic3BsaWNlLXVucXVvdGVcIiBlbHNlIFwidW5xdW90ZVwiIGluXG4gICAgbGV0IHZhbHVlID0gTGlzdCBbU3ltYm9sIHN5bTsgY3N0X3RvX2FzdCBpbm5lcl0gaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZTsgc3BhbiA9IHsgc3RhcnRfb2Zmc2V0ID0gc3RhcnQ7IGVuZF9vZmZzZXQgPSBlbmRfcG9zIH0gfVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJzsnIC0+XG4gICAgKCogRGF0dW0gY29tbWVudDogIzsgZGlzY2FyZHMgbmV4dCBleHByZXNzaW9uICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IF9kaXNjYXJkZWQgPSByZWFkX2NzdCBzIGluXG4gICAgKCogUmVhZCB0aGUgcmVhbCB2YWx1ZSBhZnRlciB0aGUgZGF0dW0gY29tbWVudCDigJQgYXR0YWNoIHRyaXZpYSBmcm9tICM7ICopXG4gICAgbGV0IG5leHQgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGNvbWJpbmVkX3RyaXZpYSA9IHRyaXZpYSBAIChtYXRjaCBuZXh0IHdpdGhcbiAgICAgIHwgQ3N0QXRvbSByIC0+IHIubGVhZGluZ190cml2aWFcbiAgICAgIHwgQ3N0TGlzdCByIC0+IHIubGVhZGluZ190cml2aWFcbiAgICAgIHwgQ3N0RGljdCByIC0+IHIubGVhZGluZ190cml2aWEpIGluXG4gICAgKG1hdGNoIG5leHQgd2l0aFxuICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY29tYmluZWRfdHJpdmlhIH1cbiAgICAgfCBDc3RMaXN0IHIgLT4gQ3N0TGlzdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNvbWJpbmVkX3RyaXZpYSB9XG4gICAgIHwgQ3N0RGljdCByIC0+IENzdERpY3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjb21iaW5lZF90cml2aWEgfSlcbiAgfCAnIycgd2hlbiBzLnBvcyArIDEgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgKyAxXSA9ICdcXCcnIC0+XG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGlubmVyID0gcmVhZF9jc3QgcyBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgY3N0X3RvX2FzdCBpbm5lcl0gaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZTsgc3BhbiA9IHsgc3RhcnRfb2Zmc2V0ID0gc3RhcnQ7IGVuZF9vZmZzZXQgPSBlbmRfcG9zIH0gfVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ3wnIC0+XG4gICAgKCogUmF3IHN0cmluZzogI3wuLi58ICAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgbGV0IHJlYyBnbyAoKSA9XG4gICAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCByYXcgc3RyaW5nXCIpO1xuICAgICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBpZiBjID0gJ3wnIHRoZW4gKClcbiAgICAgIGVsc2UgYmVnaW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBnbyAoKSBlbmRcbiAgICBpblxuICAgIGdvICgpO1xuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWUgPSBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpO1xuICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJ1wiJyAtPlxuICAgIGxldCB2YWx1ZSA9IFN0cmluZyAocmVhZF9zdHJpbmcgcykgaW5cbiAgICBsZXQgZW5kX3BvcyA9IHMucG9zIGluXG4gICAgbGV0IHRva2VuID0gU3RyaW5nLnN1YiBzLnNyYyBzdGFydCAoZW5kX3BvcyAtIHN0YXJ0KSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlO1xuICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgXyAtPlxuICAgIGxldCBzeW0gPSByZWFkX3N5bWJvbCBzIGluXG4gICAgaWYgc3ltID0gXCJcIiB0aGVuIGJlZ2luXG4gICAgICBsZXQgbGluZSA9IHJlZiAxIGFuZCBjb2wgPSByZWYgMSBpblxuICAgICAgZm9yIGkgPSAwIHRvIHMucG9zIC0gMSBkb1xuICAgICAgICBpZiBzLnNyYy5baV0gPSAnXFxuJyB0aGVuIChpbmNyIGxpbmU7IGNvbCA6PSAxKSBlbHNlIGluY3IgY29sXG4gICAgICBkb25lO1xuICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlVuZXhwZWN0ZWQgY2hhcjogJWMgYXQgbGluZSAlZCBjb2wgJWQgKHBvcyAlZClcIlxuICAgICAgICBzLnNyYy5bcy5wb3NdICFsaW5lICFjb2wgcy5wb3MpKVxuICAgIGVuZDtcbiAgICBsZXQgZW5kX3BvcyA9IHMucG9zIGluXG4gICAgbGV0IHRva2VuID0gU3RyaW5nLnN1YiBzLnNyYyBzdGFydCAoZW5kX3BvcyAtIHN0YXJ0KSBpblxuICAgIGxldCB2YWx1ZSA9IG1hdGNoIHN5bSB3aXRoXG4gICAgICB8IFwidHJ1ZVwiIC0+IEJvb2wgdHJ1ZVxuICAgICAgfCBcImZhbHNlXCIgLT4gQm9vbCBmYWxzZVxuICAgICAgfCBcIm5pbFwiIC0+IE5pbFxuICAgICAgfCBfIHdoZW4gc3ltLlswXSA9ICc6JyAtPiBLZXl3b3JkIChTdHJpbmcuc3ViIHN5bSAxIChTdHJpbmcubGVuZ3RoIHN5bSAtIDEpKVxuICAgICAgfCBfIC0+IG1hdGNoIHRyeV9udW1iZXIgc3ltIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFN5bWJvbCBzeW1cbiAgICBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlO1xuICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG5cbmFuZCByZWFkX2NzdF9saXN0IHMgdHJpdmlhIHN0YXJ0IG9wZW5fYyBjbG9zZV9jID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIG9wZW4gZGVsaW0gKilcbiAgbGV0IGNoaWxkcmVuID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGxldCBjaGlsZF90cml2aWEgPSBjb2xsZWN0X3RyaXZpYSBzIGluXG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgbGlzdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gY2xvc2VfYyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBsZXQgZW5kX3BvcyA9IHMucG9zIGluXG4gICAgICBDc3RMaXN0IHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IG9wZW5fZGVsaW0gPSBvcGVuX2M7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBMaXN0LnJldiAhY2hpbGRyZW47IGNsb3NlX2RlbGltID0gY2xvc2VfYztcbiAgICAgICAgICAgICAgICB0cmFpbGluZ190cml2aWEgPSBjaGlsZF90cml2aWE7XG4gICAgICAgICAgICAgICAgc3BhbiA9IHsgc3RhcnRfb2Zmc2V0ID0gc3RhcnQ7IGVuZF9vZmZzZXQgPSBlbmRfcG9zIH0gfVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAoKiBQdXNoIGNvbGxlY3RlZCB0cml2aWEgb250byB0aGUgbmV4dCBjaGlsZCAqKVxuICAgICAgbGV0IGNoaWxkX3N0YXJ0ID0gcy5wb3MgaW5cbiAgICAgIGxldCBjaGlsZCA9IHJlYWRfY3N0X2lubmVyIHMgaW5cbiAgICAgIGxldCBjaGlsZF93aXRoX3RyaXZpYSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgICAgfCBDc3RBdG9tIHIgLT4gQ3N0QXRvbSB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0RGljdCByIC0+IENzdERpY3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgIGluXG4gICAgICBpZ25vcmUgY2hpbGRfc3RhcnQ7XG4gICAgICBjaGlsZHJlbiA6PSBjaGlsZF93aXRoX3RyaXZpYSA6OiAhY2hpbGRyZW47XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpblxuICBnbyAoKVxuXG5hbmQgcmVhZF9jc3RfZGljdCBzIHRyaXZpYSBzdGFydCA9XG4gIGFkdmFuY2UgczsgKCogc2tpcCB7ICopXG4gIGxldCBjaGlsZHJlbiA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBsZXQgY2hpbGRfdHJpdmlhID0gY29sbGVjdF90cml2aWEgcyBpblxuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGRpY3RcIik7XG4gICAgaWYgcy5zcmMuW3MucG9zXSA9ICd9JyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBsZXQgZW5kX3BvcyA9IHMucG9zIGluXG4gICAgICBDc3REaWN0IHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IGNoaWxkcmVuID0gTGlzdC5yZXYgIWNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHRyYWlsaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYTtcbiAgICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGxldCBjaGlsZCA9IHJlYWRfY3N0X2lubmVyIHMgaW5cbiAgICAgIGxldCBjaGlsZF93aXRoX3RyaXZpYSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgICAgfCBDc3RBdG9tIHIgLT4gQ3N0QXRvbSB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0RGljdCByIC0+IENzdERpY3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgIGluXG4gICAgICBjaGlsZHJlbiA6PSBjaGlsZF93aXRoX3RyaXZpYSA6OiAhY2hpbGRyZW47XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpblxuICBnbyAoKVxuXG4oKiogSW5uZXIgcmVhZCDigJQgbm8gdHJpdmlhIGNvbGxlY3Rpb24gKGNhbGxlciBoYW5kbGVzIGl0KS4gKilcbmFuZCByZWFkX2NzdF9pbm5lciBzIDogY3N0X25vZGUgPVxuICByZWFkX2NzdCBzXG5cbigqKiBQYXJzZSByZXN1bHQ6IGxpc3Qgb2YgQ1NUIG5vZGVzICsgYW55IHRyYWlsaW5nIHRyaXZpYSBhZnRlciB0aGUgbGFzdCBub2RlLiAqKVxudHlwZSBjc3RfZmlsZSA9IHtcbiAgbm9kZXMgOiBjc3Rfbm9kZSBsaXN0O1xuICB0cmFpbGluZ190cml2aWEgOiB0cml2aWEgbGlzdDtcbn1cblxuKCoqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBsaXN0IG9mIENTVCBub2Rlcy4gKilcbmxldCBwYXJzZV9hbGxfY3N0IHNyYyA9XG4gIGxldCBzID0gbWFrZV9zdGF0ZSBzcmMgaW5cbiAgbGV0IHJlc3VsdHMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgbGV0IHRyaXZpYSA9IGNvbGxlY3RfdHJpdmlhIHMgaW5cbiAgICBpZiBhdF9lbmQgcyB0aGVuXG4gICAgICB7IG5vZGVzID0gTGlzdC5yZXYgIXJlc3VsdHM7IHRyYWlsaW5nX3RyaXZpYSA9IHRyaXZpYSB9XG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IG5vZGUgPSByZWFkX2NzdF9pbm5lciBzIGluXG4gICAgICAoKiBQcmVwZW5kIGNvbGxlY3RlZCB0cml2aWEgdG8gdGhpcyBub2RlICopXG4gICAgICBsZXQgbm9kZV93aXRoX3RyaXZpYSA9IG1hdGNoIG5vZGUgd2l0aFxuICAgICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0TGlzdCByIC0+IENzdExpc3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSB0cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgaW5cbiAgICAgIHJlc3VsdHMgOj0gbm9kZV93aXRoX3RyaXZpYSA6OiAhcmVzdWx0cztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluXG4gIGdvICgpXG5cbigqKiBQYXJzZSBhIGZpbGUgaW50byBhIGxpc3Qgb2YgQ1NUIG5vZGVzLiAqKVxubGV0IHBhcnNlX2ZpbGVfY3N0IHBhdGggPVxuICBsZXQgaWMgPSBvcGVuX2luIHBhdGggaW5cbiAgbGV0IG4gPSBpbl9jaGFubmVsX2xlbmd0aCBpYyBpblxuICBsZXQgc3JjID0gcmVhbGx5X2lucHV0X3N0cmluZyBpYyBuIGluXG4gIGNsb3NlX2luIGljO1xuICBwYXJzZV9hbGxfY3N0IHNyY1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2RpdiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfbXVsIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9jYWxsMiIsImYiLCJhMCIsImExIiwiY2FtbF9jYWxsNCIsImEyIiwiYTMiLCJnbG9iYWxfZGF0YSIsIlN4X3R5cGVzIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0xpc3QiLCJTeF9jc3QiLCJTdGRsaWIiLCJTdGRsaWJfVWNoYXIiLCJtYWtlX3N0YXRlIiwic3JjIiwicGVlayIsInMiLCJhZHZhbmNlIiwiYXRfZW5kIiwic2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyIsIm1hdGNoIiwiaXNfaWRlbnRfc3RhcnQiLCJwYXJhbSIsImlzX2lkZW50X2NoYXIiLCJjIiwicmVhZF9zdHJpbmciLCJidWYiLCJlc2MiLCJoZXgiLCJjb2RlIiwidWJ1ZiIsInJlYWRfc3ltYm9sIiwic3RhcnQiLCJnY2QiLCJhIiwiYiIsIm1ha2VfcmF0IiwibiIsImQiLCJzaWduIiwiZyIsInJuIiwicmQiLCJjc3QiLCJ0cnlfbnVtYmVyIiwic3RyIiwiaGFzX2RlYyIsImhhc19leHAiLCJkZW5fcyIsIm51bV9zIiwiZXhuIiwiY3N0X3BvcyIsImNzdF9hdF9saW5lIiwiY3N0X2NvbCIsImNzdF9VbmV4cGVjdGVkX2NoYXIiLCJjc3RfVW5leHBlY3RlZF9jaGFyX2NfYXRfbGluZV8iLCJjc3RfVW50ZXJtaW5hdGVkX3Jhd19zdHJpbmciLCJjc3RfZmFsc2UiLCJjc3RfbmlsIiwiY3N0X3F1YXNpcXVvdGUiLCJjc3RfcXVvdGUiLCJjc3Rfc3BsaWNlX3VucXVvdGUiLCJjc3RfdHJ1ZSIsImNzdF91bnF1b3RlIiwicmVhZF92YWx1ZSIsImNoYXJfc3RhcnQiLCJuYW1lIiwic3dpdGNoJCIsImNwIiwidG9rZW4iLCJjb2wiLCJsaW5lIiwiaSIsImNzdF9VbnRlcm1pbmF0ZWRfbGlzdCIsInJlYWRfbGlzdCIsImNsb3NlX2NoYXIiLCJpdGVtcyIsImNzdF9VbnRlcm1pbmF0ZWRfZGljdCIsInJlYWRfZGljdCIsImtleSIsImtleV9zdHIiLCJ2IiwicGFyc2VfYWxsIiwicmVzdWx0cyIsInBhcnNlX2ZpbGUiLCJwYXRoIiwiaWMiLCJjb2xsZWN0X3RyaXZpYSIsInRleHQiLCJyZWFkX2NzdCIsInRyaXZpYSIsImlubmVyIiwiZW5kX3BvcyIsInZhbHVlIiwibmV4dCIsImNvbWJpbmVkX3RyaXZpYSIsInNwbGljZSIsInN5bSIsInJlYWRfY3N0X2xpc3QiLCJvcGVuX2MiLCJjbG9zZV9jIiwiY2hpbGRyZW4iLCJjaGlsZF90cml2aWEiLCJjaGlsZCIsImNoaWxkX3dpdGhfdHJpdmlhIiwicmVhZF9jc3RfZGljdCIsInJlYWRfY3N0X2lubmVyIiwicGFyc2VfYWxsX2NzdCIsIm5vZGUiLCJub2RlX3dpdGhfdHJpdmlhIiwicGFyc2VfZmlsZV9jc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUgsR0FBQUMsSUFBQUMsSUFBQUUsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsV0FBQUMsS0NjcUIsK0NBQXlDO0FBQUEsWUFBQUMsS0FBQUM7QUFBQUEsSUFFakQseUJBQTJCLGdDQUF1QjtBQUFBO0FBQUEsWUFBQUMsUUFBQUQsR0FDL0MsOEJBQWtCO0FBQUEsWUFBQUUsT0FBQUYsR0FDbkIsNEJBQWM7QUFBQSxZQUFBRyw2QkFBQUg7QUFBQUE7QUFBQUEsSUFJdEI7QUFBQSxtQkFBYztBQUFBLFNBQUFJLFFBQ047QUFBQTtBQUFBO0FBQUEsTUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtDQUdDLDZCQUF5QjtBQUFBLFNBQ2hEO0FBQUEsU0FBc0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FKQTtBQUFBLE1BQ007QUFBQTtBQUFBO0FBQUEsS0FLdkI7QUFBQTtBQUFBLEdBQ0Q7QUFBQSxZQUFBQyxlQUFBQztBQUFBQTtBQUFBQTtBQUFBQSxLQUtXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUUwQjtBQUFBO0FBQUEsSUFDdEM7QUFBQSxHQUFLO0FBQUEsWUFBQUMsY0FBQUM7QUFBQUEsSUFHSCxzQkFBb0I7QUFBQTtBQUFBO0FBQUEsS0FBSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FDYTtBQUFBO0FBQUEsSUFDL0I7QUFBQSxHQUZrQjtBQUFBLFlBQUFDLFlBQUFUO0FBQUFBLElBU3pCO0FBQUEsUUFBQVUsTUFDVTtBQUFBLElBRUw7QUFBQTtBQUFBLE1BQWM7QUFBQTtBQUFBLFNBQUFGLElBQ1Q7QUFBQSxLQUNSO0FBQUEsS0FBUyxhQUNPLHVDQTRCVjtBQUFBLEtBM0JEO0FBQUEsTUFDQTtBQUFBLE9BQWM7QUFBQTtBQUFBLFVBQUFHLE1BQ1A7QUFBQSxNQUNWO0FBQUEsTUFBUztBQUFBLE9BS0M7QUFBQTtBQUFBLE9BTEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1FO0FBQUE7QUFBQSxZQVdEO0FBQUE7QUFBQSxZQWZBO0FBQUE7QUFBQSxZQUVBO0FBQUE7QUFBQSxZQURBO0FBQUE7QUFBQSxZQU9QO0FBQUEsYUFBMEI7QUFBQTtBQUFBLGdCQUFBQyxNQUNoQjtBQUFBLFlBQ1Y7QUFBQTtBQUFBLGFBQUFDO0FBQUFBLGVBQ1csMkJBQWM7QUFBQSxhQUFBQyxPQUNkO0FBQUEsaUJBQ2lCO0FBQUEsWUFBNUI7QUFBQSxvQkFDc0I7QUFBQSxZQUF0QjtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQVRPO0FBQUEsT0FXRjtBQUFBLE9BQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFHbEM7QUFBQTtBQUFBLEdBR0k7QUFBQSxZQUFBQyxZQUFBZjtBQUFBQSxRQUFBZ0IsUUFHUjtBQUFBLElBQ0E7QUFBQSx1QkFBdUIsY0FBZSw4QkFBaUI7QUFBQSxLQUN2RCxrRUFBc0M7QUFBQTtBQUFBO0FBQUEsWUFBQUMsSUFBQUMsR0FBQUM7QUFBQUE7QUFBQUEsS0FBQUEsTUFHMEI7QUFBQSxLQUFBRCxNQUFSO0FBQUEsS0FBQUEsTUFBTztBQUFBLEtBQUFDLE1BQUE7QUFBQTtBQUFBLEtBQS9DLGNBQWM7QUFBQSxTQUFBQSxNQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBa0M7QUFBQSxZQUFBQyxTQUFBQyxHQUFBQztBQUFBQSxJQUd2RTtBQUFBLEtBQWM7QUFBQTtBQUFBO0FBQUEsS0FBQUMsT0FDZDtBQUFBLFNBQ29CO0FBQUEsS0FBQUMsSUFBWixJQUFJO0FBQUEsS0FBQUMsS0FDWjtBQUFBLEtBQUFDLEtBQUE7QUFBQSxJQUNBLHdDQUFnRDtBQUFBO0FBQUEsT0FBQUMsTURuR2xEO0FBQUEsWUFBQUMsV0FBQUM7QUFBQUE7QUFBQUEsS0FBQUMsVUN1R2dCO0FBQUEsU0FDQTtBQUFBLEtBQUFDLFVBQXVCLEtBQUk7QUFBQSxJQUN6QztBQUFBLFNBQUEzQixVQUtRO0FBQUEsS0FBNEI7QUFBQTtBQUFBO0FBQUEsV0FBQTRCLFFBQUEsTUFBQUMsUUFBQTtBQUFBLE9BQ0Q7QUFBQTtBQUFBLFNBQUE3QixVQUN4QjtBQUFBLFNBQUFBLFVBQXlCO0FBQUEsUUFBdUI7QUFBQSxhQUFBa0IsSUFBQSxZQUFBRCxNQUFBO0FBQUEsU0FDbEMsWUFBVSx1Q0FBQWEsS0FBeUI7QUFBQTtBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBQTlCLFVBRUY7QUFBQSxLQUFxQixnQkFBQWlCLE1BQUEsWUFDZjtBQUFBLFNBQUFqQixVQUdKO0FBQUEsS0FBdUIsY0FFbkI7QUFBQSxTQUFBaUIsTUFGbUI7QUFBQSxLQUNqQjtBQUFBO0FBQUEsUUFBQWpCLFFBZlY7QUFBQSxJQUF1QixZQUVuQjtBQUFBLFFBQUFpQixJQUZtQjtBQUFBLElBQ2pCO0FBQUEsR0FlTTtBQUFBO0FBQUEsSUFBQWMsVUQxSHRCO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQWhEO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBLFVDNkhFO0FBQUE7QUFBQSxXQUNHO0FBQUEsZUFBQUksUUFLRztBQUFBLFdBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBSUgsMEJBQWU7QUFBQTtBQUFBLGNBR3BCO0FBQUE7QUFBQSwwQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQXNCcEI7QUFBQTtBQUFBLDRCQUEyQjtBQUFBO0FBQUEsZUFBVjtBQUFBO0FBQUEsb0JBQ1MsY0FBZTtBQUFBO0FBQUEsbUJBQUFlLE1BRTNDO0FBQUEsZUFDUjtBQUFBLGVBQVc7QUFBQSxlQUFTO0FBQUE7QUFBQSxjQUVYO0FBQUEsY0FBcUI7QUFBQSxjQUU5QjtBQUFBLGNBQVc7QUFBQSxjQUNKO0FBQUE7QUFBQTtBQUFBLGNBakNDLFlBQWlDLHlDQUFZO0FBQUE7QUFBQSxjQUo5Qyx1QkF3Rko7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUE1Qkg7QUFBQSxVQUFTLHlCQUNXO0FBQUEsV0FDbEI7QUFBQSxXQUMrQix5Q0FBWTtBQUFBO0FBQUEsVUFFbkIseUNBQVk7QUFBQTtBQUFBLFNBMUI3QjtBQUFBLDJDQUFxQjtBQUFBLFVBRTlCO0FBQUEsVUFBVztBQUFBLFVBQ1cseUNBQVk7QUFBQTtBQUFBLFNBQ3pCO0FBQUEsU0FBcUI7QUFBQSxTQUU5QjtBQUFBLFNBQVc7QUFBQSxhQUFBVCxNQUNEO0FBQUEsU0FFTDtBQUFBO0FBQUEsV0FBYztBQUFBO0FBQUEsY0FBQUYsTUFDVDtBQUFBLFVBQ1I7QUFBQSxVQUFTLGdCQUVBLDRDQUFxQjtBQUFBLFVBRTVCO0FBQUE7QUFBQTtBQUFBLFFBOUNKO0FBQUEsUUFBVztBQUFBLFFBQ1I7QUFBQSxTQUFjO0FBQUE7QUFBQSxZQUFBeUMsYUFDakI7QUFBQSxRQUVrQixLQUFmLGVBQWU7QUFBQSxhQUFBekMsTUFXUjtBQUFBLFNBQ1I7QUFBQSxTQUFTO0FBQUE7QUFBQSxRQVpvQjtBQUFBO0FBQUEsU0FDUSxLQUFkLGNBQWM7QUFBQSxTQUFpQjtBQUFBO0FBQUE7QUFBQSxTQUFBMEM7QUFBQUEsV0FDM0M7QUFBQTtBQUFBLFNBQUFDLFVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQUMsS0FFOEI7QUFBQSxVQUY5Qix3QkFBQUEsS0FFNEM7QUFBQSxVQUY1QywwQkFBQUEsS0FFZ0I7QUFBQSxVQUZoQiwwQkFBQUEsS0FJa0M7QUFBQSxVQUpsQyx5QkFBQUEsS0FDZTtBQUFBLFVBRGYsdUJBQUFBLEtBQytDO0FBQUE7QUFBQTtBQUFBLFVBRC9DLDJCQUFBQSxLQUlpQjtBQUFBLFVBSmpCLDZCQUFBQSxLQUdzRDtBQUFBLFVBSHRELDBCQUFBQSxLQUdpQztBQUFBLFVBSGpDLDBCQUFBQSxLQUdnQjtBQUFBLFVBSGhCLDJCQUFBQSxLQUNpQztBQUFBO0FBQUEsYUFBQUEsS0FJZDtBQUFBO0FBQUEsUUFDaEI7QUFBQTtBQUFBLE9BNUJQLGdCQVFTLHVCQXVGSjtBQUFBO0FBQUE7QUFBQSxNQS9GTCxpQkFZUyxZQUFzQyx5Q0FBWTtBQUFBLE1BWjNELGtCQVNTLG1CQXNGSjtBQUFBO0FBQUEsU0FBQUMsUUFuQlc7QUFBQSxLQUNDO0FBQUEsTUFRYix3QkFFYTtBQUFBLE1BRmIsc0JBR1c7QUFBQSxNQUhYLHVCQUNZO0FBQUEsTUFHSDtBQUFBLE9BQ1A7QUFBQSxlQUFRO0FBQUEsaUNBQVIsc0NBQXNEO0FBQUEsVUFBQWpELFVBRWhEO0FBQUEsTUFBZ0IsY0FFWjtBQUFBLFVBQUFpQixJQUZZO0FBQUEsTUFDVjtBQUFBO0FBQUEsYUFkWixrQkFGaUI7QUFBQSxLQUVqQjtBQUFBLFVBQUFpQyxRQUFBLEdBQUFDLFNBQUE7QUFBQTtBQUFBLFVBQUFELE1BQUEsR0FBQUMsU0FBQSxHQUFBQyxNQUFBO0FBQUE7QUFBQSxPQUNLO0FBQUEsWUFBQUQsU0FBc0IsZ0JBQUFELFFBQVksR0FBQUMsU0FBQTtBQUFBO0FBQUEsWUFBQUQsUUFBZSxhQUFBQSxRQUFBLE9BQUFDLFNBQUE7QUFBQSxlQUF4QztBQUFBLHlCQUFBRCxRQUFBLE9BQUFDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUdaO0FBQUE7QUFBQSxVQURpQjtBQUFBLEtBQ2M7QUFBQTtBQUFBLFFBQUFBLE9BbEZ0QjtBQUFBLElBRWY7QUFBQTtBQUFBLGVBQUEvQztBQUFBQSxXQUFBLElBQXNCO0FBQUE7QUFBQSxNQUEwQjtBQUFBO0FBQUE7QUFBQSxTQUM3QjtBQUFBO0FBQUE7QUFBQSxJQUEwRTtBQUFBLEdBMkYxRjtBQUFBLE9BQUFpRCx3QkQ1TlA7QUFBQSxZQUFBQyxVQUFBMUQsR0FBQTJEO0FBQUFBLElDK05FO0FBQUEsUUFBQUMsUUFHRTtBQUFBO0FBQUE7QUFBQSxLQUNHO0FBQUEsTUFBYztBQUFBO0FBQUEsS0FDZDtBQUFBLE1BQ0Q7QUFBQSxNQUNLLDZDQUFpQjtBQUFBO0FBQUEsS0FHdEIsWUFEUztBQUFBO0FBQUEsR0FHTDtBQUFBLE9BQUFDLHdCRDNPVjtBQUFBLFlBQUFDLFVBQUE5RDtBQUFBQSxJQzhPRTtBQUFBLFFBQUFzQixJQUNRO0FBQUEsSUFFTjtBQUFBO0FBQUEsS0FDRztBQUFBLE1BQWM7QUFBQTtBQUFBLEtBQ2Qsd0NBQ0QsWUFBUztBQUFBLFNBQUF5QyxNQUdDO0FBQUEsS0FDVjtBQUFBLFVBQUFDLFVBQUEsUUFBQUMsSUFNUTtBQUFBLE1BQ1I7QUFBQTtBQUFBO0FBQUEsS0FIUztBQUFBO0FBQUE7QUFBQTtBQUFBLEdBTUw7QUFBQSxZQUFBQyxVQUFBcEU7QUFBQUEsUUFBQUUsSUFLQSxpQkFBQW1FLFVBR047QUFBQTtBQUFBO0FBQUEsS0FDRyxjQUFjLDBDQUtYO0FBQUEsS0FGSixjQURXO0FBQUE7QUFBQSxHQUdQO0FBQUEsWUFBQUMsV0FBQUM7QUFBQUE7QUFBQUEsS0FBQUMsS0FJQztBQUFBLEtBQUFqRCxJQUNEO0FBQUEsS0FBQXZCLE1BQ0U7QUFBQSxJQUNWO0FBQUEsSUFBVyxxQkFDRTtBQUFBO0FBQUEsWUFBQXlFLGVBQUF2RTtBQUFBQSxRQUFBNEQsUUFhUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBQXhELFFBQ1E7QUFBQSxNQUFhO0FBQUE7QUFBQTtBQUFBLFlBQUFZLFVBU3RCO0FBQUEsUUFDQTtBQUFBO0FBQUEsU0FBdUI7QUFBQSxTQUF5QjtBQUFBO0FBQUE7QUFBQSxTQUFBd0Q7QUFBQUEsV0FDckM7QUFBQSxRQUNYLGdCQUFzQjtBQUFBO0FBQUEsU0FBQUE7QUFBQUEsV0FFdEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUE2QztBQUFBLGtCQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BakJzQjtBQUFBLFVBQUF4RCxRQUV0QjtBQUFBLE1BQ0E7QUFBQTtBQUFBLFlBQUFSLElBQWdDLGlDQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQy9DO0FBQUE7QUFBQSxPQUdGO0FBQUE7QUFBQSxhQURvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FjbkIsd0NBQ1U7QUFBQTtBQUFBO0FBQUE7QUFBQSxRRDNUakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFpRSxTQUFBekU7QUFBQUEsUUFBQTBFLFNDK1RlO0FBQUEsSUFDVjtBQUFBLEtBQ0Q7QUFBQTtBQUFBLFFBQUExRCxRQUNGLE1BQUFaLFFBQ007QUFBQSxJQUFhO0FBQUE7QUFBQSxNQWFqQjtBQUFBO0FBQUEsT0FBQXVFLFFBQ1k7QUFBQSxPQUFBQyxVQUNaO0FBQUEsT0FBQXZCLFFBQ1k7QUFBQSxPQUFBd0IsUUFDMkI7QUFBQSxNQUN2QztBQUFBO0FBQUEsS0FsQmlCLGtCQUdWLHNDQXlGMEQ7QUFBQTtBQUFBO0FBQUEsS0E1RmhEO0FBQUEsc0JBRVYsOENBMEYwRDtBQUFBO0FBQUE7QUFBQSxNQTVGaEQ7QUFBQTtBQUFBO0FBQUEsVUFBQUEsVUFtRUU7QUFBQSxVQUFBRCxZQUNuQjtBQUFBLFVBQUF2QjtBQUFBQSxZQUNZO0FBQUEsU0FDWjtBQUFBO0FBQUEsU0F6Q1M7QUFBQSwyQ0FBcUI7QUFBQSxVQUU5QjtBQUFBLFVBQVc7QUFBQSxVQUNNO0FBQUE7QUFBQSxXQUFBeUIsT0FFTjtBQUFBLFdBQUFDLGtCQUNXO0FBQUEsVUFJdEI7QUFBQTtBQUFBLGFBQ2dCO0FBQUE7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQ0E7QUFBQTtBQUFBO0FBQUEsU0FDUDtBQUFBLDJDQUFxQjtBQUFBLFVBQzlCO0FBQUEsVUFBVztBQUFBO0FBQUEsV0FBQUosVUFDQztBQUFBLFdBQUFDLFlBQ1o7QUFBQSxXQUFBdkI7QUFBQUEsYUFDWTtBQUFBLFdBQUF3QixVQUNzQjtBQUFBLFVBQ2xDO0FBQUE7QUFBQSxTQUNTO0FBQUE7QUFBQSxzQkFBcUI7QUFBQSxVQUU5QjtBQUFBLFVBQVc7QUFBQSxjQUFBbkUsTUFDRDtBQUFBLFVBRUw7QUFBQTtBQUFBLFlBQWM7QUFBQTtBQUFBLGVBQUFGLElBQ1Q7QUFBQSxXQUNSO0FBQUEsV0FBUztBQUFBO0FBQUEsYUFBQW9FLFlBSU47QUFBQSxhQUFBdkI7QUFBQUEsZUFFTztBQUFBO0FBQUEsWUFDNkM7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQ0FBcUI7QUFBQTtBQUFBLFdBTGpFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQXJEYjtBQUFBO0FBQUEsVUFBQXNCLFVBQ1k7QUFBQSxVQUFBQyxZQUNaO0FBQUEsVUFBQXZCO0FBQUFBLFlBQ1k7QUFBQSxVQUFBd0IsVUFDc0I7QUFBQSxTQUNsQztBQUFBO0FBQUEsU0FWTyw4Q0EyRjBEO0FBQUE7QUFBQSxTQXhFakU7QUFBQTtBQUFBLGNBQVM7QUFBQSxVQUFBRyxTQUFBLFdBQ3FCO0FBQUEsU0FDOUIsV0FBZTtBQUFBO0FBQUEsVUFBQUwsVUFDSDtBQUFBLFVBQUFDLFlBQ1o7QUFBQSxVQUFBdkI7QUFBQUEsWUFDWTtBQUFBLFVBQUE0QixRQUNaO0FBQUEsVUFBQUo7QUFBQUEsWUFDOEI7QUFBQSxTQUM5QjtBQUFBO0FBQUEsUUFBQUksTUE2Q1U7QUFBQSxJQUNDO0FBQUEsYUFFVCxrQkFGZTtBQUFBLEtBRWY7QUFBQSxVQUFBM0IsUUFBQSxHQUFBQyxTQUFBO0FBQUE7QUFBQSxVQUFBRCxNQUFBLEdBQUFDLE9BQUEsR0FBQUMsSUFBQTtBQUFBO0FBQUEsT0FDSztBQUFBLFlBQUFELFNBQXNCLGNBQUFELFFBQVksR0FBQUMsU0FBQTtBQUFBO0FBQUEsWUFBQUQsUUFBZSxhQUFBQSxRQUFBLE9BQUFDLFNBQUE7QUFBQSxlQUF4QztBQUFBLHVCQUFBRCxRQUFBLE9BQUFDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUdaO0FBQUE7QUFBQSxVQURpQjtBQUFBLEtBQ2M7QUFBQTtBQUFBO0FBQUEsS0FBQXFCLFlBRW5DO0FBQUEsS0FBQXZCO0FBQUFBLE9BQ1k7QUFBQSxJQUNaO0FBQUE7QUFBQTtBQUFBLE9BSVc7QUFBQTtBQUFBLFNBQUF3QjtBQUFBQSxXQUFtRTtBQUFBLFlBQTFDO0FBQUEsNEJBQVI7QUFBQTtBQUFBLFlBQUF6RSxVQUNiO0FBQUEsUUFBYztBQUFBLGFBQUFpQixNQUFBLFlBQUF3RCxVQUFnQjtBQUFBO0FBQUEsYUFBQUEsVUFBWTtBQUFBO0FBQUE7QUFBQSxXQUFBQSxVQUx6RDtBQUFBO0FBQUEsVUFBQUEsVUFHYTtBQUFBO0FBQUEsU0FBQUEsVUFIYjtBQUFBLElBT0E7QUFBQSxHQUNpRTtBQUFBLFlBQUFLLGNBQUFsRixHQUFBMEUsUUFBQTFELE9BQUFtRSxRQUFBQztBQUFBQSxJQUduRTtBQUFBLFFBQUFDLFdBR3FCO0FBQUE7QUFBQSxTQUFBQyxlQUFBO0FBQUEsS0FDaEI7QUFBQSxNQUFjO0FBQUE7QUFBQSxLQUNkO0FBQUEsTUFDRDtBQUFBLFVBQUFWLFVBQVM7QUFBQSxNQUdZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtDQUFrQjtBQUFBO0FBQUEsU0FBQVcsUUFNM0I7QUFBQSxLQUNaO0FBQUE7QUFBQTtBQUFBLGFBQ21EO0FBQUE7QUFBQTtBQUFBLFNBQUFDO0FBQUFBLFdBQStCLElBQS9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBQUE7QUFBQUEsV0FBK0IsSUFBL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBLFNBQUFBO0FBQUFBLFdBQStCLElBQS9CO0FBQUE7QUFBQSxLQUluRDtBQUFBO0FBQUEsR0FHQztBQUFBLFlBQUFDLGNBQUF6RixHQUFBMEUsUUFBQTFEO0FBQUFBLElBR0w7QUFBQSxRQUFBcUUsV0FHcUI7QUFBQTtBQUFBLFNBQUFDLGVBQUE7QUFBQSxLQUNoQjtBQUFBLE1BQWM7QUFBQTtBQUFBLEtBQ2Q7QUFBQSxNQUNEO0FBQUEsVUFBQVYsVUFBUztBQUFBLE1BRXFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0NBQWtCO0FBQUE7QUFBQSxTQUFBVyxRQUlwRDtBQUFBLEtBQ1o7QUFBQTtBQUFBO0FBQUEsYUFDbUQ7QUFBQTtBQUFBO0FBQUEsU0FBQUM7QUFBQUEsV0FBK0IsSUFBL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFBQTtBQUFBQSxXQUErQixJQUEvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQ0E7QUFBQTtBQUFBO0FBQUEsU0FBQUE7QUFBQUEsV0FBK0IsSUFBL0I7QUFBQTtBQUFBLEtBR25EO0FBQUE7QUFBQSxHQUdDO0FBQUEsWUFBQUUsZUFBQTFGLEdBSUwsa0JBQVU7QUFBQSxZQUFBMkYsY0FBQTdGO0FBQUFBLFFBQUFFLElBVUYsaUJBQUFtRSxVQUdPO0FBQUE7QUFBQSxTQUFBTyxTQUFBO0FBQUEsS0FDVixjQUNTLHVEQUFpQjtBQUFBLFNBQUFrQixPQUVoQjtBQUFBLEtBRVg7QUFBQTtBQUFBO0FBQUEsYUFDbUQ7QUFBQTtBQUFBO0FBQUEsU0FBQUM7QUFBQUEsV0FBeUIsSUFBekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFBQTtBQUFBQSxXQUF5QixJQUF6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQ0E7QUFBQTtBQUFBO0FBQUEsU0FBQUE7QUFBQUEsV0FBeUIsSUFBekI7QUFBQTtBQUFBLEtBR25EO0FBQUE7QUFBQSxHQUdDO0FBQUEsWUFBQUMsZUFBQXpCO0FBQUFBO0FBQUFBLEtBQUFDLEtBSUk7QUFBQSxLQUFBakQsSUFDRDtBQUFBLEtBQUF2QixNQUNFO0FBQUEsSUFDVjtBQUFBLElBQVcseUJBQ007QUFBQTtBQUFBLEdEN2ZuQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQyNTgxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9yc2EubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogUlNBU1NBLVBLQ1MxLXYxXzUgdmVyaWZpY2F0aW9uIHdpdGggU0hBLTI1NiDigJQgcHVyZSBPQ2FtbCxcbiAgICBXQVNNLXNhZmUuIFNlbGYtY29udGFpbmVkIG1pbmltYWwgYmlnbnVtIChtb2RleHAgb25seSksIGEgdGlueVxuICAgIERFUiByZWFkZXIgZm9yIFN1YmplY3RQdWJsaWNLZXlJbmZvLCBhbmQgdGhlIGZpeGVkIFNIQS0yNTZcbiAgICBEaWdlc3RJbmZvIHByZWZpeC4gVmVyaWZ5IG9ubHkgb24gcHVibGljIGRhdGEg4oCUIGNvbnN0YW50IHRpbWVcbiAgICBub3QgcmVxdWlyZWQuIFJlZmVyZW5jZTogUkZDIDgwMTcgwqc4LjIuMiwgwqc5LjIuIE5vIGRlcHMuICopXG5cbigqIC0tLS0gTWluaW1hbCB1bnNpZ25lZCBiaWdudW06IGludCBhcnJheSwgbGl0dGxlLWVuZGlhbiwgYmFzZSAyXjI2IC0tLS0gKilcblxubGV0IGJpdHMgPSAyNlxubGV0IGJhc2UgPSAxIGxzbCBiaXRzXG5sZXQgbWFzayA9IGJhc2UgLSAxXG5cbnR5cGUgYm4gPSBpbnQgYXJyYXlcblxubGV0IG5vcm0gYSA9XG4gIGxldCBuID0gcmVmIChBcnJheS5sZW5ndGggYSkgaW5cbiAgd2hpbGUgIW4gPiAxICYmIGEuKCFuIC0gMSkgPSAwIGRvIGRlY3IgbiBkb25lO1xuICBpZiAhbiA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gYSBlbHNlIEFycmF5LnN1YiBhIDAgIW5cblxubGV0IGJ6ZXJvIDogYm4gPSBbfCAwIHxdXG5sZXQgaXNfemVybyBhID0gQXJyYXkubGVuZ3RoIGEgPSAxICYmIGEuKDApID0gMFxuXG5sZXQgY21wIGEgYiA9XG4gIGxldCBhID0gbm9ybSBhIGFuZCBiID0gbm9ybSBiIGluXG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW4gY29tcGFyZSBsYSBsYlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSByZWYgMCBhbmQgaSA9IHJlZiAobGEgLSAxKSBpblxuICAgIHdoaWxlICFyID0gMCAmJiAhaSA+PSAwIGRvXG4gICAgICBpZiBhLighaSkgPD4gYi4oIWkpIHRoZW4gciA6PSBjb21wYXJlIGEuKCFpKSBiLighaSk7XG4gICAgICBkZWNyIGlcbiAgICBkb25lOyAhclxuICBlbmRcblxubGV0IGFkZCBhIGIgPVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBhbmQgbGIgPSBBcnJheS5sZW5ndGggYiBpblxuICBsZXQgbiA9IChtYXggbGEgbGIpICsgMSBpblxuICBsZXQgciA9IEFycmF5Lm1ha2UgbiAwIGFuZCBjYXJyeSA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIGxldCBzID0gIWNhcnJ5ICsgKGlmIGkgPCBsYSB0aGVuIGEuKGkpIGVsc2UgMClcbiAgICAgICAgICAgICsgKGlmIGkgPCBsYiB0aGVuIGIuKGkpIGVsc2UgMCkgaW5cbiAgICByLihpKSA8LSBzIGxhbmQgbWFzazsgY2FycnkgOj0gcyBsc3IgYml0c1xuICBkb25lO1xuICBub3JtIHJcblxubGV0IHN1YiBhIGIgPSAgICAgICAgICAgICAgICAgICAgICAgKCogcmVxdWlyZXMgYSA+PSBiICopXG4gIGxldCBsYSA9IEFycmF5Lmxlbmd0aCBhIGFuZCBsYiA9IEFycmF5Lmxlbmd0aCBiIGluXG4gIGxldCByID0gQXJyYXkubWFrZSBsYSAwIGFuZCBib3Jyb3cgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGEgLSAxIGRvXG4gICAgbGV0IHMgPSBhLihpKSAtICFib3Jyb3cgLSAoaWYgaSA8IGxiIHRoZW4gYi4oaSkgZWxzZSAwKSBpblxuICAgIGlmIHMgPCAwIHRoZW4gKHIuKGkpIDwtIHMgKyBiYXNlOyBib3Jyb3cgOj0gMSlcbiAgICBlbHNlIChyLihpKSA8LSBzOyBib3Jyb3cgOj0gMClcbiAgZG9uZTtcbiAgbm9ybSByXG5cbmxldCBtdWwgYSBiID1cbiAgbGV0IGxhID0gQXJyYXkubGVuZ3RoIGEgYW5kIGxiID0gQXJyYXkubGVuZ3RoIGIgaW5cbiAgbGV0IHIgPSBBcnJheS5tYWtlIChsYSArIGxiKSAwIGluXG4gIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICBsZXQgY2FycnkgPSByZWYgMCBpblxuICAgIGZvciBqID0gMCB0byBsYiAtIDEgZG9cbiAgICAgIGxldCBzID0gci4oaSArIGopICsgYS4oaSkgKiBiLihqKSArICFjYXJyeSBpblxuICAgICAgci4oaSArIGopIDwtIHMgbGFuZCBtYXNrOyBjYXJyeSA6PSBzIGxzciBiaXRzXG4gICAgZG9uZTtcbiAgICByLihpICsgbGIpIDwtIHIuKGkgKyBsYikgKyAhY2FycnlcbiAgZG9uZTtcbiAgbm9ybSByXG5cbmxldCBudW1iaXRzIGEgPVxuICBsZXQgYSA9IG5vcm0gYSBpblxuICBsZXQgaGkgPSBBcnJheS5sZW5ndGggYSAtIDEgaW5cbiAgaWYgaGkgPSAwICYmIGEuKDApID0gMCB0aGVuIDBcbiAgZWxzZSBiZWdpblxuICAgIGxldCBiID0gcmVmIDAgYW5kIHYgPSByZWYgYS4oaGkpIGluXG4gICAgd2hpbGUgIXYgPiAwIGRvIGluY3IgYjsgdiA6PSAhdiBsc3IgMSBkb25lO1xuICAgIGhpICogYml0cyArICFiXG4gIGVuZFxuXG5sZXQgYml0IGEgaSA9XG4gIGxldCBsaW1iID0gaSAvIGJpdHMgYW5kIG9mZiA9IGkgbW9kIGJpdHMgaW5cbiAgaWYgbGltYiA+PSBBcnJheS5sZW5ndGggYSB0aGVuIDAgZWxzZSAoYS4obGltYikgbHNyIG9mZikgbGFuZCAxXG5cbmxldCBibl9tb2QgYSBtID0gICAgICAgICAgICAgICAgICAgICgqIGJpbmFyeSBsb25nIGRpdmlzaW9uLCBtID4gMCAqKVxuICBpZiBjbXAgYSBtIDwgMCB0aGVuIG5vcm0gYVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSByZWYgYnplcm8gaW5cbiAgICBmb3IgaSA9IG51bWJpdHMgYSAtIDEgZG93bnRvIDAgZG9cbiAgICAgIHIgOj0gYWRkICFyICFyO1xuICAgICAgaWYgYml0IGEgaSA9IDEgdGhlbiByIDo9IGFkZCAhciBbfCAxIHxdO1xuICAgICAgaWYgY21wICFyIG0gPj0gMCB0aGVuIHIgOj0gc3ViICFyIG1cbiAgICBkb25lO1xuICAgICFyXG4gIGVuZFxuXG5sZXQgcG93bW9kIGIwIGUgbSA9XG4gIGxldCByZXN1bHQgPSByZWYgW3wgMSB8XSBhbmQgYiA9IHJlZiAoYm5fbW9kIGIwIG0pIGluXG4gIGZvciBpID0gMCB0byBudW1iaXRzIGUgLSAxIGRvXG4gICAgaWYgYml0IGUgaSA9IDEgdGhlbiByZXN1bHQgOj0gYm5fbW9kIChtdWwgIXJlc3VsdCAhYikgbTtcbiAgICBiIDo9IGJuX21vZCAobXVsICFiICFiKSBtXG4gIGRvbmU7XG4gICFyZXN1bHRcblxubGV0IG9mX2J5dGVzX2JlIChzIDogc3RyaW5nKSA6IGJuID1cbiAgbGV0IGFjYyA9IHJlZiBiemVybyBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIGFjYyA6PSBhZGQgKG11bCAhYWNjIFt8IDI1NiB8XSkgW3wgQ2hhci5jb2RlIHMuW2ldIHxdXG4gIGRvbmU7XG4gICFhY2NcblxubGV0IGRpdl9zbWFsbCBhIGQgPVxuICBsZXQgbGEgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcSA9IEFycmF5Lm1ha2UgbGEgMCBhbmQgcmVtID0gcmVmIDAgaW5cbiAgZm9yIGkgPSBsYSAtIDEgZG93bnRvIDAgZG9cbiAgICBsZXQgY3VyID0gKCFyZW0gbHNsIGJpdHMpIGxvciBhLihpKSBpblxuICAgIHEuKGkpIDwtIGN1ciAvIGQ7IHJlbSA6PSBjdXIgbW9kIGRcbiAgZG9uZTtcbiAgbm9ybSBxXG5cbmxldCB0b19ieXRlc19iZSAoYSA6IGJuKSAobiA6IGludCkgOiBzdHJpbmcgPVxuICBsZXQgYiA9IEJ5dGVzLm1ha2UgbiAnXFwwMDAnIGluXG4gIGxldCBjdXIgPSByZWYgKG5vcm0gYSkgaW5cbiAgZm9yIGkgPSBuIC0gMSBkb3dudG8gMCBkb1xuICAgIGxldCBxID0gZGl2X3NtYWxsICFjdXIgMjU2IGluXG4gICAgbGV0IHIgPVxuICAgICAgbGV0IGQgPSBzdWIgIWN1ciAobXVsIHEgW3wgMjU2IHxdKSBpblxuICAgICAgaWYgaXNfemVybyBkIHRoZW4gMCBlbHNlIGQuKDApXG4gICAgaW5cbiAgICBCeXRlcy5zZXQgYiBpIChDaGFyLmNociByKTtcbiAgICBjdXIgOj0gcVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJcblxuKCogLS0tLSBNaW5pbWFsIERFUiByZWFkZXIgKGZvciBTdWJqZWN0UHVibGljS2V5SW5mbykgLS0tLSAqKVxuXG5leGNlcHRpb24gRGVyIG9mIHN0cmluZ1xuXG4oKiBSZXR1cm5zICh0YWcsIGNvbnRlbnRfc3RhcnQsIGNvbnRlbnRfbGVuLCBuZXh0KS4gKilcbmxldCBkZXJfdGx2IHMgcG9zID1cbiAgaWYgcG9zICsgMiA+IFN0cmluZy5sZW5ndGggcyB0aGVuIHJhaXNlIChEZXIgXCJzaG9ydFwiKTtcbiAgbGV0IHRhZyA9IENoYXIuY29kZSBzLltwb3NdIGluXG4gIGxldCBsMCA9IENoYXIuY29kZSBzLltwb3MgKyAxXSBpblxuICBsZXQgbGVuLCBoZHIgPVxuICAgIGlmIGwwIDwgMHg4MCB0aGVuIGwwLCAyXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IG5iID0gbDAgbGFuZCAweDdmIGluXG4gICAgICBpZiBwb3MgKyAyICsgbmIgPiBTdHJpbmcubGVuZ3RoIHMgdGhlbiByYWlzZSAoRGVyIFwic2hvcnQgbGVuXCIpO1xuICAgICAgbGV0IHYgPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIG5iIC0gMSBkb1xuICAgICAgICB2IDo9ICghdiBsc2wgOCkgbG9yIENoYXIuY29kZSBzLltwb3MgKyAyICsgaV1cbiAgICAgIGRvbmU7XG4gICAgICAhdiwgMiArIG5iXG4gICAgZW5kXG4gIGluXG4gICh0YWcsIHBvcyArIGhkciwgbGVuLCBwb3MgKyBoZHIgKyBsZW4pXG5cbigqIFNQS0kgREVSIC0+IChuLCBlKSBhcyBiaWdudW1zLiAqKVxubGV0IHBhcnNlX3Nwa2kgKGRlciA6IHN0cmluZykgOiBibiAqIGJuID1cbiAgbGV0IHRhZywgYywgX2wsIF8gPSBkZXJfdGx2IGRlciAwIGluXG4gIGlmIHRhZyA8PiAweDMwIHRoZW4gcmFpc2UgKERlciBcInNwa2k6IG91dGVyIG5vdCBTRVFVRU5DRVwiKTtcbiAgKCogQWxnb3JpdGhtSWRlbnRpZmllciBTRVFVRU5DRSDigJQgc2tpcC4gKilcbiAgbGV0IF8sIF8sIF8sIGFmdGVyX2FsZyA9IGRlcl90bHYgZGVyIGMgaW5cbiAgKCogQklUIFNUUklORy4gKilcbiAgbGV0IGJ0LCBiYywgYmwsIF8gPSBkZXJfdGx2IGRlciBhZnRlcl9hbGcgaW5cbiAgaWYgYnQgPD4gMHgwMyB0aGVuIHJhaXNlIChEZXIgXCJzcGtpOiBleHBlY3RlZCBCSVQgU1RSSU5HXCIpO1xuICAoKiBGaXJzdCBjb250ZW50IGJ5dGUgPSB1bnVzZWQgYml0cyAobXVzdCBiZSAwKS4gKilcbiAgbGV0IHJwa19zdGFydCA9IGJjICsgMSBpblxuICBpZ25vcmUgYmw7XG4gIGxldCBzdCwgc2MsIF8sIF8gPSBkZXJfdGx2IGRlciBycGtfc3RhcnQgaW5cbiAgaWYgc3QgPD4gMHgzMCB0aGVuIHJhaXNlIChEZXIgXCJzcGtpOiBSU0FQdWJsaWNLZXkgbm90IFNFUVVFTkNFXCIpO1xuICBsZXQgbnQsIG5jLCBubCwgYWZ0ZXJfbiA9IGRlcl90bHYgZGVyIHNjIGluXG4gIGlmIG50IDw+IDB4MDIgdGhlbiByYWlzZSAoRGVyIFwic3BraTogbW9kdWx1cyBub3QgSU5URUdFUlwiKTtcbiAgbGV0IGV0LCBlYywgZWwsIF8gPSBkZXJfdGx2IGRlciBhZnRlcl9uIGluXG4gIGlmIGV0IDw+IDB4MDIgdGhlbiByYWlzZSAoRGVyIFwic3BraTogZXhwb25lbnQgbm90IElOVEVHRVJcIik7XG4gIGxldCBuID0gb2ZfYnl0ZXNfYmUgKFN0cmluZy5zdWIgZGVyIG5jIG5sKSBpblxuICBsZXQgZSA9IG9mX2J5dGVzX2JlIChTdHJpbmcuc3ViIGRlciBlYyBlbCkgaW5cbiAgKG4sIGUpXG5cbigqIFNIQS0yNTYgRGlnZXN0SW5mbyBERVIgcHJlZml4IChSRkMgODAxNyDCpzkuMiBub3RlIDEpLiAqKVxubGV0IHNoYTI1Nl9kaWdlc3RpbmZvX3ByZWZpeCA9XG4gIFwiXFx4MzBcXHgzMVxceDMwXFx4MGRcXHgwNlxceDA5XFx4NjBcXHg4NlxceDQ4XFx4MDFcXHg2NVxceDAzXFx4MDRcXHgwMlxceDAxXFx4MDVcXHgwMFxceDA0XFx4MjBcIlxuXG5sZXQgdW5oZXggaCA9XG4gIGxldCBuID0gU3RyaW5nLmxlbmd0aCBoIC8gMiBpblxuICBsZXQgYiA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIEJ5dGVzLnNldCBiIGkgKENoYXIuY2hyIChpbnRfb2Zfc3RyaW5nIChcIjB4XCIgXiBTdHJpbmcuc3ViIGggKDIgKiBpKSAyKSkpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYlxuXG4oKiBSU0FTU0EtUEtDUzEtdjFfNSB2ZXJpZnkgd2l0aCBTSEEtMjU2LiBUb3RhbDogYW55IG1hbGZvcm1lZFxuICAgaW5wdXQgeWllbGRzIGZhbHNlIChjYWxsZXIgd3JhcHMsIGJ1dCBiZSBkZWZlbnNpdmUgaGVyZSB0b28pLiAqKVxubGV0IHZlcmlmeSB+c3BraSB+bXNnIH5zaWdfIDogYm9vbCA9XG4gIHRyeVxuICAgIGxldCBuLCBlID0gcGFyc2Vfc3BraSBzcGtpIGluXG4gICAgbGV0IGsgPSAobnVtYml0cyBuICsgNykgLyA4IGluXG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzaWdfIDw+IGsgdGhlbiBmYWxzZVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCBzID0gb2ZfYnl0ZXNfYmUgc2lnXyBpblxuICAgICAgaWYgY21wIHMgbiA+PSAwIHRoZW4gZmFsc2VcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IG0gPSBwb3dtb2QgcyBlIG4gaW5cbiAgICAgICAgbGV0IGVtID0gdG9fYnl0ZXNfYmUgbSBrIGluXG4gICAgICAgICgqIEVNID0gMHgwMCAwMSBGRi4uRkYgMDAgfHwgRGlnZXN0SW5mbyB8fCBIICopXG4gICAgICAgIGxldCBoID0gdW5oZXggKFN4X3NoYTIuc2hhMjU2X2hleCBtc2cpIGluXG4gICAgICAgIGxldCB0ID0gc2hhMjU2X2RpZ2VzdGluZm9fcHJlZml4IF4gaCBpblxuICAgICAgICBsZXQgdGxlbiA9IFN0cmluZy5sZW5ndGggdCBpblxuICAgICAgICBpZiBrIDwgdGxlbiArIDExIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgIGxldCBvayA9IHJlZiAoZW0uWzBdID0gJ1xceDAwJyAmJiBlbS5bMV0gPSAnXFx4MDEnKSBpblxuICAgICAgICAgIGxldCBwc19lbmQgPSBrIC0gdGxlbiAtIDEgaW5cbiAgICAgICAgICBmb3IgaSA9IDIgdG8gcHNfZW5kIC0gMSBkb1xuICAgICAgICAgICAgaWYgZW0uW2ldIDw+ICdcXHhmZicgdGhlbiBvayA6PSBmYWxzZVxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgaWYgZW0uW3BzX2VuZF0gPD4gJ1xceDAwJyB0aGVuIG9rIDo9IGZhbHNlO1xuICAgICAgICAgIGlmIFN0cmluZy5zdWIgZW0gKHBzX2VuZCArIDEpIHRsZW4gPD4gdCB0aGVuIG9rIDo9IGZhbHNlO1xuICAgICAgICAgICFva1xuICAgICAgICBlbmRcbiAgICAgIGVuZFxuICAgIGVuZFxuICB3aXRoIF8gLT4gZmFsc2VcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiZ2xvYmFsX2RhdGEiLCJTeF9zaGEyIiwiU3RkbGliIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0FycmF5Iiwibm9ybSIsImEiLCJuIiwiaXNfemVybyIsImNtcCIsImIiLCJsYSIsImxiIiwiaSIsInIiLCJhZGQiLCJjYXJyeSIsInMiLCJzdWIiLCJib3Jyb3ciLCJtdWwiLCJqIiwibnVtYml0cyIsImhpIiwidiIsImJpdCIsImxpbWIiLCJvZmYiLCJiemVybyIsImJuX21vZCIsIm0iLCJwb3dtb2QiLCJiMCIsImUiLCJyZXN1bHQiLCJvZl9ieXRlc19iZSIsImFjYyIsImRpdl9zbWFsbCIsImQiLCJxIiwicmVtIiwiY3VyIiwidG9fYnl0ZXNfYmUiLCJEZXIiLCJkZXJfdGx2IiwicG9zIiwidGFnIiwibDAiLCJuYiIsImhkciIsImxlbiIsInBhcnNlX3Nwa2kiLCJkZXIiLCJtYXRjaCIsImMiLCJhZnRlcl9hbGciLCJiYyIsImJ0IiwicnBrX3N0YXJ0Iiwic2MiLCJzdCIsImFmdGVyX24iLCJubCIsIm5jIiwibnQiLCJlbCIsImVjIiwiZXQiLCJ1bmhleCIsImgiLCJzaGEyNTZfZGlnZXN0aW5mb19wcmVmaXgiLCJ2ZXJpZnkiLCJzcGtpIiwibXNnIiwic2lnIiwiayIsImVtIiwidCIsInRsZW4iLCJwc19lbmQiLCJvayIsImV4biJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxr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QUE7QUFBQSxhQUFBQyxPQUFBO0FBQUE7QUFBQSxhQUFBQSxLQUFBLEdBQUFuRSxJQUFBO0FBQUE7QUFBQSxjQUFBbUUsT0FDSyw2Q0FBTTtBQUFBLDBCQUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQUFBLE9BRVI7QUFBQTtBQUFBLFdBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQUFDLEtBS0Q7QUFBQSxHQUFLO0FBQUEsR0QzTmpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDMwMjEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3NoYTMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogU0hBLTMgKFNIQTMtMjU2KSDigJQgcHVyZSBPQ2FtbCwgV0FTTS1zYWZlLlxuXG4gICAgS2VjY2FrLWZbMTYwMF0gcGVybXV0YXRpb24gKyBTSEEtMyBtdWx0aS1yYXRlIHBhZGRpbmcgKGRvbWFpbiBieXRlXG4gICAgMHgwNiwgTk9UIHRoZSBsZWdhY3kgS2VjY2FrIDB4MDEpLiBSZWZlcmVuY2U6IEZJUFMgMjAyLiBObyBkZXBzLiAqKVxuXG5sZXQgKCBeOiApID0gSW50NjQubG9neG9yXG5sZXQgKCAmOiApID0gSW50NjQubG9nYW5kXG5sZXQgbG5vdDY0ID0gSW50NjQubG9nbm90XG5cbmxldCByb3RsNjQgeCBuID1cbiAgaWYgbiA9IDAgdGhlbiB4XG4gIGVsc2VcbiAgICBJbnQ2NC5sb2dvciAoSW50NjQuc2hpZnRfbGVmdCB4IG4pIChJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIHggKDY0IC0gbikpXG5cbigqIEZJUFMgMjAyIFRhYmxlIDIg4oCUIM+BIHJvdGF0aW9uIG9mZnNldHMsIGluZGV4ZWQgbGFuZSA9IHggKyA1KnkuICopXG5sZXQgcmhvID0gW3xcbiAgIDA7ICAxOyA2MjsgMjg7IDI3O1xuICAzNjsgNDQ7ICA2OyA1NTsgMjA7XG4gICAzOyAxMDsgNDM7IDI1OyAzOTtcbiAgNDE7IDQ1OyAxNTsgMjE7ICA4O1xuICAxODsgIDI7IDYxOyA1NjsgMTQgfF1cblxuKCogRklQUyAyMDIgwqczLjIuNSDigJQgcm91bmQgY29uc3RhbnRzIFJDWzAuLjIzXSBmb3IgzrkuICopXG5sZXQgcmMgPSBbfFxuICAweDAwMDAwMDAwMDAwMDAwMDFMOyAweDAwMDAwMDAwMDAwMDgwODJMOyAweDgwMDAwMDAwMDAwMDgwOGFMO1xuICAweDgwMDAwMDAwODAwMDgwMDBMOyAweDAwMDAwMDAwMDAwMDgwOGJMOyAweDAwMDAwMDAwODAwMDAwMDFMO1xuICAweDgwMDAwMDAwODAwMDgwODFMOyAweDgwMDAwMDAwMDAwMDgwMDlMOyAweDAwMDAwMDAwMDAwMDAwOGFMO1xuICAweDAwMDAwMDAwMDAwMDAwODhMOyAweDAwMDAwMDAwODAwMDgwMDlMOyAweDAwMDAwMDAwODAwMDAwMGFMO1xuICAweDAwMDAwMDAwODAwMDgwOGJMOyAweDgwMDAwMDAwMDAwMDAwOGJMOyAweDgwMDAwMDAwMDAwMDgwODlMO1xuICAweDgwMDAwMDAwMDAwMDgwMDNMOyAweDgwMDAwMDAwMDAwMDgwMDJMOyAweDgwMDAwMDAwMDAwMDAwODBMO1xuICAweDAwMDAwMDAwMDAwMDgwMGFMOyAweDgwMDAwMDAwODAwMDAwMGFMOyAweDgwMDAwMDAwODAwMDgwODFMO1xuICAweDgwMDAwMDAwMDAwMDgwODBMOyAweDAwMDAwMDAwODAwMDAwMDFMOyAweDgwMDAwMDAwODAwMDgwMDhMIHxdXG5cbmxldCBrZWNjYWtfZiAoYSA6IGludDY0IGFycmF5KSA6IHVuaXQgPVxuICBsZXQgYyA9IEFycmF5Lm1ha2UgNSAwTCBhbmQgZCA9IEFycmF5Lm1ha2UgNSAwTCBpblxuICBsZXQgYiA9IEFycmF5Lm1ha2UgMjUgMEwgaW5cbiAgZm9yIHJvdW5kID0gMCB0byAyMyBkb1xuICAgICgqIM64ICopXG4gICAgZm9yIHggPSAwIHRvIDQgZG9cbiAgICAgIGMuKHgpIDwtIGEuKHgpIF46IGEuKHggKyA1KSBeOiBhLih4ICsgMTApXG4gICAgICAgICAgICAgICBeOiBhLih4ICsgMTUpIF46IGEuKHggKyAyMClcbiAgICBkb25lO1xuICAgIGZvciB4ID0gMCB0byA0IGRvXG4gICAgICBkLih4KSA8LSBjLigoeCArIDQpIG1vZCA1KSBeOiAocm90bDY0IGMuKCh4ICsgMSkgbW9kIDUpIDEpXG4gICAgZG9uZTtcbiAgICBmb3IgeCA9IDAgdG8gNCBkb1xuICAgICAgZm9yIHkgPSAwIHRvIDQgZG9cbiAgICAgICAgYS4oeCArIDUgKiB5KSA8LSBhLih4ICsgNSAqIHkpIF46IGQuKHgpXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICAoKiDPgSBhbmQgz4A6IEJbeSwgMngrM3ldID0gcm90bChBW3gseV0sIHJob1t4LHldKSAqKVxuICAgIGZvciB4ID0gMCB0byA0IGRvXG4gICAgICBmb3IgeSA9IDAgdG8gNCBkb1xuICAgICAgICBsZXQgbnggPSB5IGFuZCBueSA9ICgyICogeCArIDMgKiB5KSBtb2QgNSBpblxuICAgICAgICBiLihueCArIDUgKiBueSkgPC0gcm90bDY0IGEuKHggKyA1ICogeSkgcmhvLih4ICsgNSAqIHkpXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICAoKiDPhyAqKVxuICAgIGZvciB5ID0gMCB0byA0IGRvXG4gICAgICBmb3IgeCA9IDAgdG8gNCBkb1xuICAgICAgICBhLih4ICsgNSAqIHkpIDwtXG4gICAgICAgICAgYi4oeCArIDUgKiB5KVxuICAgICAgICAgIF46ICgobG5vdDY0IGIuKCh4ICsgMSkgbW9kIDUgKyA1ICogeSkpXG4gICAgICAgICAgICAgICY6IGIuKCh4ICsgMikgbW9kIDUgKyA1ICogeSkpXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICAoKiDOuSAqKVxuICAgIGEuKDApIDwtIGEuKDApIF46IHJjLihyb3VuZClcbiAgZG9uZVxuXG5sZXQgc2hhM18yNTZfaGV4IChtc2cgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IHJhdGUgPSAxMzYgKCogYnl0ZXM6ICgxNjAwIC0gMioyNTYpIC8gOCAqKSBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBtc2cgaW5cbiAgKCogcGFkMTAqMSB3aXRoIFNIQS0zIGRvbWFpbiBieXRlIDB4MDY7IGxhc3QgYnl0ZSBPUmVkIHdpdGggMHg4MC4gKilcbiAgbGV0IHEgPSByYXRlIC0gKGxlbiBtb2QgcmF0ZSkgaW5cbiAgbGV0IHBhZGRlZCA9IEJ5dGVzLm1ha2UgKGxlbiArIHEpICdcXDAwMCcgaW5cbiAgQnl0ZXMuYmxpdF9zdHJpbmcgbXNnIDAgcGFkZGVkIDAgbGVuO1xuICBpZiBxID0gMSB0aGVuXG4gICAgQnl0ZXMuc2V0IHBhZGRlZCBsZW4gJ1xceDg2J1xuICBlbHNlIGJlZ2luXG4gICAgQnl0ZXMuc2V0IHBhZGRlZCBsZW4gJ1xceDA2JztcbiAgICBCeXRlcy5zZXQgcGFkZGVkIChsZW4gKyBxIC0gMSkgJ1xceDgwJ1xuICBlbmQ7XG4gIGxldCB0b3RhbCA9IEJ5dGVzLmxlbmd0aCBwYWRkZWQgaW5cbiAgbGV0IGEgPSBBcnJheS5tYWtlIDI1IDBMIGluXG4gIGxldCBuYmxvY2tzID0gdG90YWwgLyByYXRlIGluXG4gIGZvciBibGsgPSAwIHRvIG5ibG9ja3MgLSAxIGRvXG4gICAgbGV0IGJhc2UgPSBibGsgKiByYXRlIGluXG4gICAgKCogQWJzb3JiOiBYT1IgcmF0ZSBieXRlcyBpbnRvIHRoZSBzdGF0ZSwgbGl0dGxlLWVuZGlhbiBsYW5lcy4gKilcbiAgICBmb3IgaiA9IDAgdG8gcmF0ZSAtIDEgZG9cbiAgICAgIGxldCBsYW5lID0gaiAvIDggYW5kIHNoID0gKGogbW9kIDgpICogOCBpblxuICAgICAgbGV0IGJ5dGUgPSBJbnQ2NC5vZl9pbnQgKENoYXIuY29kZSAoQnl0ZXMuZ2V0IHBhZGRlZCAoYmFzZSArIGopKSkgaW5cbiAgICAgIGEuKGxhbmUpIDwtIGEuKGxhbmUpIF46IChJbnQ2NC5zaGlmdF9sZWZ0IGJ5dGUgc2gpXG4gICAgZG9uZTtcbiAgICBrZWNjYWtfZiBhXG4gIGRvbmU7XG4gICgqIFNxdWVlemUgMzIgYnl0ZXMgKGZpdHMgaW4gdGhlIGZpcnN0IDQgbGFuZXM7IHJhdGUgPiAzMikuICopXG4gIGxldCBvdXQgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGZvciBqID0gMCB0byAzMSBkb1xuICAgIGxldCBsYW5lID0gaiAvIDggYW5kIHNoID0gKGogbW9kIDgpICogOCBpblxuICAgIGxldCBieXRlID1cbiAgICAgIEludDY0LnRvX2ludFxuICAgICAgICAoSW50NjQubG9nYW5kIChJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIGEuKGxhbmUpIHNoKSAweEZGTClcbiAgICBpblxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG91dCAoUHJpbnRmLnNwcmludGYgXCIlMDJ4XCIgYnl0ZSlcbiAgZG9uZTtcbiAgQnVmZmVyLmNvbnRlbnRzIG91dFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2ludDY0X2FuZCIsImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIiwiY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IiwiY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lIiwiY2FtbF9pbnQ2NF94b3IiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfb2JqX2R1cCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0ludDY0IiwibG5vdDY0Iiwicm90bDY0IiwieCIsIm4iLCJyaG8iLCJyYyIsImtlY2Nha19mIiwiYSIsImMiLCJkIiwiYiIsInJvdW5kIiwieSIsIm55Iiwic2hhM18yNTZfaGV4IiwibXNnIiwibGVuIiwicSIsInBhZGRlZCIsInRvdGFsIiwi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Q3dFRTtBQUFBLEtBQUFDLElBRUE7QUFBQSxLQUFBQyxTQUNhO0FBQUEsSUFDYjtBQUFBLElBQW9DO0FBQUEsS0FFbEM7QUFBQTtBQUFBLEtBRUE7QUFBQSxLQUNBO0FBQUE7QUFBQTtBQUFBLEtBQUFDLFFBRUY7QUFBQSxLQUFBWixJQUNRO0FBQUEsS0FBQWEsVUFDUjtBQUFBLFNBQ0E7QUFBQTtBQUFBLFNBQUFDLE1BQUE7QUFBQTtBQUFBO0FBQUEsVUFBQUMsT0FDRSxlQUFBQyxNQUVBO0FBQUE7QUFBQTtBQUFBLFFBQUFDLFNBQ0U7QUFBQSxRQUFBQyxPQUFBO0FBQUEsUUFBQUM7QUFBQUEsVUFDVztBQUFBLFlBQXdCO0FBQUEsT0FDdkI7QUFBQTtBQUFBO0FBQUEsVUFBWTtBQUFBLGVBQTBCO0FBQUE7QUFBQSxRQUVwRDtBQUFBLGdCQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUYwQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQUFDLE1BSzVDLGlDQUFBSixJQUNWO0FBQUE7QUFBQTtBQUFBLE1BQUFDLE9BQ0U7QUFBQSxNQUFBQyxLQUFBO0FBQUEsTUFBQUM7QUFBQUEsUUFHZ0U7QUFBQSxVQUE1RDtBQUFBLFlBQWM7QUFBQSxjQUEyQjtBQUFBO0FBQUEsVUFFdkI7QUFBQSxLQUF0QjtBQUFBLGFBQWtEO0FBQUEsa0JBRXBELHVDQUFtQjtBQUFBLEtBRmlDO0FBQUE7QUFBQSxHQUVqQztBQUFBLEdEMUdyQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQzMzAxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9wcmltaXRpdmVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIEJ1aWx0LWluIHByaW1pdGl2ZSBmdW5jdGlvbnMgKH44MCBwdXJlIGZ1bmN0aW9ucykuXG5cbiAgICBSZWdpc3RlcmVkIGluIGEgZ2xvYmFsIHRhYmxlOyB0aGUgZXZhbHVhdG9yIGNoZWNrcyB0aGlzIHRhYmxlXG4gICAgd2hlbiBhIHN5bWJvbCBpc24ndCBmb3VuZCBpbiB0aGUgbGV4aWNhbCBlbnZpcm9ubWVudC4gKilcblxub3BlbiBTeF90eXBlc1xuXG5sZXQgcHJpbWl0aXZlcyA6IChzdHJpbmcsIHZhbHVlIGxpc3QgLT4gdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDEyOFxuXG4oKiogRm9yd2FyZCByZWZzIGZvciBjYWxsaW5nIFNYIGZ1bmN0aW9ucyBmcm9tIHByaW1pdGl2ZXMgKGJyZWFrcyBjeWNsZSkuICopXG5sZXQgX3N4X2NhbGxfZm4gOiAodmFsdWUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3hfY2FsbCBub3QgaW5pdGlhbGl6ZWRcIikpXG5sZXQgX3N4X3RyYW1wb2xpbmVfZm4gOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIHYgLT4gdilcbmxldCBfaXNfY2xpZW50IDogYm9vbCByZWYgPSByZWYgZmFsc2VcblxuKCoqIFNjb3BlIHN0YWNrcyDigJQgZHluYW1pYyBzY29wZSBmb3IgcmVuZGVyLXRpbWUgZWZmZWN0cy5cbiAgICBFYWNoIGtleSBtYXBzIHRvIGEgc3RhY2sgb2YgdmFsdWVzLiBVc2VkIGJ5IGFzZXIgZm9yXG4gICAgc3ByZWFkL3Byb3ZpZGUvZW1pdCBwYXR0ZXJucywgQ1NTWCBjb2xsZWN0L2ZsdXNoLCBldGMuXG4gICAgTWlncmF0ZWQgZnJvbSBzeF9zY29wZS5tbC4gKilcbmxldCBfc2NvcGVfc3RhY2tzIDogKHN0cmluZywgdmFsdWUgbGlzdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgOFxuXG4oKiogRGVidWcgdHJhY2UgZm9yIHNjb3BlIG9wZXJhdGlvbnMgKilcbmxldCBfc2NvcGVfdHJhY2UgPSByZWYgZmFsc2VcbmxldCBfc2NvcGVfbG9nIDogc3RyaW5nIGxpc3QgcmVmID0gcmVmIFtdXG5sZXQgc2NvcGVfdHJhY2VfZW5hYmxlICgpID0gX3Njb3BlX3RyYWNlIDo9IHRydWU7IF9zY29wZV9sb2cgOj0gW11cbmxldCBzY29wZV90cmFjZV9kaXNhYmxlICgpID0gX3Njb3BlX3RyYWNlIDo9IGZhbHNlXG5sZXQgc2NvcGVfdHJhY2VfZHJhaW4gKCkgPVxuICBsZXQgbG9nID0gTGlzdC5yZXYgIV9zY29wZV9sb2cgaW5cbiAgX3Njb3BlX2xvZyA6PSBbXTtcbiAgbG9nXG5cbigqKiBSZXF1ZXN0IGNvb2tpZXMg4oCUIHNldCBieSB0aGUgUHl0aG9uIGJyaWRnZSBiZWZvcmUgZWFjaCByZW5kZXIuXG4gICAgZ2V0LWNvb2tpZSByZWFkcyBmcm9tIGhlcmU7IHNldC1jb29raWUgaXMgYSBuby1vcCBvbiB0aGUgc2VydmVyLiAqKVxubGV0IF9yZXF1ZXN0X2Nvb2tpZXMgOiAoc3RyaW5nLCBzdHJpbmcpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDhcblxuKCoqIENsZWFyIGFsbCBzY29wZSBzdGFja3MuIENhbGxlZCBiZXR3ZWVuIHJlcXVlc3RzIGlmIG5lZWRlZC4gKilcbmxldCBzY29wZV9jbGVhcl9hbGwgKCkgPSBIYXNodGJsLmNsZWFyIF9zY29wZV9zdGFja3NcblxubGV0IHJlZ2lzdGVyIG5hbWUgZm4gPSBIYXNodGJsLnJlcGxhY2UgcHJpbWl0aXZlcyBuYW1lIGZuXG5cbmxldCBpc19wcmltaXRpdmUgbmFtZSA9IEhhc2h0YmwubWVtIHByaW1pdGl2ZXMgbmFtZVxuXG5sZXQgZ2V0X3ByaW1pdGl2ZSBuYW1lID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICB8IFNvbWUgZm4gLT4gTmF0aXZlRm4gKG5hbWUsIGZuKVxuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5rbm93biBwcmltaXRpdmU6IFwiIF4gbmFtZSkpXG5cbigqIC0tLSBIZWxwZXJzIC0tLSAqKVxuXG4oKiBUcmFtcG9saW5lIGhvb2sg4oCUIHNldCBieSBzeF9yZWYgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJlYWsgY2lyY3VsYXIgZGVwICopXG5sZXQgdHJhbXBvbGluZV9ob29rIDogKHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biB2IC0+IHYpXG5cbmxldCBhc19pbnQgPSBmdW5jdGlvblxuICB8IEludGVnZXIgbiAtPiBuXG4gIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG5cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG51bWJlciwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGFsbF9pbnRzID0gTGlzdC5mb3JfYWxsIChmdW5jdGlvbiBJbnRlZ2VyIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpXG5cbmxldCByZWMgYXNfbnVtYmVyID0gZnVuY3Rpb25cbiAgfCBJbnRlZ2VyIG4gLT4gZmxvYXRfb2ZfaW50IG5cbiAgfCBOdW1iZXIgbiAtPiBuXG4gIHwgUmF0aW9uYWwobiwgZCkgLT4gZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGRcbiAgfCBCb29sIHRydWUgLT4gMS4wXG4gIHwgQm9vbCBmYWxzZSAtPiAwLjBcbiAgfCBOaWwgLT4gMC4wXG4gIHwgU3RyaW5nIHMgLT4gKG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgcyB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBGbG9hdC5uYW4pXG4gIHwgVGh1bmsgXyBhcyB0IC0+XG4gICAgKCogVHJhbXBvbGluZSB0aHVua3Mg4oCUIHRoZXkgc2hvdWxkbid0IGxlYWsgYnV0IHNvbWV0aW1lcyBkbyAqKVxuICAgIGFzX251bWJlciAoIXRyYW1wb2xpbmVfaG9vayB0KVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIgXiB0eXBlX29mIHYgXiBcIjogXCIgXiAobWF0Y2ggdiB3aXRoIERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX19zaWduYWxcIiB3aXRoIFNvbWUgXyAtPiBcInNpZ25hbHt2YWx1ZT1cIiBeIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ2YWx1ZVwiIHdpdGggU29tZSB2JyAtPiB2YWx1ZV90b19zdHJpbmcgdicgfCBOb25lIC0+IFwiP1wiKSBeIFwifVwiIHwgTm9uZSAtPiBcImRpY3RcIikgfCBfIC0+IFwiXCIpKSlcblxubGV0IGFzX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgc3RyaW5nLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgcmVjIGFzX2xpc3QgPSBmdW5jdGlvblxuICB8IExpc3QgbCAtPiBsXG4gIHwgTGlzdFJlZiByIC0+ICFyXG4gIHwgTmlsIC0+IFtdXG4gIHwgVGh1bmsgXyBhcyB0IC0+IGFzX2xpc3QgKCFfc3hfdHJhbXBvbGluZV9mbiB0KVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGFzX2Jvb2wgPSBmdW5jdGlvblxuICB8IEJvb2wgYiAtPiBiXG4gIHwgdiAtPiBzeF90cnV0aHkgdlxuXG5sZXQgcmVjIHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IEludGVnZXIgbiAtPiBzdHJpbmdfb2ZfaW50IG5cbiAgfCBOdW1iZXIgbiAtPiBTeF90eXBlcy5mb3JtYXRfbnVtYmVyIG5cbiAgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICB8IE5pbCAtPiBcIlwiXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBrXG4gIHwgVGh1bmsgXyBhcyB0IC0+IHRvX3N0cmluZyAoIXRyYW1wb2xpbmVfaG9vayB0KVxuICB8IFN4RXhwciBzIC0+IHNcbiAgfCBSYXdIVE1MIHMgLT4gc1xuICB8IHYgLT4gaW5zcGVjdCB2XG5cbmxldCBnZW5zeW1fY291bnRlciA9IHJlZiAwXG5cbmxldCByYXRfZ2NkIGEgYiA9XG4gIGxldCByZWMgZyBhIGIgPSBpZiBiID0gMCB0aGVuIGEgZWxzZSBnIGIgKGEgbW9kIGIpIGluIGcgKGFicyBhKSAoYWJzIGIpXG5cbmxldCBtYWtlX3JhdCBuIGQgPVxuICBpZiBkID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwicmF0aW9uYWw6IGRpdmlzaW9uIGJ5IHplcm9cIik7XG4gIGxldCBzaWduID0gaWYgZCA8IDAgdGhlbiAtMSBlbHNlIDEgaW5cbiAgbGV0IGcgPSByYXRfZ2NkIChhYnMgbikgKGFicyBkKSBpblxuICBsZXQgcm4gPSBzaWduICogbiAvIGcgYW5kIHJkID0gc2lnbiAqIGQgLyBnIGluXG4gIGlmIHJkID0gMSB0aGVuIEludGVnZXIgcm4gZWxzZSBSYXRpb25hbCAocm4sIHJkKVxuXG5sZXQgcmF0X29mX3ZhbCA9IGZ1bmN0aW9uXG4gIHwgSW50ZWdlciBuICAgICAtPiAobiwgMSlcbiAgfCBSYXRpb25hbChuLGQpIC0+IChuLCBkKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiZXhwZWN0ZWQgaW50ZWdlciBvciByYXRpb25hbCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGhhc19yYXRpb25hbCBhcmdzID0gTGlzdC5leGlzdHMgKGZ1bmN0aW9uIFJhdGlvbmFsIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIGFyZ3NcbmxldCBoYXNfZmxvYXQgICAgYXJncyA9IExpc3QuZXhpc3RzIChmdW5jdGlvbiBOdW1iZXIgIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIGFyZ3NcblxubGV0IHJhdF9hZGQgKGFuLCBhZCkgKGJuLCBiZCkgPSBtYWtlX3JhdCAoYW4gKiBiZCArIGJuICogYWQpIChhZCAqIGJkKVxubGV0IHJhdF9zdWIgKGFuLCBhZCkgKGJuLCBiZCkgPSBtYWtlX3JhdCAoYW4gKiBiZCAtIGJuICogYWQpIChhZCAqIGJkKVxubGV0IHJhdF9tdWwgKGFuLCBhZCkgKGJuLCBiZCkgPSBtYWtlX3JhdCAoYW4gKiBibikgKGFkICogYmQpXG5sZXQgcmF0X2RpdiAoYW4sIGFkKSAoYm4sIGJkKSA9XG4gIGlmIGJuID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwicmF0aW9uYWw6IGRpdmlzaW9uIGJ5IHplcm9cIik7XG4gIG1ha2VfcmF0IChhbiAqIGJkKSAoYWQgKiBibilcblxuKCogd3JpdGUvZGlzcGxheSBzZXJpYWxpemVycyAqKVxubGV0IHJlYyBzeF93cml0ZV92YWwgPSBmdW5jdGlvblxuICB8IE5pbCAtPiBcIigpXCJcbiAgfCBFb2YgLT4gXCIjIWVvZlwiXG4gIHwgQm9vbCB0cnVlIC0+IFwiI3RcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCIjZlwiXG4gIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICB8IE51bWJlciBuIC0+XG4gICAgbGV0IHMgPSBQcmludGYuc3ByaW50ZiBcIiVnXCIgbiBpblxuICAgICgqIEVuc3VyZSBmbG9hdC1saWtlIGlmIG5vIGRlY2ltYWwgcG9pbnQgKilcbiAgICBpZiBTdHJpbmcuY29udGFpbnMgcyAnLicgfHwgU3RyaW5nLmNvbnRhaW5zIHMgJ2UnIHRoZW4gcyBlbHNlIHNcbiAgfCBSYXRpb25hbChuLCBkKSAtPiBQcmludGYuc3ByaW50ZiBcIiVkLyVkXCIgbiBkXG4gIHwgU3RyaW5nIHMgLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgMikgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgU3RyaW5nLml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8ICdcIicgIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxcXFxcXCJcbiAgICAgIHwgJ1xcbicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFx0XCJcbiAgICAgIHwgYyAgICAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgfCBDaGFyIG4gLT5cbiAgICBpZiBuID0gMzIgdGhlbiBcIiNcXFxcc3BhY2VcIlxuICAgIGVsc2UgaWYgbiA9IDEwIHRoZW4gXCIjXFxcXG5ld2xpbmVcIlxuICAgIGVsc2UgaWYgbiA9IDkgdGhlbiBcIiNcXFxcdGFiXCJcbiAgICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiI1xcXFwlY1wiIChDaGFyLmNociAobiBsYW5kIDB4RkYpKVxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4gXCI6XCIgXiBrXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT5cbiAgICBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIHN4X3dyaXRlX3ZhbCBpdGVtcykgXiBcIilcIlxuICB8IHYgLT4gaW5zcGVjdCB2XG5cbmFuZCBzeF9kaXNwbGF5X3ZhbCA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IENoYXIgbiAtPiBTdHJpbmcubWFrZSAxIChDaGFyLmNociAobiBsYW5kIDB4RkYpKVxuICB8IHYgLT4gc3hfd3JpdGVfdmFsIHZcblxubGV0ICgpID1cbiAgKCogPT09IEFyaXRobWV0aWMgPT09ICopXG4gIHJlZ2lzdGVyIFwiK1wiIChmdW4gYXJncyAtPlxuICAgIGlmIGFsbF9pbnRzIGFyZ3MgdGhlblxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IGFjYyArIG4gfCBfIC0+IGFjYykgMCBhcmdzKVxuICAgIGVsc2UgaWYgaGFzX3JhdGlvbmFsIGFyZ3MgJiYgbm90IChoYXNfZmxvYXQgYXJncykgdGhlblxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPlxuICAgICAgICBtYXRjaCBhY2MsIGEgd2l0aFxuICAgICAgICB8IEludGVnZXIgYW4sIF8gLT4gcmF0X2FkZCAoYW4sIDEpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgIHwgUmF0aW9uYWwoYW4sYWQpLCBfIC0+IHJhdF9hZGQgKGFuLCBhZCkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgfCBfIC0+IGFjY1xuICAgICAgKSAoSW50ZWdlciAwKSBhcmdzXG4gICAgZWxzZVxuICAgICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyArLiBhc19udW1iZXIgYSkgMC4wIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCItXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiBJbnRlZ2VyIDBcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgKC1uKVxuICAgIHwgW1JhdGlvbmFsKG4sZCldIC0+IG1ha2VfcmF0ICgtbikgZFxuICAgIHwgW2FdIC0+IE51bWJlciAoLS4gKGFzX251bWJlciBhKSlcbiAgICB8IF8gd2hlbiBhbGxfaW50cyBhcmdzIC0+XG4gICAgICAobWF0Y2ggYXJncyB3aXRoXG4gICAgICAgfCBJbnRlZ2VyIGggOjogdGwgLT5cbiAgICAgICAgIEludGVnZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gbWF0Y2ggYSB3aXRoIEludGVnZXIgbiAtPiBhY2MgLSBuIHwgXyAtPiBhY2MpIGggdGwpXG4gICAgICAgfCBfIC0+IE51bWJlciAwLjApXG4gICAgfCBfIHdoZW4gaGFzX3JhdGlvbmFsIGFyZ3MgJiYgbm90IChoYXNfZmxvYXQgYXJncykgLT5cbiAgICAgIChtYXRjaCBhcmdzIHdpdGhcbiAgICAgICB8IGggOjogdGwgLT5cbiAgICAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT5cbiAgICAgICAgICAgbWF0Y2ggYWNjIHdpdGhcbiAgICAgICAgICAgfCBJbnRlZ2VyIGFuIC0+IHJhdF9zdWIgKGFuLCAxKSAocmF0X29mX3ZhbCBhKVxuICAgICAgICAgICB8IFJhdGlvbmFsKGFuLGFkKSAtPiByYXRfc3ViIChhbiwgYWQpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgICAgIHwgXyAtPiBhY2NcbiAgICAgICAgICkgaCB0bFxuICAgICAgIHwgXyAtPiBJbnRlZ2VyIDApXG4gICAgfCBhIDo6IHJlc3QgLT5cbiAgICAgIE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBhY2MgLS4gYXNfbnVtYmVyIHgpIChhc19udW1iZXIgYSkgcmVzdCkpO1xuICByZWdpc3RlciBcIipcIiAoZnVuIGFyZ3MgLT5cbiAgICBpZiBhbGxfaW50cyBhcmdzIHRoZW5cbiAgICAgIEludGVnZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gbWF0Y2ggYSB3aXRoIEludGVnZXIgbiAtPiBhY2MgKiBuIHwgXyAtPiBhY2MpIDEgYXJncylcbiAgICBlbHNlIGlmIGhhc19yYXRpb25hbCBhcmdzICYmIG5vdCAoaGFzX2Zsb2F0IGFyZ3MpIHRoZW5cbiAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT5cbiAgICAgICAgbWF0Y2ggYWNjIHdpdGhcbiAgICAgICAgfCBJbnRlZ2VyIGFuIC0+IHJhdF9tdWwgKGFuLCAxKSAocmF0X29mX3ZhbCBhKVxuICAgICAgICB8IFJhdGlvbmFsKGFuLGFkKSAtPiByYXRfbXVsIChhbiwgYWQpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgIHwgXyAtPiBhY2NcbiAgICAgICkgKEludGVnZXIgMSkgYXJnc1xuICAgIGVsc2VcbiAgICAgIE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBhY2MgKi4gYXNfbnVtYmVyIGEpIDEuMCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwiL1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgICgqICgvIGludCBpbnQpOiBleGFjdCB3aGVuIGRpdmlzaWJsZSDihpIgaW50ZWdlciwgZWxzZSBpbmV4YWN0IGZsb2F0LlxuICAgICAgIE1hdGNoZXMgc3BlYyAoXCJpbmV4YWN0IGZsb2F0XCIpICsgSlMgaG9zdCAoYmFja3dhcmQtY29tcGF0aWJsZSkgK1xuICAgICAgIHRlc3QtbnVtZXJpYy10b3dlciAoKC8gNiAyKT0zLCAoLyAxIDQpPTAuMjUsICgvIDUgMik9Mi41KS4gRXhhY3RcbiAgICAgICByYXRpb25hbHMgY29tZSBPTkxZIGZyb20gbGl0ZXJhbHMgLyBtYWtlLXJhdGlvbmFsLCBzbyBhIHJhdGlvbmFsXG4gICAgICAgT1BFUkFORCBrZWVwcyB0aGUgcmVzdWx0IGV4YWN0IChjYXNlcyBiZWxvdykg4oCUIGJ1dCB0d28gaW50ZWdlcnMgZG9cbiAgICAgICBOT1Qgc2lsZW50bHkgcHJvZHVjZSBhIHJhdGlvbmFsICh0aGF0IGRpdmVyZ2VkIGZyb20gdGhlIEpTIGhvc3QpLiAqKVxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSB3aGVuIGIgPD4gMCAmJiBhIG1vZCBiID0gMCAtPiBJbnRlZ2VyIChhIC8gYilcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgYSAvLiBmbG9hdF9vZl9pbnQgYilcbiAgICB8IFtSYXRpb25hbChhbixhZCk7IEludGVnZXIgYl0gLT4gbWFrZV9yYXQgYW4gKGFkICogYilcbiAgICB8IFtJbnRlZ2VyIGE7IFJhdGlvbmFsKGJuLGJkKV0gLT4gbWFrZV9yYXQgKGEgKiBiZCkgYm5cbiAgICB8IFtSYXRpb25hbChhbixhZCk7IFJhdGlvbmFsKGJuLGJkKV0gLT4gcmF0X2RpdiAoYW4sIGFkKSAoYm4sIGJkKVxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgLy4gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiLzogZXhwZWN0ZWQgMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJtb2RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoYSBtb2QgYilcbiAgICB8IFthOyBiXSAtPiBOdW1iZXIgKEZsb2F0LnJlbSAoYXNfbnVtYmVyIGEpIChhc19udW1iZXIgYikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibW9kOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImluY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAobiArIDEpXG4gICAgfCBbYV0gLT4gTnVtYmVyIChhc19udW1iZXIgYSArLiAxLjApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5jOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZGVjXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIChuIC0gMSlcbiAgICB8IFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhIC0uIDEuMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkZWM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhYnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgKGFicyBuKVxuICAgIHwgW2FdIC0+IE51bWJlciAoRmxvYXQuYWJzIChhc19udW1iZXIgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYWJzOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZmxvb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoZmxvb3IgKGFzX251bWJlciBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmxvb3I6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjZWlsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIG5cbiAgICB8IFthXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKGNlaWwgKGFzX251bWJlciBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VpbDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInJvdW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIG5cbiAgICB8IFthXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKEZsb2F0LnJvdW5kIChhc19udW1iZXIgYSkpKVxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIGFuZCBwbGFjZXMgPSBhc19pbnQgYiBpblxuICAgICAgbGV0IGZhY3RvciA9IDEwLjAgKiogZmxvYXRfb2ZfaW50IHBsYWNlcyBpblxuICAgICAgTnVtYmVyIChGbG9hdC5yb3VuZCAobiAqLiBmYWN0b3IpIC8uIGZhY3RvcilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyb3VuZDogMS0yIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1pblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtaW46IGF0IGxlYXN0IDEgYXJnXCIpXG4gICAgfCBfIHdoZW4gYWxsX2ludHMgYXJncyAtPlxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IG1pbiBhY2MgbiB8IF8gLT4gYWNjKSBtYXhfaW50IGFyZ3MpXG4gICAgfCBfIC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBGbG9hdC5taW4gYWNjIChhc19udW1iZXIgYSkpIEZsb2F0LmluZmluaXR5IGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCJtYXhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWF4OiBhdCBsZWFzdCAxIGFyZ1wiKVxuICAgIHwgXyB3aGVuIGFsbF9pbnRzIGFyZ3MgLT5cbiAgICAgIEludGVnZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gbWF0Y2ggYSB3aXRoIEludGVnZXIgbiAtPiBtYXggYWNjIG4gfCBfIC0+IGFjYykgbWluX2ludCBhcmdzKVxuICAgIHwgXyAtPiBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gRmxvYXQubWF4IGFjYyAoYXNfbnVtYmVyIGEpKSBGbG9hdC5uZWdfaW5maW5pdHkgYXJncykpO1xuICByZWdpc3RlciBcInNxcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuc3FydCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcXJ0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicG93XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBOdW1iZXIgKGFzX251bWJlciBhICoqIGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBvdzogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjYnJ0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmNicnQgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2JydDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV4cFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5leHAgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXhwOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhwbTFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuZXhwbTEgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXhwbTE6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJsb2dcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQubG9nIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxvZzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvZzJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQubG9nIChhc19udW1iZXIgYSkgLy4gRmxvYXQubG9nIDIuMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nMjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvZzEwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmxvZzEwIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxvZzEwOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG9nMXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQubG9nMXAgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nMXA6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzaW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuc2luIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNpbjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNvc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5jb3MgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY29zOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidGFuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LnRhbiAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0YW46IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhc2luXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmFzaW4gKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXNpbjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFjb3NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYWNvcyAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhY29zOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYXRhblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2FdIC0+IE51bWJlciAoRmxvYXQuYXRhbiAoYXNfbnVtYmVyIGEpKVxuICAgIHwgW3k7IHhdIC0+IE51bWJlciAoRmxvYXQuYXRhbjIgKGFzX251bWJlciB5KSAoYXNfbnVtYmVyIHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImF0YW46IDEtMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJhdGFuMlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5hdGFuMiAoYXNfbnVtYmVyIGEpIChhc19udW1iZXIgYikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXRhbjI6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic2luaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zaW5oIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNpbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjb3NoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmNvc2ggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY29zaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInRhbmhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQudGFuaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0YW5oOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYXNpbmhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYXNpbmggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXNpbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhY29zaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hY29zaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhY29zaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImF0YW5oXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmF0YW5oIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImF0YW5oOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaHlwb3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgc3F1YXJlIHggPSB4ICouIHggaW5cbiAgICBsZXQgc3VtID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBhY2MgKy4gc3F1YXJlIChhc19udW1iZXIgYSkpIDAuMCBhcmdzIGluXG4gICAgTnVtYmVyIChGbG9hdC5zcXJ0IHN1bSkpO1xuICByZWdpc3RlciBcInNpZ25cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgKGlmIG4gPiAwIHRoZW4gMSBlbHNlIGlmIG4gPCAwIHRoZW4gLTEgZWxzZSAwKVxuICAgIHwgW2FdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIGluXG4gICAgICBOdW1iZXIgKGlmIEZsb2F0LmlzX25hbiBuIHRoZW4gRmxvYXQubmFuXG4gICAgICAgICAgICAgIGVsc2UgaWYgbiA+IDAuMCB0aGVuIDEuMFxuICAgICAgICAgICAgICBlbHNlIGlmIG4gPCAwLjAgdGhlbiAtMS4wXG4gICAgICAgICAgICAgIGVsc2UgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzaWduOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZnJvdW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEludDMyLmZsb2F0X29mX2JpdHMgKEludDMyLmJpdHNfb2ZfZmxvYXQgKGFzX251bWJlciBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZnJvdW5kOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2x6MzJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthXSAtPlxuICAgICAgbGV0IG4gPSBhc19udW1iZXIgYSBpblxuICAgICAgbGV0IGkgPSBpZiBGbG9hdC5pc19uYW4gbiB8fCBGbG9hdC5pc19pbmZpbml0ZSBuIHRoZW4gMGxcbiAgICAgICAgICAgICAgZWxzZSBJbnQzMi5vZl9mbG9hdCAoRmxvYXQucmVtIG4gNDI5NDk2NzI5Ni4wKSBpblxuICAgICAgaWYgaSA9IDBsIHRoZW4gTnVtYmVyIDMyLjBcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGhpZ2hfYml0ID0gSW50MzIuc2hpZnRfbGVmdCAxbCAzMSBpblxuICAgICAgICBsZXQgY291bnQgPSByZWYgMCBpblxuICAgICAgICBsZXQgeCA9IHJlZiBpIGluXG4gICAgICAgIHdoaWxlIEludDMyLmxvZ2FuZCAheCBoaWdoX2JpdCA9IDBsIGRvXG4gICAgICAgICAgaW5jciBjb3VudDtcbiAgICAgICAgICB4IDo9IEludDMyLnNoaWZ0X2xlZnQgIXggMVxuICAgICAgICBkb25lO1xuICAgICAgICBOdW1iZXIgKGZsb2F0X29mX2ludCAhY291bnQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2x6MzI6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbXVsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCB0b3UzMiBmID1cbiAgICAgICAgaWYgRmxvYXQuaXNfbmFuIGYgfHwgRmxvYXQuaXNfaW5maW5pdGUgZiB0aGVuIDBsXG4gICAgICAgIGVsc2UgSW50MzIub2ZfZmxvYXQgKEZsb2F0LnJlbSBmIDQyOTQ5NjcyOTYuMCkgaW5cbiAgICAgIGxldCBhaSA9IHRvdTMyIChhc19udW1iZXIgYSkgYW5kIGJpID0gdG91MzIgKGFzX251bWJlciBiKSBpblxuICAgICAgbGV0IHIgPSBJbnQzMi5tdWwgYWkgYmkgaW5cbiAgICAgIE51bWJlciAoSW50MzIudG9fZmxvYXQgcilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbXVsOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImNsYW1wXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbeDsgbG87IGhpXSAtPlxuICAgICAgbGV0IHggPSBhc19udW1iZXIgeCBhbmQgbG8gPSBhc19udW1iZXIgbG8gYW5kIGhpID0gYXNfbnVtYmVyIGhpIGluXG4gICAgICBOdW1iZXIgKEZsb2F0Lm1heCBsbyAoRmxvYXQubWluIGhpIHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsYW1wOiAzIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInRydW5jYXRlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIG5cbiAgICB8IFthXSAtPiBsZXQgbiA9IGFzX251bWJlciBhIGluIEludGVnZXIgKGludF9vZl9mbG9hdCAoaWYgbiA+PSAwLjAgdGhlbiBmbG9vciBuIGVsc2UgY2VpbCBuKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cnVuY2F0ZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInJlbWFpbmRlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPiBJbnRlZ2VyIChhIG1vZCBiKVxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoRmxvYXQucmVtIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZW1haW5kZXI6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibW9kdWxvXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+XG4gICAgICBsZXQgciA9IGEgbW9kIGIgaW5cbiAgICAgIEludGVnZXIgKGlmIHIgPSAwIHx8IChyID4gMCkgPSAoYiA+IDApIHRoZW4gciBlbHNlIHIgKyBiKVxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgYSA9IGFzX251bWJlciBhIGFuZCBiID0gYXNfbnVtYmVyIGIgaW5cbiAgICAgIGxldCByID0gRmxvYXQucmVtIGEgYiBpblxuICAgICAgTnVtYmVyIChpZiByID0gMC4wIHx8IChyID4gMC4wKSA9IChiID4gMC4wKSB0aGVuIHIgZWxzZSByICsuIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibW9kdWxvOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImV4YWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbUmF0aW9uYWwgX10gLT4gQm9vbCB0cnVlICAgKCogcmF0aW9uYWxzIGFyZSBleGFjdCAqKVxuICAgIHwgW051bWJlciBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4YWN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImluZXhhY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW0ludGVnZXIgX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmV4YWN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV4YWN0LT5pbmV4YWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBuKVxuICAgIHwgW051bWJlciBuXSAtPiBOdW1iZXIgblxuICAgIHwgW1JhdGlvbmFsKG4sZCldIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGQpXG4gICAgfCBbYV0gLT4gTnVtYmVyIChhc19udW1iZXIgYSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGFjdC0+aW5leGFjdDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImluZXhhY3QtPmV4YWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIG5cbiAgICB8IFtOdW1iZXIgbl0gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChGbG9hdC5yb3VuZCBuKSlcbiAgICB8IFthXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKEZsb2F0LnJvdW5kIChhc19udW1iZXIgYSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluZXhhY3QtPmV4YWN0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhwdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSB3aGVuIGIgPj0gMCAtPlxuICAgICAgKCogT3ZlcmZsb3ctY2hlY2tlZCBpbnRlZ2VyIHBvd2VyOiBwcm9tb3RlIHRvIGZsb2F0IGluc3RlYWQgb2ZcbiAgICAgICAgIHNpbGVudGx5IHdyYXBwaW5nIGludDYzICgoZXhwdCAyIDEwMCkgdXNlZCB0byByZXR1cm4gMCkuICopXG4gICAgICBsZXQgbXVsX292ZiB4IHkgPVxuICAgICAgICBpZiB4ID0gMCB8fCB5ID0gMCB0aGVuIFNvbWUgMFxuICAgICAgICBlbHNlIGxldCBwID0geCAqIHkgaW5cbiAgICAgICAgICBpZiBwIC8geSA8PiB4IHRoZW4gTm9uZSBlbHNlIFNvbWUgcCBpblxuICAgICAgbGV0IHJlYyBpcG93IGJhc2UgZSBhY2MgPVxuICAgICAgICBpZiBlID0gMCB0aGVuIFNvbWUgYWNjXG4gICAgICAgIGVsc2UgbWF0Y2ggbXVsX292ZiBhY2MgYmFzZSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgICB8IFNvbWUgYWNjJyAtPiBpcG93IGJhc2UgKGUgLSAxKSBhY2MnIGluXG4gICAgICAobWF0Y2ggaXBvdyBhIGIgMSB3aXRoXG4gICAgICAgfCBTb21lIG4gLT4gSW50ZWdlciBuXG4gICAgICAgfCBOb25lIC0+IE51bWJlciAoRmxvYXQucG93IChmbG9hdF9vZl9pbnQgYSkgKGZsb2F0X29mX2ludCBiKSkpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5wb3cgKGFzX251bWJlciBhKSAoYXNfbnVtYmVyIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4cHQ6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicXVvdGllbnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoSW50LmRpdiBhIGIpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgLy4gYXNfbnVtYmVyIGIgaW5cbiAgICAgIEludGVnZXIgKGludF9vZl9mbG9hdCAoaWYgbiA+PSAwLjAgdGhlbiBmbG9vciBuIGVsc2UgY2VpbCBuKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJxdW90aWVudDogMiBhcmdzXCIpKTtcbiAgbGV0IHJlYyBpZ2NkIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGlnY2QgYiAoYSBtb2QgYikgaW5cbiAgcmVnaXN0ZXIgXCJnY2RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoaWdjZCAoYWJzIGEpIChhYnMgYikpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCByZWMgZmdjZCBhIGIgPSBpZiBiID0gMC4wIHRoZW4gYSBlbHNlIGZnY2QgYiAoRmxvYXQucmVtIGEgYikgaW5cbiAgICAgIE51bWJlciAoZmdjZCAoYWJzX2Zsb2F0IChhc19udW1iZXIgYSkpIChhYnNfZmxvYXQgKGFzX251bWJlciBiKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZ2NkOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImxjbVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPlxuICAgICAgbGV0IGcgPSBpZ2NkIChhYnMgYSkgKGFicyBiKSBpblxuICAgICAgaWYgZyA9IDAgdGhlbiBJbnRlZ2VyIDAgZWxzZSBJbnRlZ2VyIChhYnMgYSAvIGcgKiBhYnMgYilcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGEgPSBhYnNfZmxvYXQgKGFzX251bWJlciBhKSBhbmQgYiA9IGFic19mbG9hdCAoYXNfbnVtYmVyIGIpIGluXG4gICAgICBsZXQgcmVjIGZnY2QgYSBiID0gaWYgYiA9IDAuMCB0aGVuIGEgZWxzZSBmZ2NkIGIgKEZsb2F0LnJlbSBhIGIpIGluXG4gICAgICBsZXQgZyA9IGZnY2QgYSBiIGluXG4gICAgICBpZiBnID0gMC4wIHRoZW4gTnVtYmVyIDAuMCBlbHNlIE51bWJlciAoYSAvLiBnICouIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGNtOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm51bWJlci0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGRpZ2l0cyA9IFwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCIgaW5cbiAgICBsZXQgaW50X3RvX3JhZGl4IG4gciA9XG4gICAgICBpZiBuID0gMCB0aGVuIFwiMFwiXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBuZWcgPSBuIDwgMCBpblxuICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICAgICAgICBsZXQgcmVjIGdvIG4gPSBpZiBuID4gMCB0aGVuIGJlZ2luIGdvIChuIC8gcik7IEJ1ZmZlci5hZGRfY2hhciBidWYgZGlnaXRzLltuIG1vZCByXSBlbmQgaW5cbiAgICAgICAgZ28gKGFicyBuKTtcbiAgICAgICAgKGlmIG5lZyB0aGVuIFwiLVwiIGVsc2UgXCJcIikgXiBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBlbmRcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3RyaW5nIChzdHJpbmdfb2ZfaW50IG4pXG4gICAgfCBbTnVtYmVyIGZdIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlZ1wiIGYpXG4gICAgfCBbUmF0aW9uYWwobixkKV0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiVkLyVkXCIgbiBkKVxuICAgIHwgW0ludGVnZXIgbjsgSW50ZWdlciByXSAtPlxuICAgICAgaWYgciA8IDIgfHwgciA+IDM2IHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1iZXItPnN0cmluZzogcmFkaXggb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgU3RyaW5nIChpbnRfdG9fcmFkaXggbiByKVxuICAgIHwgW051bWJlciBmOyBJbnRlZ2VyIHJdIC0+XG4gICAgICBpZiByIDwgMiB8fCByID4gMzYgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlci0+c3RyaW5nOiByYWRpeCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgICBTdHJpbmcgKGludF90b19yYWRpeCAoaW50X29mX2Zsb2F0IGYpIHIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibnVtYmVyLT5zdHJpbmc6IDEtMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctPm51bWJlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgKHRyeSBJbnRlZ2VyIChpbnRfb2Zfc3RyaW5nIHMpXG4gICAgICAgd2l0aCBfIC0+IHRyeSBOdW1iZXIgKGZsb2F0X29mX3N0cmluZyBzKVxuICAgICAgIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IEludGVnZXIgcl0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IG5lZyA9IFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bMF0gPSAnLScgaW5cbiAgICAgICAgbGV0IHN0YXJ0ID0gaWYgbmVnIHRoZW4gMSBlbHNlIDAgaW5cbiAgICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgICBmb3IgaSA9IHN0YXJ0IHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgICBsZXQgYyA9IENoYXIuY29kZSBzLltpXSBpblxuICAgICAgICAgIGxldCBkID0gaWYgYyA+PSA0OCAmJiBjIDw9IDU3IHRoZW4gYyAtIDQ4XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIGMgPj0gOTcgJiYgYyA8PSAxMjIgdGhlbiBjIC0gODdcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgYyA+PSA2NSAmJiBjIDw9IDkwICB0aGVuIGMgLSA1NVxuICAgICAgICAgICAgICAgICAgZWxzZSByYWlzZSBFeGl0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBkID49IHIgdGhlbiByYWlzZSBFeGl0O1xuICAgICAgICAgIG4gOj0gIW4gKiByICsgZFxuICAgICAgICBkb25lO1xuICAgICAgICBJbnRlZ2VyIChpZiBuZWcgdGhlbiAtICFuIGVsc2UgIW4pXG4gICAgICAgd2l0aCBfIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPm51bWJlcjogMS0yIGFyZ3NcIikpO1xuICBsZXQgbWFrZV9yYXRpb25hbF92YWwgbiBkID1cbiAgICBpZiBkID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yYXRpb25hbDogZGVub21pbmF0b3IgY2Fubm90IGJlIHplcm9cIik7XG4gICAgbGV0IHJlYyBnY2QgYSBiID0gaWYgYiA9IDAgdGhlbiBhIGVsc2UgZ2NkIGIgKGEgbW9kIGIpIGluXG4gICAgbGV0IHNpZ24gPSBpZiBkIDwgMCB0aGVuIC0xIGVsc2UgMSBpblxuICAgIGxldCBnID0gZ2NkIChhYnMgbikgKGFicyBkKSBpblxuICAgIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgICBpZiByZCA9IDEgdGhlbiBJbnRlZ2VyIHJuIGVsc2UgUmF0aW9uYWwgKHJuLCByZClcbiAgaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLXJhdGlvbmFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIGRdIC0+IG1ha2VfcmF0aW9uYWxfdmFsIG4gZFxuICAgIHwgW051bWJlciBmOyBJbnRlZ2VyIGRdICAtPiBtYWtlX3JhdGlvbmFsX3ZhbCAoaW50X29mX2Zsb2F0IGYpIGRcbiAgICB8IFtJbnRlZ2VyIG47IE51bWJlciBmXSAgLT4gbWFrZV9yYXRpb25hbF92YWwgbiAoaW50X29mX2Zsb2F0IGYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yYXRpb25hbDogZXhwZWN0ZWQgMiBpbnRlZ2Vyc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmF0aW9uYWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmF0aW9uYWwgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gICAgICAgICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJhdGlvbmFsPzogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcIm51bWVyYXRvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JhdGlvbmFsIChuLCBfKV0gLT4gSW50ZWdlciBuXG4gICAgfCBbSW50ZWdlciBuXSAgICAgICAtPiBJbnRlZ2VyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1lcmF0b3I6IGV4cGVjdGVkIHJhdGlvbmFsIG9yIGludGVnZXJcIikpO1xuICByZWdpc3RlciBcImRlbm9taW5hdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmF0aW9uYWwgKF8sIGQpXSAtPiBJbnRlZ2VyIGRcbiAgICB8IFtJbnRlZ2VyIF9dICAgICAgIC0+IEludGVnZXIgMVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlbm9taW5hdG9yOiBleHBlY3RlZCByYXRpb25hbCBvciBpbnRlZ2VyXCIpKTtcbiAgKCogcHJpbnRmLXNwZWM6IGFwcGx5IG9uZSBUY2wvcHJpbnRmIGZvcm1hdCBzcGVjIHRvIG9uZSBhcmcuXG4gICAgIHNwZWMgaXMgbGlrZSBcIiU1LjJmXCIsIFwiJS0xMHNcIiwgXCIleFwiLCBcIiVjXCIsIFwiJWRcIi4gQWx3YXlzIHN0YXJ0cyB3aXRoICVcbiAgICAgYW5kIGVuZHMgd2l0aCB0aGUgY29udmVyc2lvbiBjaGFyLiAgU3VwcG9ydHMgZCBpIHUgeCBYIG8gYyBzIGYgZSBnLlxuICAgICBDb2VyY2VzIGFyZyB0byB0aGUgcmlnaHQgdHlwZSBwZXIgY29udmVyc2lvbi4gKilcbiAgcmVnaXN0ZXIgXCJwcmludGYtc3BlY1wiIChmdW4gYXJncyAtPlxuICAgIGxldCBzcGVjX3N0ciwgYXJnID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtTdHJpbmcgczsgdl0gLT4gKHMsIHYpXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwcmludGYtc3BlYzogKHNwZWMgYXJnKVwiKVxuICAgIGluXG4gICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHNwZWNfc3RyIGluXG4gICAgaWYgbiA8IDIgfHwgc3BlY19zdHIuWzBdIDw+ICclJyB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJwcmludGYtc3BlYzogaW52YWxpZCBzcGVjIFwiIF4gc3BlY19zdHIpKTtcbiAgICBsZXQgdHlwZV9jaGFyID0gc3BlY19zdHIuW24gLSAxXSBpblxuICAgIGxldCB0b19pbnQgdiA9IG1hdGNoIHYgd2l0aFxuICAgICAgfCBJbnRlZ2VyIGkgLT4gaVxuICAgICAgfCBOdW1iZXIgZiAtPiBpbnRfb2ZfZmxvYXQgZlxuICAgICAgfCBTdHJpbmcgcyAtPlxuICAgICAgICBsZXQgcyA9IFN0cmluZy50cmltIHMgaW5cbiAgICAgICAgKHRyeSBpbnRfb2Zfc3RyaW5nIHNcbiAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICB0cnkgaW50X29mX2Zsb2F0IChmbG9hdF9vZl9zdHJpbmcgcylcbiAgICAgICAgICAgd2l0aCBfIC0+IDApXG4gICAgICB8IEJvb2wgdHJ1ZSAtPiAxIHwgQm9vbCBmYWxzZSAtPiAwXG4gICAgICB8IF8gLT4gMFxuICAgIGluXG4gICAgbGV0IHRvX2Zsb2F0IHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgTnVtYmVyIGYgLT4gZlxuICAgICAgfCBJbnRlZ2VyIGkgLT4gZmxvYXRfb2ZfaW50IGlcbiAgICAgIHwgU3RyaW5nIHMgLT5cbiAgICAgICAgbGV0IHMgPSBTdHJpbmcudHJpbSBzIGluXG4gICAgICAgICh0cnkgZmxvYXRfb2Zfc3RyaW5nIHMgd2l0aCBfIC0+IDAuMClcbiAgICAgIHwgXyAtPiAwLjBcbiAgICBpblxuICAgIGxldCB0b19zdHJpbmcgdiA9IG1hdGNoIHYgd2l0aFxuICAgICAgfCBTdHJpbmcgcyAtPiBzXG4gICAgICB8IEludGVnZXIgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgICAgIHwgTnVtYmVyIGYgLT4gU3hfdHlwZXMuZm9ybWF0X251bWJlciBmXG4gICAgICB8IEJvb2wgdHJ1ZSAtPiBcIjFcIiB8IEJvb2wgZmFsc2UgLT4gXCIwXCJcbiAgICAgIHwgTmlsIC0+IFwiXCJcbiAgICAgIHwgXyAtPiBTeF90eXBlcy5pbnNwZWN0IHZcbiAgICBpblxuICAgIHRyeVxuICAgICAgbWF0Y2ggdHlwZV9jaGFyIHdpdGhcbiAgICAgIHwgJ2QnIHwgJ2knIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlZFwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19pbnQgYXJnKSlcbiAgICAgIHwgJ3UnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIldVwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19pbnQgYXJnKSlcbiAgICAgIHwgJ3gnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIleFwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19pbnQgYXJnKSlcbiAgICAgIHwgJ1gnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlWFwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19pbnQgYXJnKSlcbiAgICAgIHwgJ28nIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlb1wiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19pbnQgYXJnKSlcbiAgICAgIHwgJ2MnIC0+XG4gICAgICAgIGxldCBuX3ZhbCA9IHRvX2ludCBhcmcgaW5cbiAgICAgICAgbGV0IGJvZHkgPSBTdHJpbmcuc3ViIHNwZWNfc3RyIDAgKG4gLSAxKSBpblxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIChib2R5IF4gXCJzXCIpIFwiJXNcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAoU3RyaW5nLm1ha2UgMSAoQ2hhci5jaHIgKG5fdmFsIGxhbmQgMHhmZikpKSlcbiAgICAgIHwgJ3MnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlc1wiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19zdHJpbmcgYXJnKSlcbiAgICAgIHwgJ2YnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlZlwiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19mbG9hdCBhcmcpKVxuICAgICAgfCAnZScgLT5cbiAgICAgICAgbGV0IGZtdCA9IFNjYW5mLmZvcm1hdF9mcm9tX3N0cmluZyBzcGVjX3N0ciBcIiVlXCIgaW5cbiAgICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBmbXQgKHRvX2Zsb2F0IGFyZykpXG4gICAgICB8ICdFJyAtPlxuICAgICAgICBsZXQgZm10ID0gU2NhbmYuZm9ybWF0X2Zyb21fc3RyaW5nIHNwZWNfc3RyIFwiJUVcIiBpblxuICAgICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIGZtdCAodG9fZmxvYXQgYXJnKSlcbiAgICAgIHwgJ2cnIC0+XG4gICAgICAgIGxldCBmbXQgPSBTY2FuZi5mb3JtYXRfZnJvbV9zdHJpbmcgc3BlY19zdHIgXCIlZ1wiIGluXG4gICAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgZm10ICh0b19mbG9hdCBhcmcpKVxuICAgICAgfCAnRycgLT5cbiAgICAgICAgbGV0IGZtdCA9IFNjYW5mLmZvcm1hdF9mcm9tX3N0cmluZyBzcGVjX3N0ciBcIiVHXCIgaW5cbiAgICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBmbXQgKHRvX2Zsb2F0IGFyZykpXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicHJpbnRmLXNwZWM6IHVuc3VwcG9ydGVkIGNvbnZlcnNpb24gXCIgXiBTdHJpbmcubWFrZSAxIHR5cGVfY2hhcikpXG4gICAgd2l0aFxuICAgIHwgRXZhbF9lcnJvciBfIGFzIGUgLT4gcmFpc2UgZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJwcmludGYtc3BlYzogaW52YWxpZCBmb3JtYXQgXCIgXiBzcGVjX3N0cikpKTtcblxuICAoKiBzY2FuLXNwZWM6IGFwcGx5IG9uZSBUY2wvc2NhbmYgZm9ybWF0IHNwZWMgdG8gYSBzdHJpbmcuXG4gICAgIFJldHVybnMgKGNvbnN1bWVkLWNvdW50IC4gcGFyc2VkLXZhbHVlKSwgb3IgbmlsIG9uIGZhaWx1cmUuICopXG4gIHJlZ2lzdGVyIFwic2Nhbi1zcGVjXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHNwZWNfc3RyLCBzdHIgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgaW5wdXRdIC0+IChzLCBpbnB1dClcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNjYW4tc3BlYzogKHNwZWMgaW5wdXQpXCIpXG4gICAgaW5cbiAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggc3BlY19zdHIgaW5cbiAgICBpZiBuIDwgMiB8fCBzcGVjX3N0ci5bMF0gPD4gJyUnIHRoZW5cbiAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNjYW4tc3BlYzogaW52YWxpZCBzcGVjIFwiIF4gc3BlY19zdHIpKTtcbiAgICBsZXQgdHlwZV9jaGFyID0gc3BlY19zdHIuW24gLSAxXSBpblxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgICgqIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGZvciBub24tJWMvJXMgY29udmVyc2lvbnMgKilcbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgaWYgdHlwZV9jaGFyIDw+ICdjJyB0aGVuXG4gICAgICB3aGlsZSAhaSA8IGxlbiAmJiAoc3RyLlshaV0gPSAnICcgfHwgc3RyLlshaV0gPSAnXFx0JyB8fCBzdHIuWyFpXSA9ICdcXG4nKSBkbyBpbmNyIGkgZG9uZTtcbiAgICBsZXQgc3RhcnQgPSAhaSBpblxuICAgIHRyeVxuICAgICAgbWF0Y2ggdHlwZV9jaGFyIHdpdGhcbiAgICAgIHwgJ2QnIHwgJ2knIC0+XG4gICAgICAgIGxldCBqID0gcmVmICFpIGluXG4gICAgICAgIGlmICFqIDwgbGVuICYmIChzdHIuWyFqXSA9ICctJyB8fCBzdHIuWyFqXSA9ICcrJykgdGhlbiBpbmNyIGo7XG4gICAgICAgIHdoaWxlICFqIDwgbGVuICYmIHN0ci5bIWpdID49ICcwJyAmJiBzdHIuWyFqXSA8PSAnOScgZG8gaW5jciBqIGRvbmU7XG4gICAgICAgIGlmICFqID4gc3RhcnQgJiYgKHN0ci5bc3RhcnRdID49ICcwJyAmJiBzdHIuW3N0YXJ0XSA8PSAnOSdcbiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWogPiBzdGFydCArIDEgJiYgKHN0ci5bc3RhcnRdID0gJy0nIHx8IHN0ci5bc3RhcnRdID0gJysnKSkpIHRoZW5cbiAgICAgICAgICBsZXQgbl92YWwgPSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBzdGFydCAoIWogLSBzdGFydCkpIGluXG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIChJbnRlZ2VyIG5fdmFsKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN1bWVkXCIgKEludGVnZXIgIWopO1xuICAgICAgICAgIERpY3QgZFxuICAgICAgICBlbHNlIE5pbFxuICAgICAgfCAneCcgfCAnWCcgLT5cbiAgICAgICAgbGV0IGogPSByZWYgIWkgaW5cbiAgICAgICAgd2hpbGUgIWogPCBsZW4gJiZcbiAgICAgICAgICAgICAgKChzdHIuWyFqXSA+PSAnMCcgJiYgc3RyLlshal0gPD0gJzknKSB8fFxuICAgICAgICAgICAgICAgKHN0ci5bIWpdID49ICdhJyAmJiBzdHIuWyFqXSA8PSAnZicpIHx8XG4gICAgICAgICAgICAgICAoc3RyLlshal0gPj0gJ0EnICYmIHN0ci5bIWpdIDw9ICdGJykpIGRvIGluY3IgaiBkb25lO1xuICAgICAgICBpZiAhaiA+IHN0YXJ0IHRoZW5cbiAgICAgICAgICBsZXQgbl92YWwgPSBpbnRfb2Zfc3RyaW5nIChcIjB4XCIgXiBTdHJpbmcuc3ViIHN0ciBzdGFydCAoIWogLSBzdGFydCkpIGluXG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIChJbnRlZ2VyIG5fdmFsKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN1bWVkXCIgKEludGVnZXIgIWopO1xuICAgICAgICAgIERpY3QgZFxuICAgICAgICBlbHNlIE5pbFxuICAgICAgfCAnbycgLT5cbiAgICAgICAgbGV0IGogPSByZWYgIWkgaW5cbiAgICAgICAgd2hpbGUgIWogPCBsZW4gJiYgc3RyLlshal0gPj0gJzAnICYmIHN0ci5bIWpdIDw9ICc3JyBkbyBpbmNyIGogZG9uZTtcbiAgICAgICAgaWYgIWogPiBzdGFydCB0aGVuXG4gICAgICAgICAgbGV0IG5fdmFsID0gaW50X29mX3N0cmluZyAoXCIwb1wiIF4gU3RyaW5nLnN1YiBzdHIgc3RhcnQgKCFqIC0gc3RhcnQpKSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoSW50ZWdlciBuX3ZhbCk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdW1lZFwiIChJbnRlZ2VyICFqKTtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgZWxzZSBOaWxcbiAgICAgIHwgJ2YnIHwgJ2UnIHwgJ2cnIC0+XG4gICAgICAgIGxldCBqID0gcmVmICFpIGluXG4gICAgICAgIGlmICFqIDwgbGVuICYmIChzdHIuWyFqXSA9ICctJyB8fCBzdHIuWyFqXSA9ICcrJykgdGhlbiBpbmNyIGo7XG4gICAgICAgIHdoaWxlICFqIDwgbGVuICYmICgoc3RyLlshal0gPj0gJzAnICYmIHN0ci5bIWpdIDw9ICc5JykgfHwgc3RyLlshal0gPSAnLicpIGRvIGluY3IgaiBkb25lO1xuICAgICAgICBpZiAhaiA8IGxlbiAmJiAoc3RyLlshal0gPSAnZScgfHwgc3RyLlshal0gPSAnRScpIHRoZW4gYmVnaW5cbiAgICAgICAgICBpbmNyIGo7XG4gICAgICAgICAgaWYgIWogPCBsZW4gJiYgKHN0ci5bIWpdID0gJy0nIHx8IHN0ci5bIWpdID0gJysnKSB0aGVuIGluY3IgajtcbiAgICAgICAgICB3aGlsZSAhaiA8IGxlbiAmJiBzdHIuWyFqXSA+PSAnMCcgJiYgc3RyLlshal0gPD0gJzknIGRvIGluY3IgaiBkb25lXG4gICAgICAgIGVuZDtcbiAgICAgICAgaWYgIWogPiBzdGFydCB0aGVuXG4gICAgICAgICAgbGV0IGZfdmFsID0gZmxvYXRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBzdGFydCAoIWogLSBzdGFydCkpIGluXG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIChOdW1iZXIgZl92YWwpO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY29uc3VtZWRcIiAoSW50ZWdlciAhaik7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIGVsc2UgTmlsXG4gICAgICB8ICdzJyAtPlxuICAgICAgICBsZXQgaiA9IHJlZiAhaSBpblxuICAgICAgICB3aGlsZSAhaiA8IGxlbiAmJiBzdHIuWyFqXSA8PiAnICcgJiYgc3RyLlshal0gPD4gJ1xcdCcgJiYgc3RyLlshal0gPD4gJ1xcbicgZG8gaW5jciBqIGRvbmU7XG4gICAgICAgIGlmICFqID4gc3RhcnQgdGhlblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoU3RyaW5nIChTdHJpbmcuc3ViIHN0ciBzdGFydCAoIWogLSBzdGFydCkpKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN1bWVkXCIgKEludGVnZXIgIWopO1xuICAgICAgICAgIERpY3QgZFxuICAgICAgICBlbHNlIE5pbFxuICAgICAgfCAnYycgLT5cbiAgICAgICAgaWYgIWkgPCBsZW4gdGhlblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmFsdWVcIiAoSW50ZWdlciAoQ2hhci5jb2RlIHN0ci5bIWldKSk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdW1lZFwiIChJbnRlZ2VyICghaSArIDEpKTtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgZWxzZSBOaWxcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJzY2FuLXNwZWM6IHVuc3VwcG9ydGVkIGNvbnZlcnNpb24gXCIgXiBTdHJpbmcubWFrZSAxIHR5cGVfY2hhcikpXG4gICAgd2l0aFxuICAgIHwgRXZhbF9lcnJvciBfIGFzIGUgLT4gcmFpc2UgZVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwicGFyc2UtaW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHBhcnNlX2xlYWRpbmdfaW50IHMgPVxuICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICAgIGxldCBuZWcgPSBsZW4gPiAwICYmIHMuWzBdID0gJy0nIGluXG4gICAgICBpZiBuZWcgdGhlbiBzdGFydCA6PSAxXG4gICAgICBlbHNlIGlmIGxlbiA+IDAgJiYgcy5bMF0gPSAnKycgdGhlbiBzdGFydCA6PSAxO1xuICAgICAgbGV0IGogPSByZWYgIXN0YXJ0IGluXG4gICAgICB3aGlsZSAhaiA8IGxlbiAmJiBzLlshal0gPj0gJzAnICYmIHMuWyFqXSA8PSAnOScgZG8gaW5jciBqIGRvbmU7XG4gICAgICBpZiAhaiA+ICFzdGFydCB0aGVuXG4gICAgICAgIGxldCBuID0gaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzICFzdGFydCAoIWogLSAhc3RhcnQpKSBpblxuICAgICAgICBTb21lIChpZiBuZWcgdGhlbiAtbiBlbHNlIG4pXG4gICAgICBlbHNlIE5vbmVcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiAobWF0Y2ggcGFyc2VfbGVhZGluZ19pbnQgcyB3aXRoIFNvbWUgbiAtPiBJbnRlZ2VyIG4gfCBOb25lIC0+IE5pbClcbiAgICB8IFtTdHJpbmcgczsgZGVmYXVsdF92YWxdIC0+XG4gICAgICAobWF0Y2ggcGFyc2VfbGVhZGluZ19pbnQgcyB3aXRoIFNvbWUgbiAtPiBJbnRlZ2VyIG4gfCBOb25lIC0+IGRlZmF1bHRfdmFsKVxuICAgIHwgW0ludGVnZXIgbl0gfCBbSW50ZWdlciBuOyBfXSAtPiBJbnRlZ2VyIG5cbiAgICB8IFtOdW1iZXIgbl0gfCBbTnVtYmVyIG47IF9dIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCBuKVxuICAgIHwgW187IGRlZmF1bHRfdmFsXSAtPiBkZWZhdWx0X3ZhbFxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcInBhcnNlLWZsb2F0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IChtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgd2l0aCBTb21lIG4gLT4gTnVtYmVyIG4gfCBOb25lIC0+IE5pbClcbiAgICB8IFtOdW1iZXIgbl0gLT4gTnVtYmVyIG5cbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiA9PT0gQ29tcGFyaXNvbiA9PT0gKilcbiAgKCogU2FmZSBlcXVhbGl0eTogcGh5c2ljYWwgZXF1YWxpdHkgZm9yIHBvdGVudGlhbGx5LWNpcmN1bGFyIHR5cGVzXG4gICAgIChEaWN0LCBMYW1iZGEsIENvbXBvbmVudCwgSXNsYW5kLCBTaWduYWwsIE5hdGl2ZUZuKSxcbiAgICAgc3RydWN0dXJhbCBlcXVhbGl0eSBmb3IgYWN5Y2xpYyB0eXBlcyAoTnVtYmVyLCBTdHJpbmcsIEJvb2wsIGV0Yy4pLlxuICAgICBMaXN0cyBhcmUgY29tcGFyZWQgZWxlbWVudC13aXNlIHJlY3Vyc2l2ZWx5IHdpdGggdGhlIHNhbWUgc2FmZXR5LiAqKVxuICBsZXQgcmVjIHNhZmVfZXEgYSBiID1cbiAgICBpZiBhID09IGIgdGhlbiB0cnVlICAoKiBwaHlzaWNhbCBlcXVhbGl0eSBmYXN0IHBhdGggKilcbiAgICBlbHNlIG1hdGNoIGEsIGIgd2l0aFxuICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4geCA9IHlcbiAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiB4ID0geVxuICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4geCA9IGZsb2F0X29mX2ludCB5XG4gICAgfCBSYXRpb25hbChuLCBkKSwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGQgPSB5XG4gICAgfCBOdW1iZXIgeCwgUmF0aW9uYWwobiwgZCkgLT4geCA9IGZsb2F0X29mX2ludCBuIC8uIGZsb2F0X29mX2ludCBkXG4gICAgfCBSYXRpb25hbChhbiwgYWQpLCBSYXRpb25hbChibiwgYmQpIC0+IGFuICogYmQgPSBibiAqIGFkXG4gICAgfCBSYXRpb25hbChuLCBkKSwgSW50ZWdlciB5IC0+IG4gPSB5ICogZFxuICAgIHwgSW50ZWdlciB4LCBSYXRpb25hbChuLCBkKSAtPiB4ICogZCA9IG5cbiAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICAgIHwgQm9vbCB4LCBCb29sIHkgLT4geCA9IHlcbiAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICB8IFN5bWJvbCB4LCBTeW1ib2wgeSAtPiB4ID0geVxuICAgIHwgS2V5d29yZCB4LCBLZXl3b3JkIHkgLT4geCA9IHlcbiAgICB8IChMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfSksXG4gICAgICAoTGlzdCBsYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxiIH0pIC0+XG4gICAgICBMaXN0Lmxlbmd0aCBsYSA9IExpc3QubGVuZ3RoIGxiICYmXG4gICAgICBMaXN0LmZvcl9hbGwyIHNhZmVfZXEgbGEgbGJcbiAgICAoKiBEaWN0OiBfX2hvc3RfaGFuZGxlIGlkZW50aXR5IGZvciBET00td3JhcHBlZCBkaWN0czsgb3RoZXJ3aXNlXG4gICAgICAgc3RydWN0dXJhbCBlcXVhbGl0eSBvdmVyIGtleXMgKyB2YWx1ZXMuICopXG4gICAgfCBEaWN0IGEsIERpY3QgYiAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgYSBcIl9faG9zdF9oYW5kbGVcIiwgSGFzaHRibC5maW5kX29wdCBiIFwiX19ob3N0X2hhbmRsZVwiIHdpdGhcbiAgICAgICB8IFNvbWUgKE51bWJlciBoYSksIFNvbWUgKE51bWJlciBoYikgLT4gaGEgPSBoYlxuICAgICAgIHwgU29tZSBfLCBfIHwgXywgU29tZSBfIC0+IGZhbHNlXG4gICAgICAgfCBOb25lLCBOb25lIC0+XG4gICAgICAgICBIYXNodGJsLmxlbmd0aCBhID0gSGFzaHRibC5sZW5ndGggYiAmJlxuICAgICAgICAgKGxldCBlcSA9IHJlZiB0cnVlIGluXG4gICAgICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICAgICAgICBpZiAhZXEgdGhlblxuICAgICAgICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGIgayB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSB2JyAtPiBpZiBub3QgKHNhZmVfZXEgdiB2JykgdGhlbiBlcSA6PSBmYWxzZVxuICAgICAgICAgICAgICB8IE5vbmUgLT4gZXEgOj0gZmFsc2VcbiAgICAgICAgICApIGE7XG4gICAgICAgICAgIWVxKSlcbiAgICAoKiBSZWNvcmRzOiBzYW1lIHR5cGUgKyBzdHJ1Y3R1cmFsbHkgZXF1YWwgZmllbGRzICopXG4gICAgfCBSZWNvcmQgYSwgUmVjb3JkIGIgLT5cbiAgICAgIGEucl90eXBlLnJ0X3VpZCA9IGIucl90eXBlLnJ0X3VpZCAmJlxuICAgICAgQXJyYXkubGVuZ3RoIGEucl9maWVsZHMgPSBBcnJheS5sZW5ndGggYi5yX2ZpZWxkcyAmJlxuICAgICAgKGxldCBlcSA9IHJlZiB0cnVlIGluXG4gICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhLnJfZmllbGRzIC0gMSBkb1xuICAgICAgICAgaWYgbm90IChzYWZlX2VxIGEucl9maWVsZHMuKGkpIGIucl9maWVsZHMuKGkpKSB0aGVuIGVxIDo9IGZhbHNlXG4gICAgICAgZG9uZTsgIWVxKVxuICAgICgqIFBhcmFtZXRlcnM6IHNhbWUgVUlEID0gc2FtZSBwYXJhbWV0ZXIgKilcbiAgICB8IFBhcmFtZXRlciBhLCBQYXJhbWV0ZXIgYiAtPiBhLnBtX3VpZCA9IGIucG1fdWlkXG4gICAgKCogVmVjdG9yczogc2FtZSBsZW5ndGggKyBlbGVtZW50LXdpc2UgZXF1YWwgKilcbiAgICB8IFZlY3RvciBhLCBWZWN0b3IgYiAtPlxuICAgICAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJlxuICAgICAgKGxldCBlcSA9IHJlZiB0cnVlIGluXG4gICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICAgaWYgbm90IChzYWZlX2VxIGEuKGkpIGIuKGkpKSB0aGVuIGVxIDo9IGZhbHNlXG4gICAgICAgZG9uZTsgIWVxKVxuICAgICgqIExhbWJkYS9Db21wb25lbnQvSXNsYW5kL1NpZ25hbC9OYXRpdmVGbjogcGh5c2ljYWwgb25seSAqKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICByZWdpc3RlciBcIj1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPiBCb29sIChzYWZlX2VxIGEgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIiE9XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAobm90IChzYWZlX2VxIGEgYikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiIT06IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPCBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI8OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPiBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhID4gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI8PVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8PSBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhIDw9IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIjw9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj49XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhID49IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPj0gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPj06IDIgYXJnc1wiKSk7XG5cbiAgKCogPT09IExvZ2ljID09PSAqKVxuICByZWdpc3RlciBcIm5vdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAobm90IChzeF90cnV0aHkgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdDogMSBhcmdcIikpO1xuXG4gICgqID09PSBQcmVkaWNhdGVzID09PSAqKVxuICByZWdpc3RlciBcIm5pbD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGlzX25pbCBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJuaWw/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnVtYmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgX10gfCBbTnVtYmVyIF9dIHwgW1JhdGlvbmFsIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1iZXI/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW50ZWdlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW051bWJlciBmXSAtPiBCb29sIChGbG9hdC5pc19pbnRlZ2VyIGYpXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImludGVnZXI/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZmxvYXQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbG9hdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmc/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImJvb2xlYW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtCb29sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJvb2xlYW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRpY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IF9dIC0+IEJvb2wgdHJ1ZSB8IFtBZHRWYWx1ZSBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFkdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0FkdFZhbHVlIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFkdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzeW1ib2w/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTeW1ib2wgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImtleXdvcmQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtLZXl3b3JkIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImtleXdvcmQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZW1wdHk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBbXV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfV0gLT4gQm9vbCB0cnVlXG4gICAgfCBbTGlzdCBfXSB8IFtMaXN0UmVmIF9dIC0+IEJvb2wgZmFsc2VcbiAgICB8IFtTdHJpbmcgXCJcIl0gLT4gQm9vbCB0cnVlIHwgW1N0cmluZyBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbRGljdCBkXSAtPiBCb29sIChIYXNodGJsLmxlbmd0aCBkID0gMClcbiAgICB8IFtOaWxdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbXB0eT86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJvZGQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBhKSBtb2QgMiA8PiAwKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvZGQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXZlbj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGludF9vZl9mbG9hdCAoYXNfbnVtYmVyIGEpIG1vZCAyID0gMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZlbj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ6ZXJvP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPSAwLjApIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInplcm8/OiAxIGFyZ1wiKSk7XG5cbiAgKCogPT09IFN0cmluZ3MgPT09ICopXG4gIHJlZ2lzdGVyIFwic3RyXCIgKGZ1biBhcmdzIC0+IFN0cmluZyAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCB0b19zdHJpbmcgYXJncykpKTtcbiAgcmVnaXN0ZXIgXCJ1cHBlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVwcGVyOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidXBjYXNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidXBjYXNlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG93ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAoU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb3dlcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRvd25jYXNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZG93bmNhc2U6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0cmltXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy50cmltIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyaW06IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIChhc19zdHJpbmcgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWxlbmd0aDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZy1jb250YWlucz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgaGF5c3RhY2s7IFN0cmluZyBuZWVkbGVdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIG5lZWRsZSA+IFN0cmluZy5sZW5ndGggaGF5c3RhY2sgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGlmIFN0cmluZy5zdWIgaGF5c3RhY2sgaSAoU3RyaW5nLmxlbmd0aCBuZWVkbGUpID0gbmVlZGxlIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1jb250YWlucz86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN0YXJ0cy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgcHJlZml4XSAtPlxuICAgICAgQm9vbCAoU3RyaW5nLmxlbmd0aCBzID49IFN0cmluZy5sZW5ndGggcHJlZml4ICYmXG4gICAgICAgICAgICBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBwcmVmaXgpID0gcHJlZml4KVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJlbmRzLXdpdGg/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IFN0cmluZyBzdWZmaXhdIC0+XG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgYW5kIHhsID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggaW5cbiAgICAgIEJvb2wgKHNsID49IHhsICYmIFN0cmluZy5zdWIgcyAoc2wgLSB4bCkgeGwgPSBzdWZmaXgpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImluZGV4LW9mXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhheXN0YWNrOyBTdHJpbmcgbmVlZGxlXSAtPlxuICAgICAgbGV0IG5sID0gU3RyaW5nLmxlbmd0aCBuZWVkbGUgYW5kIGhsID0gU3RyaW5nLmxlbmd0aCBoYXlzdGFjayBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPVxuICAgICAgICBpZiBpICsgbmwgPiBobCB0aGVuIE51bWJlciAoLTEuMClcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIGhheXN0YWNrIGkgbmwgPSBuZWVkbGUgdGhlbiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gZmluZCAwXG4gICAgfCBbTGlzdCBpdGVtczsgdGFyZ2V0XSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9OyB0YXJnZXRdIC0+XG4gICAgICBsZXQgZXEgYSBiID0gbWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4geCA9IHlcbiAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IGZsb2F0X29mX2ludCB4ID0geVxuICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4geCA9IGZsb2F0X29mX2ludCB5XG4gICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5IHwgS2V5d29yZCB4LCBLZXl3b3JkIHkgLT4geCA9IHlcbiAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geSB8IE5pbCwgTmlsIC0+IHRydWUgfCBfIC0+IGEgPT0gYiBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IGggOjogXyB3aGVuIGVxIGggdGFyZ2V0IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpXG4gICAgICAgIHwgXyA6OiB0bCAtPiBmaW5kIChpICsgMSkgdGxcbiAgICAgIGluIGZpbmQgMCBpdGVtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluZGV4LW9mOiAyIHN0cmluZyBhcmdzIG9yIGxpc3QrdGFyZ2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzdWJzdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGFuZCBqID0gYXNfaW50IGVuZF92IGluXG4gICAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBsZW4pIGFuZCBqID0gbWF4IDAgKG1pbiBqIGxlbikgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgKG1heCAwIChqIC0gaSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN1YnN0cmluZzogMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdWJzdHJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgbGVuX3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGFuZCBuID0gYXNfaW50IGxlbl92IGluXG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBpID0gbWF4IDAgKG1pbiBpIHNsKSBpblxuICAgICAgbGV0IG4gPSBtYXggMCAobWluIG4gKHNsIC0gaSkpIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pXG4gICAgfCBbU3RyaW5nIHM7IHN0YXJ0X3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGluXG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBpID0gbWF4IDAgKG1pbiBpIHNsKSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAoc2wgLSBpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdWJzdHI6IDItMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgc2VwXSAtPlxuICAgICAgaWYgU3RyaW5nLmxlbmd0aCBzZXAgPSAxIHRoZW5cbiAgICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBwIC0+IFN0cmluZyBwKSAoU3RyaW5nLnNwbGl0X29uX2NoYXIgc2VwLlswXSBzKSlcbiAgICAgIGVsc2VcbiAgICAgICAgKCogTXVsdGktY2hhciBzZXBhcmF0b3I6IHVzZSBSZSBmb3IgbGl0ZXJhbCBzcGxpdCAqKVxuICAgICAgICBsZXQgcmUgPSBSZS5jb21waWxlIChSZS5zdHIgc2VwKSBpblxuICAgICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHAgLT4gU3RyaW5nIHApIChSZS5zcGxpdCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcGxpdDogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJqb2luXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNlcDsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIFN0cmluZyAoU3RyaW5nLmNvbmNhdCBzZXAgKExpc3QubWFwIHRvX3N0cmluZyBpdGVtcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiam9pbjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZXBsYWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHRvX3N0ciA9IGZ1bmN0aW9uXG4gICAgICB8IFN0cmluZyBzIC0+IHMgfCBTeEV4cHIgcyAtPiBzIHwgUmF3SFRNTCBzIC0+IHNcbiAgICAgIHwgS2V5d29yZCBrIC0+IGsgfCBTeW1ib2wgcyAtPiBzXG4gICAgICB8IE5pbCAtPiBcIlwiIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgICAgIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICAgICAgfCBOdW1iZXIgbiAtPiBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbikgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICAgICAgfCBUaHVuayBfIGFzIHQgLT4gKG1hdGNoICFfc3hfdHJhbXBvbGluZV9mbiB0IHdpdGggU3RyaW5nIHMgLT4gcyB8IHYgLT4gdG9fc3RyaW5nIHYpXG4gICAgICB8IHYgLT4gdG9fc3RyaW5nIHZcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3M7IG9sZF9zOyBuZXdfc10gLT5cbiAgICAgIGxldCBzID0gdG9fc3RyIHMgYW5kIG9sZF9zID0gdG9fc3RyIG9sZF9zIGFuZCBuZXdfcyA9IHRvX3N0ciBuZXdfcyBpblxuICAgICAgbGV0IG9sID0gU3RyaW5nLmxlbmd0aCBvbGRfcyBpblxuICAgICAgaWYgb2wgPSAwIHRoZW4gU3RyaW5nIHNcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICAgICAgbGV0IHJlYyBnbyBpID1cbiAgICAgICAgICBpZiBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuICgpXG4gICAgICAgICAgZWxzZSBpZiBpICsgb2wgPD0gU3RyaW5nLmxlbmd0aCBzICYmIFN0cmluZy5zdWIgcyBpIG9sID0gb2xkX3MgdGhlbiBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG5ld19zO1xuICAgICAgICAgICAgZ28gKGkgKyBvbClcbiAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLltpXTtcbiAgICAgICAgICAgIGdvIChpICsgMSlcbiAgICAgICAgICBlbmRcbiAgICAgICAgaW4gZ28gMDtcbiAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgICAgZW5kXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVwbGFjZTogMyBzdHJpbmcgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1mcm9tLWNvZGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthXSAtPlxuICAgICAgbGV0IG4gPSBhc19pbnQgYSBpblxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNCBpblxuICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciBidWYgKFVjaGFyLm9mX2ludCBuKTtcbiAgICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWZyb20tY29kZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNoYXItYXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgbl0gLT5cbiAgICAgIGxldCBpID0gYXNfaW50IG4gaW5cbiAgICAgIGlmIGkgPj0gMCAmJiBpIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgICAgU3RyaW5nIChTdHJpbmcubWFrZSAxIHMuW2ldKVxuICAgICAgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWF0OiBzdHJpbmcgYW5kIGluZGV4XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWNvZGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gd2hlbiBTdHJpbmcubGVuZ3RoIHMgPiAwIC0+IEludGVnZXIgKENoYXIuY29kZSBzLlswXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNvZGU6IDEgbm9uLWVtcHR5IHN0cmluZyBhcmdcIikpO1xuICByZWdpc3RlciBcInBhcnNlLW51bWJlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgbGV0IGhhc19kZWMgPSBTdHJpbmcuY29udGFpbnMgcyAnLicgaW5cbiAgICAgIGxldCBoYXNfZXhwID0gU3RyaW5nLmNvbnRhaW5zIHMgJ2UnIHx8IFN0cmluZy5jb250YWlucyBzICdFJyBpblxuICAgICAgaWYgaGFzX2RlYyB8fCBoYXNfZXhwIHRoZW5cbiAgICAgICAgKHRyeSBOdW1iZXIgKGZsb2F0X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOaWwpXG4gICAgICBlbHNlXG4gICAgICAgIChtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBzIHdpdGhcbiAgICAgICAgIHwgU29tZSBuIC0+IEludGVnZXIgblxuICAgICAgICAgfCBOb25lIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTmlsKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJzZS1udW1iZXI6IDEgc3RyaW5nIGFyZ1wiKSk7XG5cbiAgKCogPT09IFJlZ2V4IChQQ1JFLWNvbXBhdGlibGUg4oCUIHNhbWUgc3ludGF4IGFzIEpTIFJlZ0V4cCkgPT09ICopXG4gIHJlZ2lzdGVyIFwicmVnZXgtbWF0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5QY3JlLnJlIHBhdHRlcm4gfD4gUmUuY29tcGlsZSBpblxuICAgICAgICBtYXRjaCBSZS5leGVjX29wdCByZSBpbnB1dCB3aXRoXG4gICAgICAgIHwgU29tZSBncm91cCAtPlxuICAgICAgICAgIGxldCBmdWxsID0gUmUuR3JvdXAuZ2V0IGdyb3VwIDAgaW5cbiAgICAgICAgICBsZXQgbiA9IFJlLkdyb3VwLm5iX2dyb3VwcyBncm91cCBpblxuICAgICAgICAgIGxldCBncm91cHMgPSByZWYgW1N0cmluZyBmdWxsXSBpblxuICAgICAgICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgICAgICAgKHRyeSBncm91cHMgOj0gIWdyb3VwcyBAIFtTdHJpbmcgKFJlLkdyb3VwLmdldCBncm91cCBpKV1cbiAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiBncm91cHMgOj0gIWdyb3VwcyBAIFtOaWxdKVxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgTGlzdCAhZ3JvdXBzXG4gICAgICAgIHwgTm9uZSAtPiBOaWxcbiAgICAgICB3aXRoIF8gLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LW1hdGNoOiBwYXR0ZXJuIGFuZCBpbnB1dCBzdHJpbmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1tYXRjaD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeSBCb29sIChSZS5leGVjcCAoUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUpIGlucHV0KVxuICAgICAgIHdpdGggXyAtPiBCb29sIGZhbHNlKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LW1hdGNoPzogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtZmluZC1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5QY3JlLnJlIHBhdHRlcm4gfD4gUmUuY29tcGlsZSBpblxuICAgICAgICBsZXQgbWF0Y2hlcyA9IFJlLmFsbCByZSBpbnB1dCBpblxuICAgICAgICBsZXQgcmVzdWx0cyA9IExpc3QubWFwIChmdW4gZ3JvdXAgLT5cbiAgICAgICAgICAoKiBJZiB0aGVyZSdzIGEgY2FwdHVyZSBncm91cCwgcmV0dXJuIGdyb3VwIDE7IGVsc2UgZnVsbCBtYXRjaCAqKVxuICAgICAgICAgIHRyeSBTdHJpbmcgKFJlLkdyb3VwLmdldCBncm91cCAxKVxuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFN0cmluZyAoUmUuR3JvdXAuZ2V0IGdyb3VwIDApXG4gICAgICAgICkgbWF0Y2hlcyBpblxuICAgICAgICBMaXN0UmVmIChyZWYgcmVzdWx0cylcbiAgICAgICB3aXRoIF8gLT4gTGlzdFJlZiAocmVmIFtdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1maW5kLWFsbDogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgU3RyaW5nIChSZS5yZXBsYWNlX3N0cmluZyByZSB+Ynk6cmVwbGFjZW1lbnQgaW5wdXQpXG4gICAgICAgd2l0aCBfIC0+IFN0cmluZyBpbnB1dClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlOiBwYXR0ZXJuLCByZXBsYWNlbWVudCwgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZS1maXJzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgKCogUmUgZG9lc24ndCBoYXZlIHJlcGxhY2VfZmlyc3QsIHNvIHVzZSBhbGwgbWF0Y2hlcyBhbmQgcmVwbGFjZSBvbmx5IGZpcnN0ICopXG4gICAgICAgIG1hdGNoIFJlLmV4ZWNfb3B0IHJlIGlucHV0IHdpdGhcbiAgICAgICAgfCBTb21lIGdyb3VwIC0+XG4gICAgICAgICAgbGV0IHN0YXJ0ID0gUmUuR3JvdXAuc3RhcnQgZ3JvdXAgMCBhbmQgc3RvcCA9IFJlLkdyb3VwLnN0b3AgZ3JvdXAgMCBpblxuICAgICAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBpbnB1dCAwIHN0YXJ0IF4gcmVwbGFjZW1lbnQgXlxuICAgICAgICAgICAgICAgICAgU3RyaW5nLnN1YiBpbnB1dCBzdG9wIChTdHJpbmcubGVuZ3RoIGlucHV0IC0gc3RvcCkpXG4gICAgICAgIHwgTm9uZSAtPiBTdHJpbmcgaW5wdXRcbiAgICAgICB3aXRoIF8gLT4gU3RyaW5nIGlucHV0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXJlcGxhY2UtZmlyc3Q6IHBhdHRlcm4sIHJlcGxhY2VtZW50LCBpbnB1dCBzdHJpbmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1zcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgaW5wdXRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgIExpc3RSZWYgKHJlZiAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSAoUmUuc3BsaXQgcmUgaW5wdXQpKSlcbiAgICAgICB3aXRoIF8gLT4gTGlzdFJlZiAocmVmIFtTdHJpbmcgaW5wdXRdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zcGxpdDogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG5cbiAgKCogPT09IENvbGxlY3Rpb25zID09PSAqKVxuICByZWdpc3RlciBcImxpc3RcIiAoZnVuIGFyZ3MgLT4gTGlzdFJlZiAocmVmIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCJsZW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggbClcbiAgICB8IFtTdHJpbmcgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgIHwgW0RpY3QgZF0gLT4gSW50ZWdlciAoSGFzaHRibC5sZW5ndGggZClcbiAgICB8IFtOaWxdIHwgW0Jvb2wgZmFsc2VdIC0+IEludGVnZXIgMFxuICAgIHwgW0Jvb2wgdHJ1ZV0gLT4gSW50ZWdlciAxXG4gICAgfCBbTnVtYmVyIF9dIHwgW0ludGVnZXIgX10gLT4gSW50ZWdlciAxXG4gICAgfCBbUmF3SFRNTCBzXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gICAgfCBbU3hFeHByIHNdIC0+IEludGVnZXIgKFN0cmluZy5sZW5ndGggcylcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoIHBhaXJzKVxuICAgIHwgW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gfCBbTGFtYmRhIF9dIHwgW05hdGl2ZUZuIF9dXG4gICAgfCBbTWFjcm8gX10gfCBbVGh1bmsgX10gfCBbS2V5d29yZCBfXSB8IFtTeW1ib2wgX10gLT4gSW50ZWdlciAwXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImxlbjogJWQgYXJnc1wiXG4gICAgICAgIChMaXN0Lmxlbmd0aCBhcmdzKSkpKTtcbiAgcmVnaXN0ZXIgXCJsZW5ndGhcIiAoSGFzaHRibC5maW5kIHByaW1pdGl2ZXMgXCJsZW5cIik7XG4gIHJlZ2lzdGVyIFwiZmlyc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0ICh4IDo6IF8pXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfV0gLT4geFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IE5pbCB8IFtOaWxdIC0+IE5pbFxuICAgIHwgW3hdIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpcnN0OiBleHBlY3RlZCBsaXN0LCBnb3QgXCIgXiBpbnNwZWN0IHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpcnN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoXyA6OiB4cyldIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfV0gLT4gTGlzdCB4c1xuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IExpc3QgW10gfCBbTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGFzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPlxuICAgICAgKG1hdGNoIExpc3QucmV2IGwgd2l0aCB4IDo6IF8gLT4geCB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsYXN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbml0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+XG4gICAgICAobWF0Y2ggTGlzdC5yZXYgbCB3aXRoIF8gOjogcmVzdCAtPiBMaXN0IChMaXN0LnJldiByZXN0KSB8IFtdIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5pdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnRoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBuXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IG5dIC0+XG4gICAgICAodHJ5IExpc3QubnRoIGwgKGFzX2ludCBuKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBuXSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgbiBpblxuICAgICAgaWYgaSA+PSAwICYmIGkgPCBTdHJpbmcubGVuZ3RoIHMgdGhlbiBTdHJpbmcgKFN0cmluZy5tYWtlIDEgcy5baV0pXG4gICAgICBlbHNlIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm50aDogbGlzdC9zdHJpbmcgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY29uc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3g7IExpc3QgbF0gfCBbeDsgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0ICh4IDo6IGwpXG4gICAgfCBbeDsgTmlsXSAtPiBMaXN0IFt4XVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNvbnM6IHZhbHVlIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJhcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfTsgTGlzdCBsYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxiIH1dIC0+XG4gICAgICBMaXN0IChsYSBAIGxiKVxuICAgIHwgW0xpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9OyBOaWxdIC0+IExpc3QgbGFcbiAgICB8IFtOaWw7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IGxiXG4gICAgfCBbTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH07IHZdIC0+IExpc3QgKGxhIEAgW3ZdKVxuICAgIHwgW3Y7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IChbdl0gQCBsYilcbiAgICB8IF8gLT5cbiAgICAgIGxldCBhbGwgPSBMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzIGluXG4gICAgICBMaXN0IGFsbCk7XG4gIHJlZ2lzdGVyIFwiYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgaXRlbV0gLT4gciA6PSAhciBAIFtpdGVtXTsgTGlzdFJlZiByXG4gICAgfCBbTGlzdCBpdGVtczsgaXRlbV0gLT4gTGlzdCAoaXRlbXMgQCBbaXRlbV0pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwZW5kITogbGlzdCBhbmQgaXRlbVwiKSk7XG4gIHJlZ2lzdGVyIFwicmV2ZXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0IChMaXN0LnJldiBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJldmVyc2U6IDEgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiZmxhdHRlblwiIChmdW4gYXJncyAtPlxuICAgIGxldCByZWMgZmxhdCA9IGZ1bmN0aW9uXG4gICAgICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+IExpc3QuY29uY2F0X21hcCBmbGF0IGl0ZW1zXG4gICAgICB8IHggLT4gW3hdXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5jb25jYXRfbWFwIGZsYXQgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbGF0dGVuOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcImNvbmNhdFwiIChmdW4gYXJncyAtPiBMaXN0IChMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwiY29udGFpbnM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBpdGVtXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IGl0ZW1dIC0+XG4gICAgICAoKiBQaHlzaWNhbCBlcXVhbGl0eSBmaXJzdCAoaGFuZGxlcyBzaWduYWxzL2RpY3RzL2Nsb3N1cmVzIHNhZmVseSksXG4gICAgICAgICBzdHJ1Y3R1cmFsIGZhbGxiYWNrIG9ubHkgZm9yIGFjeWNsaWMgdHlwZXMgKHN0cmluZy9udW1iZXIvYm9vbC9uaWwvc3ltYm9sL2tleXdvcmQpICopXG4gICAgICBsZXQgc2FmZV9lcSBhIGIgPVxuICAgICAgICBhID09IGIgfHxcbiAgICAgICAgKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiB4ID0geVxuICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiB4ID0gZmxvYXRfb2ZfaW50IHlcbiAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgICAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgICAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5XG4gICAgICAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgICAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGEgXCJfX2hvc3RfaGFuZGxlXCIsIEhhc2h0YmwuZmluZF9vcHQgYiBcIl9faG9zdF9oYW5kbGVcIiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKE51bWJlciBoYSksIFNvbWUgKE51bWJlciBoYikgLT4gaGEgPSBoYlxuICAgICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgaW5cbiAgICAgIEJvb2wgKExpc3QuZXhpc3RzIChmdW4geCAtPiBzYWZlX2VxIHggaXRlbSkgbClcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHN1Yl0gLT5cbiAgICAgIGxldCByZWMgZmluZCBpID1cbiAgICAgICAgaWYgaSArIFN0cmluZy5sZW5ndGggc3ViID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIHMgaSAoU3RyaW5nLmxlbmd0aCBzdWIpID0gc3ViIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgW0RpY3QgZDsga2V5XSAtPlxuICAgICAgKCogRGljdHM6IGtleSBjaGVjayAocGVyIHRoZSBzcGVjIGRvYykuIEtleXdvcmRzIGV2YWx1YXRlIHRvIHRoZWlyXG4gICAgICAgICBzdHJpbmcgbmFtZSwgc28gKGNvbnRhaW5zPyB7OmEgMX0gOmEpIGFycml2ZXMgYXMgU3RyaW5nIFwiYVwiLiAqKVxuICAgICAgKG1hdGNoIGtleSB3aXRoXG4gICAgICAgfCBTdHJpbmcgayB8IEtleXdvcmQgayB8IFN5bWJvbCBrIC0+IEJvb2wgKEhhc2h0YmwubWVtIGQgaylcbiAgICAgICB8IF8gLT4gQm9vbCBmYWxzZSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb250YWlucz86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmFuZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtzdG9wX3ZdIC0+XG4gICAgICBsZXQgbiA9IGFzX2ludCBzdG9wX3YgaW5cbiAgICAgIExpc3QgKExpc3QuaW5pdCAobWF4IDAgbikgKGZ1biBpIC0+IEludGVnZXIgaSkpXG4gICAgfCBbc3RhcnRfdjsgc3RvcF92XSAtPlxuICAgICAgbGV0IHMgPSBhc19pbnQgc3RhcnRfdiBhbmQgZSA9IGFzX2ludCBzdG9wX3YgaW5cbiAgICAgIGxldCBsZW4gPSBtYXggMCAoZSAtIHMpIGluXG4gICAgICBMaXN0IChMaXN0LmluaXQgbGVuIChmdW4gaSAtPiBJbnRlZ2VyIChzICsgaSkpKVxuICAgIHwgW3N0YXJ0X3Y7IHN0b3Bfdjsgc3RlcF92XSAtPlxuICAgICAgKG1hdGNoIHN0YXJ0X3YsIHN0b3Bfdiwgc3RlcF92IHdpdGhcbiAgICAgICB8IEludGVnZXIgcywgSW50ZWdlciBlLCBJbnRlZ2VyIHN0IC0+XG4gICAgICAgICBpZiBzdCA9IDAgdGhlbiBMaXN0IFtdXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICAgICAgICAgICBsZXQgaSA9IHJlZiBzIGluXG4gICAgICAgICAgIGlmIHN0ID4gMCB0aGVuXG4gICAgICAgICAgICAgKHdoaWxlICFpIDwgZSBkbyBpdGVtcyA6PSBJbnRlZ2VyICFpIDo6ICFpdGVtczsgaSA6PSAhaSArIHN0IGRvbmUpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAod2hpbGUgIWkgPiBlIGRvIGl0ZW1zIDo9IEludGVnZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsgc3QgZG9uZSk7XG4gICAgICAgICAgIExpc3QgKExpc3QucmV2ICFpdGVtcylcbiAgICAgICB8IF8gLT5cbiAgICAgICAgIGxldCBzID0gYXNfbnVtYmVyIHN0YXJ0X3YgYW5kIGUgPSBhc19udW1iZXIgc3RvcF92IGFuZCBzdCA9IGFzX251bWJlciBzdGVwX3YgaW5cbiAgICAgICAgIGlmIHN0ID0gMC4wIHRoZW4gTGlzdCBbXVxuICAgICAgICAgZWxzZVxuICAgICAgICAgICBsZXQgaXRlbXMgPSByZWYgW10gaW5cbiAgICAgICAgICAgbGV0IGkgPSByZWYgcyBpblxuICAgICAgICAgICBpZiBzdCA+IDAuMCB0aGVuXG4gICAgICAgICAgICAgKHdoaWxlICFpIDwgZSBkbyBpdGVtcyA6PSBOdW1iZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsuIHN0IGRvbmUpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAod2hpbGUgIWkgPiBlIGRvIGl0ZW1zIDo9IE51bWJlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKy4gc3QgZG9uZSk7XG4gICAgICAgICAgIExpc3QgKExpc3QucmV2ICFpdGVtcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmFuZ2U6IDEtMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzbGljZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBzdGFydF92XSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoYXNfaW50IHN0YXJ0X3YpIGluXG4gICAgICBsZXQgcmVjIGRyb3AgbiA9IGZ1bmN0aW9uIF8gOjogeHMgd2hlbiBuID4gMCAtPiBkcm9wIChuLTEpIHhzIHwgbCAtPiBsIGluXG4gICAgICBMaXN0IChkcm9wIGkgbClcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChhc19pbnQgc3RhcnRfdikgYW5kIGogPSBhc19pbnQgZW5kX3YgaW5cbiAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICBsZXQgaiA9IG1pbiBqIGxlbiBpblxuICAgICAgbGV0IHJlYyB0YWtlX3JhbmdlIGlkeCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW11cbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgaWYgaWR4ID49IGogdGhlbiBbXVxuICAgICAgICAgIGVsc2UgaWYgaWR4ID49IGkgdGhlbiB4IDo6IHRha2VfcmFuZ2UgKGlkeCsxKSB4c1xuICAgICAgICAgIGVsc2UgdGFrZV9yYW5nZSAoaWR4KzEpIHhzXG4gICAgICBpbiBMaXN0ICh0YWtlX3JhbmdlIDAgbClcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdl0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGFzX2ludCBzdGFydF92KSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKFN0cmluZy5sZW5ndGggcyAtIGkpKSlcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChhc19pbnQgc3RhcnRfdikgYW5kIGogPSBhc19pbnQgZW5kX3YgaW5cbiAgICAgIGxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGogPSBtaW4gaiBzbCBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKGogLSBpKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2xpY2U6IDItMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzb3J0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IExpc3QgKExpc3Quc29ydCBjb21wYXJlIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ydDogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGxhID0gYXNfbGlzdCBhIGFuZCBsYiA9IGFzX2xpc3QgYiBpblxuICAgICAgbGV0IHJlYyBnbyBsMSBsMiBhY2MgPSBtYXRjaCBsMSwgbDIgd2l0aFxuICAgICAgICB8IHggOjogeHMsIHkgOjogeXMgLT4gZ28geHMgeXMgKExpc3QgW3g7IHldIDo6IGFjYylcbiAgICAgICAgfCBfIC0+IExpc3QucmV2IGFjY1xuICAgICAgaW4gTGlzdCAoZ28gbGEgbGIgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiemlwOiAyIGxpc3RzXCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXAtcGFpcnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPlxuICAgICAgbGV0IGwgPSBhc19saXN0IHYgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IGEgOjogYiA6OiByZXN0IC0+IExpc3QgW2E7IGJdIDo6IGdvIHJlc3RcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInppcC1wYWlyczogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ0YWtlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IG5dIC0+XG4gICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgfCB4IDo6IHhzIHdoZW4gaSA+IDAgLT4geCA6OiB0YWtlX24gKGktMSkgeHNcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0ICh0YWtlX24gKGFzX2ludCBuKSBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRha2U6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiZHJvcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBuXSAtPlxuICAgICAgbGV0IHJlYyBkcm9wX24gaSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgXyA6OiB4cyB3aGVuIGkgPiAwIC0+IGRyb3BfbiAoaS0xKSB4c1xuICAgICAgICB8IGwgLT4gbFxuICAgICAgaW4gTGlzdCAoZHJvcF9uIChhc19pbnQgbikgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkcm9wOiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcImNodW5rLWV2ZXJ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IG5dIC0+XG4gICAgICBsZXQgc2l6ZSA9IGFzX2ludCBuIGluXG4gICAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbXVxuICAgICAgICB8IGwgLT5cbiAgICAgICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgeCA6OiB4cyB3aGVuIGkgPiAwIC0+IHggOjogdGFrZV9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IF8gLT4gW11cbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCByZWMgZHJvcF9uIGkgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBfIDo6IHhzIHdoZW4gaSA+IDAgLT4gZHJvcF9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IGwgLT4gbFxuICAgICAgICAgIGluXG4gICAgICAgICAgTGlzdCAodGFrZV9uIHNpemUgbCkgOjogZ28gKGRyb3BfbiBzaXplIGwpXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNodW5rLWV2ZXJ5OiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcInVuaXF1ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pXSAtPlxuICAgICAgbGV0IHNlZW4gPSBIYXNodGJsLmNyZWF0ZSAxNiBpblxuICAgICAgbGV0IHJlc3VsdCA9IExpc3QuZmlsdGVyIChmdW4geCAtPlxuICAgICAgICBsZXQga2V5ID0gaW5zcGVjdCB4IGluXG4gICAgICAgIGlmIEhhc2h0YmwubWVtIHNlZW4ga2V5IHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSAoSGFzaHRibC5yZXBsYWNlIHNlZW4ga2V5IHRydWU7IHRydWUpXG4gICAgICApIGwgaW5cbiAgICAgIExpc3QgcmVzdWx0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidW5pcXVlOiAxIGxpc3RcIikpO1xuXG4gICgqID09PSBEaWN0ID09PSAqKVxuICByZWdpc3RlciBcImRpY3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBEaWN0IGRcbiAgICAgIHwgS2V5d29yZCBrIDo6IHYgOjogcmVzdCAtPiBkaWN0X3NldCBkIGsgdjsgZ28gcmVzdFxuICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gZGljdF9zZXQgZCBrIHY7IGdvIHJlc3RcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Q6IHBhaXJzIG9mIGtleSB2YWx1ZVwiKVxuICAgIGluIGdvIGFyZ3MpO1xuICByZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IFtMaXN0IGw7IG5dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfTsgbl1cbiAgICAgICAgd2hlbiAobWF0Y2ggbiB3aXRoIE51bWJlciBfIHwgSW50ZWdlciBfIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgKHRyeSBMaXN0Lm50aCBsIChhc19pbnQgbikgd2l0aCBfIC0+IE5pbClcbiAgICB8IFtOaWw7IF9dIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgICB8IFtfOyBfXSAtPiBOaWwgICAgKCogdHlwZSBtaXNtYXRjaCDihpIgbmlsIChtYXRjaGVzIEpTL1B5dGhvbiBiZWhhdmlvcikgKilcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJoYXMta2V5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IEJvb2wgKGRpY3RfaGFzIGQgaylcbiAgICB8IFtEaWN0IGQ7IEtleXdvcmQga10gLT4gQm9vbCAoZGljdF9oYXMgZCBrKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhcy1rZXk/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImFzc29jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBEaWN0IGQgOjogcmVzdCAtPlxuICAgICAgbGV0IGQyID0gSGFzaHRibC5jb3B5IGQgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IERpY3QgZDJcbiAgICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IEtleXdvcmQgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogcGFpcnNcIilcbiAgICAgIGluIGdvIHJlc3RcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogZGljdCArIHBhaXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNzb2NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IERpY3QgZCA6OiBrZXlzIC0+XG4gICAgICBsZXQgZDIgPSBIYXNodGJsLmNvcHkgZCBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gayAtPiBIYXNodGJsLnJlbW92ZSBkMiAodG9fc3RyaW5nIGspKSBrZXlzO1xuICAgICAgRGljdCBkMlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpc3NvYzogZGljdCArIGtleXNcIikpO1xuICByZWdpc3RlciBcIm1lcmdlXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8IERpY3Qgc3JjIC0+IEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgZCBrIHYpIHNyY1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWVyZ2U6IGFsbCBhcmdzIG11c3QgYmUgZGljdHNcIilcbiAgICApIGFyZ3M7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJrZXlzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IExpc3QgKGRpY3Rfa2V5cyBkKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXlzOiAxIGRpY3RcIikpO1xuICByZWdpc3RlciBcInZhbHNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gTGlzdCAoZGljdF92YWxzIGQpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZhbHM6IDEgZGljdFwiKSk7XG4gIHJlZ2lzdGVyIFwibXV0YWJsZS1saXN0XCIgKGZ1biBfYXJncyAtPiBMaXN0UmVmIChyZWYgW10pKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbnRoIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgaWR4OyB2XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgaWR4IGluXG4gICAgICBsZXQgbCA9ICFyIGluXG4gICAgICByIDo9IExpc3QubWFwaSAoZnVuIGogeCAtPiBpZiBqID0gaSB0aGVuIHYgZWxzZSB4KSBsO1xuICAgICAgTmlsXG4gICAgfCBbTGlzdCBfOyBfOyBfXSAtPlxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbnRoITogbGlzdCBpcyBpbW11dGFibGUsIHVzZSBMaXN0UmVmXCIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW50aCE6IGV4cGVjdGVkIChsaXN0IGlkeCB2YWwpXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Qtc2V0ITogZGljdCBrZXkgdmFsXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWdldDogZGljdCBhbmQga2V5XCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWhhcz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrXSAtPiBCb29sIChkaWN0X2hhcyBkIGspXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1oYXM/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImRpY3QtZGVsZXRlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZGVsZXRlIGQgazsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1kZWxldGUhOiBkaWN0IGFuZCBrZXlcIikpO1xuXG4gICgqID09PSBNaXNjID09PSAqKVxuICByZWdpc3RlciBcInR5cGUtb2ZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAodHlwZV9vZiBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0eXBlLW9mOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5zcGVjdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChpbnNwZWN0IGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluc3BlY3Q6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXJpYWxpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEV4cHIgc10gLT4gU3RyaW5nIHNcbiAgICB8IFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPlxuICAgICAgKCogU2VyaWFsaXplIHNwcmVhZCB2YWx1ZXMgYXMgKG1ha2Utc3ByZWFkIHs6a2V5IFwidmFsXCIgLi4ufSkgKilcbiAgICAgIGxldCBkaWN0X3BhcnRzID0gTGlzdC5tYXAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCI6JXMgJXNcIiBrIChpbnNwZWN0IHYpKSBwYWlycyBpblxuICAgICAgU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIihtYWtlLXNwcmVhZCB7JXN9KVwiIChTdHJpbmcuY29uY2F0IFwiIFwiIGRpY3RfcGFydHMpKVxuICAgIHwgW0NvbXBvbmVudCBjXSAtPlxuICAgICAgKCogU2VyaWFsaXplIGNvbXBvbmVudCB2YWx1ZXMgYXMgdGhlaXIgfm5hbWUgcmVmZXJlbmNlICopXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwifiVzXCIgYy5jX25hbWUpXG4gICAgfCBbSXNsYW5kIGldIC0+XG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwifiVzXCIgaS5pX25hbWUpXG4gICAgfCBbTGFtYmRhIF9dIC0+IFN0cmluZyBcIjxsYW1iZGE+XCJcbiAgICB8IFtSZWNvcmQgcl0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiM8JXM+XCIgci5yX3R5cGUucnRfbmFtZSlcbiAgICB8IFtQYXJhbWV0ZXIgcF0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiM8cGFyYW1ldGVyICVzPlwiIHAucG1fdWlkKVxuICAgIHwgW1ZlY3RvciBhcnJdIC0+XG4gICAgICBsZXQgZWx0cyA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIHYgLT4gaW5zcGVjdCB2KSBhcnIpIGluXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiIyglcylcIiAoU3RyaW5nLmNvbmNhdCBcIiBcIiBlbHRzKSlcbiAgICB8IFthXSAtPiBTdHJpbmcgKGluc3BlY3QgYSkgICgqIHVzZWQgZm9yIGRlZHVwIGtleXMgaW4gY29tcGlsZXIgKilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXJpYWxpemU6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXN5bWJvbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBTeW1ib2wgc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ltYm9sOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcImVycm9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgbXNnXSAtPiByYWlzZSAoRXZhbF9lcnJvciBtc2cpXG4gICAgfCBbYV0gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKHRvX3N0cmluZyBhKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlcnJvcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImhvc3QtZXJyb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBtc2ddIC0+IHJhaXNlIChFdmFsX2Vycm9yIG1zZylcbiAgICB8IFthXSAtPiByYWlzZSAoRXZhbF9lcnJvciAodG9fc3RyaW5nIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhvc3QtZXJyb3I6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJob3N0LXdhcm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbXNnXSAtPiBwcmVycl9lbmRsaW5lIG1zZzsgTmlsXG4gICAgfCBbYV0gLT4gcHJlcnJfZW5kbGluZSAodG9fc3RyaW5nIGEpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJob3N0LXdhcm46IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0cnktY2F0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0cnlfZm47IGNhdGNoX2ZuXSAtPlxuICAgICAgKHRyeSAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiB0cnlfZm4gW10pXG4gICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gY2F0Y2hfZm4gW1N0cmluZyBtc2ddKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cnktY2F0Y2g6IGV4cGVjdGVkICh0cnktZm4gY2F0Y2gtZm4pXCIpKTtcbiAgKCogY2xpZW50PyDigJQgZmFsc2UgYnkgZGVmYXVsdCAoc2VydmVyKTsgc3hfYnJvd3Nlci5tbCBzZXRzIF9pc19jbGllbnQgOj0gdHJ1ZSAqKVxuICByZWdpc3RlciBcImNsaWVudD9cIiAoZnVuIF9hcmdzIC0+IEJvb2wgIV9pc19jbGllbnQpO1xuICAoKiBOYW1lZCBzdG9yZXMg4oCUIGdsb2JhbCBtdXRhYmxlIHJlZ2lzdHJ5LCBieXBhc3NlcyBlbnYgc2NvcGluZyBpc3N1ZXMgKilcbiAgbGV0IHN0b3JlX3JlZ2lzdHJ5IDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gIHJlZ2lzdGVyIFwiZGVmLXN0b3JlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IGluaXRfZm5dIC0+XG4gICAgICBpZiBub3QgKEhhc2h0YmwubWVtIHN0b3JlX3JlZ2lzdHJ5IG5hbWUpIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHN0b3JlID0gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gaW5pdF9mbiBbXSkgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHN0b3JlX3JlZ2lzdHJ5IG5hbWUgc3RvcmVcbiAgICAgIGVuZDtcbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN0b3JlX3JlZ2lzdHJ5IG5hbWUgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlZi1zdG9yZTogZXhwZWN0ZWQgKG5hbWUgaW5pdC1mbilcIikpO1xuICByZWdpc3RlciBcInVzZS1zdG9yZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgc3RvcmVfcmVnaXN0cnkgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJTdG9yZSBub3QgZm91bmQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVzZS1zdG9yZTogZXhwZWN0ZWQgKG5hbWUpXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbGVhci1zdG9yZXNcIiAoZnVuIF9hcmdzIC0+IEhhc2h0YmwuY2xlYXIgc3RvcmVfcmVnaXN0cnk7IE5pbCk7XG4gICgqIFNTUiBzdHVicyDigJQgcmVzb3VyY2UgcmV0dXJucyBsb2FkaW5nIHN0YXRlIG9uIHNlcnZlci5cbiAgICAgTk9URTogZWZmZWN0IGFuZCByZWdpc3Rlci1pbi1zY29wZSBtdXN0IE5PVCBiZSByZWdpc3RlcmVkIGFzIHByaW1pdGl2ZXNcbiAgICAgaGVyZSDigJQgdGhlIGJ5dGVjb2RlIGNvbXBpbGVyIHVzZXMgcHJpbWl0aXZlPyB0byBkZWNpZGUgQ0FMTF9QUklNIHZzXG4gICAgIEdMT0JBTF9HRVQrQ0FMTC4gSWYgZWZmZWN0IGlzIGEgcHJpbWl0aXZlLCBieXRlY29kZWQgbW9kdWxlcyBlbWl0XG4gICAgIENBTExfUFJJTSB3aGljaCByZXR1cm5zIE5pbCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIHJlYWwgZWZmZWN0IGZ1bmN0aW9uXG4gICAgIGZyb20gY29yZS1zaWduYWxzLnN4LiBUaGUgc2VydmVyIG92ZXJyaWRlcyBlZmZlY3QgaW4gc3hfc2VydmVyLm1sIHZpYVxuICAgICBlbnZfYmluZCBBRlRFUiBjb21waWxhdGlvbi4gKilcbiAgKCogcmVnaXN0ZXIgXCJlZmZlY3RcIiDigJQgUkVNT1ZFRDogc2VlIG5vdGUgYWJvdmUgKilcbiAgKCogcmVnaXN0ZXIgXCJyZWdpc3Rlci1pbi1zY29wZVwiIOKAlCBSRU1PVkVEOiBzZWUgbm90ZSBhYm92ZSAqKVxuICAoKiByZXNvdXJjZSDigJQgU1NSIHN0dWI6IHJldHVybiBzaWduYWwgd2l0aCB7bG9hZGluZzogdHJ1ZX0sIGNsaWVudCBoeWRyYXRlcyByZWFsIGZldGNoICopXG4gIHJlZ2lzdGVyIFwicmVzb3VyY2VcIiAoZnVuIF9hcmdzIC0+XG4gICAgbGV0IHN0YXRlID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImxvYWRpbmdcIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc3RhdGUgXCJkYXRhXCIgTmlsO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImVycm9yXCIgTmlsO1xuICAgIGxldCBzaWdfZCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJfX3NpZ25hbFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInZhbHVlXCIgKERpY3Qgc3RhdGUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInN1YnNjcmliZXJzXCIgKExpc3QgW10pO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcImRlcHNcIiAoTGlzdCBbXSk7XG4gICAgRGljdCBzaWdfZCk7XG4gIHJlZ2lzdGVyIFwiYXBwbHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgY2FsbCBmIGEgPVxuICAgICAgbWF0Y2ggZiB3aXRoXG4gICAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYVxuICAgICAgfCBfIC0+ICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIGYgYSlcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pXSAtPiBjYWxsIGYgYVxuICAgIHwgW2Y7IE5pbF0gLT4gY2FsbCBmIFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHk6IGZ1bmN0aW9uIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJpZGVudGljYWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBpZGVudGljYWwgPSBtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiB4ID0geVxuICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiB4ID0geVxuICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IHggPSB5XG4gICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiB4ID0gZmxvYXRfb2ZfaW50IHlcbiAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4geCA9IHlcbiAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICAgICAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGEgPT0gYlxuICAgICAgaW4gQm9vbCBpZGVudGljYWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpZGVudGljYWw/OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1ha2Utc3ByZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkXSAtPlxuICAgICAgbGV0IHBhaXJzID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiAoaywgdikgOjogYWNjKSBkIFtdIGluXG4gICAgICBTcHJlYWQgcGFpcnNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXNwcmVhZDogMSBkaWN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTcHJlYWQgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ByZWFkLWF0dHJzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPlxuICAgICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBkaWN0X3NldCBkIGsgdikgcGFpcnM7XG4gICAgICBEaWN0IGRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQtYXR0cnM6IDEgc3ByZWFkXCIpKTtcblxuICAoKiBIaWdoZXItb3JkZXIgZm9ybXMgYXMgY2FsbGFibGUgcHJpbWl0aXZlcyDigJQgdXNlZCBieSB0aGUgVk0uXG4gICAgIFRoZSBDRUsgbWFjaGluZSBoYW5kbGVzIHRoZXNlIGFzIHNwZWNpYWwgZm9ybXMgd2l0aCBkZWRpY2F0ZWQgZnJhbWVzO1xuICAgICB0aGUgVk0gbmVlZHMgdGhlbSBhcyBwbGFpbiBjYWxsYWJsZSB2YWx1ZXMuICopXG4gICgqIENhbGwgYW55IFNYIGNhbGxhYmxlIOKAlCBoYW5kbGVzIE5hdGl2ZUZuLCBMYW1iZGEgKHZpYSB0cmFtcG9saW5lKSwgVk0gY2xvc3VyZXMgKilcbiAgbGV0IGNhbGxfYW55IGYgYXJncyA9XG4gICAgbWF0Y2ggZiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgICB8IF8gLT4gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gZiBhcmdzKVxuICBpblxuICByZWdpc3RlciBcIm1hcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gY2FsbF9hbnkgZiBbeF0pIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1hcDogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYXAtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHggLT4gY2FsbF9hbnkgZiBbSW50ZWdlciBpOyB4XSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwLWluZGV4ZWQ6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsdGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QuZmlsdGVyIChmdW4geCAtPiBzeF90cnV0aHkgKGNhbGxfYW55IGYgW3hdKSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsdGVyOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImZvci1lYWNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gaWdub3JlIChjYWxsX2FueSBmIFt4XSkpIGl0ZW1zOyBOaWxcbiAgICB8IFtfOyBOaWxdIC0+IE5pbCAgKCogbmlsIGNvbGxlY3Rpb24gPSBuby1vcCAqKVxuICAgIHwgXyAtPlxuICAgICAgbGV0IHR5cGVzID0gU3RyaW5nLmNvbmNhdCBcIiwgXCIgKExpc3QubWFwIChmdW4gdiAtPiB0eXBlX29mIHYpIGFyZ3MpIGluXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJmb3ItZWFjaDogZXhwZWN0ZWQgKGZuIGxpc3QpLCBnb3QgKCVzKSAlZCBhcmdzXCIgdHlwZXMgKExpc3QubGVuZ3RoIGFyZ3MpKSkpO1xuICByZWdpc3RlciBcInJlZHVjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGluaXQ7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IGNhbGxfYW55IGYgW2FjYzsgeF0pIGluaXQgaXRlbXNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWR1Y2U6IGV4cGVjdGVkIChmbiBpbml0IGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJzb21lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gQm9vbCBmYWxzZVxuICAgICAgICB8IHggOjogcmVzdCAtPlxuICAgICAgICAgIGxldCByZXN1bHQgPSBjYWxsX2FueSBmIFt4XSBpblxuICAgICAgICAgIGlmIHN4X3RydXRoeSByZXN1bHQgdGhlbiByZXN1bHQgZWxzZSBmaW5kIHJlc3RcbiAgICAgIGluIGZpbmQgaXRlbXNcbiAgICB8IFtfOyBOaWxdIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb21lOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImV2ZXJ5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBCb29sIChMaXN0LmZvcl9hbGwgKGZ1biB4IC0+IHN4X3RydXRoeSAoY2FsbF9hbnkgZiBbeF0pKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2ZXJ5PzogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcblxuICAoKiAtLS0tIFZNIHN0YWNrIHByaW1pdGl2ZXMgKHZtLnN4IHBsYXRmb3JtIGludGVyZmFjZSkgLS0tLSAqKVxuICByZWdpc3RlciBcIm1ha2Utdm0tc3RhY2tcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtuXSAtPiBMaXN0UmVmIChyZWYgKExpc3QuaW5pdCAoYXNfaW50IG4pIChmdW4gXyAtPiBOaWwpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXZtLXN0YWNrOiBleHBlY3RlZCAoc2l6ZSlcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgbl0gLT4gTGlzdC5udGggIXIgKGFzX2ludCBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWdldDogZXhwZWN0ZWQgKHN0YWNrIGlkeClcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IG47IHZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICByIDo9IExpc3QubWFwaSAoZnVuIGogeCAtPiBpZiBqID0gaSB0aGVuIHYgZWxzZSB4KSAhcjsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm0tc3RhY2stc2V0ITogZXhwZWN0ZWQgKHN0YWNrIGlkeCB2YWwpXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2bS1zdGFjay1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHJdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoICFyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWxlbmd0aDogZXhwZWN0ZWQgKHN0YWNrKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stY29weSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHNyYzsgTGlzdFJlZiBkc3Q7IG5dIC0+XG4gICAgICBsZXQgY291bnQgPSBhc19pbnQgbiBpblxuICAgICAgbGV0IHNyY19pdGVtcyA9ICFzcmMgaW5cbiAgICAgIGRzdCA6PSBMaXN0Lm1hcGkgKGZ1biBpIHggLT4gaWYgaSA8IGNvdW50IHRoZW4gTGlzdC5udGggc3JjX2l0ZW1zIGkgZWxzZSB4KSAhZHN0OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1jb3B5ITogZXhwZWN0ZWQgKHNyYyBkc3QgY291bnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJwcmltaXRpdmU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+IEJvb2wgKEhhc2h0YmwubWVtIHByaW1pdGl2ZXMgbmFtZSlcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogU2NvcGUgc3RhY2sgcHJpbWl0aXZlcyBhcmUgcmVnaXN0ZXJlZCBieSBzeF9zZXJ2ZXIubWwgLyBydW5fdGVzdHMubWxcbiAgICAgYmVjYXVzZSB0aGV5IHVzZSBhIHNoYXJlZCBzY29wZSBzdGFja3MgdGFibGUgd2l0aCBjb2xsZWN0IS9jb2xsZWN0ZWQuICopXG5cbiAgKCogLS0tLSBQcmVkaWNhdGVzIG5lZWRlZCBieSBhZGFwdGVyLWh0bWwuc3ggLS0tLSAqKVxuICByZWdpc3RlciBcImxhbWJkYT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImlzbGFuZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuXG4gICgqIFI3UlMgcmVjb3JkcyAqKVxuICByZWdpc3RlciBcInJlY29yZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHJlY29yZF9wIHYgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcIm1ha2UtcnRkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtuYW1lOyBmaWVsZHM7IGN0b3JfcGFyYW1zXSAtPiBtYWtlX3J0ZCBuYW1lIGZpZWxkcyBjdG9yX3BhcmFtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcnRkOiBleHBlY3RlZCAobmFtZSBmaWVsZHMgY3Rvci1wYXJhbXMpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXJlY29yZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkOyBhcmdfbGlzdF0gLT4gbWFrZV9yZWNvcmQgdWlkIGFyZ19saXN0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQ6IGV4cGVjdGVkICh1aWQgYXJncy1saXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVjb3JkLXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgaWR4XSAtPiByZWNvcmRfcmVmIHYgaWR4XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVjb3JkLXJlZjogZXhwZWN0ZWQgKHJlY29yZCBpbmRleClcIikpO1xuICByZWdpc3RlciBcInJlY29yZC1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2OyBpZHg7IG52XSAtPiByZWNvcmRfc2V0X2IgdiBpZHggbnZcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQtc2V0ITogZXhwZWN0ZWQgKHJlY29yZCBpbmRleCB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInJlY29yZC10eXBlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgdWlkXSAtPiByZWNvcmRfdHlwZV9wIHYgdWlkIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXJlY29yZC1jb25zdHJ1Y3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkXSAtPiBtYWtlX3JlY29yZF9jb25zdHJ1Y3RvciB1aWRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1jb25zdHJ1Y3RvcjogZXhwZWN0ZWQgKHVpZClcIikpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkLXByZWRpY2F0ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdWlkXSAtPiBtYWtlX3JlY29yZF9wcmVkaWNhdGUgdWlkXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtcHJlZGljYXRlOiBleHBlY3RlZCAodWlkKVwiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yZWNvcmQtYWNjZXNzb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2lkeF0gLT4gbWFrZV9yZWNvcmRfYWNjZXNzb3IgaWR4XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWNvcmQtYWNjZXNzb3I6IGV4cGVjdGVkIChpbmRleClcIikpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkLW11dGF0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2lkeF0gLT4gbWFrZV9yZWNvcmRfbXV0YXRvciBpZHhcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1tdXRhdG9yOiBleHBlY3RlZCAoaW5kZXgpXCIpKTtcbiAgKCogUjdSUyBwYXJhbWV0ZXJzIOKAlCBjb252ZXJ0ZXIgc3RvcmVkLCBhcHBsaWVkIGJ5IHBhcmFtZXRlcml6ZSBmcmFtZSAqKVxuICByZWdpc3RlciBcIm1ha2UtcGFyYW1ldGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbaW5pdF0gLT5cbiAgICAgIGxldCB1aWQgPSAhcGFyYW1fY291bnRlciBpblxuICAgICAgaW5jciBwYXJhbV9jb3VudGVyO1xuICAgICAgUGFyYW1ldGVyIHsgcG1fdWlkID0gXCJfX3BhcmFtX1wiIF4gc3RyaW5nX29mX2ludCB1aWQ7XG4gICAgICAgICAgICAgICAgICBwbV9kZWZhdWx0ID0gaW5pdDsgcG1fY29udmVydGVyID0gTm9uZSB9XG4gICAgfCBbaW5pdDsgY29udmVydGVyXSAtPlxuICAgICAgbGV0IHVpZCA9ICFwYXJhbV9jb3VudGVyIGluXG4gICAgICBpbmNyIHBhcmFtX2NvdW50ZXI7XG4gICAgICAoKiBBcHBseSBjb252ZXJ0ZXIgdG8gaW5pdCBmb3IgTmF0aXZlRm4sIHN0b3JlIHJhdyBmb3IgTGFtYmRhICopXG4gICAgICBsZXQgY29udmVydGVkID0gbWF0Y2ggY29udmVydGVyIHdpdGhcbiAgICAgICAgfCBOYXRpdmVGbiAoXywgZikgLT4gZiBbaW5pdF1cbiAgICAgICAgfCBfIC0+IGluaXQgICgqIExhbWJkYSBjb252ZXJ0ZXJzIGFwcGxpZWQgdmlhIENFSyBhdCBwYXJhbWV0ZXJpemUgdGltZSAqKVxuICAgICAgaW5cbiAgICAgIFBhcmFtZXRlciB7IHBtX3VpZCA9IFwiX19wYXJhbV9cIiBeIHN0cmluZ19vZl9pbnQgdWlkO1xuICAgICAgICAgICAgICAgICAgcG1fZGVmYXVsdCA9IGNvbnZlcnRlZDsgcG1fY29udmVydGVyID0gU29tZSBjb252ZXJ0ZXIgfVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcGFyYW1ldGVyOiBleHBlY3RlZCAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbUGFyYW1ldGVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcInBhcmFtZXRlci11aWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1BhcmFtZXRlciBwXSAtPiBTdHJpbmcgcC5wbV91aWRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItdWlkOiBleHBlY3RlZCBwYXJhbWV0ZXJcIikpO1xuICByZWdpc3RlciBcInBhcmFtZXRlci1kZWZhdWx0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtQYXJhbWV0ZXIgcF0gLT4gcC5wbV9kZWZhdWx0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLWRlZmF1bHQ6IGV4cGVjdGVkIHBhcmFtZXRlclwiKSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyLWNvbnZlcnRlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BhcmFtZXRlciBwXSAtPiAobWF0Y2ggcC5wbV9jb252ZXJ0ZXIgd2l0aCBTb21lIGMgLT4gYyB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcmFtZXRlci1jb252ZXJ0ZXI6IGV4cGVjdGVkIHBhcmFtZXRlclwiKSk7XG4gICgqIFI3UlMgdmVjdG9ycyDigJQgbXV0YWJsZSBmaXhlZC1zaXplIGFycmF5cyAqKVxuICByZWdpc3RlciBcIm1ha2UtdmVjdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbbl0gLT4gVmVjdG9yIChBcnJheS5tYWtlIChhc19pbnQgbikgTmlsKVxuICAgIHwgW247IGZpbGxdIC0+IFZlY3RvciAoQXJyYXkubWFrZSAoYXNfaW50IG4pIGZpbGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS12ZWN0b3I6IGV4cGVjdGVkIChsZW5ndGgpIG9yIChsZW5ndGggZmlsbClcIikpO1xuICByZWdpc3RlciBcInZlY3RvclwiIChmdW4gYXJncyAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgYXJncykpO1xuICByZWdpc3RlciBcInZlY3Rvcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1ZlY3RvciBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2ZWN0b3ItbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtWZWN0b3IgYXJyXSAtPiBJbnRlZ2VyIChBcnJheS5sZW5ndGggYXJyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1sZW5ndGg6IGV4cGVjdGVkIHZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1ZlY3RvciBhcnI7IG5dIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICBpZiBpIDwgMCB8fCBpID49IEFycmF5Lmxlbmd0aCBhcnIgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJ2ZWN0b3ItcmVmOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzIChsZW5ndGggJWQpXCIgaSAoQXJyYXkubGVuZ3RoIGFycikpKTtcbiAgICAgIGFyci4oaSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2ZWN0b3ItcmVmOiBleHBlY3RlZCAodmVjdG9yIGluZGV4KVwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtWZWN0b3IgYXJyOyBuOyB2XSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgbiBpblxuICAgICAgaWYgaSA8IDAgfHwgaSA+PSBBcnJheS5sZW5ndGggYXJyIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwidmVjdG9yLXNldCE6IGluZGV4ICVkIG91dCBvZiBib3VuZHMgKGxlbmd0aCAlZClcIiBpIChBcnJheS5sZW5ndGggYXJyKSkpO1xuICAgICAgYXJyLihpKSA8LSB2OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2ZWN0b3Itc2V0ITogZXhwZWN0ZWQgKHZlY3RvciBpbmRleCB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci0+bGlzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbVmVjdG9yIGFycl0gLT4gTGlzdCAoQXJyYXkudG9fbGlzdCBhcnIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yLT5saXN0OiBleHBlY3RlZCB2ZWN0b3JcIikpO1xuICByZWdpc3RlciBcImxpc3QtPnZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gLT4gVmVjdG9yIChBcnJheS5vZl9saXN0IGwpXG4gICAgfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0LT52ZWN0b3I6IGV4cGVjdGVkIGxpc3RcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci1maWxsIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1ZlY3RvciBhcnI7IHZdIC0+IEFycmF5LmZpbGwgYXJyIDAgKEFycmF5Lmxlbmd0aCBhcnIpIHY7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1maWxsITogZXhwZWN0ZWQgKHZlY3RvciB2YWx1ZSlcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci1jb3B5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbVmVjdG9yIGFycl0gLT4gVmVjdG9yIChBcnJheS5jb3B5IGFycilcbiAgICB8IFtWZWN0b3IgYXJyOyBzXSAtPlxuICAgICAgbGV0IHN0YXJ0ID0gYXNfaW50IHMgaW5cbiAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYXJyIC0gc3RhcnQgaW5cbiAgICAgIGlmIGxlbiA8PSAwIHRoZW4gVmVjdG9yIFt8fF0gZWxzZSBWZWN0b3IgKEFycmF5LnN1YiBhcnIgc3RhcnQgbGVuKVxuICAgIHwgW1ZlY3RvciBhcnI7IHM7IGVdIC0+XG4gICAgICBsZXQgc3RhcnQgPSBhc19pbnQgcyBpblxuICAgICAgbGV0IHN0b3AgPSBtaW4gKGFzX2ludCBlKSAoQXJyYXkubGVuZ3RoIGFycikgaW5cbiAgICAgIGxldCBsZW4gPSBzdG9wIC0gc3RhcnQgaW5cbiAgICAgIGlmIGxlbiA8PSAwIHRoZW4gVmVjdG9yIFt8fF0gZWxzZSBWZWN0b3IgKEFycmF5LnN1YiBhcnIgc3RhcnQgbGVuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1jb3B5OiBleHBlY3RlZCAodmVjdG9yKSBvciAodmVjdG9yIHN0YXJ0KSBvciAodmVjdG9yIHN0YXJ0IGVuZClcIikpO1xuXG4gICgqIFN0cmluZyBidWZmZXJzIOKAlCBPKDEpIGFtb3J0aXNlZCBhcHBlbmQgZm9yIHN0cmluZyBidWlsZGluZyBpbiBsb29wcyAqKVxuICByZWdpc3RlciBcIm1ha2Utc3RyaW5nLWJ1ZmZlclwiIChmdW4gXyAtPiBTdHJpbmdCdWZmZXIgKEJ1ZmZlci5jcmVhdGUgNjQpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWJ1ZmZlcj86IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyLWFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmdCdWZmZXIgYnVmOyBTdHJpbmcgc10gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBfOyB2XSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJzdHJpbmctYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIHN0cmluZywgZ290IFwiIF4gdHlwZV9vZiB2KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIChidWZmZXIgc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWJ1ZmZlci0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmdCdWZmZXIgYnVmXSAtPiBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWJ1ZmZlci0+c3RyaW5nOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWJ1ZmZlci1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZ0J1ZmZlciBidWZdIC0+IEludGVnZXIgKEJ1ZmZlci5sZW5ndGggYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1idWZmZXItbGVuZ3RoOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG5cbiAgKCogU2hvcnQgYWxpYXNlcyDigJQgc2FtZSBTdHJpbmdCdWZmZXIgdmFsdWUsIHRlcnNlciBuYW1lcyBmb3IgaG90IHBhdGhzLlxuICAgICBBcHBlbmQgYWNjZXB0cyBhbnkgdmFsdWU6IHN0cmluZ3MgcGFzcyB0aHJvdWdoLCBvdGhlcnMgZ2V0IGluc3BlY3RlZC9jb2VyY2VkLiAqKVxuICByZWdpc3RlciBcIm1ha2UtYnVmZmVyXCIgKGZ1biBfIC0+IFN0cmluZ0J1ZmZlciAoQnVmZmVyLmNyZWF0ZSA2NCkpO1xuICByZWdpc3RlciBcImJ1ZmZlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZ0J1ZmZlciBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ1ZmZlcj86IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJidWZmZXItYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IFN0cmluZyBzXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgczsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgSW50ZWdlciBuXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgbik7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IE51bWJlciBuXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgbik7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IFN5bWJvbCBzXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgczsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgQ2hhciBuXSAtPlxuICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciBidWYgKFVjaGFyLm9mX2ludCBuKTsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgTmlsXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcIjsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIGJ1ZjsgQm9vbCB0cnVlXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJ0cnVlXCI7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IEJvb2wgZmFsc2VdIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImZhbHNlXCI7IE5pbFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IHZdIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoaW5zcGVjdCB2KTsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnVmZmVyLWFwcGVuZCE6IGV4cGVjdGVkIChidWZmZXIgdmFsdWUpXCIpKTtcbiAgcmVnaXN0ZXIgXCJidWZmZXItPnN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIGJ1Zl0gLT4gU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ1ZmZlci0+c3RyaW5nOiBleHBlY3RlZCAoYnVmZmVyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYnVmZmVyLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIGJ1Zl0gLT4gSW50ZWdlciAoQnVmZmVyLmxlbmd0aCBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnVmZmVyLWxlbmd0aDogZXhwZWN0ZWQgKGJ1ZmZlcilcIikpO1xuXG4gICgqIENhcGFiaWxpdHktYmFzZWQgc2FuZGJveGluZyDigJQgZ2F0ZSBJTyBvcGVyYXRpb25zICopXG4gIGxldCBjYXBfc3RhY2sgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW10gaW5cbiAgcmVnaXN0ZXIgXCJ3aXRoLWNhcGFiaWxpdGllc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgY2FwczsgYm9keV0gLT5cbiAgICAgIGxldCBjYXBfc2V0ID0gTGlzdC5maWx0ZXJfbWFwIChmdW4gdiAtPiBtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBTeW1ib2wgcyB8IFN0cmluZyBzIHwgS2V5d29yZCBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgY2FwcyBpblxuICAgICAgbGV0IHByZXYgPSAhY2FwX3N0YWNrIGluXG4gICAgICBjYXBfc3RhY2sgOj0gY2FwX3NldDtcbiAgICAgIChtYXRjaCBib2R5IHdpdGhcbiAgICAgICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gKHRyeSAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBib2R5IE5pbFxuICAgICAgICAgICB3aXRoIGV4biAtPiBjYXBfc3RhY2sgOj0gcHJldjsgcmFpc2UgZXhuKSBpblxuICAgICAgICAgY2FwX3N0YWNrIDo9IHByZXY7IHJlc3VsdFxuICAgICAgIHwgXyAtPiBjYXBfc3RhY2sgOj0gcHJldjsgYm9keSlcbiAgICB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBjYXBzIH07IGJvZHldIC0+XG4gICAgICAoKiBIYW5kbGUgbXV0YWJsZSBsaXN0cyB0b28gKilcbiAgICAgIGxldCBjYXBfc2V0ID0gTGlzdC5maWx0ZXJfbWFwIChmdW4gdiAtPiBtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBTeW1ib2wgcyB8IFN0cmluZyBzIHwgS2V5d29yZCBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgY2FwcyBpblxuICAgICAgbGV0IHByZXYgPSAhY2FwX3N0YWNrIGluXG4gICAgICBjYXBfc3RhY2sgOj0gY2FwX3NldDtcbiAgICAgIChtYXRjaCBib2R5IHdpdGhcbiAgICAgICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gKHRyeSAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBib2R5IE5pbFxuICAgICAgICAgICB3aXRoIGV4biAtPiBjYXBfc3RhY2sgOj0gcHJldjsgcmFpc2UgZXhuKSBpblxuICAgICAgICAgY2FwX3N0YWNrIDo9IHByZXY7IHJlc3VsdFxuICAgICAgIHwgXyAtPiBjYXBfc3RhY2sgOj0gcHJldjsgYm9keSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3aXRoLWNhcGFiaWxpdGllczogZXhwZWN0ZWQgKGNhcC1saXN0IGJvZHktZm4pXCIpKTtcbiAgcmVnaXN0ZXIgXCJjdXJyZW50LWNhcGFiaWxpdGllc1wiIChmdW4gX2FyZ3MgLT5cbiAgICBpZiAhY2FwX3N0YWNrID0gW10gdGhlbiBOaWxcbiAgICBlbHNlIExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgIWNhcF9zdGFjaykpO1xuICByZWdpc3RlciBcImhhcy1jYXBhYmlsaXR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBjYXBdIHwgW0tleXdvcmQgY2FwXSB8IFtTeW1ib2wgY2FwXSAtPlxuICAgICAgaWYgIWNhcF9zdGFjayA9IFtdIHRoZW4gQm9vbCB0cnVlICAoKiB1bnJlc3RyaWN0ZWQgKilcbiAgICAgIGVsc2UgQm9vbCAoTGlzdC5tZW0gY2FwICFjYXBfc3RhY2spXG4gICAgfCBfIC0+IEJvb2wgdHJ1ZSk7XG4gIHJlZ2lzdGVyIFwicmVxdWlyZS1jYXBhYmlsaXR5IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBjYXBdIHwgW0tleXdvcmQgY2FwXSB8IFtTeW1ib2wgY2FwXSAtPlxuICAgICAgaWYgIWNhcF9zdGFjayA9IFtdIHRoZW4gTmlsICAoKiB1bnJlc3RyaWN0ZWQgKilcbiAgICAgIGVsc2UgaWYgTGlzdC5tZW0gY2FwICFjYXBfc3RhY2sgdGhlbiBOaWxcbiAgICAgIGVsc2UgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgIFwiQ2FwYWJpbGl0eSAnJXMnIG5vdCBhdmFpbGFibGUuIEN1cnJlbnQgY2FwYWJpbGl0aWVzOiBbJXNdXCJcbiAgICAgICAgY2FwIChTdHJpbmcuY29uY2F0IFwiLCBcIiAhY2FwX3N0YWNrKSkpXG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY2FwYWJpbGl0eS1yZXN0cmljdGVkP1wiIChmdW4gX2FyZ3MgLT5cbiAgICBCb29sICghY2FwX3N0YWNrIDw+IFtdKSk7XG5cbiAgcmVnaXN0ZXIgXCJpcy1lbHNlLWNsYXVzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtLZXl3b3JkIFwiZWxzZVwiXSAtPiBCb29sIHRydWVcbiAgICB8IFtCb29sIHRydWVdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJjb25kLXNjaGVtZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGNsYXVzZXNdIC0+XG4gICAgICBCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8IExpc3QgbCAtPiBMaXN0Lmxlbmd0aCBsID0gMlxuICAgICAgICB8IF8gLT4gZmFsc2UpIGNsYXVzZXMpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImNvbXBvbmVudD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSAtPiBCb29sIHRydWUgfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gRW52IGMuY19jbG9zdXJlXG4gICAgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1oYXMtY2hpbGRyZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlblxuICAgIHwgW0lzbGFuZCBpXSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gU3RyaW5nIGMuY19uYW1lXG4gICAgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICAgIHwgW0lzbGFuZCBpXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IGMuY19ib2R5XG4gICAgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5XG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWZpbGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IGNvbXBvbmVudF9maWxlIHYgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LXNldC1maWxlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgZl0gLT4gY29tcG9uZW50X3NldF9maWxlIHYgZiB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW01hY3JvIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiZm9yLWVhY2gtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoY2FsbF9hbnkgZiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgaXRlbXM7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZvci1lYWNoLWluZGV4ZWQ6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xhbWJkYSBsXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGwubF9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImxhbWJkYS1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gICgqIGV4cGFuZC1tYWNybyBpcyByZWdpc3RlcmVkIGxhdGVyIGJ5IHJ1bl90ZXN0cy5tbCAvIHN4X3NlcnZlci5tbFxuICAgICBiZWNhdXNlIGl0IG5lZWRzIGV2YWxfZXhwciB3aGljaCBjcmVhdGVzIGEgZGVwZW5kZW5jeSBjeWNsZSAqKTtcbiAgcmVnaXN0ZXIgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBfIC0+IEJvb2wgdHJ1ZSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFJhd0hUTUwgcyB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJyYXctaHRtbC1jb250ZW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIHJlZ2lzdGVyIFwiZ2V0LXByaW1pdGl2ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgZm4gLT4gTmF0aXZlRm4gKG5hbWUsIGZuKVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG4gIHJlZ2lzdGVyIFwiY2FsbC1wcmltaXRpdmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSldIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSBmbiAtPiBmbiBhXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBbU3RyaW5nIG5hbWU7IE5pbF0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIGZuIC0+IGZuIFtdXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2FsbC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lIGFyZ3MtbGlzdClcIikpO1xuICAoKTtcblxuICAoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4gICgqIFNjb3BlIHN0YWNrcyDigJQgZHluYW1pYyBzY29wZSBmb3IgcmVuZGVyLXRpbWUgZWZmZWN0cy4gICAgICAgICAgICAqKVxuICAoKiBNaWdyYXRlZCBmcm9tIHN4X3Njb3BlLm1sIOKAlCBQaGFzZSAxIG9mIHN0ZXAgNS41ICAgICAgICAgICAgICAgICAqKVxuICAoKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbiAgKCogLS0tIENvb2tpZXMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJnZXQtY29va2llXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBfcmVxdWVzdF9jb29raWVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSB2IC0+IFN0cmluZyB2XG4gICAgICAgfCBOb25lIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInNldC1jb29raWVcIiAoZnVuIF9hcmdzIC0+IE5pbCk7XG5cbiAgKCogLS0tIENvcmUgc2NvcGUgc3RhY2sgb3BlcmF0aW9ucyAtLS0gKilcblxuICByZWdpc3RlciBcInNjb3BlLXB1c2ghXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiUFVTSCAlcyBkZXB0aD0lZC0+JWRcIiBuYW1lIChMaXN0Lmxlbmd0aCBzdGFjaykgKExpc3QubGVuZ3RoIHN0YWNrICsgMSkgOjogIV9zY29wZV9sb2c7XG4gICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lICh2YWx1ZSA6OiBzdGFjayk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiUE9QICVzIGRlcHRoPSVkLT4lZFwiIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAobWF4IDAgKExpc3QubGVuZ3RoIHN0YWNrIC0gMSkpIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggXyA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgcmVzdCB8IFtdIC0+ICgpKTsgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1wZWVrXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQRUVLICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCB2IDo6IF8gLT4gdiB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQ29udGV4dCAoc2NvcGUgbG9va3VwIHdpdGggb3B0aW9uYWwgZGVmYXVsdCkgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCAoU3RyaW5nIG5hbWUpIDo6IHJlc3QgLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIkNUWCAlcyBkZXB0aD0lZCBmb3VuZD0lYlwiIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAoc3RhY2sgPD4gW10pIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IHYgOjogXyAtPiB2XG4gICAgICAgfCBbXSAtPiAobWF0Y2ggcmVzdCB3aXRoIGRlZmF1bHRfdmFsIDo6IF8gLT4gZGVmYXVsdF92YWwgfCBbXSAtPiBOaWwpKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29udGV4dC1kZWJ1Z1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGxldCBhbGxfa2V5cyA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIF9zY29wZV9zdGFja3MgW10gaW5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJuYW1lPSVzIHN0YWNrX2xlbj0lZCBhbGxfa2V5cz1bJXNdXCJcbiAgICAgICAgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChTdHJpbmcuY29uY2F0IFwiLFwiIGFsbF9rZXlzKSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiYmFkIGFyZ3NcIik7XG5cbiAgKCogLS0tIENvbGxlY3QgLyBjb2xsZWN0ZWQgLyBjbGVhci1jb2xsZWN0ZWQhIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IExpc3QgaXRlbXMgOjogcmVzdCAtPlxuICAgICAgICAgaWYgbm90IChMaXN0Lm1lbSB2YWx1ZSBpdGVtcykgdGhlblxuICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBbXSAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggTGlzdCBpdGVtcyA6OiBfIC0+IExpc3QgaXRlbXMgfCBfIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwiY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCBfIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbXSA6OiByZXN0KVxuICAgICAgIHwgW10gLT4gSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbXV0pO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFVuaWZpZWQgcmVhY3RpdmUgbW9kZWwgKFN0ZXAgMTBjKSAtLS1cbiAgICAgcHJvdmlkZSB3cmFwcyB2YWx1ZSBpbiBhIFNpZ25hbCAocmVhY3RpdmUgY2VsbCkuXG4gICAgIGNvbnRleHQgdW53cmFwcyB0aGUgc2lnbmFsICsgcmVnaXN0ZXJzIGluIHRyYWNraW5nIGNvbnRleHQuXG4gICAgIHBlZWsgdW53cmFwcyB3aXRob3V0IHRyYWNraW5nLlxuICAgICBwcm92aWRlISBtdXRhdGVzIHRoZSBzaWduYWwgYW5kIG5vdGlmaWVzIHN1YnNjcmliZXJzLiAqKVxuXG4gIGxldCBfdHJhY2tpbmdfYWN0aXZlIDogYm9vbCByZWYgPSByZWYgZmFsc2UgaW5cbiAgbGV0IF90cmFja2luZ19kZXBzIDogdmFsdWUgbGlzdCByZWYgPSByZWYgW10gaW5cblxuICByZWdpc3RlciBcInByb3ZpZGUtcmVhY3RpdmUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHNpZycgPSB7IHNfdmFsdWUgPSB2YWx1ZTsgc19zdWJzY3JpYmVycyA9IFtdOyBzX2RlcHMgPSBbXSB9IGluXG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoU2lnbmFsIHNpZycgOjogc3RhY2spOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwcm92aWRlLXJlYWN0aXZlITogZXhwZWN0ZWQgKG5hbWUgdmFsdWUpXCIpKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wLXJlYWN0aXZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoIF8gOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIHJlc3QgfCBbXSAtPiAoKSk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwicHJvdmlkZS1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IG5ld192YWx1ZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgU2lnbmFsIHNpZycgOjogXyAtPlxuICAgICAgICAgc2lnJy5zX3ZhbHVlIDwtIG5ld192YWx1ZTtcbiAgICAgICAgIExpc3QuaXRlciAoZnVuIHN1YiAtPiBzdWIgKCkpIHNpZycuc19zdWJzY3JpYmVycztcbiAgICAgICAgIE5pbFxuICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgXCJwcm92aWRlLXNldCE6ICclcycgaXMgbm90IGEgcmVhY3RpdmUgcHJvdmlkZVwiIG5hbWUpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwcm92aWRlLXNldCE6IGV4cGVjdGVkIChuYW1lIG5ldy12YWx1ZSlcIikpO1xuXG4gIHJlZ2lzdGVyIFwicGVla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgKFN0cmluZyBuYW1lKSA6OiBfIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT4gc2lnJy5zX3ZhbHVlXG4gICAgICAgfCB2IDo6IF8gLT4gdlxuICAgICAgIHwgW10gLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWs6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJ0cmFja2luZy1zdGFydCFcIiAoZnVuIF9hcmdzIC0+XG4gICAgX3RyYWNraW5nX2FjdGl2ZSA6PSB0cnVlOyBfdHJhY2tpbmdfZGVwcyA6PSBbXTsgTmlsKTtcblxuICByZWdpc3RlciBcInRyYWNraW5nLXN0b3AhXCIgKGZ1biBfYXJncyAtPlxuICAgIF90cmFja2luZ19hY3RpdmUgOj0gZmFsc2U7XG4gICAgbGV0IGRlcHMgPSAhX3RyYWNraW5nX2RlcHMgaW5cbiAgICBfdHJhY2tpbmdfZGVwcyA6PSBbXTtcbiAgICBMaXN0IGRlcHMpO1xuXG4gIHJlZ2lzdGVyIFwidHJhY2tpbmctYWN0aXZlP1wiIChmdW4gX2FyZ3MgLT5cbiAgICBCb29sICFfdHJhY2tpbmdfYWN0aXZlKTtcblxuICAoKiBPdmVycmlkZSBjb250ZXh0IHRvIGJlIHRyYWNraW5nLWF3YXJlICopXG4gIEhhc2h0YmwucmVtb3ZlIHByaW1pdGl2ZXMgXCJjb250ZXh0XCI7XG4gIHJlZ2lzdGVyIFwiY29udGV4dFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgKFN0cmluZyBuYW1lKSA6OiByZXN0IC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT5cbiAgICAgICAgICgqIFJlZ2lzdGVyIGluIHRyYWNraW5nIGNvbnRleHQgaWYgYWN0aXZlICopXG4gICAgICAgICBpZiAhX3RyYWNraW5nX2FjdGl2ZSB0aGVuIGJlZ2luXG4gICAgICAgICAgIGlmIG5vdCAoTGlzdC5tZW1xIChTaWduYWwgc2lnJykgIV90cmFja2luZ19kZXBzKSB0aGVuXG4gICAgICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzXG4gICAgICAgICBlbmQ7XG4gICAgICAgICBzaWcnLnNfdmFsdWVcbiAgICAgICB8IHYgOjogXyAtPiB2XG4gICAgICAgfCBbXSAtPiAobWF0Y2ggcmVzdCB3aXRoIGRlZmF1bHRfdmFsIDo6IF8gLT4gZGVmYXVsdF92YWwgfCBbXSAtPiBOaWwpKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIHRyYWNraW5nLXJlZ2lzdGVyLXNjb3BlISDigJQgZXhwbGljaXRseSByZWdpc3RlciBhIHJlYWN0aXZlIHByb3ZpZGUgYXMgYSBkZXAgKilcbiAgcmVnaXN0ZXIgXCJ0cmFja2luZy1yZWdpc3Rlci1zY29wZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGlmICFfdHJhY2tpbmdfYWN0aXZlIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgICAgbWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT5cbiAgICAgICAgICBpZiBub3QgKExpc3QubWVtcSAoU2lnbmFsIHNpZycpICFfdHJhY2tpbmdfZGVwcykgdGhlblxuICAgICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzO1xuICAgICAgICAgIE5pbFxuICAgICAgICB8IF8gLT4gTmlsXG4gICAgICBlbmQgZWxzZSBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiBkZXJlZiDigJQgdW53cmFwIGEgc2lnbmFsIHZhbHVlIHdpdGggcmVhY3RpdmUgZGVwZW5kZW5jeSB0cmFja2luZy5cbiAgICAgSWYgdmFsdWUgaXMgYSBTaWduYWwsIHJldHVybnMgc192YWx1ZSBhbmQgcmVnaXN0ZXJzIGluIHRyYWNraW5nIGNvbnRleHQuXG4gICAgIE90aGVyd2lzZSByZXR1cm5zIHZhbHVlIGFzLWlzLiAqKVxuICByZWdpc3RlciBcImRlcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU2lnbmFsIHNpZyddIC0+XG4gICAgICBpZiAhX3RyYWNraW5nX2FjdGl2ZSB0aGVuIGJlZ2luXG4gICAgICAgIGlmIG5vdCAoTGlzdC5tZW1xIChTaWduYWwgc2lnJykgIV90cmFja2luZ19kZXBzKSB0aGVuXG4gICAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gU2lnbmFsIHNpZycgOjogIV90cmFja2luZ19kZXBzXG4gICAgICBlbmQ7XG4gICAgICBzaWcnLnNfdmFsdWVcbiAgICB8IFt2XSAtPiB2XG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogYmluZCDigJQgY3JlYXRlIGEgdHJhY2tlZCBjb21wdXRhdGlvbi4gVGFrZXMgYSBib2R5LWZuIChsYW1iZGEpLlxuICAgICBTdGFydHMgdHJhY2tpbmcsIGV2YWx1YXRlcyBib2R5LCBjb2xsZWN0cyBkZXBzLCBzdWJzY3JpYmVzLlxuICAgICBPbiBkZXAgY2hhbmdlOiB1bnN1YnNjcmliZXMsIHJlLWV2YWx1YXRlcywgcmUtc3Vic2NyaWJlcy5cbiAgICAgUmV0dXJucyBpbml0aWFsIHZhbHVlLiBPcHRpb25hbCB1cGRhdGUtZm4gY2FsbGVkIHdpdGggbmV3IHZhbHVlcy4gKilcbiAgcmVnaXN0ZXIgXCJiaW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYm9keV9mbl0gfCBbYm9keV9mbjsgX10gLT5cbiAgICAgIGxldCB1cGRhdGVfZm4gPSBtYXRjaCBhcmdzIHdpdGggW187IHVdIC0+IFNvbWUgdSB8IF8gLT4gTm9uZSBpblxuICAgICAgbGV0IGRpc3Bvc2VycyA6ICh1bml0IC0+IHVuaXQpIGxpc3QgcmVmID0gcmVmIFtdIGluXG4gICAgICBsZXQgcmVjIHJ1bl90cmFja2VkICgpID1cbiAgICAgICAgKCogQ2xlYW4gdXAgcHJldmlvdXMgc3Vic2NyaXB0aW9ucyAqKVxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biBkIC0+IGQgKCkpICFkaXNwb3NlcnM7XG4gICAgICAgIGRpc3Bvc2VycyA6PSBbXTtcbiAgICAgICAgKCogU3RhcnQgdHJhY2tpbmcgKilcbiAgICAgICAgX3RyYWNraW5nX2FjdGl2ZSA6PSB0cnVlO1xuICAgICAgICBfdHJhY2tpbmdfZGVwcyA6PSBbXTtcbiAgICAgICAgKCogRXZhbHVhdGUgYm9keSAqKVxuICAgICAgICBsZXQgcmVzdWx0ID0gIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgYm9keV9mbiBOaWwgaW5cbiAgICAgICAgKCogQ29sbGVjdCBkZXBzICopXG4gICAgICAgIGxldCBkZXBzID0gIV90cmFja2luZ19kZXBzIGluXG4gICAgICAgIF90cmFja2luZ19hY3RpdmUgOj0gZmFsc2U7XG4gICAgICAgIF90cmFja2luZ19kZXBzIDo9IFtdO1xuICAgICAgICAoKiBTdWJzY3JpYmUgdG8gZWFjaCBkZXAgKilcbiAgICAgICAgTGlzdC5pdGVyIChmdW4gZGVwIC0+XG4gICAgICAgICAgbWF0Y2ggZGVwIHdpdGhcbiAgICAgICAgICB8IFNpZ25hbCBzaWcnIC0+XG4gICAgICAgICAgICBsZXQgc3Vic2NyaWJlciA9IChmdW4gKCkgLT5cbiAgICAgICAgICAgICAgbGV0IG5ld19yZXN1bHQgPSBydW5fdHJhY2tlZCAoKSBpblxuICAgICAgICAgICAgICBtYXRjaCB1cGRhdGVfZm4gd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgZiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGYgKExpc3QgW25ld19yZXN1bHRdKSlcbiAgICAgICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgICApIGluXG4gICAgICAgICAgICBzaWcnLnNfc3Vic2NyaWJlcnMgPC0gc3Vic2NyaWJlciA6OiBzaWcnLnNfc3Vic2NyaWJlcnM7XG4gICAgICAgICAgICBkaXNwb3NlcnMgOj0gKGZ1biAoKSAtPlxuICAgICAgICAgICAgICBzaWcnLnNfc3Vic2NyaWJlcnMgPC0gTGlzdC5maWx0ZXIgKGZ1biBzIC0+IHMgIT0gc3Vic2NyaWJlcikgc2lnJy5zX3N1YnNjcmliZXJzXG4gICAgICAgICAgICApIDo6ICFkaXNwb3NlcnNcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgKSBkZXBzO1xuICAgICAgICByZXN1bHRcbiAgICAgIGluXG4gICAgICBydW5fdHJhY2tlZCAoKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpbmQ6IGV4cGVjdGVkIChib2R5LWZuKSBvciAoYm9keS1mbiB1cGRhdGUtZm4pXCIpKTtcblxuICAoKiAtLS0gRW1pdCAvIGVtaXR0ZWQgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyB2YWx1ZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgTGlzdCBpdGVtcyA6OiByZXN0IC0+XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBOaWwgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbdmFsdWVdIDo6IHJlc3QpXG4gICAgICAgfCBbXSAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiZW1pdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJzY29wZS1lbWl0IVwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTmlsKTtcblxuICByZWdpc3RlciBcImVtaXR0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIFwiZW1pdHRlZFwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1jb2xsZWN0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJjb2xsZWN0ZWRcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBcImNsZWFyLWNvbGxlY3RlZCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgKCogLS0tIFByb3ZpZGUgYWxpYXNlcyAtLS0gKilcblxuICByZWdpc3RlciBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJzY29wZS1wdXNoIVwiIHdpdGhcbiAgICB8IFNvbWUgZm4gLT4gZm4gYXJncyB8IE5vbmUgLT4gTmlsKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBcInNjb3BlLXBvcCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgKCogaHMtc2FmZS1jYWxsOiBpbnZva2UgYSAwLWFyZyB0aHVuaywgcmV0dXJuIG5pbCBvbiBhbnkgbmF0aXZlIGVycm9yLlxuICAgICBVc2VkIGJ5IHRoZSBoeXBlcnNjcmlwdCBjb21waWxlciB0byB3cmFwIGNvbGxlY3Rpb24gZXhwcmVzc2lvbnMgaW5cbiAgICAgZm9yLWxvb3BzLCBzbyBgZm9yIHggaW4gZG9lc05vdEV4aXN0YCBpdGVyYXRlcyBvdmVyIG5pbCBpbnN0ZWFkIG9mXG4gICAgIGNyYXNoaW5nIHdpdGggYW4gdW5kZWZpbmVkLXN5bWJvbCBlcnJvci4gKilcbiAgcmVnaXN0ZXIgXCJocy1zYWZlLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0aHVua10gLT5cbiAgICAgICh0cnkgIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgdGh1bmsgTmlsXG4gICAgICAgd2l0aCBfIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiA9PT0gUmVnZXggPT09IHdyYXBwaW5nIFJlICsgUmUuUGNyZSAqKVxuICBsZXQgcmVnZXhfdGFibGUgOiAoaW50LCBSZS5yZSAqIHN0cmluZyAqIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlZ2V4X25leHRfaWQgPSByZWYgMCBpblxuICBsZXQgcGFyc2VfZmxhZ3MgZmxhZ3MgPVxuICAgIGxldCBvcHRzID0gcmVmIFtdIGluXG4gICAgU3RyaW5nLml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8ICdpJyAtPiBvcHRzIDo9IGBDQVNFTEVTUyA6OiAhb3B0c1xuICAgICAgfCAnbScgLT4gb3B0cyA6PSBgTVVMVElMSU5FIDo6ICFvcHRzXG4gICAgICB8ICdzJyAtPiBvcHRzIDo9IGBET1RBTEwgOjogIW9wdHNcbiAgICAgIHwgXyAtPiAoKSkgZmxhZ3M7XG4gICAgIW9wdHNcbiAgaW5cbiAgbGV0IG1ha2VfcmVnZXhfdmFsdWUgaWQgc291cmNlIGZsYWdzID1cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9fcmVnZXhfX1wiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaWRcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgaWQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInNvdXJjZVwiIChTdHJpbmcgc291cmNlKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImZsYWdzXCIgKFN0cmluZyBmbGFncyk7XG4gICAgRGljdCBkXG4gIGluXG4gIGxldCByZWdleF9vZl92YWx1ZSA9IGZ1bmN0aW9uXG4gICAgfCBEaWN0IGQgLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJpZFwiIHdpdGhcbiAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPlxuICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcmVnZXhfdGFibGUgKGludF9vZl9mbG9hdCBuKSB3aXRoXG4gICAgICAgICAgfCBTb21lIHIgLT4gclxuICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBoYW5kbGUgbm90IGZvdW5kXCIpKVxuICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBtaXNzaW5nIGlkXCIpKVxuICAgIHwgU3RyaW5nIHMgLT5cbiAgICAgICgqIEFjY2VwdCBhIHJhdyBwYXR0ZXJuIHN0cmluZzogYXV0by1jb21waWxlIGl0LiBMZXRzIHJlZ2V4LXNwbGl0IC9cbiAgICAgICAgIHJlZ2V4LW1hdGNoLWFsbCAvIHJlZ2V4LXRlc3QgLyBldGMuIHRha2UgYSBwYXR0ZXJuIGRpcmVjdGx5LCBub3Qgb25seVxuICAgICAgICAgYSBwcmUtY29tcGlsZWQgcmVnZXggZGljdCBmcm9tIHJlZ2V4LWNvbXBpbGUuICopXG4gICAgICAodHJ5IChSZS5jb21waWxlIChSZS5QY3JlLnJlIHMpLCBzLCBcIlwiKVxuICAgICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWdleDogaW52YWxpZCBwYXR0ZXJuIFwiIF4gcykpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4OiBleHBlY3RlZCByZWdleCBkaWN0IG9yIHBhdHRlcm4gc3RyaW5nXCIpXG4gIGluXG4gIGxldCBncm91cF90b19kaWN0IGcgaW5wdXQgPVxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibWF0Y2hcIiAoU3RyaW5nIChSZS5Hcm91cC5nZXQgZyAwKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJpbmRleFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCAoUmUuR3JvdXAuc3RhcnQgZyAwKSkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaW5wdXRcIiAoU3RyaW5nIGlucHV0KTtcbiAgICBsZXQgY291bnQgPSBSZS5Hcm91cC5uYl9ncm91cHMgZyBpblxuICAgIGxldCBncm91cHMgPSByZWYgW10gaW5cbiAgICBmb3IgaSA9IGNvdW50IC0gMSBkb3dudG8gMSBkb1xuICAgICAgbGV0IHMgPSB0cnkgUmUuR3JvdXAuZ2V0IGcgaSB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gICAgICBncm91cHMgOj0gU3RyaW5nIHMgOjogIWdyb3Vwc1xuICAgIGRvbmU7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJncm91cHNcIiAoTGlzdCAhZ3JvdXBzKTtcbiAgICBEaWN0IGRcbiAgaW5cbiAgcmVnaXN0ZXIgXCJyZWdleC1jb21waWxlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNvdXJjZTsgU3RyaW5nIGZsYWdzXSB8IFtTdHJpbmcgc291cmNlOyBTdHJpbmcgZmxhZ3M7IF9dIC0+XG4gICAgICBsZXQgb3B0cyA9IHBhcnNlX2ZsYWdzIGZsYWdzIGluXG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLmNvbXBpbGUgKFJlLlBjcmUucmUgfmZsYWdzOm9wdHMgc291cmNlKSBpblxuICAgICAgICBsZXQgaWQgPSAhcmVnZXhfbmV4dF9pZCBpblxuICAgICAgICBpbmNyIHJlZ2V4X25leHRfaWQ7XG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSByZWdleF90YWJsZSBpZCAocmUsIHNvdXJjZSwgZmxhZ3MpO1xuICAgICAgICBtYWtlX3JlZ2V4X3ZhbHVlIGlkIHNvdXJjZSBmbGFnc1xuICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInJlZ2V4LWNvbXBpbGU6IGludmFsaWQgcGF0dGVybiBcIiBeIHNvdXJjZSkpKVxuICAgIHwgW1N0cmluZyBzb3VyY2VdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLmNvbXBpbGUgKFJlLlBjcmUucmUgc291cmNlKSBpblxuICAgICAgICBsZXQgaWQgPSAhcmVnZXhfbmV4dF9pZCBpblxuICAgICAgICBpbmNyIHJlZ2V4X25leHRfaWQ7XG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSByZWdleF90YWJsZSBpZCAocmUsIHNvdXJjZSwgXCJcIik7XG4gICAgICAgIG1ha2VfcmVnZXhfdmFsdWUgaWQgc291cmNlIFwiXCJcbiAgICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWdleC1jb21waWxlOiBpbnZhbGlkIHBhdHRlcm4gXCIgXiBzb3VyY2UpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1jb21waWxlOiAoc291cmNlIGZsYWdzKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtdGVzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgc10gLT5cbiAgICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIEJvb2wgKFJlLmV4ZWNwIHJlIHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtdGVzdDogKHJlZ2V4IHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LWV4ZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKHJ4LCBzLCBzdGFydCkgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW3J4OyBTdHJpbmcgc10gLT4gKHJ4LCBzLCAwKVxuICAgICAgfCBbcng7IFN0cmluZyBzOyBOdW1iZXIgbl0gLT4gKHJ4LCBzLCBpbnRfb2ZfZmxvYXQgbilcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LWV4ZWM6IChyZWdleCBzdHJpbmcgc3RhcnQ/KVwiKVxuICAgIGluXG4gICAgbGV0IChyZSwgXywgXykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgIHRyeVxuICAgICAgbGV0IGcgPSBSZS5leGVjIH5wb3M6c3RhcnQgcmUgcyBpblxuICAgICAgZ3JvdXBfdG9fZGljdCBnIHNcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBOaWwpO1xuICByZWdpc3RlciBcInJlZ2V4LW1hdGNoLWFsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgc10gLT5cbiAgICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIGxldCBhbGwgPSBSZS5hbGwgcmUgcyBpblxuICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBnIC0+IGdyb3VwX3RvX2RpY3QgZyBzKSBhbGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtbWF0Y2gtYWxsOiAocmVnZXggc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICgqIHN0cmluZyBBUEk6IChyZWdleC1yZXBsYWNlIHBhdHRlcm4gcmVwbGFjZW1lbnQgaW5wdXQpIOKAlCByZXBsYWNlIEFMTFxuICAgICAgICAgbWF0Y2hlcyBvZiBhIHJhdyBwYXR0ZXJuLiBEaXNhbWJpZ3VhdGVkIGZyb20gdGhlIGNvbXBpbGVkLXJlZ2V4IEFQSVxuICAgICAgICAgYmVsb3cgYnkgdGhlIGZpcnN0IGFyZyBiZWluZyBhIFN0cmluZyByYXRoZXIgdGhhbiBhIHJlZ2V4IERpY3QuICopXG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZV9zdHJpbmcgcmUgfmJ5OnJlcGxhY2VtZW50IGlucHV0KVxuICAgICAgIHdpdGggXyAtPiBTdHJpbmcgaW5wdXQpXG4gICAgfCBbcng7IFN0cmluZyBzOyBTdHJpbmcgcmVwbGFjZW1lbnRdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBmbGFncykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgICAgbGV0IGV4cGFuZCBnID1cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQpIGluXG4gICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHJlcGxhY2VtZW50IGluXG4gICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICBkb25lO1xuICAgICAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBpblxuICAgICAgbGV0IGdsb2JhbCA9IFN0cmluZy5jb250YWlucyBmbGFncyAnZycgaW5cbiAgICAgIGlmIGdsb2JhbCB0aGVuXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZSByZSB+ZjpleHBhbmQgcylcbiAgICAgIGVsc2VcbiAgICAgICAgKG1hdGNoIFJlLmV4ZWNfb3B0IHJlIHMgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IFN0cmluZyBzXG4gICAgICAgICB8IFNvbWUgZyAtPlxuICAgICAgICAgICBsZXQgcmVwbCA9IGV4cGFuZCBnIGluXG4gICAgICAgICAgIGxldCBiZWZvcmUgPSBTdHJpbmcuc3ViIHMgMCAoUmUuR3JvdXAuc3RhcnQgZyAwKSBpblxuICAgICAgICAgICBsZXQgYWZ0ZXJfc3RhcnQgPSBSZS5Hcm91cC5zdG9wIGcgMCBpblxuICAgICAgICAgICBsZXQgYWZ0ZXIgPSBTdHJpbmcuc3ViIHMgYWZ0ZXJfc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtIGFmdGVyX3N0YXJ0KSBpblxuICAgICAgICAgICBTdHJpbmcgKGJlZm9yZSBeIHJlcGwgXiBhZnRlcikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtcmVwbGFjZTogKHJlZ2V4IHN0cmluZyByZXBsYWNlbWVudClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXJlcGxhY2UtZm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHM7IGZdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBmbGFncykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgICAgbGV0IGNhbGxfZm4gZyA9XG4gICAgICAgIGxldCBtYXRjaF9zdHIgPSBSZS5Hcm91cC5nZXQgZyAwIGluXG4gICAgICAgIGxldCBjb3VudCA9IFJlLkdyb3VwLm5iX2dyb3VwcyBnIGluXG4gICAgICAgIGxldCBncm91cHNfYmVmb3JlID0gcmVmIFtdIGluXG4gICAgICAgIGZvciBpID0gY291bnQgLSAxIGRvd250byAxIGRvXG4gICAgICAgICAgbGV0IHYgPSB0cnkgU3RyaW5nIChSZS5Hcm91cC5nZXQgZyBpKSB3aXRoIE5vdF9mb3VuZCAtPiBOaWwgaW5cbiAgICAgICAgICBncm91cHNfYmVmb3JlIDo9IHYgOjogIWdyb3Vwc19iZWZvcmVcbiAgICAgICAgZG9uZTtcbiAgICAgICAgbGV0IGlkeCA9IE51bWJlciAoZmxvYXRfb2ZfaW50IChSZS5Hcm91cC5zdGFydCBnIDApKSBpblxuICAgICAgICBsZXQgYWxsX2FyZ3MgPSBbU3RyaW5nIG1hdGNoX3N0cl0gQCAhZ3JvdXBzX2JlZm9yZSBAIFtpZHg7IFN0cmluZyBzXSBpblxuICAgICAgICBtYXRjaCAhU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBmIChMaXN0IGFsbF9hcmdzKSB3aXRoXG4gICAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgICB8IE51bWJlciBuIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgblxuICAgICAgICB8IHYgLT4gU3hfdHlwZXMuaW5zcGVjdCB2XG4gICAgICBpblxuICAgICAgbGV0IGdsb2JhbCA9IFN0cmluZy5jb250YWlucyBmbGFncyAnZycgaW5cbiAgICAgIGlmIGdsb2JhbCB0aGVuXG4gICAgICAgIFN0cmluZyAoUmUucmVwbGFjZSByZSB+ZjpjYWxsX2ZuIHMpXG4gICAgICBlbHNlXG4gICAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBTdHJpbmcgc1xuICAgICAgICAgfCBTb21lIGcgLT5cbiAgICAgICAgICAgbGV0IHJlcGwgPSBjYWxsX2ZuIGcgaW5cbiAgICAgICAgICAgbGV0IGJlZm9yZSA9IFN0cmluZy5zdWIgcyAwIChSZS5Hcm91cC5zdGFydCBnIDApIGluXG4gICAgICAgICAgIGxldCBhZnRlcl9zdGFydCA9IFJlLkdyb3VwLnN0b3AgZyAwIGluXG4gICAgICAgICAgIGxldCBhZnRlciA9IFN0cmluZy5zdWIgcyBhZnRlcl9zdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gYWZ0ZXJfc3RhcnQpIGluXG4gICAgICAgICAgIFN0cmluZyAoYmVmb3JlIF4gcmVwbCBeIGFmdGVyKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlLWZuOiAocmVnZXggc3RyaW5nIGZuKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtc3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBfKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gU3RyaW5nIHgpIChSZS5zcGxpdCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zcGxpdDogKHJlZ2V4IHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXNvdXJjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4XSAtPlxuICAgICAgbGV0IChfLCBzb3VyY2UsIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIFN0cmluZyBzb3VyY2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zb3VyY2U6IChyZWdleClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LWZsYWdzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbcnhdIC0+XG4gICAgICBsZXQgKF8sIF8sIGZsYWdzKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBTdHJpbmcgZmxhZ3NcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1mbGFnczogKHJlZ2V4KVwiKSk7XG5cbiAgKCogbWFrZS1yZWdleHAgLyByZWdleHA/IC8gcmVnZXhwLW1hdGNoIC8gcmVnZXhwLW1hdGNoLWFsbCAvIHJlZ2V4cC1yZXBsYWNlIC8gcmVnZXhwLXJlcGxhY2UtYWxsIC8gcmVnZXhwLXNwbGl0ICopXG4gIGxldCBwYXJzZV9yZV9mbGFncyBmbGFncyA9XG4gICAgbGV0IG9wdHMgPSByZWYgW10gaW5cbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ2knIC0+IG9wdHMgOj0gYENBU0VMRVNTIDo6ICFvcHRzXG4gICAgICB8ICdtJyAtPiBvcHRzIDo9IGBNVUxUSUxJTkUgOjogIW9wdHNcbiAgICAgIHwgJ3MnIC0+IG9wdHMgOj0gYERPVEFMTCA6OiAhb3B0c1xuICAgICAgfCBfIC0+ICgpKSBmbGFncztcbiAgICAhb3B0c1xuICBpblxuICBsZXQgbWFrZV9yZWdleHBfdmFsdWUgc291cmNlIGZsYWdzID1cbiAgICBsZXQgb3B0cyA9IHBhcnNlX3JlX2ZsYWdzIGZsYWdzIGluXG4gICAgdHJ5XG4gICAgICBsZXQgY29tcGlsZWQgPSBSZS5jb21waWxlIChSZS5QY3JlLnJlIH5mbGFnczpvcHRzIHNvdXJjZSkgaW5cbiAgICAgIFN4UmVnZXhwIChzb3VyY2UsIGZsYWdzLCBjb21waWxlZClcbiAgICB3aXRoIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwibWFrZS1yZWdleHA6IGludmFsaWQgcGF0dGVybjogXCIgXiBzb3VyY2UpKVxuICBpblxuICBsZXQgbWF0Y2hfZGljdCBnIGlucHV0ID1cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIm1hdGNoXCIgKFN0cmluZyAoUmUuR3JvdXAuZ2V0IGcgMCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwic3RhcnRcIiAoSW50ZWdlciAoUmUuR3JvdXAuc3RhcnQgZyAwKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJlbmRcIiAoSW50ZWdlciAoUmUuR3JvdXAuc3RvcCBnIDApKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImlucHV0XCIgKFN0cmluZyBpbnB1dCk7XG4gICAgbGV0IGNvdW50ID0gUmUuR3JvdXAubmJfZ3JvdXBzIGcgaW5cbiAgICBsZXQgZ3JvdXBzID0gcmVmIFtdIGluXG4gICAgZm9yIGkgPSBjb3VudCAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBzID0gdHJ5IFJlLkdyb3VwLmdldCBnIGkgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICAgICAgZ3JvdXBzIDo9IFN0cmluZyBzIDo6ICFncm91cHNcbiAgICBkb25lO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiZ3JvdXBzXCIgKExpc3QgIWdyb3Vwcyk7XG4gICAgRGljdCBkXG4gIGluXG4gIHJlZ2lzdGVyIFwibWFrZS1yZWdleHBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPiBtYWtlX3JlZ2V4cF92YWx1ZSBzcmMgXCJcIlxuICAgIHwgW1N0cmluZyBzcmM7IFN0cmluZyBmbGFnc10gLT4gbWFrZV9yZWdleHBfdmFsdWUgc3JjIGZsYWdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yZWdleHA6IChwYXR0ZXJuIFtmbGFnc10pXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHA/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtc291cmNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgKHNyYywgXywgXyldIC0+IFN0cmluZyBzcmNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtc291cmNlOiBleHBlY3RlZCByZWdleHBcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1mbGFnc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBmbGFncywgXyldIC0+IFN0cmluZyBmbGFnc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1mbGFnczogZXhwZWN0ZWQgcmVnZXhwXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtbWF0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICB8IE5vbmUgLT4gTmlsXG4gICAgICAgfCBTb21lIGcgLT4gbWF0Y2hfZGljdCBnIHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwLW1hdGNoOiAocmVnZXhwIHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1tYXRjaC1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4gZyAtPiBtYXRjaF9kaWN0IGcgcykgKFJlLmFsbCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtbWF0Y2gtYWxsOiAocmVnZXhwIHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1yZXBsYWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgKF8sIF8sIHJlKTsgU3RyaW5nIHM7IFN0cmluZyByZXBsYWNlbWVudF0gLT5cbiAgICAgIChtYXRjaCBSZS5leGVjX29wdCByZSBzIHdpdGhcbiAgICAgICB8IE5vbmUgLT4gU3RyaW5nIHNcbiAgICAgICB8IFNvbWUgZyAtPlxuICAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgIGxldCBuID0gU3RyaW5nLmxlbmd0aCByZXBsYWNlbWVudCBpblxuICAgICAgICAgbGV0IGV4cGFuZCAoKSA9XG4gICAgICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgICBkb25lXG4gICAgICAgICBpblxuICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChTdHJpbmcuc3ViIHMgMCAoUmUuR3JvdXAuc3RhcnQgZyAwKSk7XG4gICAgICAgICBleHBhbmQgKCk7XG4gICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN0cmluZy5zdWIgcyAoUmUuR3JvdXAuc3RvcCBnIDApXG4gICAgICAgICAgIChTdHJpbmcubGVuZ3RoIHMgLSBSZS5Hcm91cC5zdG9wIGcgMCkpO1xuICAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtcmVwbGFjZTogKHJlZ2V4cCBzdHJpbmcgcmVwbGFjZW1lbnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtcmVwbGFjZS1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgczsgU3RyaW5nIHJlcGxhY2VtZW50XSAtPlxuICAgICAgbGV0IGV4cGFuZCBnID1cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQpIGluXG4gICAgICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICAgICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHJlcGxhY2VtZW50IGluXG4gICAgICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgICAgIGxldCBjID0gcmVwbGFjZW1lbnQuWyFpXSBpblxuICAgICAgICAgIGlmIGMgPSAnJCcgJiYgIWkgKyAxIDwgbiB0aGVuXG4gICAgICAgICAgICAobWF0Y2ggcmVwbGFjZW1lbnQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUmUuR3JvdXAuZ2V0IGcgMCk7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCAnJCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJCc7IGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBjIHdoZW4gYyA+PSAnMCcgJiYgYyA8PSAnOScgLT5cbiAgICAgICAgICAgICAgIGxldCBpZHggPSBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcgaW5cbiAgICAgICAgICAgICAgICh0cnkgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyBpZHgpIHdpdGggTm90X2ZvdW5kIC0+ICgpKTtcbiAgICAgICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICAgIGVsc2UgKEJ1ZmZlci5hZGRfY2hhciBidWYgYzsgaW5jciBpKVxuICAgICAgICBkb25lO1xuICAgICAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBpblxuICAgICAgU3RyaW5nIChSZS5yZXBsYWNlIHJlIH5mOmV4cGFuZCBzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1yZXBsYWNlLWFsbDogKHJlZ2V4cCBzdHJpbmcgcmVwbGFjZW1lbnQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleHAtc3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgc10gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4geCAtPiBTdHJpbmcgeCkgKFJlLnNwbGl0IHJlIHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1zcGxpdDogKHJlZ2V4cCBzdHJpbmcpXCIpKTtcbiAgKCogQml0d2lzZSBvcGVyYXRpb25zICopXG4gIHJlZ2lzdGVyIFwiYml0d2lzZS1hbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoYSBsYW5kIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0d2lzZS1hbmQ6IGV4cGVjdGVkIChpbnRlZ2VyIGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJiaXR3aXNlLW9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbG9yIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0d2lzZS1vcjogZXhwZWN0ZWQgKGludGVnZXIgaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImJpdHdpc2UteG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbHhvciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpdHdpc2UteG9yOiBleHBlY3RlZCAoaW50ZWdlciBpbnRlZ2VyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYml0d2lzZS1ub3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGFdIC0+IEludGVnZXIgKGxub3QgYSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJiaXR3aXNlLW5vdDogZXhwZWN0ZWQgKGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJhcml0aG1ldGljLXNoaWZ0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGNvdW50XSAtPlxuICAgICAgSW50ZWdlciAoaWYgY291bnQgPj0gMCB0aGVuIGEgbHNsIGNvdW50IGVsc2UgYSBhc3IgKC1jb3VudCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXJpdGhtZXRpYy1zaGlmdDogZXhwZWN0ZWQgKGludGVnZXIgaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImJpdC1jb3VudFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYV0gLT5cbiAgICAgIGxldCBuID0gcmVmIChhYnMgYSkgaW5cbiAgICAgIGxldCBjID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFuIDw+IDAgZG9cbiAgICAgICAgYyA6PSAhYyArICghbiBsYW5kIDEpO1xuICAgICAgICBuIDo9ICFuIGxzciAxXG4gICAgICBkb25lO1xuICAgICAgSW50ZWdlciAhY1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpdC1jb3VudDogZXhwZWN0ZWQgKGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlZ2VyLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYV0gLT5cbiAgICAgIGxldCBuID0gcmVmIChhYnMgYSkgaW5cbiAgICAgIGxldCBiaXRzID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFuIDw+IDAgZG9cbiAgICAgICAgaW5jciBiaXRzO1xuICAgICAgICBuIDo9ICFuIGxzciAxXG4gICAgICBkb25lO1xuICAgICAgSW50ZWdlciAhYml0c1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImludGVnZXItbGVuZ3RoOiBleHBlY3RlZCAoaW50ZWdlcilcIikpO1xuXG4gICgqIFBoYXNlIDEwOiBtdXRhYmxlIGhhc2ggdGFibGVzICopXG4gIHJlZ2lzdGVyIFwibWFrZS1oYXNoLXRhYmxlXCIgKGZ1biBfIC0+IEhhc2hUYWJsZSAoSGFzaHRibC5jcmVhdGUgMTYpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodDsgazsgdl0gLT5cbiAgICAgICh0cnkgSGFzaHRibC5yZXBsYWNlIGh0IGsgdlxuICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgKCogZmFsbGJhY2s6IHNjYW4gZm9yIHBoeXNpY2FsbHkgZXF1YWwga2V5ICopXG4gICAgICAgICBsZXQgZm91bmQgPSByZWYgZmFsc2UgaW5cbiAgICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGVrIF8gLT4gaWYgZWsgPT0gayB0aGVuIChIYXNodGJsLnJlcGxhY2UgaHQgZWsgdjsgZm91bmQgOj0gdHJ1ZSkpIGh0O1xuICAgICAgICAgaWYgbm90ICFmb3VuZCB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1zZXQhOiBleHBlY3RlZCAoaHQga2V5IHZhbClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBrXSAtPlxuICAgICAgKHRyeSBIYXNodGJsLmZpbmQgaHQga1xuICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImhhc2gtdGFibGUtcmVmOiBrZXkgbm90IGZvdW5kXCIpKSlcbiAgICB8IFtIYXNoVGFibGUgaHQ7IGs7IGRlZmF1bHRdIC0+XG4gICAgICAodHJ5IEhhc2h0YmwuZmluZCBodCBrIHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1yZWY6IGV4cGVjdGVkIChodCBrZXkpIG9yIChodCBrZXkgZGVmYXVsdClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtZGVsZXRlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodDsga10gLT4gSGFzaHRibC5yZW1vdmUgaHQgazsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1kZWxldGUhOiBleHBlY3RlZCAoaHQga2V5KVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1zaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPiBJbnRlZ2VyIChIYXNodGJsLmxlbmd0aCBodClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLXNpemU6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUta2V5c1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodF0gLT4gTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1rZXlzOiBleHBlY3RlZCAoaHQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlLXZhbHVlc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0hhc2hUYWJsZSBodF0gLT4gTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gXyB2IGFjYyAtPiB2IDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS12YWx1ZXM6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtPmFsaXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPlxuICAgICAgTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiBMaXN0IFtrOyB2XSA6OiBhY2MpIGh0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhc2gtdGFibGUtPmFsaXN0OiBleHBlY3RlZCAoaHQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlLWZvci1lYWNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBmbl0gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFtrOyB2XSkpKSBodDtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhc2gtdGFibGUtZm9yLWVhY2g6IGV4cGVjdGVkIChodCBmbilcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtbWVyZ2UhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGRzdDsgSGFzaFRhYmxlIHNyY10gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgZHN0IGsgdikgc3JjO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1tZXJnZSE6IGV4cGVjdGVkIChkc3Qgc3JjKVwiKSk7XG4gICgqIFBoYXNlIDExOiBzZXF1ZW5jZSBwcm90b2NvbCAqKVxuICBsZXQgc2VxX3RvX2xpc3QgdiA9XG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBOaWwgLT4gTGlzdCBbXVxuICAgIHwgTGlzdCBfIC0+IHZcbiAgICB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdCBpdGVtc1xuICAgIHwgVmVjdG9yIGFyciAtPiBMaXN0IChBcnJheS50b19saXN0IGFycilcbiAgICB8IFN0cmluZyBzIC0+XG4gICAgICBsZXQgY2hhcnMgPSByZWYgW10gaW5cbiAgICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBjaGFycyA6PSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYykgOjogIWNoYXJzKSBzO1xuICAgICAgTGlzdCAoTGlzdC5yZXYgIWNoYXJzKVxuICAgIHwgXyAtPiB2XG4gIGluXG4gIHJlZ2lzdGVyIFwic2VxLXRvLWxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBzZXFfdG9fbGlzdCB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxLXRvLWxpc3Q6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS10by1saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gc2VxX3RvX2xpc3QgdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXRvLWxpc3Q6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS10by12ZWN0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc2VxX3RvX2xpc3QgdiB3aXRoIExpc3QgeHMgLT4gVmVjdG9yIChBcnJheS5vZl9saXN0IHhzKSB8IHggLT4geClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS10by12ZWN0b3I6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgIHwgW1ZlY3RvciBhcnJdIC0+IEludGVnZXIgKEFycmF5Lmxlbmd0aCBhcnIpXG4gICAgfCBbdl0gLT4gKG1hdGNoIHNlcV90b19saXN0IHYgd2l0aFxuICAgICAgICB8IExpc3QgeHMgLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggeHMpXG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLWxlbmd0aDogZXhwZWN0ZWQgc2VxdWVuY2VcIikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtbGVuZ3RoOiBleHBlY3RlZCAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic2VxdWVuY2UtcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IEludGVnZXIgaV0gLT5cbiAgICAgIGlmIGkgPCAwIHx8IGkgPj0gU3RyaW5nLmxlbmd0aCBzXG4gICAgICB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInNlcXVlbmNlLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGkpKVxuICAgICAgZWxzZSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgKFN0cmluZy5nZXQgcyBpKSlcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIG5dIC0+XG4gICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBpZiBpIDwgMCB8fCBpID49IFN0cmluZy5sZW5ndGggc1xuICAgICAgdGhlbiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJzZXF1ZW5jZS1yZWY6IGluZGV4ICVkIG91dCBvZiBib3VuZHNcIiBpKSlcbiAgICAgIGVsc2UgU3RyaW5nIChTdHJpbmcubWFrZSAxIChTdHJpbmcuZ2V0IHMgaSkpXG4gICAgfCBbdjsgaWR4XSAtPlxuICAgICAgbGV0IGxzdCA9IHNlcV90b19saXN0IHYgaW5cbiAgICAgIGxldCBpID0gKG1hdGNoIGlkeCB3aXRoIEludGVnZXIgbiAtPiBuIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtcmVmOiBpbmRleCBtdXN0IGJlIG51bWJlclwiKSkgaW5cbiAgICAgIChtYXRjaCBsc3Qgd2l0aFxuICAgICAgIHwgTGlzdCB4cyAtPlxuICAgICAgICAgKHRyeSBMaXN0Lm50aCB4cyBpXG4gICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInNlcXVlbmNlLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGkpKSlcbiAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1yZWY6IGV4cGVjdGVkIHNlcXVlbmNlXCIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXJlZjogZXhwZWN0ZWQgKHNlcSBpbmRleClcIikpO1xuICByZWdpc3RlciBcInNlcXVlbmNlLWFwcGVuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzMTsgU3RyaW5nIHMyXSAtPiBTdHJpbmcgKHMxIF4gczIpXG4gICAgfCBbdjE7IHYyXSAtPlxuICAgICAgbGV0IGwxID0gc2VxX3RvX2xpc3QgdjEgaW5cbiAgICAgIGxldCBsMiA9IHNlcV90b19saXN0IHYyIGluXG4gICAgICAobWF0Y2ggbDEsIGwyIHdpdGhcbiAgICAgICB8IExpc3QgeHMxLCBMaXN0IHhzMiAtPiBMaXN0ICh4czEgQCB4czIpXG4gICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtYXBwZW5kOiBleHBlY3RlZCBzZXF1ZW5jZXNcIikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtYXBwZW5kOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImluLXJhbmdlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPlxuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9IGlmIGkgPCAwIHRoZW4gYWNjIGVsc2UgYnVpbGQgKGktMSkgKEludGVnZXIgaSA6OiBhY2MpIGluXG4gICAgICBMaXN0IChidWlsZCAobi0xKSBbXSlcbiAgICB8IFtOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBoaSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBsZXQgcmVjIGJ1aWxkIGkgYWNjID0gaWYgaSA8IDAgdGhlbiBhY2MgZWxzZSBidWlsZCAoaS0xKSAoSW50ZWdlciBpIDo6IGFjYykgaW5cbiAgICAgIExpc3QgKGJ1aWxkIChoaS0xKSBbXSlcbiAgICB8IFtJbnRlZ2VyIGxvOyBJbnRlZ2VyIGhpXSAtPlxuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9IGlmIGkgPCBsbyB0aGVuIGFjYyBlbHNlIGJ1aWxkIChpLTEpIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoYnVpbGQgKGhpLTEpIFtdKVxuICAgIHwgW051bWJlciBsbzsgTnVtYmVyIGhpXSAtPlxuICAgICAgbGV0IGxvX2kgPSBpbnRfb2ZfZmxvYXQgbG8gYW5kIGhpX2kgPSBpbnRfb2ZfZmxvYXQgaGkgaW5cbiAgICAgIGxldCByZWMgYnVpbGQgaSBhY2MgPSBpZiBpIDwgbG9faSB0aGVuIGFjYyBlbHNlIGJ1aWxkIChpLTEpIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoYnVpbGQgKGhpX2ktMSkgW10pXG4gICAgfCBbSW50ZWdlciBsbzsgSW50ZWdlciBoaTsgSW50ZWdlciBzdGVwXSAtPlxuICAgICAgaWYgc3RlcCA9IDAgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcImluLXJhbmdlOiBzdGVwIGNhbm5vdCBiZSB6ZXJvXCIpO1xuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9XG4gICAgICAgIGlmIChzdGVwID4gMCAmJiBpID49IGhpKSB8fCAoc3RlcCA8IDAgJiYgaSA8PSBoaSkgdGhlbiBhY2NcbiAgICAgICAgZWxzZSBidWlsZCAoaSArIHN0ZXApIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoTGlzdC5yZXYgKGJ1aWxkIGxvIFtdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbi1yYW5nZTogZXhwZWN0ZWQgKGVuZCkgb3IgKHN0YXJ0IGVuZCkgb3IgKHN0YXJ0IGVuZCBzdGVwKVwiKSk7XG4gICgqID09PSBnZW5zeW0gKyBzeW1ib2wgaW50ZXJuaW5nID09PSAqKVxuICByZWdpc3RlciBcImdlbnN5bVwiIChmdW4gYXJncyAtPlxuICAgIGxldCBwcmVmaXggPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW10gLT4gXCJnXCJcbiAgICAgIHwgW1N0cmluZyBzXSAtPiBzXG4gICAgICB8IFtTeW1ib2wgc10gLT4gc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZ2Vuc3ltOiBleHBlY3RlZCBvcHRpb25hbCBwcmVmaXggc3RyaW5nXCIpIGluXG4gICAgaW5jciBnZW5zeW1fY291bnRlcjtcbiAgICBTeW1ib2wgKHByZWZpeCBeIHN0cmluZ19vZl9pbnQgIWdlbnN5bV9jb3VudGVyKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLT5zeW1ib2xcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3ltYm9sIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPnN5bWJvbDogZXhwZWN0ZWQgMSBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcInN5bWJvbC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ltYm9sIHNdIC0+IFN0cmluZyBzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sLT5zdHJpbmc6IGV4cGVjdGVkIDEgc3ltYm9sXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlcm5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3ltYm9sIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnRlcm46IGV4cGVjdGVkIDEgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJzeW1ib2wtaW50ZXJuZWQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ltYm9sIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbC1pbnRlcm5lZD86IGV4cGVjdGVkIDEgc3ltYm9sXCIpKTtcbiAgKCogUGhhc2UgMTM6IGNoYXJhY3RlciB0eXBlICopXG4gIGxldCBjaGFyX2Rvd25jYXNlX2NwIG4gPVxuICAgIGlmIG4gPj0gNjUgJiYgbiA8PSA5MCB0aGVuIG4gKyAzMiBlbHNlIG4gaW5cbiAgbGV0IGNoYXJfdXBjYXNlX2NwIG4gPVxuICAgIGlmIG4gPj0gOTcgJiYgbiA8PSAxMjIgdGhlbiBuIC0gMzIgZWxzZSBuIGluXG4gIHJlZ2lzdGVyIFwibWFrZS1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBDaGFyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWNoYXI6IGV4cGVjdGVkIGludGVnZXIgY29kZXBvaW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci0+aW50ZWdlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gSW50ZWdlciBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci0+aW50ZWdlcjogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiaW50ZWdlci0+Y2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gQ2hhciBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW50ZWdlci0+Y2hhcjogZXhwZWN0ZWQgaW50ZWdlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci11cGNhc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IENoYXIgKGNoYXJfdXBjYXNlX2NwIG4pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci11cGNhc2U6IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItZG93bmNhc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IENoYXIgKGNoYXJfZG93bmNhc2VfY3AgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWRvd25jYXNlOiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPT9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPSBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcj0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPD9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPCBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcjw/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPj9cIiAgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPiBiKSAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcj4/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPD0/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPD0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcjw9PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhcj49P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChhID49IGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXI+PT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k9P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhID0gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k8P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhIDwgY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPD86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k+P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhID4gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPj86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItY2k8PT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoY2hhcl9kb3duY2FzZV9jcCBhIDw9IGNoYXJfZG93bmNhc2VfY3AgYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1jaTw9PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaT49P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPj0gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPj0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWFscGhhYmV0aWM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBCb29sICgobiA+PSA2NSAmJiBuIDw9IDkwKSB8fCAobiA+PSA5NyAmJiBuIDw9IDEyMikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1hbHBoYWJldGljPzogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1udW1lcmljP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQm9vbCAobiA+PSA0OCAmJiBuIDw9IDU3KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItbnVtZXJpYz86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItd2hpdGVzcGFjZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKG4gPSAzMiB8fCBuID0gOSB8fCBuID0gMTAgfHwgbiA9IDEzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItd2hpdGVzcGFjZT86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItdXBwZXItY2FzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKG4gPj0gNjUgJiYgbiA8PSA5MClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLXVwcGVyLWNhc2U/OiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWxvd2VyLWNhc2U/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBCb29sIChuID49IDk3ICYmIG4gPD0gMTIyKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItbG93ZXItY2FzZT86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcInN0cmluZy0+bGlzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgbGV0IGNoYXJzID0gcmVmIFtdIGluXG4gICAgICBTdHJpbmcuaXRlciAoZnVuIGMgLT4gY2hhcnMgOj0gQ2hhciAoQ2hhci5jb2RlIGMpIDo6ICFjaGFycykgcztcbiAgICAgIExpc3QgKExpc3QucmV2ICFjaGFycylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPmxpc3Q6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBjaGFyc10gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gY2hhcnMgfV0gLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChMaXN0Lmxlbmd0aCBjaGFycykgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgICAgfCBDaGFyIG4gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKG4gbGFuZCAweEZGKSlcbiAgICAgICAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImxpc3QtPnN0cmluZzogZXhwZWN0ZWQgY2hhciwgZ290IFwiIF4gdHlwZV9vZiB2KSlcbiAgICAgICkgY2hhcnM7XG4gICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGlzdC0+c3RyaW5nOiBleHBlY3RlZCBsaXN0IG9mIGNoYXJzXCIpKTtcbiAgKCogUGhhc2UgMTQg4oCUIEVPRiBvYmplY3QgKyBzdHJpbmcgcG9ydHMgKilcbiAgcmVnaXN0ZXIgXCJlb2Ytb2JqZWN0XCIgKGZ1biBfYXJncyAtPiBFb2YpO1xuICByZWdpc3RlciBcImVvZi1vYmplY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRW9mXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlb2Ytb2JqZWN0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwib3Blbi1pbnB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT5cbiAgICAgIFBvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRJbnB1dCAocywgcmVmIDApIH1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvcGVuLWlucHV0LXN0cmluZzogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJvcGVuLW91dHB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IFBvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgKEJ1ZmZlci5jcmVhdGUgNjQpIH1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvcGVuLW91dHB1dC1zdHJpbmc6IGV4cGVjdGVkIG5vIGFyZ3VtZW50c1wiKSk7XG4gIHJlZ2lzdGVyIFwiZ2V0LW91dHB1dC1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgYnVmOyBfIH1dIC0+IFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZXQtb3V0cHV0LXN0cmluZzogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcInBvcnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUG9ydCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwb3J0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwiaW5wdXQtcG9ydD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHsgc3Bfa2luZCA9IFBvcnRJbnB1dCBfOyBfIH1dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnB1dC1wb3J0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwib3V0cHV0LXBvcnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUG9ydCB7IHNwX2tpbmQgPSBQb3J0T3V0cHV0IF87IF8gfV0gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvdXRwdXQtcG9ydD86IGV4cGVjdGVkIDEgYXJndW1lbnRcIikpO1xuICByZWdpc3RlciBcImNsb3NlLXBvcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHBdIC0+IHAuc3BfY2xvc2VkIDwtIHRydWU7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsb3NlLXBvcnQ6IGV4cGVjdGVkIHBvcnRcIikpO1xuICByZWdpc3RlciBcInJlYWQtY2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWNoYXI6IG5vIGRlZmF1bHQgcG9ydCBpbiB0aGlzIGhvc3RcIilcbiAgICB8IFtQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRPdXRwdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGlmIHAuc3BfY2xvc2VkIHx8ICFwb3MgPj0gU3RyaW5nLmxlbmd0aCBzcmMgdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgbGV0IGNwID0gQ2hhci5jb2RlIHNyYy5bIXBvc10gaW5cbiAgICAgICAgICAgaW5jciBwb3M7XG4gICAgICAgICAgIENoYXIgY3BcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWNoYXI6IGV4cGVjdGVkIGlucHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcInBlZWstY2hhclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwZWVrLWNoYXI6IG5vIGRlZmF1bHQgcG9ydCBpbiB0aGlzIGhvc3RcIilcbiAgICB8IFtQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRPdXRwdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWstY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGlmIHAuc3BfY2xvc2VkIHx8ICFwb3MgPj0gU3RyaW5nLmxlbmd0aCBzcmMgdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgQ2hhciAoQ2hhci5jb2RlIHNyYy5bIXBvc10pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWstY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwicmVhZC1saW5lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtbGluZTogbm8gZGVmYXVsdCBwb3J0IGluIHRoaXMgaG9zdFwiKVxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1saW5lOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0SW5wdXQgKHNyYywgcG9zKSAtPlxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBTdHJpbmcubGVuZ3RoIHNyYyB0aGVuIEVvZlxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBsZXQgc3RhcnQgPSAhcG9zIGluXG4gICAgICAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYyBpblxuICAgICAgICAgICB3aGlsZSAhcG9zIDwgbGVuICYmIHNyYy5bIXBvc10gPD4gJ1xcbicgZG8gaW5jciBwb3MgZG9uZTtcbiAgICAgICAgICAgbGV0IGxpbmUgPSBTdHJpbmcuc3ViIHNyYyBzdGFydCAoIXBvcyAtIHN0YXJ0KSBpblxuICAgICAgICAgICBpZiAhcG9zIDwgbGVuIHRoZW4gaW5jciBwb3M7XG4gICAgICAgICAgIFN0cmluZyBsaW5lXG4gICAgICAgICBlbmQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1saW5lOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZS1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuOyBQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRJbnB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGUtY2hhcjogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIilcbiAgICAgICB8IFBvcnRPdXRwdXQgYnVmIC0+XG4gICAgICAgICBpZiBub3QgcC5zcF9jbG9zZWQgdGhlblxuICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChDaGFyLmNociAobiBsYW5kIDB4RkYpKTtcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1jaGFyOiBleHBlY3RlZCBjaGFyIGFuZCBvdXRwdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwid3JpdGUtc3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IFBvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydElucHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1zdHJpbmc6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gICAgICAgICBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGUtc3RyaW5nOiBleHBlY3RlZCBzdHJpbmcgYW5kIG91dHB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLXJlYWR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BvcnQgeyBzcF9jbG9zZWQgPSBmYWxzZTsgc3Bfa2luZCA9IFBvcnRJbnB1dCAoc3JjLCBwb3MpOyBfIH1dIC0+XG4gICAgICBCb29sICghcG9zIDwgU3RyaW5nLmxlbmd0aCBzcmMpXG4gICAgfCBbUG9ydCBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1yZWFkeT86IGV4cGVjdGVkIGlucHV0IHBvcnRcIikpXG47XG4gICgqID09PSByZWFkIC8gd3JpdGUgLyBkaXNwbGF5ID09PSAqKVxuICBsZXQgcmVjIHJlYWRfcG9zdHByb2Nlc3MgPSBmdW5jdGlvblxuICAgIHwgTGlzdCBbXSAtPiBOaWxcbiAgICB8IExpc3QgaXRlbXMgLT4gTGlzdCAoTGlzdC5tYXAgcmVhZF9wb3N0cHJvY2VzcyBpdGVtcylcbiAgICB8IHYgLT4gdlxuICBpblxuICByZWdpc3RlciBcInJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEVvZlxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZDogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydElucHV0IChzcmMsIHBvcykgLT5cbiAgICAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYyBpblxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBsZW4gdGhlbiBFb2ZcbiAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgbGV0IHN1YiA9IFN0cmluZy5zdWIgc3JjICFwb3MgKGxlbiAtICFwb3MpIGluXG4gICAgICAgICAgIGxldCBzID0gU3hfcGFyc2VyLm1ha2Vfc3RhdGUgc3ViIGluXG4gICAgICAgICAgIFN4X3BhcnNlci5za2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgICAgICAgIGlmIFN4X3BhcnNlci5hdF9lbmQgcyB0aGVuIChwb3MgOj0gbGVuOyBFb2YpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAodHJ5IGxldCBmb3JtID0gcmVhZF9wb3N0cHJvY2VzcyAoU3hfcGFyc2VyLnJlYWRfdmFsdWUgcykgaW5cbiAgICAgICAgICAgICAgICAgIHBvcyA6PSAhcG9zICsgcy5wb3M7IGZvcm1cbiAgICAgICAgICAgICAgd2l0aCBfIC0+IHBvcyA6PSBsZW47IEVvZilcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkOiBleHBlY3RlZCBvcHRpb25hbCBpbnB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IFN0cmluZyAoc3hfd3JpdGVfdmFsIHYpXG4gICAgfCBbdjsgUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlOiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydE91dHB1dCBidWYgLT5cbiAgICAgICAgIGlmIG5vdCBwLnNwX2Nsb3NlZCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3hfd3JpdGVfdmFsIHYpO1xuICAgICAgICAgTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlOiBleHBlY3RlZCB2YWwgW3BvcnRdXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNwbGF5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF9kaXNwbGF5X3ZhbCB2KVxuICAgIHwgW3Y7IFBvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydElucHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaXNwbGF5OiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydE91dHB1dCBidWYgLT5cbiAgICAgICAgIGlmIG5vdCBwLnNwX2Nsb3NlZCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3hfZGlzcGxheV92YWwgdik7XG4gICAgICAgICBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGlzcGxheTogZXhwZWN0ZWQgdmFsIFtwb3J0XVwiKSk7XG4gIHJlZ2lzdGVyIFwibmV3bGluZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gTmlsXG4gICAgfCBbUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5ld2xpbmU6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJuZXdsaW5lOiBleHBlY3RlZCBvcHRpb25hbCBvdXRwdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwid3JpdGUtdG8tc3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF93cml0ZV92YWwgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS10by1zdHJpbmc6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNwbGF5LXRvLXN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IFN0cmluZyAoc3hfZGlzcGxheV92YWwgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaXNwbGF5LXRvLXN0cmluZzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImZvcm1hdC1kZWNpbWFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIHByZWNdIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLipmXCIgcHJlYyAoZmxvYXRfb2ZfaW50IG4pKVxuICAgIHwgW051bWJlciBuOyAgSW50ZWdlciBwcmVjXSAtPiBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiJS4qZlwiIHByZWMgbilcbiAgICB8IFtJbnRlZ2VyIG47IF9dIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLjZmXCIgKGZsb2F0X29mX2ludCBuKSlcbiAgICB8IFtOdW1iZXIgbjsgIF9dIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLjZmXCIgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmb3JtYXQtZGVjaW1hbDogZXhwZWN0ZWQgbnVtYmVyIHByZWNpc2lvblwiKSk7XG4gIHJlZ2lzdGVyIFwiY3VycmVudC1pbnB1dC1wb3J0XCIgIChmdW4gXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImN1cnJlbnQtb3V0cHV0LXBvcnRcIiAoZnVuIF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjdXJyZW50LWVycm9yLXBvcnRcIiAgKGZ1biBfIC0+IE5pbCk7XG4gICgqIC0tLS0gU2V0cyAtLS0tICopXG4gIGxldCBzZXRfa2V5IHYgPSBTeF90eXBlcy5pbnNwZWN0IHYgaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLXNldFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBodCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICAobWF0Y2ggYXJncyB3aXRoXG4gICAgIHwgW10gLT4gKClcbiAgICAgfCBbTGlzdCBpdGVtc10gLT4gTGlzdC5pdGVyIChmdW4gdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgKHNldF9rZXkgdikgdikgaXRlbXNcbiAgICAgfCBbTGlzdFJlZiByXSAtPiBMaXN0Lml0ZXIgKGZ1biB2IC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2KSAhclxuICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXNldDogZXhwZWN0ZWQgb3B0aW9uYWwgbGlzdFwiKSk7XG4gICAgU3hTZXQgaHQpO1xuICByZWdpc3RlciBcInNldD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNldC1hZGQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IHZdIC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2OyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtYWRkITogZXhwZWN0ZWQgc2V0IHZhbFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LW1lbWJlcj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodDsgdl0gLT4gQm9vbCAoSGFzaHRibC5tZW0gaHQgKHNldF9rZXkgdikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW1lbWJlcj86IGV4cGVjdGVkIHNldCB2YWxcIikpO1xuICByZWdpc3RlciBcInNldC1yZW1vdmUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IHZdIC0+IEhhc2h0YmwucmVtb3ZlIGh0IChzZXRfa2V5IHYpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtcmVtb3ZlITogZXhwZWN0ZWQgc2V0IHZhbFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LXNpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodF0gLT4gSW50ZWdlciAoSGFzaHRibC5sZW5ndGggaHQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LXNpemU6IGV4cGVjdGVkIHNldFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHRdIC0+IExpc3QgKEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhY2MgLT4gdiA6OiBhY2MpIGh0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC0+bGlzdDogZXhwZWN0ZWQgc2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJsaXN0LT5zZXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGl0ZW1zXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgKExpc3QubGVuZ3RoIGl0ZW1zKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgKHNldF9rZXkgdikgdikgaXRlbXM7XG4gICAgICBTeFNldCBodFxuICAgIHwgW0xpc3RSZWYgcl0gLT5cbiAgICAgIGxldCBodCA9IEhhc2h0YmwuY3JlYXRlIChMaXN0Lmxlbmd0aCAhcikgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gSGFzaHRibC5yZXBsYWNlIGh0IChzZXRfa2V5IHYpIHYpICFyO1xuICAgICAgU3hTZXQgaHRcbiAgICB8IFtOaWxdIC0+IFN4U2V0IChIYXNodGJsLmNyZWF0ZSAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxpc3QtPnNldDogZXhwZWN0ZWQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LXVuaW9uXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgYTsgU3hTZXQgYl0gLT5cbiAgICAgIGxldCBodCA9IEhhc2h0YmwuY29weSBhIGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIGh0IGsgdikgYjtcbiAgICAgIFN4U2V0IGh0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LXVuaW9uOiBleHBlY3RlZCAyIHNldHNcIikpO1xuICByZWdpc3RlciBcInNldC1pbnRlcnNlY3Rpb25cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBhOyBTeFNldCBiXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlmIEhhc2h0YmwubWVtIGIgayB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpIGE7XG4gICAgICBTeFNldCBodFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1pbnRlcnNlY3Rpb246IGV4cGVjdGVkIDIgc2V0c1wiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LWRpZmZlcmVuY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBhOyBTeFNldCBiXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlmIG5vdCAoSGFzaHRibC5tZW0gYiBrKSB0aGVuIEhhc2h0YmwucmVwbGFjZSBodCBrIHYpIGE7XG4gICAgICBTeFNldCBodFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1kaWZmZXJlbmNlOiBleHBlY3RlZCAyIHNldHNcIikpO1xuICByZWdpc3RlciBcInNldC1mb3ItZWFjaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGh0OyBmbl0gLT5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPiBpZ25vcmUgKCFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFt2XSkpKSBodDtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1mb3ItZWFjaDogZXhwZWN0ZWQgc2V0IGZuXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbWFwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IGZuXSAtPlxuICAgICAgbGV0IG91dCA9IEhhc2h0YmwuY3JlYXRlIChIYXNodGJsLmxlbmd0aCBodCkgaW5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPlxuICAgICAgICBsZXQgciA9ICFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGZuIChMaXN0IFt2XSkgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIG91dCAoc2V0X2tleSByKSByKSBodDtcbiAgICAgIFN4U2V0IG91dFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1tYXA6IGV4cGVjdGVkIHNldCBmblwiKSk7XG4gICgqID09PSBCeXRldmVjdG9ycyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJtYWtlLWJ5dGV2ZWN0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IFN4Qnl0ZXZlY3RvciAoQnl0ZXMubWFrZSBuICdcXDAwMCcpXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIGZpbGxdIC0+XG4gICAgICBpZiBmaWxsIDwgMCB8fCBmaWxsID4gMjU1IHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWJ5dGV2ZWN0b3I6IGZpbGwgbXVzdCBiZSAwLTI1NVwiKTtcbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMubWFrZSBuIChDaGFyLmNociBmaWxsKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWJ5dGV2ZWN0b3I6IGV4cGVjdGVkIG4gW2ZpbGxdXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiXSAtPiBJbnRlZ2VyIChCeXRlcy5sZW5ndGggYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLWxlbmd0aDogZXhwZWN0ZWQgYnl0ZXZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwiYnl0ZXZlY3Rvci11OC1yZWZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBpXSAtPlxuICAgICAgaWYgaSA8IDAgfHwgaSA+PSBCeXRlcy5sZW5ndGggYiB0aGVuXG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImJ5dGV2ZWN0b3ItdTgtcmVmOiBpbmRleCAlZCBvdXQgb2YgcmFuZ2VcIiBpKSk7XG4gICAgICBJbnRlZ2VyIChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItdTgtcmVmOiBleHBlY3RlZCBieXRldmVjdG9yIGluZGV4XCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLXU4LXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBpOyBJbnRlZ2VyIGJ5dGVdIC0+XG4gICAgICBpZiBpIDwgMCB8fCBpID49IEJ5dGVzLmxlbmd0aCBiIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiYnl0ZXZlY3Rvci11OC1zZXQhOiBpbmRleCAlZCBvdXQgb2YgcmFuZ2VcIiBpKSk7XG4gICAgICBpZiBieXRlIDwgMCB8fCBieXRlID4gMjU1IHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLXU4LXNldCE6IGJ5dGUgbXVzdCBiZSAwLTI1NVwiKTtcbiAgICAgIEJ5dGVzLnNldCBiIGkgKENoYXIuY2hyIGJ5dGUpOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLXU4LXNldCE6IGV4cGVjdGVkIGJ5dGV2ZWN0b3IgaW5kZXggYnl0ZVwiKSk7XG4gIHJlZ2lzdGVyIFwiYnl0ZXZlY3Rvci1jb3B5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+IFN4Qnl0ZXZlY3RvciAoQnl0ZXMuY29weSBiKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBiIC0gc3RhcnQgaW5cbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMuc3ViIGIgc3RhcnQgbGVuKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIHN0YXJ0OyBJbnRlZ2VyIHN0b3BdIC0+XG4gICAgICBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLnN1YiBiIHN0YXJ0IChzdG9wIC0gc3RhcnQpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItY29weTogZXhwZWN0ZWQgYnl0ZXZlY3RvciBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLWNvcHkhXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGRvX2NvcHkgZHN0IGF0IHNyYyBzdGFydCBzdG9wID1cbiAgICAgIGxldCBsZW4gPSBzdG9wIC0gc3RhcnQgaW5cbiAgICAgIEJ5dGVzLmJsaXQgc3JjIHN0YXJ0IGRzdCBhdCBsZW47IE5pbFxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGRzdDsgSW50ZWdlciBhdDsgU3hCeXRldmVjdG9yIHNyY10gLT5cbiAgICAgIGRvX2NvcHkgZHN0IGF0IHNyYyAwIChCeXRlcy5sZW5ndGggc3JjKVxuICAgIHwgW1N4Qnl0ZXZlY3RvciBkc3Q7IEludGVnZXIgYXQ7IFN4Qnl0ZXZlY3RvciBzcmM7IEludGVnZXIgc3RhcnRdIC0+XG4gICAgICBkb19jb3B5IGRzdCBhdCBzcmMgc3RhcnQgKEJ5dGVzLmxlbmd0aCBzcmMpXG4gICAgfCBbU3hCeXRldmVjdG9yIGRzdDsgSW50ZWdlciBhdDsgU3hCeXRldmVjdG9yIHNyYzsgSW50ZWdlciBzdGFydDsgSW50ZWdlciBzdG9wXSAtPlxuICAgICAgZG9fY29weSBkc3QgYXQgc3JjIHN0YXJ0IHN0b3BcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLWNvcHkhOiBleHBlY3RlZCBkc3QgYXQgc3JjIFtzdGFydCBbZW5kXV1cIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGJ1ZnMgPSBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgIHwgU3hCeXRldmVjdG9yIGIgLT4gYlxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci1hcHBlbmQ6IGV4cGVjdGVkIGJ5dGV2ZWN0b3JzXCIpKSBhcmdzIGluXG4gICAgbGV0IHRvdGFsID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYiAtPiBhY2MgKyBCeXRlcy5sZW5ndGggYikgMCBidWZzIGluXG4gICAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSB0b3RhbCBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIExpc3QuaXRlciAoZnVuIGIgLT5cbiAgICAgIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYiBpblxuICAgICAgQnl0ZXMuYmxpdCBiIDAgcmVzdWx0ICFwb3MgbGVuO1xuICAgICAgcG9zIDo9ICFwb3MgKyBsZW4pIGJ1ZnM7XG4gICAgU3hCeXRldmVjdG9yIHJlc3VsdCk7XG4gIHJlZ2lzdGVyIFwidXRmOC0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+IFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGIpXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnRdIC0+XG4gICAgICBTdHJpbmcgKEJ5dGVzLnN1Yl9zdHJpbmcgYiBzdGFydCAoQnl0ZXMubGVuZ3RoIGIgLSBzdGFydCkpXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnQ7IEludGVnZXIgc3RvcF0gLT5cbiAgICAgIFN0cmluZyAoQnl0ZXMuc3ViX3N0cmluZyBiIHN0YXJ0IChzdG9wIC0gc3RhcnQpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInV0ZjgtPnN0cmluZzogZXhwZWN0ZWQgYnl0ZXZlY3RvciBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctPnV0ZjhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5vZl9zdHJpbmcgcylcbiAgICB8IFtTdHJpbmcgczsgSW50ZWdlciBzdGFydF0gLT5cbiAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgLSBzdGFydCBpblxuICAgICAgU3hCeXRldmVjdG9yIChCeXRlcy5vZl9zdHJpbmcgKFN0cmluZy5zdWIgcyBzdGFydCBsZW4pKVxuICAgIHwgW1N0cmluZyBzOyBJbnRlZ2VyIHN0YXJ0OyBJbnRlZ2VyIHN0b3BdIC0+XG4gICAgICBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLm9mX3N0cmluZyAoU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPnV0Zjg6IGV4cGVjdGVkIHN0cmluZyBbc3RhcnQgW2VuZF1dXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+XG4gICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgKEJ5dGVzLmxlbmd0aCBiKSAoZnVuIGkgLT4gSW50ZWdlciAoQ2hhci5jb2RlIChCeXRlcy5nZXQgYiBpKSkpIGluXG4gICAgICBMaXN0IGl0ZW1zXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci0+bGlzdDogZXhwZWN0ZWQgYnl0ZXZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdC0+Ynl0ZXZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgaXRlbXNdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH1dIC0+XG4gICAgICBsZXQgYnl0ZXNfbGlzdCA9IExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICB8IEludGVnZXIgbiB3aGVuIG4gPj0gMCAmJiBuIDw9IDI1NSAtPiBDaGFyLmNociBuXG4gICAgICAgIHwgSW50ZWdlciBuIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImxpc3QtPmJ5dGV2ZWN0b3I6IGJ5dGUgJWQgb3V0IG9mIHJhbmdlXCIgbikpXG4gICAgICAgIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJsaXN0LT5ieXRldmVjdG9yOiBleHBlY3RlZCBpbnRlZ2VyLCBnb3QgXCIgXiBTeF90eXBlcy50eXBlX29mIHYpKSkgaXRlbXMgaW5cbiAgICAgIGxldCBiID0gQnl0ZXMuY3JlYXRlIChMaXN0Lmxlbmd0aCBieXRlc19saXN0KSBpblxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgYyAtPiBCeXRlcy5zZXQgYiBpIGMpIGJ5dGVzX2xpc3Q7XG4gICAgICBTeEJ5dGV2ZWN0b3IgYlxuICAgIHwgW05pbF0gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5jcmVhdGUgMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0LT5ieXRldmVjdG9yOiBleHBlY3RlZCBsaXN0XCIpKTtcblxuICAoKiA9PT0gRmlsZSBJL08gPT09ICopXG4gIHJlZ2lzdGVyIFwiZmlsZS1yZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGhdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBpYyA9IG9wZW5faW4gcGF0aCBpblxuICAgICAgICBsZXQgbiA9IGluX2NoYW5uZWxfbGVuZ3RoIGljIGluXG4gICAgICAgIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiAgICAgICAgcmVhbGx5X2lucHV0IGljIHMgMCBuO1xuICAgICAgICBjbG9zZV9pbiBpYztcbiAgICAgICAgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgcylcbiAgICAgIHdpdGggU3lzX2Vycm9yIG1zZyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaWxlLXJlYWQ6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1yZWFkOiAocGF0aClcIikpO1xuXG4gICgqIGZlZC1zeCBTdGVwIDMgc2VnbWVudCByZXBsYXkuIFNvcnRlZCBuYW1lcywgbm8gXCIuXCIvXCIuLlwiIDtcbiAgICAgZXJyb3JzIHByZWZpeGVkIGxpa2UgZmlsZS1yZWFkIChtc2cgY2FycmllcyBlbm9lbnQvZW5vdGRpcikuICopXG4gIHJlZ2lzdGVyIFwiZmlsZS1saXN0LWRpclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRoXSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgbmFtZXMgPSBTeXMucmVhZGRpciBwYXRoIGluXG4gICAgICAgIGxldCBuYW1lcyA9XG4gICAgICAgICAgQXJyYXkudG9fbGlzdCBuYW1lc1xuICAgICAgICAgIHw+IExpc3QuZmlsdGVyIChmdW4gbiAtPiBuIDw+IFwiLlwiICYmIG4gPD4gXCIuLlwiKSBpblxuICAgICAgICBsZXQgbmFtZXMgPSBMaXN0LnNvcnQgY29tcGFyZSBuYW1lcyBpblxuICAgICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIG4gLT4gU3RyaW5nIG4pIG5hbWVzKVxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtbGlzdC1kaXI6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1saXN0LWRpcjogKHBhdGgpXCIpKTtcblxuICByZWdpc3RlciBcImZpbGUtd3JpdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aDsgU3RyaW5nIGNvbnRlbnRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBvYyA9IG9wZW5fb3V0IHBhdGggaW5cbiAgICAgICAgb3V0cHV0X3N0cmluZyBvYyBjb250ZW50O1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtd3JpdGU6IFwiIF4gbXNnKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS13cml0ZTogKHBhdGggY29udGVudClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiZmlsZS1hcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aDsgU3RyaW5nIGNvbnRlbnRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBvYyA9IG9wZW5fb3V0X2dlbiBbT3Blbl9hcHBlbmQ7IE9wZW5fY3JlYXQ7IE9wZW5fd3Jvbmx5OyBPcGVuX3RleHRdIDBvNjQ0IHBhdGggaW5cbiAgICAgICAgb3V0cHV0X3N0cmluZyBvYyBjb250ZW50O1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtYXBwZW5kOiBcIiBeIG1zZykpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtYXBwZW5kOiAocGF0aCBjb250ZW50KVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJmaWxlLWV4aXN0cz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT4gQm9vbCAoU3lzLmZpbGVfZXhpc3RzIHBhdGgpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1leGlzdHM/OiAocGF0aClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiZmlsZS1nbG9iXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGdsb2JfbWF0Y2ggcGF0IHN0ciA9XG4gICAgICBsZXQgcG4gPSBTdHJpbmcubGVuZ3RoIHBhdCBhbmQgc24gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgICAgbGV0IHJlYyBnbyBwaSBzaSA9XG4gICAgICAgIGlmIHBpID0gcG4gdGhlbiBzaSA9IHNuXG4gICAgICAgIGVsc2UgbWF0Y2ggcGF0LltwaV0gd2l0aFxuICAgICAgICAgIHwgJyonIC0+XG4gICAgICAgICAgICBsZXQgcmVjIHRyeV9mcm9tIGkgPSBpIDw9IHNuICYmIChnbyAocGkrMSkgaSB8fCB0cnlfZnJvbSAoaSsxKSkgaW5cbiAgICAgICAgICAgIHRyeV9mcm9tIHNpXG4gICAgICAgICAgfCAnPycgLT4gc2kgPCBzbiAmJiBnbyAocGkrMSkgKHNpKzEpXG4gICAgICAgICAgfCAnWycgLT5cbiAgICAgICAgICAgIGxldCBwaScgPSByZWYgKHBpKzEpIGluXG4gICAgICAgICAgICBsZXQgbmVnYXRlID0gIXBpJyA8IHBuICYmIHBhdC5bIXBpJ10gPSAnXicgaW5cbiAgICAgICAgICAgIGlmIG5lZ2F0ZSB0aGVuIGluY3IgcGknO1xuICAgICAgICAgICAgbGV0IG1hdGNoZWQgPSByZWYgZmFsc2UgaW5cbiAgICAgICAgICAgIHdoaWxlICFwaScgPCBwbiAmJiBwYXQuWyFwaSddIDw+ICddJyBkb1xuICAgICAgICAgICAgICBsZXQgYzEgPSBwYXQuWyFwaSddIGluXG4gICAgICAgICAgICAgIGluY3IgcGknO1xuICAgICAgICAgICAgICBpZiAhcGknICsgMSA8IHBuICYmIHBhdC5bIXBpJ10gPSAnLScgdGhlbiBiZWdpblxuICAgICAgICAgICAgICAgIGxldCBjMiA9IHBhdC5bIXBpJyArIDFdIGluXG4gICAgICAgICAgICAgICAgcGknIDo9ICFwaScgKyAyO1xuICAgICAgICAgICAgICAgIGlmIHNpIDwgc24gJiYgc3RyLltzaV0gPj0gYzEgJiYgc3RyLltzaV0gPD0gYzIgdGhlbiBtYXRjaGVkIDo9IHRydWVcbiAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgc2kgPCBzbiAmJiBzdHIuW3NpXSA9IGMxIHRoZW4gbWF0Y2hlZCA6PSB0cnVlXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgaWYgIXBpJyA8IHBuIHRoZW4gaW5jciBwaSc7XG4gICAgICAgICAgICAoKCFtYXRjaGVkICYmIG5vdCBuZWdhdGUpIHx8IChub3QgIW1hdGNoZWQgJiYgbmVnYXRlKSkgJiYgZ28gIXBpJyAoc2krMSlcbiAgICAgICAgICB8IGMgLT4gc2kgPCBzbiAmJiBzdHIuW3NpXSA9IGMgJiYgZ28gKHBpKzEpIChzaSsxKVxuICAgICAgaW4gZ28gMCAwXG4gICAgaW5cbiAgICBsZXQgZ2xvYl9wYXRocyBwYXQgPVxuICAgICAgbGV0IGRpciA9IEZpbGVuYW1lLmRpcm5hbWUgcGF0IGluXG4gICAgICBsZXQgYmFzZV9wYXQgPSBGaWxlbmFtZS5iYXNlbmFtZSBwYXQgaW5cbiAgICAgIGxldCBkaXInID0gaWYgZGlyID0gXCIuXCIgJiYgbm90IChTdHJpbmcubGVuZ3RoIHBhdCA+IDEgJiYgcGF0LlswXSA9ICcuJykgdGhlbiBcIi5cIiBlbHNlIGRpciBpblxuICAgICAgKHRyeVxuICAgICAgICBsZXQgZW50cmllcyA9IFN5cy5yZWFkZGlyIGRpcicgaW5cbiAgICAgICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gYWNjIGVudHJ5IC0+XG4gICAgICAgICAgaWYgZ2xvYl9tYXRjaCBiYXNlX3BhdCBlbnRyeSB0aGVuXG4gICAgICAgICAgICBsZXQgZnVsbCA9IGlmIGRpcicgPSBcIi5cIiB0aGVuIGVudHJ5IGVsc2UgRmlsZW5hbWUuY29uY2F0IGRpcicgZW50cnkgaW5cbiAgICAgICAgICAgIGZ1bGwgOjogYWNjXG4gICAgICAgICAgZWxzZSBhY2NcbiAgICAgICAgKSBbXSBlbnRyaWVzXG4gICAgICAgIHw+IExpc3Quc29ydCBTdHJpbmcuY29tcGFyZVxuICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPiBbXSlcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgKGdsb2JfcGF0aHMgcGF0KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLWdsb2I6IChwYXR0ZXJuKVwiKSk7XG5cbiAgKCogPT09IEZpbGUgbWV0YWRhdGEgKyBvcHMgKFBoYXNlIDVkKSA9PT0gKilcbiAgbGV0IHN0YXRfb3IgPSBmdW5jdGlvblxuICAgIHwgU3RyaW5nIHBhdGggLT4gKHRyeSBTb21lIChVbml4LnN0YXQgcGF0aCkgd2l0aCBfIC0+IE5vbmUpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZTogcGF0aCBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gIGluXG4gIHJlZ2lzdGVyIFwiZmlsZS1zaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gKG1hdGNoIHN0YXRfb3IgdiB3aXRoIFNvbWUgcyAtPiBJbnRlZ2VyIHMuVW5peC5zdF9zaXplIHwgTm9uZSAtPiBJbnRlZ2VyIDApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1zaXplOiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtbXRpbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc3RhdF9vciB2IHdpdGggU29tZSBzIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCBzLlVuaXguc3RfbXRpbWUpIHwgTm9uZSAtPiBJbnRlZ2VyIDApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1tdGltZTogKHBhdGgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWxlLWlzZmlsZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiAobWF0Y2ggc3RhdF9vciB2IHdpdGggU29tZSBzIC0+IEJvb2wgKHMuVW5peC5zdF9raW5kID0gVW5peC5TX1JFRykgfCBOb25lIC0+IEJvb2wgZmFsc2UpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1pc2ZpbGU/OiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtaXNkaXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gKG1hdGNoIHN0YXRfb3IgdiB3aXRoIFNvbWUgcyAtPiBCb29sIChzLlVuaXguc3Rfa2luZCA9IFVuaXguU19ESVIpIHwgTm9uZSAtPiBCb29sIGZhbHNlKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtaXNkaXI/OiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtcmVhZGFibGU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGhdIC0+XG4gICAgICBCb29sICh0cnkgVW5peC5hY2Nlc3MgcGF0aCBbVW5peC5SX09LXTsgdHJ1ZSB3aXRoIF8gLT4gZmFsc2UpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1yZWFkYWJsZT86IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS13cml0YWJsZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT5cbiAgICAgIEJvb2wgKHRyeSBVbml4LmFjY2VzcyBwYXRoIFtVbml4LldfT0tdOyB0cnVlIHdpdGggXyAtPiBmYWxzZSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLXdyaXRhYmxlPzogKHBhdGgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWxlLXN0YXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPlxuICAgICAgKG1hdGNoIHN0YXRfb3IgdiB3aXRoXG4gICAgICAgfCBOb25lIC0+IE5pbFxuICAgICAgIHwgU29tZSBzIC0+XG4gICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDYgaW5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwic2l6ZVwiIChJbnRlZ2VyIHMuVW5peC5zdF9zaXplKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibXRpbWVcIiAoSW50ZWdlciAoaW50X29mX2Zsb2F0IHMuVW5peC5zdF9tdGltZSkpO1xuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJhdGltZVwiIChJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgcy5Vbml4LnN0X2F0aW1lKSk7XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImN0aW1lXCIgKEludGVnZXIgKGludF9vZl9mbG9hdCBzLlVuaXguc3RfY3RpbWUpKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibW9kZVwiIChJbnRlZ2VyIHMuVW5peC5zdF9wZXJtKTtcbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgKG1hdGNoIHMuVW5peC5zdF9raW5kIHdpdGhcbiAgICAgICAgICAgfCBVbml4LlNfUkVHIC0+IFwiZmlsZVwiIHwgVW5peC5TX0RJUiAtPiBcImRpcmVjdG9yeVwiXG4gICAgICAgICAgIHwgVW5peC5TX0xOSyAtPiBcImxpbmtcIiB8IFVuaXguU19DSFIgLT4gXCJjaGFyYWN0ZXJTcGVjaWFsXCJcbiAgICAgICAgICAgfCBVbml4LlNfQkxLIC0+IFwiYmxvY2tTcGVjaWFsXCIgfCBVbml4LlNfRklGTyAtPiBcImZpZm9cIlxuICAgICAgICAgICB8IFVuaXguU19TT0NLIC0+IFwic29ja2V0XCIpKTtcbiAgICAgICAgIERpY3QgZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLXN0YXQ6IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1kZWxldGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgaWYgU3lzLmlzX2RpcmVjdG9yeSBwYXRoIHRoZW4gVW5peC5ybWRpciBwYXRoXG4gICAgICAgIGVsc2UgVW5peC51bmxpbmsgcGF0aFxuICAgICAgd2l0aFxuICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRU5PRU5ULCBfLCBfKSAtPiAoKSAgKCogdG9sZXJhdGUgbWlzc2luZyAqKVxuICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtZGVsZXRlOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1kZWxldGU6IChwYXRoKVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1ta2RpclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXRoXSAtPlxuICAgICAgbGV0IHJlYyBtayBwID1cbiAgICAgICAgaWYgcCA9IFwiXCIgfHwgcCA9IFwiLlwiIHx8IHAgPSBcIi9cIiB0aGVuICgpXG4gICAgICAgIGVsc2UgaWYgU3lzLmZpbGVfZXhpc3RzIHAgdGhlbiAoKVxuICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgbWsgKEZpbGVuYW1lLmRpcm5hbWUgcCk7XG4gICAgICAgICAgKHRyeSBVbml4Lm1rZGlyIHAgMG83NTVcbiAgICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRUVYSVNULCBfLCBfKSAtPiAoKSlcbiAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgKHRyeSBtayBwYXRoXG4gICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtbWtkaXI6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLW1rZGlyOiAocGF0aClcIikpO1xuICByZWdpc3RlciBcImZpbGUtY29weVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmM7IFN0cmluZyBkc3RdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCBpYyA9IG9wZW5faW5fYmluIHNyYyBpblxuICAgICAgICBsZXQgb2MgPSBvcGVuX291dF9iaW4gZHN0IGluXG4gICAgICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgODE5MiBpblxuICAgICAgICBsZXQgcmVjIGxvb3AgKCkgPVxuICAgICAgICAgIGxldCBuID0gaW5wdXQgaWMgYnVmIDAgKEJ5dGVzLmxlbmd0aCBidWYpIGluXG4gICAgICAgICAgaWYgbiA+IDAgdGhlbiAob3V0cHV0IG9jIGJ1ZiAwIG47IGxvb3AgKCkpXG4gICAgICAgIGluXG4gICAgICAgIGxvb3AgKCk7XG4gICAgICAgIGNsb3NlX2luIGljO1xuICAgICAgICBjbG9zZV9vdXQgb2M7XG4gICAgICAgIE5pbFxuICAgICAgd2l0aFxuICAgICAgfCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtY29weTogXCIgXiBtc2cpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLWNvcHk6IChzcmMgZHN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZmlsZS1yZW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjOyBTdHJpbmcgZHN0XSAtPlxuICAgICAgKHRyeSBTeXMucmVuYW1lIHNyYyBkc3Qgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtcmVuYW1lOiBcIiBeIG1zZykpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtcmVuYW1lOiAoc3JjIGRzdClcIikpO1xuXG4gICgqID09PSBDaGFubmVscyAocmFuZG9tLWFjY2VzcyArIGJsb2NraW5nIGNvbnRyb2wpID09PSAqKVxuICBsZXQgY2hhbm5lbF90YWJsZSA6IChzdHJpbmcsIFVuaXguZmlsZV9kZXNjciAqIHN0cmluZyAqIGJvb2wgcmVmICogYm9vbCByZWYpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gIGxldCBjaGFubmVsX25leHRfaWQgPSByZWYgMCBpblxuICBsZXQgcGFyc2Vfb3Blbl9tb2RlIG1vZGUgPVxuICAgIG1hdGNoIG1vZGUgd2l0aFxuICAgIHwgXCJyXCIgIC0+IFtVbml4Lk9fUkRPTkxZXVxuICAgIHwgXCJ3XCIgIC0+IFtVbml4Lk9fV1JPTkxZOyBVbml4Lk9fQ1JFQVQ7IFVuaXguT19UUlVOQ11cbiAgICB8IFwiYVwiICAtPiBbVW5peC5PX1dST05MWTsgVW5peC5PX0NSRUFUOyBVbml4Lk9fQVBQRU5EXVxuICAgIHwgXCJyK1wiIC0+IFtVbml4Lk9fUkRXUl1cbiAgICB8IFwidytcIiAtPiBbVW5peC5PX1JEV1I7IFVuaXguT19DUkVBVDsgVW5peC5PX1RSVU5DXVxuICAgIHwgXCJhK1wiIC0+IFtVbml4Lk9fUkRXUjsgVW5peC5PX0NSRUFUOyBVbml4Lk9fQVBQRU5EXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjaGFubmVsLW9wZW46IGludmFsaWQgbW9kZSBcIiBeIG1vZGUpKVxuICBpblxuICBsZXQgY2hhbl9nZXQgbmFtZSA9XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBjaGFubmVsX3RhYmxlIG5hbWUgd2l0aFxuICAgIHwgU29tZSBjIC0+IGNcbiAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2hhbm5lbDogbm8gc3VjaCBjaGFubmVsIFwiIF4gbmFtZSkpXG4gIGluXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1vcGVuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGg7IFN0cmluZyBtb2RlXSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgZmQgPSBVbml4Lm9wZW5maWxlIHBhdGggKHBhcnNlX29wZW5fbW9kZSBtb2RlKSAwbzY0NCBpblxuICAgICAgICBsZXQgaWQgPSAhY2hhbm5lbF9uZXh0X2lkIGluXG4gICAgICAgIGluY3IgY2hhbm5lbF9uZXh0X2lkO1xuICAgICAgICBsZXQgbmFtZSA9IFByaW50Zi5zcHJpbnRmIFwiZmlsZSVkXCIgaWQgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGNoYW5uZWxfdGFibGUgbmFtZSAoZmQsIG1vZGUsIHJlZiBmYWxzZSwgcmVmIHRydWUpO1xuICAgICAgICBTdHJpbmcgbmFtZVxuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImNoYW5uZWwtb3BlbjogXCIgXiBVbml4LmVycm9yX21lc3NhZ2UgZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtb3BlbjogKHBhdGggbW9kZSlcIikpO1xuXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1jbG9zZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICAodHJ5IFVuaXguY2xvc2UgZmQgd2l0aCBfIC0+ICgpKTtcbiAgICAgIEhhc2h0YmwucmVtb3ZlIGNoYW5uZWxfdGFibGUgbmFtZTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtY2xvc2U6IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKG5hbWUsIG1heF9uKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbU3RyaW5nIG5dIC0+IChuLCAtMSlcbiAgICAgIHwgW1N0cmluZyBuOyBJbnRlZ2VyIG1dIC0+IChuLCBtKVxuICAgICAgfCBbU3RyaW5nIG47IE51bWJlciBtXSAtPiAobiwgaW50X29mX2Zsb2F0IG0pXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXJlYWQ6IChjaGFubmVsID9uPylcIilcbiAgICBpblxuICAgIGxldCAoZmQsIF8sIGVvZiwgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgbGV0IGNodW5rID0gODE5MiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgY2h1bmsgaW5cbiAgICBsZXQgYnVmZmVyID0gQnVmZmVyLmNyZWF0ZSBjaHVuayBpblxuICAgIGxldCB0b3RhbCA9IHJlZiAwIGluXG4gICAgbGV0IHN0b3AgPSByZWYgZmFsc2UgaW5cbiAgICB3aGlsZSBub3QgIXN0b3AgZG9cbiAgICAgIGxldCB3YW50ID0gaWYgbWF4X24gPCAwIHRoZW4gY2h1bmsgZWxzZSBtaW4gY2h1bmsgKG1heF9uIC0gIXRvdGFsKSBpblxuICAgICAgaWYgd2FudCA8PSAwIHRoZW4gc3RvcCA6PSB0cnVlXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIHRyeVxuICAgICAgICAgIGxldCByID0gVW5peC5yZWFkIGZkIGJ1ZiAwIHdhbnQgaW5cbiAgICAgICAgICBpZiByID0gMCB0aGVuIGJlZ2luIGVvZiA6PSB0cnVlOyBzdG9wIDo9IHRydWUgZW5kXG4gICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9zdWJieXRlcyBidWZmZXIgYnVmIDAgcjtcbiAgICAgICAgICAgIHRvdGFsIDo9ICF0b3RhbCArIHJcbiAgICAgICAgICBlbmRcbiAgICAgICAgd2l0aFxuICAgICAgICB8IFVuaXguVW5peF9lcnJvciAoVW5peC5FQUdBSU4sIF8sIF8pXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVXT1VMREJMT0NLLCBfLCBfKSAtPiBzdG9wIDo9IHRydWVcbiAgICAgIGVuZFxuICAgIGRvbmU7XG4gICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmZmVyKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXJlYWQtbGluZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgZW9mLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDgwIGluXG4gICAgICBsZXQgb25lID0gQnl0ZXMuY3JlYXRlIDEgaW5cbiAgICAgIGxldCBnb3RfZGF0YSA9IHJlZiBmYWxzZSBpblxuICAgICAgbGV0IHN0b3AgPSByZWYgZmFsc2UgaW5cbiAgICAgIHdoaWxlIG5vdCAhc3RvcCBkb1xuICAgICAgICB0cnlcbiAgICAgICAgICBsZXQgciA9IFVuaXgucmVhZCBmZCBvbmUgMCAxIGluXG4gICAgICAgICAgaWYgciA9IDAgdGhlbiBiZWdpbiBlb2YgOj0gdHJ1ZTsgc3RvcCA6PSB0cnVlIGVuZFxuICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgIGdvdF9kYXRhIDo9IHRydWU7XG4gICAgICAgICAgICBsZXQgYyA9IEJ5dGVzLmdldCBvbmUgMCBpblxuICAgICAgICAgICAgaWYgYyA9ICdcXG4nIHRoZW4gc3RvcCA6PSB0cnVlXG4gICAgICAgICAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBidWYgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB3aXRoXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVBR0FJTiwgXywgXylcbiAgICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRVdPVUxEQkxPQ0ssIF8sIF8pIC0+IHN0b3AgOj0gdHJ1ZVxuICAgICAgZG9uZTtcbiAgICAgIGlmICFnb3RfZGF0YSB0aGVuIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXJlYWQtbGluZTogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtd3JpdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCBiID0gQnl0ZXMub2Zfc3RyaW5nIHMgaW5cbiAgICAgIGxldCBuID0gQnl0ZXMubGVuZ3RoIGIgaW5cbiAgICAgIGxldCB3cml0dGVuID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICF3cml0dGVuIDwgbiBkb1xuICAgICAgICAodHJ5XG4gICAgICAgICAgbGV0IHcgPSBVbml4LndyaXRlIGZkIGIgIXdyaXR0ZW4gKG4gLSAhd3JpdHRlbikgaW5cbiAgICAgICAgICB3cml0dGVuIDo9ICF3cml0dGVuICsgd1xuICAgICAgICB3aXRoXG4gICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVBR0FJTiwgXywgXylcbiAgICAgICAgfCBVbml4LlVuaXhfZXJyb3IgKFVuaXguRVdPVUxEQkxPQ0ssIF8sIF8pIC0+XG4gICAgICAgICAgKCogc2hvcnQgd3JpdGUg4oCUIGxldCBjYWxsZXIgcmV0cnkgKilcbiAgICAgICAgICB3cml0dGVuIDo9IG4pXG4gICAgICBkb25lO1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC13cml0ZTogKGNoYW5uZWwgc3RyaW5nKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLWZsdXNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+IGxldCBfID0gY2hhbl9nZXQgbmFtZSBpbiBOaWwgICgqIG5vIHVzZXJzcGFjZSBidWZmZXIgKilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLWZsdXNoOiAoY2hhbm5lbClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1zZWVrXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IChuYW1lLCBvZmZzZXQsIHdoZW5jZSkgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW1N0cmluZyBuOyBJbnRlZ2VyIG9dIC0+IChuLCBvLCBcInN0YXJ0XCIpXG4gICAgICB8IFtTdHJpbmcgbjsgTnVtYmVyIG9dIC0+IChuLCBpbnRfb2ZfZmxvYXQgbywgXCJzdGFydFwiKVxuICAgICAgfCBbU3RyaW5nIG47IEludGVnZXIgbzsgU3RyaW5nIHddIC0+IChuLCBvLCB3KVxuICAgICAgfCBbU3RyaW5nIG47IE51bWJlciBvOyBTdHJpbmcgd10gLT4gKG4sIGludF9vZl9mbG9hdCBvLCB3KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1zZWVrOiAoY2hhbm5lbCBvZmZzZXQgP3doZW5jZT8pXCIpXG4gICAgaW5cbiAgICBsZXQgKGZkLCBfLCBlb2YsIF8pID0gY2hhbl9nZXQgbmFtZSBpblxuICAgIGxldCBjbWQgPSBtYXRjaCB3aGVuY2Ugd2l0aFxuICAgICAgfCBcInN0YXJ0XCIgLT4gVW5peC5TRUVLX1NFVFxuICAgICAgfCBcImN1cnJlbnRcIiAtPiBVbml4LlNFRUtfQ1VSXG4gICAgICB8IFwiZW5kXCIgLT4gVW5peC5TRUVLX0VORFxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImNoYW5uZWwtc2VlazogaW52YWxpZCB3aGVuY2UgXCIgXiB3aGVuY2UpKVxuICAgIGluXG4gICAgbGV0IF8gPSBVbml4LmxzZWVrIGZkIG9mZnNldCBjbWQgaW5cbiAgICBlb2YgOj0gZmFsc2U7XG4gICAgTmlsKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtdGVsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICBJbnRlZ2VyIChVbml4LmxzZWVrIGZkIDAgVW5peC5TRUVLX0NVUilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFubmVsLXRlbGw6IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLWVvZj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCAoXywgXywgZW9mLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIEJvb2wgIWVvZlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtZW9mPzogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcImNoYW5uZWwtYmxvY2tpbmc/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgKF8sIF8sIF8sIGJsb2NraW5nKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIEJvb2wgIWJsb2NraW5nXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1ibG9ja2luZz86IChjaGFubmVsKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjaGFubmVsLXNldC1ibG9ja2luZyFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgQm9vbCBiXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgYmxvY2tpbmcpID0gY2hhbl9nZXQgbmFtZSBpblxuICAgICAgYmxvY2tpbmcgOj0gYjtcbiAgICAgICh0cnlcbiAgICAgICAgaWYgYiB0aGVuIFVuaXguY2xlYXJfbm9uYmxvY2sgZmRcbiAgICAgICAgZWxzZSBVbml4LnNldF9ub25ibG9jayBmZFxuICAgICAgd2l0aCBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYW5uZWwtc2V0LWJsb2NraW5nITogKGNoYW5uZWwgYm9vbClcIikpO1xuXG4gICgqID09PSBFeGVjID09PSBydW4gYW4gZXh0ZXJuYWwgcHJvY2VzczsgY2FwdHVyZSBzdGRvdXQgKilcbiAgcmVnaXN0ZXIgXCJleGVjLXByb2Nlc3NcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgaXRlbXMgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW0xpc3QgeHNdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IHhzIH1dIC0+IHhzXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGVjLXByb2Nlc3M6IChjbWQtbGlzdClcIilcbiAgICBpblxuICAgIGxldCBhcmd2ID0gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICB8IFN0cmluZyBzIC0+IHNcbiAgICAgIHwgdiAtPiBTeF90eXBlcy5pbnNwZWN0IHZcbiAgICApIGl0ZW1zKSBpblxuICAgIGlmIEFycmF5Lmxlbmd0aCBhcmd2ID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiZXhlYzogZW1wdHkgY29tbWFuZFwiKTtcbiAgICBsZXQgKG91dF9yLCBvdXRfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgKGVycl9yLCBlcnJfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgcGlkID1cbiAgICAgIHRyeSBVbml4LmNyZWF0ZV9wcm9jZXNzIGFyZ3YuKDApIGFyZ3YgVW5peC5zdGRpbiBvdXRfdyBlcnJfd1xuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgIFVuaXguY2xvc2Ugb3V0X3I7IFVuaXguY2xvc2Ugb3V0X3c7XG4gICAgICAgIFVuaXguY2xvc2UgZXJyX3I7IFVuaXguY2xvc2UgZXJyX3c7XG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgIGluXG4gICAgVW5peC5jbG9zZSBvdXRfdztcbiAgICBVbml4LmNsb3NlIGVycl93O1xuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICAgIGxldCBlcnJidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgbGV0IGNodW5rID0gQnl0ZXMuY3JlYXRlIDQwOTYgaW5cbiAgICBsZXQgcmVhZF9hbGwgZmQgdGFyZ2V0ID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RvcCA9IHJlZiBmYWxzZSBpblxuICAgICAgICB3aGlsZSBub3QgIXN0b3AgZG9cbiAgICAgICAgICBsZXQgbiA9IFVuaXgucmVhZCBmZCBjaHVuayAwIChCeXRlcy5sZW5ndGggY2h1bmspIGluXG4gICAgICAgICAgaWYgbiA9IDAgdGhlbiBzdG9wIDo9IHRydWVcbiAgICAgICAgICBlbHNlIEJ1ZmZlci5hZGRfc3ViYnl0ZXMgdGFyZ2V0IGNodW5rIDAgblxuICAgICAgICBkb25lXG4gICAgICB3aXRoIF8gLT4gKClcbiAgICBpblxuICAgIHJlYWRfYWxsIG91dF9yIGJ1ZjtcbiAgICByZWFkX2FsbCBlcnJfciBlcnJidWY7XG4gICAgVW5peC5jbG9zZSBvdXRfcjtcbiAgICBVbml4LmNsb3NlIGVycl9yO1xuICAgIGxldCAoXywgc3RhdHVzKSA9IFVuaXgud2FpdHBpZCBbXSBwaWQgaW5cbiAgICBsZXQgZXhpdF9jb2RlID0gbWF0Y2ggc3RhdHVzIHdpdGhcbiAgICAgIHwgVW5peC5XRVhJVEVEIG4gLT4gblxuICAgICAgfCBVbml4LldTSUdOQUxFRCBfIHwgVW5peC5XU1RPUFBFRCBfIC0+IDFcbiAgICBpblxuICAgIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICAgIGxldCB0cmltbWVkID1cbiAgICAgIGlmIFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bU3RyaW5nLmxlbmd0aCBzIC0gMV0gPSAnXFxuJ1xuICAgICAgdGhlbiBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gMSkgZWxzZSBzXG4gICAgaW5cbiAgICBpZiBleGl0X2NvZGUgPD4gMCB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJleGVjOiBjaGlsZCBleGl0ZWQgXCIgXiBzdHJpbmdfb2ZfaW50IGV4aXRfY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgIF4gKGlmIEJ1ZmZlci5sZW5ndGggZXJyYnVmID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCI6IFwiIF4gQnVmZmVyLmNvbnRlbnRzIGVycmJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgXCJcIikpKVxuICAgIGVsc2UgU3RyaW5nIHRyaW1tZWQpO1xuXG4gICgqIGV4ZWMtcGlwZWxpbmU6IHRha2VzIGEgbGlzdCBvZiB3b3JkcyBsaWtlIFRjbCBgZXhlY2Agd291bGQgcmVjZWl2ZS5cbiAgICAgUmVjb2duaXplcyBgfGAgYXMgYSBzdGFnZSBzZXBhcmF0b3IgYW5kIGA+IGZpbGVgLCBgPj4gZmlsZWAsIGA8IGZpbGVgLFxuICAgICBgMj5AMWAgKHN0ZGVycuKGknN0ZG91dCksIGAyPiBmaWxlYC4gUmV0dXJucyB0cmltbWVkIHN0ZG91dCBvZiB0aGUgbGFzdFxuICAgICBzdGFnZTsgcmFpc2VzIEV2YWxfZXJyb3IgaWYgdGhlIGxhc3Qgc3RhZ2UgZXhpdHMgbm9uLXplcm8uICopXG4gIHJlZ2lzdGVyIFwiZXhlYy1waXBlbGluZVwiIChmdW4gYXJncyAtPlxuICAgIGxldCBpdGVtcyA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbTGlzdCB4c10gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0geHMgfV0gLT4geHNcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4ZWMtcGlwZWxpbmU6ICh3b3JkLWxpc3QpXCIpXG4gICAgaW5cbiAgICBsZXQgd29yZHMgPSBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgfCB2IC0+IFN4X3R5cGVzLmluc3BlY3QgdlxuICAgICkgaXRlbXMgaW5cbiAgICBpZiB3b3JkcyA9IFtdIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGVjOiBlbXB0eSBjb21tYW5kXCIpO1xuICAgIGxldCBzcGxpdF9zdGFnZXMgd3MgPVxuICAgICAgbGV0IHJlYyBsb29wIGFjYyBjdXIgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgICAgICB8IFwifFwiIDo6IHJlc3QgLT4gbG9vcCAoTGlzdC5yZXYgY3VyIDo6IGFjYykgW10gcmVzdFxuICAgICAgICB8IHcgOjogcmVzdCAtPiBsb29wIGFjYyAodyA6OiBjdXIpIHJlc3RcbiAgICAgIGluXG4gICAgICBsb29wIFtdIFtdIHdzXG4gICAgaW5cbiAgICBsZXQgZXh0cmFjdF9yZWRpcnMgd3MgPVxuICAgICAgbGV0IGluX3BhdGggPSByZWYgTm9uZSBpblxuICAgICAgbGV0IG91dF9wYXRoID0gcmVmIE5vbmUgaW5cbiAgICAgIGxldCBvdXRfYXBwZW5kID0gcmVmIGZhbHNlIGluXG4gICAgICBsZXQgZXJyX3BhdGggPSByZWYgTm9uZSBpblxuICAgICAgbGV0IG1lcmdlX2VyciA9IHJlZiBmYWxzZSBpblxuICAgICAgbGV0IGNsZWFuZWQgPSByZWYgW10gaW5cbiAgICAgIGxldCByZWMgbG9vcCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgfCBcIjxcIiA6OiBwIDo6IHJlc3QgLT4gaW5fcGF0aCA6PSBTb21lIHA7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiPlwiIDo6IHAgOjogcmVzdCAtPiBvdXRfcGF0aCA6PSBTb21lIHA7IG91dF9hcHBlbmQgOj0gZmFsc2U7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiPj5cIiA6OiBwIDo6IHJlc3QgLT4gb3V0X3BhdGggOj0gU29tZSBwOyBvdXRfYXBwZW5kIDo9IHRydWU7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiMj5AMVwiIDo6IHJlc3QgLT4gbWVyZ2VfZXJyIDo9IHRydWU7IGxvb3AgcmVzdFxuICAgICAgICB8IFwiMj5cIiA6OiBwIDo6IHJlc3QgLT4gZXJyX3BhdGggOj0gU29tZSBwOyBsb29wIHJlc3RcbiAgICAgICAgfCB3IDo6IHJlc3QgLT4gY2xlYW5lZCA6PSB3IDo6ICFjbGVhbmVkOyBsb29wIHJlc3RcbiAgICAgIGluXG4gICAgICBsb29wIHdzO1xuICAgICAgKExpc3QucmV2ICFjbGVhbmVkLCAhaW5fcGF0aCwgIW91dF9wYXRoLCAhb3V0X2FwcGVuZCwgIWVycl9wYXRoLCAhbWVyZ2VfZXJyKVxuICAgIGluXG4gICAgbGV0IHN0YWdlcyA9IExpc3QubWFwIGV4dHJhY3RfcmVkaXJzIChzcGxpdF9zdGFnZXMgd29yZHMpIGluXG4gICAgaWYgc3RhZ2VzID0gW10gdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcImV4ZWM6IG5vIHN0YWdlc1wiKTtcbiAgICBsZXQgbiA9IExpc3QubGVuZ3RoIHN0YWdlcyBpblxuICAgIGxldCBwaXBlcyA9IEFycmF5LmluaXQgKG1heCAwIChuIC0gMSkpIChmdW4gXyAtPiBVbml4LnBpcGUgKCkpIGluXG4gICAgbGV0IChmaW5hbF9yLCBmaW5hbF93KSA9IFVuaXgucGlwZSAoKSBpblxuICAgIGxldCAoZXJyc3Rhc2hfciwgZXJyc3Rhc2hfdykgPSBVbml4LnBpcGUgKCkgaW5cbiAgICBsZXQgcGlkcyA9IHJlZiBbXSBpblxuICAgIGxldCBjbG9zZV9zYWZlIGZkID0gdHJ5IFVuaXguY2xvc2UgZmQgd2l0aCBfIC0+ICgpIGluXG4gICAgbGV0IG9wZW5faW5fcmVkaXIgPSBmdW5jdGlvblxuICAgICAgfCBOb25lIC0+IFVuaXguc3RkaW5cbiAgICAgIHwgU29tZSBwYXRoIC0+XG4gICAgICAgICh0cnkgVW5peC5vcGVuZmlsZSBwYXRoIFtVbml4Lk9fUkRPTkxZXSAwbzY0NFxuICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IG9wZW4gPFwiIF4gcGF0aCBeIFwiOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpXG4gICAgaW5cbiAgICBsZXQgb3Blbl9vdXRfcmVkaXIgcGF0aCBhcHBlbmQgPVxuICAgICAgbGV0IGZsYWdzID0gVW5peC5PX1dST05MWSA6OiBVbml4Lk9fQ1JFQVQgOjogKGlmIGFwcGVuZCB0aGVuIFtVbml4Lk9fQVBQRU5EXSBlbHNlIFtVbml4Lk9fVFJVTkNdKSBpblxuICAgICAgdHJ5IFVuaXgub3BlbmZpbGUgcGF0aCBmbGFncyAwbzY0NFxuICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcImV4ZWM6IG9wZW4gPlwiIF4gcGF0aCBeIFwiOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSlcbiAgICBpblxuICAgIGxldCBzdGFnZXNfYXJyID0gQXJyYXkub2ZfbGlzdCBzdGFnZXMgaW5cbiAgICAodHJ5XG4gICAgICBBcnJheS5pdGVyaSAoZnVuIGkgKGNsZWFuZWQsIGlwLCBvcCwgYXBwLCBlcCwgbWVyZ2UpIC0+XG4gICAgICAgIGlmIGNsZWFuZWQgPSBbXSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiZXhlYzogZW1wdHkgc3RhZ2UgaW4gcGlwZWxpbmVcIik7XG4gICAgICAgIGxldCBhcmd2ID0gQXJyYXkub2ZfbGlzdCBjbGVhbmVkIGluXG4gICAgICAgIGxldCBzdGRpbl9mZCA9XG4gICAgICAgICAgaWYgaSA9IDAgdGhlbiBvcGVuX2luX3JlZGlyIGlwXG4gICAgICAgICAgZWxzZSBmc3QgcGlwZXMuKGkgLSAxKVxuICAgICAgICBpblxuICAgICAgICBsZXQgc3Rkb3V0X2ZkID1cbiAgICAgICAgICBpZiBpID0gbiAtIDEgdGhlblxuICAgICAgICAgICAgKG1hdGNoIG9wIHdpdGhcbiAgICAgICAgICAgICB8IE5vbmUgLT4gZmluYWxfd1xuICAgICAgICAgICAgIHwgU29tZSBwYXRoIC0+IG9wZW5fb3V0X3JlZGlyIHBhdGggYXBwKVxuICAgICAgICAgIGVsc2Ugc25kIHBpcGVzLihpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgc3RkZXJyX2ZkID1cbiAgICAgICAgICBpZiBtZXJnZSB0aGVuIHN0ZG91dF9mZFxuICAgICAgICAgIGVsc2UgKG1hdGNoIGVwIHdpdGhcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT4gaWYgaSA9IG4gLSAxIHRoZW4gZXJyc3Rhc2hfdyBlbHNlIFVuaXguc3RkZXJyXG4gICAgICAgICAgICAgICAgfCBTb21lIHBhdGggLT4gb3Blbl9vdXRfcmVkaXIgcGF0aCBmYWxzZSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHBpZCA9XG4gICAgICAgICAgdHJ5IFVuaXguY3JlYXRlX3Byb2Nlc3MgYXJndi4oMCkgYXJndiBzdGRpbl9mZCBzdGRvdXRfZmQgc3RkZXJyX2ZkXG4gICAgICAgICAgd2l0aCBVbml4LlVuaXhfZXJyb3IgKGUsIF8sIF8pIC0+XG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJleGVjOiBcIiBeIGFyZ3YuKDApIF4gXCI6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgICAgICBpblxuICAgICAgICBwaWRzIDo9IHBpZCA6OiAhcGlkcztcbiAgICAgICAgaWYgaSA+IDAgdGhlbiBjbG9zZV9zYWZlIChmc3QgcGlwZXMuKGkgLSAxKSk7XG4gICAgICAgIGlmIGkgPCBuIC0gMSB0aGVuIGNsb3NlX3NhZmUgKHNuZCBwaXBlcy4oaSkpO1xuICAgICAgICBpZiBpID0gMCAmJiBpcCA8PiBOb25lIHRoZW4gY2xvc2Vfc2FmZSBzdGRpbl9mZDtcbiAgICAgICAgaWYgaSA9IG4gLSAxICYmIG9wIDw+IE5vbmUgdGhlbiBjbG9zZV9zYWZlIHN0ZG91dF9mZDtcbiAgICAgICAgaWYgbm90IG1lcmdlICYmIGVwIDw+IE5vbmUgdGhlbiBjbG9zZV9zYWZlIHN0ZGVycl9mZFxuICAgICAgKSBzdGFnZXNfYXJyXG4gICAgd2l0aCBlIC0+XG4gICAgICBjbG9zZV9zYWZlIGZpbmFsX3I7IGNsb3NlX3NhZmUgZmluYWxfdztcbiAgICAgIGNsb3NlX3NhZmUgZXJyc3Rhc2hfcjsgY2xvc2Vfc2FmZSBlcnJzdGFzaF93O1xuICAgICAgQXJyYXkuaXRlciAoZnVuIChhLGIpIC0+IGNsb3NlX3NhZmUgYTsgY2xvc2Vfc2FmZSBiKSBwaXBlcztcbiAgICAgIHJhaXNlIGUpO1xuICAgIGNsb3NlX3NhZmUgZmluYWxfdztcbiAgICBjbG9zZV9zYWZlIGVycnN0YXNoX3c7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gICAgbGV0IGVycmJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgY2h1bmsgPSBCeXRlcy5jcmVhdGUgNDA5NiBpblxuICAgIGxldCByZWFkX2FsbCBmZCB0YXJnZXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdG9wID0gcmVmIGZhbHNlIGluXG4gICAgICAgIHdoaWxlIG5vdCAhc3RvcCBkb1xuICAgICAgICAgIGxldCByID0gVW5peC5yZWFkIGZkIGNodW5rIDAgKEJ5dGVzLmxlbmd0aCBjaHVuaykgaW5cbiAgICAgICAgICBpZiByID0gMCB0aGVuIHN0b3AgOj0gdHJ1ZVxuICAgICAgICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJieXRlcyB0YXJnZXQgY2h1bmsgMCByXG4gICAgICAgIGRvbmVcbiAgICAgIHdpdGggXyAtPiAoKVxuICAgIGluXG4gICAgcmVhZF9hbGwgZmluYWxfciBidWY7XG4gICAgcmVhZF9hbGwgZXJyc3Rhc2hfciBlcnJidWY7XG4gICAgY2xvc2Vfc2FmZSBmaW5hbF9yO1xuICAgIGNsb3NlX3NhZmUgZXJyc3Rhc2hfcjtcbiAgICBsZXQgZXhpdF9jb2RlcyA9IExpc3QucmV2X21hcCAoZnVuIHBpZCAtPlxuICAgICAgbGV0IChfLCBzdCkgPSBVbml4LndhaXRwaWQgW10gcGlkIGluXG4gICAgICBtYXRjaCBzdCB3aXRoXG4gICAgICB8IFVuaXguV0VYSVRFRCBjIC0+IGNcbiAgICAgIHwgXyAtPiAxXG4gICAgKSAhcGlkcyBpblxuICAgIGxldCBmaW5hbF9jb2RlID0gbWF0Y2ggTGlzdC5yZXYgZXhpdF9jb2RlcyB3aXRoXG4gICAgICB8IFtdIC0+IDBcbiAgICAgIHwgbGFzdCA6OiBfIC0+IGxhc3RcbiAgICBpblxuICAgIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICAgIGxldCB0cmltbWVkID1cbiAgICAgIGlmIFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bU3RyaW5nLmxlbmd0aCBzIC0gMV0gPSAnXFxuJ1xuICAgICAgdGhlbiBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gMSkgZWxzZSBzXG4gICAgaW5cbiAgICBpZiBmaW5hbF9jb2RlIDw+IDAgdGhlblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiZXhlYzogcGlwZWxpbmUgbGFzdCBzdGFnZSBleGl0ZWQgXCIgXiBzdHJpbmdfb2ZfaW50IGZpbmFsX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICBeIChpZiBCdWZmZXIubGVuZ3RoIGVycmJ1ZiA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiOiBcIiBeIEJ1ZmZlci5jb250ZW50cyBlcnJidWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiXCIpKSlcbiAgICBlbHNlIFN0cmluZyB0cmltbWVkKTtcblxuICAoKiA9PT0gU29ja2V0cyA9PT0gd3JhcHBpbmcgVW5peC5zb2NrZXQvY29ubmVjdC9iaW5kL2xpc3Rlbi9hY2NlcHQgKilcbiAgbGV0IHJlc29sdmVfaW5ldF9hZGRyIGhvc3QgPVxuICAgIGlmIGhvc3QgPSBcIlwiIHx8IGhvc3QgPSBcIjAuMC4wLjBcIiB0aGVuIFVuaXguaW5ldF9hZGRyX2FueVxuICAgIGVsc2UgaWYgaG9zdCA9IFwibG9jYWxob3N0XCIgdGhlbiBVbml4LmluZXRfYWRkcl9sb29wYmFja1xuICAgIGVsc2VcbiAgICAgIHRyeSBVbml4LmluZXRfYWRkcl9vZl9zdHJpbmcgaG9zdFxuICAgICAgd2l0aCBfIC0+XG4gICAgICAgIHRyeVxuICAgICAgICAgIGxldCBlbnRyeSA9IFVuaXguZ2V0aG9zdGJ5bmFtZSBob3N0IGluXG4gICAgICAgICAgaWYgQXJyYXkubGVuZ3RoIGVudHJ5LlVuaXguaF9hZGRyX2xpc3QgPSAwIHRoZW5cbiAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldDogY2Fubm90IHJlc29sdmUgXCIgXiBob3N0KSlcbiAgICAgICAgICBlbHNlIGVudHJ5LlVuaXguaF9hZGRyX2xpc3QuKDApXG4gICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldDogY2Fubm90IHJlc29sdmUgXCIgXiBob3N0KSlcbiAgaW5cbiAgbGV0IHBvcnRfb2YgdiA9IG1hdGNoIHYgd2l0aFxuICAgIHwgSW50ZWdlciBuIC0+IG5cbiAgICB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ja2V0OiBwb3J0IG11c3QgYmUgYSBudW1iZXJcIilcbiAgaW5cbiAgbGV0IGFsbG9jX2NoYW5fbmFtZSAoKSA9XG4gICAgbGV0IGlkID0gIWNoYW5uZWxfbmV4dF9pZCBpblxuICAgIGluY3IgY2hhbm5lbF9uZXh0X2lkO1xuICAgIFByaW50Zi5zcHJpbnRmIFwic29jayVkXCIgaWRcbiAgaW5cblxuICByZWdpc3RlciBcInNvY2tldC1jb25uZWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhvc3Q7IHBvcnRfdl0gLT5cbiAgICAgIGxldCBwb3J0ID0gcG9ydF9vZiBwb3J0X3YgaW5cbiAgICAgIGxldCBhZGRyID0gVW5peC5BRERSX0lORVQgKHJlc29sdmVfaW5ldF9hZGRyIGhvc3QsIHBvcnQpIGluXG4gICAgICBsZXQgc29jayA9IFVuaXguc29ja2V0IFVuaXguUEZfSU5FVCBVbml4LlNPQ0tfU1RSRUFNIDAgaW5cbiAgICAgICh0cnkgVW5peC5jb25uZWN0IHNvY2sgYWRkclxuICAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgKHRyeSBVbml4LmNsb3NlIHNvY2sgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1jb25uZWN0OiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgbGV0IG5hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIG5hbWUgKHNvY2ssIFwicndcIiwgcmVmIGZhbHNlLCByZWYgdHJ1ZSk7XG4gICAgICBTdHJpbmcgbmFtZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvY2tldC1jb25uZWN0OiAoaG9zdCBwb3J0KVwiKSk7XG5cbiAgKCogTm9uLWJsb2NraW5nIGNvbm5lY3Q6IHJldHVybnMgY2hhbm5lbCBpbW1lZGlhdGVseS4gQ29ubmVjdGlvbiBjb21wbGV0ZXNcbiAgICAgd2hlbiB0aGUgY2hhbm5lbCBiZWNvbWVzIHdyaXRhYmxlOyBxdWVyeSBjaGFubmVsLWFzeW5jLWVycm9yPyBhZnRlciB0b1xuICAgICBjb25maXJtIHN1Y2Nlc3Mgb3IgZ2V0IHRoZSBlcnJvci4gKilcbiAgcmVnaXN0ZXIgXCJzb2NrZXQtY29ubmVjdC1hc3luY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBob3N0OyBwb3J0X3ZdIC0+XG4gICAgICBsZXQgcG9ydCA9IHBvcnRfb2YgcG9ydF92IGluXG4gICAgICBsZXQgYWRkciA9IFVuaXguQUREUl9JTkVUIChyZXNvbHZlX2luZXRfYWRkciBob3N0LCBwb3J0KSBpblxuICAgICAgbGV0IHNvY2sgPSBVbml4LnNvY2tldCBVbml4LlBGX0lORVQgVW5peC5TT0NLX1NUUkVBTSAwIGluXG4gICAgICBVbml4LnNldF9ub25ibG9jayBzb2NrO1xuICAgICAgKHRyeSBVbml4LmNvbm5lY3Qgc29jayBhZGRyXG4gICAgICAgd2l0aFxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVJTlBST0dSRVNTLCBfLCBfKVxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChVbml4LkVXT1VMREJMT0NLLCBfLCBfKSAtPiAoKVxuICAgICAgIHwgVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgKHRyeSBVbml4LmNsb3NlIHNvY2sgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1jb25uZWN0LWFzeW5jOiBcIiBeIFVuaXguZXJyb3JfbWVzc2FnZSBlKSkpO1xuICAgICAgbGV0IG5hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIG5hbWUgKHNvY2ssIFwicndcIiwgcmVmIGZhbHNlLCByZWYgZmFsc2UpO1xuICAgICAgU3RyaW5nIG5hbWVcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb2NrZXQtY29ubmVjdC1hc3luYzogKGhvc3QgcG9ydClcIikpO1xuXG4gICgqIEFmdGVyIGEgbm9uLWJsb2NraW5nIGNvbm5lY3QgY29tcGxldGVzIChjaGFubmVsIHdyaXRhYmxlKSwgY2hlY2sgd2hldGhlclxuICAgICB0aGUgY29ubmVjdCBzdWNjZWVkZWQuIFJldHVybnMgXCJcIiBvbiBzdWNjZXNzLCBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuICopXG4gIHJlZ2lzdGVyIFwiY2hhbm5lbC1hc3luYy1lcnJvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChmZCwgXywgXywgXykgPSBjaGFuX2dldCBuYW1lIGluXG4gICAgICAodHJ5XG4gICAgICAgIGxldCBlcnIgPSBVbml4LmdldHNvY2tvcHRfZXJyb3IgZmQgaW5cbiAgICAgICAgbWF0Y2ggZXJyIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IFN0cmluZyBcIlwiXG4gICAgICAgIHwgU29tZSBlIC0+IFN0cmluZyAoVW5peC5lcnJvcl9tZXNzYWdlIGUpXG4gICAgICB3aXRoXG4gICAgICB8IFVuaXguVW5peF9lcnJvciAoZSwgXywgXykgLT4gU3RyaW5nIChVbml4LmVycm9yX21lc3NhZ2UgZSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhbm5lbC1hc3luYy1lcnJvcjogKGNoYW5uZWwpXCIpKTtcblxuICByZWdpc3RlciBcInNvY2tldC1zZXJ2ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgKGhvc3QsIHBvcnQpID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtwb3J0X3ZdIC0+IChcIlwiLCBwb3J0X29mIHBvcnRfdilcbiAgICAgIHwgW1N0cmluZyBoOyBwb3J0X3ZdIC0+IChoLCBwb3J0X29mIHBvcnRfdilcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvY2tldC1zZXJ2ZXI6IChwb3J0KSBvciAoaG9zdCBwb3J0KVwiKVxuICAgIGluXG4gICAgbGV0IGFkZHIgPSBVbml4LkFERFJfSU5FVCAocmVzb2x2ZV9pbmV0X2FkZHIgaG9zdCwgcG9ydCkgaW5cbiAgICBsZXQgc29jayA9IFVuaXguc29ja2V0IFVuaXguUEZfSU5FVCBVbml4LlNPQ0tfU1RSRUFNIDAgaW5cbiAgICBVbml4LnNldHNvY2tvcHQgc29jayBVbml4LlNPX1JFVVNFQUREUiB0cnVlO1xuICAgICh0cnkgVW5peC5iaW5kIHNvY2sgYWRkclxuICAgICB3aXRoIFVuaXguVW5peF9lcnJvciAoZSwgXywgXykgLT5cbiAgICAgICAodHJ5IFVuaXguY2xvc2Ugc29jayB3aXRoIF8gLT4gKCkpO1xuICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1zZXJ2ZXI6IGJpbmQ6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKSk7XG4gICAgVW5peC5saXN0ZW4gc29jayA4O1xuICAgIGxldCBuYW1lID0gYWxsb2NfY2hhbl9uYW1lICgpIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGNoYW5uZWxfdGFibGUgbmFtZSAoc29jaywgXCJzZXJ2ZXJcIiwgcmVmIGZhbHNlLCByZWYgdHJ1ZSk7XG4gICAgU3RyaW5nIG5hbWUpO1xuXG4gIHJlZ2lzdGVyIFwic29ja2V0LWFjY2VwdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IChzb2NrLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW5cbiAgICAgIGxldCAoY2xpZW50X3NvY2ssIGNsaWVudF9hZGRyKSA9XG4gICAgICAgIHRyeSBVbml4LmFjY2VwdCBzb2NrXG4gICAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChlLCBfLCBfKSAtPlxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcInNvY2tldC1hY2NlcHQ6IFwiIF4gVW5peC5lcnJvcl9tZXNzYWdlIGUpKVxuICAgICAgaW5cbiAgICAgIGxldCAoaG9zdF9zdHIsIHBvcnQpID0gbWF0Y2ggY2xpZW50X2FkZHIgd2l0aFxuICAgICAgICB8IFVuaXguQUREUl9JTkVUIChhZGRyLCBwKSAtPiAoVW5peC5zdHJpbmdfb2ZfaW5ldF9hZGRyIGFkZHIsIHApXG4gICAgICAgIHwgVW5peC5BRERSX1VOSVggcGF0aCAtPiAocGF0aCwgMClcbiAgICAgIGluXG4gICAgICBsZXQgY2xpZW50X25hbWUgPSBhbGxvY19jaGFuX25hbWUgKCkgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBjaGFubmVsX3RhYmxlIGNsaWVudF9uYW1lIChjbGllbnRfc29jaywgXCJyd1wiLCByZWYgZmFsc2UsIHJlZiB0cnVlKTtcbiAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMyBpblxuICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjaGFubmVsXCIgKFN0cmluZyBjbGllbnRfbmFtZSk7XG4gICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImhvc3RcIiAoU3RyaW5nIGhvc3Rfc3RyKTtcbiAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicG9ydFwiIChJbnRlZ2VyIHBvcnQpO1xuICAgICAgRGljdCBkXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ja2V0LWFjY2VwdDogKHNlcnZlci1jaGFubmVsKVwiKSk7XG5cbiAgKCogaW8tc2VsZWN0LWNoYW5uZWxzOiAocmVhZC1saXN0IHdyaXRlLWxpc3QgdGltZW91dC1tcykg4oaSIHs6cmVhZGFibGUgWy4uLl0gOndyaXRhYmxlIFsuLi5dfVxuICAgICB0aW1lb3V0LW1zIDwgMCDihpIgYmxvY2sgaW5kZWZpbml0ZWx5OyAwIOKGkiBwb2xsLiBSZXR1cm5zIHJlYWR5IGNoYW5uZWwgbmFtZXMuICopXG4gIHJlZ2lzdGVyIFwiaW8tc2VsZWN0LWNoYW5uZWxzXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHRvX21zIHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgSW50ZWdlciBuIC0+IG5cbiAgICAgIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG5cbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlvLXNlbGVjdC1jaGFubmVsczogdGltZW91dCBtdXN0IGJlIGEgbnVtYmVyXCIpXG4gICAgaW5cbiAgICBsZXQgdG9fbGlzdCB2ID0gbWF0Y2ggdiB3aXRoXG4gICAgICB8IExpc3QgeHMgfCBMaXN0UmVmIHsgY29udGVudHMgPSB4cyB9IC0+IHhzXG4gICAgICB8IE5pbCAtPiBbXVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiBleHBlY3RlZCBsaXN0XCIpXG4gICAgaW5cbiAgICBsZXQgY2hhbl9uYW1lX29mIHYgPSBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU3RyaW5nIHMgLT4gc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiBjaGFubmVsIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICBpblxuICAgIGxldCAocmVhZF9saXN0LCB3cml0ZV9saXN0LCB0aW1lb3V0X21zKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbcjsgdzsgdF0gLT4gKHRvX2xpc3QgciwgdG9fbGlzdCB3LCB0b19tcyB0KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW8tc2VsZWN0LWNoYW5uZWxzOiAocmVhZC1saXN0IHdyaXRlLWxpc3QgdGltZW91dC1tcylcIilcbiAgICBpblxuICAgIGxldCByZWFkX3BhaXJzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICBsZXQgbmFtZSA9IGNoYW5fbmFtZV9vZiB2IGluXG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW4gKG5hbWUsIGZkKSkgcmVhZF9saXN0IGluXG4gICAgbGV0IHdyaXRlX3BhaXJzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICBsZXQgbmFtZSA9IGNoYW5fbmFtZV9vZiB2IGluXG4gICAgICBsZXQgKGZkLCBfLCBfLCBfKSA9IGNoYW5fZ2V0IG5hbWUgaW4gKG5hbWUsIGZkKSkgd3JpdGVfbGlzdCBpblxuICAgIGxldCByZWFkX2ZkcyA9IExpc3QubWFwIHNuZCByZWFkX3BhaXJzIGluXG4gICAgbGV0IHdyaXRlX2ZkcyA9IExpc3QubWFwIHNuZCB3cml0ZV9wYWlycyBpblxuICAgIGxldCB0aW1lb3V0ID0gaWYgdGltZW91dF9tcyA8IDAgdGhlbiAtMS4wIGVsc2UgZmxvYXRfb2ZfaW50IHRpbWVvdXRfbXMgLy4gMTAwMC4wIGluXG4gICAgbGV0IChyZWFkeV9yLCByZWFkeV93LCBfKSA9XG4gICAgICB0cnkgVW5peC5zZWxlY3QgcmVhZF9mZHMgd3JpdGVfZmRzIFtdIHRpbWVvdXRcbiAgICAgIHdpdGggVW5peC5Vbml4X2Vycm9yIChVbml4LkVJTlRSLCBfLCBfKSAtPiAoW10sIFtdLCBbXSlcbiAgICBpblxuICAgIGxldCBuYW1lc19vZiBwYWlycyByZWFkeSA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgKGZ1biAobiwgZmQpIC0+XG4gICAgICAgIGlmIExpc3QuZXhpc3RzIChmdW4gcmZkIC0+IHJmZCA9IGZkKSByZWFkeSB0aGVuIFNvbWUgKFN0cmluZyBuKSBlbHNlIE5vbmVcbiAgICAgICkgcGFpcnNcbiAgICBpblxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVhZGFibGVcIiAoTGlzdCAobmFtZXNfb2YgcmVhZF9wYWlycyByZWFkeV9yKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ3cml0YWJsZVwiIChMaXN0IChuYW1lc19vZiB3cml0ZV9wYWlycyByZWFkeV93KSk7XG4gICAgRGljdCBkKTtcblxuICAoKiA9PT0gQ2xvY2sgPT09ICopXG4gIHJlZ2lzdGVyIFwiY2xvY2stc2Vjb25kc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChVbml4LmdldHRpbWVvZmRheSAoKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xvY2stc2Vjb25kczogbm8gYXJnc1wiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjbG9jay1taWxsaXNlY29uZHNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoVW5peC5nZXR0aW1lb2ZkYXkgKCkgKi4gMTAwMC4wKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbG9jay1taWxsaXNlY29uZHM6IG5vIGFyZ3NcIikpO1xuXG4gIGxldCBmb3JtYXRfdG0gdG0gdHpfbGFiZWwgPVxuICAgIGZ1biBmbXQgLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggZm10IGluXG4gICAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhaSA8IG4gZG9cbiAgICAgICAgaWYgZm10LlshaV0gPSAnJScgJiYgIWkgKyAxIDwgbiB0aGVuIGJlZ2luXG4gICAgICAgICAgKG1hdGNoIGZtdC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgIHwgJ1knIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDRkXCIgKDE5MDAgKyB0bS5Vbml4LnRtX3llYXIpKVxuICAgICAgICAgICB8ICd5JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiICgoMTkwMCArIHRtLlVuaXgudG1feWVhcikgbW9kIDEwMCkpXG4gICAgICAgICAgIHwgJ20nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgKHRtLlVuaXgudG1fbW9uICsgMSkpXG4gICAgICAgICAgIHwgJ2QnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9tZGF5KVxuICAgICAgICAgICB8ICdlJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTJkXCIgIHRtLlVuaXgudG1fbWRheSlcbiAgICAgICAgICAgfCAnSCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIiUwMmRcIiB0bS5Vbml4LnRtX2hvdXIpXG4gICAgICAgICAgIHwgJ0knIC0+IGxldCBoID0gdG0uVW5peC50bV9ob3VyIG1vZCAxMiBpblxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiIChpZiBoID0gMCB0aGVuIDEyIGVsc2UgaCkpXG4gICAgICAgICAgIHwgJ3AnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoaWYgdG0uVW5peC50bV9ob3VyIDwgMTIgdGhlbiBcIkFNXCIgZWxzZSBcIlBNXCIpXG4gICAgICAgICAgIHwgJ00nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9taW4pXG4gICAgICAgICAgIHwgJ1MnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9zZWMpXG4gICAgICAgICAgIHwgJ2onIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDNkXCIgKHRtLlVuaXgudG1feWRheSArIDEpKVxuICAgICAgICAgICB8ICd3JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgdG0uVW5peC50bV93ZGF5KVxuICAgICAgICAgICB8ICdaJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgdHpfbGFiZWxcbiAgICAgICAgICAgfCAnYScgLT4gbGV0IGRheXMgPSBbfFwiU3VuXCI7XCJNb25cIjtcIlR1ZVwiO1wiV2VkXCI7XCJUaHVcIjtcIkZyaVwiO1wiU2F0XCJ8XSBpblxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgZGF5cy4odG0uVW5peC50bV93ZGF5KVxuICAgICAgICAgICB8ICdBJyAtPiBsZXQgZGF5cyA9IFt8XCJTdW5kYXlcIjtcIk1vbmRheVwiO1wiVHVlc2RheVwiO1wiV2VkbmVzZGF5XCI7XCJUaHVyc2RheVwiO1wiRnJpZGF5XCI7XCJTYXR1cmRheVwifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGRheXMuKHRtLlVuaXgudG1fd2RheSlcbiAgICAgICAgICAgfCAnYicgfCAnaCcgLT4gbGV0IG1vbnMgPSBbfFwiSmFuXCI7XCJGZWJcIjtcIk1hclwiO1wiQXByXCI7XCJNYXlcIjtcIkp1blwiO1wiSnVsXCI7XCJBdWdcIjtcIlNlcFwiO1wiT2N0XCI7XCJOb3ZcIjtcIkRlY1wifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG1vbnMuKHRtLlVuaXgudG1fbW9uKVxuICAgICAgICAgICB8ICdCJyAtPiBsZXQgbW9ucyA9IFt8XCJKYW51YXJ5XCI7XCJGZWJydWFyeVwiO1wiTWFyY2hcIjtcIkFwcmlsXCI7XCJNYXlcIjtcIkp1bmVcIjtcIkp1bHlcIjtcIkF1Z3VzdFwiO1wiU2VwdGVtYmVyXCI7XCJPY3RvYmVyXCI7XCJOb3ZlbWJlclwiO1wiRGVjZW1iZXJcInxdIGluXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBtb25zLih0bS5Vbml4LnRtX21vbilcbiAgICAgICAgICAgfCAnJScgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnJSdcbiAgICAgICAgICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyUnOyBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpO1xuICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBmbXQuWyFpXTtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgZW5kXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBpblxuICByZWdpc3RlciBcImNsb2NrLWZvcm1hdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCAodCwgZm10LCB0eikgPSBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW0ludGVnZXIgdF0gLT4gKHQsIFwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVlcIiwgXCJ1dGNcIilcbiAgICAgIHwgW0ludGVnZXIgdDsgU3RyaW5nIGZdIC0+ICh0LCBmLCBcInV0Y1wiKVxuICAgICAgfCBbSW50ZWdlciB0OyBTdHJpbmcgZjsgU3RyaW5nIHpdIC0+ICh0LCBmLCB6KVxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xvY2stZm9ybWF0OiAoc2Vjb25kcyBbZm9ybWF0IFt0el1dKVwiKVxuICAgIGluXG4gICAgbGV0IHRtID1cbiAgICAgIGlmIHR6ID0gXCJsb2NhbFwiIHRoZW4gVW5peC5sb2NhbHRpbWUgKGZsb2F0X29mX2ludCB0KVxuICAgICAgZWxzZSBVbml4LmdtdGltZSAoZmxvYXRfb2ZfaW50IHQpXG4gICAgaW5cbiAgICBsZXQgbGFiZWwgPSBpZiB0eiA9IFwibG9jYWxcIiB0aGVuIFwiXCIgZWxzZSBcIlVUQ1wiIGluXG4gICAgU3RyaW5nIChmb3JtYXRfdG0gdG0gbGFiZWwgZm10KSk7XG5cbiAgKCogY2xvY2stc2NhbjogcGFyc2UgYSBkYXRlIHN0cmluZyB3aXRoIGZvcm1hdCwgcmV0dXJuIHNlY29uZHMuXG4gICAgIFN1cHBvcnRzIHRoZSBzYW1lIGZvcm1hdCBzcGVjaWZpZXJzIGFzIGNsb2NrLWZvcm1hdCAoZml4ZWQtd2lkdGggb25lcykuXG4gICAgIHR6OiBcInV0Y1wiIChkZWZhdWx0KSBvciBcImxvY2FsXCIuICopXG4gIGxldCB0aW1lZ20gKHRtIDogVW5peC50bSkgPVxuICAgIGxldCBpc19sZWFwIHkgPSB5IG1vZCA0ID0gMCAmJiAoeSBtb2QgMTAwIDw+IDAgfHwgeSBtb2QgNDAwID0gMCkgaW5cbiAgICBsZXQgZGF5c19pbl9tb250aCA9IFt8MzE7Mjg7MzE7MzA7MzE7MzA7MzE7MzE7MzA7MzE7MzA7MzF8XSBpblxuICAgIGxldCB5ZWFyID0gdG0uVW5peC50bV95ZWFyICsgMTkwMCBpblxuICAgIGxldCBtb24gPSB0bS5Vbml4LnRtX21vbiBpblxuICAgIGxldCBtZGF5ID0gdG0uVW5peC50bV9tZGF5IGluXG4gICAgbGV0IHRvdGFsX2RheXMgPSByZWYgMCBpblxuICAgIGlmIHllYXIgPj0gMTk3MCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeSA9IDE5NzAgdG8geWVhciAtIDEgZG9cbiAgICAgICAgdG90YWxfZGF5cyA6PSAhdG90YWxfZGF5cyArIChpZiBpc19sZWFwIHkgdGhlbiAzNjYgZWxzZSAzNjUpXG4gICAgICBkb25lXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGZvciB5ID0geWVhciB0byAxOTY5IGRvXG4gICAgICAgIHRvdGFsX2RheXMgOj0gIXRvdGFsX2RheXMgLSAoaWYgaXNfbGVhcCB5IHRoZW4gMzY2IGVsc2UgMzY1KVxuICAgICAgZG9uZVxuICAgIGVuZDtcbiAgICBmb3IgbSA9IDAgdG8gbW9uIC0gMSBkb1xuICAgICAgdG90YWxfZGF5cyA6PSAhdG90YWxfZGF5cyArIGRheXNfaW5fbW9udGguKG0pO1xuICAgICAgaWYgbSA9IDEgJiYgaXNfbGVhcCB5ZWFyIHRoZW4gaW5jciB0b3RhbF9kYXlzXG4gICAgZG9uZTtcbiAgICB0b3RhbF9kYXlzIDo9ICF0b3RhbF9kYXlzICsgbWRheSAtIDE7XG4gICAgIXRvdGFsX2RheXMgKiA4NjQwMFxuICAgICsgdG0uVW5peC50bV9ob3VyICogMzYwMFxuICAgICsgdG0uVW5peC50bV9taW4gKiA2MFxuICAgICsgdG0uVW5peC50bV9zZWNcbiAgaW5cbiAgcmVnaXN0ZXIgXCJjbG9jay1zY2FuXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IChzdHIsIGZtdCwgdHopID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtTdHJpbmcgczsgU3RyaW5nIGZdIC0+IChzLCBmLCBcInV0Y1wiKVxuICAgICAgfCBbU3RyaW5nIHM7IFN0cmluZyBmOyBTdHJpbmcgel0gLT4gKHMsIGYsIHopXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbG9jay1zY2FuOiAoc3RyIGZtdCBbdHpdKVwiKVxuICAgIGluXG4gICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIGZtdCBhbmQgc24gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCB0bSA9IHJlZiB7IFVuaXgudG1feWVhciA9IDcwOyB0bV9tb24gPSAwOyB0bV9tZGF5ID0gMTtcbiAgICAgICAgICAgICAgICAgICB0bV9ob3VyID0gMDsgdG1fbWluID0gMDsgdG1fc2VjID0gMDtcbiAgICAgICAgICAgICAgICAgICB0bV93ZGF5ID0gMDsgdG1feWRheSA9IDA7IHRtX2lzZHN0ID0gZmFsc2UgfSBpblxuICAgIGxldCBpID0gcmVmIDAgYW5kIGogPSByZWYgMCBpblxuICAgIGxldCByZWFkX25fZGlnaXRzIGsgPVxuICAgICAgbGV0IHMgPSByZWYgXCJcIiBpblxuICAgICAgbGV0IGNudCA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhY250IDwgayAmJiAhaiA8IHNuICYmIHN0ci5bIWpdID49ICcwJyAmJiBzdHIuWyFqXSA8PSAnOScgZG9cbiAgICAgICAgcyA6PSAhcyBeIFN0cmluZy5tYWtlIDEgc3RyLlshal07XG4gICAgICAgIGluY3IgajsgaW5jciBjbnRcbiAgICAgIGRvbmU7XG4gICAgICBpZiAhcyA9IFwiXCIgdGhlbiAwIGVsc2UgaW50X29mX3N0cmluZyAhc1xuICAgIGluXG4gICAgbGV0IHNraXBfd3MgKCkgPVxuICAgICAgd2hpbGUgIWogPCBzbiAmJiAoc3RyLlshal0gPSAnICcgfHwgc3RyLlshal0gPSAnXFx0JykgZG8gaW5jciBqIGRvbmVcbiAgICBpblxuICAgIHdoaWxlICFpIDwgbiBkb1xuICAgICAgaWYgZm10LlshaV0gPSAnJScgJiYgIWkgKyAxIDwgbiB0aGVuIGJlZ2luXG4gICAgICAgIChtYXRjaCBmbXQuWyFpICsgMV0gd2l0aFxuICAgICAgICAgfCAnWScgLT4gdG0gOj0geyAhdG0gd2l0aCB0bV95ZWFyID0gcmVhZF9uX2RpZ2l0cyA0IC0gMTkwMCB9XG4gICAgICAgICB8ICd5JyAtPiBsZXQgeSA9IHJlYWRfbl9kaWdpdHMgMiBpblxuICAgICAgICAgICAgICAgICAgdG0gOj0geyAhdG0gd2l0aCB0bV95ZWFyID0gKGlmIHkgPCA3MCB0aGVuIDEwMCArIHkgZWxzZSB5KSB9XG4gICAgICAgICB8ICdtJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX21vbiA9IHJlYWRfbl9kaWdpdHMgMiAtIDEgfVxuICAgICAgICAgfCAnZCcgfCAnZScgLT4gc2tpcF93cyAoKTsgdG0gOj0geyAhdG0gd2l0aCB0bV9tZGF5ID0gcmVhZF9uX2RpZ2l0cyAyIH1cbiAgICAgICAgIHwgJ0gnIHwgJ0knIC0+IHRtIDo9IHsgIXRtIHdpdGggdG1faG91ciA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICdNJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX21pbiA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICdTJyAtPiB0bSA6PSB7ICF0bSB3aXRoIHRtX3NlYyA9IHJlYWRfbl9kaWdpdHMgMiB9XG4gICAgICAgICB8ICclJyAtPiBpZiAhaiA8IHNuICYmIHN0ci5bIWpdID0gJyUnIHRoZW4gaW5jciBqXG4gICAgICAgICB8IF8gLT4gKCkgICgqIHVuc3VwcG9ydGVkIHNwZWNpZmllciDigJQgc2tpcCAqKVxuICAgICAgICApO1xuICAgICAgICBpIDo9ICFpICsgMlxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgaWYgZm10LlshaV0gPSAnICcgdGhlbiBza2lwX3dzICgpXG4gICAgICAgIGVsc2UgaWYgIWogPCBzbiAmJiBzdHIuWyFqXSA9IGZtdC5bIWldIHRoZW4gaW5jciBqO1xuICAgICAgICBpbmNyIGlcbiAgICAgIGVuZFxuICAgIGRvbmU7XG4gICAgbGV0IHNlY3MgPVxuICAgICAgaWYgdHogPSBcImxvY2FsXCIgdGhlbiBpbnRfb2ZfZmxvYXQgKGZzdCAoVW5peC5ta3RpbWUgIXRtKSlcbiAgICAgIGVsc2UgdGltZWdtICF0bVxuICAgIGluXG4gICAgSW50ZWdlciBzZWNzKTtcblxuICAoKiA9PT0gRW52LWFzLXZhbHVlIChQaGFzZSA0KSA9PT0gKilcblxuICAoKiBlbnYtbG9va3VwOiAoZW52IGtleSkg4oaSIHZhbHVlIG9yIG5pbC4gIFdvcmtzIG9uIEVudiwgRGljdCwgb3IgTmlsLiAqKVxuICByZWdpc3RlciBcImVudi1sb29rdXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgdW53cmFwID0gZnVuY3Rpb25cbiAgICAgIHwgRW52IGUgLT4gZVxuICAgICAgfCBOaWwgLT4gbWFrZV9lbnYgKClcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1sb29rdXA6IGZpcnN0IGFyZyBtdXN0IGJlIGFuIGVudmlyb25tZW50XCIpIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZW52X3ZhbDsga2V5XSAtPlxuICAgICAgbGV0IGUgPSB1bndyYXAgZW52X3ZhbCBpblxuICAgICAgbGV0IGsgPSB2YWx1ZV90b19zdHJpbmcga2V5IGluXG4gICAgICBpZiBlbnZfaGFzIGUgayB0aGVuIGVudl9nZXQgZSBrIGVsc2UgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWxvb2t1cDogKGVudiBrZXkpXCIpKTtcblxuICAoKiBlbnYtZXh0ZW5kOiAoZW52IFtrZXkgdmFsIC4uLl0pIOKGkiBuZXcgY2hpbGQgZW52IHdpdGggb3B0aW9uYWwgYmluZGluZ3MuICopXG4gIHJlZ2lzdGVyIFwiZW52LWV4dGVuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZXh0ZW5kOiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJnXCIpXG4gICAgfCBlbnZfdmFsIDo6IHBhaXJzIC0+XG4gICAgICBsZXQgcGFyZW50X2VudiA9IG1hdGNoIGVudl92YWwgd2l0aFxuICAgICAgICB8IEVudiBlIC0+IGVcbiAgICAgICAgfCBOaWwgLT4gbWFrZV9lbnYgKClcbiAgICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWV4dGVuZDogZmlyc3QgYXJnIG11c3QgYmUgYW4gZW52aXJvbm1lbnRcIikgaW5cbiAgICAgIGxldCBjaGlsZCA9IGVudl9leHRlbmQgcGFyZW50X2VudiBpblxuICAgICAgbGV0IHJlYyBhZGRfYmluZGluZ3MgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgayA6OiB2IDo6IHJlc3QgLT4gaWdub3JlIChlbnZfYmluZCBjaGlsZCAodmFsdWVfdG9fc3RyaW5nIGspIHYpOyBhZGRfYmluZGluZ3MgcmVzdFxuICAgICAgICB8IFtfXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1leHRlbmQ6IG9kZCBudW1iZXIgb2Yga2V5LXZhbCBwYWlyc1wiKSBpblxuICAgICAgYWRkX2JpbmRpbmdzIHBhaXJzO1xuICAgICAgRW52IGNoaWxkKTtcblxuICAoKiBKSVQgY2FjaGUgY29udHJvbCAmIG9ic2VydmFiaWxpdHkg4oCUIGJhY2tlZCBieSByZWZzIGluIHN4X3R5cGVzLm1sIHRvXG4gICAgIGF2b2lkIGNyZWF0aW5nIGEgc3hfcHJpbWl0aXZlcyDihpIgc3hfdm0gZGVwZW5kZW5jeSBjeWNsZS4gc3hfdm0gcmVhZHNcbiAgICAgdGhlc2UgcmVmcyB0byBkZWNpZGUgd2hlbiB0byBKSVQuICopXG4gIHJlZ2lzdGVyIFwiaml0LXN0YXRzXCIgKGZ1biBfYXJncyAtPlxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidGhyZXNob2xkXCIgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X3RocmVzaG9sZCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnVkZ2V0XCIgICAgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X2J1ZGdldCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY2FjaGUtc2l6ZVwiICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAoU3hfdHlwZXMuaml0X2NhY2hlX3NpemUgKCkpKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb21waWxlZFwiICAgICAgICAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbXBpbGUtZmFpbGVkXCIgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9za2lwcGVkX2NvdW50KSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJiZWxvdy10aHJlc2hvbGRcIiAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfdGhyZXNob2xkX3NraXBwZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImV2aWN0ZWRcIiAgICAgICAgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50KSk7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJqaXQtc2V0LXRocmVzaG9sZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgbl0gLT4gU3hfdHlwZXMuaml0X3RocmVzaG9sZCA6PSBpbnRfb2ZfZmxvYXQgbjsgTmlsXG4gICAgfCBbSW50ZWdlciBuXSAtPiBTeF90eXBlcy5qaXRfdGhyZXNob2xkIDo9IG47IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImppdC1zZXQtdGhyZXNob2xkITogKG4pIHdoZXJlIG4gaXMgaW50ZWdlclwiKSk7XG4gIHJlZ2lzdGVyIFwiaml0LXNldC1idWRnZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIG5dIC0+IFN4X3R5cGVzLmppdF9idWRnZXQgOj0gaW50X29mX2Zsb2F0IG47IE5pbFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3hfdHlwZXMuaml0X2J1ZGdldCA6PSBuOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJqaXQtc2V0LWJ1ZGdldCE6IChuKSB3aGVyZSBuIGlzIGludGVnZXJcIikpO1xuICByZWdpc3RlciBcImppdC1yZXNldC1jYWNoZSFcIiAoZnVuIF9hcmdzIC0+XG4gICAgKCogUGhhc2UgMyBtYW51YWwgY2FjaGUgcmVzZXQg4oCUIGNsZWFyIGFsbCBjb21waWxlZCBWbUNsb3N1cmVzLlxuICAgICAgIEhvdCBwYXRocyB3aWxsIHJlLUpJVCBvbiBuZXh0IGNhbGwgKGFmdGVyIHJlLWhpdHRpbmcgdGhyZXNob2xkKS4gKilcbiAgICBRdWV1ZS5pdGVyIChmdW4gKF8sIHYpIC0+XG4gICAgICBtYXRjaCB2IHdpdGggTGFtYmRhIGwgLT4gbC5sX2NvbXBpbGVkIDwtIE5vbmUgfCBfIC0+ICgpXG4gICAgKSBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWU7XG4gICAgUXVldWUuY2xlYXIgU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlO1xuICAgIE5pbCk7XG4gIHJlZ2lzdGVyIFwiaml0LWV4Y2x1ZGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogTWFyayBmdW5jdGlvbiBuYW1lcyBhcyBpbnRlcnByZXQtb25seSAobmV2ZXIgSklULWNvbXBpbGVkKS4gQSBndWVzdFxuICAgICAgIGludGVycHJldGVyIGNhbGxzIHRoaXMgZm9yIGl0cyBjb250aW51YXRpb24tdXNpbmcgZGlzcGF0Y2ggY29yZS5cbiAgICAgICBBY2NlcHRzIHN0cmluZy9zeW1ib2wgbmFtZXM7IGEgdHJhaWxpbmcgXCIqXCIgbWFrZXMgaXQgYSBuYW1lc3BhY2UgcHJlZml4XG4gICAgICAgKGUuZy4gXCJlci0qXCIgZXhjbHVkZXMgZXZlcnkgZnVuY3Rpb24gd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBcImVyLVwiKSDigJRcbiAgICAgICB0aGUgcm9idXN0IHdheSB0byBkZWNsYXJlIGEgd2hvbGUgZ3Vlc3QgaW50ZXJwcmV0ZXIgY29yZS4gKilcbiAgICBMaXN0Lml0ZXIgKGZ1biBhIC0+XG4gICAgICBtYXRjaCBhIHdpdGhcbiAgICAgIHwgU3RyaW5nIG4gfCBTeW1ib2wgbiAtPlxuICAgICAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBuIGluXG4gICAgICAgIGlmIGxlbiA+IDAgJiYgbi5bbGVuIC0gMV0gPSAnKicgdGhlbiBiZWdpblxuICAgICAgICAgIGxldCBwcmVmaXggPSBTdHJpbmcuc3ViIG4gMCAobGVuIC0gMSkgaW5cbiAgICAgICAgICBpZiBub3QgKExpc3QubWVtIHByZWZpeCAhU3hfdHlwZXMuaml0X2V4Y2x1ZGVkX3ByZWZpeGVzKSB0aGVuXG4gICAgICAgICAgICBTeF90eXBlcy5qaXRfZXhjbHVkZWRfcHJlZml4ZXMgOj0gcHJlZml4IDo6ICFTeF90eXBlcy5qaXRfZXhjbHVkZWRfcHJlZml4ZXNcbiAgICAgICAgZW5kIGVsc2VcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgU3hfdHlwZXMuaml0X2V4Y2x1ZGVkIG4gKClcbiAgICAgIHwgXyAtPiAoKSkgYXJncztcbiAgICBOaWwpO1xuICByZWdpc3RlciBcImppdC1leGNsdWRlZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbl0gfCBbU3ltYm9sIG5dIC0+IEJvb2wgKFN4X3R5cGVzLmppdF9uYW1lX2V4Y2x1ZGVkIG4pXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImppdC1leGNsdWRlLWNhbGxlcnMtb2YhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogUmVnaXN0ZXIgY2FsbC9jYy1lc3RhYmxpc2hpbmcgZm9ybXMgKGUuZy4gY2wtcmVzdGFydC1jYXNlKS4gQW55IGZ1bmN0aW9uXG4gICAgICAgd2hvc2UgYnl0ZWNvZGUgcmVmZXJlbmNlcyBvbmUgb2YgdGhlc2UgaXMgaXRzZWxmIGludGVycHJldC1vbmx5IOKAlCBKSVRcbiAgICAgICB3b3VsZCBmb3JjZSB0aGUgZm9ybSBpbnRvIGEgbmVzdGVkIGNlay1ydW4gd2hlcmUgaXRzIGNvbnRpbnVhdGlvbiBjYW4ndFxuICAgICAgIGVzY2FwZS4gQSBndWVzdCBkZWNsYXJlcyBpdHMgY29uZGl0aW9uLXN5c3RlbSAvIGVzY2FwaW5nIGZvcm1zIGhlcmUuICopXG4gICAgTGlzdC5pdGVyIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoXG4gICAgICB8IFN0cmluZyBuIHwgU3ltYm9sIG4gLT4gSGFzaHRibC5yZXBsYWNlIFN4X3R5cGVzLmppdF9leGNsdWRlZF9jYWxsZXJfbmFtZXMgbiAoKVxuICAgICAgfCBfIC0+ICgpKSBhcmdzO1xuICAgIE5pbCk7XG4gIHJlZ2lzdGVyIFwiaml0LXJlc2V0LWNvdW50ZXJzIVwiIChmdW4gX2FyZ3MgLT5cbiAgICBTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQgOj0gMDtcbiAgICBTeF90eXBlcy5qaXRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF90aHJlc2hvbGRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50IDo9IDA7XG4gICAgTmlsKTtcblxuICAoKiBmZWQtc3ggaG9zdCBwcmltaXRpdmVzIOKAlCBwdXJlLU9DYW1sIGNyeXB0byAoV0FTTS1zYWZlKS4gKilcbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhMjU2XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyAoU3hfc2hhMi5zaGEyNTZfaGV4IHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY3J5cHRvLXNoYTI1NjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhNTEyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyAoU3hfc2hhMi5zaGE1MTJfaGV4IHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY3J5cHRvLXNoYTUxMjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjcnlwdG8tc2hhMy0yNTZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3RyaW5nIChTeF9zaGEzLnNoYTNfMjU2X2hleCBzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNyeXB0by1zaGEzLTI1NjogKGJ5dGVzKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjYm9yLWVuY29kZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+XG4gICAgICAodHJ5IFN0cmluZyAoU3hfY2Jvci5lbmNvZGUgdilcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNib3ItZW5jb2RlOiAodmFsdWUpXCIpKTtcblxuICByZWdpc3RlciBcImNib3ItZGVjb2RlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+XG4gICAgICAodHJ5IFN4X2Nib3IuZGVjb2RlIHNcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNib3ItZGVjb2RlOiAoYnl0ZXMpXCIpKTtcblxuICByZWdpc3RlciBcImNpZC1mcm9tLWJ5dGVzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBjb2RlYzsgU3RyaW5nIG1oXSAtPlxuICAgICAgU3RyaW5nIChTeF9jaWQuY2lkdjEgY29kZWMgbWgpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2lkLWZyb20tYnl0ZXM6IChjb2RlYyBtdWx0aWhhc2gtYnl0ZXMpXCIpKTtcblxuICByZWdpc3RlciBcImNpZC1mcm9tLXN4XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT5cbiAgICAgICh0cnkgU3RyaW5nIChTeF9jaWQuY2lkX2Zyb21fc3ggdilcbiAgICAgICB3aXRoIFN4X2Nib3IuQ2Jvcl9lcnJvciBtIC0+IHJhaXNlIChFdmFsX2Vycm9yIG0pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNpZC1mcm9tLXN4OiAodmFsdWUpXCIpKTtcblxuICAoKiBWZXJpZnkgaXMgdG90YWw6IGFueSBtYWxmb3JtZWQgaW5wdXQgLT4gZmFsc2UsIG5ldmVyIHJhaXNlcy4gKilcbiAgcmVnaXN0ZXIgXCJlZDI1NTE5LXZlcmlmeVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwazsgU3RyaW5nIG1zZzsgU3RyaW5nIHNnXSAtPlxuICAgICAgQm9vbCAodHJ5IFN4X2VkMjU1MTkudmVyaWZ5IH5wdWJrZXk6cGsgfm1zZyB+c2lnXzpzZ1xuICAgICAgICAgICAgd2l0aCBfIC0+IGZhbHNlKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcblxuICByZWdpc3RlciBcInJzYS1zaGEyNTYtdmVyaWZ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNwa2k7IFN0cmluZyBtc2c7IFN0cmluZyBzZ10gLT5cbiAgICAgIEJvb2wgKHRyeSBTeF9yc2EudmVyaWZ5IH5zcGtpIH5tc2cgfnNpZ186c2cgd2l0aCBfIC0+IGZhbHNlKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9kaXYiLCJjYW1sX2VxdWFsIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9tb2QiLCJjYW1sX211bCIsImNhbWxfb2JqX2R1cCIsImNhbWxfcm91bmRfZmxvYXQiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N5c19maWxlX2V4aXN0cyIsImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0Zsb2F0IiwiU3RkbGliX0hhc2h0YmwiLCJTeF90eXBlcyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0xpc3QiLCJTeF9yc2EiLCJTeF9lZDI1NTE5IiwiU3hfY2lkIiwiU3hfY2JvciIsIlN4X3NoYTMiLCJTeF9zaGEyIiwiU3RkbGliX1F1ZXVlIiwiVW5peCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9GaWxlbmFtZSIsIlN4X3BhcnNlciIsIlJlIiwiUmVfUGNyZSIsIlN0ZGxpYl9VY2hhciIsIlN0ZGxpYl9TY2FuZiIsInByaW1pdGl2ZXMiLCJzeF9jYWxsX2ZuIiwicGFyYW0iLCJzeF90cmFtcG9saW5lX2ZuIiwidiIsInNjb3BlX3N0YWNrcyIsInNjb3BlX3RyYWNlIiwic2NvcGVfbG9nIiwic2NvcGVfdHJhY2VfZW5hYmxlIiwic2NvcGVfdHJhY2VfZGlzYWJsZSIsInNjb3BlX3RyYWNlX2RyYWluIiwibG9nIiwicmVxdWVzdF9jb29raWVzIiwic2NvcGVfY2xlYXJfYWxsIiwicmVnaXN0ZXIiLCJuYW1lIiwiZm4iLCJpc19wcmltaXRpdmUiLCJnZXRfcHJpbWl0aXZlIiwibWF0Y2giLCJ0cmFtcG9saW5lX2hvb2siLCJjc3RfRXhwZWN0ZWRfbnVtYmVyX2dvdCIsImFzX2ludCIsIm4iLCJhbGxfaW50cyIsImNzdCIsImNzdF9zaWduYWwiLCJjc3RfZGljdCIsImNzdF92YWx1ZSIsImFzX251bWJlciIsInQiLCJzIiwiZCIsImFzX3N0cmluZyIsImFzX2xpc3QiLCJsIiwiciIsImFzX2Jvb2wiLCJiIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJ0b19zdHJpbmciLCJyYXRfZ2NkIiwiYSIsImNzdF9yYXRpb25hbF9kaXZpc2lvbl9ieV96ZXJvIiwibWFrZV9yYXQiLCJzaWduIiwiZyIsInJuIiwicmQiLCJyYXRfb2ZfdmFsIiwiaGFzX3JhdGlvbmFsIiwiYXJncyIsImhhc19mbG9hdCIsInJhdF9hZGQiLCJiZCIsImJuIiwiYWQiLCJhbiIsInJhdF9zdWIiLCJyYXRfbXVsIiwicmF0X2RpdiIsImNzdF9kX2QiLCJjc3RfZyIsInN4X3dyaXRlX3ZhbCIsImJ1ZiIsImMiLCJrIiwiaXRlbXMiLCJzeF9kaXNwbGF5X3ZhbCIsImFjYyIsInRsIiwiaCIsInJlc3QiLCJ4IiwicGxhY2VzIiwiZmFjdG9yIiwic3VtIiwiaSIsImNvdW50IiwidG91MzIiLCJhaSIsImJpIiwiaGkiLCJsbyIsImJhc2UiLCJlIiwicCIsImlnY2QiLCJjc3RfMCIsImludF90b19yYWRpeCIsIm5lZyIsImdvIiwiY3N0X251bWJlcl9zdHJpbmdfcmFkaXhfb3V0X29mIiwiZXhuIiwic3RhcnQiLCJtYWtlX3JhdGlvbmFsX3ZhbCIsImNzdF9zIiwiYXJnIiwic3BlY19zdHIiLCJ0eXBlX2NoYXIiLCJ0b19pbnQiLCJ0b19mbG9hdCIsInN3aXRjaGVyIiwiZm10Iiwibl92YWwiLCJib2R5IiwiaW5wdXQiLCJsZW4iLCJjc3RfY29uc3VtZWQiLCJqIiwiZl92YWwiLCJwYXJzZV9sZWFkaW5nX2ludCIsImRlZmF1bHRfdmFsIiwiY3N0X2hvc3RfaGFuZGxlIiwic2FmZV9lcSIsInkiLCJsYSIsImhiIiwiaGEiLCJlcSIsImxiIiwibmVlZGxlIiwiaGF5c3RhY2siLCJwcmVmaXgiLCJzdWZmaXgiLCJzbCIsInhsIiwibmwiLCJobCIsInRhcmdldCIsImVuZF92Iiwic3RhcnRfdiIsImxlbl92Iiwic2VwIiwicmUiLCJ0b19zdHIiLCJuZXdfcyIsIm9sZF9zIiwib2wiLCJoYXNfZGVjIiwiaGFzX2V4cCIsInBhdHRlcm4iLCJncm91cCIsImZ1bGwiLCJncm91cHMiLCJtYXRjaGVzIiwicmVzdWx0cyIsImNzdF9yZWdleF9yZXBsYWNlIiwicmVwbGFjZW1lbnQiLCJzdG9wIiwiY3N0X3JlZ2V4X3NwbGl0IiwiY3N0X2FyZ3MiLCJjc3RfbGVuIiwicGFpcnMiLCJ4cyIsImFsbCIsIml0ZW0iLCJmbGF0Iiwic3ViIiwia2V5Iiwic3RvcF92Iiwic3RlcF92Iiwic3QiLCJ0YWtlX3JhbmdlIiwiaWR4IiwibDEiLCJsMiIsInlzIiwidGFrZV9uIiwic2l6ZSIsInNlZW4iLCJyZXN1bHQiLCJkMiIsImtleXMiLCJzcmMiLCJkaWN0X3BhcnRzIiwiYXJyIiwiZWx0cyIsImNzdF9lcnJvciIsIm1zZyIsImNhdGNoX2ZuIiwidHJ5X2ZuIiwiaXNfY2xpZW50Iiwic3RvcmVfcmVnaXN0cnkiLCJpbml0X2ZuIiwic3RvcmUiLCJzdGF0ZSIsInNpZ19kIiwiY2FsbCIsImlkZW50aWNhbCIsImNhbGxfYW55IiwidHlwZXMiLCJpbml0IiwiZHN0Iiwic3JjX2l0ZW1zIiwiY3Rvcl9wYXJhbXMiLCJmaWVsZHMiLCJhcmdfbGlzdCIsInVpZCIsIm52IiwiY3N0X3BhcmFtIiwiY29udmVydGVyIiwiY29udmVydGVkIiwiZmlsbCIsImNzdF9vdXRfb2ZfYm91bmRzX2xlbmd0aCIsImNhcF9zdGFjayIsImNhcHMiLCJjYXBfc2V0IiwicHJldiIsImNhcCIsImNsYXVzZXMiLCJjc3RfVk1fdW5kZWZpbmVkIiwiY3N0X2RlcHRoIiwiY3N0X3Njb3BlX3B1c2giLCJ2YWx1ZSIsInN0YWNrIiwiY3N0X3Njb3BlX3BvcCIsImNzdF9mb3VuZCIsImNzdF9jb250ZXh0IiwiYWxsX2tleXMiLCJjc3RfY29sbGVjdGVkIiwiY3N0X2NsZWFyX2NvbGxlY3RlZCIsIm5ld192YWx1ZSIsInNpZyIsInRyYWNraW5nX2FjdGl2ZSIsInRyYWNraW5nX2RlcHMiLCJkZXBzIiwiYm9keV9mbiIsInUiLCJ1cGRhdGVfZm4iLCJkaXNwb3NlcnMiLCJydW5fdHJhY2tlZCIsImRlcCIsInN1YnNjcmliZXIiLCJuZXdfcmVzdWx0IiwiY3N0X3Njb3BlX2VtaXQiLCJjc3RfZW1pdHRlZCIsInRodW5rIiwicmVnZXhfdGFibGUiLCJjc3RfaWQiLCJtYWtlX3JlZ2V4X3ZhbHVlIiwiaWQiLCJzb3VyY2UiLCJmbGFncyIsInJlZ2V4X29mX3ZhbHVlIiwiY3N0X2dyb3VwcyIsImNzdF9pbnB1dCIsImNzdF9tYXRjaCIsImdyb3VwX3RvX2RpY3QiLCJyZWdleF9uZXh0X2lkIiwiY3N0X3JlZ2V4X2NvbXBpbGVfaW52YWxpZF9wYXR0Iiwib3B0cyIsInJ4IiwiZXhwYW5kIiwiZ2xvYmFsIiwicmVwbCIsImJlZm9yZSIsImFmdGVyX3N0YXJ0IiwiYWZ0ZXIiLCJjYWxsX2ZuIiwibWF0Y2hfc3RyIiwiZ3JvdXBzX2JlZm9yZSIsImFsbF9hcmdzIiwibWFrZV9yZWdleHBfdmFsdWUiLCJjb21waWxlZCIsImNzdF9lbmQiLCJjc3Rfc3RhcnQiLCJtYXRjaF9kaWN0IiwiYml0cyIsImh0IiwiZm91bmQiLCJlayIsImRlZmF1bHQkIiwic2VxX3RvX2xpc3QiLCJjaGFycyIsImNzdF9vdXRfb2ZfYm91bmRzIiwiY3N0X3NlcXVlbmNlX3JlZl9pbmRleCIsImNzdF9zZXF1ZW5jZV9yZWZfaW5kZXhfZF9vdXRfbyIsImxzdCIsInYxIiwiczIiLCJzMSIsInYyIiwieHMyIiwieHMxIiwic3RlcCIsImxvX2kiLCJoaV9pIiwiZ2Vuc3ltX2NvdW50ZXIiLCJjaGFyX2Rvd25jYXNlX2NwIiwiY3N0X3JlYWRfY2hhcl9leHBlY3RlZF9pbnB1dF9wIiwicG9zIiwiY3AiLCJjc3RfcGVla19jaGFyX2V4cGVjdGVkX2lucHV0X3AiLCJjc3RfcmVhZF9saW5lX2V4cGVjdGVkX2lucHV0X3AiLCJsaW5lIiwicmVhZF9wb3N0cHJvY2VzcyIsImZvcm0iLCJjc3RfZiIsImNzdF82ZiIsInByZWMiLCJzZXRfa2V5Iiwib3V0IiwiY3N0X291dF9vZl9yYW5nZSIsImJ5dGUiLCJkb19jb3B5IiwiYXQiLCJidWZzIiwidG90YWwiLCJieXRlc19saXN0IiwicGF0aCIsImljIiwibmFtZXMiLCJjb250ZW50Iiwib2MiLCJwYXQiLCJkaXIiLCJiYXNlX3BhdCIsImVudHJpZXMiLCJlbnRyeSIsInBuIiwic24iLCJwaSIsInNpIiwibmVnYXRlIiwibWF0Y2hlZCIsImMxIiwiYzIiLCJzdGF0X29yIiwiY3N0X2ZpbGUiLCJtayIsImNoYW5uZWxfdGFibGUiLCJjaGFuX2dldCIsImNoYW5uZWxfbmV4dF9pZCIsIm1vZGUiLCJmZCIsIm0iLCJtYXhfbiIsImVvZiIsImNodW5rIiwiYnVmZmVyIiwid2FudCIsIm9uZSIsImdvdF9kYXRhIiwid3JpdHRlbiIsInciLCJvIiwid2hlbmNlIiwib2Zmc2V0IiwiY21kIiwiYmxvY2tpbmciLCJjc3RfZXhlYyIsImNzdF9leGVjX2VtcHR5X2NvbW1hbmQiLCJhcmd2Iiwib3V0X3ciLCJvdXRfciIsImVycl93IiwiZXJyX3IiLCJwaWQiLCJlcnJidWYiLCJyZWFkX2FsbCIsInN0YXR1cyIsImV4aXRfY29kZSIsInRyaW1tZWQiLCJ3b3JkcyIsImV4dHJhY3RfcmVkaXJzIiwid3MiLCJjbGVhbmVkIiwibWVyZ2VfZXJyIiwiZXJyX3BhdGgiLCJvdXRfYXBwZW5kIiwib3V0X3BhdGgiLCJpbl9wYXRoIiwiY3VyIiwic3RhZ2VzIiwicGlwZXMiLCJmaW5hbF93IiwiZmluYWxfciIsImVycnN0YXNoX3ciLCJlcnJzdGFzaF9yIiwiY2xvc2Vfc2FmZSIsIm9wZW5fb3V0X3JlZGlyIiwiYXBwZW5kIiwic3RhZ2VzX2FyciIsInBpZHMiLCJtZXJnZSIsImVwIiwiYXBwIiwib3AiLCJpcCIsInN0ZGluX2ZkIiwic3Rkb3V0X2ZkIiwic3RkZXJyX2ZkIiwiZXhpdF9jb2RlcyIsImxhc3QiLCJmaW5hbF9jb2RlIiwicmVzb2x2ZV9pbmV0X2FkZHIiLCJob3N0IiwiY3N0X3NvY2tldF9jYW5ub3RfcmVzb2x2ZSIsInBvcnRfb2YiLCJhbGxvY19jaGFuX25hbWUiLCJjc3RfcnciLCJwb3J0X3YiLCJwb3J0IiwiYWRkciIsInNvY2siLCJlcnIiLCJjbGllbnRfYWRkciIsImNsaWVudF9zb2NrIiwiaG9zdF9zdHIiLCJjbGllbnRfbmFtZSIsInRvX2xpc3QiLCJjaGFuX25hbWVfb2YiLCJ0aW1lb3V0X21zIiwid3JpdGVfbGlzdCIsInJlYWRfbGlzdCIsInJlYWRfcGFpcnMiLCJ3cml0ZV9wYWlycyIsInJlYWRfZmRzIiwid3JpdGVfZmRzIiwidGltZW91dCIsInJlYWR5X3ciLCJyZWFkeV9yIiwibmFtZXNfb2YiLCJyZWFkeSIsInJmZCIsImNzdF8wMmQiLCJjc3RfTWF5IiwiY3N0X2xvY2FsIiwiY3N0X3V0YyIsInoiLCJ0eiIsInRtIiwidHpfbGFiZWwiLCJkYXlzIiwibW9ucyIsInN0ciIsInJlYWRfbl9kaWdpdHMiLCJjbnQiLCJza2lwX3dzIiwic2VjcyIsImlzX2xlYXAiLCJkYXlzX2luX21vbnRoIiwieWVhciIsIm1vbiIsIm1kYXkiLCJ0b3RhbF9kYXlzIiwiZW52X3ZhbCIsInBhcmVudF9lbnYiLCJjaGlsZCIsIm1oIiwiY29kZWMiLCJzZyIsInBrIiwic3BraSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsV0FBQTtB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NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBSdW50aW1lIGhlbHBlcnMgZm9yIHRyYW5zcGlsZWQgY29kZS5cblxuICAgIFRoZXNlIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIHRyYW5zcGlsZXIncyBvdXRwdXQgYW5kIHRoZVxuICAgIGZvdW5kYXRpb24gdHlwZXMvcHJpbWl0aXZlcy4gVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHRoZXNlXG4gICAgZnVuY3Rpb25zIGRpcmVjdGx5LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBGYXN0IHBhdGggZXF1YWxpdHkg4oCUIHNhbWUgYXMgU3hfcHJpbWl0aXZlcy5zYWZlX2VxIGZvciB0aGUgY29tbW9uIGNhc2VzXG4gICAgdGhhdCBzaG93IHVwIGluIGhvdCBkaXNwYXRjaCAoc3RyaW5nIHZzIHN0cmluZywgZXRjKS4gRmFsbHMgdGhyb3VnaCB0b1xuICAgIHRoZSByZWdpc3RlcmVkIFwiPVwiIHByaW1pdGl2ZSBmb3IgY29tcGxleCBjYXNlcy4gKilcbmxldCByZWMgX2Zhc3RfZXEgYSBiID1cbiAgaWYgYSA9PSBiIHRoZW4gdHJ1ZVxuICBlbHNlIG1hdGNoIGEsIGIgd2l0aFxuICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IHggPSB5XG4gIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IHggPSBmbG9hdF9vZl9pbnQgeVxuICAoKiBFeGFjdCByYXRpb25hbHMg4oCUIG11c3QgbWF0Y2ggdGhlIFwiPVwiIHByaW1pdGl2ZSAoc2FmZV9lcSkuIENyb3NzLW11bHRpcGx5XG4gICAgIGZvciByYXRpb25hbC9yYXRpb25hbDsgY29lcmNlIGZvciByYXRpb25hbC9pbnQgYW5kIHJhdGlvbmFsL2Zsb2F0LiAqKVxuICB8IFJhdGlvbmFsIChhbiwgYWQpLCBSYXRpb25hbCAoYm4sIGJkKSAtPiBhbiAqIGJkID0gYm4gKiBhZFxuICB8IFJhdGlvbmFsIChuLCBkKSwgSW50ZWdlciB5IC0+IG4gPSB5ICogZFxuICB8IEludGVnZXIgeCwgUmF0aW9uYWwgKG4sIGQpIC0+IHggKiBkID0gblxuICB8IFJhdGlvbmFsIChuLCBkKSwgTnVtYmVyIHkgLT4gZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGQgPSB5XG4gIHwgTnVtYmVyIHgsIFJhdGlvbmFsIChuLCBkKSAtPiB4ID0gZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGRcbiAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgfCBTeW1ib2wgeCwgU3ltYm9sIHkgLT4geCA9IHlcbiAgfCBLZXl3b3JkIHgsIEtleXdvcmQgeSAtPiB4ID0geVxuICB8IChMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfSksXG4gICAgKExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9KSAtPlxuICAgICh0cnkgTGlzdC5mb3JfYWxsMiBfZmFzdF9lcSBsYSBsYiB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBmYWxzZSlcbiAgfCBfIC0+IGZhbHNlXG5cbigqKiBDYWxsIGEgcmVnaXN0ZXJlZCBwcmltaXRpdmUgYnkgbmFtZS5cbiAgICBGYXN0IHBhdGggZm9yIGhvdCBkaXNwYXRjaCBwcmltaXRpdmVzIChbPV0sIFs8XSwgWz5dLCBbPD1dLCBbPj1dLCBbZW1wdHk/XSxcbiAgICBbZmlyc3RdLCBbcmVzdF0sIFtsZW5dKSBza2lwcyB0aGUgSGFzaHRibCBsb29rdXAgZW50aXJlbHkg4oCUIHRoZXNlIGFyZVxuICAgIGNhbGxlZCBtaWxsaW9ucyBvZiB0aW1lcyBpbiB0aGUgQ0VLIFtzdGVwX2NvbnRpbnVlXS9bc3RlcF9ldmFsXSBkaXNwYXRjaC4gKilcbmxldCBwcmltX2NhbGwgbmFtZSBhcmdzID1cbiAgKCogSG90IHBhdGg6IG1vc3QtZnJlcXVlbnRseS1jYWxsZWQgcHJpbWl0aXZlcyBieSBzdGVwX2NvbnRpbnVlIGRpc3BhdGNoICopXG4gIG1hdGNoIG5hbWUsIGFyZ3Mgd2l0aFxuICB8IFwiPVwiLCBbYTsgYl0gLT4gQm9vbCAoX2Zhc3RfZXEgYSBiKVxuICB8IFwiZW1wdHk/XCIsIFtMaXN0IFtdXSAtPiBCb29sIHRydWVcbiAgfCBcImVtcHR5P1wiLCBbTGlzdCBfXSAtPiBCb29sIGZhbHNlXG4gIHwgXCJlbXB0eT9cIiwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IEJvb2wgdHJ1ZVxuICB8IFwiZW1wdHk/XCIsIFtMaXN0UmVmIF9dIC0+IEJvb2wgZmFsc2VcbiAgfCBcImVtcHR5P1wiLCBbTmlsXSAtPiBCb29sIHRydWVcbiAgfCBcImZpcnN0XCIsIFtMaXN0ICh4IDo6IF8pXSAtPiB4XG4gIHwgXCJmaXJzdFwiLCBbTGlzdCBbXV0gLT4gTmlsXG4gIHwgXCJmaXJzdFwiLCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gKHggOjogXykgfV0gLT4geFxuICB8IFwiZmlyc3RcIiwgW0xpc3RSZWYgX10gLT4gTmlsXG4gIHwgXCJmaXJzdFwiLCBbTmlsXSAtPiBOaWxcbiAgfCBcInJlc3RcIiwgW0xpc3QgKF8gOjogeHMpXSAtPiBMaXN0IHhzXG4gIHwgXCJyZXN0XCIsIFtMaXN0IFtdXSAtPiBMaXN0IFtdXG4gIHwgXCJyZXN0XCIsIFtMaXN0UmVmIHsgY29udGVudHMgPSAoXyA6OiB4cykgfV0gLT4gTGlzdCB4c1xuICB8IFwicmVzdFwiLCBbTGlzdFJlZiBfXSAtPiBMaXN0IFtdXG4gIHwgXCJyZXN0XCIsIFtOaWxdIC0+IExpc3QgW11cbiAgfCBcImxlblwiLCBbTGlzdCBsXSAtPiBJbnRlZ2VyIChMaXN0Lmxlbmd0aCBsKVxuICB8IFwibGVuXCIsIFtMaXN0UmVmIHJdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoICFyKVxuICB8IFwibGVuXCIsIFtTdHJpbmcgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICB8IFwibGVuXCIsIFtOaWxdIC0+IEludGVnZXIgMFxuICB8IFwiPFwiLCBbSW50ZWdlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPCB5KVxuICB8IFwiPFwiLCBbTnVtYmVyIHg7IE51bWJlciB5XSAtPiBCb29sICh4IDwgeSlcbiAgfCBcIjxcIiwgW0ludGVnZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKGZsb2F0X29mX2ludCB4IDwgeSlcbiAgfCBcIjxcIiwgW051bWJlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPCBmbG9hdF9vZl9pbnQgeSlcbiAgfCBcIj5cIiwgW0ludGVnZXIgeDsgSW50ZWdlciB5XSAtPiBCb29sICh4ID4geSlcbiAgfCBcIj5cIiwgW051bWJlciB4OyBOdW1iZXIgeV0gLT4gQm9vbCAoeCA+IHkpXG4gIHwgXCI+XCIsIFtJbnRlZ2VyIHg7IE51bWJlciB5XSAtPiBCb29sIChmbG9hdF9vZl9pbnQgeCA+IHkpXG4gIHwgXCI+XCIsIFtOdW1iZXIgeDsgSW50ZWdlciB5XSAtPiBCb29sICh4ID4gZmxvYXRfb2ZfaW50IHkpXG4gIHwgXCI8PVwiLCBbSW50ZWdlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPD0geSlcbiAgfCBcIjw9XCIsIFtOdW1iZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKHggPD0geSlcbiAgfCBcIjw9XCIsIFtJbnRlZ2VyIHg7IE51bWJlciB5XSAtPiBCb29sIChmbG9hdF9vZl9pbnQgeCA8PSB5KVxuICB8IFwiPD1cIiwgW051bWJlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPD0gZmxvYXRfb2ZfaW50IHkpXG4gIHwgXCI+PVwiLCBbSW50ZWdlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPj0geSlcbiAgfCBcIj49XCIsIFtOdW1iZXIgeDsgTnVtYmVyIHldIC0+IEJvb2wgKHggPj0geSlcbiAgfCBcIj49XCIsIFtJbnRlZ2VyIHg7IE51bWJlciB5XSAtPiBCb29sIChmbG9hdF9vZl9pbnQgeCA+PSB5KVxuICB8IFwiPj1cIiwgW051bWJlciB4OyBJbnRlZ2VyIHldIC0+IEJvb2wgKHggPj0gZmxvYXRfb2ZfaW50IHkpXG4gIHwgXyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgIHwgU29tZSBmIC0+IGYgYXJnc1xuICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJVbmtub3duIHByaW1pdGl2ZTogXCIgXiBuYW1lKSlcblxuKCoqIENvbnZlcnQgYW55IFNYIHZhbHVlIHRvIGFuIE9DYW1sIHN0cmluZyAoaW50ZXJuYWwpLiAqKVxubGV0IHZhbHVlX3RvX3N0ciA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IE51bWJlciBuIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCJcbiAgfCBTeW1ib2wgcyAtPiBzXG4gIHwgS2V5d29yZCBrIC0+IGtcbiAgfCB2IC0+IGluc3BlY3QgdlxuXG4oKiogc3hfdG9fc3RyaW5nIHJldHVybnMgYSB2YWx1ZSAoU3RyaW5nKSBmb3IgdHJhbnNwaWxlZCBjb2RlLiAqKVxubGV0IHN4X3RvX3N0cmluZyB2ID0gU3RyaW5nICh2YWx1ZV90b19zdHIgdilcblxuKCoqIFN0cmluZyBjb25jYXRlbmF0aW9uIGhlbHBlciDigJQgW3N4X3N0cl0gdGFrZXMgYSBsaXN0IG9mIHZhbHVlcy4gKilcbmxldCBzeF9zdHIgYXJncyA9XG4gIFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgdmFsdWVfdG9fc3RyIGFyZ3MpXG5cbigqKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBsaXN0LiAqKVxubGV0IHN4X3RvX2xpc3QgPSBmdW5jdGlvblxuICB8IExpc3QgbCAtPiBsXG4gIHwgTGlzdFJlZiByIC0+ICFyXG4gIHwgTmlsIC0+IFtdXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsaXN0LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG4oKiogQ2FsbCBhbiBTWCBjYWxsYWJsZSAobGFtYmRhLCBuYXRpdmUgZm4sIGNvbnRpbnVhdGlvbikuICopXG5sZXQgc3hfY2FsbCBmIGFyZ3MgPVxuICBtYXRjaCBmIHdpdGhcbiAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgfCBWbUNsb3N1cmUgY2wgLT4gIVN4X3R5cGVzLl92bV9jYWxsX2Nsb3N1cmVfcmVmIGNsIGFyZ3NcbiAgfCBMYW1iZGEgXyAtPlxuICAgICFTeF90eXBlcy5fY2VrX2V2YWxfbGFtYmRhX3JlZiBmIGFyZ3NcbiAgfCBDb250aW51YXRpb24gKGssIF8pIC0+XG4gICAgayAobWF0Y2ggYXJncyB3aXRoIHggOjogXyAtPiB4IHwgW10gLT4gTmlsKVxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiAoXywgXykgLT5cbiAgICByYWlzZSAoRXZhbF9lcnJvciBcImNhbGxjYyBjb250aW51YXRpb25zIG11c3QgYmUgaW52b2tlZCB0aHJvdWdoIHRoZSBDRUsgbWFjaGluZVwiKVxuICB8IF8gLT5cbiAgICBsZXQgbmFyZ3MgPSBMaXN0Lmxlbmd0aCBhcmdzIGluXG4gICAgbGV0IGFyZ3NfcHJldmlldyA9IGlmIG5hcmdzID0gMCB0aGVuIFwiXCIgZWxzZVxuICAgICAgbGV0IHMgPSBTdHJpbmcuY29uY2F0IFwiLCBcIiAoTGlzdC5tYXAgKGZ1biBhIC0+IGxldCBzID0gaW5zcGVjdCBhIGluIGlmIFN0cmluZy5sZW5ndGggcyA+IDQwIHRoZW4gU3RyaW5nLnN1YiBzIDAgNDAgXiBcIi4uXCIgZWxzZSBzKSBhcmdzKSBpblxuICAgICAgXCIgd2l0aCBhcmdzPVtcIiBeIHMgXiBcIl1cIiBpblxuICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIk5vdCBjYWxsYWJsZTogXCIgXiBpbnNwZWN0IGYgXiBhcmdzX3ByZXZpZXcpKVxuXG4oKiBJbml0aWFsaXplIGZvcndhcmQgcmVmIHNvIHByaW1pdGl2ZXMgY2FuIGNhbGwgU1ggZnVuY3Rpb25zICopXG5sZXQgKCkgPSBTeF9wcmltaXRpdmVzLl9zeF9jYWxsX2ZuIDo9IHN4X2NhbGxcbigqIFRyYW1wb2xpbmUgcmVmIGlzIHNldCBieSBzeF9yZWYubWwgYWZ0ZXIgaXQncyBsb2FkZWQgKilcblxuKCoqIEFwcGx5IGEgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGFyZ3MuICopXG5sZXQgc3hfYXBwbHkgZiBhcmdzX2xpc3QgPVxuICBzeF9jYWxsIGYgKHN4X3RvX2xpc3QgYXJnc19saXN0KVxuXG4oKiogQ0VLLXNhZmUgYXBwbHkg4oCUIGNhdGNoZXMgRXZhbF9lcnJvciBmcm9tIG5hdGl2ZSBmbnMgYW5kIHJldHVybnMgYW4gZXJyb3JcbiAgICBtYXJrZXIgZGljdCBpbnN0ZWFkIG9mIHJhaXNpbmcuICBUaGUgQ0VLIGV2YWx1YXRvciBjaGVja3MgZm9yIHRoaXMgYW5kXG4gICAgY29udmVydHMgdG8gYSByYWlzZS1ldmFsIHN0YXRlIHNvIGd1YXJkL2hhbmRsZXItYmluZCBjYW4gaW50ZXJjZXB0IGl0LlxuICAgIE5vbi1uYXRpdmUgY2FsbHMgKGxhbWJkYSwgY29udGludWF0aW9uKSBkZWxlZ2F0ZSB0byBzeF9hcHBseSB1bmNoYW5nZWQuICopXG5sZXQgc3hfYXBwbHlfY2VrIGYgYXJnc19saXN0ID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgTmF0aXZlRm4gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgKHRyeSBzeF9hcHBseSBmIGFyZ3NfbGlzdFxuICAgICB3aXRoXG4gICAgIHwgQ2VrUGVyZm9ybVJlcXVlc3QgXyBhcyBlIC0+IHJhaXNlIGVcbiAgICAgfCBleG4gLT5cbiAgICAgICAoKiBDaGVjayBpZiB0aGlzIGlzIGEgVk0gc3VzcGVuc2lvbiDigJQgcmV0dXJuIG1hcmtlciBkaWN0IHNvXG4gICAgICAgICAgY29udGludWVfd2l0aF9jYWxsIGNhbiBidWlsZCBhIHByb3BlciBzdXNwZW5kZWQgQ0VLIHN0YXRlXG4gICAgICAgICAgd2l0aCB2bS1yZXN1bWUtZnJhbWUgb24gdGhlIGtvbnQuICopXG4gICAgICAgKG1hdGNoICFfdm1fc3VzcGVuc2lvbl90b19kaWN0IGV4biB3aXRoXG4gICAgICAgIHwgU29tZSBtYXJrZXIgLT4gbWFya2VyXG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIChtYXRjaCBleG4gd2l0aFxuICAgICAgICAgICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAzIGluXG4gICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2V2YWxfZXJyb3JfX1wiIChCb29sIHRydWUpO1xuICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibWVzc2FnZVwiIChTdHJpbmcgbXNnKTtcbiAgICAgICAgICAgICBEaWN0IGRcbiAgICAgICAgICAgfCBfIC0+IHJhaXNlIGV4bikpKVxuICB8IF8gLT4gc3hfYXBwbHkgZiBhcmdzX2xpc3RcblxuKCoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gZXZhbC1lcnJvciBtYXJrZXIgZnJvbSBzeF9hcHBseV9jZWsuICopXG5sZXQgaXNfZXZhbF9lcnJvciB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX2V2YWxfZXJyb3JfX1wiIHdpdGhcbiAgICB8IFNvbWUgKEJvb2wgdHJ1ZSkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpXG4gIHwgXyAtPiBmYWxzZVxuXG4oKiogTXV0YWJsZSBhcHBlbmQg4oCUIGFkZCBpdGVtIHRvIGEgbGlzdCByZWYgb3IgYWNjdW11bGF0b3IuXG4gICAgSW4gdHJhbnNwaWxlZCBjb2RlLCBsaXN0cyB0aGF0IGdldCBhcHBlbmRlZCB0byBhcmUgbXV0YWJsZSByZWZzLiAqKVxubGV0IHN4X2FwcGVuZF9iIGxzdCBpdGVtID1cbiAgbWF0Y2ggbHN0IHdpdGhcbiAgfCBMaXN0IGl0ZW1zIC0+IExpc3QgKGl0ZW1zIEAgW2l0ZW1dKVxuICB8IExpc3RSZWYgciAtPiByIDo9ICFyIEAgW2l0ZW1dOyBsc3QgICgqIG11dGF0ZSBpbiBwbGFjZSwgcmV0dXJuIHNhbWUgcmVmICopXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJhcHBlbmQhOiBleHBlY3RlZCBsaXN0LCBnb3QgXCIgXiB0eXBlX29mIGxzdCkpXG5cbigqKiBNdXRhYmxlIGRpY3Qtc2V0IOKAlCBzZXQga2V5IGluIGRpY3QsIHJldHVybiB2YWx1ZS4gKilcbmxldCBzeF9kaWN0X3NldF9iIGQgayB2ID1cbiAgbWF0Y2ggZCwgayB3aXRoXG4gIHwgRGljdCB0YmwsIFN0cmluZyBrZXkgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrZXkgdjsgdlxuICB8IERpY3QgdGJsLCBLZXl3b3JkIGtleSAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGtleSB2OyB2XG4gIHwgQ2VrRnJhbWUgZiwgU3RyaW5nIGtleSAtPlxuICAgIChtYXRjaCBrZXkgd2l0aFxuICAgICB8IFwidmFsdWVcIiB8IFwiZXh0cmFcIiB8IFwiaG8tdHlwZVwiIHwgXCJzY2hlbWVcIiB8IFwiaW5kZXhlZFwiXG4gICAgIHwgXCJwaGFzZVwiIHwgXCJoYXMtZWZmZWN0c1wiIHwgXCJtYXRjaC12YWxcIiB8IFwiY3VycmVudC1pdGVtXCJcbiAgICAgfCBcInVwZGF0ZS1mblwiIHwgXCJoZWFkLW5hbWVcIiAtPiBmLmNmX2V4dHJhIDwtIHY7IHZcbiAgICAgfCBcInJlbWFpbmluZ1wiIC0+IGYuY2ZfcmVtYWluaW5nIDwtIHY7IHZcbiAgICAgfCBcInN1YnNjcmliZXJzXCIgfCBcInJlc3VsdHNcIiB8IFwicmF3LWFyZ3NcIiAtPiBmLmNmX3Jlc3VsdHMgPC0gdjsgdlxuICAgICB8IFwiZW1pdHRlZFwiIHwgXCJlZmZlY3QtbGlzdFwiIHwgXCJmaXJzdC1yZW5kZXJcIiB8IFwiZXh0cmEyXCIgLT4gZi5jZl9leHRyYTIgPC0gdjsgdlxuICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiZGljdC1zZXQhIGNlay1mcmFtZTogdW5rbm93biBmaWVsZCBcIiBeIGtleSkpKVxuICB8IFZtRnJhbWUgZiwgU3RyaW5nIGtleSAtPlxuICAgIChtYXRjaCBrZXkgd2l0aFxuICAgICB8IFwiaXBcIiAtPiBmLnZmX2lwIDwtIHZhbF90b19pbnQgdjsgdlxuICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiZGljdC1zZXQhIHZtLWZyYW1lOiB1bmtub3duIGZpZWxkIFwiIF4ga2V5KSkpXG4gIHwgVm1NYWNoaW5lIG0sIFN0cmluZyBrZXkgLT5cbiAgICAobWF0Y2gga2V5IHdpdGhcbiAgICAgfCBcInNwXCIgLT4gbS52bV9zcCA8LSB2YWxfdG9faW50IHY7IHZcbiAgICAgfCBcImZyYW1lc1wiIC0+IG0udm1fZnJhbWVzIDwtIChtYXRjaCB2IHdpdGggTGlzdCBsIC0+IExpc3QubWFwIChmdW4geCAtPiBtYXRjaCB4IHdpdGggVm1GcmFtZSBmIC0+IGYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm06IGZyYW1lcyBtdXN0IGJlIHZtLWZyYW1lIGxpc3RcIikpIGwgfCBfIC0+IFtdKTsgdlxuICAgICB8IFwic3RhY2tcIiAtPiAobWF0Y2ggdiB3aXRoIExpc3QgXyAtPiB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtOiBzdGFjayBtdXN0IGJlIGFycmF5XCIpKVxuICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiZGljdC1zZXQhIHZtLW1hY2hpbmU6IHVua25vd24gZmllbGQgXCIgXiBrZXkpKSlcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1zZXQhOiBleHBlY3RlZCBkaWN0IGFuZCBzdHJpbmcga2V5XCIpXG5cbigqKiBHZXQgZnJvbSBkaWN0IG9yIGxpc3QuICopXG5sZXQgZ2V0X3ZhbCBjb250YWluZXIga2V5ID1cbiAgbWF0Y2ggY29udGFpbmVyLCBrZXkgd2l0aFxuICB8IENla1N0YXRlIHMsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwiY29udHJvbFwiIC0+IHMuY3NfY29udHJvbCB8IFwiZW52XCIgLT4gcy5jc19lbnZcbiAgICAgfCBcImtvbnRcIiAtPiBzLmNzX2tvbnQgfCBcInBoYXNlXCIgLT4gU3RyaW5nIHMuY3NfcGhhc2VcbiAgICAgfCBcInZhbHVlXCIgLT4gcy5jc192YWx1ZSB8IF8gLT4gTmlsKVxuICB8IENla0ZyYW1lIGYsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwidHlwZVwiIC0+IFN0cmluZyBmLmNmX3R5cGUgfCBcImVudlwiIC0+IGYuY2ZfZW52XG4gICAgIHwgXCJuYW1lXCIgLT4gZi5jZl9uYW1lIHwgXCJib2R5XCIgLT4gZi5jZl9ib2R5XG4gICAgIHwgXCJyZW1haW5pbmdcIiAtPiBmLmNmX3JlbWFpbmluZyB8IFwiZlwiIC0+IGYuY2ZfZlxuICAgICB8IFwiYXJnc1wiIC0+IGYuY2ZfYXJncyB8IFwiZXZhbGVkXCIgLT4gZi5jZl9hcmdzXG4gICAgIHwgXCJyZXN1bHRzXCIgLT4gZi5jZl9yZXN1bHRzIHwgXCJyYXctYXJnc1wiIC0+IGYuY2ZfcmVzdWx0c1xuICAgICB8IFwidGhlblwiIC0+IGYuY2ZfYm9keSB8IFwiZWxzZVwiIC0+IGYuY2ZfbmFtZVxuICAgICB8IFwiaG8tdHlwZVwiIC0+IGYuY2ZfZXh0cmEgfCBcInNjaGVtZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcImluZGV4ZWRcIiAtPiBmLmNmX2V4dHJhIHwgXCJ2YWx1ZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcInBoYXNlXCIgLT4gZi5jZl9leHRyYSB8IFwiaGFzLWVmZmVjdHNcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJtYXRjaC12YWxcIiAtPiBmLmNmX2V4dHJhIHwgXCJjdXJyZW50LWl0ZW1cIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJ1cGRhdGUtZm5cIiAtPiBmLmNmX2V4dHJhIHwgXCJoZWFkLW5hbWVcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJlbWl0dGVkXCIgLT4gZi5jZl9leHRyYTIgfCBcImVmZmVjdC1saXN0XCIgLT4gZi5jZl9leHRyYTJcbiAgICAgfCBcImZpcnN0LXJlbmRlclwiIC0+IGYuY2ZfZXh0cmEyIHwgXCJmaWxlXCIgLT4gZi5jZl9lbnZcbiAgICAgfCBcImV4dHJhXCIgLT4gZi5jZl9leHRyYSB8IFwiZXh0cmEyXCIgLT4gZi5jZl9leHRyYTJcbiAgICAgfCBcInN1YnNjcmliZXJzXCIgLT4gZi5jZl9yZXN1bHRzXG4gICAgIHwgXCJwcmV2LXRyYWNraW5nXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwiYWZ0ZXItdGh1bmtcIiAtPiBmLmNmX2YgICAgICAgICgqIHdpbmQtYWZ0ZXIgZnJhbWUgKilcbiAgICAgfCBcIndpbmRlcnMtbGVuXCIgLT4gZi5jZl9leHRyYSAgICAoKiB3aW5kLWFmdGVyIGZyYW1lICopXG4gICAgIHwgXCJib2R5LXJlc3VsdFwiIC0+IGYuY2ZfbmFtZSAgICAgKCogd2luZC1yZXR1cm4gZnJhbWUgKilcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBWbUZyYW1lIGYsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwiaXBcIiAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBmLnZmX2lwKVxuICAgICB8IFwiY2xvc3VyZVwiIC0+IFZtQ2xvc3VyZSBmLnZmX2Nsb3N1cmVcbiAgICAgfCBcImJhc2VcIiAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBmLnZmX2Jhc2UpXG4gICAgIHwgXCJsb2NhbC1jZWxsc1wiIC0+IE5pbCAgKCogb3BhcXVlIOKAlCBhY2Nlc3NlZCB2aWEgZnJhbWUtbG9jYWwtZ2V0L3NldCAqKVxuICAgICB8IF8gLT4gTmlsKVxuICB8IFZtTWFjaGluZSBtLCBTdHJpbmcgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcInNwXCIgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbS52bV9zcClcbiAgICAgfCBcInN0YWNrXCIgLT4gTmlsICAoKiBvcGFxdWUg4oCUIGFjY2Vzc2VkIHZpYSB2bS1wdXNoL3BvcCAqKVxuICAgICB8IFwiZnJhbWVzXCIgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBmIC0+IFZtRnJhbWUgZikgbS52bV9mcmFtZXMpXG4gICAgIHwgXCJnbG9iYWxzXCIgLT4gRGljdCBtLnZtX2dsb2JhbHNcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBWbUNsb3N1cmUgY2wsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwidm0tY29kZVwiIC0+XG4gICAgICAgKCogUmV0dXJuIHZtX2NvZGUgZmllbGRzIGFzIGEgRGljdC4gIFRoZSBieXRlY29kZSBhbmQgY29uc3RhbnRzIGFycmF5c1xuICAgICAgICAgIGFyZSBsYXppbHkgY29udmVydGVkIHRvIExpc3RzIGFuZCBjYWNoZWQgb24gdGhlIHZtX2NvZGUgcmVjb3JkIHNvXG4gICAgICAgICAgdGhlIHRyYW5zcGlsZWQgVk0gbG9vcCAod2hpY2ggcmUtZGVyaXZlcyBiYy9jb25zdHMgZWFjaCBpdGVyYXRpb24pXG4gICAgICAgICAgZG9lc24ndCBhbGxvY2F0ZSBvbiBldmVyeSBzdGVwLiAqKVxuICAgICAgIGxldCBjID0gY2wudm1fY29kZSBpblxuICAgICAgIGxldCBiYyA9IG1hdGNoIGMudmNfYnl0ZWNvZGVfbGlzdCB3aXRoXG4gICAgICAgICB8IFNvbWUgbCAtPiBsXG4gICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgbGV0IGwgPSBBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biBpIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpKSBjLnZjX2J5dGVjb2RlKSBpblxuICAgICAgICAgICBjLnZjX2J5dGVjb2RlX2xpc3QgPC0gU29tZSBsOyBsIGluXG4gICAgICAgbGV0IGNvbnN0cyA9IG1hdGNoIGMudmNfY29uc3RhbnRzX2xpc3Qgd2l0aFxuICAgICAgICAgfCBTb21lIGwgLT4gbFxuICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgIGxldCBsID0gQXJyYXkudG9fbGlzdCBjLnZjX2NvbnN0YW50cyBpblxuICAgICAgICAgICBjLnZjX2NvbnN0YW50c19saXN0IDwtIFNvbWUgbDsgbCBpblxuICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtYnl0ZWNvZGVcIiAoTGlzdCBiYyk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1jb25zdGFudHNcIiAoTGlzdCBjb25zdHMpO1xuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtYXJpdHlcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgYy52Y19hcml0eSkpO1xuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtcmVzdC1hcml0eVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjLnZjX3Jlc3RfYXJpdHkpKTtcbiAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWxvY2Fsc1wiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjLnZjX2xvY2FscykpO1xuICAgICAgIERpY3QgZFxuICAgICB8IFwidm0tdXB2YWx1ZXNcIiAtPlxuICAgICAgIExpc3QgKEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIHV2IC0+IHV2LnV2X3ZhbHVlKSBjbC52bV91cHZhbHVlcykpXG4gICAgIHwgXCJ2bS1uYW1lXCIgLT5cbiAgICAgICAobWF0Y2ggY2wudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBTdHJpbmcgbiB8IE5vbmUgLT4gTmlsKVxuICAgICB8IFwidm0tZ2xvYmFsc1wiIC0+IERpY3QgY2wudm1fZW52X3JlZlxuICAgICB8IFwidm0tY2xvc3VyZS1lbnZcIiAtPlxuICAgICAgIChtYXRjaCBjbC52bV9jbG9zdXJlX2VudiB3aXRoIFNvbWUgZSAtPiBFbnYgZSB8IE5vbmUgLT4gTmlsKVxuICAgICB8IF8gLT4gTmlsKVxuICB8IERpY3QgZCwgU3RyaW5nIGsgLT4gZGljdF9nZXQgZCBrXG4gIHwgRGljdCBkLCBLZXl3b3JkIGsgLT4gZGljdF9nZXQgZCBrXG4gIHwgQWR0VmFsdWUgYSwgU3RyaW5nIGsgfCBBZHRWYWx1ZSBhLCBLZXl3b3JkIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJfYWR0XCIgICAgLT4gQm9vbCB0cnVlXG4gICAgIHwgXCJfdHlwZVwiICAgLT4gU3RyaW5nIGEuYXZfdHlwZVxuICAgICB8IFwiX2N0b3JcIiAgIC0+IFN0cmluZyBhLmF2X2N0b3JcbiAgICAgfCBcIl9maWVsZHNcIiAtPiBMaXN0IChBcnJheS50b19saXN0IGEuYXZfZmllbGRzKVxuICAgICB8IF8gICAgICAgICAtPiBOaWwpXG4gIHwgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSksIE51bWJlciBuIC0+XG4gICAgKHRyeSBMaXN0Lm50aCBsIChpbnRfb2ZfZmxvYXQgbikgd2l0aCBfIC0+IE5pbClcbiAgfCAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSwgSW50ZWdlciBuIC0+XG4gICAgKHRyeSBMaXN0Lm50aCBsIG4gd2l0aCBfIC0+IE5pbClcbiAgfCBOaWwsIF8gLT4gTmlsICAoKiBuaWwuYW55dGhpbmcg4oaSIG5pbCAqKVxuICB8IF8sIF8gLT4gTmlsICAgICgqIHR5cGUgbWlzbWF0Y2gg4oaSIG5pbCAobWF0Y2hlcyBKUy9QeXRob24gYmVoYXZpb3IpICopXG5cbigqKiBSZWdpc3RlciBnZXQgYXMgYSBwcmltaXRpdmUgb3ZlcnJpZGUg4oCUIHRyYW5zcGlsZWQgY29kZSBjYWxscyAoZ2V0IGQgaykuICopXG5sZXQgKCkgPVxuICBTeF9wcmltaXRpdmVzLnJlZ2lzdGVyIFwiZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYzsga10gLT4gZ2V0X3ZhbCBjIGtcbiAgICB8IFtjOyBrOyBkZWZhdWx0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgdiA9IGdldF92YWwgYyBrIGluXG4gICAgICAgIGlmIHYgPSBOaWwgdGhlbiBkZWZhdWx0IGVsc2UgdlxuICAgICAgd2l0aCBfIC0+IGRlZmF1bHQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZ2V0OiAyLTMgYXJnc1wiKSlcblxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQcmltaXRpdmUgYWxpYXNlcyDigJQgdG9wLWxldmVsIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdHJhbnNwaWxlZCBjb2RlICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqKiBUaGUgdHJhbnNwaWxlZCBldmFsdWF0b3IgY2FsbHMgcHJpbWl0aXZlcyBkaXJlY3RseSBieSB0aGVpciBtYW5nbGVkXG4gICAgT0NhbWwgbmFtZS4gVGhlc2UgYWxpYXNlcyBkZWxlZ2F0ZSB0byB0aGUgcHJpbWl0aXZlcyB0YWJsZSBzbyB0aGVcbiAgICB0cmFuc3BpbGVkIGNvZGUgY29tcGlsZXMgd2l0aG91dCBuZWVkaW5nIFtwcmltX2NhbGxdIGV2ZXJ5d2hlcmUuICopXG5cbmxldCBfcHJpbSBuYW1lID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmIC0+IGYgfCBOb25lIC0+IChmdW4gXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJNaXNzaW5nIHByaW06IFwiIF4gbmFtZSkpKVxuXG4oKiBDb2xsZWN0aW9uIG9wcyAqKVxubGV0IGZpcnN0IGFyZ3MgPSBfcHJpbSBcImZpcnN0XCIgW2FyZ3NdXG5sZXQgcmVzdCBhcmdzID0gX3ByaW0gXCJyZXN0XCIgW2FyZ3NdXG5sZXQgbGFzdCBhcmdzID0gX3ByaW0gXCJsYXN0XCIgW2FyZ3NdXG5sZXQgbnRoIGNvbGwgaSA9IF9wcmltIFwibnRoXCIgW2NvbGw7IGldXG5sZXQgY29ucyB4IGwgPSBfcHJpbSBcImNvbnNcIiBbeDsgbF1cbmxldCBhcHBlbmQgYSBiID0gX3ByaW0gXCJhcHBlbmRcIiBbYTsgYl1cbmxldCByZXZlcnNlIGwgPSBfcHJpbSBcInJldmVyc2VcIiBbbF1cbmxldCBmbGF0dGVuIGwgPSBfcHJpbSBcImZsYXR0ZW5cIiBbbF1cbmxldCBjb25jYXQgYSBiID0gX3ByaW0gXCJjb25jYXRcIiBbYTsgYl1cbmxldCBzbGljZSBhIGIgPSBfcHJpbSBcInNsaWNlXCIgW2E7IGJdXG5sZXQgbGVuIGEgPSBfcHJpbSBcImxlblwiIFthXVxubGV0IGdldCBhIGIgPSBnZXRfdmFsIGEgYlxubGV0IHNvcnQnIGEgPSBfcHJpbSBcInNvcnRcIiBbYV1cbmxldCByYW5nZScgYSA9IF9wcmltIFwicmFuZ2VcIiBbYV1cbmxldCB1bmlxdWUgYSA9IF9wcmltIFwidW5pcXVlXCIgW2FdXG5sZXQgemlwIGEgYiA9IF9wcmltIFwiemlwXCIgW2E7IGJdXG5sZXQgdGFrZSBhIGIgPSBfcHJpbSBcInRha2VcIiBbYTsgYl1cbmxldCBkcm9wIGEgYiA9IF9wcmltIFwiZHJvcFwiIFthOyBiXVxuXG4oKiBQcmVkaWNhdGVzICopXG5sZXQga2V5d29yZF9wIGEgPSBfcHJpbSBcImtleXdvcmQ/XCIgW2FdXG5sZXQgZW1wdHlfcCBhID0gX3ByaW0gXCJlbXB0eT9cIiBbYV1cbmxldCBudW1iZXJfcCBhID0gX3ByaW0gXCJudW1iZXI/XCIgW2FdXG5sZXQgc3RyaW5nX3AgYSA9IF9wcmltIFwic3RyaW5nP1wiIFthXVxubGV0IGJvb2xlYW5fcCBhID0gX3ByaW0gXCJib29sZWFuP1wiIFthXVxubGV0IGxpc3RfcCBhID0gX3ByaW0gXCJsaXN0P1wiIFthXVxubGV0IGRpY3RfcCBhID0gX3ByaW0gXCJkaWN0P1wiIFthXVxubGV0IHN5bWJvbF9wIGEgPSBfcHJpbSBcInN5bWJvbD9cIiBbYV1cblxuKCogU3RyaW5nIG9wcyAqKVxubGV0IHN0cicgYXJncyA9IFN0cmluZyAoc3hfc3RyIGFyZ3MpXG5sZXQgdXBwZXIgYSA9IF9wcmltIFwidXBwZXJcIiBbYV1cbmxldCB1cGNhc2UgYSA9IF9wcmltIFwidXBjYXNlXCIgW2FdXG5sZXQgbG93ZXIgYSA9IF9wcmltIFwibG93ZXJcIiBbYV1cbmxldCBkb3duY2FzZSBhID0gX3ByaW0gXCJkb3duY2FzZVwiIFthXVxubGV0IHRyaW0gYSA9IF9wcmltIFwidHJpbVwiIFthXVxubGV0IHNwbGl0IGEgYiA9IF9wcmltIFwic3BsaXRcIiBbYTsgYl1cbmxldCBqb2luIGEgYiA9IF9wcmltIFwiam9pblwiIFthOyBiXVxubGV0IHJlcGxhY2UgYSBiIGMgPSBfcHJpbSBcInJlcGxhY2VcIiBbYTsgYjsgY11cbmxldCBzdWJzdHJpbmcgYSBiIGMgPSBfcHJpbSBcInN1YnN0cmluZ1wiIFthOyBiOyBjXVxuXG4oKiBEaWN0IG9wcyAqKVxubGV0IGFzc29jIGQgayB2ID0gX3ByaW0gXCJhc3NvY1wiIFtkOyBrOyB2XVxubGV0IGRpc3NvYyBkIGsgPSBfcHJpbSBcImRpc3NvY1wiIFtkOyBrXVxubGV0IG1lcmdlJyBhIGIgPSBfcHJpbSBcIm1lcmdlXCIgW2E7IGJdXG5sZXQga2V5cyBhID0gX3ByaW0gXCJrZXlzXCIgW2FdXG5sZXQgdmFscyBhID0gX3ByaW0gXCJ2YWxzXCIgW2FdXG5sZXQgZGljdF9zZXQgYSBiIGMgPSBfcHJpbSBcImRpY3Qtc2V0IVwiIFthOyBiOyBjXVxubGV0IGRpY3RfZ2V0IGEgYiA9IF9wcmltIFwiZGljdC1nZXRcIiBbYTsgYl1cbmxldCBkaWN0X2RlbGV0ZSBhIGIgPSBfcHJpbSBcImRpY3QtZGVsZXRlIVwiIFthOyBiXVxuXG4oKiBNYXRoICopXG5sZXQgYWJzJyBhID0gX3ByaW0gXCJhYnNcIiBbYV1cbmxldCBzcXJ0JyBhID0gX3ByaW0gXCJzcXJ0XCIgW2FdXG5sZXQgcG93JyBhIGIgPSBfcHJpbSBcInBvd1wiIFthOyBiXVxubGV0IGZsb29yJyBhID0gX3ByaW0gXCJmbG9vclwiIFthXVxubGV0IGNlaWwnIGEgPSBfcHJpbSBcImNlaWxcIiBbYV1cbmxldCByb3VuZCcgYSA9IF9wcmltIFwicm91bmRcIiBbYV1cbmxldCBtaW4nIGEgYiA9IF9wcmltIFwibWluXCIgW2E7IGJdXG5sZXQgbWF4JyBhIGIgPSBfcHJpbSBcIm1heFwiIFthOyBiXVxubGV0IGNsYW1wIGEgYiBjID0gX3ByaW0gXCJjbGFtcFwiIFthOyBiOyBjXVxuXG4oKiBNaXNjICopXG5sZXQgZXJyb3IgbXNnID0gcmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciBtc2cpKVxuXG4oKiBpbnNwZWN0IHdyYXBwZXIg4oCUIHJldHVybnMgU3RyaW5nIHZhbHVlIGluc3RlYWQgb2YgT0NhbWwgc3RyaW5nICopXG5sZXQgaW5zcGVjdCB2ID0gU3RyaW5nIChTeF90eXBlcy5pbnNwZWN0IHYpXG5sZXQgYXBwbHknIGYgYXJncyA9IHN4X2FwcGx5IGYgYXJnc1xubGV0IHNwcmVhZF9hdHRycyBhID0gX3ByaW0gXCJzcHJlYWQtYXR0cnNcIiBbYV1cblxubGV0IHN4X2NvbnRleHQgYSBiID0gcHJpbV9jYWxsIFwiY29udGV4dFwiIFthOyBiXVxuXG4oKiBUcmFtcG9saW5lIOKAlCBmb3J3YXJkLWRlY2xhcmVkIGluIHN4X3JlZi5tbCwgZGVsZWdhdGVzIHRvIENFSyBldmFsX2V4cHIgKilcbigqIFRoaXMgaXMgYSBzdHViOyB0aGUgcmVhbCB0cmFtcG9saW5lIGlzIHdpcmVkIHVwIGluIHN4X3JlZi5tbCBhZnRlciBldmFsX2V4cHIgaXMgZGVmaW5lZCAqKVxubGV0IHRyYW1wb2xpbmUgdiA9IHZcblxuKCogVmFsdWUtcmV0dXJuaW5nIHR5cGUgcHJlZGljYXRlcyDigJQgdGhlIHRyYW5zcGlsZWQgY29kZSBwYXNzZXMgdGhlc2UgdGhyb3VnaFxuICAgc3hfdHJ1dGh5LCBzbyB0aGV5IG5lZWQgdG8gcmV0dXJuIEJvb2wsIG5vdCBPQ2FtbCBib29sLiAqKVxuKCogdHlwZV9vZiByZXR1cm5zIHZhbHVlLCBub3Qgc3RyaW5nICopXG5sZXQgdHlwZV9vZiB2ID0gU3RyaW5nIChTeF90eXBlcy50eXBlX29mIHYpXG5cbigqIEVudiBvcGVyYXRpb25zIOKAlCBhY2NlcHQgRW52LXdyYXBwZWQgdmFsdWVzIGFuZCB2YWx1ZSBrZXlzLlxuICAgVGhlIHRyYW5zcGlsZWQgQ0VLIG1hY2hpbmUgc3RvcmVzIGVudnMgaW4gZGljdHMgYXMgRW52IHZhbHVlcy4gKilcbmxldCB1bndyYXBfZW52ID0gZnVuY3Rpb25cbiAgfCBFbnYgZSAtPiBlXG4gIHwgRGljdCBkIC0+XG4gICAgKCogRGljdCB1c2VkIGFzIGVudiDigJQgd3JhcCBpdC4gTmVlZGVkIGJ5IGFkYXB0ZXItaHRtbC5zeCB3aGljaFxuICAgICAgIHBhc3NlcyBkaWN0cyBhcyBlbnYgYXJncyAoZS5nLiBlbXB0eSB7fSBhcyBjYWxsZXIgZW52KS4gKilcbiAgICBsZXQgZSA9IFN4X3R5cGVzLm1ha2VfZW52ICgpIGluXG4gICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlnbm9yZSAoU3hfdHlwZXMuZW52X2JpbmQgZSBrIHYpKSBkO1xuICAgIGVcbiAgfCBOaWwgLT5cbiAgICBTeF90eXBlcy5tYWtlX2VudiAoKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgZW52LCBnb3QgXCIgXiBTeF90eXBlcy50eXBlX29mIHYpKVxuXG5sZXQgZW52X2hhcyBlIG5hbWUgPSBCb29sIChTeF90eXBlcy5lbnZfaGFzICh1bndyYXBfZW52IGUpICh2YWx1ZV90b19zdHIgbmFtZSkpXG5sZXQgZW52X2dldCBlIG5hbWUgPSBTeF90eXBlcy5lbnZfZ2V0ICh1bndyYXBfZW52IGUpICh2YWx1ZV90b19zdHIgbmFtZSlcbmxldCBlbnZfYmluZCBlIG5hbWUgdiA9IFN4X3R5cGVzLmVudl9iaW5kICh1bndyYXBfZW52IGUpICh2YWx1ZV90b19zdHIgbmFtZSkgdlxubGV0IGVudl9zZXQgZSBuYW1lIHYgPSBTeF90eXBlcy5lbnZfc2V0ICh1bndyYXBfZW52IGUpICh2YWx1ZV90b19zdHIgbmFtZSkgdlxuXG5sZXQgbWFrZV9lbnYgKCkgPSBFbnYgKFN4X3R5cGVzLm1ha2VfZW52ICgpKVxubGV0IGVudl9leHRlbmQgZSA9IEVudiAoU3hfdHlwZXMuZW52X2V4dGVuZCAodW53cmFwX2VudiBlKSlcbmxldCBlbnZfbWVyZ2UgYSBiID0gRW52IChTeF90eXBlcy5lbnZfbWVyZ2UgKHVud3JhcF9lbnYgYSkgKHVud3JhcF9lbnYgYikpXG5cbigqIHNldF9sYW1iZGFfbmFtZSB3cmFwcGVyIOKAlCBhY2NlcHRzIHZhbHVlLCBleHRyYWN0cyBzdHJpbmcgKilcbmxldCBzZXRfbGFtYmRhX25hbWUgbCBuID0gU3hfdHlwZXMuc2V0X2xhbWJkYV9uYW1lIGwgKHZhbHVlX3RvX3N0ciBuKVxuXG5sZXQgaXNfbmlsIHYgPSBCb29sIChTeF90eXBlcy5pc19uaWwgdilcbmxldCBpc190aHVuayB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfdGh1bmsgdilcbmxldCBpc19sYW1iZGEgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2xhbWJkYSB2KVxubGV0IGlzX2NvbXBvbmVudCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfY29tcG9uZW50IHYpXG5sZXQgaXNfaXNsYW5kIHYgPSBCb29sIChTeF90eXBlcy5pc19pc2xhbmQgdilcbmxldCBpc19tYWNybyB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfbWFjcm8gdilcbmxldCBpc19zaWduYWwgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX3NpZ25hbCB2KVxubGV0IGlzX2NhbGxhYmxlIHYgPSBCb29sIChTeF90eXBlcy5pc19jYWxsYWJsZSB2KVxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gQm9vbCAoU3hfcHJpbWl0aXZlcy5pc19wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKSlcbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKVxuXG4oKiBTdHVicyBmb3IgZnVuY3Rpb25zIGRlZmluZWQgaW4gc3hfcmVmLm1sIOKAlCByZXNvbHZlZCBhdCBsaW5rIHRpbWUgKilcbigqIFRoZXNlIGFyZSBmb3J3YXJkLWRlY2xhcmVkIGhlcmU7IHN4X3JlZi5tbCBkZWZpbmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb25zICopXG5cbigqIHN0cmlwLXByZWZpeCAqKVxuKCogU3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMg4oCUIGRlZmluZWQgaW4gc3hfcmVmLm1sIGJ1dFxuICAgc29tZXRpbWVzIHJlZmVyZW5jZWQgYmVmb3JlIHRoZWlyIGRlZmluaXRpb24gdmlhIGZvcndhcmQgY2FsbHMuXG4gICBUaGVzZSBnZXQgb3ZlcnJpZGRlbiBieSB0aGUgYWN0dWFsIHRyYW5zcGlsZWQgZGVmaW5pdGlvbnMuICopXG5cbmxldCBmb3JfZWFjaF9pbmRleGVkIGZuIGNvbGwgPVxuICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoc3hfY2FsbCBmbiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgKHN4X3RvX2xpc3QgY29sbCk7XG4gIE5pbFxuXG4oKiBDb250aW51YXRpb24gc3VwcG9ydCAqKVxubGV0IGNvbnRpbnVhdGlvbl9wIHYgPSBtYXRjaCB2IHdpdGggQ29udGludWF0aW9uIChfLCBfKSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxubGV0IG1ha2VfY2VrX2NvbnRpbnVhdGlvbiBjYXB0dXJlZCByZXN0X2tvbnQgPVxuICBsZXQgZGF0YSA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGRhdGEgXCJjYXB0dXJlZFwiIGNhcHR1cmVkO1xuICBIYXNodGJsLnJlcGxhY2UgZGF0YSBcInJlc3Qta29udFwiIHJlc3Rfa29udDtcbiAgQ29udGludWF0aW9uICgoZnVuIHYgLT4gdiksIFNvbWUgZGF0YSlcblxubGV0IGNvbnRpbnVhdGlvbl9kYXRhIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBDb250aW51YXRpb24gKF8sIFNvbWUgZCkgLT4gRGljdCBkXG4gIHwgQ29udGludWF0aW9uIChfLCBOb25lKSAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBjb250aW51YXRpb25cIilcblxuKCogQ2FsbGNjICh1bmRlbGltaXRlZCkgY29udGludWF0aW9uIHN1cHBvcnQgKilcbmxldCBjYWxsY2NfY29udGludWF0aW9uX3AgdiA9IG1hdGNoIHYgd2l0aCBDYWxsY2NDb250aW51YXRpb24gKF8sIF8pIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxuXG5sZXQgbWFrZV9jYWxsY2NfY29udGludWF0aW9uIGNhcHR1cmVkIHdpbmRlcnNfbGVuID1cbiAgbGV0IG4gPSBtYXRjaCB3aW5kZXJzX2xlbiB3aXRoIE51bWJlciBmIC0+IGludF9vZl9mbG9hdCBmIHwgSW50ZWdlciBuIC0+IG4gfCBfIC0+IDAgaW5cbiAgQ2FsbGNjQ29udGludWF0aW9uIChzeF90b19saXN0IGNhcHR1cmVkLCBuKVxuXG5sZXQgY2FsbGNjX2NvbnRpbnVhdGlvbl9kYXRhIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBDYWxsY2NDb250aW51YXRpb24gKGZyYW1lcywgXykgLT4gTGlzdCBmcmFtZXNcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgY2FsbGNjIGNvbnRpbnVhdGlvblwiKVxuXG5sZXQgY2FsbGNjX2NvbnRpbnVhdGlvbl93aW5kZXJzX2xlbiB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBuKSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBuKVxuICB8IF8gLT4gTnVtYmVyIDAuMFxuXG4oKiBEeW5hbWljIHdpbmQg4oCUIHNpbXBsaWZpZWQgZm9yIE9DYW1sIChubyBhc3luYykgKilcbmxldCBob3N0X2Vycm9yIG1zZyA9XG4gIHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgbXNnKSlcblxubGV0IGhvc3Rfd2FybiBtc2cgPVxuICBwcmVycl9lbmRsaW5lICh2YWx1ZV90b19zdHIgbXNnKTtcbiAgTmlsXG5cbmxldCBkeW5hbWljX3dpbmRfY2FsbCBiZWZvcmUgYm9keSBhZnRlciBfZW52ID1cbiAgaWdub3JlIChzeF9jYWxsIGJlZm9yZSBbXSk7XG4gIGxldCByZXN1bHQgPSBzeF9jYWxsIGJvZHkgW10gaW5cbiAgaWdub3JlIChzeF9jYWxsIGFmdGVyIFtdKTtcbiAgcmVzdWx0XG5cbigqIFNjb3BlIHN0YWNrIOKAlCBhbGwgZGVsZWdhdGVkIHRvIHByaW1pdGl2ZXMgcmVnaXN0ZXJlZCBpbiBzeF9zZXJ2ZXIubWwgKilcbmxldCBzY29wZV9wdXNoIG5hbWUgdmFsdWUgPSBwcmltX2NhbGwgXCJzY29wZS1wdXNoIVwiIFtuYW1lOyB2YWx1ZV1cbmxldCBzY29wZV9wb3AgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLXBvcCFcIiBbbmFtZV1cbmxldCBzY29wZV9wZWVrIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1wZWVrXCIgW25hbWVdXG5sZXQgc2NvcGVfZW1pdCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtZW1pdCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgcHJvdmlkZV9wdXNoIG5hbWUgdmFsdWUgPSBwcmltX2NhbGwgXCJzY29wZS1wdXNoIVwiIFtuYW1lOyB2YWx1ZV1cbmxldCBwcm92aWRlX3BvcCBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtcG9wIVwiIFtuYW1lXVxuXG4oKiBDdXN0b20gc3BlY2lhbCBmb3JtcyByZWdpc3RyeSDigJQgbXV0YWJsZSBkaWN0ICopXG5sZXQgY3VzdG9tX3NwZWNpYWxfZm9ybXMgPSBEaWN0IChIYXNodGJsLmNyZWF0ZSA0KVxuXG4oKiByZWdpc3Rlci1zcGVjaWFsLWZvcm0hIOKAlCBhZGQgYSBoYW5kbGVyIHRvIHRoZSBjdXN0b20gcmVnaXN0cnkgKilcbmxldCByZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gbmFtZSBoYW5kbGVyID1cbiAgKG1hdGNoIGN1c3RvbV9zcGVjaWFsX2Zvcm1zIHdpdGhcbiAgIHwgRGljdCB0YmwgLT4gSGFzaHRibC5yZXBsYWNlIHRibCAodmFsdWVfdG9fc3RyIG5hbWUpIGhhbmRsZXI7IGhhbmRsZXJcbiAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImN1c3RvbV9zcGVjaWFsX2Zvcm1zIG5vdCBhIGRpY3RcIikpXG5cbigqIFJlbmRlciBjaGVjay9mbiBob29rcyDigJQgbmlsIGJ5IGRlZmF1bHQsIHNldCBieSBwbGF0Zm9ybSBpZiBuZWVkZWQgKilcbmxldCByZW5kZXJfY2hlY2sgPSBOaWxcbmxldCByZW5kZXJfZm4gPSBOaWxcblxuKCogaXMtZWxzZS1jbGF1c2U/IOKAlCBjaGVjayBpZiBhIGNvbmQvY2FzZSB0ZXN0IGlzIGFuIGVsc2UgbWFya2VyICopXG5sZXQgaXNfZWxzZV9jbGF1c2UgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IEtleXdvcmQgayAtPiBCb29sIChrID0gXCJlbHNlXCIgfHwgayA9IFwiZGVmYXVsdFwiKVxuICB8IFN5bWJvbCBzIC0+IEJvb2wgKHMgPSBcImVsc2VcIiB8fCBzID0gXCJkZWZhdWx0XCIpXG4gIHwgQm9vbCB0cnVlIC0+IEJvb2wgdHJ1ZVxuICB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiBTaWduYWwgYWNjZXNzb3JzICopXG5sZXQgc2lnbmFsX3ZhbHVlIHMgPSBtYXRjaCBzIHdpdGhcbiAgfCBTaWduYWwgc2lnJyAtPiBzaWcnLnNfdmFsdWVcbiAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInZhbHVlXCIgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBzaWduYWxcIilcbmxldCBzaWduYWxfYWRkX3N1Yl9iIHMgZiA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgfCBTb21lIChMaXN0UmVmIHIpIC0+IHIgOj0gIXIgQCBbZl07IE5pbFxuICAgICB8IFNvbWUgKExpc3QgaXRlbXMpIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdFJlZiAocmVmIChpdGVtcyBAIFtmXSkpKTsgTmlsXG4gICAgIHwgXyAtPiBIYXNodGJsLnJlcGxhY2UgZCBcInN1YnNjcmliZXJzXCIgKExpc3RSZWYgKHJlZiBbZl0pKTsgTmlsKVxuICB8IF8gLT4gTmlsXG5cbmxldCBzaWduYWxfcmVtb3ZlX3N1Yl9iIHMgZiA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgfCBTb21lIChMaXN0UmVmIHIpIC0+IHIgOj0gTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gZikgIXI7IE5pbFxuICAgICB8IFNvbWUgKExpc3QgaXRlbXMpIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gZikgaXRlbXMpKTsgTmlsXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxuKCogSXNsYW5kIHNjb3BlIHN0dWJzIOKAlCBhY2NlcHQgYm90aCBiYXJlIE9DYW1sIGZucyBhbmQgTmF0aXZlRm4gdmFsdWVzXG4gICBmcm9tIHRyYW5zcGlsZWQgY29kZSAoTmF0aXZlRm4gd3JhcHBpbmcgZm9yIHZhbHVlLXN0b3JhYmxlIGxhbWJkYXMpLiAqKVxubGV0IHdpdGhfaXNsYW5kX3Njb3BlIF9yZWdpc3Rlcl9mbiBib2R5X2ZuID1cbiAgbWF0Y2ggYm9keV9mbiB3aXRoXG4gIHwgTmF0aXZlRm4gKF8sIGYpIC0+IGYgW11cbiAgfCBfIC0+IE5pbFxubGV0IHJlZ2lzdGVyX2luX3Njb3BlIF9kaXNwb3NlX2ZuID0gTmlsXG5cbigqIENvbXBvbmVudCB0eXBlIGFubm90YXRpb24gc3R1YiAqKVxubGV0IGNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiBfY29tcCBfdHlwZXMgPSBOaWxcblxuKCogUGFyc2Uga2V5d29yZCBhcmdzIGZyb20gYSBjYWxsIOKAlCB0aGlzIGlzIGRlZmluZWQgaW4gZXZhbHVhdG9yLnN4LFxuICAgdGhlIHRyYW5zcGlsZWQgdmVyc2lvbiB3aWxsIG92ZXJyaWRlIHRoaXMgc3R1Yi4gKilcbigqIEZvcndhcmQtcmVmZXJlbmNlIHN0dWJzIGZvciBldmFsdWF0b3IgZnVuY3Rpb25zIHVzZWQgYmVmb3JlIGRlZmluaXRpb24gKilcbmxldCBwYXJzZV9jb21wX3BhcmFtcyBfcGFyYW1zID0gTGlzdCBbTGlzdCBbXTsgTmlsOyBCb29sIGZhbHNlXVxubGV0IHBhcnNlX21hY3JvX3BhcmFtcyBfcGFyYW1zID0gTGlzdCBbTGlzdCBbXTsgTmlsXVxuXG5sZXQgcGFyc2Vfa2V5d29yZF9hcmdzIF9yYXdfYXJncyBfZW52ID1cbiAgKCogU3R1YiDigJQgdGhlIHJlYWwgaW1wbGVtZW50YXRpb24gaXMgdHJhbnNwaWxlZCBmcm9tIGV2YWx1YXRvci5zeCAqKVxuICBMaXN0IFtEaWN0IChIYXNodGJsLmNyZWF0ZSAwKTsgTGlzdCBbXV1cblxuKCogTWFrZSBoYW5kbGVyIGRlZiDigJQgdXNlZCBieSBjdXN0b21fc3BlY2lhbF9mb3JtcyAqKVxubGV0IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52ID0gRGljdCAobGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgXCJoYW5kbGVyXCIpOyBIYXNodGJsLnJlcGxhY2UgZCBcIm5hbWVcIiBuYW1lOyBIYXNodGJsLnJlcGxhY2UgZCBcInBhcmFtc1wiIHBhcmFtczsgSGFzaHRibC5yZXBsYWNlIGQgXCJib2R5XCIgYm9keTsgZClcbmxldCBtYWtlX3BhZ2VfZGVmIG5hbWUgX29wdHMgPSBEaWN0IChsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJ0eXBlXCIgKFN0cmluZyBcInBhZ2VcIik7IEhhc2h0YmwucmVwbGFjZSBkIFwibmFtZVwiIG5hbWU7IGQpXG5cbigqIHNmX2RlZmhhbmRsZXIg4oCUIHVzZWQgYnkgY3VzdG9tX3NwZWNpYWxfZm9ybXMgKilcbmxldCBzZl9kZWZoYW5kbGVyIGFyZ3MgZW52ID1cbiAgbGV0IG5hbWUgPSBmaXJzdCBhcmdzIGluIGxldCByZXN0X2FyZ3MgPSByZXN0IGFyZ3MgaW5cbiAgbWFrZV9oYW5kbGVyX2RlZiBuYW1lIChmaXJzdCByZXN0X2FyZ3MpIChudGggcmVzdF9hcmdzIChOdW1iZXIgMS4wKSkgZW52XG5cbmxldCBzdHJpcF9wcmVmaXggcyBwcmVmaXggPVxuICBtYXRjaCBzLCBwcmVmaXggd2l0aFxuICB8IFN0cmluZyBzLCBTdHJpbmcgcCAtPlxuICAgIGxldCBwbCA9IFN0cmluZy5sZW5ndGggcCBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA+PSBwbCAmJiBTdHJpbmcuc3ViIHMgMCBwbCA9IHBcbiAgICB0aGVuIFN0cmluZyAoU3RyaW5nLnN1YiBzIHBsIChTdHJpbmcubGVuZ3RoIHMgLSBwbCkpXG4gICAgZWxzZSBTdHJpbmcgc1xuICB8IF8gLT4gc1xuXG4oKiBkZWJ1Z19sb2cg4oCUIG5vLW9wIGluIHByb2R1Y3Rpb24sIHVzZWQgYnkgQ0VLIGV2YWx1YXRvciBmb3IgY29tcG9uZW50IHdhcm5pbmdzICopXG5sZXQgZGVidWdfbG9nIF8gXyA9IE5pbFxuXG4oKiBtdXRhYmxlX2xpc3Qg4oCUIG11dGFibGUgbGlzdCBmb3IgYnl0ZWNvZGUgY29tcGlsZXIgcG9vbCBlbnRyaWVzICopXG5sZXQgbXV0YWJsZV9saXN0ICgpID0gTGlzdFJlZiAocmVmIFtdKVxuXG4oKiBKSVQgdHJ5LWNhbGwg4oCUIHJlZiBzZXQgYnkgc3hfc2VydmVyLm1sIGFmdGVyIGNvbXBpbGVyIGxvYWRzLlxuICAgUmV0dXJucyBOaWwgKG5vIEpJVCkgb3IgdGhlIHJlc3VsdCB2YWx1ZS4gU3BlYyBjYWxscyB0aGlzLiAqKVxubGV0IF9qaXRfdHJ5X2NhbGxfZm4gOiAodmFsdWUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxubGV0IF9qaXRfaGl0ID0gcmVmIDBcbmxldCBfaml0X21pc3MgPSByZWYgMFxubGV0IF9qaXRfc2tpcCA9IHJlZiAwXG5sZXQgaml0X3Jlc2V0X2NvdW50ZXJzICgpID0gX2ppdF9oaXQgOj0gMDsgX2ppdF9taXNzIDo9IDA7IF9qaXRfc2tpcCA6PSAwXG4oKiBTZW50aW5lbCB2YWx1ZSBmb3IgXCJKSVQgc2tpcHBlZCDigJQgZmFsbCBiYWNrIHRvIENFS1wiLlxuICAgTXVzdCBiZSBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbnkgbGVnaXRpbWF0ZSByZXR1cm4gdmFsdWUgaW5jbHVkaW5nIE5pbC5cbiAgIFdlIHVzZSBhIHVuaXF1ZSB0YWdnZWQgZGljdCB0aGF0IGlzX2ppdF9za2lwIGNhbiBpZGVudGlmeS4gKilcbmxldCBfaml0X3NraXBfc2VudGluZWwgPVxuICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDEgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2ppdF9za2lwXCIgKEJvb2wgdHJ1ZSk7XG4gIERpY3QgZFxuXG5sZXQgaXNfaml0X3NraXAgdiA9IG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPiBIYXNodGJsLm1lbSBkIFwiX19qaXRfc2tpcFwiXG4gIHwgXyAtPiBmYWxzZVxuXG4oKiBQbGF0Zm9ybSBmdW5jdGlvbiBmb3IgdGhlIHNwZWM6IChqaXQtc2tpcD8gdikg4oaSIHRyYW5zcGlsZXMgdG8gaml0X3NraXBfcCAqKVxubGV0IGppdF9za2lwX3AgdiA9IEJvb2wgKGlzX2ppdF9za2lwIHYpXG5cbmxldCBqaXRfdHJ5X2NhbGwgZiBhcmdzID1cbiAgbWF0Y2ggIV9qaXRfdHJ5X2NhbGxfZm4gd2l0aFxuICB8IE5vbmUgLT4gaW5jciBfaml0X3NraXA7IF9qaXRfc2tpcF9zZW50aW5lbFxuICB8IFNvbWUgaG9vayAtPlxuICAgIG1hdGNoIGYgd2l0aFxuICAgIHwgTGFtYmRhIGwgd2hlbiBsLmxfbmFtZSA8PiBOb25lIC0+XG4gICAgICBsZXQgYXJnX2xpc3QgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCBhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYSB9IC0+IGEgfCBfIC0+IFtdIGluXG4gICAgICAobWF0Y2ggaG9vayBmIGFyZ19saXN0IHdpdGggU29tZSByZXN1bHQgLT4gaW5jciBfaml0X2hpdDsgcmVzdWx0IHwgTm9uZSAtPiBpbmNyIF9qaXRfbWlzczsgX2ppdF9za2lwX3NlbnRpbmVsKVxuICAgIHwgXyAtPiBpbmNyIF9qaXRfc2tpcDsgX2ppdF9za2lwX3NlbnRpbmVsXG5cblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX211bCIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0xpc3QiLCJTdGRsaWIiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9TdHJpbmciLCJTeF90eXBlcyIsIlN4X3ByaW1pdGl2ZXMiLCJTdGRsaWJfQXJyYXkiLCJmYXN0X2VxIiwiYSIsImIiLCJ5IiwieCIsImQiLCJuIiwibGEiLCJhZCIsImFuIiwiYmQiLCJibiIsImxiIiwiZXhuIiwiY3N0X2VtcHR5IiwiY3N0X2ZpcnN0IiwiY3N0X2xlbiIsImNzdF9yZXN0IiwicHJpbV9jYWxsIiwibmFtZSIsImFyZ3MiLCJ4cyIsInMiLCJsIiwiciIsIm1hdGNoIiwiY3N0IiwidmFsdWVfdG9fc3RyIiwidiIsInN4X3RvX3N0cmluZyIsInN4X3N0ciIsInN4X3RvX2xpc3QiLCJzeF9jYWxsIiwiayIsImZuIiwiY2wiLCJuYXJncyIsImFyZ3NfcHJldmlldyIsInN4X2FwcGx5IiwiYXJnc19saXN0IiwiY3N0X2V2YWxfZXJyb3IiLCJzeF9hcHBseV9jZWsiLCJlIiwibWFya2VyIiwibXNnIiwiaXNfZXZhbF9lcnJvciIsInN4X2FwcGVuZF9iIiwibHN0IiwiaXRlbSIsIml0ZW1zIiwiY3N0X2N1cnJlbnRfaXRlbSIsImNzdF9lZmZlY3RfbGlzdCIsImNzdF9lbWl0dGVkIiwiY3N0X2V4dHJhIiwiY3N0X2V4dHJhMiIsImNzdF9maXJzdF9yZW5kZXIiLCJjc3RfZnJhbWVzIiwiY3N0X2hhc19lZmZlY3RzIiwiY3N0X2hlYWRfbmFtZSIsImNzdF9ob190eXBlIiwiY3N0X2luZGV4ZWQiLCJjc3RfaXAiLCJjc3RfbWF0Y2hfdmFsIiwiY3N0X3BoYXNlIiwiY3N0X3Jhd19hcmdzIiwiY3N0X3JlbWFpbmluZyIsImNzdF9yZXN1bHRzIiwiY3N0X3NjaGVtZSIsImNzdF9zcCIsImNzdF9zdGFjayIsImNzdF9zdWJzY3JpYmVycyIsImNzdF91cGRhdGVfZm4iLCJjc3RfdmFsdWUiLCJzeF9kaWN0X3NldF9iIiwidGJsIiwia2V5Iiwic3dpdGNoJCIsIm0iLCJjc3RfYm9keSIsImNzdF9lbHNlIiwiY3N0X25hbWUiLCJjc3RfdHlwZSIsImdldF92YWwiLCJjb250YWluZXIiLCJjc3RfZW52IiwiYyIsImJjIiwiaSIsImNvbnN0cyIsInV2IiwiZGVmYXVsdCQiLCJwcmltIiwicGFyYW0iLCJmaXJzdCIsInJlc3QiLCJsYXN0IiwibnRoIiwiY29sbCIsImNvbnMiLCJhcHBlbmQiLCJyZXZlcnNlIiwiZmxhdHRlbiIsImNvbmNhdCIsInNsaWNlIiwibGVuIiwiZ2V0Iiwic29ydCIsInJhbmdlIiwidW5pcXVlIiwiemlwIiwidGFrZSIsImRyb3AiLCJrZXl3b3JkX3AiLCJlbXB0eV9wIiwibnVtYmVyX3AiLCJzdHJpbmdfcCIsImJvb2xlYW5fcCIsImxpc3RfcCIsImRpY3RfcCIsInN5bWJvbF9wIiwic3RyIiwidXBwZXIiLCJ1cGNhc2UiLCJsb3dlciIsImRvd25jYXNlIiwidHJpbSIsInNwbGl0Iiwiam9pbiIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJhc3NvYyIsImRpc3NvYyIsIm1lcmdlIiwia2V5cyIsInZhbHMiLCJkaWN0X3NldCIsImRpY3RfZ2V0IiwiZGljdF9kZWxldGUiLCJhYnMiLCJzcXJ0IiwicG93IiwiZmxvb3IiLCJjZWlsIiwicm91bmQiLCJtaW4iLCJtYXgiLCJjbGFtcCIsImVycm9yIiwiaW5zcGVjdCIsImFwcGx5Iiwic3ByZWFkX2F0dHJzIiwic3hfY29udGV4dCIsInRyYW1wb2xpbmUiLCJ0eXBlX29mIiwidW53cmFwX2VudiIsImVudl9oYXMiLCJlbnZfZ2V0IiwiZW52X2JpbmQiLCJlbnZfc2V0IiwibWFrZV9lbnYiLCJlbnZfZXh0ZW5kIiwiZW52X21lcmdlIiwic2V0X2xhbWJkYV9uYW1lIiwiaXNfbmlsIiwiaXNfdGh1bmsiLCJpc19sYW1iZGEiLCJpc19jb21wb25lbnQiLCJpc19pc2xhbmQiLCJpc19tYWNybyIsImlzX3NpZ25hbCIsImlzX2NhbGxhYmxlIiwiaXNfcHJpbWl0aXZlIiwiZ2V0X3ByaW1pdGl2ZSIsImZvcl9lYWNoX2luZGV4ZWQiLCJjb250aW51YXRpb25fcCIsIm1ha2VfY2VrX2NvbnRpbnVhdGlvbiIsImNhcHR1cmVkIiwicmVzdF9rb250IiwiZGF0YSIsImNvbnRpbnVhdGlvbl9kYXRhIiwiY2FsbGNjX2NvbnRpbnVhdGlvbl9wIiwibWFrZV9jYWxsY2NfY29udGludWF0aW9uIiwid2luZGVyc19sZW4iLCJjYWxsY2NfY29udGludWF0aW9uX2RhdGEiLCJmcmFtZXMiLCJjYWxsY2NfY29udGludWF0aW9uX3dpbmRlcnNfbGUiLCJob3N0X2Vycm9yIiwiaG9zdF93YXJuIiwiZHluYW1pY193aW5kX2NhbGwiLCJiZWZvcmUiLCJib2R5IiwiYWZ0ZXIiLCJlbnYiLCJyZXN1bHQiLCJjc3Rfc2NvcGVfcHVzaCIsInNjb3BlX3B1c2giLCJ2YWx1ZSIsImNzdF9zY29wZV9wb3AiLCJzY29wZV9wb3AiLCJzY29wZV9wZWVrIiwic2NvcGVfZW1pdCIsInByb3ZpZGVfcHVzaCIsInByb3ZpZGVfcG9wIiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwiaXNfZWxzZV9jbGF1c2UiLCJjc3RfZGVmYXVsdCIsInNpZ25hbF92YWx1ZSIsInNpZyIsInNpZ25hbF9hZGRfc3ViX2IiLCJzaWduYWxfcmVtb3ZlX3N1Yl9iIiwid2l0aF9pc2xhbmRfc2NvcGUiLCJyZWdpc3Rlcl9mbiIsImJvZHlfZm4iLCJyZWdpc3Rlcl9pbl9zY29wZSIsImRpc3Bvc2VfZm4iLCJjb21wb25lbnRfc2V0X3BhcmFtX3R5cGVzX2IiLCJjb21wIiwidHlwZXMiLCJwYXJzZV9jb21wX3BhcmFtcyIsInBhcmFtcyIsInBhcnNlX21hY3JvX3BhcmFtcyIsInBhcnNlX2tleXdvcmRfYXJncyIsInJhd19hcmdzIiwibWFrZV9oYW5kbGVyX2RlZiIsIm1ha2VfcGFnZV9kZWYiLCJvcHRzIiwic2ZfZGVmaGFuZGxlciIsInJlc3RfYXJncyIsInN0cmlwX3ByZWZpeCIsInByZWZpeCIsInAiLCJwbCIsImRlYnVnX2xvZyIsIm11dGFibGVfbGlzdCIsImppdF9oaXQiLCJqaXRfbWlzcyIsImppdF9za2lwIiwiaml0X3Jlc2V0X2NvdW50ZXJzIiwiY3N0X2ppdF9za2lwIiwiaXNfaml0X3NraXAiLCJqaXRfc2tpcF9wIiwiaml0X3RyeV9jYWxsX2ZuIiwiaml0X3NraXBfc2VudGluZWwiLCJqaXRfdHJ5X2NhbGwiLCJob29rIiwiYXJnX2xpc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEemxCNUMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo1Nzg0NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcmVmLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogc3hfcmVmLm1sIOKAlCBBdXRvLWdlbmVyYXRlZCBmcm9tIFNYIHNwZWMgYnkgaG9zdHMvb2NhbWwvYm9vdHN0cmFwLnB5ICopXG4oKiBEbyBub3QgZWRpdCDigJQgcmVnZW5lcmF0ZSB3aXRoOiBweXRob24zIGhvc3RzL29jYW1sL2Jvb3RzdHJhcC5weSAqKVxuXG5bQEBAd2FybmluZyBcIi0yNi0yN1wiXVxuXG5vcGVuIFN4X3R5cGVzXG5vcGVuIFN4X3J1bnRpbWVcblxuKCogVHJhbXBvbGluZSDigJQgZm9yd2FyZCByZWYsIHJlc29sdmVkIGFmdGVyIGV2YWxfZXhwciBpcyBkZWZpbmVkLiAqKVxubGV0IHRyYW1wb2xpbmVfZm4gOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIHYgLT4gdilcbmxldCB0cmFtcG9saW5lIHYgPSAhdHJhbXBvbGluZV9mbiB2XG5cbigqIFN0ZXAgbGltaXQgZm9yIHRpbWVvdXQgZGV0ZWN0aW9uIOKAlCBzZXQgdG8gMCB0byBkaXNhYmxlICopXG5sZXQgc3RlcF9saW1pdCA6IGludCByZWYgPSByZWYgMFxubGV0IHN0ZXBfY291bnQgOiBpbnQgcmVmID0gcmVmIDBcblxuKCogPT09IE11dGFibGUgZ2xvYmFscyDigJQgYmFja2luZyByZWZzIGZvciB0cmFuc3BpbGVyJ3MgIV9yZWYgLyBfcmVmIDo9ID09PSAqKVxubGV0IF9zdHJpY3RfcmVmID0gcmVmIChCb29sIGZhbHNlKVxubGV0IF9wcmltX3BhcmFtX3R5cGVzX3JlZiA9IHJlZiBOaWxcbmxldCBfbGFzdF9lcnJvcl9rb250X3JlZiA9IHJlZiBOaWxcbmxldCBfcHJvdG9jb2xfcmVnaXN0cnlfID0gRGljdCAoSGFzaHRibC5jcmVhdGUgMClcblxuXG5cbigqID09PSBUcmFuc3BpbGVkIGZyb20gZXZhbHVhdG9yIChmcmFtZXMgKyBldmFsICsgQ0VLKSA9PT0gKilcblxuKCogbWFrZS1jZWstc3RhdGUgKilcbmxldCByZWMgbWFrZV9jZWtfc3RhdGUgY29udHJvbCBlbnYga29udCA9XG4gIChDZWtTdGF0ZSB7IGNzX2NvbnRyb2wgPSBjb250cm9sOyBjc19lbnYgPSBlbnY7IGNzX2tvbnQgPSBrb250OyBjc19waGFzZSA9IFwiZXZhbFwiOyBjc192YWx1ZSA9IE5pbCB9KVxuXG4oKiBtYWtlLWNlay12YWx1ZSAqKVxuYW5kIG1ha2VfY2VrX3ZhbHVlIHZhbHVlIGVudiBrb250ID1cbiAgKENla1N0YXRlIHsgY3NfY29udHJvbCA9IE5pbDsgY3NfZW52ID0gZW52OyBjc19rb250ID0ga29udDsgY3NfcGhhc2UgPSBcImNvbnRpbnVlXCI7IGNzX3ZhbHVlID0gdmFsdWUgfSlcblxuKCogbWFrZS1jZWstc3VzcGVuZGVkICopXG5hbmQgbWFrZV9jZWtfc3VzcGVuZGVkIHJlcXVlc3QgZW52IGtvbnQgPVxuICAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgNCBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJlbnZcIiBlbnY7IEhhc2h0YmwucmVwbGFjZSBfZCBcImtvbnRcIiBrb250OyBIYXNodGJsLnJlcGxhY2UgX2QgXCJwaGFzZVwiIChTdHJpbmcgXCJpby1zdXNwZW5kZWRcIik7IEhhc2h0YmwucmVwbGFjZSBfZCBcInJlcXVlc3RcIiByZXF1ZXN0OyBEaWN0IF9kKVxuXG4oKiBjZWstdGVybWluYWw/ICopXG5hbmQgY2VrX3Rlcm1pbmFsX3Agc3RhdGUgPVxuICAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJwaGFzZVwiKSkpOyAoU3RyaW5nIFwiY29udGludWVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwia29udFwiKSkpKSkpXG5cbigqIGNlay1zdXNwZW5kZWQ/ICopXG5hbmQgY2VrX3N1c3BlbmRlZF9wIHN0YXRlID1cbiAgKHByaW1fY2FsbCBcIj1cIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwicGhhc2VcIikpKTsgKFN0cmluZyBcImlvLXN1c3BlbmRlZFwiKV0pXG5cbigqIGNlay1jb250cm9sICopXG5hbmQgY2VrX2NvbnRyb2wgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwiY29udHJvbFwiKSkpXG5cbigqIGNlay1lbnYgKilcbmFuZCBjZWtfZW52IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImVudlwiKSkpXG5cbigqIGNlay1rb250ICopXG5hbmQgY2VrX2tvbnQgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwia29udFwiKSkpXG5cbigqIGNlay1waGFzZSAqKVxuYW5kIGNla19waGFzZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJwaGFzZVwiKSkpXG5cbigqIGNlay1pby1yZXF1ZXN0ICopXG5hbmQgY2VrX2lvX3JlcXVlc3QgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpXG5cbigqIGNlay12YWx1ZSAqKVxuYW5kIGNla192YWx1ZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpXG5cbigqIG1ha2UtaWYtZnJhbWUgKilcbmFuZCBtYWtlX2lmX2ZyYW1lIHRoZW5fZXhwciBlbHNlX2V4cHIgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaWZcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gZWxzZV9leHByOyBjZl9ib2R5ID0gdGhlbl9leHByOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS13aGVuLWZyYW1lICopXG5hbmQgbWFrZV93aGVuX2ZyYW1lIGJvZHlfZXhwcnMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2hlblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBib2R5X2V4cHJzOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1iZWdpbi1mcmFtZSAqKVxuYW5kIG1ha2VfYmVnaW5fZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJlZ2luXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtbGV0LWZyYW1lICopXG5hbmQgbWFrZV9sZXRfZnJhbWUgbmFtZSByZW1haW5pbmcgYm9keSBsb2NhbCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImxldFwiOyBjZl9lbnYgPSBsb2NhbDsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBib2R5OyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1kZWZpbmUtZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mcmFtZSBuYW1lIGVudiBoYXNfZWZmZWN0cyBlZmZlY3RfbGlzdCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlZmluZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gaGFzX2VmZmVjdHM7IGNmX2V4dHJhMiA9IGVmZmVjdF9saXN0IH0pXG5cbigqIG1ha2UtZGVmaW5lLWZvcmVpZ24tZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mb3JlaWduX2ZyYW1lIG5hbWUgc3BlYyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZWZpbmUtZm9yZWlnblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zZXQtZnJhbWUgKilcbmFuZCBtYWtlX3NldF9mcmFtZSBuYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1hcmctZnJhbWUgKilcbmFuZCBtYWtlX2FyZ19mcmFtZSBmIGV2YWxlZCByZW1haW5pbmcgZW52IHJhd19hcmdzIGhlYWRfbmFtZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImFyZ1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBldmFsZWQ7IGNmX3Jlc3VsdHMgPSByYXdfYXJnczsgY2ZfZXh0cmEgPSAobGV0IF9vciA9IGhlYWRfbmFtZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY2FsbC1mcmFtZSAqKVxuYW5kIG1ha2VfY2FsbF9mcmFtZSBmIGFyZ3MgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY2FsbFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBhcmdzOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY29uZC1mcmFtZSAqKVxuYW5kIG1ha2VfY29uZF9mcmFtZSByZW1haW5pbmcgZW52IHNjaGVtZV9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY29uZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBzY2hlbWVfcDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY29uZC1hcnJvdy1mcmFtZSAqKVxuYW5kIG1ha2VfY29uZF9hcnJvd19mcmFtZSB0ZXN0X3ZhbHVlIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbmQtYXJyb3dcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdGVzdF92YWx1ZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY2FzZS1mcmFtZSAqKVxuYW5kIG1ha2VfY2FzZV9mcmFtZSBtYXRjaF92YWwgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhc2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gbWF0Y2hfdmFsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS10aHJlYWQtZnJhbWUgKilcbmFuZCBtYWtlX3RocmVhZF9mcmFtZSByZW1haW5pbmcgZW52IG1vZGUgbmFtZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInRocmVhZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gbW9kZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIHRocmVhZC1pbnNlcnQtYXJnICopXG5hbmQgdGhyZWFkX2luc2VydF9hcmcgZm9ybSB2YWx1ZSBmZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAoZXZhbF9leHByICgoY29ucyAoKGZpcnN0IChmb3JtKSkpICgoY29ucyAoKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgdmFsdWVdKSkgKChyZXN0IChmb3JtKSkpKSkpKSAoZmVudikpIGVsc2UgKGV2YWxfZXhwciAoKExpc3QgW2Zvcm07IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IHZhbHVlXSldKSkgKGZlbnYpKSlcblxuKCogdGhyZWFkLWluc2VydC1hcmctbGFzdCAqKVxuYW5kIHRocmVhZF9pbnNlcnRfYXJnX2xhc3QgZm9ybSB2YWx1ZSBmZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAoZXZhbF9leHByICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2Zvcm07IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pXSldKSkgKGZlbnYpKSBlbHNlIChldmFsX2V4cHIgKChMaXN0IFtmb3JtOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pXSkpIChmZW52KSkpXG5cbigqIG1ha2UtbWFwLWZyYW1lICopXG5hbmQgbWFrZV9tYXBfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSAoQm9vbCBmYWxzZSk7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLW1hcC1pbmRleGVkLWZyYW1lICopXG5hbmQgbWFrZV9tYXBfaW5kZXhlZF9mcmFtZSBmIHJlbWFpbmluZyByZXN1bHRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm1hcFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IChCb29sIHRydWUpOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1tdWx0aS1tYXAtZnJhbWUgKilcbmFuZCBtYWtlX211bHRpX21hcF9mcmFtZSBmIHJlbWFpbmluZ19saXN0cyByZXN1bHRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm11bHRpLW1hcFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZ19saXN0czsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZmlsdGVyLWZyYW1lICopXG5hbmQgbWFrZV9maWx0ZXJfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBjdXJyZW50X2l0ZW0gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZmlsdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gY3VycmVudF9pdGVtOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZWR1Y2UtZnJhbWUgKilcbmFuZCBtYWtlX3JlZHVjZV9mcmFtZSBmIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWR1Y2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZm9yLWVhY2gtZnJhbWUgKilcbmFuZCBtYWtlX2Zvcl9lYWNoX2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImZvci1lYWNoXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNvbWUtZnJhbWUgKilcbmFuZCBtYWtlX3NvbWVfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic29tZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1ldmVyeS1mcmFtZSAqKVxuYW5kIG1ha2VfZXZlcnlfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZXZlcnlcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utc2NvcGUtZnJhbWUgKilcbmFuZCBtYWtlX3Njb3BlX2ZyYW1lIG5hbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtZnJhbWUgKilcbmFuZCBtYWtlX3Byb3ZpZGVfZnJhbWUgbmFtZSB2YWx1ZSByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicHJvdmlkZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSAoTGlzdCBbXSk7IGNmX2V4dHJhID0gdmFsdWU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWJpbmQtZnJhbWUgKilcbmFuZCBtYWtlX2JpbmRfZnJhbWUgYm9keSBlbnYgcHJldl90cmFja2luZyA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gYm9keTsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IHByZXZfdHJhY2tpbmc7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtc2V0LWZyYW1lICopXG5hbmQgbWFrZV9wcm92aWRlX3NldF9mcmFtZSBuYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInByb3ZpZGUtc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNjb3BlLWFjYy1mcmFtZSAqKVxuYW5kIG1ha2Vfc2NvcGVfYWNjX2ZyYW1lIG5hbWUgdmFsdWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlLWFjY1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gKGxldCBfb3IgPSB2YWx1ZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gKExpc3QgW10pIH0pXG5cbigqIG1ha2UtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc2V0X2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGljdC1mcmFtZSAqKVxuYW5kIG1ha2VfZGljdF9mcmFtZSByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkaWN0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWFuZC1mcmFtZSAqKVxuYW5kIG1ha2VfYW5kX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1vci1mcmFtZSAqKVxuYW5kIG1ha2Vfb3JfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm9yXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZHluYW1pYy13aW5kLWZyYW1lICopXG5hbmQgbWFrZV9keW5hbWljX3dpbmRfZnJhbWUgcGhhc2UgYm9keV90aHVuayBhZnRlcl90aHVuayBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkeW5hbWljLXdpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBhZnRlcl90aHVuazsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBwaGFzZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtcmVhY3RpdmUtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIGVudiB1cGRhdGVfZm4gZmlyc3RfcmVuZGVyX3AgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWFjdGl2ZS1yZXNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSB1cGRhdGVfZm47IGNmX2V4dHJhMiA9IGZpcnN0X3JlbmRlcl9wIH0pXG5cbigqIG1ha2UtY2FsbGNjLWZyYW1lICopXG5hbmQgbWFrZV9jYWxsY2NfZnJhbWUgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY2FsbGNjXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utd2luZC1hZnRlci1mcmFtZSAqKVxuYW5kIG1ha2Vfd2luZF9hZnRlcl9mcmFtZSBhZnRlcl90aHVuayB3aW5kZXJzX2xlbiBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ3aW5kLWFmdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gYWZ0ZXJfdGh1bms7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gd2luZGVyc19sZW47IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXdpbmQtcmV0dXJuLWZyYW1lICopXG5hbmQgbWFrZV93aW5kX3JldHVybl9mcmFtZSBib2R5X3Jlc3VsdCBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ3aW5kLXJldHVyblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBib2R5X3Jlc3VsdDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGVyZWYtZnJhbWUgKilcbmFuZCBtYWtlX2RlcmVmX2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlcmVmXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtaG8tc2V0dXAtZnJhbWUgKilcbmFuZCBtYWtlX2hvX3NldHVwX2ZyYW1lIGhvX3R5cGUgcmVtYWluaW5nX2FyZ3MgZXZhbGVkX2FyZ3MgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaG8tc2V0dXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmdfYXJnczsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IGV2YWxlZF9hcmdzOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IGhvX3R5cGU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbXAtdHJhY2UtZnJhbWUgKilcbmFuZCBtYWtlX2NvbXBfdHJhY2VfZnJhbWUgbmFtZSBmaWxlID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY29tcC10cmFjZVwiOyBjZl9lbnYgPSBmaWxlOyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIGtvbnQtY29sbGVjdC1jb21wLXRyYWNlICopXG5hbmQga29udF9jb2xsZWN0X2NvbXBfdHJhY2Uga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKExpc3QgW10pIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiY29tcC10cmFjZVwiKV0pKSB0aGVuIChjb25zICgobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJmaWxlXCIgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZmlsZVwiKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpOyBEaWN0IF9kKSkgKChrb250X2NvbGxlY3RfY29tcF90cmFjZSAoKHJlc3QgKGtvbnQpKSkpKSkgZWxzZSAoa29udF9jb2xsZWN0X2NvbXBfdHJhY2UgKChyZXN0IChrb250KSkpKSkpKVxuXG4oKiBtYWtlLWhhbmRsZXItZnJhbWUgKilcbmFuZCBtYWtlX2hhbmRsZXJfZnJhbWUgaGFuZGxlcnMgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImhhbmRsZXJcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBoYW5kbGVyczsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJlc3RhcnQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc3RhcnRfZnJhbWUgcmVzdGFydHMgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc3RhcnRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSByZXN0YXJ0czsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNpZ25hbC1yZXR1cm4tZnJhbWUgKilcbmFuZCBtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUgZW52IHNhdmVkX2tvbnQgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzaWduYWwtcmV0dXJuXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gc2F2ZWRfa29udDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJhaXNlLWV2YWwtZnJhbWUgKilcbmFuZCBtYWtlX3JhaXNlX2V2YWxfZnJhbWUgZW52IGNvbnRpbnVhYmxlX3AgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyYWlzZS1ldmFsXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IGNvbnRpbnVhYmxlX3A7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJhaXNlLWd1YXJkLWZyYW1lICopXG5hbmQgbWFrZV9yYWlzZV9ndWFyZF9mcmFtZSBlbnYgc2F2ZWRfa29udCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJhaXNlLWd1YXJkXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gc2F2ZWRfa29udDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXBlcmZvcm0tZnJhbWUgKilcbmFuZCBtYWtlX3BlcmZvcm1fZnJhbWUgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicGVyZm9ybVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXZtLXJlc3VtZS1mcmFtZSAqKVxuYW5kIG1ha2Vfdm1fcmVzdW1lX2ZyYW1lIHJlc3VtZV9mbiBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ2bS1yZXN1bWVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSByZXN1bWVfZm47IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1pbXBvcnQtZnJhbWUgKilcbmFuZCBtYWtlX2ltcG9ydF9mcmFtZSBpbXBvcnRfc2V0IHJlbWFpbmluZ19zZXRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImltcG9ydFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZ19zZXRzOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gaW1wb3J0X3NldDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXBhcmFtZXRlcml6ZS1mcmFtZSAqKVxuYW5kIG1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIHJlbWFpbmluZyBjdXJyZW50X3BhcmFtIHJlc3VsdHMgYm9keSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJwYXJhbWV0ZXJpemVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gYm9keTsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gY3VycmVudF9wYXJhbTsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogZmluZC1tYXRjaGluZy1oYW5kbGVyICopXG5hbmQgZmluZF9tYXRjaGluZ19oYW5kbGVyIGhhbmRsZXJzIGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChoYW5kbGVycykpKSB0aGVuIE5pbCBlbHNlIChsZXQgcGFpciA9IChmaXJzdCAoaGFuZGxlcnMpKSBpbiAobGV0IHByZWQgPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoY2VrX2NhbGwgKHByZWQpICgoTGlzdCBbY29uZGl0aW9uXSkpKSkgdGhlbiBoYW5kbGVyX2ZuIGVsc2UgKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKHJlc3QgKGhhbmRsZXJzKSkpIChjb25kaXRpb24pKSkpKSlcblxuKCoga29udC1maW5kLWhhbmRsZXIgKilcbmFuZCBrb250X2ZpbmRfaGFuZGxlciBrb250IGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgbWF0Y2gnID0gKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9oYW5kbGVyICgocmVzdCAoa29udCkpKSAoY29uZGl0aW9uKSkgZWxzZSBtYXRjaCcpKSBlbHNlIChrb250X2ZpbmRfaGFuZGxlciAoKHJlc3QgKGtvbnQpKSkgKGNvbmRpdGlvbikpKSkpXG5cbigqIGtvbnQtdW53aW5kLXRvLWhhbmRsZXIgKilcbmFuZCBrb250X3Vud2luZF90b19oYW5kbGVyIGtvbnQgY29uZGl0aW9uID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJoYW5kbGVyXCIgTmlsOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJrb250XCIga29udDsgRGljdCBfZCkgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gbGV0IHJlc3RfayA9IChyZXN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJoYW5kbGVyXCIpXSkpIHRoZW4gKGxldCBtYXRjaCcgPSAoZmluZF9tYXRjaGluZ19oYW5kbGVyICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaCcpKSkgdGhlbiAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkgZWxzZSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJoYW5kbGVyXCIgbWF0Y2gnOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJrb250XCIga29udDsgRGljdCBfZCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwid2luZC1hZnRlclwiKV0pKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKCFfd2luZGVyc19yZWYpKTsgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwid2luZGVycy1sZW5cIikpKV0pKSB0aGVuIChfd2luZGVyc19yZWYgOj0gKHJlc3QgKCFfd2luZGVyc19yZWYpKTsgTmlsKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChjZWtfY2FsbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYWZ0ZXItdGh1bmtcIikpKSkgKChMaXN0IFtdKSkpKSBpbiAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkpKSBlbHNlIChrb250X3Vud2luZF90b19oYW5kbGVyIChyZXN0X2spIChjb25kaXRpb24pKSkpKSlcblxuKCogd2luZC1lc2NhcGUtdG8gKilcbmFuZCB3aW5kX2VzY2FwZV90byB0YXJnZXRfbGVuID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoIV93aW5kZXJzX3JlZikpOyB0YXJnZXRfbGVuXSkpIHRoZW4gKGxldCBhZnRlcl90aHVuayA9IChmaXJzdCAoIV93aW5kZXJzX3JlZikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChfd2luZGVyc19yZWYgOj0gKHJlc3QgKCFfd2luZGVyc19yZWYpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGNla19jYWxsIChhZnRlcl90aHVuaykgKChMaXN0IFtdKSkpKSBpbiAod2luZF9lc2NhcGVfdG8gKHRhcmdldF9sZW4pKSkpKSBlbHNlIE5pbClcblxuKCogZmluZC1uYW1lZC1yZXN0YXJ0ICopXG5hbmQgZmluZF9uYW1lZF9yZXN0YXJ0IHJlc3RhcnRzIG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdGFydHMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGVudHJ5ID0gKGZpcnN0IChyZXN0YXJ0cykpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAoZW50cnkpKTsgbmFtZV0pKSB0aGVuIGVudHJ5IGVsc2UgKGZpbmRfbmFtZWRfcmVzdGFydCAoKHJlc3QgKHJlc3RhcnRzKSkpIChuYW1lKSkpKSlcblxuKCoga29udC1maW5kLXJlc3RhcnQgKilcbmFuZCBrb250X2ZpbmRfcmVzdGFydCBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlc3RhcnRcIildKSkgdGhlbiAobGV0IG1hdGNoJyA9IChmaW5kX25hbWVkX3Jlc3RhcnQgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSkgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaCcpKSkgdGhlbiAoa29udF9maW5kX3Jlc3RhcnQgKChyZXN0IChrb250KSkpIChuYW1lKSkgZWxzZSAoTGlzdCBbbWF0Y2gnOyBmcmFtZTsgKHJlc3QgKGtvbnQpKV0pKSkgZWxzZSAoa29udF9maW5kX3Jlc3RhcnQgKChyZXN0IChrb250KSkpIChuYW1lKSkpKSlcblxuKCogZnJhbWUtdHlwZSAqKVxuYW5kIGZyYW1lX3R5cGUgZiA9XG4gIChnZXQgKGYpICgoU3RyaW5nIFwidHlwZVwiKSkpXG5cbigqIGtvbnQtcHVzaCAqKVxuYW5kIGtvbnRfcHVzaCBmcmFtZSBrb250ID1cbiAgKGNvbnMgKGZyYW1lKSAoa29udCkpXG5cbigqIGtvbnQtdG9wICopXG5hbmQga29udF90b3Aga29udCA9XG4gIChmaXJzdCAoa29udCkpXG5cbigqIGtvbnQtcG9wICopXG5hbmQga29udF9wb3Aga29udCA9XG4gIChyZXN0IChrb250KSlcblxuKCoga29udC1lbXB0eT8gKilcbmFuZCBrb250X2VtcHR5X3Aga29udCA9XG4gIChlbXB0eV9wIChrb250KSlcblxuKCoga29udC1jYXB0dXJlLXRvLXJlc2V0ICopXG5hbmQga29udF9jYXB0dXJlX3RvX3Jlc2V0IGtvbnQgPVxuICAobGV0IHJlYyBzY2FuID0gKGZ1biBrIGNhcHR1cmVkIC0+IChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInNoaWZ0IHdpdGhvdXQgZW5jbG9zaW5nIHJlc2V0XCIpKSkpIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoaykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZXNldFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpKSB0aGVuIChMaXN0IFtjYXB0dXJlZDsgKHJlc3QgKGspKV0pIGVsc2UgKHNjYW4gKChyZXN0IChrKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NhcHR1cmVkOyAoTGlzdCBbZnJhbWVdKV0pKSkpKSkpIGluIChzY2FuIChrb250KSAoKExpc3QgW10pKSkpXG5cbigqIGtvbnQtcHVzaC1wcm92aWRlcyAqKVxuYW5kIGtvbnRfcHVzaF9wcm92aWRlcyBwYWlycyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChwYWlycykpKSB0aGVuIGtvbnQgZWxzZSAobGV0IHBhaXIgPSAoZmlyc3QgKHBhaXJzKSkgaW4gKGtvbnRfcHVzaF9wcm92aWRlcyAoKHJlc3QgKHBhaXJzKSkpIChlbnYpICgoY29ucyAoKG1ha2VfcHJvdmlkZV9mcmFtZSAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCoga29udC1maW5kLXByb3ZpZGUgKilcbmFuZCBrb250X2ZpbmRfcHJvdmlkZSBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInByb3ZpZGVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG5hbWVdKSkpIHRoZW4gZnJhbWUgZWxzZSAoa29udF9maW5kX3Byb3ZpZGUgKChyZXN0IChrb250KSkpIChuYW1lKSkpKSlcblxuKCoga29udC1maW5kLXNjb3BlLWFjYyAqKVxuYW5kIGtvbnRfZmluZF9zY29wZV9hY2Mga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJzY29wZS1hY2NcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG5hbWVdKSkpIHRoZW4gZnJhbWUgZWxzZSAoa29udF9maW5kX3Njb3BlX2FjYyAoKHJlc3QgKGtvbnQpKSkgKG5hbWUpKSkpKVxuXG4oKiBoYXMtcmVhY3RpdmUtcmVzZXQtZnJhbWU/ICopXG5hbmQgaGFzX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lX3Aga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKChmaXJzdCAoa29udCkpKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wICgocmVzdCAoa29udCkpKSkpKVxuXG4oKiBrb250LWNhcHR1cmUtdG8tcmVhY3RpdmUtcmVzZXQgKilcbmFuZCBrb250X2NhcHR1cmVfdG9fcmVhY3RpdmVfcmVzZXQga29udCA9XG4gIChsZXQgcmVjIHNjYW4gPSAoZnVuIGsgY2FwdHVyZWQgLT4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGspKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwicmVhY3RpdmUgZGVyZWYgd2l0aG91dCBlbmNsb3NpbmcgcmVhY3RpdmUtcmVzZXRcIikpKSkgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSB0aGVuIChMaXN0IFtjYXB0dXJlZDsgZnJhbWU7IChyZXN0IChrKSldKSBlbHNlIChzY2FuICgocmVzdCAoaykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjYXB0dXJlZDsgKExpc3QgW2ZyYW1lXSldKSkpKSkpKSBpbiAoc2NhbiAoa29udCkgKChMaXN0IFtdKSkpKVxuXG4oKiAqY3VzdG9tLXNwZWNpYWwtZm9ybXMqICopXG5hbmQgY3VzdG9tX3NwZWNpYWxfZm9ybXMgPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIHJlZ2lzdGVyLXNwZWNpYWwtZm9ybSEgKilcbmFuZCByZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gbmFtZSBoYW5kbGVyID1cbiAgKHN4X2RpY3Rfc2V0X2IgY3VzdG9tX3NwZWNpYWxfZm9ybXMgbmFtZSBoYW5kbGVyKVxuXG4oKiAqcmVuZGVyLWNoZWNrKiAqKVxuYW5kIHJlbmRlcl9jaGVjayA9XG4gIE5pbFxuXG4oKiAqcmVuZGVyLWZuKiAqKVxuYW5kIHJlbmRlcl9mbiA9XG4gIE5pbFxuXG4oKiAqYmluZC10cmFja2luZyogKilcbmFuZCBfYmluZF90cmFja2luZ19yZWYgPSByZWYgTmlsXG5hbmQgX2JpbmRfdHJhY2tpbmdfID1cbiAgTmlsXG5cbigqICpwcm92aWRlLWJhdGNoLWRlcHRoKiAqKVxuYW5kIF9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZiA9IHJlZiAoTnVtYmVyIDAuMClcbmFuZCBfcHJvdmlkZV9iYXRjaF9kZXB0aF8gPVxuICAoTnVtYmVyIDAuMClcblxuKCogKnByb3ZpZGUtYmF0Y2gtcXVldWUqICopXG5hbmQgX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmID0gcmVmIChMaXN0IFtdKVxuYW5kIF9wcm92aWRlX2JhdGNoX3F1ZXVlXyA9XG4gIChMaXN0IFtdKVxuXG4oKiAqcHJvdmlkZS1zdWJzY3JpYmVycyogKilcbmFuZCBfcHJvdmlkZV9zdWJzY3JpYmVyc19yZWYgPSByZWYgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuYW5kIF9wcm92aWRlX3N1YnNjcmliZXJzXyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogKndpbmRlcnMqICopXG5hbmQgX3dpbmRlcnNfcmVmID0gcmVmIChMaXN0IFtdKVxuYW5kIF93aW5kZXJzXyA9XG4gIChMaXN0IFtdKVxuXG4oKiAqbGlicmFyeS1yZWdpc3RyeSogKilcbmFuZCBfbGlicmFyeV9yZWdpc3RyeV8gPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIGxpYnJhcnktbmFtZS1rZXkgKilcbmFuZCBsaWJyYXJ5X25hbWVfa2V5IHNwZWMgPVxuICAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiLlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gcyAtPiAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHMpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHMpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbc10pKSkpIChzeF90b19saXN0IHNwZWMpKSldKVxuXG4oKiBsaWJyYXJ5LWxvYWRlZD8gKilcbmFuZCBsaWJyYXJ5X2xvYWRlZF9wIHNwZWMgPVxuICAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbX2xpYnJhcnlfcmVnaXN0cnlfOyAobGlicmFyeV9uYW1lX2tleSAoc3BlYykpXSlcblxuKCogbGlicmFyeS1leHBvcnRzICopXG5hbmQgbGlicmFyeV9leHBvcnRzIHNwZWMgPVxuICAobGV0IGVudHJ5ID0gKGdldCAoX2xpYnJhcnlfcmVnaXN0cnlfKSAoKGxpYnJhcnlfbmFtZV9rZXkgKHNwZWMpKSkpIGluIChpZiBzeF90cnV0aHkgKGVudHJ5KSB0aGVuIChnZXQgKGVudHJ5KSAoKFN0cmluZyBcImV4cG9ydHNcIikpKSBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpKVxuXG4oKiByZWdpc3Rlci1saWJyYXJ5ICopXG5hbmQgcmVnaXN0ZXJfbGlicmFyeSBzcGVjIGV4cG9ydHMgPVxuICAoc3hfZGljdF9zZXRfYiBfbGlicmFyeV9yZWdpc3RyeV8gKGxpYnJhcnlfbmFtZV9rZXkgKHNwZWMpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMSBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJleHBvcnRzXCIgZXhwb3J0czsgRGljdCBfZCkpXG5cbigqICppby1yZWdpc3RyeSogKilcbmFuZCBfaW9fcmVnaXN0cnlfID1cbiAgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuXG4oKiBpby1yZWdpc3RlciEgKilcbmFuZCBpb19yZWdpc3Rlcl9iIG5hbWUgc3BlYyA9XG4gIChzeF9kaWN0X3NldF9iIF9pb19yZWdpc3RyeV8gbmFtZSBzcGVjKVxuXG4oKiBpby1yZWdpc3RlcmVkPyAqKVxuYW5kIGlvX3JlZ2lzdGVyZWRfcCBuYW1lID1cbiAgKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW19pb19yZWdpc3RyeV87IG5hbWVdKVxuXG4oKiBpby1sb29rdXAgKilcbmFuZCBpb19sb29rdXAgbmFtZSA9XG4gIChnZXQgKF9pb19yZWdpc3RyeV8pIChuYW1lKSlcblxuKCogaW8tbmFtZXMgKilcbmFuZCBpb19uYW1lcyAoKSA9XG4gIChwcmltX2NhbGwgXCJrZXlzXCIgW19pb19yZWdpc3RyeV9dKVxuXG4oKiAqZm9yZWlnbi1yZWdpc3RyeSogKilcbmFuZCBfZm9yZWlnbl9yZWdpc3RyeV8gPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIGZvcmVpZ24tcmVnaXN0ZXIhICopXG5hbmQgZm9yZWlnbl9yZWdpc3Rlcl9iIG5hbWUgc3BlYyA9XG4gIChzeF9kaWN0X3NldF9iIF9mb3JlaWduX3JlZ2lzdHJ5XyBuYW1lIHNwZWMpXG5cbigqIGZvcmVpZ24tcmVnaXN0ZXJlZD8gKilcbmFuZCBmb3JlaWduX3JlZ2lzdGVyZWRfcCBuYW1lID1cbiAgKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW19mb3JlaWduX3JlZ2lzdHJ5XzsgbmFtZV0pXG5cbigqIGZvcmVpZ24tbG9va3VwICopXG5hbmQgZm9yZWlnbl9sb29rdXAgbmFtZSA9XG4gIChnZXQgKF9mb3JlaWduX3JlZ2lzdHJ5XykgKG5hbWUpKVxuXG4oKiBmb3JlaWduLW5hbWVzICopXG5hbmQgZm9yZWlnbl9uYW1lcyAoKSA9XG4gIChwcmltX2NhbGwgXCJrZXlzXCIgW19mb3JlaWduX3JlZ2lzdHJ5X10pXG5cbigqIGZvcmVpZ24tcGFyc2UtcGFyYW1zICopXG5hbmQgZm9yZWlnbl9wYXJzZV9wYXJhbXMgcGFyYW1fbGlzdCA9XG4gIChsZXQgcmVzdWx0JyA9IChMaXN0IFtdKSBpbiBsZXQgaSA9IChOdW1iZXIgMC4wKSBpbiBsZXQgaXRlbXMgPSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wIChwYXJhbV9saXN0KSkpIHRoZW4gcGFyYW1fbGlzdCBlbHNlIChMaXN0IFtdKSkgaW4gKGZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AgKGl0ZW1zKSAocmVzdWx0JykpKVxuXG4oKiBmb3JlaWduLXBhcnNlLWt3YXJncyEgKilcbmFuZCBmb3JlaWduX3BhcnNlX2t3YXJnc19iIHNwZWMgcmVtYWluaW5nID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZW1haW5pbmcpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGtleXdvcmRfcCAoKGZpcnN0IChyZW1haW5pbmcpKSkpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Igc3BlYyAoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlbWFpbmluZykpKSkgKGxldCB2ID0gKG50aCAocmVtYWluaW5nKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGtleXdvcmRfcCAodikpKSB0aGVuIChrZXl3b3JkX25hbWUgKHYpKSBlbHNlIHYpKSkpIGluIChmb3JlaWduX3BhcnNlX2t3YXJnc19iIChzcGVjKSAoKHJlc3QgKChyZXN0IChyZW1haW5pbmcpKSkpKSkpIGVsc2UgTmlsKVxuXG4oKiBmb3JlaWduLXJlc29sdmUtYmluZGluZyAqKVxuYW5kIGZvcmVpZ25fcmVzb2x2ZV9iaW5kaW5nIGJpbmRpbmdfc3RyID1cbiAgKGxldCBwYXJ0cyA9IChwcmltX2NhbGwgXCJzcGxpdFwiIFtiaW5kaW5nX3N0cjsgKFN0cmluZyBcIi5cIildKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPD1cIiBbKGxlbiAocGFydHMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwibWV0aG9kXCIgYmluZGluZ19zdHI7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm9iamVjdFwiIE5pbDsgRGljdCBfZCkgZWxzZSAobGV0IG1ldGhvZCcgPSAobGFzdCAocGFydHMpKSBpbiBsZXQgb2JqID0gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIi5cIik7IChyZXZlcnNlICgocmVzdCAoKHJldmVyc2UgKHBhcnRzKSkpKSkpXSkgaW4gKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwibWV0aG9kXCIgbWV0aG9kJzsgSGFzaHRibC5yZXBsYWNlIF9kIFwib2JqZWN0XCIgb2JqOyBEaWN0IF9kKSkpKVxuXG4oKiBmb3JlaWduLWNoZWNrLWFyZ3MgKilcbmFuZCBmb3JlaWduX2NoZWNrX2FyZ3MgbmFtZSBwYXJhbXMgYXJncyA9XG4gIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhcmFtcykpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImZvcmVpZ24gXCIpOyBuYW1lOyAoU3RyaW5nIFwiOiBleHBlY3RlZCBcIik7IChsZW4gKHBhcmFtcykpOyAoU3RyaW5nIFwiIGFyZ3MsIGdvdCBcIik7IChsZW4gKGFyZ3MpKV0pKSkpKSBlbHNlIE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biBpIC0+IGlnbm9yZSAoKGxldCBzcGVjID0gKG50aCAocGFyYW1zKSAoaSkpIGluIGxldCB2YWwnID0gKG50aCAoYXJncykgKGkpKSBpbiBsZXQgZXhwZWN0ZWQgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInR5cGVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2V4cGVjdGVkOyAoU3RyaW5nIFwiYW55XCIpXSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAoZXhwZWN0ZWQpKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImZvcmVpZ24gXCIpOyBuYW1lOyAoU3RyaW5nIFwiOiBhcmcgJ1wiKTsgKGdldCAoc3BlYykgKChTdHJpbmcgXCJuYW1lXCIpKSk7IChTdHJpbmcgXCInIGV4cGVjdGVkIFwiKTsgZXhwZWN0ZWQ7IChTdHJpbmcgXCIsIGdvdCBcIik7ICh0eXBlX29mICh2YWwnKSldKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCJtaW5cIiBbKGxlbiAocGFyYW1zKSk7IChsZW4gKGFyZ3MpKV0pXSkpOyBOaWwpKVxuXG4oKiBmb3JlaWduLWJ1aWxkLWxhbWJkYSAqKVxuYW5kIGZvcmVpZ25fYnVpbGRfbGFtYmRhIHNwZWMgPVxuICAobGV0IG5hbWUgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgbW9kZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtzcGVjOyAoU3RyaW5nIFwicmV0dXJuc1wiKV0pKSB0aGVuIChsZXQgciA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicmV0dXJuc1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3I7IChTdHJpbmcgXCJwcm9taXNlXCIpXSkpIHRoZW4gKFN0cmluZyBcImFzeW5jXCIpIGVsc2UgKFN0cmluZyBcInN5bmNcIikpKSBlbHNlIChTdHJpbmcgXCJzeW5jXCIpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFttb2RlOyAoU3RyaW5nIFwiYXN5bmNcIildKSkgdGhlbiAoTGlzdCBbKFN5bWJvbCBcImZuXCIpOyAoTGlzdCBbKFN5bWJvbCBcIiZyZXN0XCIpOyAoU3ltYm9sIFwiX19mZmktYXJnc19fXCIpXSk7IChMaXN0IFsoU3ltYm9sIFwicGVyZm9ybVwiKTsgKExpc3QgWyhTeW1ib2wgXCJmb3JlaWduLWRpc3BhdGNoXCIpOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyBuYW1lXSk7IChTeW1ib2wgXCJfX2ZmaS1hcmdzX19cIildKV0pXSkgZWxzZSAoTGlzdCBbKFN5bWJvbCBcImZuXCIpOyAoTGlzdCBbKFN5bWJvbCBcIiZyZXN0XCIpOyAoU3ltYm9sIFwiX19mZmktYXJnc19fXCIpXSk7IChMaXN0IFsoU3ltYm9sIFwiZm9yZWlnbi1kaXNwYXRjaFwiKTsgKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgbmFtZV0pOyAoU3ltYm9sIFwiX19mZmktYXJnc19fXCIpXSldKSkpXG5cbigqIHNmLWRlZmluZS1mb3JlaWduICopXG5hbmQgc2ZfZGVmaW5lX2ZvcmVpZ24gYXJncyBlbnYgPVxuICAobGV0IG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKChmaXJzdCAoYXJncykpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGVsc2UgKGZpcnN0IChhcmdzKSkpIGluIGxldCBwYXJhbV9saXN0ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBzcGVjID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBzcGVjIChTdHJpbmcgXCJuYW1lXCIpIG5hbWUpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBzcGVjIChTdHJpbmcgXCJwYXJhbXNcIikgKGZvcmVpZ25fcGFyc2VfcGFyYW1zIChwYXJhbV9saXN0KSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yZWlnbl9wYXJzZV9rd2FyZ3NfYiAoc3BlYykgKChyZXN0ICgocmVzdCAoYXJncykpKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGZvcmVpZ25fcmVnaXN0ZXJfYiAobmFtZSkgKHNwZWMpKSkgaW4gc3BlYykpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lLWZvcmVpZ24gKilcbmFuZCBzdGVwX3NmX2RlZmluZV9mb3JlaWduIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHNwZWMgPSAoc2ZfZGVmaW5lX2ZvcmVpZ24gKGFyZ3MpIChlbnYpKSBpbiBsZXQgbmFtZSA9IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChhcmdzKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IGxhbWJkYV9leHByID0gKGZvcmVpZ25fYnVpbGRfbGFtYmRhIChzcGVjKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChsYW1iZGFfZXhwcikgKGVudikgKChrb250X3B1c2ggKChtYWtlX2RlZmluZV9mb3JlaWduX2ZyYW1lIChuYW1lKSAoc3BlYykgKGVudikpKSAoa29udCkpKSkpXG5cbigqIGZvcmVpZ24tZGlzcGF0Y2ggKilcbmFuZCBmb3JlaWduX2Rpc3BhdGNoIG5hbWUgYXJncyA9XG4gIChsZXQgc3BlYyA9IChmb3JlaWduX2xvb2t1cCAobmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChpc19uaWwgKHNwZWMpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJmb3JlaWduLWRpc3BhdGNoOiB1bmtub3duIGZvcmVpZ24gZnVuY3Rpb24gJ1wiKTsgbmFtZTsgKFN0cmluZyBcIidcIildKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0IHBhcmFtcyA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicGFyYW1zXCIpKSkgaW4gbGV0IGJpbmRpbmcgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcImpzXCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGZvcmVpZ25fY2hlY2tfYXJncyAobmFtZSkgKChpZiBzeF90cnV0aHkgKChpc19uaWwgKHBhcmFtcykpKSB0aGVuIChMaXN0IFtdKSBlbHNlIHBhcmFtcykpIChhcmdzKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGJpbmRpbmcpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJmb3JlaWduIFwiKTsgbmFtZTsgKFN0cmluZyBcIjogbm8gYmluZGluZyBmb3IgY3VycmVudCBwbGF0Zm9ybVwiKV0pKSkpKSBlbHNlIChsZXQgcmVzb2x2ZWQgPSAoZm9yZWlnbl9yZXNvbHZlX2JpbmRpbmcgKGJpbmRpbmcpKSBpbiBsZXQgb2JqX25hbWUgPSAoZ2V0IChyZXNvbHZlZCkgKChTdHJpbmcgXCJvYmplY3RcIikpKSBpbiBsZXQgbWV0aG9kJyA9IChnZXQgKHJlc29sdmVkKSAoKFN0cmluZyBcIm1ldGhvZFwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19wcmltaXRpdmUgKChTdHJpbmcgXCJob3N0LWNhbGxcIikpKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChvYmpfbmFtZSkpKSB0aGVuIChzeF9hcHBseSAoZ2V0X3ByaW1pdGl2ZSAoKFN0cmluZyBcImhvc3QtY2FsbFwiKSkpIChwcmltX2NhbGwgXCJjb25jYXRcIiBbKExpc3QgW05pbDsgbWV0aG9kJ10pOyBhcmdzXSkpIGVsc2UgKGxldCBvYmogPSAoY2VrX2NhbGwgKChnZXRfcHJpbWl0aXZlICgoU3RyaW5nIFwiaG9zdC1nbG9iYWxcIikpKSkgKExpc3QgW29ial9uYW1lXSkpIGluIChzeF9hcHBseSAoZ2V0X3ByaW1pdGl2ZSAoKFN0cmluZyBcImhvc3QtY2FsbFwiKSkpIChwcmltX2NhbGwgXCJjb25jYXRcIiBbKExpc3QgW29iajsgbWV0aG9kJ10pOyBhcmdzXSkpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJmb3JlaWduIFwiKTsgbmFtZTsgKFN0cmluZyBcIjogaG9zdC1jYWxsIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybVwiKV0pKSkpKSkpKSkpKSlcblxuKCogZm9yZWlnbi1wYXJzZS1wYXJhbXMtbG9vcCAqKVxuYW5kIGZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AgaXRlbXMgYWNjID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGl0ZW1zKSkpIHRoZW4gYWNjIGVsc2UgKGxldCBpdGVtID0gKGZpcnN0IChpdGVtcykpIGluIGxldCByZXN0X2l0ZW1zID0gKHJlc3QgKGl0ZW1zKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9pdGVtcykpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoa2V5d29yZF9wICgoZmlyc3QgKHJlc3RfaXRlbXMpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChmaXJzdCAocmVzdF9pdGVtcykpKSk7IChTdHJpbmcgXCJhc1wiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZXN0X2l0ZW1zKSk7IChOdW1iZXIgMi4wKV0pKSkpKSB0aGVuIChmb3JlaWduX3BhcnNlX3BhcmFtc19sb29wICgocmVzdCAoKHJlc3QgKHJlc3RfaXRlbXMpKSkpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFthY2M7IChMaXN0IFsobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChpdGVtKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChpdGVtKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2l0ZW1dKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJ0eXBlXCIgKGxldCB0ID0gKG50aCAocmVzdF9pdGVtcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChrZXl3b3JkX3AgKHQpKSkgdGhlbiAoa2V5d29yZF9uYW1lICh0KSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW3RdKSkpKTsgRGljdCBfZCldKV0pKSkgZWxzZSAoZm9yZWlnbl9wYXJzZV9wYXJhbXNfbG9vcCAocmVzdF9pdGVtcykgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbYWNjOyAoTGlzdCBbKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiYW55XCI7IGNmX2VudiA9IE5pbDsgY2ZfbmFtZSA9IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoaXRlbSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoaXRlbSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtpdGVtXSkpKTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXSldKSkpKSkpXG5cbigqIHN0ZXAtc2YtaW8gKilcbmFuZCBzdGVwX3NmX2lvIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgaW9fYXJncyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaW9fcmVnaXN0ZXJlZF9wIChuYW1lKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImlvOiB1bmtub3duIG9wZXJhdGlvbiAnXCIpOyBuYW1lOyAoU3RyaW5nIFwiJyDigJQgbm90IGluICppby1yZWdpc3RyeSpcIildKSkpKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChjb25zICgoU3ltYm9sIFwicGVyZm9ybVwiKSkgKChMaXN0IFsobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJhcmdzXCIgaW9fYXJnczsgSGFzaHRibC5yZXBsYWNlIF9kIFwib3BcIiBuYW1lOyBEaWN0IF9kKV0pKSkpIChlbnYpIChrb250KSkpKVxuXG4oKiAqc3RyaWN0KiAqKVxuYW5kIF9zdHJpY3RfcmVmID0gcmVmIChCb29sIGZhbHNlKVxuYW5kIF9zdHJpY3RfID1cbiAgKEJvb2wgZmFsc2UpXG5cbigqIHNldC1zdHJpY3QhICopXG5hbmQgc2V0X3N0cmljdF9iIHZhbCcgPVxuICAoX3N0cmljdF9yZWYgOj0gdmFsJzsgTmlsKVxuXG4oKiAqcHJpbS1wYXJhbS10eXBlcyogKilcbmFuZCBfcHJpbV9wYXJhbV90eXBlc19yZWYgPSByZWYgTmlsXG5hbmQgX3ByaW1fcGFyYW1fdHlwZXNfID1cbiAgTmlsXG5cbigqIHNldC1wcmltLXBhcmFtLXR5cGVzISAqKVxuYW5kIHNldF9wcmltX3BhcmFtX3R5cGVzX2IgdHlwZXMgPVxuICAoX3ByaW1fcGFyYW1fdHlwZXNfcmVmIDo9IHR5cGVzOyBOaWwpXG5cbigqIHZhbHVlLW1hdGNoZXMtdHlwZT8gKilcbmFuZCB2YWx1ZV9tYXRjaGVzX3R5cGVfcCB2YWwnIGV4cGVjdGVkX3R5cGUgPVxuICAobGV0IF9tYXRjaF92YWwgPSBleHBlY3RlZF90eXBlIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJhbnlcIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJudW1iZXJcIildKSkgdGhlbiAobnVtYmVyX3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzdHJpbmdcIildKSkgdGhlbiAoc3RyaW5nX3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJib29sZWFuXCIpXSkpIHRoZW4gKGJvb2xlYW5fcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm5pbFwiKV0pKSB0aGVuIChpc19uaWwgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKGxpc3RfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRpY3RcIildKSkgdGhlbiAoZGljdF9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGFtYmRhXCIpXSkpIHRoZW4gKGlzX2xhbWJkYSAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzdHJpbmdfcCAoZXhwZWN0ZWRfdHlwZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJlbmRzLXdpdGg/XCIgW2V4cGVjdGVkX3R5cGU7IChTdHJpbmcgXCI/XCIpXSkpKSB0aGVuIChsZXQgX29yID0gKGlzX25pbCAodmFsJykpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpICgocHJpbV9jYWxsIFwic2xpY2VcIiBbZXhwZWN0ZWRfdHlwZTsgKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiLVwiIFsocHJpbV9jYWxsIFwic3RyaW5nLWxlbmd0aFwiIFtleHBlY3RlZF90eXBlXSk7IChOdW1iZXIgMS4wKV0pXSkpKSkgZWxzZSAoQm9vbCB0cnVlKSkpKSkpKSkpKSkpKVxuXG4oKiBzdHJpY3QtY2hlY2stYXJncyAqKVxuYW5kIHN0cmljdF9jaGVja19hcmdzIG5hbWUgYXJncyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAhX3ByaW1fcGFyYW1fdHlwZXNfcmVmKSkgdGhlbiAobGV0IHNwZWMgPSAoZ2V0ICghX3ByaW1fcGFyYW1fdHlwZXNfcmVmKSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKHNwZWMpIHRoZW4gKGxldCBwb3NpdGlvbmFsID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJwb3NpdGlvbmFsXCIpKSkgaW4gbGV0IHJlc3RfdHlwZSA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicmVzdC10eXBlXCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAocG9zaXRpb25hbCkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgaWR4ID0gKGZpcnN0IChwYWlyKSkgaW4gbGV0IHBhcmFtID0gKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpIGluIGxldCBwX25hbWUgPSAoZmlyc3QgKHBhcmFtKSkgaW4gbGV0IHBfdHlwZSA9IChudGggKHBhcmFtKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbaWR4OyAobGVuIChhcmdzKSldKSkgdGhlbiAobGV0IHZhbCcgPSAobnRoIChhcmdzKSAoaWR4KSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpIChwX3R5cGUpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVHlwZSBlcnJvcjogXCIpOyBuYW1lOyAoU3RyaW5nIFwiIGV4cGVjdGVkIFwiKTsgcF90eXBlOyAoU3RyaW5nIFwiIGZvciBwYXJhbSBcIik7IHBfbmFtZTsgKFN0cmluZyBcIiwgZ290IFwiKTsgKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcIiAoXCIpOyAoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSk7IChTdHJpbmcgXCIpXCIpXSkpKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHAgLT4gbGV0IGkgPSBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSBpbiAoTGlzdCBbaTsgcF0pKSAoc3hfdG9fbGlzdCBwb3NpdGlvbmFsKSkpKTsgTmlsKSBlbHNlIE5pbCkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHJlc3RfdHlwZSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKChsZXQgX29yID0gcG9zaXRpb25hbCBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKExpc3QgW10pKSkpXSkpKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGxldCBpZHggPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgdmFsJyA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKHJlc3RfdHlwZSkpKSkpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJUeXBlIGVycm9yOiBcIik7IG5hbWU7IChTdHJpbmcgXCIgZXhwZWN0ZWQgXCIpOyByZXN0X3R5cGU7IChTdHJpbmcgXCIgZm9yIHJlc3QgYXJnIFwiKTsgaWR4OyAoU3RyaW5nIFwiLCBnb3QgXCIpOyAodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwiIChcIik7IChTdHJpbmcgKHN4X3N0ciBbdmFsJ10pKTsgKFN0cmluZyBcIilcIildKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHYgLT4gbGV0IGkgPSBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSBpbiAoTGlzdCBbaTsgdl0pKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKGxlbiAoKGxldCBfb3IgPSBwb3NpdGlvbmFsIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoTGlzdCBbXSkpKSldKSkpKSk7IE5pbCkgZWxzZSBOaWwpKSkgZWxzZSBOaWwpKSBlbHNlIE5pbClcblxuKCogYmluZC1sYW1iZGEtcGFyYW1zICopXG5hbmQgYmluZF9sYW1iZGFfcGFyYW1zIHBhcmFtcyBhcmdzIGxvY2FsID1cbiAgKGxldCByZXN0X2lkeCA9IChwcmltX2NhbGwgXCJpbmRleC1vZlwiIFtwYXJhbXM7IChTdHJpbmcgXCImcmVzdFwiKV0pIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChudW1iZXJfcCAocmVzdF9pZHgpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFtyZXN0X2lkeDsgKGxlbiAocGFyYW1zKSldKSkpIHRoZW4gKGxldCBwb3NpdGlvbmFsID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3BhcmFtczsgKE51bWJlciAwLjApOyByZXN0X2lkeF0pIGluIGxldCByZXN0X25hbWUgPSAobnRoIChwYXJhbXMpICgocHJpbV9jYWxsIFwiK1wiIFtyZXN0X2lkeDsgKE51bWJlciAxLjApXSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yX2VhY2hfaW5kZXhlZCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2k7IHBdIC0+IChmdW4gaSBwIC0+IChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgW2k7IChsZW4gKGFyZ3MpKV0pKSB0aGVuIChudGggKGFyZ3MpIChpKSkgZWxzZSBOaWwpKSkgaSBwIHwgXyAtPiBOaWwpKSkgKHBvc2l0aW9uYWwpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcmVzdF9uYW1lKSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IHJlc3RfaWR4XSkpIHRoZW4gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IHJlc3RfaWR4XSkgZWxzZSAoTGlzdCBbXSkpKSkgaW4gKEJvb2wgdHJ1ZSkpKSkgZWxzZSAoQm9vbCBmYWxzZSkpKVxuXG4oKiBjYWxsLWxhbWJkYSAqKVxuYW5kIGNhbGxfbGFtYmRhIGYgYXJncyBjYWxsZXJfZW52ID1cbiAgKGxldCBwYXJhbXMgPSAobGFtYmRhX3BhcmFtcyAoZikpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChsYW1iZGFfY2xvc3VyZSAoZikpKSAoY2FsbGVyX2VudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGJpbmRfbGFtYmRhX3BhcmFtcyAocGFyYW1zKSAoYXJncykgKGxvY2FsKSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGFyZ3MpKTsgKGxlbiAocGFyYW1zKSldKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhsZXQgX29yID0gKGxhbWJkYV9uYW1lIChmKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChTdHJpbmcgXCJsYW1iZGFcIikpOyAoU3RyaW5nIFwiIGV4cGVjdHMgXCIpOyAobGVuIChwYXJhbXMpKTsgKFN0cmluZyBcIiBhcmdzLCBnb3QgXCIpOyAobGVuIChhcmdzKSldKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChmaXJzdCAocGFpcikpKSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFtwYXJhbXM7IGFyZ3NdKSk7IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgTmlsKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJzbGljZVwiIFtwYXJhbXM7IChsZW4gKGFyZ3MpKV0pKTsgTmlsKSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChsYW1iZGFfYm9keSAoZikpKSAobG9jYWwpKSkpXG5cbigqIGNhbGwtY29tcG9uZW50ICopXG5hbmQgY2FsbF9jb21wb25lbnQgY29tcCByYXdfYXJncyBlbnYgPVxuICAobGV0IHBhcnNlZCA9IChwYXJzZV9rZXl3b3JkX2FyZ3MgKHJhd19hcmdzKSAoZW52KSkgaW4gbGV0IGt3YXJncyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGNoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGNvbXBvbmVudF9jbG9zdXJlIChjb21wKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChsZXQgX29yID0gKGRpY3RfZ2V0IChrd2FyZ3MpIChwKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKGNvbXBvbmVudF9wYXJhbXMgKGNvbXApKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChjb21wb25lbnRfaGFzX2NoaWxkcmVuIChjb21wKSkpIHRoZW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKFN0cmluZyBcImNoaWxkcmVuXCIpKSBjaGlsZHJlbikgZWxzZSBOaWwpKSBpbiAobWFrZV90aHVuayAoKGNvbXBvbmVudF9ib2R5IChjb21wKSkpIChsb2NhbCkpKSkpXG5cbigqIHBhcnNlLWtleXdvcmQtYXJncyAqKVxuYW5kIHBhcnNlX2tleXdvcmRfYXJncyByYXdfYXJncyBlbnYgPVxuICAobGV0IGt3YXJncyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gbGV0IGNoaWxkcmVuID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBpID0gKE51bWJlciAwLjApIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0LmZvbGRfbGVmdCAoZnVuIHN0YXRlIGFyZyAtPiAobGV0IGlkeCA9IChnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKSBpbiBsZXQgc2tpcCA9IChnZXQgKHN0YXRlKSAoKFN0cmluZyBcInNraXBcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChza2lwKSB0aGVuIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIGZhbHNlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChhcmcpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pOyAobGVuIChyYXdfYXJncykpXSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGt3YXJncyAoa2V5d29yZF9uYW1lIChhcmcpKSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocmF3X2FyZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pKSkpIChlbnYpKSkpKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgdHJ1ZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pXSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGNoaWxkcmVuIDo9IHN4X2FwcGVuZF9iICFjaGlsZHJlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoYXJnKSAoZW52KSkpKTsgTmlsKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKV0pKSkpKSkgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcImlcIikpIChOdW1iZXIgMC4wKTsgSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInNraXBcIikpIChCb29sIGZhbHNlKTsgIERpY3QgX2QpIChzeF90b19saXN0IHJhd19hcmdzKSkpIGluIChMaXN0IFtrd2FyZ3M7ICFjaGlsZHJlbl0pKSlcblxuKCogY29uZC1zY2hlbWU/ICopXG5hbmQgY29uZF9zY2hlbWVfcCBjbGF1c2VzID1cbiAgKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIGMgLT4gc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYykpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYykpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYykpOyAoTnVtYmVyIDMuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKChudGggKGMpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiPT5cIildKSkpKSkpKSAoc3hfdG9fbGlzdCBjbGF1c2VzKSkpXG5cbigqIGlzLWVsc2UtY2xhdXNlPyAqKVxuYW5kIGlzX2Vsc2VfY2xhdXNlIHRlc3QgPVxuICAobGV0IF9vciA9IChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh0ZXN0KSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAodGVzdCkpOyAoU3RyaW5nIFwiZWxzZVwiKV0pKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHRlc3QpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCJlbHNlXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAodGVzdCkpOyAoU3RyaW5nIFwiOmVsc2VcIildKSkpKVxuXG4oKiBzZi1uYW1lZC1sZXQgKilcbmFuZCBzZl9uYW1lZF9sZXQgYXJncyBlbnYgPVxuICAobGV0IGxvb3BfbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBpbiBsZXQgYmluZGluZ3MgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHkgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAyLjApXSkgaW4gbGV0IHBhcmFtcyA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgaW5pdHMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIGJpbmRpbmcgLT4gaWdub3JlICgobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGJpbmRpbmcpKSk7IE5pbCkpIGluIChpbml0cyA6PSBzeF9hcHBlbmRfYiAhaW5pdHMgKG50aCAoYmluZGluZykgKChOdW1iZXIgMS4wKSkpOyBOaWwpKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSBlbHNlIChMaXN0LmZvbGRfbGVmdCAoZnVuIF9hY2MgcGFpcl9pZHggLT4gKGxldCAoKSA9IGlnbm9yZSAoKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKSBlbHNlIChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpOyBOaWwpKSBpbiAoaW5pdHMgOj0gc3hfYXBwZW5kX2IgIWluaXRzIChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFsocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSldKSkpOyBOaWwpKSkgTmlsIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCIvXCIgWyhsZW4gKGJpbmRpbmdzKSk7IChOdW1iZXIgMi4wKV0pXSkpKSkpIGluIChsZXQgbG9vcF9ib2R5ID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keSkpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAoZmlyc3QgKGJvZHkpKSBlbHNlIChjb25zICgobWFrZV9zeW1ib2wgKChTdHJpbmcgXCJiZWdpblwiKSkpKSAoYm9keSkpKSBpbiBsZXQgbG9vcF9mbiA9IChtYWtlX2xhbWJkYSAoIXBhcmFtcykgKGxvb3BfYm9keSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzZXRfbGFtYmRhX25hbWUgbG9vcF9mbiAoc3hfdG9fc3RyaW5nIGxvb3BfbmFtZSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgKGxhbWJkYV9jbG9zdXJlIChsb29wX2ZuKSkgKHN4X3RvX3N0cmluZyBsb29wX25hbWUpIGxvb3BfZm4pKSBpbiAobGV0IGluaXRfdmFscyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGUgLT4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChlbnYpKSkpKSAoc3hfdG9fbGlzdCAhaW5pdHMpKSkgaW4gKGNla19jYWxsIChsb29wX2ZuKSAoaW5pdF92YWxzKSkpKSkpKSlcblxuKCogc2YtbGFtYmRhICopXG5hbmQgc2ZfbGFtYmRhIGFyZ3MgZW52ID1cbiAgKGxldCBwYXJhbXNfZXhwciA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5X2V4cHJzID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHlfZXhwcnMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGZpcnN0IChib2R5X2V4cHJzKSkgZWxzZSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiYmVnaW5cIikpKSkgKGJvZHlfZXhwcnMpKSkgaW4gbGV0IHBhcmFtX25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gcCAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiYXNcIildKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgZWxzZSBwKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKSkpIGluIChtYWtlX2xhbWJkYSAocGFyYW1fbmFtZXMpIChib2R5KSAoZW52KSkpXG5cbigqIHNmLWRlZmNvbXAgKilcbmFuZCBzZl9kZWZjb21wIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwYXJhbXNfcmF3ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKGxhc3QgKGFyZ3MpKSBpbiBsZXQgY29tcF9uYW1lID0gKHN0cmlwX3ByZWZpeCAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoKFN0cmluZyBcIn5cIikpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX2NvbXBfcGFyYW1zIChwYXJhbXNfcmF3KSkgaW4gbGV0IHBhcmFtcyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGhhc19jaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBwYXJhbV90eXBlcyA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMi4wKSkpIGluIGxldCBhZmZpbml0eSA9IChkZWZjb21wX2t3YXJnIChhcmdzKSAoKFN0cmluZyBcImFmZmluaXR5XCIpKSAoKFN0cmluZyBcImF1dG9cIikpKSBpbiAobGV0IGNvbXAgPSAobWFrZV9jb21wb25lbnQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpIChhZmZpbml0eSkpIGluIGxldCBlZmZlY3RzID0gKGRlZmNvbXBfa3dhcmcgKGFyZ3MpICgoU3RyaW5nIFwiZWZmZWN0c1wiKSkgKE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAocGFyYW1fdHlwZXMpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKHByaW1fY2FsbCBcImtleXNcIiBbcGFyYW1fdHlwZXNdKSkpKSkpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiAoY29tcCkgKHBhcmFtX3R5cGVzKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKGVmZmVjdHMpKSkpKSkpIHRoZW4gKGxldCBlZmZlY3RfbGlzdCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlZmZlY3RzKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2VdKSkpKSAoc3hfdG9fbGlzdCBlZmZlY3RzKSkpIGVsc2UgKExpc3QgWyhTdHJpbmcgKHN4X3N0ciBbZWZmZWN0c10pKV0pKSBpbiBsZXQgZWZmZWN0X2FubnMgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkpIHRoZW4gKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpIGVsc2UgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZWZmZWN0X2FubnMgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpIGVmZmVjdF9saXN0KSkgaW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkgZWZmZWN0X2FubnMpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChjb21wKSAoKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBjb21wKSkgaW4gY29tcCkpKSkpKVxuXG4oKiBkZWZjb21wLWt3YXJnICopXG5hbmQgZGVmY29tcF9rd2FyZyBhcmdzIGtleSBkZWZhdWx0ID1cbiAgKGxldCBlbmQnID0gKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoZGVmYXVsdCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGkgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKGkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpIChpKSkpKTsga2V5XSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSk7IGVuZCddKSkpKSB0aGVuIChsZXQgdmFsJyA9IChudGggKGFyZ3MpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpIGluIChyZXN1bHQnIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkpIHRoZW4gKGtleXdvcmRfbmFtZSAodmFsJykpIGVsc2UgdmFsJyk7IE5pbCkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDIuMCk7IGVuZCc7IChOdW1iZXIgMS4wKV0pKTsgTmlsKSkgaW4gIXJlc3VsdCcpKVxuXG4oKiBwYXJzZS1jb21wLXBhcmFtcyAqKVxuYW5kIHBhcnNlX2NvbXBfcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHBhcmFtX3R5cGVzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gcmVmICgoQm9vbCBmYWxzZSkpIGluIGxldCBpbl9rZXkgPSByZWYgKChCb29sIGZhbHNlKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocCkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJhc1wiKV0pKSkpKSkgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgaW4gbGV0IHB0eXBlID0gKG50aCAocCkgKChOdW1iZXIgMi4wKSkpIGluIChsZXQgdHlwZV92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocHR5cGUpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocHR5cGUpKSBlbHNlIHB0eXBlKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCFoYXNfY2hpbGRyZW4pKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpKSBpbiAoc3hfZGljdF9zZXRfYiBwYXJhbV90eXBlcyBuYW1lIHR5cGVfdmFsKSkgZWxzZSBOaWwpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChwKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZrZXlcIildKSkgdGhlbiAoaW5fa2V5IDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZyZXN0XCIpXSkpIHRoZW4gKGhhc19jaGlsZHJlbiA6PSAoQm9vbCB0cnVlKTsgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCImY2hpbGRyZW5cIildKSkgdGhlbiAoaGFzX2NoaWxkcmVuIDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoIWhhc19jaGlsZHJlbikgdGhlbiBOaWwgZWxzZSAoaWYgc3hfdHJ1dGh5ICghaW5fa2V5KSB0aGVuIChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpIGVsc2UgKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIG5hbWU7IE5pbCkpKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKTsgTmlsKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFoYXNfY2hpbGRyZW47IHBhcmFtX3R5cGVzXSkpKVxuXG4oKiBzZi1kZWZpc2xhbmQgKilcbmFuZCBzZl9kZWZpc2xhbmQgYXJncyBlbnYgPVxuICAobGV0IG5hbWVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHBhcmFtc19yYXcgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHlfZXhwcnMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAyLjApXSkgaW4gbGV0IGJvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5X2V4cHJzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keV9leHBycykpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5X2V4cHJzKSkpIGluIGxldCBjb21wX25hbWUgPSAoc3RyaXBfcHJlZml4ICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpICgoU3RyaW5nIFwiflwiKSkpIGluIGxldCBwYXJzZWQgPSAocGFyc2VfY29tcF9wYXJhbXMgKHBhcmFtc19yYXcpKSBpbiBsZXQgcGFyYW1zID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBpc2xhbmQgPSAobWFrZV9pc2xhbmQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChpc2xhbmQpICgoZW52X2dldCAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpIGlzbGFuZCkpIGluIGlzbGFuZCkpKSlcblxuKCogZGVmaW8tcGFyc2Uta3dhcmdzISAqKVxuYW5kIGRlZmlvX3BhcnNlX2t3YXJnc19iIHNwZWMgcmVtYWluaW5nID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZW1haW5pbmcpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGtleXdvcmRfcCAoKGZpcnN0IChyZW1haW5pbmcpKSkpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Igc3BlYyAoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlbWFpbmluZykpKSkgKG50aCAocmVtYWluaW5nKSAoKE51bWJlciAxLjApKSkpKSBpbiAoZGVmaW9fcGFyc2Vfa3dhcmdzX2IgKHNwZWMpICgocmVzdCAoKHJlc3QgKHJlbWFpbmluZykpKSkpKSkgZWxzZSBOaWwpXG5cbigqIHNmLWRlZmlvICopXG5hbmQgc2ZfZGVmaW8gYXJncyBlbnYgPVxuICAobGV0IG5hbWUgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgc3BlYyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Igc3BlYyAoU3RyaW5nIFwibmFtZVwiKSBuYW1lKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGRlZmlvX3BhcnNlX2t3YXJnc19iIChzcGVjKSAoKHJlc3QgKGFyZ3MpKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaW9fcmVnaXN0ZXJfYiAobmFtZSkgKHNwZWMpKSkgaW4gc3BlYykpKSlcblxuKCogc2YtZGVmbWFjcm8gKilcbmFuZCBzZl9kZWZtYWNybyBhcmdzIGVudiA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcGFyYW1zX3JhdyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX21hY3JvX3BhcmFtcyAocGFyYW1zX3JhdykpIGluIGxldCBwYXJhbXMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCByZXN0X3BhcmFtID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBtYWMgPSAobWFrZV9tYWNybyAocGFyYW1zKSAocmVzdF9wYXJhbSkgKGJvZHkpIChlbnYpICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBtYWMpKSBpbiBtYWMpKSlcblxuKCogcGFyc2UtbWFjcm8tcGFyYW1zICopXG5hbmQgcGFyc2VfbWFjcm9fcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHJlc3RfcGFyYW0gPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgcCAtPiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChwKSk7IChTdHJpbmcgXCImcmVzdFwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpbi1yZXN0XCIpOyAoQm9vbCB0cnVlKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaW4tcmVzdFwiKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChyZXN0X3BhcmFtIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHApKSBlbHNlIHApOyBOaWwpKSBpbiBzdGF0ZSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocCkpIGVsc2UgcCk7IE5pbCkpIGluIHN0YXRlKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMSBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaW4tcmVzdFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgcGFyYW1zX2V4cHIpKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFyZXN0X3BhcmFtXSkpKVxuXG4oKiBxcS1leHBhbmQgKilcbmFuZCBxcV9leHBhbmQgdGVtcGxhdGUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVtcGxhdGUpKTsgKFN0cmluZyBcImxpc3RcIildKSkpKSkpIHRoZW4gdGVtcGxhdGUgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAodGVtcGxhdGUpKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAobGV0IGhlYWQgPSAoZmlyc3QgKHRlbXBsYXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoaGVhZCkpOyAoU3RyaW5nIFwidW5xdW90ZVwiKV0pKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAodGVtcGxhdGUpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biByZXN1bHQnIGl0ZW0gLT4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGl0ZW0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChpdGVtKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGl0ZW0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKChmaXJzdCAoaXRlbSkpKSk7IChTdHJpbmcgXCJzcGxpY2UtdW5xdW90ZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKChmaXJzdCAoaXRlbSkpKSk7IChTdHJpbmcgXCJ1bnF1b3RlLXNwbGljaW5nXCIpXSkpKSkpKSB0aGVuIChsZXQgc3BsaWNlZCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChpdGVtKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChzcGxpY2VkKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcImNvbmNhdFwiIFtyZXN1bHQnOyBzcGxpY2VkXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzcGxpY2VkKSkpIHRoZW4gcmVzdWx0JyBlbHNlIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0JzsgKExpc3QgW3NwbGljZWRdKV0pKSkpIGVsc2UgKHByaW1fY2FsbCBcImNvbmNhdFwiIFtyZXN1bHQnOyAoTGlzdCBbKHFxX2V4cGFuZCAoaXRlbSkgKGVudikpXSldKSkpIChMaXN0IFtdKSAoc3hfdG9fbGlzdCB0ZW1wbGF0ZSkpKSkpKVxuXG4oKiBzZi1sZXRyZWMgKilcbmFuZCBzZl9sZXRyZWMgYXJncyBlbnYgPVxuICAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiBsZXQgbmFtZXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHZhbF9leHBycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gYmluZGluZyAtPiBpZ25vcmUgKChsZXQgdm5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChiaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAoYmluZGluZykpKSBpbiAobGV0ICgpID0gaWdub3JlICgobmFtZXMgOj0gc3hfYXBwZW5kX2IgIW5hbWVzIHZuYW1lOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgodmFsX2V4cHJzIDo9IHN4X2FwcGVuZF9iICF2YWxfZXhwcnMgKG50aCAoYmluZGluZykgKChOdW1iZXIgMS4wKSkpOyBOaWwpKSBpbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyB2bmFtZSkgTmlsKSkpKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSBlbHNlIChMaXN0LmZvbGRfbGVmdCAoZnVuIF9hY2MgcGFpcl9pZHggLT4gKGxldCB2bmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKSBlbHNlIChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpIGluIGxldCB2YWxfZXhwciA9IChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFsocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSldKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChuYW1lcyA6PSBzeF9hcHBlbmRfYiAhbmFtZXMgdm5hbWU7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2YWxfZXhwcnMgOj0gc3hfYXBwZW5kX2IgIXZhbF9leHBycyB2YWxfZXhwcjsgTmlsKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgdm5hbWUpIE5pbCkpKSkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0IHZhbHVlcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGUgLT4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChsb2NhbCkpKSkpIChzeF90b19saXN0ICF2YWxfZXhwcnMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbIW5hbWVzOyB2YWx1ZXNdKSk7IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biB2YWwnIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAodmFsJykpKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBuIC0+IGlnbm9yZSAoKGVudl9iaW5kIChsYW1iZGFfY2xvc3VyZSAodmFsJykpIChzeF90b19zdHJpbmcgbikgKGVudl9nZXQgKGxvY2FsKSAobikpKSkpIChzeF90b19saXN0ICFuYW1lcyk7IE5pbCkgZWxzZSBOaWwpKSkgKHN4X3RvX2xpc3QgdmFsdWVzKTsgTmlsKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAobG9jYWwpKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW2JvZHk7IChOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcImRlY1wiIFsobGVuIChib2R5KSldKV0pKTsgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChsYXN0IChib2R5KSkpIChsb2NhbCkpKSkpKVxuXG4oKiBjYWxsLXdpdGgtdmFsdWVzICopXG5hbmQgY2FsbF93aXRoX3ZhbHVlcyBwcm9kdWNlciBjb25zdW1lciA9XG4gIChsZXQgcmVzdWx0JyA9IChzeF9hcHBseSBwcm9kdWNlciAoTGlzdCBbXSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHJlc3VsdCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl92YWx1ZXNcIikpKSkpIHRoZW4gKHN4X2FwcGx5IGNvbnN1bWVyIChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwiX2xpc3RcIikpKSkgZWxzZSAoc3hfYXBwbHkgY29uc3VtZXIgKExpc3QgW3Jlc3VsdCddKSkpKVxuXG4oKiBzZi1sZXQtdmFsdWVzICopXG5hbmQgc2ZfbGV0X3ZhbHVlcyBhcmdzIGVudiA9XG4gIChsZXQgY2xhdXNlcyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGNsYXVzZSAtPiBpZ25vcmUgKChsZXQgbmFtZXMgPSAoZmlyc3QgKGNsYXVzZSkpIGluIGxldCB2YWxfZXhwciA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIChsZXQgcmVzdWx0JyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICh2YWxfZXhwcikgKGxvY2FsKSkpKSBpbiAobGV0IHZzID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGRpY3RfcCAocmVzdWx0JykpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwiX3ZhbHVlc1wiKSkpKSkgdGhlbiAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl9saXN0XCIpKSkgZWxzZSAoTGlzdCBbcmVzdWx0J10pKSBpbiAoZm9yX2VhY2hfaW5kZXhlZCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2lkeDsgbmFtZV0gLT4gKGZ1biBpZHggbmFtZSAtPiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWUpKSkgKG50aCAodnMpIChpZHgpKSkpIGlkeCBuYW1lIHwgXyAtPiBOaWwpKSkgKG5hbWVzKSkpKSkpKSAoc3hfdG9fbGlzdCBjbGF1c2VzKTsgTmlsKSkgaW4gKGxldCBsYXN0X3ZhbCA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKChsYXN0X3ZhbCA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGxvY2FsKSkpKTsgTmlsKSkpIChzeF90b19saXN0IGJvZHkpOyBOaWwpKSBpbiAhbGFzdF92YWwpKSkpXG5cbigqIHNmLWRlZmluZS12YWx1ZXMgKilcbmFuZCBzZl9kZWZpbmVfdmFsdWVzIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lcyA9IChmaXJzdCAoYXJncykpIGluIGxldCB2YWxfZXhwciA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IHJlc3VsdCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodmFsX2V4cHIpIChlbnYpKSkpIGluIChsZXQgdnMgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChyZXN1bHQnKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAocmVzdWx0JykgKChTdHJpbmcgXCJfdmFsdWVzXCIpKSkpKSB0aGVuIChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwiX2xpc3RcIikpKSBlbHNlIChMaXN0IFtyZXN1bHQnXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JfZWFjaF9pbmRleGVkICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbaWR4OyBuYW1lXSAtPiAoZnVuIGlkeCBuYW1lIC0+IChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWUpKSkgKG50aCAodnMpIChpZHgpKSkpIGlkeCBuYW1lIHwgXyAtPiBOaWwpKSkgKG5hbWVzKSkpIGluIE5pbCkpKSlcblxuKCogc3RlcC1zZi1sZXRyZWMgKilcbmFuZCBzdGVwX3NmX2xldHJlYyBhcmdzIGVudiBrb250ID1cbiAgKGxldCB0aGsgPSAoc2ZfbGV0cmVjIChhcmdzKSAoZW52KSkgaW4gKG1ha2VfY2VrX3N0YXRlICgodGh1bmtfZXhwciAodGhrKSkpICgodGh1bmtfZW52ICh0aGspKSkgKGtvbnQpKSlcblxuKCogc3RlcC1zZi1keW5hbWljLXdpbmQgKilcbmFuZCBzdGVwX3NmX2R5bmFtaWNfd2luZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBiZWZvcmUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBib2R5ID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGFmdGVyID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGNla19jYWxsIChiZWZvcmUpICgoTGlzdCBbXSkpKSkgaW4gKGxldCB3aW5kZXJzX2xlbiA9IChsZW4gKCFfd2luZGVyc19yZWYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoX3dpbmRlcnNfcmVmIDo9IChjb25zIChhZnRlcikgKCFfd2luZGVyc19yZWYpKTsgTmlsKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoYm9keSkgKChMaXN0IFtdKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3dpbmRfYWZ0ZXJfZnJhbWUgKGFmdGVyKSAod2luZGVyc19sZW4pIChlbnYpKSkgKGtvbnQpKSkpKSkpKVxuXG4oKiBzZi1zY29wZSAqKVxuYW5kIHNmX3Njb3BlIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgcmVzdCA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgdmFsJyA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keV9leHBycyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdCkpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChyZXN0KSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlc3QpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh2YWwnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0KSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpOyBOaWwpKSBpbiAoYm9keV9leHBycyA6PSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVzdDsgKE51bWJlciAyLjApXSk7IE5pbCkpIGVsc2UgKGJvZHlfZXhwcnMgOj0gcmVzdDsgTmlsKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChuYW1lKSAoIXZhbCcpKSkgaW4gKGxldCByZXN1bHQnID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBlIC0+IGlnbm9yZSAoKHJlc3VsdCcgOj0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChlbnYpKSkpOyBOaWwpKSkgKHN4X3RvX2xpc3QgIWJvZHlfZXhwcnMpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChuYW1lKSkpIGluICFyZXN1bHQnKSkpKSkpXG5cbigqIHNmLXByb3ZpZGUgKilcbmFuZCBzZl9wcm92aWRlIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBib2R5X2V4cHJzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMi4wKV0pIGluIGxldCByZXN1bHQnID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChuYW1lKSAodmFsJykpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKChyZXN1bHQnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAoZW52KSkpKTsgTmlsKSkpIChzeF90b19saXN0IGJvZHlfZXhwcnMpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChuYW1lKSkpIGluICFyZXN1bHQnKSkpKVxuXG4oKiBleHBhbmQtbWFjcm8gKilcbmFuZCBleHBhbmRfbWFjcm8gbWFjIHJhd19hcmdzIGVudiA9XG4gIChsZXQgYm9keSA9IChtYWNyb19ib2R5IChtYWMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKGJvZHkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKGJvZHkpKTsgKFN0cmluZyBcIl9fc3ludGF4LXJ1bGVzLWJvZHlfX1wiKV0pKSkgdGhlbiAobGV0IGNsb3N1cmUgPSAobWFjcm9fY2xvc3VyZSAobWFjKSkgaW4gKHN5bnRheF9ydWxlc19leHBhbmQgKChlbnZfZ2V0IChjbG9zdXJlKSAoKFN0cmluZyBcIl9fc3ItbGl0ZXJhbHNcIikpKSkgKChlbnZfZ2V0IChjbG9zdXJlKSAoKFN0cmluZyBcIl9fc3ItcnVsZXNcIikpKSkgKHJhd19hcmdzKSkpIGVsc2UgKGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChtYWNyb19jbG9zdXJlIChtYWMpKSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgWyhudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKTsgKGxlbiAocmF3X2FyZ3MpKV0pKSB0aGVuIChudGggKHJhd19hcmdzKSAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHAgLT4gbGV0IGkgPSBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSBpbiAoTGlzdCBbcDsgaV0pKSAoc3hfdG9fbGlzdCAobWFjcm9fcGFyYW1zIChtYWMpKSkpKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChtYWNyb19yZXN0X3BhcmFtIChtYWMpKSkgdGhlbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAobWFjcm9fcmVzdF9wYXJhbSAobWFjKSkpIChwcmltX2NhbGwgXCJzbGljZVwiIFtyYXdfYXJnczsgKGxlbiAoKG1hY3JvX3BhcmFtcyAobWFjKSkpKV0pKSBlbHNlIE5pbCkpIGluICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobWFjcm9fYm9keSAobWFjKSkpIChsb2NhbCkpKSkpKSkpKVxuXG4oKiBjZWstc3RlcC1sb29wICopXG5hbmQgY2VrX3N0ZXBfbG9vcCBzdGF0ZSA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGNla190ZXJtaW5hbF9wIChzdGF0ZSkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoY2VrX3N1c3BlbmRlZF9wIChzdGF0ZSkpKSkgdGhlbiBzdGF0ZSBlbHNlIChjZWtfc3RlcF9sb29wICgoY2VrX3N0ZXAgKHN0YXRlKSkpKSlcblxuKCogY2VrLXJ1biAqKVxuYW5kIGNla19ydW4gc3RhdGUgPVxuICAobGV0IGZpbmFsID0gKGNla19zdGVwX2xvb3AgKHN0YXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGNla19zdXNwZW5kZWRfcCAoZmluYWwpKSkgdGhlbiAobWF0Y2ggIV9jZWtfaW9fc3VzcGVuZF9ob29rIHdpdGggU29tZSBob29rIC0+IGhvb2sgZmluYWwgfCBOb25lIC0+IChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIpKSkpKSBlbHNlIChjZWtfdmFsdWUgKGZpbmFsKSkpKVxuXG4oKiBjZWstcmVzdW1lICopXG5hbmQgY2VrX3Jlc3VtZSBzdXNwZW5kZWRfc3RhdGUgcmVzdWx0JyA9XG4gIChjZWtfc3RlcF9sb29wICgobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpICgoY2VrX2VudiAoc3VzcGVuZGVkX3N0YXRlKSkpICgoY2VrX2tvbnQgKHN1c3BlbmRlZF9zdGF0ZSkpKSkpKVxuXG4oKiBjZWstc3RlcCAqKVxuYW5kIGNla19zdGVwIHN0YXRlID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGNla19waGFzZSAoc3RhdGUpKTsgKFN0cmluZyBcImV2YWxcIildKSkgdGhlbiAoc3RlcF9ldmFsIChzdGF0ZSkpIGVsc2UgKHN0ZXBfY29udGludWUgKHN0YXRlKSkpXG5cbigqIHN0ZXAtZXZhbCAqKVxuYW5kIHN0ZXBfZXZhbCBzdGF0ZSA9XG4gIChsZXQgZXhwciA9IChjZWtfY29udHJvbCAoc3RhdGUpKSBpbiBsZXQgZW52ID0gKGNla19lbnYgKHN0YXRlKSkgaW4gbGV0IGtvbnQgPSAoY2VrX2tvbnQgKHN0YXRlKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gKHR5cGVfb2YgKGV4cHIpKSBpbiAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJudW1iZXJcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGV4cHIpIChlbnYpIChrb250KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzdHJpbmdcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGV4cHIpIChlbnYpIChrb250KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJib29sZWFuXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibmlsXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzeW1ib2xcIikgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKGV4cHIpKSBpbiAobGV0IHZhbCcgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAobmFtZSkpKSB0aGVuIChlbnZfZ2V0IChlbnYpIChuYW1lKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfcHJpbWl0aXZlIChuYW1lKSkpIHRoZW4gKGdldF9wcmltaXRpdmUgKG5hbWUpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJ0cnVlXCIpXSkpIHRoZW4gKEJvb2wgdHJ1ZSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZmFsc2VcIildKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibmlsXCIpXSkpIHRoZW4gTmlsIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5kZWZpbmVkIHN5bWJvbDogXCIpOyBuYW1lXSkpKSkpKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX25pbCAodmFsJykpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbbmFtZTsgKFN0cmluZyBcIn5cIildKSkpIHRoZW4gKGRlYnVnX2xvZyAoKFN0cmluZyBcIkNvbXBvbmVudCBub3QgZm91bmQ6XCIpKSAobmFtZSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWwnKSAoZW52KSAoa29udCkpKSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwia2V5d29yZFwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGtleXdvcmRfbmFtZSAoZXhwcikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiZGljdFwiKSB0aGVuIChsZXQga3MgPSAocHJpbV9jYWxsIFwia2V5c1wiIFtleHByXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9rZXkgPSAoZmlyc3QgKGtzKSkgaW4gbGV0IHJlbWFpbmluZ19lbnRyaWVzID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrIC0+IGlnbm9yZSAoKHJlbWFpbmluZ19lbnRyaWVzIDo9IHN4X2FwcGVuZF9iICFyZW1haW5pbmdfZW50cmllcyAoTGlzdCBbazsgKGdldCAoZXhwcikgKGspKV0pOyBOaWwpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGtzKSkpOyBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChnZXQgKGV4cHIpIChmaXJzdF9rZXkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2RpY3RfZnJhbWUgKCFyZW1haW5pbmdfZW50cmllcykgKChMaXN0IFsoTGlzdCBbZmlyc3Rfa2V5XSldKSkgKGVudikpKSAoa29udCkpKSkpKSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibGlzdFwiKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoc3RlcF9ldmFsX2xpc3QgKGV4cHIpIChlbnYpIChrb250KSkpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpKSkpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLXJhaXNlICopXG5hbmQgc3RlcF9zZl9yYWlzZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3JhaXNlX2V2YWxfZnJhbWUgKGVudikgKChCb29sIGZhbHNlKSkpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1ndWFyZCAqKVxuYW5kIHN0ZXBfc2ZfZ3VhcmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgdmFyX2NsYXVzZXMgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgYm9keSA9IChyZXN0IChhcmdzKSkgaW4gbGV0IHZhciA9IChmaXJzdCAodmFyX2NsYXVzZXMpKSBpbiBsZXQgY2xhdXNlcyA9IChyZXN0ICh2YXJfY2xhdXNlcykpIGluIGxldCBzZW50aW5lbCA9IChwcmltX2NhbGwgXCJnZW5zeW1cIiBbKFN0cmluZyBcIl9fZ3VhcmQtcmVyYWlzZV9fXCIpXSkgaW4gKHN0ZXBfZXZhbF9saXN0ICgoTGlzdCBbKFN5bWJvbCBcImxldFwiKTsgKExpc3QgWyhMaXN0IFsoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIik7IChjb25zICgoU3ltYm9sIFwiY2FsbC9jY1wiKSkgKChMaXN0IFsoY29ucyAoKFN5bWJvbCBcImZuXCIpKSAoKGNvbnMgKChMaXN0IFsoU3ltYm9sIFwiX19ndWFyZC1rXCIpXSkpICgoTGlzdCBbKGNvbnMgKChTeW1ib2wgXCJoYW5kbGVyLWJpbmRcIikpICgoY29ucyAoKExpc3QgWyhMaXN0IFsoY29ucyAoKFN5bWJvbCBcImZuXCIpKSAoKGNvbnMgKChMaXN0IFsoU3ltYm9sIFwiX1wiKV0pKSAoKExpc3QgWyhCb29sIHRydWUpXSkpKSkpOyAoY29ucyAoKFN5bWJvbCBcImZuXCIpKSAoKGNvbnMgKChMaXN0IFt2YXJdKSkgKChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcIl9fZ3VhcmQta1wiKTsgKGNvbnMgKChTeW1ib2wgXCJjb25kXCIpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjbGF1c2VzOyAoTGlzdCBbKExpc3QgWyhTeW1ib2wgXCJlbHNlXCIpOyAoTGlzdCBbKFN5bWJvbCBcImxpc3RcIik7IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IHNlbnRpbmVsXSk7IHZhcl0pXSldKV0pKSldKV0pKSkpKV0pXSkpICgoTGlzdCBbKExpc3QgWyhTeW1ib2wgXCJfX2d1YXJkLWtcIik7IChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpIChib2R5KSldKV0pKSkpKV0pKSkpKV0pKSldKV0pOyAoTGlzdCBbKFN5bWJvbCBcImlmXCIpOyAoTGlzdCBbKFN5bWJvbCBcImFuZFwiKTsgKExpc3QgWyhTeW1ib2wgXCJsaXN0P1wiKTsgKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpXSk7IChMaXN0IFsoU3ltYm9sIFwiPVwiKTsgKExpc3QgWyhTeW1ib2wgXCJsZW5cIik7IChTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKV0pOyAoTnVtYmVyIDIuMCldKTsgKExpc3QgWyhTeW1ib2wgXCI9XCIpOyAoTGlzdCBbKFN5bWJvbCBcImZpcnN0XCIpOyAoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIildKTsgKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgc2VudGluZWxdKV0pXSk7IChMaXN0IFsoU3ltYm9sIFwicmFpc2VcIik7IChMaXN0IFsoU3ltYm9sIFwibnRoXCIpOyAoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIik7IChOdW1iZXIgMS4wKV0pXSk7IChTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKV0pXSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtY2FsbGNjICopXG5hbmQgc3RlcF9zZl9jYWxsY2MgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9jYWxsY2NfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1jYXNlICopXG5hbmQgc3RlcF9zZl9jYXNlIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY2FzZV9mcmFtZSAoTmlsKSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1sZXQtbWF0Y2ggKilcbmFuZCBzdGVwX3NmX2xldF9tYXRjaCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBwYXR0ZXJuID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGV4cHIgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoKHJlc3QgKGFyZ3MpKSkpIGluIChzdGVwX3NmX21hdGNoICgoTGlzdCBbZXhwcjsgKExpc3QgW3BhdHRlcm47IChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpIChib2R5KSldKV0pKSAoZW52KSAoa29udCkpKVxuXG4oKiBzdGVwLWV2YWwtbGlzdCAqKVxuYW5kIHN0ZXBfZXZhbF9saXN0IGV4cHIgZW52IGtvbnQgPVxuICAobGV0IGhlYWQgPSAoZmlyc3QgKGV4cHIpKSBpbiBsZXQgYXJncyA9IChyZXN0IChleHByKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwibGFtYmRhXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpKSkpKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGV4cHIpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChleHByKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9tYXBfZnJhbWUgKE5pbCkgKChyZXN0IChleHByKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKGhlYWQpKSBpbiAobGV0IF9tYXRjaF92YWwgPSBuYW1lIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpZlwiKV0pKSB0aGVuIChzdGVwX3NmX2lmIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIndoZW5cIildKSkgdGhlbiAoc3RlcF9zZl93aGVuIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNvbmRcIildKSkgdGhlbiAoc3RlcF9zZl9jb25kIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNhc2VcIildKSkgdGhlbiAoc3RlcF9zZl9jYXNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImFuZFwiKV0pKSB0aGVuIChzdGVwX3NmX2FuZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJvclwiKV0pKSB0aGVuIChzdGVwX3NmX29yIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxldFwiKV0pKSB0aGVuIChzdGVwX3NmX2xldCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJsZXQqXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxhbWJkYVwiKV0pKSB0aGVuIChzdGVwX3NmX2xhbWJkYSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmblwiKV0pKSB0aGVuIChzdGVwX3NmX2xhbWJkYSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpbmVcIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmY29tcFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmNvbXAgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpc2xhbmRcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChzZl9kZWZpc2xhbmQgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZtYWNyb1wiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZm1hY3JvIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW9cIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChzZl9kZWZpbyAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1mb3JlaWduXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZGVmaW5lX2ZvcmVpZ24gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW9cIildKSkgdGhlbiAoc3RlcF9zZl9pbyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJiZWdpblwiKV0pKSB0aGVuIChzdGVwX3NmX2JlZ2luIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRvXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGxpc3RfcCAoKGZpcnN0IChhcmdzKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wICgoZmlyc3QgKGFyZ3MpKSkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gYiAtPiBzeF90cnV0aHkgKChsaXN0X3AgKGIpKSkpIChzeF90b19saXN0IChmaXJzdCAoYXJncykpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpKSkpKSkgdGhlbiAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHRlc3RfY2xhdXNlID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKHJlc3QgKChyZXN0IChhcmdzKSkpKSBpbiBsZXQgdmFycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGIgLT4gKGZpcnN0IChiKSkpIChzeF90b19saXN0IGJpbmRpbmdzKSkpIGluIGxldCBpbml0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGIgLT4gKG50aCAoYikgKChOdW1iZXIgMS4wKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSBpbiBsZXQgc3RlcHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGIpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG50aCAoYikgKChOdW1iZXIgMi4wKSkpIGVsc2UgKGZpcnN0IChiKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSBpbiBsZXQgdGVzdCA9IChmaXJzdCAodGVzdF9jbGF1c2UpKSBpbiBsZXQgcmVzdWx0JyA9IChyZXN0ICh0ZXN0X2NsYXVzZSkpIGluIChzdGVwX2V2YWxfbGlzdCAoKGNvbnMgKChTeW1ib2wgXCJsZXRcIikpICgoY29ucyAoKFN5bWJvbCBcIl9fZG8tbG9vcFwiKSkgKChjb25zICgoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChMaXN0IFsoZmlyc3QgKGIpKTsgKG50aCAoYikgKChOdW1iZXIgMS4wKSkpXSkpIChzeF90b19saXN0IGJpbmRpbmdzKSkpKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiaWZcIikpICgoY29ucyAodGVzdCkgKChjb25zICgoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdWx0JykpKSB0aGVuIE5pbCBlbHNlIChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpIChyZXN1bHQnKSkpKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2JvZHk7IChMaXN0IFsoY29ucyAoKFN5bWJvbCBcIl9fZG8tbG9vcFwiKSkgKHN0ZXBzKSldKV0pKSldKSkpKSkpKV0pKSkpKSkpKSAoZW52KSAoa29udCkpKSBlbHNlIChzdGVwX3NmX2JlZ2luIChhcmdzKSAoZW52KSAoa29udCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJndWFyZFwiKV0pKSB0aGVuIChzdGVwX3NmX2d1YXJkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInF1b3RlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJxdWFzaXF1b3RlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgocXFfZXhwYW5kICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIi0+XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfdGhyZWFkX2ZpcnN0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIi0+PlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9sYXN0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInw+XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfdGhyZWFkX2xhc3QgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYXMtPlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9hcyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzZXQhXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2V0X2IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0cmVjXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0cmVjIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlc2V0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmVzZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2hpZnRcIildKSkgdGhlbiAoc3RlcF9zZl9zaGlmdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZXJlZlwiKV0pKSB0aGVuIChzdGVwX3NmX2RlcmVmIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNjb3BlXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2NvcGUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pKSB0aGVuIChzdGVwX3NmX3Byb3ZpZGUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVla1wiKV0pKSB0aGVuIChzdGVwX3NmX3BlZWsgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicHJvdmlkZSFcIildKSkgdGhlbiAoc3RlcF9zZl9wcm92aWRlX2IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29udGV4dFwiKV0pKSB0aGVuIChzdGVwX3NmX2NvbnRleHQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYmluZFwiKV0pKSB0aGVuIChzdGVwX3NmX2JpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZW1pdCFcIildKSkgdGhlbiAoc3RlcF9zZl9lbWl0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImVtaXR0ZWRcIildKSkgdGhlbiAoc3RlcF9zZl9lbWl0dGVkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImhhbmRsZXItYmluZFwiKV0pKSB0aGVuIChzdGVwX3NmX2hhbmRsZXJfYmluZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZXN0YXJ0LWNhc2VcIildKSkgdGhlbiAoc3RlcF9zZl9yZXN0YXJ0X2Nhc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2lnbmFsLWNvbmRpdGlvblwiKV0pKSB0aGVuIChzdGVwX3NmX3NpZ25hbCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbnZva2UtcmVzdGFydFwiKV0pKSB0aGVuIChzdGVwX3NmX2ludm9rZV9yZXN0YXJ0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm1hdGNoXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbWF0Y2ggKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0LW1hdGNoXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0X21hdGNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImR5bmFtaWMtd2luZFwiKV0pKSB0aGVuIChzdGVwX3NmX2R5bmFtaWNfd2luZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAoc3RlcF9ob19tYXAgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwLWluZGV4ZWRcIildKSkgdGhlbiAoc3RlcF9ob19tYXBfaW5kZXhlZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAoc3RlcF9ob19maWx0ZXIgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKHN0ZXBfaG9fcmVkdWNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAoc3RlcF9ob19zb21lIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5P1wiKV0pKSB0aGVuIChzdGVwX2hvX2V2ZXJ5IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpIHRoZW4gKHN0ZXBfaG9fZm9yX2VhY2ggKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmFpc2VcIildKSkgdGhlbiAoc3RlcF9zZl9yYWlzZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyYWlzZS1jb250aW51YWJsZVwiKV0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9yYWlzZV9ldmFsX2ZyYW1lIChlbnYpICgoQm9vbCB0cnVlKSkpKSAoa29udCkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FsbC9jY1wiKV0pKSB0aGVuIChzdGVwX3NmX2NhbGxjYyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb25cIildKSkgdGhlbiAoc3RlcF9zZl9jYWxsY2MgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVyZm9ybVwiKV0pKSB0aGVuIChzdGVwX3NmX3BlcmZvcm0gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLWxpYnJhcnlcIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmVfbGlicmFyeSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbXBvcnRcIildKSkgdGhlbiAoc3RlcF9zZl9pbXBvcnQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLXJlY29yZC10eXBlXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaW5lX3JlY29yZF90eXBlIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLXByb3RvY29sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmaW5lX3Byb3RvY29sIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW1wbGVtZW50XCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfaW1wbGVtZW50IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGFyYW1ldGVyaXplXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcGFyYW1ldGVyaXplIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInN5bnRheC1ydWxlc1wiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX3N5bnRheF9ydWxlcyAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1zeW50YXhcIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbY3VzdG9tX3NwZWNpYWxfZm9ybXM7IG5hbWVdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpIChuYW1lKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChjZWtfY2FsbCAoKGdldCAoY3VzdG9tX3NwZWNpYWxfZm9ybXMpIChuYW1lKSkpIChMaXN0IFthcmdzOyBlbnZdKSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZW52X2hhcyAoZW52KSAobmFtZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19tYWNybyAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkpKSkgdGhlbiAobGV0IG1hYyA9IChlbnZfZ2V0IChlbnYpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZXhwYW5kX21hY3JvIChtYWMpIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gcmVuZGVyX2NoZWNrIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKG5hbWUpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGNla19jYWxsIChyZW5kZXJfY2hlY2spIChMaXN0IFtleHByOyBlbnZdKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChjZWtfY2FsbCAocmVuZGVyX2ZuKSAoTGlzdCBbZXhwcjsgZW52XSkpKSAoZW52KSAoa29udCkpIGVsc2UgKHN0ZXBfZXZhbF9jYWxsIChoZWFkKSAoYXJncykgKGVudikgKGtvbnQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpIGVsc2UgKHN0ZXBfZXZhbF9jYWxsIChoZWFkKSAoYXJncykgKGVudikgKGtvbnQpKSkpKVxuXG4oKiBzZi1kZWxheSAqKVxuYW5kIHNmX2RlbGF5IGFyZ3MgZW52ID1cbiAgKGxldCB0aHVuayA9IChtYWtlX2xhbWJkYSAoKExpc3QgW10pKSAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSBpbiAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgNCBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJfcHJvbWlzZVwiIChCb29sIHRydWUpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJmb3JjZWRcIiAoQm9vbCBmYWxzZSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcInRodW5rXCIgdGh1bms7IEhhc2h0YmwucmVwbGFjZSBfZCBcInZhbHVlXCIgTmlsOyBEaWN0IF9kKSlcblxuKCogc2YtZGVsYXktZm9yY2UgKilcbmFuZCBzZl9kZWxheV9mb3JjZSBhcmdzIGVudiA9XG4gIChsZXQgdGh1bmsgPSAobWFrZV9sYW1iZGEgKChMaXN0IFtdKSkgKChmaXJzdCAoYXJncykpKSAoZW52KSkgaW4gKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDUgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiX2l0ZXJhdGl2ZVwiIChCb29sIHRydWUpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJfcHJvbWlzZVwiIChCb29sIHRydWUpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJmb3JjZWRcIiAoQm9vbCBmYWxzZSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcInRodW5rXCIgdGh1bms7IEhhc2h0YmwucmVwbGFjZSBfZCBcInZhbHVlXCIgTmlsOyBEaWN0IF9kKSlcblxuKCogcHJvbWlzZT8gKilcbmFuZCBwcm9taXNlX3AgdiA9XG4gIChsZXQgX2FuZCA9IChkaWN0X3AgKHYpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0ICh2KSAoKFN0cmluZyBcIl9wcm9taXNlXCIpKSkpXG5cbigqIG1ha2UtcHJvbWlzZSAqKVxuYW5kIG1ha2VfcHJvbWlzZSB2ID1cbiAgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDMgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiX3Byb21pc2VcIiAoQm9vbCB0cnVlKTsgSGFzaHRibC5yZXBsYWNlIF9kIFwiZm9yY2VkXCIgKEJvb2wgdHJ1ZSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcInZhbHVlXCIgdjsgRGljdCBfZClcblxuKCogZm9yY2UgKilcbmFuZCBmb3JjZSBwID1cbiAgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJvbWlzZV9wIChwKSkpKSkpKSB0aGVuIHAgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZ2V0IChwKSAoKFN0cmluZyBcImZvcmNlZFwiKSkpKSB0aGVuIChnZXQgKHApICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIChsZXQgcmVzdWx0JyA9IChzeF9hcHBseSAoZ2V0IChwKSAoKFN0cmluZyBcInRodW5rXCIpKSkgKExpc3QgW10pKSBpbiAobGV0IGZpbmFsID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGdldCAocCkgKChTdHJpbmcgXCJfaXRlcmF0aXZlXCIpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByb21pc2VfcCAocmVzdWx0JykpKSkgdGhlbiAoZm9yY2UgKHJlc3VsdCcpKSBlbHNlIHJlc3VsdCcpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHAgKFN0cmluZyBcImZvcmNlZFwiKSAoQm9vbCB0cnVlKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHAgKFN0cmluZyBcInZhbHVlXCIpIGZpbmFsKSkgaW4gZmluYWwpKSkpKSlcblxuKCoga29udC1leHRyYWN0LXByb3ZpZGVzICopXG5hbmQga29udF9leHRyYWN0X3Byb3ZpZGVzIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiBsZXQgcmVzdF9mcmFtZXMgPSAoa29udF9leHRyYWN0X3Byb3ZpZGVzICgocmVzdCAoa29udCkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkpIHRoZW4gKGNvbnMgKChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInByb3ZpZGVcIjsgY2ZfZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSk7IGNmX25hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IChMaXN0IFtdKTsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IChMaXN0IFtdKTsgY2ZfZXh0cmEgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpOyBjZl9leHRyYTIgPSBOaWwgfSkpIChyZXN0X2ZyYW1lcykpIGVsc2UgcmVzdF9mcmFtZXMpKSlcblxuKCogZmlyZS1wcm92aWRlLXN1YnNjcmliZXJzICopXG5hbmQgZmlyZV9wcm92aWRlX3N1YnNjcmliZXJzIG5hbWUgPVxuICAobGV0IHN1YnMgPSAoZ2V0ICghX3Byb3ZpZGVfc3Vic2NyaWJlcnNfcmVmKSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHN1YnMgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoc3VicykpKSkpKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAwLjApXSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIHN1YiAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFshX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmOyBzdWJdKSkpKSkpIHRoZW4gKF9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiA6PSBzeF9hcHBlbmRfYiAhX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIHN1YjsgTmlsKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCBzdWJzKTsgTmlsKSBlbHNlIChMaXN0Lml0ZXIgKGZ1biBzdWIgLT4gaWdub3JlICgoY2VrX2NhbGwgKHN1YikgKChMaXN0IFtOaWxdKSkpKSkgKHN4X3RvX2xpc3Qgc3Vicyk7IE5pbCkpIGVsc2UgTmlsKSlcblxuKCogYmF0Y2gtYmVnaW4hICopXG5hbmQgYmF0Y2hfYmVnaW5fYiAoKSA9XG4gIChfcHJvdmlkZV9iYXRjaF9kZXB0aF9yZWYgOj0gKHByaW1fY2FsbCBcIitcIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAxLjApXSk7IE5pbClcblxuKCogYmF0Y2gtZW5kISAqKVxuYW5kIGJhdGNoX2VuZF9iICgpID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKF9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZiA6PSAocHJpbV9jYWxsIFwiLVwiIFshX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmOyAoTnVtYmVyIDEuMCldKTsgTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAwLjApXSkpIHRoZW4gKGxldCBxdWV1ZSA9ICFfcHJvdmlkZV9iYXRjaF9xdWV1ZV9yZWYgaW4gKGxldCAoKSA9IGlnbm9yZSAoKF9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiA6PSAoTGlzdCBbXSk7IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biBzdWIgLT4gaWdub3JlICgoY2VrX2NhbGwgKHN1YikgKChMaXN0IFtOaWxdKSkpKSkgKHN4X3RvX2xpc3QgcXVldWUpOyBOaWwpKSkgZWxzZSBOaWwpKVxuXG4oKiBzdGVwLXNmLWJpbmQgKilcbmFuZCBzdGVwX3NmX2JpbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgYm9keSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwcmV2ID0gIV9iaW5kX3RyYWNraW5nX3JlZiBpbiAobGV0ICgpID0gaWdub3JlICgoX2JpbmRfdHJhY2tpbmdfcmVmIDo9IChMaXN0IFtdKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmluZF9mcmFtZSAoYm9keSkgKGVudikgKHByZXYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1wYXJhbWV0ZXJpemUgKilcbmFuZCBzdGVwX3NmX3BhcmFtZXRlcml6ZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChpc19uaWwgKGJpbmRpbmdzKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChlbXB0eV9wIChiaW5kaW5ncykpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3RfcGFpciA9IChmaXJzdCAoYmluZGluZ3MpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoZmlyc3RfcGFpcikpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIChiaW5kaW5ncykgKE5pbCkgKChMaXN0IFtdKSkgKGJvZHkpIChlbnYpKSkgKGtvbnQpKSkpKSkpXG5cbigqIHN5bnRheC1ydWxlcy1tYXRjaCAqKVxuYW5kIHN5bnRheF9ydWxlc19tYXRjaCBwYXR0ZXJuIGZvcm0gbGl0ZXJhbHMgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHBhdHRlcm4pKTsgKFN0cmluZyBcIl9cIildKSkpIHRoZW4gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbbGl0ZXJhbHM7IChzeW1ib2xfbmFtZSAocGF0dGVybikpXSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAoZm9ybSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAocGF0dGVybikpOyAoc3ltYm9sX25hbWUgKGZvcm0pKV0pKSkgdGhlbiAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGVsc2UgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocGF0dGVybikpKSB0aGVuIChsZXQgZCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZCAoc3ltYm9sX25hbWUgKHBhdHRlcm4pKSBmb3JtKSkgaW4gZCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChlbXB0eV9wIChwYXR0ZXJuKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKGZvcm0pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoZm9ybSkpKSkgdGhlbiAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGVsc2UgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wIChmb3JtKSkpKSB0aGVuIChzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCAocGF0dGVybikgKChOdW1iZXIgMC4wKSkgKGZvcm0pICgoTnVtYmVyIDAuMCkpIChsaXRlcmFscykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgZm9ybV0pKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSBOaWwpKSkpKSlcblxuKCogc3ludGF4LXJ1bGVzLW1hdGNoLWxpc3QgKilcbmFuZCBzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCBwYXR0ZXJuIHBpIGZvcm0gZmkgbGl0ZXJhbHMgPVxuICAobGV0IHBsZW4gPSAobGVuIChwYXR0ZXJuKSkgaW4gbGV0IGZsZW4gPSAobGVuIChmb3JtKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgW3BpOyBwbGVuXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj49XCIgW2ZpOyBmbGVuXSkpKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbcGk7IHBsZW5dKSkgdGhlbiBOaWwgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSk7IHBsZW5dKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoc3ltYm9sX3AgKChudGggKHBhdHRlcm4pICgocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDEuMCldKSkpKSk7IChTdHJpbmcgXCIuLi5cIildKSkpKSB0aGVuIChsZXQgc3ViX3BhdCA9IChudGggKHBhdHRlcm4pIChwaSkpIGluIGxldCByZXN0X3BhdF9jb3VudCA9IChwcmltX2NhbGwgXCItXCIgW3BsZW47IChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDIuMCldKV0pIGluIGxldCBhdmFpbGFibGUgPSAocHJpbV9jYWxsIFwiLVwiIFtmbGVuOyBmaV0pIGluIGxldCBuX2VsbGlwc2lzID0gKHByaW1fY2FsbCBcIi1cIiBbKHByaW1fY2FsbCBcIi1cIiBbZmxlbjsgZmldKTsgKHByaW1fY2FsbCBcIi1cIiBbcGxlbjsgKHByaW1fY2FsbCBcIitcIiBbcGk7IChOdW1iZXIgMi4wKV0pXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFtuX2VsbGlwc2lzOyAoTnVtYmVyIDAuMCldKSkgdGhlbiBOaWwgZWxzZSAobGV0IGVsbGlwc2lzX2Zvcm1zID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2Zvcm07IGZpOyAocHJpbV9jYWxsIFwiK1wiIFtmaTsgbl9lbGxpcHNpc10pXSkgaW4gbGV0IHN1Yl9iaW5kaW5ncyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGYgLT4gKHN5bnRheF9ydWxlc19tYXRjaCAoc3ViX3BhdCkgKGYpIChsaXRlcmFscykpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbZm9ybTsgZmk7IChwcmltX2NhbGwgXCIrXCIgW2ZpOyBuX2VsbGlwc2lzXSldKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3N1Yl9iaW5kaW5nczsgTmlsXSkpIHRoZW4gTmlsIGVsc2UgKGxldCByZXN0X3Jlc3VsdCA9IChzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDIuMCldKSkgKGZvcm0pICgocHJpbV9jYWxsIFwiK1wiIFtmaTsgbl9lbGxpcHNpc10pKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN0X3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgbWVyZ2VkID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gYiAtPiBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgobGV0IGV4aXN0aW5nID0gKGRpY3RfZ2V0IChtZXJnZWQpIChrZXkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChleGlzdGluZykpKSB0aGVuIChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKExpc3QgWyhnZXQgKGIpIChrZXkpKV0pKSBlbHNlIChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKHByaW1fY2FsbCBcImFwcGVuZFwiIFtleGlzdGluZzsgKExpc3QgWyhnZXQgKGIpIChrZXkpKV0pXSkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtiXSkpOyBOaWwpKSkgKHN4X3RvX2xpc3Qgc3ViX2JpbmRpbmdzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKGdldCAocmVzdF9yZXN1bHQpIChrZXkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtyZXN0X3Jlc3VsdF0pKTsgTmlsKSkgaW4gbWVyZ2VkKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgW2ZpOyBmbGVuXSkpIHRoZW4gTmlsIGVsc2UgKGxldCBzdWJfcmVzdWx0ID0gKHN5bnRheF9ydWxlc19tYXRjaCAoKG50aCAocGF0dGVybikgKHBpKSkpICgobnRoIChmb3JtKSAoZmkpKSkgKGxpdGVyYWxzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc3ViX3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgcmVzdF9yZXN1bHQgPSAoc3ludGF4X3J1bGVzX21hdGNoX2xpc3QgKHBhdHRlcm4pICgocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSkpIChmb3JtKSAoKHByaW1fY2FsbCBcIitcIiBbZmk7IChOdW1iZXIgMS4wKV0pKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN0X3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiByZXN0X3Jlc3VsdCBrZXkgKGdldCAoc3ViX3Jlc3VsdCkgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW3N1Yl9yZXN1bHRdKSk7IE5pbCkpIGluIHJlc3RfcmVzdWx0KSkpKSkpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtZmluZC12YXIgKilcbmFuZCBzeW50YXhfcnVsZXNfZmluZF92YXIgdGVtcGxhdGUgYmluZGluZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKHRlbXBsYXRlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2JpbmRpbmdzOyAoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wICgoZ2V0IChiaW5kaW5ncykgKChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSkpKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wICh0ZW1wbGF0ZSkpKSB0aGVuIChMaXN0LmZvbGRfbGVmdCAoZnVuIGZvdW5kIHQgLT4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZm91bmQpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2ZpbmRfdmFyICh0KSAoYmluZGluZ3MpKSBlbHNlIGZvdW5kKSkgTmlsIChzeF90b19saXN0IHRlbXBsYXRlKSkgZWxzZSBOaWwpKVxuXG4oKiBzeW50YXgtcnVsZXMtZmluZC1hbGwtdmFycyAqKVxuYW5kIHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzIHRlbXBsYXRlIGJpbmRpbmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wICh0ZW1wbGF0ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtiaW5kaW5nczsgKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxpc3RfcCAoKGdldCAoYmluZGluZ3MpICgoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSkpKSkpKSkpIHRoZW4gKExpc3QgWyhzeW1ib2xfbmFtZSAodGVtcGxhdGUpKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAodGVtcGxhdGUpKSkgdGhlbiAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgdCAtPiAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2FjYzsgKHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzICh0KSAoYmluZGluZ3MpKV0pKSAoTGlzdCBbXSkgKHN4X3RvX2xpc3QgdGVtcGxhdGUpKSBlbHNlIChMaXN0IFtdKSkpXG5cbigqIHN5bnRheC1ydWxlcy1pbnN0YW50aWF0ZSAqKVxuYW5kIHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZSB0ZW1wbGF0ZSBiaW5kaW5ncyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAodGVtcGxhdGUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbYmluZGluZ3M7IChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKV0pKSkgdGhlbiAoZ2V0IChiaW5kaW5ncykgKChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgobGlzdF9wICh0ZW1wbGF0ZSkpKSkpKSkgdGhlbiB0ZW1wbGF0ZSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICh0ZW1wbGF0ZSkpKSB0aGVuIHRlbXBsYXRlIGVsc2UgKHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0ICh0ZW1wbGF0ZSkgKChOdW1iZXIgMC4wKSkgKGJpbmRpbmdzKSkpKSlcblxuKCogc3ludGF4LXJ1bGVzLWluc3RhbnRpYXRlLWxpc3QgKilcbmFuZCBzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCB0ZW1wbGF0ZSBpIGJpbmRpbmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgW2k7IChsZW4gKHRlbXBsYXRlKSldKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAobGV0IGVsZW0gPSAobnRoICh0ZW1wbGF0ZSkgKGkpKSBpbiBsZXQgaGFzX2VsbGlwc2lzID0gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSk7IChsZW4gKHRlbXBsYXRlKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoc3ltYm9sX3AgKChudGggKHRlbXBsYXRlKSAoKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpKSk7IChTdHJpbmcgXCIuLi5cIildKSkpIGluIChpZiBzeF90cnV0aHkgKGhhc19lbGxpcHNpcykgdGhlbiAobGV0IGFsbF92YXJzID0gKHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzIChlbGVtKSAoYmluZGluZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYWxsX3ZhcnMpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlX2xpc3QgKHRlbXBsYXRlKSAoKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAyLjApXSkpIChiaW5kaW5ncykpIGVsc2UgKGxldCBjb3VudCA9IChsZW4gKChnZXQgKGJpbmRpbmdzKSAoKGZpcnN0IChhbGxfdmFycykpKSkpKSBpbiBsZXQgZXhwYW5kZWQgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpZHggLT4gKGxldCBiID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgYiBrZXkgKGdldCAoYmluZGluZ3MpIChrZXkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtiaW5kaW5nc10pKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHZhcl9uYW1lIC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgYiB2YXJfbmFtZSAobnRoICgoZ2V0IChiaW5kaW5ncykgKHZhcl9uYW1lKSkpIChpZHgpKSkpKSAoc3hfdG9fbGlzdCBhbGxfdmFycyk7IE5pbCkpIGluIChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUgKGVsZW0pIChiKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFtjb3VudF0pKSkpIGluIGxldCByZXN0X3Jlc3VsdCA9IChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDIuMCldKSkgKGJpbmRpbmdzKSkgaW4gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtleHBhbmRlZDsgcmVzdF9yZXN1bHRdKSkpKSBlbHNlIChjb25zICgoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlIChlbGVtKSAoYmluZGluZ3MpKSkgKChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkgKGJpbmRpbmdzKSkpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtZXhwYW5kICopXG5hbmQgc3ludGF4X3J1bGVzX2V4cGFuZCBsaXRlcmFscyBydWxlcyBmb3JtID1cbiAgKGxldCBmdWxsX2Zvcm0gPSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiX1wiKSkpKSAoZm9ybSkpIGluIChzeW50YXhfcnVsZXNfdHJ5X3J1bGVzIChsaXRlcmFscykgKHJ1bGVzKSAoZnVsbF9mb3JtKSkpXG5cbigqIHN5bnRheC1ydWxlcy10cnktcnVsZXMgKilcbmFuZCBzeW50YXhfcnVsZXNfdHJ5X3J1bGVzIGxpdGVyYWxzIHJ1bGVzIGZ1bGxfZm9ybSA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChydWxlcykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcInN5bnRheC1ydWxlczogbm8gcGF0dGVybiBtYXRjaGVkIGZvciBcIik7IChpbnNwZWN0IChmdWxsX2Zvcm0pKV0pKSkpKSBlbHNlIChsZXQgcnVsZSA9IChmaXJzdCAocnVsZXMpKSBpbiBsZXQgcGF0dGVybiA9IChmaXJzdCAocnVsZSkpIGluIGxldCB0ZW1wbGF0ZSA9IChudGggKHJ1bGUpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IGJpbmRpbmdzID0gKHN5bnRheF9ydWxlc19tYXRjaCAocGF0dGVybikgKGZ1bGxfZm9ybSkgKGxpdGVyYWxzKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsIChiaW5kaW5ncykpKSkpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlICh0ZW1wbGF0ZSkgKGJpbmRpbmdzKSkgZWxzZSAoc3ludGF4X3J1bGVzX3RyeV9ydWxlcyAobGl0ZXJhbHMpICgocmVzdCAocnVsZXMpKSkgKGZ1bGxfZm9ybSkpKSkpKVxuXG4oKiBzZi1zeW50YXgtcnVsZXMgKilcbmFuZCBzZl9zeW50YXhfcnVsZXMgYXJncyBlbnYgPVxuICAobGV0IGxpdGVyYWxzID0gKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAoKGZpcnN0IChhcmdzKSkpKSkgdGhlbiAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocykpKSB0aGVuIChzeW1ib2xfbmFtZSAocykpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtzXSkpKSkgKHN4X3RvX2xpc3QgKGZpcnN0IChhcmdzKSkpKSkgZWxzZSAoTGlzdCBbXSkpIGluIGxldCBydWxlcyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBjbG9zdXJlID0gKGVudl9leHRlbmQgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBjbG9zdXJlIChzeF90b19zdHJpbmcgKFN0cmluZyBcIl9fc3ItbGl0ZXJhbHNcIikpIGxpdGVyYWxzKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGNsb3N1cmUgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiX19zci1ydWxlc1wiKSkgcnVsZXMpKSBpbiAobWFrZV9tYWNybyAoKExpc3QgW10pKSAoKFN0cmluZyBcIl9fc3ItZm9ybVwiKSkgKChTeW1ib2wgXCJfX3N5bnRheC1ydWxlcy1ib2R5X19cIikpIChjbG9zdXJlKSAoKFN0cmluZyBcInN5bnRheC1ydWxlc1wiKSkpKSkpKVxuXG4oKiBzdGVwLXNmLWRlZmluZS1saWJyYXJ5ICopXG5hbmQgc3RlcF9zZl9kZWZpbmVfbGlicmFyeSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBsaWJfc3BlYyA9IChmaXJzdCAoYXJncykpIGluIGxldCBkZWNscyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBsaWJfZW52ID0gKGVudl9leHRlbmQgKGVudikpIGluIGxldCBleHBvcnRzID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBib2R5X2Zvcm1zID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBkZWNsIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAoZGVjbCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKGRlY2wpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHN5bWJvbF9wICgoZmlyc3QgKGRlY2wpKSkpKSkpIHRoZW4gKGxldCBraW5kID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGRlY2wpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2tpbmQ7IChTdHJpbmcgXCJleHBvcnRcIildKSkgdGhlbiAoZXhwb3J0cyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyFleHBvcnRzOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocykpKSB0aGVuIChzeW1ib2xfbmFtZSAocykpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtzXSkpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGRlY2wpKSkpKV0pOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2luZDsgKFN0cmluZyBcImltcG9ydFwiKV0pKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBpbXBvcnRfc2V0IC0+IGlnbm9yZSAoKGJpbmRfaW1wb3J0X3NldCAoaW1wb3J0X3NldCkgKGxpYl9lbnYpKSkpIChzeF90b19saXN0IChyZXN0IChkZWNsKSkpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2luZDsgKFN0cmluZyBcImJlZ2luXCIpXSkpIHRoZW4gKGJvZHlfZm9ybXMgOj0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFshYm9keV9mb3JtczsgKHJlc3QgKGRlY2wpKV0pOyBOaWwpIGVsc2UgTmlsKSkpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCBkZWNscyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBmb3JtIC0+IGlnbm9yZSAoKGV2YWxfZXhwciAoZm9ybSkgKGxpYl9lbnYpKSkpIChzeF90b19saXN0ICFib2R5X2Zvcm1zKTsgTmlsKSkgaW4gKGxldCBleHBvcnRfZGljdCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIG5hbWUgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAobGliX2VudikgKG5hbWUpKSkgdGhlbiAoc3hfZGljdF9zZXRfYiBleHBvcnRfZGljdCBuYW1lIChlbnZfZ2V0IChsaWJfZW52KSAobmFtZSkpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCAhZXhwb3J0cyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChyZWdpc3Rlcl9saWJyYXJ5IChsaWJfc3BlYykgKGV4cG9ydF9kaWN0KSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSkpKSkpKVxuXG4oKiBiaW5kLWltcG9ydC1zZXQgKilcbmFuZCBiaW5kX2ltcG9ydF9zZXQgaW1wb3J0X3NldCBlbnYgPVxuICAobGV0IGhlYWQgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChpbXBvcnRfc2V0KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaW1wb3J0X3NldCkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoc3ltYm9sX3AgKChmaXJzdCAoaW1wb3J0X3NldCkpKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoaW1wb3J0X3NldCkpKSkgZWxzZSBOaWwpIGluIChsZXQgbGliX3NwZWMgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJvbmx5XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcImV4Y2VwdFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJwcmVmaXhcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInJlbmFtZVwiKV0pKSkpKSB0aGVuIChudGggKGltcG9ydF9zZXQpICgoTnVtYmVyIDEuMCkpKSBlbHNlIGltcG9ydF9zZXQpIGluIChsZXQgZXhwb3J0cyA9IChsaWJyYXJ5X2V4cG9ydHMgKGxpYl9zcGVjKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcIm9ubHlcIildKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcyAtPiBpZ25vcmUgKChsZXQgaWQgPSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHMpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHMpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbc10pKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2V4cG9ydHM7IGlkXSkpIHRoZW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGlkKSAoZ2V0IChleHBvcnRzKSAoaWQpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChyZXN0ICgocmVzdCAoaW1wb3J0X3NldCkpKSkpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInByZWZpeFwiKV0pKSB0aGVuIChsZXQgcGZ4ID0gKFN0cmluZyAoc3hfc3RyIFsobnRoIChpbXBvcnRfc2V0KSAoKE51bWJlciAyLjApKSldKSkgaW4gKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIChzeF9zdHIgW3BmeDsga2V5XSkpKSAoZ2V0IChleHBvcnRzKSAoa2V5KSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcImtleXNcIiBbZXhwb3J0c10pKTsgTmlsKSkgZWxzZSAoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGtleSkgKGdldCAoZXhwb3J0cykgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW2V4cG9ydHNdKSk7IE5pbCkpKSkpKVxuXG4oKiBzdGVwLXNmLWltcG9ydCAqKVxuYW5kIHN0ZXBfc2ZfaW1wb3J0IGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBpbXBvcnRfc2V0ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3Rfc2V0cyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBsaWJfc3BlYyA9IChsZXQgaGVhZCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKGltcG9ydF9zZXQpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChpbXBvcnRfc2V0KSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChzeW1ib2xfcCAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSBlbHNlIE5pbCkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwib25seVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJleGNlcHRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwicHJlZml4XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJyZW5hbWVcIildKSkpKSkgdGhlbiAobnRoIChpbXBvcnRfc2V0KSAoKE51bWJlciAxLjApKSkgZWxzZSBpbXBvcnRfc2V0KSkgaW4gKGlmIHN4X3RydXRoeSAoKGxpYnJhcnlfbG9hZGVkX3AgKGxpYl9zcGVjKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGJpbmRfaW1wb3J0X3NldCAoaW1wb3J0X3NldCkgKGVudikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9zZXRzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAoc3RlcF9zZl9pbXBvcnQgKHJlc3Rfc2V0cykgKGVudikgKGtvbnQpKSkpIGVsc2UgKG1ha2VfY2VrX3N1c3BlbmRlZCAoKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwibGlicmFyeVwiIGxpYl9zcGVjOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJvcFwiIChTdHJpbmcgXCJpbXBvcnRcIik7IERpY3QgX2QpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaW1wb3J0X2ZyYW1lIChpbXBvcnRfc2V0KSAocmVzdF9zZXRzKSAoZW52KSkpIChrb250KSkpKSkpKSlcblxuKCogc3RlcC1zZi1wZXJmb3JtICopXG5hbmQgc3RlcF9zZl9wZXJmb3JtIGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJwZXJmb3JtIHJlcXVpcmVzIGFuIElPIHJlcXVlc3QgYXJndW1lbnRcIikpKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcGVyZm9ybV9mcmFtZSAoZW52KSkpIChrb250KSkpKSlcblxuXG4oKiBzZi1kZWZpbmUtcmVjb3JkLXR5cGUgKilcbmFuZCBzZl9kZWZpbmVfcmVjb3JkX3R5cGUgYXJncyBlbnYgPVxuICAobGV0IHR5cGVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGN0b3Jfc3BlYyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcHJlZF9zeW0gPSAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgaW4gbGV0IGZpZWxkX3NwZWNzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMy4wKV0pIGluIChsZXQgcmF3X25hbWUgPSAoc3ltYm9sX25hbWUgKHR5cGVfc3ltKSkgaW4gKGxldCB0eXBlX25hbWUgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW3Jhd19uYW1lOyAoU3RyaW5nIFwiPFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJlbmRzLXdpdGg/XCIgW3Jhd19uYW1lOyAoU3RyaW5nIFwiPlwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmF3X25hbWU7IChOdW1iZXIgMS4wKTsgKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAocmF3X25hbWUpKTsgKE51bWJlciAxLjApXSldKSBlbHNlIHJhd19uYW1lKSBpbiBsZXQgY3Rvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGN0b3Jfc3BlYykpKSkgaW4gbGV0IGN0b3JfcGFyYW1zID0gKExpc3QgKExpc3QubWFwIChmdW4gcyAtPiAoc3ltYm9sX25hbWUgKHMpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGN0b3Jfc3BlYykpKSkpIGluIGxldCBwcmVkX25hbWUgPSAoc3ltYm9sX25hbWUgKHByZWRfc3ltKSkgaW4gbGV0IGZpZWxkX25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gZnMgLT4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGZzKSkpKSkgKHN4X3RvX2xpc3QgZmllbGRfc3BlY3MpKSkgaW4gKGxldCBydGRfdWlkID0gKG1ha2VfcnRkICh0eXBlX25hbWUpIChmaWVsZF9uYW1lcykgKGN0b3JfcGFyYW1zKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGN0b3JfbmFtZSkgKG1ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIChydGRfdWlkKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgcHJlZF9uYW1lKSAobWFrZV9yZWNvcmRfcHJlZGljYXRlIChydGRfdWlkKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yX2VhY2hfaW5kZXhlZCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2lkeDsgZnNdIC0+IChmdW4gaWR4IGZzIC0+IChsZXQgYWNjZXNzb3JfbmFtZSA9IChzeW1ib2xfbmFtZSAoKG50aCAoZnMpICgoTnVtYmVyIDEuMCkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyBhY2Nlc3Nvcl9uYW1lKSAobWFrZV9yZWNvcmRfYWNjZXNzb3IgKGlkeCkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGZzKSk7IChOdW1iZXIgMy4wKV0pKSB0aGVuIChsZXQgbXV0YXRvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgobnRoIChmcykgKChOdW1iZXIgMi4wKSkpKSkgaW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIG11dGF0b3JfbmFtZSkgKG1ha2VfcmVjb3JkX211dGF0b3IgKGlkeCkpKSkgZWxzZSBOaWwpKSkpIGlkeCBmcyB8IF8gLT4gTmlsKSkpIChmaWVsZF9zcGVjcykpKSBpbiBOaWwpKSkpKSkpXG5cbigqIHNmLWRlZmluZS1wcm90b2NvbCAqKVxuYW5kIHNmX2RlZmluZV9wcm90b2NvbCBhcmdzIGVudiA9XG4gIChsZXQgcHJvdG9fbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBpbiBsZXQgbWV0aG9kX3NwZWNzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcIipwcm90b2NvbC1yZWdpc3RyeSpcIikpIF9wcm90b2NvbF9yZWdpc3RyeV8pKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcInNhdGlzZmllcz9cIikpIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtwbmFtZTsgdmFsJ10gLT4gKGZ1biBwbmFtZSB2YWwnIC0+IChzYXRpc2ZpZXNfcCAocG5hbWUpICh2YWwnKSkpIHBuYW1lIHZhbCcgfCBfIC0+IE5pbCkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIF9wcm90b2NvbF9yZWdpc3RyeV8gcHJvdG9fbmFtZSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMyBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJpbXBsc1wiIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm1ldGhvZHNcIiAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzcGVjIC0+IChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcImFyaXR5XCIgKGxlbiAoc3BlYykpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKHN5bWJvbF9uYW1lICgoZmlyc3QgKHNwZWMpKSkpOyBEaWN0IF9kKSkgKHN4X3RvX2xpc3QgbWV0aG9kX3NwZWNzKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgcHJvdG9fbmFtZTsgRGljdCBfZCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gc3BlYyAtPiBpZ25vcmUgKChsZXQgbWV0aG9kX25hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgaW4gbGV0IHBhcmFtcyA9IChyZXN0IChzcGVjKSkgaW4gbGV0IHBuYW1lID0gcHJvdG9fbmFtZSBpbiAobGV0IHNlbGZfc3ltID0gKGZpcnN0IChwYXJhbXMpKSBpbiBsZXQgbG9va3VwX2V4cHIgPSAoTGlzdCBbKFN5bWJvbCBcImdldFwiKTsgKExpc3QgWyhTeW1ib2wgXCJnZXRcIik7IChMaXN0IFsoU3ltYm9sIFwiZ2V0XCIpOyAoTGlzdCBbKFN5bWJvbCBcImdldFwiKTsgKFN5bWJvbCBcIipwcm90b2NvbC1yZWdpc3RyeSpcIik7IHBuYW1lXSk7IChTdHJpbmcgXCJpbXBsc1wiKV0pOyAoTGlzdCBbKFN5bWJvbCBcInR5cGUtb2ZcIik7IHNlbGZfc3ltXSldKTsgbWV0aG9kX25hbWVdKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgbWV0aG9kX25hbWUpIChldmFsX2V4cHIgKChMaXN0IFsoU3ltYm9sIFwiZm5cIik7IHBhcmFtczsgKExpc3QgWyhTeW1ib2wgXCJsZXRcIik7IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcIl9pbXBsXCIpOyBsb29rdXBfZXhwcl0pXSk7IChMaXN0IFsoU3ltYm9sIFwiaWZcIik7IChMaXN0IFsoU3ltYm9sIFwibmlsP1wiKTsgKFN5bWJvbCBcIl9pbXBsXCIpXSk7IChMaXN0IFsoU3ltYm9sIFwiZXJyb3JcIik7IChTdHJpbmcgKHN4X3N0ciBbcG5hbWU7IChTdHJpbmcgXCIuXCIpOyBtZXRob2RfbmFtZTsgKFN0cmluZyBcIjogbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHR5cGVcIildKSldKTsgKGNvbnMgKChTeW1ib2wgXCJfaW1wbFwiKSkgKHBhcmFtcykpXSldKV0pKSAoZW52KSkpKSkpKSAoc3hfdG9fbGlzdCBtZXRob2Rfc3BlY3MpOyBOaWwpKSBpbiBOaWwpKSkpXG5cbigqIHNmLWltcGxlbWVudCAqKVxuYW5kIHNmX2ltcGxlbWVudCBhcmdzIGVudiA9XG4gIChsZXQgcHJvdG9fbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBpbiBsZXQgcmF3X3R5cGVfbmFtZSA9IChzeW1ib2xfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSkgaW4gbGV0IHR5cGVfbmFtZSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyYXdfdHlwZV9uYW1lOyAoTnVtYmVyIDEuMCk7IChwcmltX2NhbGwgXCItXCIgWyhsZW4gKHJhd190eXBlX25hbWUpKTsgKE51bWJlciAxLjApXSldKSBpbiBsZXQgbWV0aG9kX2RlZnMgPSAocmVzdCAoKHJlc3QgKGFyZ3MpKSkpIGluIChsZXQgcHJvdG8gPSAoZ2V0IChfcHJvdG9jb2xfcmVnaXN0cnlfKSAocHJvdG9fbmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHByb3RvKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBwcm90b2NvbDogXCIpOyBwcm90b19uYW1lXSkpKSkpIGVsc2UgKGxldCBpbXBscyA9IChnZXQgKHByb3RvKSAoKFN0cmluZyBcImltcGxzXCIpKSkgaW4gbGV0IHR5cGVfaW1wbHMgPSAobGV0IF9vciA9IChnZXQgKGltcGxzKSAodHlwZV9uYW1lKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBtZXRob2RfZGVmIC0+IGlnbm9yZSAoKGxldCBtbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChtZXRob2RfZGVmKSkpKSBpbiBsZXQgcHJvdG9fbWV0aG9kID0gKGZpcnN0ICgoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biBtIC0+IHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGdldCAobSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG1uYW1lXSkpKSAoc3hfdG9fbGlzdCAoZ2V0IChwcm90bykgKChTdHJpbmcgXCJtZXRob2RzXCIpKSkpKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChwcm90b19tZXRob2QpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIG1ldGhvZCBcIik7IG1uYW1lOyAoU3RyaW5nIFwiIGluIHByb3RvY29sIFwiKTsgcHJvdG9fbmFtZV0pKSkpKSBlbHNlIChsZXQgYXJpdHkgPSAoZ2V0IChwcm90b19tZXRob2QpICgoU3RyaW5nIFwiYXJpdHlcIikpKSBpbiBsZXQgcGFyYW1zID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW21ldGhvZF9kZWY7IChOdW1iZXIgMS4wKTsgYXJpdHldKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKG1ldGhvZF9kZWYpKTsgKHByaW1fY2FsbCBcIitcIiBbYXJpdHk7IChOdW1iZXIgMS4wKV0pXSkpIHRoZW4gKG50aCAobWV0aG9kX2RlZikgKGFyaXR5KSkgZWxzZSAoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW21ldGhvZF9kZWY7IGFyaXR5XSkpKSkgaW4gKHN4X2RpY3Rfc2V0X2IgdHlwZV9pbXBscyBtbmFtZSAoZXZhbF9leHByICgoTGlzdCBbKFN5bWJvbCBcImZuXCIpOyBwYXJhbXM7IGJvZHldKSkgKGVudikpKSkpKSkpIChzeF90b19saXN0IG1ldGhvZF9kZWZzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgaW1wbHMgdHlwZV9uYW1lIHR5cGVfaW1wbHMpKSBpbiBOaWwpKSkpKSlcblxuKCogc2F0aXNmaWVzPyAqKVxuYW5kIHNhdGlzZmllc19wIHByb3RvX25hbWUgdmFsdWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChyZWNvcmRfcCAodmFsdWUpKSkpKSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGxldCBwcm90byA9IChnZXQgKF9wcm90b2NvbF9yZWdpc3RyeV8pICgoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHByb3RvX25hbWUpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHByb3RvX25hbWUpKSBlbHNlIHByb3RvX25hbWUpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAocHJvdG8pKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKChnZXQgKChnZXQgKHByb3RvKSAoKFN0cmluZyBcImltcGxzXCIpKSkpICgodHlwZV9vZiAodmFsdWUpKSkpKSkpKSkpKSkpXG5cbigqIGNoZWNrLW1hdGNoLWV4aGF1c3RpdmVuZXNzICopXG5hbmQgY2hlY2tfbWF0Y2hfZXhoYXVzdGl2ZW5lc3MgY2xhdXNlcyA9XG4gIChsZXQgd2FybmluZ3MgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHBhdHRlcm5zID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAoZmlyc3QgKGMpKSkgKHN4X3RvX2xpc3QgY2xhdXNlcykpKSBpbiBsZXQgaGFzX3dpbGRjYXJkID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAocCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcDsgKEJvb2wgdHJ1ZSldKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoQm9vbCBmYWxzZSldKSkpKSkpKSkpIChzeF90b19saXN0IHBhdHRlcm5zKSkpIGluIGxldCBoYXNfZWxzZSA9IChCb29sIChMaXN0LmV4aXN0cyAoZnVuIHAgLT4gc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoU3RyaW5nIFwiZWxzZVwiKV0pKSkgKHN4X3RvX2xpc3QgcGF0dGVybnMpKSkgaW4gbGV0IGhhc190cnVlID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChCb29sIHRydWUpXSkpKSAoc3hfdG9fbGlzdCBwYXR0ZXJucykpKSBpbiBsZXQgaGFzX2ZhbHNlID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChCb29sIGZhbHNlKV0pKSkgKHN4X3RvX2xpc3QgcGF0dGVybnMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfd2lsZGNhcmQpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoaGFzX2Vsc2UpKSkpKSkgdGhlbiAod2FybmluZ3MgOj0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFshd2FybmluZ3M7IChMaXN0IFsoU3RyaW5nIFwibWF0Y2ggbWF5IGJlIG5vbi1leGhhdXN0aXZlIChubyB3aWxkY2FyZCBvciA6ZWxzZSBwYXR0ZXJuKVwiKV0pXSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGV0IF9vciA9IGhhc190cnVlIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBoYXNfZmFsc2UpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGxldCBfYW5kID0gaGFzX3RydWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgaGFzX2ZhbHNlKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfd2lsZGNhcmQpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoaGFzX2Vsc2UpKSkpKSkpKSB0aGVuICh3YXJuaW5ncyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyF3YXJuaW5nczsgKExpc3QgWyhpZiBzeF90cnV0aHkgKGhhc190cnVlKSB0aGVuIChTdHJpbmcgXCJtYXRjaCBvbiBib29sZWFuIG1pc3NpbmcgZmFsc2UgY2FzZVwiKSBlbHNlIChTdHJpbmcgXCJtYXRjaCBvbiBib29sZWFuIG1pc3NpbmcgdHJ1ZSBjYXNlXCIpKV0pXSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAhd2FybmluZ3MpKSlcblxuKCogbWF0Y2gtZmluZC1jbGF1c2UgKilcbmFuZCBtYXRjaF9maW5kX2NsYXVzZSB2YWwnIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNsYXVzZXMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBwYXR0ZXJuID0gKGZpcnN0IChjbGF1c2UpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAocGF0dGVybikgKHZhbCcpIChsb2NhbCkpKSB0aGVuIChMaXN0IFtsb2NhbDsgYm9keV0pIGVsc2UgKG1hdGNoX2ZpbmRfY2xhdXNlICh2YWwnKSAoKHJlc3QgKGNsYXVzZXMpKSkgKGVudikpKSkpXG5cbigqIG1hdGNoLXBhdHRlcm4gKilcbmFuZCBtYXRjaF9wYXR0ZXJuIHBhdHRlcm4gdmFsdWUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgKFN5bWJvbCBcIl9cIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwYXR0ZXJuKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAocGF0dGVybikpOyAoU3ltYm9sIFwiP1wiKV0pKSkpIHRoZW4gKGxldCBwcmVkID0gKGV2YWxfZXhwciAoKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkgaW4gKGNla19jYWxsIChwcmVkKSAoKExpc3QgW3ZhbHVlXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGF0dGVybikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKHBhdHRlcm4pKTsgKFN5bWJvbCBcInF1b3RlXCIpXSkpKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFt2YWx1ZTsgKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHBhdHRlcm4pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSkpIHZhbHVlKSkgaW4gKEJvb2wgdHJ1ZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhdHRlcm4pKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHN5bWJvbF9wICgoZmlyc3QgKHBhdHRlcm4pKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChkaWN0X3AgKHZhbHVlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAodmFsdWUpICgoU3RyaW5nIFwiX2FkdFwiKSkpKSkpKSkgdGhlbiAobGV0IGN0b3JfbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChwYXR0ZXJuKSkpKSBpbiBsZXQgZmllbGRfcGF0dGVybnMgPSAocmVzdCAocGF0dGVybikpIGluIGxldCBmaWVsZHMgPSAoZ2V0ICh2YWx1ZSkgKChTdHJpbmcgXCJfZmllbGRzXCIpKSkgaW4gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGdldCAodmFsdWUpICgoU3RyaW5nIFwiX2N0b3JcIikpKTsgY3Rvcl9uYW1lXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoZmllbGRfcGF0dGVybnMpKTsgKGxlbiAoZmllbGRzKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gcGFpciAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZmlyc3QgKHBhaXIpKSkgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFtmaWVsZF9wYXR0ZXJuczsgZmllbGRzXSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGRpY3RfcCAodmFsdWUpKSkpIHRoZW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIGsgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGdldCAocGF0dGVybikgKGspKSkgKChnZXQgKHZhbHVlKSAoaykpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtwYXR0ZXJuXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGxpc3RfcCAodmFsdWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3BhdHRlcm47IChTeW1ib2wgXCImcmVzdFwiKV0pKSkpIHRoZW4gKGxldCByZXN0X2lkeCA9IChwcmltX2NhbGwgXCJpbmRleC1vZlwiIFtwYXR0ZXJuOyAoU3ltYm9sIFwiJnJlc3RcIildKSBpbiAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAodmFsdWUpKTsgcmVzdF9pZHhdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gcGFpciAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZmlyc3QgKHBhaXIpKSkgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFsocHJpbV9jYWxsIFwic2xpY2VcIiBbcGF0dGVybjsgKE51bWJlciAwLjApOyByZXN0X2lkeF0pOyAocHJpbV9jYWxsIFwic2xpY2VcIiBbdmFsdWU7IChOdW1iZXIgMC4wKTsgcmVzdF9pZHhdKV0pKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgcmVzdF9uYW1lID0gKG50aCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3Jlc3RfaWR4OyAoTnVtYmVyIDEuMCldKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKHJlc3RfbmFtZSkpKSAocHJpbV9jYWxsIFwic2xpY2VcIiBbdmFsdWU7IHJlc3RfaWR4XSkpKSBpbiAoQm9vbCB0cnVlKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKHZhbHVlKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocGF0dGVybikpOyAobGVuICh2YWx1ZSkpXSkpKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgcGFpcnMgPSAocHJpbV9jYWxsIFwiemlwXCIgW3BhdHRlcm47IHZhbHVlXSkgaW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHBhaXIgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIChzeF90b19saXN0IHBhaXJzKSkpKSkgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyB2YWx1ZV0pKSkpKSkpKSlcblxuKCogbWF0Y2gtY2xhdXNlLWlzLWVsc2U/ICopXG5hbmQgbWF0Y2hfY2xhdXNlX2lzX2Vsc2VfcCBjbGF1c2UgPVxuICAobGV0IHAgPSAoZmlyc3QgKGNsYXVzZSkpIGluIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbcDsgKFN5bWJvbCBcIl9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtwOyAoU3ltYm9sIFwiZWxzZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtwOyAoU3RyaW5nIFwiZWxzZVwiKV0pKSkpXG5cbigqIG1hdGNoLWNsYXVzZS1jdG9yLW5hbWUgKilcbmFuZCBtYXRjaF9jbGF1c2VfY3Rvcl9uYW1lIGNsYXVzZSA9XG4gIChsZXQgcCA9IChmaXJzdCAoY2xhdXNlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHApKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHN5bWJvbF9wICgoZmlyc3QgKHApKSkpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHApKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wIChwKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoU3ltYm9sIFwiX1wiKV0pKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChTeW1ib2wgXCJlbHNlXCIpXSkpKSkpKSkpIHRoZW4gTmlsIGVsc2UgTmlsKSkpXG5cbigqIG1hdGNoLXdhcm4tbm9uLWV4aGF1c3RpdmUgKilcbmFuZCBtYXRjaF93YXJuX25vbl9leGhhdXN0aXZlIGVudiB0eXBlX25hbWUgcmVnaXN0ZXJlZCBjbGF1c2VfY3RvcnMgPVxuICAobGV0IG1pc3NpbmcgPSAoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biBjIC0+IHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW2NsYXVzZV9jdG9yczsgY10pKSkpKSkpIChzeF90b19saXN0IHJlZ2lzdGVyZWQpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAobWlzc2luZykpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwiKmFkdC13YXJuZWQqXCIpKSkpKSkpKSB0aGVuIChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiKmFkdC13YXJuZWQqXCIpKSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSBlbHNlIE5pbCkpIGluIChsZXQgd2FybmVkID0gKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqYWR0LXdhcm5lZCpcIikpKSBpbiBsZXQga2V5ID0gKFN0cmluZyAoc3hfc3RyIFt0eXBlX25hbWU7IChTdHJpbmcgXCJ8XCIpOyAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiLFwiKTsgbWlzc2luZ10pXSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGdldCAod2FybmVkKSAoa2V5KSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHdhcm5lZCBrZXkgKEJvb2wgdHJ1ZSkpKSBpbiAoaG9zdF93YXJuICgoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJbc3hdIG1hdGNoOiBub24tZXhoYXVzdGl2ZSDigJQgXCIpOyB0eXBlX25hbWU7IChTdHJpbmcgXCI6IG1pc3NpbmcgXCIpOyAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiLCBcIik7IG1pc3NpbmddKV0pKSkpKSBlbHNlIE5pbCkpKSBlbHNlIE5pbCkpIGluIE5pbCkpXG5cbigqIG1hdGNoLWNoZWNrLWV4aGF1c3RpdmVuZXNzICopXG5hbmQgbWF0Y2hfY2hlY2tfZXhoYXVzdGl2ZW5lc3MgdmFsJyBjbGF1c2VzIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHZhbCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0ICh2YWwnKSAoKFN0cmluZyBcIl9hZHRcIikpKSkpIHRoZW4gKGxldCB0eXBlX25hbWUgPSAoZ2V0ICh2YWwnKSAoKFN0cmluZyBcIl90eXBlXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCIqYWR0LXJlZ2lzdHJ5KlwiKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIHR5cGVfbmFtZSkpIHRoZW4gKGxldCByZWdpc3RlcmVkID0gKGdldCAoKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqYWR0LXJlZ2lzdHJ5KlwiKSkpKSAodHlwZV9uYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gcmVnaXN0ZXJlZCBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChCb29sIChMaXN0LmV4aXN0cyAoZnVuIGMgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfY2xhdXNlX2lzX2Vsc2VfcCAoYykpKSkgKHN4X3RvX2xpc3QgY2xhdXNlcykpKSkpKSkpKSB0aGVuIChsZXQgY2xhdXNlX2N0b3JzID0gKExpc3QgKExpc3QuZmlsdGVyIChmdW4gbiAtPiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAobikpKSkpKSkpIChzeF90b19saXN0IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKG1hdGNoX2NsYXVzZV9jdG9yX25hbWUgKGMpKSkgKHN4X3RvX2xpc3QgY2xhdXNlcykpKSkpKSBpbiAobWF0Y2hfd2Fybl9ub25fZXhoYXVzdGl2ZSAoZW52KSAodHlwZV9uYW1lKSAocmVnaXN0ZXJlZCkgKGNsYXVzZV9jdG9ycykpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpXG5cbigqIHN0ZXAtc2YtbWF0Y2ggKilcbmFuZCBzdGVwX3NmX21hdGNoIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBjbGF1c2VzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0ICgpID0gaWdub3JlICgobWF0Y2hfY2hlY2tfZXhoYXVzdGl2ZW5lc3MgKHZhbCcpIChjbGF1c2VzKSAoZW52KSkpIGluIChsZXQgcmVzdWx0JyA9IChtYXRjaF9maW5kX2NsYXVzZSAodmFsJykgKGNsYXVzZXMpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN1bHQnKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJtYXRjaDogbm8gY2xhdXNlIG1hdGNoZWQgXCIpOyAoaW5zcGVjdCAodmFsJykpXSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVzdWx0JykgKChOdW1iZXIgMS4wKSkpKSAoKGZpcnN0IChyZXN1bHQnKSkpIChrb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtaGFuZGxlci1iaW5kICopXG5hbmQgc3RlcF9zZl9oYW5kbGVyX2JpbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgaGFuZGxlcl9zcGVjcyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgaGFuZGxlcnMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzcGVjIC0+IChMaXN0IFsodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChzcGVjKSkpIChlbnYpKSkpOyAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoc3BlYykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKV0pKSAoc3hfdG9fbGlzdCBoYW5kbGVyX3NwZWNzKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChib2R5KSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYm9keSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaGFuZGxlcl9mcmFtZSAoaGFuZGxlcnMpICgocmVzdCAoYm9keSkpKSAoZW52KSkpIChrb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtcmVzdGFydC1jYXNlICopXG5hbmQgc3RlcF9zZl9yZXN0YXJ0X2Nhc2UgYXJncyBlbnYga29udCA9XG4gIChsZXQgYm9keSA9IChmaXJzdCAoYXJncykpIGluIGxldCByZXN0YXJ0X3NwZWNzID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgcmVzdGFydHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzcGVjIC0+IChMaXN0IFsoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKChmaXJzdCAoc3BlYykpKSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHNwZWMpKSkpIGVsc2UgKGZpcnN0IChzcGVjKSkpOyAobnRoIChzcGVjKSAoKE51bWJlciAxLjApKSk7IChudGggKHNwZWMpICgoTnVtYmVyIDIuMCkpKV0pKSAoc3hfdG9fbGlzdCByZXN0YXJ0X3NwZWNzKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Jlc3RhcnRfZnJhbWUgKHJlc3RhcnRzKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1zaWduYWwgKilcbmFuZCBzdGVwX3NmX3NpZ25hbCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBjb25kaXRpb24gPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBoYW5kbGVyX2ZuID0gKGtvbnRfZmluZF9oYW5kbGVyIChrb250KSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoaGFuZGxlcl9mbikpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuaGFuZGxlZCBjb25kaXRpb246IFwiKTsgKGluc3BlY3QgKGNvbmRpdGlvbikpXSkpKSkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoaGFuZGxlcl9mbikgKChMaXN0IFtjb25kaXRpb25dKSkgKGVudikgKChMaXN0IFtjb25kaXRpb25dKSkgKChrb250X3B1c2ggKChtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUgKGVudikgKGtvbnQpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1pbnZva2UtcmVzdGFydCAqKVxuYW5kIHN0ZXBfc2ZfaW52b2tlX3Jlc3RhcnQgYXJncyBlbnYga29udCA9XG4gIChsZXQgcmVzdGFydF9uYW1lID0gKGxldCBybiA9IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChhcmdzKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkgZWxzZSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHJuKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChybikpIGVsc2Ugcm4pKSBpbiBsZXQgcmVzdGFydF9hcmcgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIE5pbCkgaW4gbGV0IGZvdW5kID0gKGtvbnRfZmluZF9yZXN0YXJ0IChrb250KSAocmVzdGFydF9uYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZm91bmQpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJObyByZXN0YXJ0IG5hbWVkOiBcIik7IChpbnNwZWN0IChyZXN0YXJ0X25hbWUpKV0pKSkpKSBlbHNlIChsZXQgZW50cnkgPSAoZmlyc3QgKGZvdW5kKSkgaW4gbGV0IHJlc3RhcnRfZnJhbWUgPSAobnRoIChmb3VuZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCByZXN0X2tvbnQgPSAobnRoIChmb3VuZCkgKChOdW1iZXIgMi4wKSkpIGluIChsZXQgcGFyYW1zID0gKG50aCAoZW50cnkpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChudGggKGVudHJ5KSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHJlc3RhcnRfZW52ID0gKGVudl9leHRlbmQgKChnZXQgKHJlc3RhcnRfZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChwYXJhbXMpKSkpKSkpIHRoZW4gKGVudl9iaW5kIHJlc3RhcnRfZW52IChzeF90b19zdHJpbmcgKGZpcnN0IChwYXJhbXMpKSkgcmVzdGFydF9hcmcpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAocmVzdGFydF9lbnYpIChyZXN0X2tvbnQpKSkpKSkpXG5cbigqIHN0ZXAtc2YtaWYgKilcbmFuZCBzdGVwX3NmX2lmIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaWZfZnJhbWUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG50aCAoYXJncykgKChOdW1iZXIgMi4wKSkpIGVsc2UgTmlsKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi13aGVuICopXG5hbmQgc3RlcF9zZl93aGVuIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfd2hlbl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1iZWdpbiAqKVxuYW5kIHN0ZXBfc2ZfYmVnaW4gYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1sZXQgKilcbmFuZCBzdGVwX3NmX2xldCBhcmdzIGVudiBrb250ID1cbiAgbGV0IHBhaXJzID0gcmVmIE5pbCBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChhcmdzKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX25hbWVkX2xldCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJpbmRpbmdzKSkpIHRoZW4gKHN0ZXBfc2ZfYmVnaW4gKGJvZHkpIChsb2NhbCkgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3RfYmluZGluZyA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChmaXJzdCAoYmluZGluZ3MpKSBlbHNlIChMaXN0IFsoZmlyc3QgKGJpbmRpbmdzKSk7IChudGggKGJpbmRpbmdzKSAoKE51bWJlciAxLjApKSldKSkgaW4gbGV0IHJlc3RfYmluZGluZ3MgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAocmVzdCAoYmluZGluZ3MpKSBlbHNlIChsZXQgcGFpcnMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBpIC0+IChwYWlycyA6PSBzeF9hcHBlbmRfYiAhcGFpcnMgKExpc3QgWyhudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbaTsgKE51bWJlciAyLjApXSkpKTsgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhwcmltX2NhbGwgXCIqXCIgW2k7IChOdW1iZXIgMi4wKV0pXSkpKV0pOyBOaWwpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMS4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSBpbiAhcGFpcnMpKSkgaW4gKGxldCB2bmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChmaXJzdF9iaW5kaW5nKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoZmlyc3RfYmluZGluZykgKChOdW1iZXIgMS4wKSkpKSAobG9jYWwpICgoa29udF9wdXNoICgobWFrZV9sZXRfZnJhbWUgKHZuYW1lKSAocmVzdF9iaW5kaW5ncykgKGJvZHkpIChsb2NhbCkpKSAoa29udCkpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLWRlZmluZSAqKVxuYW5kIHN0ZXBfc2ZfZGVmaW5lIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHJlc29sdmVkX2FyZ3MgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChhcmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAobGV0IGZuX25hbWUgPSAoZmlyc3QgKChmaXJzdCAoYXJncykpKSkgaW4gbGV0IHBhcmFtcyA9IChyZXN0ICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBib2R5X3BhcnRzID0gKHJlc3QgKGFyZ3MpKSBpbiAoTGlzdCBbZm5fbmFtZTsgKHByaW1fY2FsbCBcImNvbmNhdFwiIFsoTGlzdCBbKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiZm5cIikpKV0pOyAoTGlzdCBbcGFyYW1zXSk7IGJvZHlfcGFydHNdKV0pKSBlbHNlIGFyZ3MpIGluIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKHJlc29sdmVkX2FyZ3MpKSBpbiBsZXQgaGFzX2VmZmVjdHMgPSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzb2x2ZWRfYXJncykpOyAoTnVtYmVyIDQuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAocmVzb2x2ZWRfYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAocmVzb2x2ZWRfYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJlZmZlY3RzXCIpXSkpKSBpbiBsZXQgdmFsX2lkeCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZXNvbHZlZF9hcmdzKSk7IChOdW1iZXIgNC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChyZXNvbHZlZF9hcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChyZXNvbHZlZF9hcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImVmZmVjdHNcIildKSkpKSB0aGVuIChOdW1iZXIgMy4wKSBlbHNlIChOdW1iZXIgMS4wKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc29sdmVkX2FyZ3MpKTsgKE51bWJlciA0LjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKHJlc29sdmVkX2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKHJlc29sdmVkX2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiZWZmZWN0c1wiKV0pKSkpIHRoZW4gKG50aCAocmVzb2x2ZWRfYXJncykgKChOdW1iZXIgMi4wKSkpIGVsc2UgTmlsKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKHJlc29sdmVkX2FyZ3MpICh2YWxfaWR4KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kZWZpbmVfZnJhbWUgKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgKGVudikgKGhhc19lZmZlY3RzKSAoZWZmZWN0X2xpc3QpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1zZXQhICopXG5hbmQgc3RlcF9zZl9zZXRfYiBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9zZXRfZnJhbWUgKChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1hbmQgKilcbmFuZCBzdGVwX3NmX2FuZCBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIHRydWUpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2FuZF9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2Ytb3IgKilcbmFuZCBzdGVwX3NmX29yIGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX29yX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1jb25kICopXG5hbmQgc3RlcF9zZl9jb25kIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHNjaGVtZV9wID0gKGNvbmRfc2NoZW1lX3AgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5IChzY2hlbWVfcCkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBjbGF1c2UgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlICh0ZXN0KSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAodGVzdCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKGFyZ3MpIChlbnYpICgoQm9vbCB0cnVlKSkpKSAoa29udCkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCB0ZXN0ID0gKGZpcnN0IChhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlICh0ZXN0KSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKHRlc3QpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChhcmdzKSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtdGhyZWFkLWZpcnN0ICopXG5hbmQgc3RlcF9zZl90aHJlYWRfZmlyc3QgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV90aHJlYWRfZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpICgoU3RyaW5nIFwiZmlyc3RcIikpIChOaWwpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtdGhyZWFkLWxhc3QgKilcbmFuZCBzdGVwX3NmX3RocmVhZF9sYXN0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSAoKFN0cmluZyBcImxhc3RcIikpIChOaWwpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtdGhyZWFkLWFzICopXG5hbmQgc3RlcF9zZl90aHJlYWRfYXMgYXJncyBlbnYga29udCA9XG4gIChsZXQgaW5pdCA9IChmaXJzdCAoYXJncykpIGluIGxldCBuYW1lID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBmb3JtcyA9IChyZXN0ICgocmVzdCAoYXJncykpKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChpbml0KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChmb3JtcykgKGVudikgKChTdHJpbmcgXCJhc1wiKSkgKG5hbWUpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLWxhbWJkYSAqKVxuYW5kIHN0ZXBfc2ZfbGFtYmRhIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfdmFsdWUgKChzZl9sYW1iZGEgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKVxuXG4oKiBzdGVwLXNmLXNjb3BlICopXG5hbmQgc3RlcF9zZl9zY29wZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgcmVzdF9hcmdzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMS4wKV0pIGluIGxldCB2YWwnID0gcmVmIChOaWwpIGluIGxldCBib2R5ID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZXN0X2FyZ3MpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocmVzdF9hcmdzKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJ2YWx1ZVwiKV0pKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHZhbCcgOj0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJlc3RfYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKTsgTmlsKSkgaW4gKGJvZHkgOj0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3RfYXJnczsgKE51bWJlciAyLjApXSk7IE5pbCkpIGVsc2UgKGJvZHkgOj0gcmVzdF9hcmdzOyBOaWwpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKCFib2R5KSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoIWJvZHkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Njb3BlX2FjY19mcmFtZSAobmFtZSkgKCF2YWwnKSAoKHJlc3QgKCFib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpXG5cbigqIHN0ZXAtc2YtcHJvdmlkZSAqKVxuYW5kIHN0ZXBfc2ZfcHJvdmlkZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBib2R5ID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMi4wKV0pIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChuYW1lKSAodmFsJykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYm9keSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Byb3ZpZGVfZnJhbWUgKG5hbWUpICh2YWwnKSAoKHJlc3QgKGJvZHkpKSkgKGVudikpKSAoa29udCkpKSkpKSlcblxuKCogc3RlcC1zZi1jb250ZXh0ICopXG5hbmQgc3RlcF9zZl9jb250ZXh0IGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBkZWZhdWx0X3ZhbCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZnJhbWUgPSAoa29udF9maW5kX3Byb3ZpZGUgKGtvbnQpIChuYW1lKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoIV9iaW5kX3RyYWNraW5nX3JlZikgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbIV9iaW5kX3RyYWNraW5nX3JlZjsgbmFtZV0pKSkpKSkgdGhlbiAoX2JpbmRfdHJhY2tpbmdfcmVmIDo9IHN4X2FwcGVuZF9iICFfYmluZF90cmFja2luZ19yZWYgbmFtZTsgTmlsKSBlbHNlIE5pbCkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKChsZXQgc3YgPSAoc2NvcGVfcGVlayAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHN2KSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIGRlZmF1bHRfdmFsKSBlbHNlIHN2KSkpIChlbnYpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXBlZWsgKilcbmFuZCBzdGVwX3NmX3BlZWsgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGRlZmF1bHRfdmFsID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgZWxzZSBOaWwpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfcHJvdmlkZSAoa29udCkgKG5hbWUpKSBpbiAobWFrZV9jZWtfdmFsdWUgKChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcInBlZWtcIikpKSkgdGhlbiAoc3hfYXBwbHkgKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCJwZWVrXCIpKSkgKExpc3QgW25hbWU7IGRlZmF1bHRfdmFsXSkpIGVsc2UgZGVmYXVsdF92YWwpKSkgKGVudikgKGtvbnQpKSlcblxuKCogc3RlcC1zZi1wcm92aWRlISAqKVxuYW5kIHN0ZXBfc2ZfcHJvdmlkZV9iIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcHJvdmlkZV9zZXRfZnJhbWUgKG5hbWUpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLWVtaXQgKilcbmFuZCBzdGVwX3NmX2VtaXQgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgZnJhbWUgPSAoa29udF9maW5kX3Njb3BlX2FjYyAoa29udCkgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5IChmcmFtZSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBmcmFtZSAoU3RyaW5nIFwiZW1pdHRlZFwiKSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVtaXR0ZWRcIikpKTsgKExpc3QgW3ZhbCddKV0pKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCJzY29wZS1lbWl0IVwiKSkpKSB0aGVuIChzeF9hcHBseSAoZW52X2dldCAoZW52KSAoKFN0cmluZyBcInNjb3BlLWVtaXQhXCIpKSkgKExpc3QgW25hbWU7IHZhbCddKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLWVtaXR0ZWQgKilcbmFuZCBzdGVwX3NmX2VtaXR0ZWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9zY29wZV9hY2MgKGtvbnQpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5IChmcmFtZSkgdGhlbiAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcImVtaXR0ZWRcIikpKSkgdGhlbiAoc3hfYXBwbHkgKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkgKExpc3QgW25hbWVdKSkgZWxzZSAoTGlzdCBbXSkpKSkgKGVudikgKGtvbnQpKSlcblxuKCogc3RlcC1zZi1yZXNldCAqKVxuYW5kIHN0ZXBfc2ZfcmVzZXQgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9yZXNldF9mcmFtZSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXNoaWZ0ICopXG5hbmQgc3RlcF9zZl9zaGlmdCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBrX25hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkgaW4gbGV0IGJvZHkgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGNhcHR1cmVkX3Jlc3VsdCA9IChrb250X2NhcHR1cmVfdG9fcmVzZXQgKGtvbnQpKSBpbiBsZXQgY2FwdHVyZWQgPSAoZmlyc3QgKGNhcHR1cmVkX3Jlc3VsdCkpIGluIGxldCByZXN0X2tvbnQgPSAobnRoIChjYXB0dXJlZF9yZXN1bHQpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IGsgPSAobWFrZV9jZWtfY29udGludWF0aW9uIChjYXB0dXJlZCkgKHJlc3Rfa29udCkpIGluIChsZXQgc2hpZnRfZW52ID0gKGVudl9leHRlbmQgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBzaGlmdF9lbnYgKHN4X3RvX3N0cmluZyBrX25hbWUpIGspKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChzaGlmdF9lbnYpIChyZXN0X2tvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1kZXJlZiAqKVxuYW5kIHN0ZXBfc2ZfZGVyZWYgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kZXJlZl9mcmFtZSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBjZWstY2FsbCAqKVxuYW5kIGNla19jYWxsIGYgYXJncyA9XG4gIChsZXQgYSA9IChpZiBzeF90cnV0aHkgKChpc19uaWwgKGFyZ3MpKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSBhcmdzKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmKSkpIHRoZW4gTmlsIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAoaXNfbGFtYmRhIChmKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChpc19jYWxsYWJsZSAoZikpKSkgdGhlbiAoY2VrX3J1biAoKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKGEpICgobWFrZV9lbnYgKCkpKSAoYSkgKChMaXN0IFtdKSkpKSkgZWxzZSBOaWwpKSlcblxuKCogcmVhY3RpdmUtc2hpZnQtZGVyZWYgKilcbmFuZCByZWFjdGl2ZV9zaGlmdF9kZXJlZiBzaWcnIGVudiBrb250ID1cbiAgKGxldCBzY2FuX3Jlc3VsdCA9IChrb250X2NhcHR1cmVfdG9fcmVhY3RpdmVfcmVzZXQgKGtvbnQpKSBpbiBsZXQgY2FwdHVyZWRfZnJhbWVzID0gKGZpcnN0IChzY2FuX3Jlc3VsdCkpIGluIGxldCByZXNldF9mcmFtZSA9IChudGggKHNjYW5fcmVzdWx0KSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHJlbWFpbmluZ19rb250ID0gKG50aCAoc2Nhbl9yZXN1bHQpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgdXBkYXRlX2ZuID0gKGdldCAocmVzZXRfZnJhbWUpICgoU3RyaW5nIFwidXBkYXRlLWZuXCIpKSkgaW4gKGxldCBzdWJfZGlzcG9zZXJzID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgc3Vic2NyaWJlciA9IChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiAoZnVuICgpIC0+IGxldCBzdWJfZGlzcG9zZXJzID0gcmVmIE5pbCBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZCAtPiBpZ25vcmUgKChjZWtfY2FsbCAoZCkgKE5pbCkpKSkgKHN4X3RvX2xpc3QgIXN1Yl9kaXNwb3NlcnMpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3ViX2Rpc3Bvc2VycyA6PSAoTGlzdCBbXSk7IE5pbCkpIGluIChsZXQgbmV3X3Jlc2V0ID0gKG1ha2VfcmVhY3RpdmVfcmVzZXRfZnJhbWUgKGVudikgKHVwZGF0ZV9mbikgKChCb29sIGZhbHNlKSkpIGluIGxldCBuZXdfa29udCA9IChwcmltX2NhbGwgXCJjb25jYXRcIiBbY2FwdHVyZWRfZnJhbWVzOyAoTGlzdCBbbmV3X3Jlc2V0XSk7IHJlbWFpbmluZ19rb250XSkgaW4gKHdpdGhfaXNsYW5kX3Njb3BlICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZF0gLT4gKGZ1biBkIC0+IGxldCBzdWJfZGlzcG9zZXJzID0gcmVmIE5pbCBpbiAoc3ViX2Rpc3Bvc2VycyA6PSBzeF9hcHBlbmRfYiAhc3ViX2Rpc3Bvc2VycyBkOyBOaWwpKSBkIHwgXyAtPiBOaWwpKSkgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiAoZnVuICgpIC0+IChjZWtfcnVuICgobWFrZV9jZWtfdmFsdWUgKChzaWduYWxfdmFsdWUgKHNpZycpKSkgKGVudikgKG5ld19rb250KSkpKSkgKCkpKSkpKSkpKSAoKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzaWduYWxfYWRkX3N1Yl9iIChzaWcnKSAoc3Vic2NyaWJlcikpKSBpbiAobGV0ICgpID0gaWdub3JlICgocmVnaXN0ZXJfaW5fc2NvcGUgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiAoZnVuICgpIC0+IChsZXQgKCkgPSBpZ25vcmUgKChzaWduYWxfcmVtb3ZlX3N1Yl9iIChzaWcnKSAoc3Vic2NyaWJlcikpKSBpbiAoTGlzdC5pdGVyIChmdW4gZCAtPiBpZ25vcmUgKChjZWtfY2FsbCAoZCkgKE5pbCkpKSkgKHN4X3RvX2xpc3QgIXN1Yl9kaXNwb3NlcnMpOyBOaWwpKSkgKCkpKSkpKSBpbiAobGV0IGluaXRpYWxfa29udCA9IChwcmltX2NhbGwgXCJjb25jYXRcIiBbY2FwdHVyZWRfZnJhbWVzOyAoTGlzdCBbcmVzZXRfZnJhbWVdKTsgcmVtYWluaW5nX2tvbnRdKSBpbiAobWFrZV9jZWtfdmFsdWUgKChzaWduYWxfdmFsdWUgKHNpZycpKSkgKGVudikgKGluaXRpYWxfa29udCkpKSkpKSkpXG5cbigqIHN0ZXAtZXZhbC1jYWxsICopXG5hbmQgc3RlcF9ldmFsX2NhbGwgaGVhZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBobmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKGhlYWQpKSBlbHNlIE5pbCkgaW4gKG1ha2VfY2VrX3N0YXRlIChoZWFkKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYXJnX2ZyYW1lIChOaWwpICgoTGlzdCBbXSkpIChhcmdzKSAoZW52KSAoYXJncykgKGhuYW1lKSkpIChrb250KSkpKSlcblxuKCogaG8tZm9ybS1uYW1lPyAqKVxuYW5kIGhvX2Zvcm1fbmFtZV9wIG5hbWUgPVxuICAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXBcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwLWluZGV4ZWRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZmlsdGVyXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInJlZHVjZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzb21lXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImV2ZXJ5P1wiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkpKSkpKVxuXG4oKiBoby1mbj8gKilcbmFuZCBob19mbl9wIHYgPVxuICAobGV0IF9vciA9IChpc19jYWxsYWJsZSAodikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfbGFtYmRhICh2KSkpXG5cbigqIGhvLXN3YXAtYXJncyAqKVxuYW5kIGhvX3N3YXBfYXJncyBob190eXBlIGV2YWxlZCA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGEgPSAoZmlyc3QgKGV2YWxlZCkpIGluIGxldCBiID0gKG50aCAoZXZhbGVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaG9fZm5fcCAoYSkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaG9fZm5fcCAoYikpKSkgdGhlbiAoTGlzdCBbYjsgKG50aCAoZXZhbGVkKSAoKE51bWJlciAyLjApKSk7IGFdKSBlbHNlIGV2YWxlZCkpIGVsc2UgKGxldCBhID0gKGZpcnN0IChldmFsZWQpKSBpbiBsZXQgYiA9IChudGggKGV2YWxlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGhvX2ZuX3AgKGEpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2ZuX3AgKGIpKSkpIHRoZW4gKExpc3QgW2I7IGFdKSBlbHNlIGV2YWxlZCkpKVxuXG4oKiBzZXEtdG8tbGlzdCAqKVxuYW5kIHNlcV90b19saXN0IHggPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFt4OyBOaWxdKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wICh4KSkpIHRoZW4geCBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJ2ZWN0b3I/XCIgW3hdKSkgdGhlbiAocHJpbV9jYWxsIFwidmVjdG9yLT5saXN0XCIgW3hdKSBlbHNlIChpZiBzeF90cnV0aHkgKChzdHJpbmdfcCAoeCkpKSB0aGVuIChsZXQgbiA9IChsZW4gKHgpKSBpbiAobGV0IHJlYyBsb29wID0gKGZ1biBpIGFjYyAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFtpOyAoTnVtYmVyIDAuMCldKSkgdGhlbiBhY2MgZWxzZSAobG9vcCAoKHByaW1fY2FsbCBcIi1cIiBbaTsgKE51bWJlciAxLjApXSkpICgoY29ucyAoKHByaW1fY2FsbCBcInNsaWNlXCIgW3g7IGk7IChwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMS4wKV0pXSkpIChhY2MpKSkpKSkgaW4gKGxvb3AgKChwcmltX2NhbGwgXCItXCIgW247IChOdW1iZXIgMS4wKV0pKSAoKExpc3QgW10pKSkpKSBlbHNlIHgpKSkpXG5cbigqIGhvLXNldHVwLWRpc3BhdGNoICopXG5hbmQgaG9fc2V0dXBfZGlzcGF0Y2ggaG9fdHlwZSBldmFsZWQgZW52IGtvbnQgPVxuICAobGV0IG9yZGVyZWQgPSAoaG9fc3dhcF9hcmdzIChob190eXBlKSAoZXZhbGVkKSkgaW4gKGxldCBmID0gKGZpcnN0IChvcmRlcmVkKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gaG9fdHlwZSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAob3JkZXJlZCkpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobGV0IGNvbGxzID0gKHJlc3QgKG9yZGVyZWQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGVtcHR5X3AgKGMpKSkpIChzeF90b19saXN0IGNvbGxzKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBoZWFkcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKGZpcnN0IChjKSkpIChzeF90b19saXN0IGNvbGxzKSkpIGluIGxldCB0YWlscyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKHJlc3QgKGMpKSkgKHN4X3RvX2xpc3QgY29sbHMpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKGhlYWRzKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfbXVsdGlfbWFwX2ZyYW1lIChmKSAodGFpbHMpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKGxldCBjb2xsID0gKHNlcV90b19saXN0ICgobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKGNvbGwpKV0pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfbWFwX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwLWluZGV4ZWRcIildKSkgdGhlbiAobGV0IGNvbGwgPSAoc2VxX3RvX2xpc3QgKChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhOdW1iZXIgMC4wKTsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGNvbGwgPSAoc2VxX3RvX2xpc3QgKChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9maWx0ZXJfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoKExpc3QgW10pKSAoKGZpcnN0IChjb2xsKSkpIChlbnYpKSkgKGtvbnQpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBpbml0ID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBjb2xsID0gKHNlcV90b19saXN0ICgobnRoIChvcmRlcmVkKSAoKE51bWJlciAyLjApKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoaW5pdCkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbaW5pdDsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3JlZHVjZV9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpIChlbnYpKSkgKGtvbnQpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic29tZVwiKV0pKSB0aGVuIChsZXQgY29sbCA9IChzZXFfdG9fbGlzdCAoKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKHNlcV90b19saXN0ICgobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9ldmVyeV9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpIChlbnYpKSkgKGtvbnQpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAobGV0IGNvbGwgPSAoc2VxX3RvX2xpc3QgKChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9mb3JfZWFjaF9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpIChlbnYpKSkgKGtvbnQpKSkpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIEhPIHR5cGU6IFwiKTsgaG9fdHlwZV0pKSkpKSkpKSkpKSkpKSlcblxuKCogc2VxdWVuY2UtdG8tbGlzdCAqKVxuYW5kIHNlcXVlbmNlX3RvX2xpc3QgcyA9XG4gIChzZXFfdG9fbGlzdCAocykpXG5cbigqIHNlcXVlbmNlLXRvLXZlY3RvciAqKVxuYW5kIHNlcXVlbmNlX3RvX3ZlY3RvciBzID1cbiAgKHByaW1fY2FsbCBcImxpc3QtPnZlY3RvclwiIFsoc2VxX3RvX2xpc3QgKHMpKV0pXG5cbigqIHNlcXVlbmNlLWxlbmd0aCAqKVxuYW5kIHNlcXVlbmNlX2xlbmd0aCBzID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbczsgTmlsXSkpIHRoZW4gKE51bWJlciAwLjApIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAocykpKSB0aGVuIChsZW4gKHMpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJ2ZWN0b3I/XCIgW3NdKSkgdGhlbiAocHJpbV9jYWxsIFwidmVjdG9yLWxlbmd0aFwiIFtzXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoc3RyaW5nX3AgKHMpKSkgdGhlbiAobGVuIChzKSkgZWxzZSAobGVuICgoc2VxX3RvX2xpc3QgKHMpKSkpKSkpKVxuXG4oKiBzZXF1ZW5jZS1yZWYgKilcbmFuZCBzZXF1ZW5jZV9yZWYgcyBpID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtzOyBOaWxdKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxpc3RfcCAocykpKSkgdGhlbiAobnRoIChzKSAoaSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcInZlY3Rvcj9cIiBbc10pKSB0aGVuIChwcmltX2NhbGwgXCJ2ZWN0b3ItcmVmXCIgW3M7IGldKSBlbHNlIChpZiBzeF90cnV0aHkgKChzdHJpbmdfcCAocykpKSB0aGVuIChwcmltX2NhbGwgXCJzbGljZVwiIFtzOyBpOyAocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKV0pIGVsc2UgKG50aCAoKHNlcV90b19saXN0IChzKSkpIChpKSkpKSlcblxuKCogc2VxdWVuY2UtYXBwZW5kICopXG5hbmQgc2VxdWVuY2VfYXBwZW5kIHMxIHMyID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcInZlY3Rvcj9cIiBbczFdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwidmVjdG9yP1wiIFtzMl0pKSkgdGhlbiAocHJpbV9jYWxsIFwibGlzdC0+dmVjdG9yXCIgWyhwcmltX2NhbGwgXCJjb25jYXRcIiBbKHByaW1fY2FsbCBcInZlY3Rvci0+bGlzdFwiIFtzMV0pOyAocHJpbV9jYWxsIFwidmVjdG9yLT5saXN0XCIgW3MyXSldKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN0cmluZ19wIChzMSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChzdHJpbmdfcCAoczIpKSkpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFtzMTsgczJdKSkgZWxzZSAocHJpbV9jYWxsIFwiY29uY2F0XCIgWyhzZXFfdG9fbGlzdCAoczEpKTsgKHNlcV90b19saXN0IChzMikpXSkpKVxuXG4oKiBzdGVwLWhvLW1hcCAqKVxuYW5kIHN0ZXBfaG9fbWFwIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJtYXBcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLW1hcC1pbmRleGVkICopXG5hbmQgc3RlcF9ob19tYXBfaW5kZXhlZCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwibWFwLWluZGV4ZWRcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLWZpbHRlciAqKVxuYW5kIHN0ZXBfaG9fZmlsdGVyIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJmaWx0ZXJcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLXJlZHVjZSAqKVxuYW5kIHN0ZXBfaG9fcmVkdWNlIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJyZWR1Y2VcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLXNvbWUgKilcbmFuZCBzdGVwX2hvX3NvbWUgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcInNvbWVcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLWV2ZXJ5ICopXG5hbmQgc3RlcF9ob19ldmVyeSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwiZXZlcnlcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWhvLWZvci1lYWNoICopXG5hbmQgc3RlcF9ob19mb3JfZWFjaCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwiZm9yLWVhY2hcIikpICgocmVzdCAoYXJncykpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLWNvbnRpbnVlICopXG5hbmQgc3RlcF9jb250aW51ZSBzdGF0ZSA9XG4gIChsZXQgdmFsdWUgPSAoY2VrX3ZhbHVlIChzdGF0ZSkpIGluIGxldCBlbnYgPSAoY2VrX2VudiAoc3RhdGUpKSBpbiBsZXQga29udCA9IChjZWtfa29udCAoc3RhdGUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoa29udF9lbXB0eV9wIChrb250KSkpIHRoZW4gc3RhdGUgZWxzZSAobGV0IGZyYW1lID0gKGtvbnRfdG9wIChrb250KSkgaW4gbGV0IHJlc3RfayA9IChrb250X3BvcCAoa29udCkpIGluIGxldCBmdCA9IChmcmFtZV90eXBlIChmcmFtZSkpIGluIChsZXQgX21hdGNoX3ZhbCA9IGZ0IGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpZlwiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHZhbHVlIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAodmFsdWUpKSkpKSkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidGhlblwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19uaWwgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVsc2VcIikpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVsc2VcIikpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ3aGVuXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKGxldCBib2R5ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYm9keVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHkpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChib2R5KSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYmVnaW5cIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChyZW1haW5pbmcpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2JlZ2luX2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGJvZHkgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJib2R5XCIpKSkgaW4gbGV0IGxvY2FsID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgbmFtZSkgdmFsdWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKHN0ZXBfc2ZfYmVnaW4gKGJvZHkpIChsb2NhbCkgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X2JpbmRpbmcgPSAoZmlyc3QgKHJlbWFpbmluZykpIGluIGxldCB2bmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKG5leHRfYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAobmV4dF9iaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAobmV4dF9iaW5kaW5nKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dF9iaW5kaW5nKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2xldF9mcmFtZSAodm5hbWUpICgocmVzdCAocmVtYWluaW5nKSkpIChib2R5KSAobG9jYWwpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCBoYXNfZWZmZWN0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhhcy1lZmZlY3RzXCIpKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWZmZWN0LWxpc3RcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfbGFtYmRhICh2YWx1ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19uaWwgKChsYW1iZGFfbmFtZSAodmFsdWUpKSkpKSkgdGhlbiAoc2V0X2xhbWJkYV9uYW1lIHZhbHVlIChzeF90b19zdHJpbmcgbmFtZSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKGhhc19lZmZlY3RzKSB0aGVuIChsZXQgZWZmZWN0X25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSBlKSkgKHN4X3RvX2xpc3QgZWZmZWN0X2xpc3QpKSkgaW4gbGV0IGVmZmVjdF9hbm5zID0gKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGZlbnYpICgoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpKSkgdGhlbiAoZW52X2dldCAoZmVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpIGVsc2UgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZWZmZWN0X2FubnMgbmFtZSBlZmZlY3RfbmFtZXMpKSBpbiAoZW52X2JpbmQgZmVudiAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkgZWZmZWN0X2FubnMpKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpbmUtZm9yZWlnblwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19sYW1iZGEgKHZhbHVlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX25pbCAoKGxhbWJkYV9uYW1lICh2YWx1ZSkpKSkpKSB0aGVuIChzZXRfbGFtYmRhX25hbWUgdmFsdWUgKHN4X3RvX3N0cmluZyBuYW1lKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZmVudiAoc3hfdG9fc3RyaW5nIG5hbWUpIHZhbHVlKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzZXRcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X3NldCBmZW52IChzeF90b19zdHJpbmcgbmFtZSkgdmFsdWUpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJhbmRcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHZhbHVlKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiByZXN0X2sgZWxzZSAoa29udF9wdXNoICgobWFrZV9hbmRfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJvclwiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiByZXN0X2sgZWxzZSAoa29udF9wdXNoICgobWFrZV9vcl9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNvbmRcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IHNjaGVtZV9wID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwic2NoZW1lXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2NoZW1lX3ApIHRoZW4gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKGxldCBjbGF1c2UgPSAoZmlyc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGNsYXVzZSkpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcIj0+XCIpXSkpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGNsYXVzZSkgKChOdW1iZXIgMi4wKSkpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfYXJyb3dfZnJhbWUgKHZhbHVlKSAoZmVudikpKSAocmVzdF9rKSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChsZXQgbmV4dF9jbGF1c2VzID0gKHJlc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChuZXh0X2NsYXVzZXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF9jbGF1c2UgPSAoZmlyc3QgKG5leHRfY2xhdXNlcykpIGluIGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHRfY2xhdXNlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlIChuZXh0X3Rlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKG5leHRfY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKG5leHRfdGVzdCkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChuZXh0X2NsYXVzZXMpIChmZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKHJlc3RfaykpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVtYWluaW5nKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHQgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVtYWluaW5nOyAoTnVtYmVyIDIuMCk7IChsZW4gKHJlbWFpbmluZykpXSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAobmV4dCkpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF90ZXN0ID0gKGZpcnN0IChuZXh0KSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlIChuZXh0X3Rlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKG5leHQpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAobmV4dF90ZXN0KSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKG5leHQpIChmZW52KSAoKEJvb2wgZmFsc2UpKSkpIChyZXN0X2spKSkpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjYXNlXCIpXSkpIHRoZW4gKGxldCBtYXRjaF92YWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJtYXRjaC12YWxcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaF92YWwpKSkgdGhlbiAoc2ZfY2FzZV9zdGVwX2xvb3AgKHZhbHVlKSAocmVtYWluaW5nKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKHNmX2Nhc2Vfc3RlcF9sb29wIChtYXRjaF92YWwpIChyZW1haW5pbmcpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ0aHJlYWRcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IG1vZGUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJleHRyYVwiKSkpIGluIGxldCBiaW5kX25hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IGZvcm0gPSAoZmlyc3QgKHJlbWFpbmluZykpIGluIGxldCByZXN0X2Zvcm1zID0gKHJlc3QgKHJlbWFpbmluZykpIGluIGxldCBuZXdfa29udCA9IChpZiBzeF90cnV0aHkgKChlbXB0eV9wICgocmVzdCAocmVtYWluaW5nKSkpKSkgdGhlbiByZXN0X2sgZWxzZSAoa29udF9wdXNoICgobWFrZV90aHJlYWRfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChtb2RlKSAoYmluZF9uYW1lKSkpIChyZXN0X2spKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbW9kZTsgKFN0cmluZyBcImFzXCIpXSkpIHRoZW4gKGxldCBuZXdfZW52ID0gKGVudl9leHRlbmQgKGZlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbmV3X2VudiAoc3hfdG9fc3RyaW5nIChzeW1ib2xfbmFtZSAoYmluZF9uYW1lKSkpIHZhbHVlKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChmb3JtKSAobmV3X2VudikgKG5ld19rb250KSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmb3JtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZm9ybSkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChmb3JtKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChob19mb3JtX25hbWVfcCAoKHN5bWJvbF9uYW1lICgoZmlyc3QgKGZvcm0pKSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoY29ucyAoKGZpcnN0IChmb3JtKSkpICgoY29ucyAoKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgdmFsdWVdKSkgKChyZXN0IChmb3JtKSkpKSkpKSAoZmVudikgKG5ld19rb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFttb2RlOyAoU3RyaW5nIFwibGFzdFwiKV0pKSB0aGVuIChsZXQgcmVzdWx0JyA9ICh0aHJlYWRfaW5zZXJ0X2FyZ19sYXN0IChmb3JtKSAodmFsdWUpIChmZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfZm9ybXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChyZXN0X2Zvcm1zKSAoZmVudikgKG1vZGUpIChiaW5kX25hbWUpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChsZXQgcmVzdWx0JyA9ICh0aHJlYWRfaW5zZXJ0X2FyZyAoZm9ybSkgKHZhbHVlKSAoZmVudikpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZXN0X2Zvcm1zKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAocmVzdF9mb3JtcykgKGZlbnYpIChtb2RlKSAoYmluZF9uYW1lKSkpIChyZXN0X2spKSkpKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYXJnXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCBldmFsZWQgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJldmFsZWRcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgcmF3X2FyZ3MgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyYXctYXJnc1wiKSkpIGluIGxldCBobmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhlYWQtbmFtZVwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGYpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgaG5hbWUpKSB0aGVuIChzdHJpY3RfY2hlY2tfYXJncyAoaG5hbWUpICgoTGlzdCBbXSkpKSBlbHNlIE5pbCkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoY29udGludWVfd2l0aF9jYWxsICh2YWx1ZSkgKChMaXN0IFtdKSkgKGZlbnYpIChyYXdfYXJncykgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAodmFsdWUpICgoTGlzdCBbXSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGxldCBuZXdfZXZhbGVkID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtldmFsZWQ7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBobmFtZSkpIHRoZW4gKHN0cmljdF9jaGVja19hcmdzIChobmFtZSkgKG5ld19ldmFsZWQpKSBlbHNlIE5pbCkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChuZXdfZXZhbGVkKSAoZmVudikgKHJhd19hcmdzKSAocmVzdF9rKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoZikgKG5ld19ldmFsZWQpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGljdFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IHJlc3VsdHMgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZXN1bHRzXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0IGxhc3RfcmVzdWx0ID0gKGxhc3QgKHJlc3VsdHMpKSBpbiBsZXQgY29tcGxldGVkID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFsocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVzdWx0czsgKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiZGVjXCIgWyhsZW4gKHJlc3VsdHMpKV0pXSk7IChMaXN0IFsoTGlzdCBbKGZpcnN0IChsYXN0X3Jlc3VsdCkpOyB2YWx1ZV0pXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCBkID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGQgKGZpcnN0IChwYWlyKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IGNvbXBsZXRlZCk7IE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAoZCkgKGZlbnYpIChyZXN0X2spKSkpIGVsc2UgKGxldCBuZXh0X2VudHJ5ID0gKGZpcnN0IChyZW1haW5pbmcpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKG5leHRfZW50cnkpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9kaWN0X2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NvbXBsZXRlZDsgKExpc3QgWyhMaXN0IFsoZmlyc3QgKG5leHRfZW50cnkpKV0pXSldKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImhvLXNldHVwXCIpXSkpIHRoZW4gKGxldCBob190eXBlID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaG8tdHlwZVwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZXZhbGVkID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJldmFsZWRcIikpKTsgKExpc3QgW3ZhbHVlXSldKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoaG9fc2V0dXBfZGlzcGF0Y2ggKGhvX3R5cGUpIChldmFsZWQpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKGhvX3R5cGUpICgocmVzdCAocmVtYWluaW5nKSkpIChldmFsZWQpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVzZXRcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVyZWZcIildKSkgdGhlbiAobGV0IHZhbCcgPSB2YWx1ZSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX3NpZ25hbCAodmFsJykpKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaGFzX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lX3AgKHJlc3RfaykpKSB0aGVuIChyZWFjdGl2ZV9zaGlmdF9kZXJlZiAodmFsJykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChsZXQgY3R4ID0gKHN4X2NvbnRleHQgKChTdHJpbmcgXCJzeC1yZWFjdGl2ZVwiKSkgKE5pbCkpIGluIChpZiBzeF90cnV0aHkgKGN0eCkgdGhlbiAobGV0IGRlcF9saXN0ID0gcmVmICgoZ2V0IChjdHgpICgoU3RyaW5nIFwiZGVwc1wiKSkpKSBpbiBsZXQgbm90aWZ5X2ZuID0gKGdldCAoY3R4KSAoKFN0cmluZyBcIm5vdGlmeVwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFshZGVwX2xpc3Q7IHZhbCddKSkpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGRlcF9saXN0IDo9IHN4X2FwcGVuZF9iICFkZXBfbGlzdCB2YWwnOyBOaWwpKSBpbiAoc2lnbmFsX2FkZF9zdWJfYiAodmFsJykgKG5vdGlmeV9mbikpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKSkpIGluIChtYWtlX2Nla192YWx1ZSAoKHNpZ25hbF92YWx1ZSAodmFsJykpKSAoZmVudikgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSB0aGVuIChsZXQgdXBkYXRlX2ZuID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidXBkYXRlLWZuXCIpKSkgaW4gbGV0IGZpcnN0X3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmaXJzdC1yZW5kZXJcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSB1cGRhdGVfZm4gaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChmaXJzdF9wKSkpKSkpIHRoZW4gKGNla19jYWxsICh1cGRhdGVfZm4pICgoTGlzdCBbdmFsdWVdKSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGVudikgKHJlc3RfaykpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2NvcGVcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2NvcGVfZnJhbWUgKG5hbWUpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpKSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkpIGVsc2UgKGxldCBuZXdfZnJhbWUgPSAobWFrZV9wcm92aWRlX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG5ld19mcmFtZSAoU3RyaW5nIFwic3Vic2NyaWJlcnNcIikgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwic3Vic2NyaWJlcnNcIikpKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoIChuZXdfZnJhbWUpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJiaW5kXCIpXSkpIHRoZW4gKGxldCB0cmFja2VkID0gIV9iaW5kX3RyYWNraW5nX3JlZiBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCBwcmV2ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicHJldi10cmFja2luZ1wiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChfYmluZF90cmFja2luZ19yZWYgOj0gcHJldjsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGxldCBzdWJzY3JpYmVyID0gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2ZpcmVfa29udF0gLT4gKGZ1biBmaXJlX2tvbnQgLT4gKGNla19ydW4gKChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGZlbnYpICgoTGlzdCBbXSkpKSkpKSBmaXJlX2tvbnQgfCBfIC0+IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biBuYW1lIC0+IGlnbm9yZSAoKGxldCBleGlzdGluZyA9IChnZXQgKCFfcHJvdmlkZV9zdWJzY3JpYmVyc19yZWYpIChuYW1lKSkgaW4gKHN4X2RpY3Rfc2V0X2IgIV9wcm92aWRlX3N1YnNjcmliZXJzX3JlZiBuYW1lIChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKGlmIHN4X3RydXRoeSAoZXhpc3RpbmcpIHRoZW4gZXhpc3RpbmcgZWxzZSAoTGlzdCBbXSkpOyAoTGlzdCBbc3Vic2NyaWJlcl0pXSkpKSkpIChzeF90b19saXN0IHRyYWNrZWQpOyBOaWwpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJwcm92aWRlLXNldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCB0YXJnZXQgPSAoa29udF9maW5kX3Byb3ZpZGUgKHJlc3RfaykgKG5hbWUpKSBpbiAobGV0IG9sZF92YWwgPSAoaWYgc3hfdHJ1dGh5ICh0YXJnZXQpIHRoZW4gKGdldCAodGFyZ2V0KSAoKFN0cmluZyBcInZhbHVlXCIpKSkgZWxzZSAoc2NvcGVfcGVlayAobmFtZSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICh0YXJnZXQpIHRoZW4gKHN4X2RpY3Rfc2V0X2IgdGFyZ2V0IChTdHJpbmcgXCJ2YWx1ZVwiKSB2YWx1ZSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChuYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoIChuYW1lKSAodmFsdWUpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvbGRfdmFsOyB2YWx1ZV0pKSkpKSkgdGhlbiAoZmlyZV9wcm92aWRlX3N1YnNjcmliZXJzIChuYW1lKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNjb3BlLWFjY1wiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobGV0IG5ld19mcmFtZSA9IChtYWtlX3Njb3BlX2FjY19mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBuZXdfZnJhbWUgKFN0cmluZyBcImVtaXR0ZWRcIikgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpKSkgaW4gbmV3X2ZyYW1lKSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgaW5kZXhlZCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImluZGV4ZWRcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbmV3X3Jlc3VsdHMgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAobmV3X3Jlc3VsdHMpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IGNhbGxfYXJncyA9IChpZiBzeF90cnV0aHkgKGluZGV4ZWQpIHRoZW4gKExpc3QgWyhsZW4gKG5ld19yZXN1bHRzKSk7IChmaXJzdCAocmVtYWluaW5nKSldKSBlbHNlIChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIGluIGxldCBuZXh0X2ZyYW1lID0gKGlmIHN4X3RydXRoeSAoaW5kZXhlZCkgdGhlbiAobWFrZV9tYXBfaW5kZXhlZF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKG5ld19yZXN1bHRzKSAoZmVudikpIGVsc2UgKG1ha2VfbWFwX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpIChmZW52KSkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChjYWxsX2FyZ3MpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAobmV4dF9mcmFtZSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZpbHRlclwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IHJlc3VsdHMgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZXN1bHRzXCIpKSkgaW4gbGV0IGN1cnJlbnRfaXRlbSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImN1cnJlbnQtaXRlbVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCBuZXdfcmVzdWx0cyA9IChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChwcmltX2NhbGwgXCJhcHBlbmRcIiBbcmVzdWx0czsgKExpc3QgW2N1cnJlbnRfaXRlbV0pXSkgZWxzZSByZXN1bHRzKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChuZXdfcmVzdWx0cykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2ZpbHRlcl9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKG5ld19yZXN1bHRzKSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFt2YWx1ZTsgKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3JlZHVjZV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9mb3JfZWFjaF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzb21lXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCBmYWxzZSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9zb21lX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJldmVyeVwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHZhbHVlKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIHRydWUpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZXZlcnlfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImhhbmRsZXJcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaGFuZGxlcl9mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlc3RhcnRcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2lnbmFsLXJldHVyblwiKV0pKSB0aGVuIChsZXQgc2F2ZWRfa29udCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChzYXZlZF9rb250KSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29uZC1hcnJvd1wiKV0pKSB0aGVuIChsZXQgdGVzdF92YWx1ZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm1hdGNoLXZhbFwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAodmFsdWUpICgoTGlzdCBbdGVzdF92YWx1ZV0pKSAoZmVudikgKChMaXN0IFt0ZXN0X3ZhbHVlXSkpIChyZXN0X2spKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwid2luZC1hZnRlclwiKV0pKSB0aGVuIChsZXQgYWZ0ZXJfdGh1bmsgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJhZnRlci10aHVua1wiKSkpIGluIGxldCB3aW5kZXJzX2xlbiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIndpbmRlcnMtbGVuXCIpKSkgaW4gbGV0IGJvZHlfcmVzdWx0ID0gdmFsdWUgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuICghX3dpbmRlcnNfcmVmKSk7IHdpbmRlcnNfbGVuXSkpIHRoZW4gKF93aW5kZXJzX3JlZiA6PSAocmVzdCAoIV93aW5kZXJzX3JlZikpOyBOaWwpIGVsc2UgTmlsKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoYWZ0ZXJfdGh1bmspICgoTGlzdCBbXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfd2luZF9yZXR1cm5fZnJhbWUgKGJvZHlfcmVzdWx0KSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIndpbmQtcmV0dXJuXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJib2R5LXJlc3VsdFwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyYWlzZS1ldmFsXCIpXSkpIHRoZW4gKGxldCBjb25kaXRpb24gPSB2YWx1ZSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCBjb250aW51YWJsZV9wID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwic2NoZW1lXCIpKSkgaW4gbGV0IHVud2luZF9yZXN1bHQgPSAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAoZ2V0ICh1bndpbmRfcmVzdWx0KSAoKFN0cmluZyBcImhhbmRsZXJcIikpKSBpbiBsZXQgdW53b3VuZF9rID0gKGdldCAodW53aW5kX3Jlc3VsdCkgKChTdHJpbmcgXCJrb250XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoaGFuZGxlcl9mbikpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChfbGFzdF9lcnJvcl9rb250X3JlZiA6PSB1bndvdW5kX2s7IE5pbCkpIGluIChob3N0X2Vycm9yICgoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmhhbmRsZWQgZXhjZXB0aW9uOiBcIik7IChpbnNwZWN0IChjb25kaXRpb24pKV0pKSkpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGhhbmRsZXJfZm4pICgoTGlzdCBbY29uZGl0aW9uXSkpIChmZW52KSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoKGlmIHN4X3RydXRoeSAoY29udGludWFibGVfcCkgdGhlbiAoa29udF9wdXNoICgobWFrZV9zaWduYWxfcmV0dXJuX2ZyYW1lIChmZW52KSAocmVzdF9rKSkpICh1bndvdW5kX2spKSBlbHNlIChrb250X3B1c2ggKChtYWtlX3JhaXNlX2d1YXJkX2ZyYW1lIChmZW52KSAodW53b3VuZF9rKSkpICh1bndvdW5kX2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJhaXNlLWd1YXJkXCIpXSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IHJlc3RfazsgTmlsKSkgaW4gKGhvc3RfZXJyb3IgKChTdHJpbmcgXCJleGNlcHRpb24gaGFuZGxlciByZXR1cm5lZCBmcm9tIG5vbi1jb250aW51YWJsZSByYWlzZVwiKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtdWx0aS1tYXBcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBuZXdfcmVzdWx0cyA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpOyAoTGlzdCBbdmFsdWVdKV0pIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gYyAtPiBzeF90cnV0aHkgKChlbXB0eV9wIChjKSkpKSAoc3hfdG9fbGlzdCByZW1haW5pbmcpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChuZXdfcmVzdWx0cykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgaGVhZHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChmaXJzdCAoYykpKSAoc3hfdG9fbGlzdCByZW1haW5pbmcpKSkgaW4gbGV0IHRhaWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAocmVzdCAoYykpKSAoc3hfdG9fbGlzdCByZW1haW5pbmcpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKGhlYWRzKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX211bHRpX21hcF9mcmFtZSAoZikgKHRhaWxzKSAobmV3X3Jlc3VsdHMpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNhbGxjY1wiKV0pKSB0aGVuIChsZXQgayA9IChtYWtlX2NhbGxjY19jb250aW51YXRpb24gKHJlc3RfaykgKChsZW4gKCFfd2luZGVyc19yZWYpKSkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKHZhbHVlKSAoKExpc3QgW2tdKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKExpc3QgW2tdKSkgKHJlc3RfaykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ2bS1yZXN1bWVcIildKSkgdGhlbiAobGV0IHJlc3VtZV9mbiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiAobGV0IHJlc3VsdCcgPSAoc3hfYXBwbHkgcmVzdW1lX2ZuIChMaXN0IFt2YWx1ZV0pKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChyZXN1bHQnKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAocmVzdWx0JykgKChTdHJpbmcgXCJfX3ZtX3N1c3BlbmRlZFwiKSkpKSkgdGhlbiAobWFrZV9jZWtfc3VzcGVuZGVkICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcInJlcXVlc3RcIikpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKGtvbnRfcHVzaCAoKG1ha2Vfdm1fcmVzdW1lX2ZyYW1lICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcInJlc3VtZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpKSkgKHJlc3RfaykpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInBlcmZvcm1cIildKSkgdGhlbiAobWFrZV9jZWtfc3VzcGVuZGVkICh2YWx1ZSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW1wb3J0XCIpXSkpIHRoZW4gKGxldCBpbXBvcnRfc2V0ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYXJnc1wiKSkpIGluIGxldCByZW1haW5pbmdfc2V0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGJpbmRfaW1wb3J0X3NldCAoaW1wb3J0X3NldCkgKGZlbnYpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZ19zZXRzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoc3RlcF9zZl9pbXBvcnQgKHJlbWFpbmluZ19zZXRzKSAoZmVudikgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInBhcmFtZXRlcml6ZVwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGN1cnJlbnRfcGFyYW0gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlc3VsdHMgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZXN1bHRzXCIpKSkgaW4gbGV0IGJvZHkgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJib2R5XCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChjdXJyZW50X3BhcmFtKSkpIHRoZW4gKGxldCBwYXJhbV9vYmogPSB2YWx1ZSBpbiBsZXQgdmFsX2V4cHIgPSAobnRoICgoZmlyc3QgKHJlbWFpbmluZykpKSAoKE51bWJlciAxLjApKSkgaW4gKG1ha2VfY2VrX3N0YXRlICh2YWxfZXhwcikgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9wYXJhbWV0ZXJpemVfZnJhbWUgKHJlbWFpbmluZykgKHBhcmFtX29iaikgKHJlc3VsdHMpIChib2R5KSAoZmVudikpKSAocmVzdF9rKSkpKSkgZWxzZSAobGV0IGNvbnZlcnRlZF92YWwgPSB2YWx1ZSBpbiBsZXQgbmV3X3Jlc3VsdHMgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFsoTGlzdCBbKHBhcmFtZXRlcl91aWQgKGN1cnJlbnRfcGFyYW0pKTsgY29udmVydGVkX3ZhbF0pXSldKSBpbiBsZXQgcmVzdF9iaW5kaW5ncyA9IChyZXN0IChyZW1haW5pbmcpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9iaW5kaW5ncykpKSB0aGVuIChsZXQgYm9keV9leHByID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keSkpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAoZmlyc3QgKGJvZHkpKSBlbHNlIChjb25zICgoU3ltYm9sIFwiYmVnaW5cIikpIChib2R5KSkpIGluIGxldCBwcm92aWRlX2tvbnQgPSAoa29udF9wdXNoX3Byb3ZpZGVzIChuZXdfcmVzdWx0cykgKGZlbnYpIChyZXN0X2spKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHlfZXhwcikgKGZlbnYpIChwcm92aWRlX2tvbnQpKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoKGZpcnN0IChyZXN0X2JpbmRpbmdzKSkpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9wYXJhbWV0ZXJpemVfZnJhbWUgKHJlc3RfYmluZGluZ3MpIChOaWwpIChuZXdfcmVzdWx0cykgKGJvZHkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChfbGFzdF9lcnJvcl9rb250X3JlZiA6PSByZXN0X2s7IE5pbCkpIGluIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVua25vd24gZnJhbWUgdHlwZTogXCIpOyBmdF0pKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSlcblxuKCogY29udGludWUtd2l0aC1jYWxsICopXG5hbmQgY29udGludWVfd2l0aF9jYWxsIGYgYXJncyBlbnYgcmF3X2FyZ3Mga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChwYXJhbWV0ZXJfcCAoZikpKSB0aGVuIChsZXQgdWlkID0gKHBhcmFtZXRlcl91aWQgKGYpKSBpbiBsZXQgZnJhbWUgPSAoa29udF9maW5kX3Byb3ZpZGUgKGtvbnQpICh1aWQpKSBpbiAobWFrZV9jZWtfdmFsdWUgKChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkgZWxzZSAocGFyYW1ldGVyX2RlZmF1bHQgKGYpKSkpIChlbnYpIChrb250KSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGNhbGxjY19jb250aW51YXRpb25fcCAoZikpKSB0aGVuIChsZXQgYXJnID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiBOaWwgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IGNhcHR1cmVkID0gKGNhbGxjY19jb250aW51YXRpb25fZGF0YSAoZikpIGluIGxldCB3X2xlbiA9IChjYWxsY2NfY29udGludWF0aW9uX3dpbmRlcnNfbGVuIChmKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHdpbmRfZXNjYXBlX3RvICh3X2xlbikpKSBpbiAobWFrZV9jZWtfdmFsdWUgKGFyZykgKGVudikgKGNhcHR1cmVkKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChjb250aW51YXRpb25fcCAoZikpKSB0aGVuIChsZXQgYXJnID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiBOaWwgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IGNvbnRfZGF0YSA9IChjb250aW51YXRpb25fZGF0YSAoZikpIGluIChsZXQgY2FwdHVyZWQgPSAoZ2V0IChjb250X2RhdGEpICgoU3RyaW5nIFwiY2FwdHVyZWRcIikpKSBpbiAobGV0IHJlc3VsdCcgPSAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlIChhcmcpIChlbnYpIChjYXB0dXJlZCkpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoZW52KSAoa29udCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2NhbGxhYmxlIChmKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX2NvbXBvbmVudCAoZikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19pc2xhbmQgKGYpKSkpKSkpKSkpIHRoZW4gKGxldCByZXN1bHQnID0gKHN4X2FwcGx5X2NlayAoZikgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAoaXNfZXZhbF9lcnJvciByZXN1bHQnKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIm1lc3NhZ2VcIikpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3JhaXNlX2V2YWxfZnJhbWUgKGVudikgKChCb29sIGZhbHNlKSkpKSAoa29udCkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChyZXN1bHQnKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAocmVzdWx0JykgKChTdHJpbmcgXCJfX3ZtX3N1c3BlbmRlZFwiKSkpKSkgdGhlbiAobWFrZV9jZWtfc3VzcGVuZGVkICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcInJlcXVlc3RcIikpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3ZtX3Jlc3VtZV9mcmFtZSAoKGdldCAocmVzdWx0JykgKChTdHJpbmcgXCJyZXN1bWVcIikpKSkgKGVudikpKSAoa29udCkpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChlbnYpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKGxldCBwYXJhbXMgPSAobGFtYmRhX3BhcmFtcyAoZikpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChsYW1iZGFfY2xvc3VyZSAoZikpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoYmluZF9sYW1iZGFfcGFyYW1zIChwYXJhbXMpIChhcmdzKSAobG9jYWwpKSkpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuIChwYXJhbXMpKV0pKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKGxldCBfb3IgPSAobGFtYmRhX25hbWUgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKFN0cmluZyBcImxhbWJkYVwiKSk7IChTdHJpbmcgXCIgZXhwZWN0cyBcIik7IChsZW4gKHBhcmFtcykpOyAoU3RyaW5nIFwiIGFyZ3MsIGdvdCBcIik7IChsZW4gKGFyZ3MpKV0pKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgW3BhcmFtczsgYXJnc10pKTsgTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSBOaWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW3BhcmFtczsgKGxlbiAoYXJncykpXSkpOyBOaWwpKSkgZWxzZSBOaWwpKSBpbiAobGV0IGppdF9yZXN1bHQgPSAoaml0X3RyeV9jYWxsIChmKSAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChqaXRfc2tpcF9wIChqaXRfcmVzdWx0KSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgobGFtYmRhX2JvZHkgKGYpKSkgKGxvY2FsKSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGRpY3RfcCAoaml0X3Jlc3VsdCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChnZXQgKGppdF9yZXN1bHQpICgoU3RyaW5nIFwiX192bV9zdXNwZW5kZWRcIikpKSkpIHRoZW4gKG1ha2VfY2VrX3N1c3BlbmRlZCAoKGdldCAoaml0X3Jlc3VsdCkgKChTdHJpbmcgXCJyZXF1ZXN0XCIpKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV92bV9yZXN1bWVfZnJhbWUgKChnZXQgKGppdF9yZXN1bHQpICgoU3RyaW5nIFwicmVzdW1lXCIpKSkpIChlbnYpKSkgKGtvbnQpKSkpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChqaXRfcmVzdWx0KSAobG9jYWwpIChrb250KSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX2NvbXBvbmVudCAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfaXNsYW5kIChmKSkpKSB0aGVuIChsZXQgcGFyc2VkID0gKHBhcnNlX2tleXdvcmRfYXJncyAocmF3X2FyZ3MpIChlbnYpKSBpbiBsZXQga3dhcmdzID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgY2hpbGRyZW4gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgbG9jYWwgPSAoZW52X21lcmdlICgoY29tcG9uZW50X2Nsb3N1cmUgKGYpKSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgKGxldCBfb3IgPSAoZGljdF9nZXQgKGt3YXJncykgKHApKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoY29tcG9uZW50X3BhcmFtcyAoZikpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGNvbXBvbmVudF9oYXNfY2hpbGRyZW4gKGYpKSkgdGhlbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiY2hpbGRyZW5cIikpIGNoaWxkcmVuKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla19zdGF0ZSAoKGNvbXBvbmVudF9ib2R5IChmKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2NvbXBfdHJhY2VfZnJhbWUgKChjb21wb25lbnRfbmFtZSAoZikpKSAoKGNvbXBvbmVudF9maWxlIChmKSkpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiTm90IGNhbGxhYmxlOiBcIik7IChpbnNwZWN0IChmKSldKSkpKSkpKSkpKSlcblxuKCogc2YtY2FzZS1zdGVwLWxvb3AgKilcbmFuZCBzZl9jYXNlX3N0ZXBfbG9vcCBtYXRjaF92YWwgY2xhdXNlcyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgWyhsZW4gKGNsYXVzZXMpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IHRlc3QgPSAoZmlyc3QgKGNsYXVzZXMpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZXMpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IHRlc3RfdmFsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKHRlc3QpIChlbnYpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW21hdGNoX3ZhbDsgdGVzdF92YWxdKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChlbnYpIChrb250KSkgZWxzZSAoc2ZfY2FzZV9zdGVwX2xvb3AgKG1hdGNoX3ZhbCkgKChwcmltX2NhbGwgXCJzbGljZVwiIFtjbGF1c2VzOyAoTnVtYmVyIDIuMCldKSkgKGVudikgKGtvbnQpKSkpKSkpXG5cbigqIGV2YWwtZXhwci1jZWsgKilcbmFuZCBldmFsX2V4cHJfY2VrIGV4cHIgZW52ID1cbiAgKGNla19ydW4gKChtYWtlX2Nla19zdGF0ZSAoZXhwcikgKGVudikgKChMaXN0IFtdKSkpKSlcblxuKCogdHJhbXBvbGluZS1jZWsgKilcbmFuZCB0cmFtcG9saW5lX2NlayB2YWwnID1cbiAgKGlmIHN4X3RydXRoeSAoKGlzX3RodW5rICh2YWwnKSkpIHRoZW4gKGV2YWxfZXhwcl9jZWsgKCh0aHVua19leHByICh2YWwnKSkpICgodGh1bmtfZW52ICh2YWwnKSkpKSBlbHNlIHZhbCcpXG5cbigqIG1ha2UtY29yb3V0aW5lICopXG5hbmQgbWFrZV9jb3JvdXRpbmUgdGh1bmsgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJjb3JvdXRpbmVcIjsgY2ZfZW52ID0gTmlsOyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogZXZhbC1leHByICopXG5hbmQgZXZhbF9leHByIGV4cHIgZW52ID1cbiAgKGNla19ydW4gKChtYWtlX2Nla19zdGF0ZSAoZXhwcikgKGVudikgKChMaXN0IFtdKSkpKSlcblxuKCogKmdlbnN5bS1jb3VudGVyKiAqKVxuYW5kIF9nZW5zeW1fY291bnRlcl8gPVxuICAoTnVtYmVyIDAuMClcblxuKCogaW50ZXJuICopXG5hbmQgaW50ZXJuIHMgPVxuICAobWFrZV9zeW1ib2wgKHMpKVxuXG4oKiBzeW1ib2wtaW50ZXJuZWQ/ICopXG5hbmQgc3ltYm9sX2ludGVybmVkX3Agc3ltID1cbiAgKEJvb2wgdHJ1ZSlcblxuXG4oKiBXaXJlIHVwIHRyYW1wb2xpbmUgdG8gcmVzb2x2ZSB0aHVua3MgdmlhIHRoZSBDRUsgbWFjaGluZSAqKVxubGV0ICgpID0gdHJhbXBvbGluZV9mbiA6PSAoZnVuIHYgLT5cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgVGh1bmsgKGV4cHIsIGVudikgLT4gZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgXyAtPiB2KVxuXG4oKiBXaXJlIHVwIHRoZSBwcmltaXRpdmVzIHRyYW1wb2xpbmUgc28gY2FsbF9hbnkgaW4gSE8gZm9ybXMgcmVzb2x2ZXMgVGh1bmtzICopXG5sZXQgKCkgPSBTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIDo9ICF0cmFtcG9saW5lX2ZuXG5cbigqIE92ZXJyaWRlIHJlY3Vyc2l2ZSBjZWtfcnVuIHdpdGggaXRlcmF0aXZlIGxvb3AuXG4gICBPbiBlcnJvciwgY2FwdHVyZSB0aGUga29udCBmcm9tIHRoZSBsYXN0IHN0YXRlIGZvciBjb21wLXRyYWNlLiAqKVxubGV0IGNla19ydW5faXRlcmF0aXZlIHN0YXRlID1cbiAgbGV0IHMgPSByZWYgc3RhdGUgaW5cbiAgKHRyeVxuICAgIHdoaWxlIG5vdCAobWF0Y2ggY2VrX3Rlcm1pbmFsX3AgIXMgd2l0aCBCb29sIHRydWUgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpXG4gICAgICAgJiYgbm90IChtYXRjaCBjZWtfc3VzcGVuZGVkX3AgIXMgd2l0aCBCb29sIHRydWUgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIGRvXG4gICAgICBzIDo9IGNla19zdGVwICFzXG4gICAgZG9uZTtcbiAgICAobWF0Y2ggY2VrX3N1c3BlbmRlZF9wICFzIHdpdGhcbiAgICAgfCBCb29sIHRydWUgLT5cbiAgICAgICAobWF0Y2ggIV9jZWtfaW9fc3VzcGVuZF9ob29rIHdpdGhcbiAgICAgICAgfCBTb21lIGhvb2sgLT4gaG9vayAhc1xuICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIpKVxuICAgICB8IF8gLT4gY2VrX3ZhbHVlICFzKVxuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgX2xhc3RfZXJyb3Jfa29udF9yZWYgOj0gY2VrX2tvbnQgIXM7XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgbXNnKSlcblxuKCogQ29sbGVjdCBjb21wb25lbnQgdHJhY2UgZnJvbSBhIGtvbnQgdmFsdWUgKilcbmxldCBjb2xsZWN0X2NvbXBfdHJhY2Uga29udCA9XG4gIGxldCB0cmFjZSA9IHJlZiBbXSBpblxuICBsZXQgayA9IHJlZiBrb250IGluXG4gIHdoaWxlIChtYXRjaCAhayB3aXRoIExpc3QgKF86Ol8pIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBkb1xuICAgIChtYXRjaCAhayB3aXRoXG4gICAgIHwgTGlzdCAoZnJhbWUgOjogcmVzdCkgLT5cbiAgICAgICAobWF0Y2ggZnJhbWUgd2l0aFxuICAgICAgICB8IENla0ZyYW1lIGYgd2hlbiBmLmNmX3R5cGUgPSBcImNvbXAtdHJhY2VcIiAtPlxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZi5jZl9uYW1lIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCI/XCIgaW5cbiAgICAgICAgICBsZXQgZmlsZSA9IG1hdGNoIGYuY2ZfZW52IHdpdGggU3RyaW5nIHMgLT4gcyB8IE5pbCAtPiBcIlwiIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgdHJhY2UgOj0gKG5hbWUsIGZpbGUpIDo6ICF0cmFjZVxuICAgICAgICB8IERpY3QgZCB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ0eXBlXCIgd2l0aCBTb21lIChTdHJpbmcgXCJjb21wLXRyYWNlXCIpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwibmFtZVwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiP1wiIGluXG4gICAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJmaWxlXCIgd2l0aCBTb21lIChTdHJpbmcgcykgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIHRyYWNlIDo9IChuYW1lLCBmaWxlKSA6OiAhdHJhY2VcbiAgICAgICAgfCBfIC0+ICgpKTtcbiAgICAgICBrIDo9IExpc3QgcmVzdFxuICAgICB8IF8gLT4gayA6PSBMaXN0IFtdKVxuICBkb25lO1xuICBMaXN0LnJldiAhdHJhY2VcblxuKCogRm9ybWF0IGEgY29tcC10cmFjZSBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nICopXG5sZXQgZm9ybWF0X2NvbXBfdHJhY2UgdHJhY2UgPVxuICBtYXRjaCB0cmFjZSB3aXRoXG4gIHwgW10gLT4gXCJcIlxuICB8IGVudHJpZXMgLT5cbiAgICBsZXQgbGluZXMgPSBMaXN0Lm1hcGkgKGZ1biBpIChuYW1lLCBmaWxlKSAtPlxuICAgICAgbGV0IHByZWZpeCA9IGlmIGkgPSAwIHRoZW4gXCIgIGluIFwiIGVsc2UgXCIgIGNhbGxlZCBmcm9tIFwiIGluXG4gICAgICBpZiBmaWxlID0gXCJcIiB0aGVuIHByZWZpeCBeIFwiflwiIF4gbmFtZVxuICAgICAgZWxzZSBwcmVmaXggXiBcIn5cIiBeIG5hbWUgXiBcIiAoXCIgXiBmaWxlIF4gXCIpXCJcbiAgICApIGVudHJpZXMgaW5cbiAgICBcIlxuXCIgXiBTdHJpbmcuY29uY2F0IFwiXG5cIiBsaW5lc1xuXG4oKiBFbmhhbmNlIGFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBjb21wb25lbnQgdHJhY2UgKilcbmxldCBlbmhhbmNlX2Vycm9yX3dpdGhfdHJhY2UgbXNnID1cbiAgbGV0IHRyYWNlID0gY29sbGVjdF9jb21wX3RyYWNlICFfbGFzdF9lcnJvcl9rb250X3JlZiBpblxuICBfbGFzdF9lcnJvcl9rb250X3JlZiA6PSBOaWw7XG4gIG1zZyBeIChmb3JtYXRfY29tcF90cmFjZSB0cmFjZSlcblxuKCogSGFuZC13cml0dGVuIHNmX2RlZmluZV90eXBlIOKAlCBza2lwcGVkIGZyb20gdHJhbnNwaWxlIGJlY2F1c2UgdGhlIHNwZWMgdXNlc1xuICAgJnJlc3QgcGFyYW1zIGFuZCBlbXB0eS1kaWN0IGxpdGVyYWxzIHRoYXQgdGhlIHRyYW5zcGlsZXIgY2FuJ3QgZW1pdCBjbGVhbmx5LlxuICAgSW1wbGVtZW50czogKGRlZmluZS10eXBlIE5hbWUgKEN0b3IxIGYxIGYyKSAoQ3RvcjIgZjMpIC4uLilcbiAgIENyZWF0ZXMgY29uc3RydWN0b3IgZm5zLCBOYW1lPy9DdG9yPyBwcmVkaWNhdGVzLCBDdG9yLWZpZWxkIGFjY2Vzc29ycyxcbiAgIGFuZCByZWNvcmRzIGN0b3JzIGluICphZHQtcmVnaXN0cnkqLiAqKVxubGV0IHNmX2RlZmluZV90eXBlIGFyZ3MgZW52X3ZhbCA9XG4gIGxldCBpdGVtcyA9IChtYXRjaCBhcmdzIHdpdGggTGlzdCBsIC0+IGwgfCBfIC0+IFtdKSBpblxuICBsZXQgdHlwZV9zeW0gPSBMaXN0Lm50aCBpdGVtcyAwIGluXG4gIGxldCB0eXBlX25hbWUgPSB2YWx1ZV90b19zdHJpbmcgdHlwZV9zeW0gaW5cbiAgbGV0IGN0b3Jfc3BlY3MgPSBMaXN0LnRsIGl0ZW1zIGluXG4gIGxldCBlbnZfaGFzX3YgayA9IHN4X3RydXRoeSAoZW52X2hhcyBlbnZfdmFsIChTdHJpbmcgaykpIGluXG4gIGxldCBlbnZfYmluZF92IGsgdiA9IGlnbm9yZSAoZW52X2JpbmQgZW52X3ZhbCAoU3RyaW5nIGspIHYpIGluXG4gIGxldCBlbnZfZ2V0X3YgayA9IGVudl9nZXQgZW52X3ZhbCAoU3RyaW5nIGspIGluXG4gIGlmIG5vdCAoZW52X2hhc192IFwiKmFkdC1yZWdpc3RyeSpcIikgdGhlblxuICAgIGVudl9iaW5kX3YgXCIqYWR0LXJlZ2lzdHJ5KlwiIChEaWN0IChIYXNodGJsLmNyZWF0ZSA4KSk7XG4gIGxldCByZWdpc3RyeSA9IGVudl9nZXRfdiBcIiphZHQtcmVnaXN0cnkqXCIgaW5cbiAgbGV0IGN0b3JfbmFtZXMgPSBMaXN0Lm1hcCAoZnVuIHNwZWMgLT5cbiAgICAobWF0Y2ggc3BlYyB3aXRoIExpc3QgKHN5bSA6OiBfKSAtPiBTdHJpbmcgKHZhbHVlX3RvX3N0cmluZyBzeW0pIHwgXyAtPiBOaWwpXG4gICkgY3Rvcl9zcGVjcyBpblxuICAobWF0Y2ggcmVnaXN0cnkgd2l0aCBEaWN0IGQgLT4gSGFzaHRibC5yZXBsYWNlIGQgdHlwZV9uYW1lIChMaXN0IGN0b3JfbmFtZXMpIHwgXyAtPiAoKSk7XG4gIGVudl9iaW5kX3YgKHR5cGVfbmFtZSBeIFwiP1wiKVxuICAgIChOYXRpdmVGbiAodHlwZV9uYW1lIF4gXCI/XCIsIGZ1biBwYXJncyAtPlxuICAgICAgKG1hdGNoIHBhcmdzIHdpdGhcbiAgICAgIHwgW3ZdIC0+XG4gICAgICAgIChtYXRjaCB2IHdpdGhcbiAgICAgICAgfCBBZHRWYWx1ZSBhIC0+IEJvb2wgKGEuYXZfdHlwZSA9IHR5cGVfbmFtZSlcbiAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICB8IF8gLT4gQm9vbCBmYWxzZSkpKTtcbiAgTGlzdC5pdGVyIChmdW4gc3BlYyAtPlxuICAgIChtYXRjaCBzcGVjIHdpdGhcbiAgICB8IExpc3QgKHN5bSA6OiBmaWVsZHMpIC0+XG4gICAgICBsZXQgY24gPSB2YWx1ZV90b19zdHJpbmcgc3ltIGluXG4gICAgICBsZXQgZmllbGRfbmFtZXMgPSBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgZmllbGRzIGluXG4gICAgICBsZXQgYXJpdHkgPSBMaXN0Lmxlbmd0aCBmaWVsZHMgaW5cbiAgICAgIGVudl9iaW5kX3YgY25cbiAgICAgICAgKE5hdGl2ZUZuIChjbiwgZnVuIGN0b3JfYXJncyAtPlxuICAgICAgICAgIGlmIExpc3QubGVuZ3RoIGN0b3JfYXJncyA8PiBhcml0eSB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlczogZXhwZWN0ZWQgJWQgYXJncywgZ290ICVkXCJcbiAgICAgICAgICAgICAgY24gYXJpdHkgKExpc3QubGVuZ3RoIGN0b3JfYXJncykpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIEFkdFZhbHVlIHtcbiAgICAgICAgICAgICAgYXZfdHlwZSA9IHR5cGVfbmFtZTtcbiAgICAgICAgICAgICAgYXZfY3RvciA9IGNuO1xuICAgICAgICAgICAgICBhdl9maWVsZHMgPSBBcnJheS5vZl9saXN0IGN0b3JfYXJncztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgIGVudl9iaW5kX3YgKGNuIF4gXCI/XCIpXG4gICAgICAgIChOYXRpdmVGbiAoY24gXiBcIj9cIiwgZnVuIHBhcmdzIC0+XG4gICAgICAgICAgKG1hdGNoIHBhcmdzIHdpdGhcbiAgICAgICAgICB8IFt2XSAtPlxuICAgICAgICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBBZHRWYWx1ZSBhIC0+IEJvb2wgKGEuYXZfY3RvciA9IGNuKVxuICAgICAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpKSk7XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaWR4IGZuYW1lIC0+XG4gICAgICAgIGVudl9iaW5kX3YgKGNuIF4gXCItXCIgXiBmbmFtZSlcbiAgICAgICAgICAoTmF0aXZlRm4gKGNuIF4gXCItXCIgXiBmbmFtZSwgZnVuIHBhcmdzIC0+XG4gICAgICAgICAgICAobWF0Y2ggcGFyZ3Mgd2l0aFxuICAgICAgICAgICAgfCBbdl0gLT5cbiAgICAgICAgICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgICB8IEFkdFZhbHVlIGEgLT5cbiAgICAgICAgICAgICAgICBpZiBpZHggPCBBcnJheS5sZW5ndGggYS5hdl9maWVsZHMgdGhlbiBhLmF2X2ZpZWxkcy4oaWR4KVxuICAgICAgICAgICAgICAgIGVsc2UgcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBpbmRleCBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBub3QgYW4gQURUXCIpKSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoY24gXiBcIi1cIiBeIGZuYW1lIF4gXCI6IGV4cGVjdGVkIDEgYXJnXCIpKSkpKVxuICAgICAgKSBmaWVsZF9uYW1lc1xuICAgIHwgXyAtPiAoKSlcbiAgKSBjdG9yX3NwZWNzO1xuICBOaWxcblxuKCogUmVnaXN0ZXIgc3BlY2lhbCBmb3JtcyB2aWEgY3VzdG9tX3NwZWNpYWxfZm9ybXMgc28gdGhlIENFSyBkaXNwYXRjaCBmaW5kc1xuICAgdGhlbS4gVGhlIHRvcC1sZXZlbCAocmVnaXN0ZXItc3BlY2lhbC1mb3JtISAuLi4pIGNhbGxzIGluIHNwZWMvZXZhbHVhdG9yLnN4XG4gICBhcmUgbm90IGRlZmluZXMgYW5kIHRoZXJlZm9yZSBhcmUgbm90IHRyYW5zcGlsZWQ7IHdlIHdpcmUgdGhlbSB1cCBoZXJlLlxuICAgbGV0LXZhbHVlcy9kZWZpbmUtdmFsdWVzL2RlbGF5L2RlbGF5LWZvcmNlIHBvaW50IGF0IHRoZSBUUkFOU1BJTEVEIHNwZWNcbiAgIGZ1bmN0aW9ucyAoc2ZfbGV0X3ZhbHVlcyBldGMuKSDigJQgdGhlc2UgcmVnaXN0cmF0aW9ucyB3ZXJlIHByZXZpb3VzbHlcbiAgIGhhbmQtYXBwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBzeF9yZWYubWwgYW5kIHdlcmUgc2lsZW50bHkgbG9zdCBvbiBldmVyeVxuICAgcmVnZW5lcmF0aW9uICgyMDI2LTA3IHJldmlldykuICopXG5sZXQgKCkgPSBpZ25vcmUgKHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIFwiZGVmaW5lLXR5cGVcIilcbiAgKE5hdGl2ZUZuIChcImRlZmluZS10eXBlXCIsIGZ1biBjYWxsX2FyZ3MgLT5cbiAgICBtYXRjaCBjYWxsX2FyZ3Mgd2l0aFxuICAgIHwgW2FyZ3M7IGVudl0gLT4gc2ZfZGVmaW5lX3R5cGUgYXJncyBlbnZcbiAgICB8IF8gLT4gTmlsKSkpXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJsZXQtdmFsdWVzXCIpXG4gIChOYXRpdmVGbiAoXCJsZXQtdmFsdWVzXCIsIGZ1biBjYWxsX2FyZ3MgLT5cbiAgICBtYXRjaCBjYWxsX2FyZ3Mgd2l0aFxuICAgIHwgW2FyZ3M7IGVudl0gLT4gc2ZfbGV0X3ZhbHVlcyBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxubGV0ICgpID0gaWdub3JlIChyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gKFN0cmluZyBcImRlZmluZS12YWx1ZXNcIilcbiAgKE5hdGl2ZUZuIChcImRlZmluZS12YWx1ZXNcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWZpbmVfdmFsdWVzIGFyZ3MgZW52XG4gICAgfCBfIC0+IE5pbCkpKVxuXG5sZXQgKCkgPSBpZ25vcmUgKHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIFwiZGVsYXlcIilcbiAgKE5hdGl2ZUZuIChcImRlbGF5XCIsIGZ1biBjYWxsX2FyZ3MgLT5cbiAgICBtYXRjaCBjYWxsX2FyZ3Mgd2l0aFxuICAgIHwgW2FyZ3M7IGVudl0gLT4gc2ZfZGVsYXkgYXJncyBlbnZcbiAgICB8IF8gLT4gTmlsKSkpXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWxheS1mb3JjZVwiKVxuICAoTmF0aXZlRm4gKFwiZGVsYXktZm9yY2VcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWxheV9mb3JjZSBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZXF1YWwiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF91cGRhdGVfZHVtbXkiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDMiLCJhMSIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN4X3J1bnRpbWUiLCJTeF90eXBlcyIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliIiwiU3RkbGliX1ByaW50ZiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9TdHJpbmciLCJTeF9wcmltaXRpdmVzIiwidHJhbXBvbGluZV9mbiIsInYiLCJ0cmFtcG9saW5lIiwicHJvdG9jb2xfcmVnaXN0cnkiLCJjc3RfZXZhbCIsIm1ha2VfY2VrX3N0YXRlIiwiY29udHJvbCIsImVudiIsImtvbnQiLCJjc3RfY29udGludWUiLCJtYWtlX2Nla192YWx1ZSIsInZhbHVlIiwiY3N0X2VudiIsImNzdF9pb19zdXNwZW5kZWQiLCJjc3Rfa29udCIsImNzdF9waGFzZSIsImNzdF9yZXF1ZXN0IiwibWFrZV9jZWtfc3VzcGVuZGVkIiwicmVxdWVzdCIsImQiLCJjc3QiLCJjZWtfdGVybWluYWxfcCIsInN0YXRlIiwiYW5kIiwiY2VrX3N1c3BlbmRlZF9wIiwiY2VrX2NvbnRyb2wiLCJzIiwiY2VrX2VudiIsImNla19rb250IiwiY2VrX3BoYXNlIiwiY2VrX2lvX3JlcXVlc3QiLCJjc3RfdmFsdWUiLCJjZWtfdmFsdWUiLCJjc3RfaWYiLCJtYWtlX2lmX2ZyYW1lIiwidGhlbl9leHByIiwiZWxzZV9leHByIiwiY3N0X3doZW4iLCJtYWtlX3doZW5fZnJhbWUiLCJib2R5X2V4cHJzIiwiY3N0X2JlZ2luIiwibWFrZV9iZWdpbl9mcmFtZSIsInJlbWFpbmluZyIsImNzdF9sZXQiLCJtYWtlX2xldF9mcmFtZSIsIm5hbWUiLCJib2R5IiwibG9jYWwiLCJjc3RfZGVmaW5lIiwibWFrZV9kZWZpbmVfZnJhbWUiLCJoYXNfZWZmZWN0cyIsImVmZmVjdF9saXN0IiwiY3N0X2RlZmluZV9mb3JlaWduIiwibWFrZV9kZWZpbmVfZm9yZWlnbl9mcmFtZSIsInNwZWMiLCJjc3Rfc2V0IiwibWFrZV9zZXRfZnJhbWUiLCJjc3RfYXJnIiwibWFrZV9hcmdfZnJhbWUiLCJldmFsZWQiLCJyYXdfYXJncyIsImhlYWRfbmFtZSIsIm1ha2VfY2FsbF9mcmFtZSIsImFyZ3MiLCJjc3RfY29uZCIsIm1ha2VfY29uZF9mcmFtZSIsInNjaGVtZV9wIiwiY3N0X2NvbmRfYXJyb3ciLCJtYWtlX2NvbmRfYXJyb3dfZnJhbWUiLCJ0ZXN0X3ZhbHVlIiwiY3N0X2Nhc2UiLCJtYWtlX2Nhc2VfZnJhbWUiLCJtYXRjaF92YWwiLCJjc3RfdGhyZWFkIiwibWFrZV90aHJlYWRfZnJhbWUiLCJtb2RlIiwiY3N0X2xpc3QiLCJjc3RfcXVvdGUiLCJ0aHJlYWRfaW5zZXJ0X2FyZyIsImZvcm0iLCJmZW52IiwiY3N0X2FwcGVuZCIsInRocmVhZF9pbnNlcnRfYXJnX2xhc3QiLCJjc3RfbWFwIiwibWFrZV9tYXBfZnJhbWUiLCJyZXN1bHRzIiwibWFrZV9tYXBfaW5kZXhlZF9mcmFtZSIsImNzdF9tdWx0aV9tYXAiLCJtYWtlX211bHRpX21hcF9mcmFtZSIsInJlbWFpbmluZ19saXN0cyIsImNzdF9maWx0ZXIiLCJtYWtlX2ZpbHRlcl9mcmFtZSIsImN1cnJlbnRfaXRlbSIsImNzdF9yZWR1Y2UiLCJtYWtlX3JlZHVjZV9mcmFtZSIsImNzdF9mb3JfZWFjaCIsIm1ha2VfZm9yX2VhY2hfZnJhbWUiLCJjc3Rfc29tZSIsIm1ha2Vfc29tZV9mcmFtZSIsImNzdF9ldmVyeSIsIm1ha2VfZXZlcnlfZnJhbWUiLCJjc3Rfc2NvcGUiLCJtYWtlX3Njb3BlX2ZyYW1lIiwiY3N0X3Byb3ZpZGUiLCJtYWtlX3Byb3ZpZGVfZnJhbWUiLCJjc3RfYmluZCIsIm1ha2VfYmluZF9mcmFtZSIsInByZXZfdHJhY2tpbmciLCJjc3RfcHJvdmlkZV9zZXQiLCJtYWtlX3Byb3ZpZGVfc2V0X2ZyYW1lIiwiY3N0X3Njb3BlX2FjYyIsIm1ha2Vfc2NvcGVfYWNjX2ZyYW1lIiwiY3N0X3Jlc2V0IiwibWFrZV9yZXNldF9mcmFtZSIsImNzdF9kaWN0IiwibWFrZV9kaWN0X2ZyYW1lIiwiY3N0X2FuZCIsIm1ha2VfYW5kX2ZyYW1lIiwiY3N0X29yIiwibWFrZV9vcl9mcmFtZSIsImNzdF9keW5hbWljX3dpbmQiLCJtYWtlX2R5bmFtaWNfd2luZF9mcmFtZSIsInBoYXNlIiwiYm9keV90aHVuayIsImFmdGVyX3RodW5rIiwiY3N0X3JlYWN0aXZlX3Jlc2V0IiwibWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSIsInVwZGF0ZV9mbiIsImZpcnN0X3JlbmRlcl9wIiwiY3N0X2NhbGxjYyIsIm1ha2VfY2FsbGNjX2ZyYW1lIiwiY3N0X3dpbmRfYWZ0ZXIiLCJtYWtlX3dpbmRfYWZ0ZXJfZnJhbWUiLCJ3aW5kZXJzX2xlbiIsImNzdF93aW5kX3JldHVybiIsIm1ha2Vfd2luZF9yZXR1cm5fZnJhbWUiLCJib2R5X3Jlc3VsdCIsImNzdF9kZXJlZiIsIm1ha2VfZGVyZWZfZnJhbWUiLCJjc3RfaG9fc2V0dXAiLCJtYWtlX2hvX3NldHVwX2ZyYW1lIiwiaG9fdHlwZSIsInJlbWFpbmluZ19hcmdzIiwiZXZhbGVkX2FyZ3MiLCJjc3RfY29tcF90cmFjZSIsIm1ha2VfY29tcF90cmFjZV9mcmFtZSIsImZpbGUiLCJjc3RfZmlsZSIsImNzdF9uYW1lIiwia29udF9jb2xsZWN0X2NvbXBfdHJhY2UiLCJmcmFtZSIsImNzdF9oYW5kbGVyIiwibWFrZV9oYW5kbGVyX2ZyYW1lIiwiaGFuZGxlcnMiLCJjc3RfcmVzdGFydCIsIm1ha2VfcmVzdGFydF9mcmFtZSIsInJlc3RhcnRzIiwiY3N0X3NpZ25hbF9yZXR1cm4iLCJtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUiLCJzYXZlZF9rb250IiwiY3N0X3JhaXNlX2V2YWwiLCJtYWtlX3JhaXNlX2V2YWxfZnJhbWUiLCJjb250aW51YWJsZV9wIiwiY3N0X3JhaXNlX2d1YXJkIiwibWFrZV9yYWlzZV9ndWFyZF9mcmFtZSIsImNzdF9wZXJmb3JtIiwibWFrZV9wZXJmb3JtX2ZyYW1lIiwiY3N0X3ZtX3Jlc3VtZSIsIm1ha2Vfdm1fcmVzdW1lX2ZyYW1lIiwicmVzdW1lX2ZuIiwiY3N0X2ltcG9ydCIsIm1ha2VfaW1wb3J0X2ZyYW1lIiwiaW1wb3J0X3NldCIsInJlbWFpbmluZ19zZXRzIiwiY3N0X3BhcmFtZXRlcml6ZSIsIm1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIiwiY3VycmVudF9wYXJhbSIsImZpbmRfbWF0Y2hpbmdfaGFuZGxlciIsImNvbmRpdGlvbiIsInBhaXIiLCJwcmVkIiwiaGFuZGxlcl9mbiIsImNzdF9mIiwia29udF9maW5kX2hhbmRsZXIiLCJtYXRjaCIsImNzdF9hZnRlcl90aHVuayIsImNzdF93aW5kZXJzX2xlbiIsIndpbmRlcnNfcmVmIiwia29udF91bndpbmRfdG9faGFuZGxlciIsInJlc3RfayIsIndpbmRfZXNjYXBlX3RvIiwidGFyZ2V0X2xlbiIsImZpbmRfbmFtZWRfcmVzdGFydCIsImVudHJ5Iiwia29udF9maW5kX3Jlc3RhcnQiLCJjc3RfdHlwZSIsImZyYW1lX3R5cGUiLCJrb250X3B1c2giLCJrb250X3RvcCIsImtvbnRfcG9wIiwia29udF9lbXB0eV9wIiwiY2FwdHVyZWQiLCJrb250X2NhcHR1cmVfdG9fcmVzZXQiLCJrIiwib3IiLCJrb250X3B1c2hfcHJvdmlkZXMiLCJwYWlycyIsImtvbnRfZmluZF9wcm92aWRlIiwia29udF9maW5kX3Njb3BlX2FjYyIsImhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIiwia29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwiY3N0X2pvaW4iLCJsaWJyYXJ5X25hbWVfa2V5IiwiY3N0X2hhc19rZXkiLCJsaWJyYXJ5X3JlZ2lzdHJ5IiwibGlicmFyeV9sb2FkZWRfcCIsImNzdF9leHBvcnRzIiwibGlicmFyeV9leHBvcnRzIiwicmVnaXN0ZXJfbGlicmFyeSIsImV4cG9ydHMiLCJpb19yZWdpc3RyeSIsImlvX3JlZ2lzdGVyX2IiLCJpb19yZWdpc3RlcmVkX3AiLCJpb19sb29rdXAiLCJjc3Rfa2V5cyIsImlvX25hbWVzIiwicGFyYW0iLCJmb3JlaWduX3JlZ2lzdHJ5IiwiZm9yZWlnbl9yZWdpc3Rlcl9iIiwiZm9yZWlnbl9yZWdpc3RlcmVkX3AiLCJmb3JlaWduX2xvb2t1cCIsImZvcmVpZ25fbmFtZXMiLCJyZXN1bHQiLCJmb3JlaWduX3BhcnNlX3BhcmFtcyIsInBhcmFtX2xpc3QiLCJpdGVtcyIsImZvcmVpZ25fcGFyc2Vfa3dhcmdzX2IiLCJjc3RfbWV0aG9kIiwiY3N0X29iamVjdCIsImZvcmVpZ25fcmVzb2x2ZV9iaW5kaW5nIiwiYmluZGluZ19zdHIiLCJwYXJ0cyIsIm1ldGhvZCIsIm9iaiIsImNzdF9hcmdzX2dvdCIsImNzdF9nb3QiLCJjc3RfZXhwZWN0ZWQiLCJjc3RfYW55IiwiY3N0X2ZvcmVpZ24iLCJjc3RfcmFuZ2UiLCJmb3JlaWduX2NoZWNrX2FyZ3MiLCJwYXJhbXMiLCJpIiwidmFsIiwiZXhwZWN0ZWQiLCJjc3RfcmVzdCIsImNzdF9mZmlfYXJncyIsImNzdF9hc3luYyIsImNzdF9mbiIsImNzdF9mb3JlaWduX2Rpc3BhdGNoIiwiY3N0X3JldHVybnMiLCJjc3Rfc3luYyIsImZvcmVpZ25fYnVpbGRfbGFtYmRhIiwiciIsImNzdF9wYXJhbXMiLCJzZl9kZWZpbmVfZm9yZWlnbiIsInN0ZXBfc2ZfZGVmaW5lX2ZvcmVpZ24iLCJsYW1iZGFfZXhwciIsImNzdF9jb25jYXQiLCJjc3RfaG9zdF9jYWxsIiwiZm9yZWlnbl9kaXNwYXRjaCIsImJpbmRpbmciLCJyZXNvbHZlZCIsIm9ial9uYW1lIiwiY3N0X2FzIiwiZm9yZWlnbl9wYXJzZV9wYXJhbXNfbG9vcCIsImFjYyIsIml0ZW0iLCJyZXN0X2l0ZW1zIiwidCIsImNzdF9hcmdzIiwiY3N0X29wIiwic3RlcF9zZl9pbyIsImlvX2FyZ3MiLCJzdHJpY3RfcmVmIiwic2V0X3N0cmljdF9iIiwicHJpbV9wYXJhbV90eXBlc19yZWYiLCJzZXRfcHJpbV9wYXJhbV90eXBlc19iIiwidHlwZXMiLCJjc3RfYm9vbGVhbiIsImNzdF9lbmRzX3dpdGgiLCJjc3Rfa2V5d29yZCIsImNzdF9sYW1iZGEiLCJjc3RfbmlsIiwiY3N0X251bWJlciIsImNzdF9zbGljZSIsImNzdF9zdHJpbmciLCJjc3Rfc3ltYm9sIiwidmFsdWVfbWF0Y2hlc190eXBlX3AiLCJleHBlY3RlZF90eXBlIiwiY3N0X1R5cGVfZXJyb3IiLCJzdHJpY3RfY2hlY2tfYXJncyIsInBvc2l0aW9uYWwiLCJyZXN0X3R5cGUiLCJwIiwiaWR4IiwicF9uYW1lIiwicF90eXBlIiwiY3N0X2luZGV4X29mIiwiYmluZF9sYW1iZGFfcGFyYW1zIiwicmVzdF9pZHgiLCJyZXN0X25hbWUiLCJjc3RfZXhwZWN0cyIsImNzdF96aXAiLCJjYWxsX2xhbWJkYSIsImNhbGxlcl9lbnYiLCJjc3RfY2hpbGRyZW4iLCJjYWxsX2NvbXBvbmVudCIsImNvbXAiLCJwYXJzZWQiLCJrd2FyZ3MiLCJjaGlsZHJlbiIsImNzdF9hc3NvYyIsImNzdF9pIiwiY3N0X2luYyIsImNzdF9za2lwIiwicGFyc2Vfa2V5d29yZF9hcmdzIiwiYXJnIiwic2tpcCIsImNvbmRfc2NoZW1lX3AiLCJjbGF1c2VzIiwiYyIsImNzdF9lbHNlIiwiaXNfZWxzZV9jbGF1c2UiLCJ0ZXN0Iiwic2ZfbmFtZWRfbGV0IiwibG9vcF9uYW1lIiwiYmluZGluZ3MiLCJpbml0cyIsInBhaXJfaWR4IiwibG9vcF9ib2R5IiwibG9vcF9mbiIsImluaXRfdmFscyIsImUiLCJzZl9sYW1iZGEiLCJwYXJhbXNfZXhwciIsInBhcmFtX25hbWVzIiwiY3N0X2N1cnJlbnRfZmlsZSIsImNzdF9lZmZlY3RfYW5ub3RhdGlvbnMiLCJjc3RfZWZmZWN0cyIsInNmX2RlZmNvbXAiLCJuYW1lX3N5bSIsInBhcmFtc19yYXciLCJjb21wX25hbWUiLCJoYXNfY2hpbGRyZW4iLCJwYXJhbV90eXBlcyIsImFmZmluaXR5IiwiZWZmZWN0cyIsImVmZmVjdF9hbm5zIiwiZGVmY29tcF9rd2FyZyIsImtleSIsImRlZmF1bHQkIiwiZW5kIiwicGFyc2VfY29tcF9wYXJhbXMiLCJpbl9rZXkiLCJwdHlwZSIsInR5cGVfdmFsIiwic2ZfZGVmaXNsYW5kIiwiaXNsYW5kIiwiZGVmaW9fcGFyc2Vfa3dhcmdzX2IiLCJzZl9kZWZpbyIsInNmX2RlZm1hY3JvIiwicmVzdF9wYXJhbSIsIm1hYyIsImNzdF9pbl9yZXN0IiwicGFyc2VfbWFjcm9fcGFyYW1zIiwicXFfZXhwYW5kIiwidGVtcGxhdGUiLCJoZWFkIiwic3BsaWNlZCIsImNzdF9kZWMiLCJzZl9sZXRyZWMiLCJuYW1lcyIsInZhbF9leHBycyIsInZuYW1lIiwidmFsX2V4cHIiLCJ2YWx1ZXMiLCJuIiwiY3N0X3ZhbHVlcyIsImNhbGxfd2l0aF92YWx1ZXMiLCJwcm9kdWNlciIsImNvbnN1bWVyIiwic2ZfbGV0X3ZhbHVlcyIsImNsYXVzZSIsInZzIiwibGFzdF92YWwiLCJzZl9kZWZpbmVfdmFsdWVzIiwic3RlcF9zZl9sZXRyZWMiLCJ0aGsiLCJzdGVwX3NmX2R5bmFtaWNfd2luZCIsImJlZm9yZSIsImFmdGVyIiwic2Zfc2NvcGUiLCJyZXN0Iiwic2ZfcHJvdmlkZSIsImNzdF9zcl9saXRlcmFscyIsImNzdF9zcl9ydWxlcyIsImNzdF9zeW50YXhfcnVsZXNfYm9keSIsImV4cGFuZF9tYWNybyIsImNsb3N1cmUiLCJjZWtfc3RlcF9sb29wIiwiY3N0X0lPX3N1c3BlbnNpb25faW5fbm9uX0lPX2NvIiwiY2VrX3J1biIsImZpbmFsIiwiaG9vayIsImNla19yZXN1bWUiLCJzdXNwZW5kZWRfc3RhdGUiLCJjZWtfc3RlcCIsImNzdF9zdGFydHNfd2l0aCIsInN0ZXBfZXZhbCIsImV4cHIiLCJrcyIsImZpcnN0X2tleSIsInJlbWFpbmluZ19lbnRyaWVzIiwic3RlcF9zZl9yYWlzZSIsImNzdF9ndWFyZF9rIiwiY3N0X2d1YXJkX3Jlc3VsdCIsImNzdF9jYWxsX2NjIiwiY3N0X2ZpcnN0IiwiY3N0X2hhbmRsZXJfYmluZCIsImNzdF9yYWlzZSIsInN0ZXBfc2ZfZ3VhcmQiLCJjb3VudGVyIiwidmFyX2NsYXVzZXMiLCJ2YXIkIiwic2VudGluZWwiLCJzdGVwX3NmX2NhbGxjYyIsInN0ZXBfc2ZfY2FzZSIsInN0ZXBfc2ZfbGV0X21hdGNoIiwicGF0dGVybiIsImNzdF9kb19sb29wIiwiY3N0X2VtaXR0ZWQiLCJjc3RfbWFwX2luZGV4ZWQiLCJjc3RfcGVlayIsImNzdF9zeW50YXhfcnVsZXMiLCJyZW5kZXJfY2hlY2siLCJyZW5kZXJfZm4iLCJzdGVwX2V2YWxfbGlzdCIsImIiLCJ0ZXN0X2NsYXVzZSIsInN0ZXBzIiwiY3N0X3Byb21pc2UiLCJjc3RfZm9yY2VkIiwiY3N0X3RodW5rIiwic2ZfZGVsYXkiLCJ0aHVuayIsImNzdF9pdGVyYXRpdmUiLCJzZl9kZWxheV9mb3JjZSIsInByb21pc2VfcCIsIm1ha2VfcHJvbWlzZSIsImZvcmNlIiwia29udF9leHRyYWN0X3Byb3ZpZGVzIiwicmVzdF9mcmFtZXMiLCJjc3RfY29udGFpbnMiLCJwcm92aWRlX2JhdGNoX2RlcHRoX3JlZiIsInByb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIiwicHJvdmlkZV9zdWJzY3JpYmVyc19yZWYiLCJmaXJlX3Byb3ZpZGVfc3Vic2NyaWJlcnMiLCJzdWJzIiwic3ViIiwiYmF0Y2hfYmVnaW5fYiIsImJhdGNoX2VuZF9iIiwicXVldWUiLCJiaW5kX3RyYWNraW5nX3JlZiIsInN0ZXBfc2ZfYmluZCIsInByZXYiLCJzdGVwX3NmX3BhcmFtZXRlcml6ZSIsImZpcnN0X3BhaXIiLCJzeW50YXhfcnVsZXNfbWF0Y2giLCJsaXRlcmFscyIsInN5bnRheF9ydWxlc19tYXRjaF9saXN0IiwicGkiLCJmaSIsInBsZW4iLCJmbGVuIiwic3ViX3BhdCIsIm5fZWxsaXBzaXMiLCJzdWJfYmluZGluZ3MiLCJyZXN0X3Jlc3VsdCIsIm1lcmdlZCIsImV4aXN0aW5nIiwic3ViX3Jlc3VsdCIsInN5bnRheF9ydWxlc19maW5kX3ZhciIsImZvdW5kIiwic3ludGF4X3J1bGVzX2ZpbmRfYWxsX3ZhcnMiLCJzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUiLCJzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCIsImVsZW0iLCJoYXNfZWxsaXBzaXMiLCJhbGxfdmFycyIsImNvdW50IiwiZXhwYW5kZWQiLCJ2YXJfbmFtZSIsInN5bnRheF9ydWxlc19leHBhbmQiLCJydWxlcyIsImZ1bGxfZm9ybSIsInN5bnRheF9ydWxlc190cnlfcnVsZXMiLCJydWxlIiwic2Zfc3ludGF4X3J1bGVzIiwic3RlcF9zZl9kZWZpbmVfbGlicmFyeSIsImxpYl9zcGVjIiwiZGVjbHMiLCJsaWJfZW52IiwiYm9keV9mb3JtcyIsImRlY2wiLCJraW5kIiwiZXhwb3J0X2RpY3QiLCJjc3RfZXhjZXB0IiwiY3N0X29ubHkiLCJjc3RfcHJlZml4IiwiY3N0X3JlbmFtZSIsImJpbmRfaW1wb3J0X3NldCIsImlkIiwicGZ4Iiwic3RlcF9zZl9pbXBvcnQiLCJyZXN0X3NldHMiLCJzdGVwX3NmX3BlcmZvcm0iLCJzZl9kZWZpbmVfcmVjb3JkX3R5cGUiLCJ0eXBlX3N5bSIsImN0b3Jfc3BlYyIsInByZWRfc3ltIiwiZmllbGRfc3BlY3MiLCJyYXdfbmFtZSIsInR5cGVfbmFtZSIsImN0b3JfbmFtZSIsImN0b3JfcGFyYW1zIiwicHJlZF9uYW1lIiwiZmllbGRfbmFtZXMiLCJmcyIsInJ0ZF91aWQiLCJhY2Nlc3Nvcl9uYW1lIiwibXV0YXRvcl9uYW1lIiwiY3N0X3Byb3RvY29sX3JlZ2lzdHJ5IiwiY3N0X2ltcGwiLCJjc3RfYXJpdHkiLCJjc3RfZ2V0IiwiY3N0X2ltcGxzIiwiY3N0X21ldGhvZHMiLCJzZl9kZWZpbmVfcHJvdG9jb2wiLCJwcm90b19uYW1lIiwibWV0aG9kX3NwZWNzIiwicG5hbWUiLCJtZXRob2RfbmFtZSIsInNlbGZfc3ltIiwic2ZfaW1wbGVtZW50IiwicmF3X3R5cGVfbmFtZSIsIm1ldGhvZF9kZWZzIiwicHJvdG8iLCJpbXBscyIsInR5cGVfaW1wbHMiLCJtZXRob2RfZGVmIiwibW5hbWUiLCJtIiwicHJvdG9fbWV0aG9kIiwiYXJpdHkiLCJzYXRpc2ZpZXNfcCIsIndhcm5pbmdzIiwiY2hlY2tfbWF0Y2hfZXhoYXVzdGl2ZW5lc3MiLCJwYXR0ZXJucyIsImhhc193aWxkY2FyZCIsImhhc19lbHNlIiwiaGFzX3RydWUiLCJoYXNfZmFsc2UiLCJtYXRjaF9maW5kX2NsYXVzZSIsImNzdF9hZHQiLCJtYXRjaF9wYXR0ZXJuIiwiZmllbGRfcGF0dGVybnMiLCJmaWVsZHMiLCJtYXRjaF9jbGF1c2VfaXNfZWxzZV9wIiwibWF0Y2hfY2xhdXNlX2N0b3JfbmFtZSIsImNzdF9hZHRfd2FybmVkIiwibWF0Y2hfd2Fybl9ub25fZXhoYXVzdGl2ZSIsInJlZ2lzdGVyZWQiLCJjbGF1c2VfY3RvcnMiLCJtaXNzaW5nIiwid2FybmVkIiwiY3N0X2FkdF9yZWdpc3RyeSIsIm1hdGNoX2NoZWNrX2V4aGF1c3RpdmVuZXNzIiwic3RlcF9zZl9tYXRjaCIsInN0ZXBfc2ZfaGFuZGxlcl9iaW5kIiwiaGFuZGxlcl9zcGVjcyIsInN0ZXBfc2ZfcmVzdGFydF9jYXNlIiwicmVzdGFydF9zcGVjcyIsInN0ZXBfc2Zfc2lnbmFsIiwic3RlcF9zZl9pbnZva2VfcmVzdGFydCIsInJuIiwicmVzdGFydF9uYW1lIiwicmVzdGFydF9hcmciLCJyZXN0YXJ0X2ZyYW1lIiwicmVzdF9rb250IiwicmVzdGFydF9lbnYiLCJzdGVwX3NmX2lmIiwic3RlcF9zZl93aGVuIiwic3RlcF9zZl9iZWdpbiIsInN0ZXBfc2ZfbGV0IiwiZmlyc3RfYmluZGluZyIsInJlc3RfYmluZGluZ3MiLCJzdGVwX3NmX2RlZmluZSIsImZuX25hbWUiLCJib2R5X3BhcnRzIiwicmVzb2x2ZWRfYXJncyIsInZhbF9pZHgiLCJzdGVwX3NmX3NldF9iIiwic3RlcF9zZl9hbmQiLCJzdGVwX3NmX29yIiwic3RlcF9zZl9jb25kIiwic3RlcF9zZl90aHJlYWRfZmlyc3QiLCJjc3RfbGFzdCIsInN0ZXBfc2ZfdGhyZWFkX2xhc3QiLCJzdGVwX3NmX3RocmVhZF9hcyIsImluaXQiLCJmb3JtcyIsInN0ZXBfc2ZfbGFtYmRhIiwic3RlcF9zZl9zY29wZSIsInJlc3RfYXJncyIsInN0ZXBfc2ZfcHJvdmlkZSIsInN0ZXBfc2ZfY29udGV4dCIsImRlZmF1bHRfdmFsIiwic3YiLCJzdGVwX3NmX3BlZWsiLCJzdGVwX3NmX3Byb3ZpZGVfYiIsImNzdF9zY29wZV9lbWl0Iiwic3RlcF9zZl9lbWl0Iiwic3RlcF9zZl9lbWl0dGVkIiwic3RlcF9zZl9yZXNldCIsInN0ZXBfc2Zfc2hpZnQiLCJrX25hbWUiLCJjYXB0dXJlZF9yZXN1bHQiLCJzaGlmdF9lbnYiLCJzdGVwX3NmX2RlcmVmIiwiY2VrX2NhbGwiLCJhIiwiY3N0X3VwZGF0ZV9mbiIsInJlYWN0aXZlX3NoaWZ0X2RlcmVmIiwic2lnIiwic2Nhbl9yZXN1bHQiLCJjYXB0dXJlZF9mcmFtZXMiLCJyZXNldF9mcmFtZSIsInJlbWFpbmluZ19rb250Iiwic3Vic2NyaWJlciIsIm5ld19yZXNldCIsIm5ld19rb250IiwiaW5pdGlhbF9rb250Iiwic3RlcF9ldmFsX2NhbGwiLCJobmFtZSIsImhvX2Zvcm1fbmFtZV9wIiwiaG9fZm5fcCIsImhvX3N3YXBfYXJncyIsImNzdF92ZWN0b3JfbGlzdCIsImNzdF92ZWN0b3IiLCJzZXFfdG9fbGlzdCIsIngiLCJob19zZXR1cF9kaXNwYXRjaCIsIm9yZGVyZWQiLCJjb2xscyIsImhlYWRzIiwidGFpbHMiLCJjb2xsIiwic2VxdWVuY2VfdG9fbGlzdCIsImNzdF9saXN0X3ZlY3RvciIsInNlcXVlbmNlX3RvX3ZlY3RvciIsInNlcXVlbmNlX2xlbmd0aCIsInNlcXVlbmNlX3JlZiIsInNlcXVlbmNlX2FwcGVuZCIsInMxIiwiczIiLCJzdGVwX2hvX21hcCIsInN0ZXBfaG9fbWFwX2luZGV4ZWQiLCJzdGVwX2hvX2ZpbHRlciIsInN0ZXBfaG9fcmVkdWNlIiwic3RlcF9ob19zb21lIiwic3RlcF9ob19ldmVyeSIsInN0ZXBfaG9fZm9yX2VhY2giLCJjc3Rfdm1fc3VzcGVuZGVkIiwiY3N0X2JvZHkiLCJjc3RfZXZhbGVkIiwiY3N0X21hdGNoX3ZhbCIsImNzdF9yZW1haW5pbmciLCJjc3RfcmVzdWx0cyIsImNzdF9yZXN1bWUiLCJjc3Rfc2NoZW1lIiwiY3N0X3N1YnNjcmliZXJzIiwibGFzdF9lcnJvcl9rb250X3JlZiIsInN0ZXBfY29udGludWUiLCJjb252ZXJ0ZWRfdmFsIiwibmV4dF9iaW5kaW5nIiwiZWZmZWN0X25hbWVzIiwibmV4dCIsIm5leHRfdGVzdCIsIm5leHRfY2xhdXNlcyIsIm5leHRfY2xhdXNlIiwiYmluZF9uYW1lIiwicmVzdF9mb3JtcyIsIm5ld19lbnYiLCJuZXdfZXZhbGVkIiwibGFzdF9yZXN1bHQiLCJjb21wbGV0ZWQiLCJuZXh0X2VudHJ5IiwiY3R4IiwiZGVwX2xpc3QiLCJub3RpZnlfZm4iLCJmaXJzdF9wIiwibmV3X2ZyYW1lIiwidHJhY2tlZCIsInRhcmdldCIsIm9sZF92YWwiLCJpbmRleGVkIiwibmV3X3Jlc3VsdHMiLCJjYWxsX2FyZ3MiLCJuZXh0X2ZyYW1lIiwidW53aW5kX3Jlc3VsdCIsInVud291bmRfayIsImJvZHlfZXhwciIsInByb3ZpZGVfa29udCIsImNvbnRpbnVlX3dpdGhfY2FsbCIsInVpZCIsIndfbGVuIiwiY29udF9kYXRhIiwiaml0X3Jlc3VsdCIsInNmX2Nhc2Vfc3RlcF9sb29wIiwidGVzdF92YWwiLCJldmFsX2V4cHJfY2VrIiwidHJhbXBvbGluZV9jZWsiLCJtYWtlX2Nvcm91dGluZSIsImV2YWxfZXhwciIsImludGVybiIsInN5bWJvbF9pbnRlcm5lZF9wIiwic3ltIiwicHJvdmlkZV9zdWJzY3JpYmVycyIsImNla19ydW5faXRlcmF0aXZlIiwiZXhuIiwibXNnIiwiY29sbGVjdF9jb21wX3RyYWNlIiwidHJhY2UiLCJmb3JtYXRfY29tcF90cmFjZSIsImxpbmVzIiwicHJlZml4IiwiZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIiwic2ZfZGVmaW5lX3R5cGUiLCJlbnZfdmFsIiwibCIsImN0b3Jfc3BlY3MiLCJlbnZfYmluZF92IiwicmVnaXN0cnkiLCJjdG9yX25hbWVzIiwicGFyZ3MiLCJjbiIsImN0b3JfYXJncyIsImZuYW1lIiwiY3N0X2RlZmluZV90eXBlIiwiY3N0X2xldF92YWx1ZXMiLCJjc3RfZGVmaW5lX3ZhbHVlcyIsImNzdF9kZWxheSIsImNzdF9kZWxheV9mb3JjZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBLGFBQUFDLEdDU3lELFNBQUM7QUFBQSxZQUFBQyxXQUFBRCxHQUN2QyxzQ0FBZ0I7QUFBQTtBQUFBLElBQUFFLG9CQVVKO0FBQUEsSUFBQUMsV0RwQi9CO0FBQUEsWUFBQUMsZUFBQUMsU0FBQUMsS0FBQUM7QUFBQUEsSUM0QkU7QUFBQSxHQUFvRztBQUFBLE9BQUFDLGVENUJ0RztBQUFBLFlBQUFDLGVBQUFDLE9BQUFKLEtBQUFDO0FBQUFBLElDZ0NFO0FBQUEsR0FBc0c7QUFBQTtBQUFBLElBQUFJLFVEaEN4RztBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsUUNvQmlEO0FBQUEsWUFBQUMsbUJBQUFDLFNBQUFYLEtBQUFDO0FBQUFBLFFBQUFXLElBZ0JyQztBQUFBLElBQW9CO0FBQUEsSUFBOEI7QUFBQSxJQUFnQztBQUFBLElBQW9EO0FBQUEsSUFBb0M7QUFBQSxHQUFVO0FBQUE7QUFBQSxJQUFBQyxNRHBDaE07QUFBQSxRQ29CaUQ7QUFBQTtBQUFBO0FBQUEsWUFBQUMsZUFBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQW9CbkI7QUFBQSxLQUFBQyxNQUFoQjtBQUFBLElBQWtGLG1DQUFzQjtBQUFBLFlBQW1CO0FBQUEsSUFBaUMsbUNBQUU7QUFBQTtBQUFBLFdBcEIzSDtBQUFBLFlBQUFDLGdCQUFBRjtBQUFBQSxRQUFBLElBd0IvQjtBQUFBLElBQWdDLHVDQUEyQjtBQUFBO0FBQUEsV0F4QjVCO0FBQUEsWUFBQUcsWUFBQUMsR0E0Qi9DLHNDQUE4QjtBQUFBLFdBNUJpQjtBQUFBLFlBQUFDLFFBQUFELEdBZ0MvQyxzQ0FBMEI7QUFBQSxXQWhDcUI7QUFBQSxZQUFBRSxTQUFBRixHQW9DL0Msc0NBQTJCO0FBQUEsV0FwQ29CO0FBQUEsWUFBQUcsVUFBQUgsR0F3Qy9DLHNDQUE0QjtBQUFBLFdBeENtQjtBQUFBLFlBQUFJLGVBQUFKLEdBNEMvQyxzQ0FBOEI7QUFBQSxPQUFBSyxZRGhFaEMsYUNvQmlEO0FBQUEsWUFBQUMsVUFBQU4sR0FnRC9DLHNDQUE0QjtBQUFBLE9BQUFPLFNEcEU5QjtBQUFBLFlBQUFDLGNBQUFDLFdBQUFDLFdBQUE3QjtBQUFBQSxJQ3dFRTtBQUFBLEdBQXVMO0FBQUEsT0FBQThCLFdEeEV6TDtBQUFBLFlBQUFDLGdCQUFBQyxZQUFBaEM7QUFBQUEsSUM0RUU7QUFBQSxHQUFvTDtBQUFBLE9BQUFpQyxZRDVFdEw7QUFBQSxZQUFBQyxpQkFBQUMsV0FBQW5DO0FBQUFBLElDZ0ZFO0FBQUEsR0FBb0w7QUFBQSxPQUFBb0MsVURoRnRMO0FBQUEsWUFBQUMsZUFBQUMsTUFBQUgsV0FBQUksTUFBQUM7QUFBQUEsSUNvRkU7QUFBQSxHQUFzTDtBQUFBLE9BQUFDLGFEcEZ4TDtBQUFBLFlBQUFDLGtCQUFBSixNQUFBdEMsS0FBQTJDLGFBQUFDO0FBQUFBLElDd0ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQWdNO0FBQUEsT0FBQUMscUJEeEZsTTtBQUFBLFlBQUFDLDBCQUFBUixNQUFBUyxNQUFBL0M7QUFBQUEsSUM0RkU7QUFBQSxHQUF3TDtBQUFBLE9BQUFnRCxVRDVGMUw7QUFBQSxZQUFBQyxlQUFBWCxNQUFBdEM7QUFBQUEsSUNnR0U7QUFBQSxHQUE2SztBQUFBLE9BQUFrRCxVRGhHL0s7QUFBQSxZQUFBQyxlQUFBekUsR0FBQTBFLFFBQUFqQixXQUFBbkMsS0FBQXFELFVBQUFDO0FBQUFBLFFBQUFBLGNDb0c4TDtBQUFBLElBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBdUM7QUFBQSxZQUFBQyxnQkFBQTdFLEdBQUE4RSxNQUFBeEQ7QUFBQUEsSUFJaFA7QUFBQSxHQUE0SztBQUFBLE9BQUF5RCxXRHhHOUs7QUFBQSxZQUFBQyxnQkFBQXZCLFdBQUFuQyxLQUFBMkQ7QUFBQUEsSUM0R0U7QUFBQSxHQUF3TDtBQUFBLE9BQUFDLGlCRDVHMUw7QUFBQSxZQUFBQyxzQkFBQUMsWUFBQTlEO0FBQUFBLElDZ0hFO0FBQUEsR0FBMEw7QUFBQSxPQUFBK0QsV0RoSDVMO0FBQUEsWUFBQUMsZ0JBQUFDLFdBQUE5QixXQUFBbkM7QUFBQUEsSUNvSEU7QUFBQSxHQUF5TDtBQUFBLE9BQUFrRSxhRHBIM0w7QUFBQSxZQUFBQyxrQkFBQWhDLFdBQUFuQyxLQUFBb0UsTUFBQTlCO0FBQUFBLElDd0hFO0FBQUEsR0FBdUw7QUFBQTtBQUFBLElBQUErQixXRHhIekw7QUFBQSxJQUFBQyxZQUFBO0FBQUEsUUNvQmlEO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGtCQUFBQyxNQUFBcEUsT0FBQXFFO0FBQUFBO0FBQUFBLEtBQUEsSUF3R2hCO0FBQUEsU0FBakI7QUFBQSxJQUFWO0FBQUEsS0FBbUw7QUFBQSx1RUFBcUU7QUFBQTtBQUFBLFNBQXRHO0FBQUEsU0FBMUM7QUFBQSxTQUFqQjtBQUFBLElBQVAsT0FBcUYsVUFBckYsc0NBQXdLO0FBQUE7QUFBQTtBQUFBLElBQUFDLGFENUg5UDtBQUFBLFFDb0JpRDtBQUFBO0FBQUE7QUFBQSxZQUFBQyx1QkFBQUgsTUFBQXBFLE9BQUFxRTtBQUFBQTtBQUFBQSxLQUFBLElBNEdoQjtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLGNBQXdKO0FBQUEsZUFBeEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQXNGO0FBQUEsd0VBQXFFO0FBQUE7QUFBQSxPQUFBRyxVRGhJalAsV0NvQmlEO0FBQUEsWUFBQUMsZUFBQW5HLEdBQUF5RCxXQUFBMkMsU0FBQTlFO0FBQUFBLElBZ0gvQztBQUFBLEdBQTZMO0FBQUEsV0FoSDlJO0FBQUEsWUFBQStFLHVCQUFBckcsR0FBQXlELFdBQUEyQyxTQUFBOUU7QUFBQUEsSUFvSC9DO0FBQUEsR0FBNEw7QUFBQSxPQUFBZ0YsZ0JEeEk5TDtBQUFBLFlBQUFDLHFCQUFBdkcsR0FBQXdHLGlCQUFBSixTQUFBOUU7QUFBQUEsSUM0SUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBZ007QUFBQSxPQUFBbUYsYUQ1SWxNO0FBQUEsWUFBQUMsa0JBQUExRyxHQUFBeUQsV0FBQTJDLFNBQUFPLGNBQUFyRjtBQUFBQSxJQ2dKRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFnTTtBQUFBLE9BQUFzRixhRGhKbE07QUFBQSxZQUFBQyxrQkFBQTdHLEdBQUF5RCxXQUFBbkM7QUFBQUEsSUNvSkU7QUFBQSxHQUFtTDtBQUFBLE9BQUF3RixlRHBKckw7QUFBQSxZQUFBQyxvQkFBQS9HLEdBQUF5RCxXQUFBbkM7QUFBQUEsSUN3SkU7QUFBQSxHQUFxTDtBQUFBLE9BQUEwRixXRHhKdkw7QUFBQSxZQUFBQyxnQkFBQWpILEdBQUF5RCxXQUFBbkM7QUFBQUEsSUM0SkU7QUFBQSxHQUFpTDtBQUFBLE9BQUE0RixZRDVKbkw7QUFBQSxZQUFBQyxpQkFBQW5ILEdBQUF5RCxXQUFBbkM7QUFBQUEsSUNnS0U7QUFBQSxHQUFrTDtBQUFBLE9BQUE4RixZRGhLcEw7QUFBQSxZQUFBQyxpQkFBQXpELE1BQUFILFdBQUFuQztBQUFBQSxJQ29LRTtBQUFBLEdBQXFMO0FBQUEsT0FBQWdHLGNEcEt2TCxlQ29CaUQ7QUFBQSxZQUFBQyxtQkFBQTNELE1BQUFsQyxPQUFBK0IsV0FBQW5DO0FBQUFBLElBb0ovQztBQUFBLEdBQStMO0FBQUEsT0FBQWtHLFdEeEtqTTtBQUFBLFlBQUFDLGdCQUFBNUQsTUFBQXZDLEtBQUFvRztBQUFBQSxJQzRLRTtBQUFBLEdBQXdMO0FBQUEsT0FBQUMsa0JENUsxTDtBQUFBLFlBQUFDLHVCQUFBaEUsTUFBQXRDO0FBQUFBLElDZ0xFO0FBQUEsR0FBcUw7QUFBQSxPQUFBdUcsZ0JEaEx2TCxpQkNvQmlEO0FBQUEsWUFBQUMscUJBQUFsRSxNQUFBbEMsT0FBQStCLFdBQUFuQztBQUFBQSxRQUFBSSxVQWdLMEk7QUFBQSxJQUFhO0FBQUE7QUFBQSxHQUE2QztBQUFBLE9BQUFxRyxZRHBMclA7QUFBQSxZQUFBQyxpQkFBQTFHO0FBQUFBLElDd0xFO0FBQUEsR0FBOEs7QUFBQSxPQUFBMkcsV0R4TGhMO0FBQUEsWUFBQUMsZ0JBQUF6RSxXQUFBMkMsU0FBQTlFO0FBQUFBLElDNExFO0FBQUEsR0FBdUw7QUFBQSxPQUFBNkcsVUQ1THpMO0FBQUEsWUFBQUMsZUFBQTNFLFdBQUFuQztBQUFBQSxJQ2dNRTtBQUFBLEdBQWtMO0FBQUEsT0FBQStHLFNEaE1wTDtBQUFBLFlBQUFDLGNBQUE3RSxXQUFBbkM7QUFBQUEsSUNvTUU7QUFBQSxHQUFpTDtBQUFBLE9BQUFpSCxtQkRwTW5MO0FBQUEsWUFBQUMsd0JBQUFDLE9BQUFDLFlBQUFDLGFBQUFySDtBQUFBQSxJQ3dNRTtBQUFBO0FBQUEsR0FBK0w7QUFBQSxPQUFBc0gscUJEeE1qTTtBQUFBLFlBQUFDLDBCQUFBdkgsS0FBQXdILFdBQUFDO0FBQUFBLElDNE1FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXdNO0FBQUEsT0FBQUMsYUQ1TTFNO0FBQUEsWUFBQUMsa0JBQUEzSDtBQUFBQSxJQ2dORTtBQUFBLEdBQStLO0FBQUEsT0FBQTRILGlCRGhOakw7QUFBQSxZQUFBQyxzQkFBQVIsYUFBQVMsYUFBQTlIO0FBQUFBLElDb05FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQW1NO0FBQUEsT0FBQStILGtCRHBOck07QUFBQSxZQUFBQyx1QkFBQUMsYUFBQWpJO0FBQUFBLElDd05FO0FBQUEsR0FBNEw7QUFBQSxPQUFBa0ksWUR4TjlMO0FBQUEsWUFBQUMsaUJBQUFuSTtBQUFBQSxJQzRORTtBQUFBLEdBQThLO0FBQUEsT0FBQW9JLGVENU5oTDtBQUFBLFlBQUFDLG9CQUFBQyxTQUFBQyxnQkFBQUMsYUFBQXhJO0FBQUFBLElDZ09FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXdNO0FBQUEsT0FBQXlJLGlCRGhPMU07QUFBQSxZQUFBQyxzQkFBQXBHLE1BQUFxRztBQUFBQSxJQ29PRTtBQUFBLEdBQXFMO0FBQUE7QUFBQSxJQUFBQyxXRHBPdkw7QUFBQSxJQUFBQyxXQUFBO0FBQUEsUUNvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsd0JBQUE3STtBQUFBQSxRQUFBQSxPQW9OL0M7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFrQztBQUFBO0FBQUEsTUFBQThJLFFBQTRCO0FBQUEsVUFBaUQ7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQTtBQUFBLFdBQW9QLHdCQUEwQjtBQUFBLE9BQUFuSSxJQUE5SztBQUFBLFdBQThDO0FBQUEsTUFBMUI7QUFBQSxjQUFxRjtBQUFBLE1BQTFCO0FBQUEsTUFBeUQsMkNBQTBHO0FBQUE7QUFBQSxTQUFBWCxTQUFuQjtBQUFBLEtBQWU7QUFBQTtBQUFBLEdBQUk7QUFBQSxPQUFBK0ksY0R4TzVhO0FBQUEsWUFBQUMsbUJBQUFDLFVBQUEvRyxXQUFBbkM7QUFBQUEsSUM0T0U7QUFBQSxHQUEyTDtBQUFBLE9BQUFtSixjRDVPN0w7QUFBQSxZQUFBQyxtQkFBQUMsVUFBQWxILFdBQUFuQztBQUFBQSxJQ2dQRTtBQUFBLEdBQTJMO0FBQUEsT0FBQXNKLG9CRGhQN0w7QUFBQSxZQUFBQyx5QkFBQXZKLEtBQUF3SjtBQUFBQSxJQ29QRTtBQUFBLEdBQTZMO0FBQUEsT0FBQUMsaUJEcFAvTDtBQUFBLFlBQUFDLHNCQUFBMUosS0FBQTJKO0FBQUFBLElDd1BFO0FBQUEsR0FBNkw7QUFBQSxPQUFBQyxrQkR4UC9MO0FBQUEsWUFBQUMsdUJBQUE3SixLQUFBd0o7QUFBQUEsSUM0UEU7QUFBQSxHQUEyTDtBQUFBLE9BQUFNLGNENVA3TDtBQUFBLFlBQUFDLG1CQUFBL0o7QUFBQUEsSUNnUUU7QUFBQSxHQUFnTDtBQUFBLE9BQUFnSyxnQkRoUWxMO0FBQUEsWUFBQUMscUJBQUFDLFdBQUFsSztBQUFBQSxJQ29RRTtBQUFBLEdBQXdMO0FBQUEsT0FBQW1LLGFEcFExTDtBQUFBLFlBQUFDLGtCQUFBQyxZQUFBQyxnQkFBQXRLO0FBQUFBLElDd1FFO0FBQUE7QUFBQSxHQUFpTTtBQUFBLE9BQUF1SyxtQkR4UW5NO0FBQUEsWUFBQUM7QUFBQUEsSUFBQXJJLFdBQUFzSSxlQUFBM0YsU0FBQXZDLE1BQUF2QztBQUFBQSxJQzRRRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUEwTTtBQUFBLFdBeFAzSjtBQUFBLFlBQUEwSyxzQkFBQXhCLFlBQUF5QjtBQUFBQSxRQUFBekIsV0E0UC9DO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBc0M7QUFBQTtBQUFBLE1BQUEwQixPQUFxQjtBQUFBLE1BQUFDLE9BQWtDO0FBQUEsTUFBQUMsYUFBbUM7QUFBQSxVQUE2QztBQUFBLEtBQVYsK0JBQXdEO0FBQUEsU0FBQTVCLGFBQXVDO0FBQUEsS0FBbUI7QUFBQTtBQUFBLEdBQWlCO0FBQUEsT0FBQTZCLFFEaFI1UyxTQ29CaUQ7QUFBQSxZQUFBQyxrQkFBQS9LLFFBQUEwSztBQUFBQSxRQUFBMUssT0FnUS9DO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBa0M7QUFBQTtBQUFBLE1BQUE4SSxRQUFzQjtBQUFBLFVBQWlEO0FBQUEsVUFBakI7QUFBQSxLQUFWO0FBQUE7QUFBQSxPQUFBa0M7QUFBQUEsU0FBMEYsc0JBQXVCO0FBQUEsV0FBNkQ7QUFBQSxNQUFWLGlDQUF3RjtBQUFBLFVBQUFoTCxTQUFsQztBQUFBLE1BQWU7QUFBQTtBQUFBLGNBQUFBLFNBQW9ELGlDQUFlO0FBQUE7QUFBQSxHQUFnQjtBQUFBO0FBQUEsSUFBQVksUURwUmhaO0FBQUEsSUFBQXFLLGtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyx1QkFBQXBMLFFBQUEwSztBQUFBQSxRQUFBMUssT0FvUS9DO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBVjtBQUFBLFVBQUFXLElBQTRDO0FBQUEsTUFBb0I7QUFBQSxNQUFrQztBQUFBLE1BQThCO0FBQUE7QUFBQTtBQUFBLE1BQUFtSSxRQUE2QjtBQUFBLE1BQUF1QyxTQUErQjtBQUFBLFVBQWdEO0FBQUEsVUFBakI7QUFBQSxLQUFWO0FBQUE7QUFBQSxPQUFBTDtBQUFBQSxTQUEwRixzQkFBdUI7QUFBQSxXQUE2RDtBQUFBLE1BQVY7QUFBQSxXQUFBckssTUFBZ0c7QUFBQSxPQUFvQjtBQUFBLE9BQXFDO0FBQUEsT0FBOEI7QUFBQTtBQUFBLE1BQTFKO0FBQUE7QUFBQTtBQUFBLGNBQTJNLCtCQUFqQjtBQUFBLE1BQVY7QUFBQTtBQUFBLFlBQXVKO0FBQUEsWUFBdkI7QUFBQSxZQUFqQjtBQUFBLE9BQVY7QUFBQSxRQUFrSDtBQUFBLE9BQTRELFNBQVc7QUFBQSxPQUEwRDtBQUFBO0FBQUE7QUFBQSxPQUEvUTtBQUFBO0FBQUE7QUFBQSxHQUFxWDtBQUFBLFdBcFFyOUI7QUFBQSxZQUFBMkssZUFBQUM7QUFBQUEsSUF3US9DO0FBQUE7QUFBQSxVQUErQjtBQUFBLFVBQWpCO0FBQUEsS0FBVixpQ0FBd1I7QUFBQSxTQUFBbkUsY0FBaE07QUFBQSxLQUE4RDtBQUFBLEtBQWtEO0FBQUE7QUFBQSxHQUFvRjtBQUFBLFlBQUFvRSxtQkFBQXBDLFlBQUEvRztBQUFBQSxRQUFBK0csV0FJaFM7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFzQztBQUFBO0FBQUEsTUFBQXFDLFFBQXNCO0FBQUEsVUFBcUQ7QUFBQSxVQUFqQjtBQUFBLEtBQVYsK0JBQXlEO0FBQUEsU0FBQXJDLGFBQStCO0FBQUEsS0FBbUI7QUFBQTtBQUFBLEdBQVc7QUFBQSxXQTVRaks7QUFBQSxZQUFBc0Msa0JBQUExTCxRQUFBcUM7QUFBQUEsUUFBQXJDLE9BZ1IvQztBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQWtDO0FBQUE7QUFBQSxNQUFBOEksUUFBc0I7QUFBQSxVQUFpRDtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBO0FBQUEsT0FBQWtDLFFBQTBGLG1CQUFvQjtBQUFBLFdBQXdEO0FBQUEsTUFBVjtBQUFBLE9BQXlHO0FBQUEsK0VBQWE7QUFBQSxVQUFBaEwsU0FBaEU7QUFBQSxNQUFlO0FBQUE7QUFBQSxjQUFBQSxTQUE4RSxpQ0FBZTtBQUFBO0FBQUEsR0FBVztBQUFBLE9BQUEyTCxXRHBTN1osWUNvQmlEO0FBQUEsWUFBQUMsV0FBQW5OLEdBb1IvQyxzQ0FBMkI7QUFBQSxZQUFBb04sVUFBQS9DLE9BQUE5STtBQUFBQSxJQUkzQiw2Q0FBcUI7QUFBQTtBQUFBLFlBQUE4TCxTQUFBOUwsTUFJckIsc0NBQWM7QUFBQSxZQUFBK0wsU0FBQS9MLE1BSWQsc0NBQWE7QUFBQSxZQUFBZ00sYUFBQWhNLE1BSWIsc0NBQWdCO0FBQUE7QUFBQSxJQUFBaU0sV0R4VGxCO0FBQUEsUUNvQmlEO0FBQUE7QUFBQTtBQUFBLFlBQUFDLHNCQUFBbE07QUFBQUEsUUFBQW1NLElBd1NtYixNQUFBRixhQUFBO0FBQUE7QUFBQSxhQUFqYjtBQUFBLEtBQVY7QUFBQSxjQUFrRDtBQUFBLE1BQXVEO0FBQUE7QUFBQTtBQUFBLE1BQUFuRCxRQUFxQjtBQUFBLFVBQXlEO0FBQUEsTUFBQXNELEtBQWhCO0FBQUEsS0FBK0Q7QUFBQSxVQUFBQSxPQUFhO0FBQUE7QUFBQTtBQUFBLFdBQStCO0FBQUEsT0FBQUEsT0FBaEI7QUFBQSxLQUFqSDtBQUFBLE1BQTJNLGlFQUFVO0FBQUE7QUFBQSxNQUFBSDtBQUFBQSxRQUEyQjtBQUFBO0FBQUEsTUFBQUUsTUFBYjtBQUFBLEtBQVk7QUFBQTtBQUFBO0FBQUEsR0FBcUY7QUFBQSxXQXhTN2M7QUFBQSxZQUFBRSxtQkFBQUMsU0FBQXZNLEtBQUFDO0FBQUFBLFFBQUFzTSxRQTRTL0MsU0FBQXRNLE9BQUE7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFtQztBQUFBO0FBQUEsTUFBQTJLLE9BQXNCO0FBQUEsVUFBMkc7QUFBQSxVQUF0QyxtQkFBcUI7QUFBQSxNQUFBM0ssU0FBNUI7QUFBQSxNQUFBc00sVUFBdkI7QUFBQSxLQUFnQjtBQUFBO0FBQUE7QUFBQSxHQUFpSDtBQUFBLFdBNVN0TDtBQUFBLFlBQUFDLGtCQUFBdk0sUUFBQXFDO0FBQUFBLFFBQUFyQyxPQWdUL0M7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFrQztBQUFBO0FBQUEsTUFBQThJLFFBQXNCO0FBQUEsVUFBNkQ7QUFBQSxNQUFBL0gsTUFBaEI7QUFBQSxLQUFxRTtBQUFBO0FBQUEsV0FBZ0Q7QUFBQSxXQUFoQjtBQUFBO0FBQUEsY0FBaEI7QUFBQSxLQUE1RywrQkFBMkw7QUFBQSxTQUFBZixTQUE4QjtBQUFBLEtBQWU7QUFBQTtBQUFBLEdBQVc7QUFBQSxXQWhUdFI7QUFBQSxZQUFBd00sb0JBQUF4TSxRQUFBcUM7QUFBQUEsUUFBQXJDLE9Bb1QvQztBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQWtDO0FBQUE7QUFBQSxNQUFBOEksUUFBc0I7QUFBQSxVQUE2RDtBQUFBLE1BQUEvSCxNQUFoQjtBQUFBLEtBQXVFO0FBQUE7QUFBQSxXQUFnRDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBLEtBQTlHLCtCQUE2TDtBQUFBLFNBQUFmLFNBQWdDO0FBQUEsS0FBZTtBQUFBO0FBQUEsR0FBVztBQUFBLFdBcFQxUjtBQUFBLFlBQUF5TSwyQkFBQXpNO0FBQUFBLFFBQUFBLE9Bd1QvQztBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQWtDO0FBQUE7QUFBQSxVQUE2RCxJQUFaLFdBQVk7QUFBQSxVQUE3QjtBQUFBLEtBQVYsK0JBQTRGO0FBQUEsU0FBQUEsU0FBNkM7QUFBQSxLQUFlO0FBQUE7QUFBQSxHQUFHO0FBQUE7QUFBQSxJQUFBaU0sYUQ1VXpOO0FBQUEsUUNvQmlEO0FBQUE7QUFBQSxZQUFBUywrQkFBQTFNO0FBQUFBLFFBQUFtTSxJQTRUcVcsTUFBQUYsV0FBQTtBQUFBO0FBQUEsYUFBblc7QUFBQSxLQUFWO0FBQUEsY0FBa0Q7QUFBQSxNQUF5RTtBQUFBO0FBQUE7QUFBQSxNQUFBbkQsUUFBcUI7QUFBQSxVQUE4QztBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBLE1BQTJHO0FBQUEsOEVBQVU7QUFBQTtBQUFBLE1BQUFtRDtBQUFBQSxRQUEyQjtBQUFBO0FBQUEsTUFBQUUsTUFBYjtBQUFBLEtBQVk7QUFBQTtBQUFBO0FBQUEsR0FBcUY7QUFBQSxPQUFBUSx1QkE1VC9YO0FBQUEsWUFBQUMsc0JBQUF2SyxNQUFBd0s7QUFBQUEsSUFvVS9DLHFFQUFpRDtBQUFBO0FBQUEsT0FBQWpNLFFEeFZuRCxLQUFBa00sV0FBQSxhQ29CaUQ7QUFBQSxZQUFBQyxpQkFBQWpLO0FBQUFBO0FBQUFBLEtBQUEsSUE2VytGO0FBQUE7QUFBQSxPQUF2RztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBQTVCO0FBQUFBLGlCQUFBLElBQWtDO0FBQUEsYUFBVjtBQUFBLHVCQUFnQztBQUFBLDJCQUErQixvQ0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLElBQW9CLDRDQUFHO0FBQUE7QUFBQSxPQUFBOEwsY0RqWXJLLFlBQUFDLG1CQ29CaUQ7QUFBQSxZQUFBQyxpQkFBQXBLO0FBQUFBLFFBQUEsSUFpWEo7QUFBQSxJQUF5QiwrQ0FBRTtBQUFBO0FBQUEsT0FBQXFLLGNEcll4RSxnQkNvQmlEO0FBQUEsWUFBQUMsZ0JBQUF0SztBQUFBQTtBQUFBQSxLQUFBLElBcVhSO0FBQUEsS0FBQTJJLFFBQTFCO0FBQUEsSUFBOEQ7QUFBQSxjQUF1QjtBQUFBLGtCQUE4QyxtQ0FBcUI7QUFBQTtBQUFBLFlBQUE0QixpQkFBQXZLLE1BQUF3SztBQUFBQSxRQUFBM00sSUFJL0Y7QUFBQSxJQUFvQjtBQUFBLFlBQXhEO0FBQUEsSUFBeUIsNkRBQThFO0FBQUE7QUFBQSxPQUFBNE0sY0F6WDFGO0FBQUEsWUFBQUMsY0FBQW5MLE1BQUFTO0FBQUFBLElBaVkvQyx5REFBdUM7QUFBQTtBQUFBLFlBQUEySyxnQkFBQXBMO0FBQUFBLElBSXZDO0FBQUEsK0RBQTRDO0FBQUE7QUFBQSxZQUFBcUwsVUFBQXJMO0FBQUFBLElBSTVDLG1EQUE0QjtBQUFBO0FBQUEsT0FBQXNMLFdEN1o5QjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLElDaWFFLDhEQUFrQztBQUFBO0FBQUEsT0FBQUMsbUJBN1lhO0FBQUEsWUFBQUMsbUJBQUExTCxNQUFBUztBQUFBQSxJQXFaL0MsOERBQTRDO0FBQUE7QUFBQSxZQUFBa0wscUJBQUEzTDtBQUFBQSxJQUk1QztBQUFBLG9FQUFpRDtBQUFBO0FBQUEsWUFBQTRMLGVBQUE1TDtBQUFBQSxJQUlqRCx3REFBaUM7QUFBQTtBQUFBLFlBQUE2TCxjQUFBTDtBQUFBQSxJQUlqQyxtRUFBdUM7QUFBQTtBQUFBLE9BQUFNLFNEcmJ6QyxhQ29CaUQ7QUFBQSxZQUFBQyxxQkFBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQXFhK0I7QUFBQSxLQUFBQyxRQUFWO0FBQUEsSUFBcUUsK0NBQThDO0FBQUE7QUFBQSxPQUFBMU4sUUR6YnpMLFdDb0JpRDtBQUFBLFlBQUEyTix1QkFBQXpMLE1BQUFaO0FBQUFBLFFBQUFBLFlBeWEvQztBQUFBO0FBQUE7QUFBQSxVQUFpRDtBQUFBLE1BQUFuQixNQUFYO0FBQUEsS0FBZ0Q7QUFBQTtBQUFBLFdBQTZEO0FBQUEsT0FBQUEsUUFBakI7QUFBQSxNQUE2RDtBQUFBO0FBQUEsWUFBMkM7QUFBQSxZQUFYO0FBQUE7QUFBQSxlQUFoQjtBQUFBO0FBQUE7QUFBQSxjQUF6RztBQUFBLEtBQWxHLGlDQUF1Z0I7QUFBQTtBQUFBLE1BQUF0QixJQUE5SztBQUFBLFVBQWtEO0FBQUEsVUFBViw2QkFBaUM7QUFBQSxVQUF6RztBQUFBLFVBQWQ7QUFBQSxLQUFyQjtBQUFBO0FBQUEsVUFBbU47QUFBQSxNQUFBeUMsY0FBUDtBQUFBLEtBQTZCO0FBQUE7QUFBQSxHQUFZO0FBQUE7QUFBQSxJQUFBc00sYUQ3YmpoQjtBQUFBLElBQUFDLGFBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUEsWUFBQUMsd0JBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLFFBNmFsQztBQUFBLFNBQW1GO0FBQUEsU0FBbEI7QUFBQSxJQUFWO0FBQUEsU0FBQWpPLElBQTBFO0FBQUEsS0FBb0I7QUFBQSxLQUF5QztBQUFBLEtBQStCO0FBQUE7QUFBQTtBQUFBLEtBQUFrTyxTQUErQjtBQUFBLFNBQTZFO0FBQUEsU0FBUDtBQUFBLFNBQVQ7QUFBQSxLQUFBQyxNQUFqQztBQUFBLEtBQUFuTyxNQUF1RjtBQUFBLElBQW9CO0FBQUEsSUFBcUM7QUFBQSxJQUErQjtBQUFBLEdBQWE7QUFBQTtBQUFBLElBQUFvTyxlRGpjbmU7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFyTyxRQUFBO0FBQUEsSUFBQXNPLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsbUJBQUFoTixNQUFBaU4sUUFBQS9MO0FBQUFBO0FBQUFBLEtBQUEsSUFpYm9CO0FBQUEsS0FBQXhDLE1BQVg7QUFBQSxJQUE2QztBQUFBO0FBQUEsVUFBOEQ7QUFBQSxVQUFkO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBL0Y7QUFBQTtBQUFBLFVBQWtUO0FBQUE7QUFBQSxRQUF4QztBQUFBLFVBQTVEO0FBQUEsVUFBdEI7QUFBQSxLQUEwSTtBQUFBO0FBQUE7QUFBQSxTQUFncUI7QUFBQSxTQUFoQjtBQUFBLFNBQWxCO0FBQUEsU0FBbEM7QUFBQSxTQUFaO0FBQUEsSUFBOWpCO0FBQUE7QUFBQSxlQUFBd087QUFBQUE7QUFBQUEsUUFBQXpNLE9BQXdDO0FBQUEsUUFBQTBNLE1BQWlDO0FBQUEsUUFBQUMsV0FBbUM7QUFBQSxZQUFtRjtBQUFBLFFBQUExTyxNQUFYO0FBQUEsT0FBcUU7QUFBQTtBQUFBLGFBQXNEO0FBQUEsYUFBMkMsUUFBdEQ7QUFBQTtBQUFBLGdCQUEzQjtBQUFBLE9BQXZILGlDQUFvYTtBQUFBO0FBQUE7QUFBQSxVQUE1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQXJGO0FBQUE7QUFBQTtBQUFBLFlBQXhEO0FBQUEsWUFBdEI7QUFBQSxPQUF1TDtBQUFBLE1BQWM7QUFBQTtBQUFBLElBQW1HO0FBQUEsR0FBTztBQUFBO0FBQUEsSUFBQTJPLFdEcmNsaEM7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMscUJBQUFuTjtBQUFBQTtBQUFBQSxLQUFBVCxPQXFibkM7QUFBQSxTQUEyRDtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUE2TixJQUE0RTtBQUFBLFVBQW1EO0FBQUEsTUFBQS9MLE9BQVY7QUFBQTtBQUFBLFNBQUFBLE9BQXhEO0FBQUEsWUFBZ007QUFBQSxJQUFWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw0RUFBbWI7QUFBQTtBQUFBO0FBQUEsSUFBQWdNLGFEemNydUI7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUE3TSxNQUFBeEQ7QUFBQUEsUUFBQSxJQXliVixxQ0FBWDtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQTBEO0FBQUEsTUFBQXNDLE9BQWI7QUFBQTtBQUFBLFNBQUFBLE9BQW9DO0FBQUE7QUFBQSxLQUFBZ00sYUFBb0M7QUFBQSxLQUFBdkwsT0FBZ0Q7QUFBQSxJQUF3QztBQUFBLFlBQXVHO0FBQUEsSUFBdkM7QUFBQSxZQUF3STtBQUFBLElBQXZDLDZCQUFnQztBQUFBLElBQStDO0FBQUEsSUFBd0M7QUFBQSxHQUFTO0FBQUEsWUFBQXVOLHVCQUFBOU0sTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE4QyxPQUlsZjtBQUFBLFNBQXdFO0FBQUEsU0FBWDtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQTBEO0FBQUEsTUFBQVQsT0FBYjtBQUFBO0FBQUEsU0FBQUEsT0FBb0M7QUFBQSxRQUFBaU8sY0FBcUM7QUFBQSxJQUFpRixPQUEwRDtBQUFBO0FBQUE7QUFBQSxhQUF0RSxVQUFZLGtEQUE0RDtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhRGpkcFU7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxpQkFBQXBPLE1BQUFrQjtBQUFBQSxRQUFBVCxPQWljbkMsMEJBQTJEO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBMEU7QUFBQSxVQUF0QjtBQUFBLEtBQThHO0FBQUE7QUFBQTtBQUFBLEtBQUF3TSxTQUErQjtBQUFBLEtBQUFvQixVQUFrRDtBQUFBLFNBQTRGO0FBQUEsU0FBVjtBQUFBLElBQWpDO0FBQUEsWUFBc0g7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUE2RTtBQUFBLFVBQXRCO0FBQUEsS0FBMEc7QUFBQTtBQUFBO0FBQUEsS0FBQUMsV0FBd0I7QUFBQSxLQUFBQyxXQUFzRDtBQUFBLEtBQUEvQixTQUFzRDtBQUFBLFNBQXNEO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBcWI7QUFBQSxVQUF0QjtBQUFBLEtBQW1IO0FBQUE7QUFBQSxZQUE3YztBQUFBLElBQVY7QUFBQTtBQUFBO0FBQUEsUUFBc0Y7QUFBQTtBQUFBLFVBQXZDO0FBQUEsS0FBc0MscUNBQTJZO0FBQUE7QUFBQTtBQUFBLEtBQUFDLE1BQXRVLFNBQVU7QUFBQTtBQUFBLE9BQWtIO0FBQUE7QUFBQSxTQUF2QztBQUFBLElBQXNDLHFDQUEyTTtBQUFBO0FBQUE7QUFBQSxJQUFBK0IsU0RyZDN6QztBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQSxZQUFBQywwQkFBQXhDLFNBQUF5QztBQUFBQSxRQUFBekMsUUFxYy9DLFNBQUF5QyxNQUFBO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBbUM7QUFBQTtBQUFBLE1BQUFDLE9BQXFCO0FBQUEsTUFBQUMsYUFBb0M7QUFBQSxVQUFtRTtBQUFBLE1BQUFsUSxNQUFYO0FBQUEsS0FBaUQ7QUFBQTtBQUFBLFdBQXVEO0FBQUEsT0FBQUEsUUFBWDtBQUFBLE1BQTZDO0FBQUE7QUFBQSxZQUEwRTtBQUFBLFlBQWQ7QUFBQSxRQUFBQSxRQUFoQjtBQUFBLE9BQWlGO0FBQUE7QUFBQSxhQUFpRDtBQUFBLGFBQWpCO0FBQUE7QUFBQSxnQkFBaEI7QUFBQTtBQUFBO0FBQUEsZUFBN0g7QUFBQTtBQUFBO0FBQUEsY0FBekY7QUFBQSxLQUFuRztBQUFBO0FBQUEsT0FBQUosSUFBNGU7QUFBQSxXQUE0RDtBQUFBO0FBQUEsU0FBVjtBQUFBLFlBQW1DO0FBQUEsZ0JBQWtDO0FBQUEsTUFBbkc7QUFBQTtBQUFBLE9BQUF1USxJQUF5SjtBQUFBLFdBQW1EO0FBQUE7QUFBQSxTQUFWO0FBQUEsWUFBaUM7QUFBQSxnQkFBZ0M7QUFBQSxNQUE3STtBQUFBO0FBQUEsT0FBQUg7QUFBQUEsU0FBdEw7QUFBQTtBQUFBLFdBQXhCO0FBQUEsT0FBQXpDLFVBQVA7QUFBQSxNQUE4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBc2Y7QUFBQTtBQUFBLFNBQVY7QUFBQSxZQUFtQztBQUFBLGdCQUFrQztBQUFBLE9BQUF5QztBQUFBQSxTQUFoSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUEwUztBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUk7QUFBQTtBQUFBLElBQUFJLFdEemR0dkM7QUFBQSxJQUFBQyxTQUFBO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUE5TixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQXFDLE9BeWNuQztBQUFBLEtBQUFpUCxVQUFnQztBQUFBLFNBQXdFO0FBQUEsU0FBWDtBQUFBLElBQXRCO0FBQUE7QUFBQSxVQUE4RztBQUFBLFVBQXRCO0FBQUEsS0FBa0g7QUFBQTtBQUFBLFFBQUEzUSxJQUErRTtBQUFBLElBQW9CO0FBQUEsSUFBbUM7QUFBQSxJQUFyRyxPQUFnSjtBQUFBLGFBQWhKLDhEQUFnSztBQUFBO0FBQUEsT0FBQTRRLGFBemMvYTtBQUFBLFlBQUFDLGFBQUFoQyxLQWtkL0MscUJBQXNCLFNBQUk7QUFBQSxPQUFBaUMsdUJBbGRxQjtBQUFBLFlBQUFDLHVCQUFBQztBQUFBQSxJQTJkL0M7QUFBQSxJQUFpQztBQUFBLEdBQUk7QUFBQTtBQUFBLElBQUEvUSxRRC9ldkM7QUFBQSxJQUFBQSxRQUFBO0FBQUEsSUFBQWdSLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLHFCQUFBN0MsS0FBQThDO0FBQUFBLFFBQUFBLGdCQStkWjtBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQThEO0FBQUEsYUFBK0I7QUFBQSxLQUFWLCtCQUFpRSxxQ0FBOHNDO0FBQUEsYUFBenFDO0FBQUEsS0FBViwrQkFBaUUscUNBQWtuQztBQUFBLGFBQTdrQztBQUFBLEtBQVYsK0JBQWtFLHFDQUFxaEM7QUFBQSxhQUEvK0I7QUFBQSxLQUFWLCtCQUE4RCxxQ0FBMjdCO0FBQUEsYUFBeDVCO0FBQUEsS0FBViwrQkFBK0QscUNBQW0yQjtBQUFBLGFBQWgwQjtBQUFBLEtBQVYsK0JBQStELHFDQUEyd0I7QUFBQSxhQUF4dUI7QUFBQSxLQUFWLCtCQUFpRSxxQ0FBaXJCO0FBQUEsYUFBM29CO0FBQUEsS0FBVjtBQUFBLGNBQWlGO0FBQUEsTUFBZ0IsdUNBQW9qQjtBQUFBO0FBQUEsYUFBM2dCO0FBQUEsS0FBVjtBQUFBLGNBQWtGO0FBQUEsTUFBZ0IsdUNBQW1iO0FBQUE7QUFBQTtBQUFBLE1BQUF2UixNQUE1WDtBQUFBO0FBQUEsUUFBcUM7QUFBQSxXQUFnQztBQUFBO0FBQUEsS0FBNUYsaUNBQTRYO0FBQUEsU0FBQXFMLEtBQXZOO0FBQUEsS0FBc0IsZ0NBQW1CO0FBQUE7QUFBQTtBQUFBLFFBQXdHO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBaEI7QUFBQTtBQUFBO0FBQUEsTUFBQWtHLGtCQUFsRDtBQUFBLEtBQWdJO0FBQUE7QUFBQSxHQUErQjtBQUFBO0FBQUEsSUFBQTFSLFFEbmYzNEM7QUFBQSxJQUFBcU8saUJBQUE7QUFBQSxJQUFBck8sUUFBQTtBQUFBLElBQUEyUixpQkFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGtCQUFBblEsTUFBQWtCO0FBQUFBO0FBQUFBLEtBQUF4QyxNQW1lL0M7QUFBQSxTQUFrRDtBQUFBLElBQTlDLGlDQUErOEQ7QUFBQSxRQUFBK0IsT0FBdjFEO0FBQUEsSUFBNkMsb0NBQSt4RDtBQUFBO0FBQUEsS0FBQTJQLGFBQXZ2RDtBQUFBLEtBQUFDLFlBQXdEO0FBQUEsSUFBNkQ7QUFBQTtBQUFBLFVBQXV1QjtBQUFBO0FBQUEsUUFBekU7QUFBQTtBQUFBO0FBQUEsb0JBQUFuRCxHQUFBb0QsT0FBQXBELE1BQXNELFFBQUksZ0NBQWE7QUFBQTtBQUFBLFVBQXpGO0FBQUEsS0FBL21CO0FBQUE7QUFBQSxnQkFBQTVFO0FBQUFBO0FBQUFBLFNBQUFpSSxNQUEwQztBQUFBLFNBQUEvRSxRQUE4QjtBQUFBLFNBQUFnRixTQUE0QztBQUFBLFNBQUFDLFNBQWdDO0FBQUEsYUFBb0U7QUFBQSxhQUF0QjtBQUFBLFFBQVY7QUFBQTtBQUFBLFVBQUF0RCxNQUFpRTtBQUFBLGNBQTJEO0FBQUEsY0FBWDtBQUFBLFNBQXRCO0FBQUE7QUFBQSxlQUErUjtBQUFBO0FBQUEsYUFBekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQTFIO0FBQUEsZUFBdEI7QUFBQSxVQUEyTjtBQUFBO0FBQUE7QUFBQSxRQUE3VztBQUFBLE9BQXNZO0FBQUE7QUFBQTtBQUFBLElBQTJMO0FBQUE7QUFBQSxNQUFBaUQsZUFBZ0c7QUFBQSxVQUFsQztBQUFBLFVBQWQ7QUFBQSxVQUFoQjtBQUFBO0FBQUEsYUFBaEI7QUFBQSxJQUEzRCxpQ0FBNDFCO0FBQUE7QUFBQSxLQUFBQSxlQUExRDtBQUFBLFNBQWxDO0FBQUEsU0FBMUI7QUFBQSxTQUFaO0FBQUE7QUFBQSxPQUF6RTtBQUFBO0FBQUE7QUFBQSxtQkFBQWxELEdBQUE5UCxPQUFBOFAsTUFBc0QsUUFBSSxnQ0FBYTtBQUFBO0FBQUEsU0FBekY7QUFBQSxJQUFqYztBQUFBO0FBQUEsZUFBQTVFO0FBQUFBO0FBQUFBLFFBQUFpSSxNQUEwQztBQUFBLFFBQUFwRCxNQUE2QjtBQUFBLFlBQW9FO0FBQUEsWUFBWDtBQUFBLE9BQXRCLGlDQUErVTtBQUFBO0FBQUEsWUFBMUM7QUFBQTtBQUFBLFVBQXpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUE3SDtBQUFBLFlBQXRCO0FBQUEsT0FBOE47QUFBQSxNQUFjO0FBQUE7QUFBQSxJQUFtTjtBQUFBLEdBQXVDO0FBQUE7QUFBQSxJQUFBNU8sUUR2Zno5RDtBQUFBLElBQUFBLFFBQUE7QUFBQSxJQUFBbVMsZUFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxtQkFBQTFELFFBQUEvTCxNQUFBaEI7QUFBQUE7QUFBQUEsS0FBQTBRLFdBdWUvQjtBQUFBLEtBQUFsUyxNQUFnRjtBQUFBLElBQWdDO0FBQUE7QUFBQSxVQUEwRDtBQUFBLFVBQTFCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQXZFLGlDQUFndkI7QUFBQTtBQUFBLEtBQUEwUjtBQUFBQSxPQUFybEI7QUFBQTtBQUFBLFNBQXNGO0FBQUEsS0FBQVMsWUFBZDtBQUFBLElBQThFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQUEzUDtBQUFBQSxRQUF3RDtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQUFvUCxJQUFBO0FBQUEsV0FBQXBELElBQUE7QUFBQSxlQUEwRztBQUFBLGVBQXBCO0FBQUE7QUFBQSxhQUFWO0FBQUEsZ0JBQW1EO0FBQUE7QUFBQSxlQUF4RTtBQUFBLFVBQWdCLDZDQUFtRztBQUFBO0FBQUE7QUFBQSxRQUFIO0FBQUEsT0FBRztBQUFBO0FBQUE7QUFBQSxTQUFnSDtBQUFBLFNBQWpCO0FBQUE7QUFBQSxPQUFWO0FBQUEsVUFBMEQ7QUFBQTtBQUFBLFNBQXZGO0FBQUEsSUFBakI7QUFBQSxJQUFrSztBQUFBLEdBQWtDO0FBQUE7QUFBQSxJQUFBNEQsY0QzZnowQjtBQUFBLElBQUFDLFVBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxZQUFBNVUsR0FBQThFLE1BQUErUDtBQUFBQTtBQUFBQSxLQUFBaEUsU0EyZWpDO0FBQUEsU0FBOEM7QUFBQSxLQUFBL00sUUFBWDtBQUFBLFNBQTBHO0FBQUEsU0FBWDtBQUFBLElBQXRCO0FBQUE7QUFBQSxVQUF3SjtBQUFBLFVBQWQ7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQTtBQUFBLFdBQW1RO0FBQUEsV0FBeEM7QUFBQSxPQUFBNkosS0FBOUY7QUFBQSxPQUFBQSxPQUF3QjtBQUFBLFdBQTVDO0FBQUEsV0FBdEI7QUFBQSxNQUFnTTtBQUFBO0FBQUE7QUFBQSxVQUE0SjtBQUFBLFVBQVo7QUFBQSxLQUE1RztBQUFBO0FBQUEsZ0JBQUF6QjtBQUFBQTtBQUFBQSxTQUFBLElBQTZFO0FBQUEsYUFBaEI7QUFBQSxhQUFkO0FBQUEsUUFBakI7QUFBQSxRQUE0RTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQXVLO0FBQUEsVUFBNUI7QUFBQSxVQUFaO0FBQUEsS0FBcEU7QUFBQTtBQUFBLGdCQUFBZ0k7QUFBQUEsWUFBQSxJQUE0QztBQUFBLFFBQWpCO0FBQUEsUUFBdUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUE0RjtBQUFBLElBQW1CLHdDQUFXO0FBQUE7QUFBQSxPQUFBWSxlRC9mbjRCLGlCQ29CaUQ7QUFBQSxZQUFBQyxlQUFBQyxNQUFBclEsVUFBQXJEO0FBQUFBO0FBQUFBLEtBQUEyVCxTQStlakM7QUFBQSxLQUFBQyxTQUFzRDtBQUFBLEtBQUFDLFdBQW1DO0FBQUEsU0FBd0Q7QUFBQSxLQUFBclIsUUFBWDtBQUFBLFNBQTJOO0FBQUEsU0FBWjtBQUFBLElBQTFJO0FBQUE7QUFBQSxlQUFBb1E7QUFBQUE7QUFBQUEsUUFBQXZHLEtBQXdFO0FBQUEsUUFBQUEsT0FBOEI7QUFBQSxZQUExRDtBQUFBLE9BQWpCO0FBQUEsT0FBNkc7QUFBQTtBQUFBO0FBQUEsWUFBbUY7QUFBQSxJQUFWO0FBQUEsYUFBaUU7QUFBQSxLQUFoQjtBQUFBO0FBQUEsWUFBdUY7QUFBQSxJQUF5Qix3Q0FBWTtBQUFBO0FBQUE7QUFBQSxJQUFBeUgsWURuZ0J6bEI7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsbUJBQUE3USxVQUFBckQ7QUFBQUE7QUFBQUEsS0FBQTRULFNBbWYzQjtBQUFBLFNBQXVtQztBQUFBLEtBQUFoVCxJQUEzSjtBQUFBLFNBQXVDO0FBQUEsSUFBbkI7QUFBQSxZQUFnRjtBQUFBLElBQW5CO0FBQUEsUUFBQWlULFdBQXRnQztBQUFBLElBQTJFO0FBQUE7QUFBQSxlQUFBOVMsT0FBQW9UO0FBQUFBO0FBQUFBLFFBQUF0QixNQUE4QztBQUFBLFFBQUF1QixPQUEyQztBQUFBLE9BQXVDO0FBQUE7QUFBQTtBQUFBLFdBQThGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBdUIsNkNBQXltQjtBQUFBO0FBQUE7QUFBQSxZQUF0akI7QUFBQSxRQUFBcFQsTUFBaEI7QUFBQSxPQUFnRTtBQUFBO0FBQUEsYUFBeUU7QUFBQSxhQUF6QjtBQUFBLGFBQWhCO0FBQUE7QUFBQSxnQkFBaEI7QUFBQSxPQUF2RztBQUFBO0FBQUEsYUFBZ1M7QUFBQTtBQUFBLFdBQXpDLFdBQVksVUFBWTtBQUFBLGFBQTdDO0FBQUEsUUFBdkI7QUFBQTtBQUFBO0FBQUEsV0FBc007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUF1Qiw2Q0FBcUw7QUFBQTtBQUFBLGVBQXZILFdBQVk7QUFBQSxPQUFsQztBQUFBO0FBQUE7QUFBQSxVQUFnSDtBQUFBO0FBQUE7QUFBQSxPQUF1Qiw2Q0FBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQWtNO0FBQUEsR0FBNEI7QUFBQTtBQUFBLElBQUFILFNEdmdCcHJDO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXdULGNBQUFDO0FBQUFBLFFBQUEsSUF1ZndlO0FBQUEsSUFBamhCO0FBQUE7QUFBQTtBQUFBLHVCQUFBQztBQUFBQTtBQUFBQSxnQkFBQSxJQUErRDtBQUFBLGdCQUFBdlQsTUFBaEI7QUFBQSxlQUEyRDtBQUFBO0FBQUEscUJBQTJEO0FBQUEsaUJBQUFxTCxLQUFoQjtBQUFBLGdCQUFnRDtBQUFBLHFCQUFBQSxPQUFhO0FBQUE7QUFBQTtBQUFBLHNCQUEyQztBQUFBLGtCQUFBckwsUUFBaEI7QUFBQSxpQkFBb0Q7QUFBQTtBQUFBLHVCQUFxRTtBQUFBLHVCQUFUO0FBQUEsbUJBQUFBLFFBQWhCO0FBQUEsa0JBQW9GO0FBQUE7QUFBQSx3QkFBNkQ7QUFBQSx3QkFBYjtBQUFBLG9CQUFBcUwsT0FBaEI7QUFBQTtBQUFBLHVCQUFBQSxPQUFoQjtBQUFBO0FBQUE7QUFBQSxzQkFBQUEsT0FBaEk7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQUEsT0FBdkw7QUFBQSxtREFBcVo7QUFBQTtBQUFBLGlCQUF1QjtBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFtSSxXRDNnQi9pQjtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsZUFBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQTJmUjtBQUFBLEtBQUExVCxNQUFoQjtBQUFBLElBQWlFO0FBQUE7QUFBQSxVQUFnRDtBQUFBLE1BQUFxTCxLQUFoQjtBQUFBO0FBQUEsU0FBQUEsS0FBaEI7QUFBQSxJQUFnRixnQ0FBbUI7QUFBQTtBQUFBLFNBQXFDO0FBQUEsS0FBQXJMLFFBQWhCO0FBQUEsSUFBZ0UscUNBQXNCO0FBQUE7QUFBQSxTQUFxQztBQUFBLEtBQUFxTCxPQUFoQjtBQUFBLElBQThELGtDQUFtQjtBQUFBLFlBQXlCO0FBQUEsSUFBb0IsdUNBQXVCO0FBQUE7QUFBQTtBQUFBLElBQUF4TCxTRC9nQmxlO0FBQUEsSUFBQUEsU0FBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQThULGFBQUFuUixNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQSxJQStmakI7QUFBQSxLQUFBNFUsWUFBYjtBQUFBLEtBQUFDLFdBQWlEO0FBQUEsS0FBQXRTLE9BQTBDO0FBQUEsU0FBaUw7QUFBQSxTQUFUO0FBQUEsS0FBQXZCLE1BQWhCO0FBQUEsSUFBNEU7QUFBQTtBQUFBLFVBQXFEO0FBQUEsVUFBTDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLFFBQUF1TyxTQUF4TSxTQUFBdUYsUUFBZ0M7QUFBQSxJQUFxRDtBQUFBLGFBQTBmO0FBQUEsS0FBcFQ7QUFBQTtBQUFBLGdCQUFBbkU7QUFBQUE7QUFBQUEsU0FBQSxJQUEySDtBQUFBLGFBQVQ7QUFBQSxhQUFqQjtBQUFBLFFBQVY7QUFBQTtBQUFBLGNBQWlHO0FBQUEsY0FBYjtBQUFBO0FBQUEsaUJBQXVDO0FBQUEsUUFBbko7QUFBQSxnQkFBNk07QUFBQSxRQUFuQjtBQUFBLFFBQW1EO0FBQUEsT0FBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBMmtCO0FBQUEsVUFBaEI7QUFBQSxVQUFsQztBQUFBLFVBQVo7QUFBQSxLQUExZTtBQUFBO0FBQUEsZ0JBQUFLLEtBQUErRDtBQUFBQTtBQUFBQSxTQUFBLElBQWdKO0FBQUEsYUFBakI7QUFBQSxhQUFUO0FBQUEsYUFBakI7QUFBQSxRQUFWO0FBQUE7QUFBQSxjQUE0SjtBQUFBLGNBQWpCO0FBQUEsY0FBYjtBQUFBO0FBQUE7QUFBQSxjQUFpRztBQUFBLGNBQWhCO0FBQUEsUUFBdk87QUFBQTtBQUFBLGFBQThXO0FBQUEsYUFBbkI7QUFBQSxhQUFoQjtBQUFBLFFBQW5CO0FBQUEsUUFBb0c7QUFBQSxPQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUE4SjtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLFNBQUFDLFlBQThEO0FBQUE7QUFBQTtBQUFBLFVBQTBCO0FBQUEsTUFBQUEsWUFBTjtBQUFBO0FBQUEsS0FBQUMsVUFBbUU7QUFBQSxTQUF3RjtBQUFBLElBQTFCO0FBQUE7QUFBQSxTQUErRztBQUFBLFNBQTNCO0FBQUEsSUFBWDtBQUFBO0FBQUEsU0FBNko7QUFBQSxLQUFBQztBQUFBQSxPQUExRDtBQUFBO0FBQUEseUJBQUFDLEdBQWdDLE9BQXVCLFdBQXZCLGtCQUF3QjtBQUFBLElBQTJCLG1DQUFzQztBQUFBO0FBQUE7QUFBQSxTQS9meHpEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFVBQUE1UixNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQXFWLGNBbWdCNUI7QUFBQSxLQUFBclQsYUFBbUM7QUFBQSxTQUEyRDtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLFNBQUFPLE9BQW9FO0FBQUE7QUFBQTtBQUFBLFVBQWdDO0FBQUEsTUFBQUEsT0FBTjtBQUFBO0FBQUEsU0FBdXBCO0FBQUEsS0FBQStTO0FBQUFBLE9BQXBrQjtBQUFBO0FBQUE7QUFBQSxtQkFBQTFDO0FBQUFBO0FBQUFBLFlBQUEsSUFBbUQ7QUFBQSxnQkFBakI7QUFBQSxXQUFWLCtCQUFvRSxpQ0FBc2U7QUFBQTtBQUFBLGdCQUFwYTtBQUFBLFlBQUE1UixNQUFoQjtBQUFBLFdBQTJEO0FBQUE7QUFBQSxpQkFBNEQ7QUFBQSxhQUFBQSxRQUFoQjtBQUFBLFlBQW9EO0FBQUE7QUFBQSxrQkFBcUU7QUFBQSxrQkFBVDtBQUFBLGNBQUFBLFFBQWhCO0FBQUEsYUFBcUY7QUFBQTtBQUFBLG1CQUE4RDtBQUFBLG1CQUFkO0FBQUEsbUJBQWhCO0FBQUE7QUFBQSxzQkFBaEI7QUFBQTtBQUFBO0FBQUEscUJBQWpJO0FBQUE7QUFBQTtBQUFBLG9CQUFoRztBQUFBLFdBQWxHLGlDQUF3YztBQUFBLG1CQUFwQjtBQUFBLFdBQWEsaUNBQVU7QUFBQTtBQUFBO0FBQUEsSUFBZ0Msc0RBQXlDO0FBQUE7QUFBQTtBQUFBLElBQUF1VSxtQkR2aEJwNUI7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBNVUsU0FBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQTZVLFdBQUFsUyxNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQTJWLFdBdWdCL0I7QUFBQSxLQUFBQyxhQUFtQztBQUFBLEtBQUFyVCxPQUEwQztBQUFBLFNBQStDO0FBQUEsS0FBQXNULFlBQWQ7QUFBQSxLQUFBbEMsU0FBeUU7QUFBQSxLQUFBcEUsU0FBaUQ7QUFBQSxLQUFBdUcsZUFBdUM7QUFBQSxLQUFBQyxjQUFtRDtBQUFBLEtBQUFDLFdBQWdEO0FBQUEsS0FBQXRDO0FBQUFBLE9BQThFO0FBQUE7QUFBQSxLQUFBdUMsVUFBOEY7QUFBQSxTQUF3SDtBQUFBLEtBQUFqVixNQUFYO0FBQUEsSUFBaUQ7QUFBQSxhQUFnRTtBQUFBLEtBQVY7QUFBQTtBQUFBO0FBQUEsU0FBaUw7QUFBQSxTQUFYO0FBQUEsSUFBdEI7QUFBQTtBQUFBLFVBQWlIO0FBQUEsVUFBakI7QUFBQSxLQUFWO0FBQUE7QUFBQSxXQUF5TjtBQUFBLE9BQUE0QjtBQUFBQSxTQUFxQjtBQUFBLFVBQWhLO0FBQUE7QUFBQSxxQkFBQXVTO0FBQUFBO0FBQUFBLGNBQUEsSUFBbUQ7QUFBQSxrQkFBakI7QUFBQSxhQUFWO0FBQUEsdUJBQW9FO0FBQUEsMkJBQStCLG9DQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBdlM7QUFBQUEsU0FBK0QsWUFBbEI7QUFBQTtBQUFBLFVBQTBEO0FBQUEsTUFBQXNUO0FBQUFBLFFBQVY7QUFBQSxXQUFtRTtBQUFBLGVBQTZEO0FBQUEsVUFBcUU7QUFBQSxLQUE1QjtBQUFBLGFBQW9GO0FBQUEsS0FBZDtBQUFBO0FBQUEsWUFBMEg7QUFBQSxJQUFWO0FBQUEsYUFBMEY7QUFBQSxLQUE3QjtBQUFBO0FBQUE7QUFBQSxTQUF3STtBQUFBLFNBQWQ7QUFBQSxJQUFmO0FBQUEsSUFBaUU7QUFBQSxHQUFVO0FBQUE7QUFBQSxTQXZnQi96RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGNBQUEzUyxNQUFBNFMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQTJnQm5CO0FBQUEsS0FBQUMsTUFBaEI7QUFBQSxLQUFBbEksU0FBZ0Q7QUFBQSxTQUErbEI7QUFBQSxTQUFaO0FBQUEsSUFBamlCO0FBQUE7QUFBQSxlQUFBb0I7QUFBQUE7QUFBQUEsUUFBQSxJQUFnRjtBQUFBLFlBQVQ7QUFBQSxRQUFBeE8sTUFBaEI7QUFBQSxPQUE2RTtBQUFBO0FBQUEsYUFBMEU7QUFBQSxhQUFkO0FBQUEsU0FBQUEsUUFBaEI7QUFBQSxRQUFtRTtBQUFBO0FBQUEsY0FBZ0Q7QUFBQSxjQUFoQjtBQUFBO0FBQUEsaUJBQWhCO0FBQUE7QUFBQTtBQUFBLGdCQUEvRztBQUFBLE9BQXBIO0FBQUE7QUFBQSxhQUE2VTtBQUFBLFNBQUF5TyxNQUFaO0FBQUEsYUFBK0Y7QUFBQSxhQUFqQjtBQUFBLGFBQVYsNkJBQXdFO0FBQUEsUUFBTjtBQUFBO0FBQUEsT0FBeEo7QUFBQSxNQUFnTjtBQUFBO0FBQUEsSUFBZ0Y7QUFBQSxHQUFVO0FBQUE7QUFBQSxTQTNnQnhyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUE4RyxrQkFBQWxCO0FBQUFBO0FBQUFBLEtBQUFVLGNBK2dCVTtBQUFBLFNBQTRvRDtBQUFBLEtBQUF4RyxTQUFyc0Q7QUFBQSxLQUFBdUcsZUFBZ0Y7QUFBQSxLQUFBVSxTQUF5QztBQUFBLElBQXNEO0FBQUE7QUFBQSxlQUFBNUQ7QUFBQUE7QUFBQUEsUUFBQSxJQUF1RTtBQUFBLFFBQUE1UixNQUFoQjtBQUFBLE9BQTJEO0FBQUE7QUFBQSxhQUE0RDtBQUFBLFNBQUFBLFFBQWhCO0FBQUEsUUFBb0Q7QUFBQTtBQUFBLGNBQXFFO0FBQUEsY0FBVDtBQUFBLFVBQUFBLFFBQWhCO0FBQUEsU0FBdUU7QUFBQTtBQUFBLGVBQXFFO0FBQUEsZUFBVDtBQUFBLFdBQUFBLFFBQWhCO0FBQUEsVUFBcUY7QUFBQTtBQUFBLGdCQUE4RDtBQUFBLGdCQUFkO0FBQUEsZ0JBQWhCO0FBQUE7QUFBQSxtQkFBaEI7QUFBQTtBQUFBO0FBQUEsa0JBQWpJO0FBQUE7QUFBQTtBQUFBLGlCQUFuSDtBQUFBO0FBQUE7QUFBQSxnQkFBaEc7QUFBQSxPQUFsRztBQUFBO0FBQUEsYUFBb2pCO0FBQUEsU0FBQXNCLE9BQWI7QUFBQSxTQUFBbVUsUUFBMkM7QUFBQSxhQUEyRTtBQUFBLGFBQWpCO0FBQUEsU0FBQUM7QUFBQUEsV0FBViw2QkFBd0U7QUFBQSxhQUErRDtBQUFBLFFBQXRCO0FBQUEsU0FBdUY7QUFBQSxTQUFtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBMkY7QUFBQSxhQUFqQjtBQUFBLFFBQVY7QUFBQTtBQUFBLFVBQUFwVSxTQUFnRjtBQUFBLGNBQW1DO0FBQUEsU0FBVjtBQUFBLFVBQXlEO0FBQUE7QUFBQSxrQkFBZ0Q7QUFBQSxVQUFWO0FBQUEsV0FBMEQ7QUFBQTtBQUFBLG1CQUFzRDtBQUFBLFdBQVY7QUFBQSxZQUE4RDtBQUFBLHFCQUE0QztBQUFBLFlBQTRDO0FBQUEsYUFBb0M7QUFBQTtBQUFBLGFBQStDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUEvNkI7QUFBQSxNQUErOUI7QUFBQTtBQUFBLElBQXFDO0FBQUEsR0FBOEM7QUFBQTtBQUFBLFNBL2dCdnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBcVUsYUFBQW5ULE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBMlYsV0FtaEIvQjtBQUFBLEtBQUFDLGFBQW1DO0FBQUEsS0FBQTVULGFBQWdEO0FBQUEsU0FBc0Y7QUFBQSxTQUFqQjtBQUFBLElBQVY7QUFBQSxTQUFBTyxPQUFvRTtBQUFBO0FBQUE7QUFBQSxVQUFnQztBQUFBLE1BQUFBLE9BQU47QUFBQTtBQUFBLFNBQXlGO0FBQUEsS0FBQXNULFlBQWQ7QUFBQSxLQUFBbEMsU0FBeUU7QUFBQSxLQUFBcEUsU0FBaUQ7QUFBQSxLQUFBdUcsZUFBdUM7QUFBQSxLQUFBYztBQUFBQSxPQUErQztBQUFBLFNBQWtHO0FBQUEsSUFBVjtBQUFBLGFBQTRGO0FBQUEsS0FBL0I7QUFBQTtBQUFBO0FBQUEsU0FBMEk7QUFBQSxTQUFkO0FBQUEsSUFBZjtBQUFBLElBQW1FO0FBQUEsR0FBVTtBQUFBLFlBbmhCdnpCO0FBQUEsWUFBQUMscUJBQUE5VCxNQUFBWjtBQUFBQSxRQUFBQSxZQXVoQi9DO0FBQUE7QUFBQTtBQUFBLFVBQWlEO0FBQUEsTUFBQW5CLE1BQVg7QUFBQSxLQUFnRDtBQUFBO0FBQUEsV0FBNkQ7QUFBQSxPQUFBQSxRQUFqQjtBQUFBLE1BQTZEO0FBQUE7QUFBQSxZQUEyQztBQUFBLFlBQVg7QUFBQTtBQUFBLGVBQWhCO0FBQUE7QUFBQTtBQUFBLGNBQXpHO0FBQUEsS0FBbEcsaUNBQXdiO0FBQUE7QUFBQSxVQUF4RztBQUFBLFVBQXZCO0FBQUEsVUFBZDtBQUFBLEtBQXJCO0FBQUE7QUFBQSxVQUFvSTtBQUFBLE1BQUFtQixjQUFQO0FBQUEsS0FBNkI7QUFBQTtBQUFBLEdBQVk7QUFBQSxZQXZoQmpaO0FBQUEsWUFBQTJVLFNBQUF0VCxNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQXNDLE9BMmhCbkM7QUFBQSxLQUFBUyxPQUFtQztBQUFBLElBQXdDO0FBQUEsSUFBZ0UsMkJBQThCO0FBQUEsSUFBc0M7QUFBQSxJQUFtQztBQUFBLEdBQVE7QUFBQSxZQTNoQnZOO0FBQUEsWUFBQWdVLFlBQUF2VCxNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQTJWLFdBK2hCL0I7QUFBQSxLQUFBQyxhQUFtQztBQUFBLEtBQUFyVCxPQUEwQztBQUFBLEtBQUFvUixTQUE0QztBQUFBLEtBQUFwRSxTQUFrRDtBQUFBLEtBQUF5SCxhQUFxQztBQUFBLFNBQTJGO0FBQUEsS0FBQUMsTUFBL0M7QUFBQSxTQUE0SDtBQUFBLFNBQWQ7QUFBQSxJQUFmO0FBQUEsSUFBZ0U7QUFBQSxHQUFNO0FBQUE7QUFBQSxJQUFBQyxjRG5qQm5iO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLG1CQUFBOUI7QUFBQUE7QUFBQUEsS0FBQSxJQW1pQjR4QjtBQUFBLEtBQUF6VSxJQUFqRztBQUFBLFNBQXVDO0FBQUEsSUFBbkI7QUFBQSxRQUFBMk8sU0FBOXZCLFNBQUF5SCxhQUFpQztBQUFBLElBQStDO0FBQUE7QUFBQSxlQUFBalcsT0FBQTZSO0FBQUFBO0FBQUFBLFFBQUEsSUFBNEU7QUFBQSxRQUFBNVIsTUFBaEI7QUFBQSxPQUE2RDtBQUFBO0FBQUEsYUFBZ0Q7QUFBQSxhQUFoQjtBQUFBO0FBQUEsZ0JBQWhCO0FBQUEsT0FBcEc7QUFBQSxRQUFpTCwwREFBd2I7QUFBQSxlQUF4VztBQUFBLE9BQVY7QUFBQTtBQUFBLGFBQW9IO0FBQUEsYUFBakI7QUFBQSxhQUFWLDZCQUFvRTtBQUFBLFFBQU47QUFBQSxRQUEwQztBQUFBO0FBQUE7QUFBQSxZQUE0RjtBQUFBLFlBQWpCO0FBQUEsWUFBViw2QkFBb0U7QUFBQSxPQUE1RjtBQUFBLE9BQWdJO0FBQUEsTUFBUTtBQUFBO0FBQUE7QUFBQSxJQUEySTtBQUFBLEdBQStCO0FBQUE7QUFBQSxTQW5pQnoxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFvVyxVQUFBQyxVQUFBclg7QUFBQUE7QUFBQUEsS0FBQSxJQXVpQk87QUFBQSxTQUFqQjtBQUFBLFNBQVg7QUFBQSxJQUF0QiwrQkFBb0c7QUFBQSxZQUE0QjtBQUFBLElBQVYsK0JBQXNDO0FBQUE7QUFBQSxLQUFBc1gsT0FBMkI7QUFBQSxTQUFpRTtBQUFBLEtBQUF0VyxNQUFoQjtBQUFBLElBQWdFO0FBQUE7QUFBQSxVQUFnRDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQXZHO0FBQUEsS0FBaU4sT0FBeUM7QUFBQSxjQUFyRCxVQUFZLDhDQUF3aEM7QUFBQSxZQUExQjtBQUFBLElBQXFCO0FBQUE7QUFBQSxzQkFBQW9OLFFBQUE2QztBQUFBQTtBQUFBQSxlQUFBLElBQW41QjtBQUFBLGVBQUFqUSxNQUFoQjtBQUFBLGNBQThEO0FBQUE7QUFBQSxvQkFBNEQ7QUFBQSxnQkFBQUEsUUFBaEI7QUFBQSxlQUF1RDtBQUFBO0FBQUEscUJBQXFFO0FBQUEscUJBQVQ7QUFBQSxpQkFBQUEsUUFBaEI7QUFBQSxnQkFBMEU7QUFBQTtBQUFBLHNCQUF3RTtBQUFBLHNCQUFiO0FBQUEsa0JBQUFxTCxLQUFoQjtBQUFBLGlCQUFrRjtBQUFBLHNCQUFBQSxPQUFhO0FBQUE7QUFBQTtBQUFBLHVCQUE0QztBQUFBLHVCQUFiO0FBQUEsbUJBQUFBLE9BQWhCO0FBQUE7QUFBQTtBQUFBLHFCQUFBQSxPQUF6STtBQUFBO0FBQUE7QUFBQSxvQkFBQUEsT0FBdEg7QUFBQTtBQUFBO0FBQUEsbUJBQUFBLE9BQW5HO0FBQUEsY0FBckc7QUFBQSx1QkFBNDNCO0FBQUEsZUFBd0IsOENBQUs7QUFBQTtBQUFBO0FBQUEsZUFBQWtMO0FBQUFBLGlCQUEzVztBQUFBLG1CQUFZLFVBQVk7QUFBQSxtQkFBeUU7QUFBQSxtQkFBakI7QUFBQSxjQUFWO0FBQUEsZUFBd0U7QUFBQSx1RUFBNk47QUFBQSxzQkFBbEs7QUFBQSxjQUFWO0FBQUE7QUFBQSx3QkFBaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtRUFBMkg7QUFBQTtBQUFBO0FBQUEsZUFBc0M7QUFBQTtBQUFBO0FBQUEsSUFBQUMsVUQzakJoOEM7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsVUFBQWpVLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBNlUsV0EyaUIvQjtBQUFBLEtBQUF0UyxPQUE2QjtBQUFBLEtBQUFDLFFBQTZCO0FBQUEsU0FBOEo7QUFBQSxTQUFUO0FBQUEsS0FBQXhCLE1BQWhCO0FBQUEsSUFBNEU7QUFBQTtBQUFBLFVBQXFEO0FBQUEsVUFBTDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLFFBQUEwVyxRQUEzTSxTQUFBQyxZQUErQjtBQUFBLElBQXlEO0FBQUEsYUFBd2xCO0FBQUEsS0FBbFo7QUFBQTtBQUFBLGdCQUFBaEg7QUFBQUE7QUFBQUEsU0FBQSxJQUF1RjtBQUFBLGFBQVQ7QUFBQSxhQUFqQjtBQUFBLFFBQVY7QUFBQTtBQUFBLGNBQWlHO0FBQUEsVUFBQWlILFFBQWI7QUFBQTtBQUFBLGFBQUFBLFFBQXVDO0FBQUEsUUFBa0Q7QUFBQSxnQkFBMEY7QUFBQSxRQUF2QjtBQUFBLGdCQUFnRjtBQUFBLFFBQWhCO0FBQUEsUUFBeUM7QUFBQSxPQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFvc0I7QUFBQSxVQUFoQjtBQUFBLFVBQWxDO0FBQUEsVUFBWjtBQUFBLEtBQW5tQjtBQUFBO0FBQUEsZ0JBQUE1RyxLQUFBK0Q7QUFBQUE7QUFBQUEsU0FBQSxJQUE0RztBQUFBLGFBQWpCO0FBQUEsYUFBVDtBQUFBLGFBQWpCO0FBQUEsUUFBVjtBQUFBO0FBQUEsY0FBNEo7QUFBQSxjQUFqQjtBQUFBLFVBQUE2QyxRQUFiO0FBQUE7QUFBQTtBQUFBLGNBQWlHO0FBQUEsVUFBQUEsUUFBaEI7QUFBQTtBQUFBLGFBQWtIO0FBQUEsYUFBbkI7QUFBQSxTQUFBQyxXQUFoQjtBQUFBLFFBQStHO0FBQUEsUUFBbUU7QUFBQSxnQkFBMEQ7QUFBQSxRQUFvQiw2Q0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFnTjtBQUFBLEtBQUFDO0FBQUFBLE9BQTVEO0FBQUE7QUFBQSx5QkFBQTNDLEdBQWdDLE9BQXlCLFdBQXpCLG9CQUEwQjtBQUFBLFNBQTBLO0FBQUEsU0FBWjtBQUFBLElBQTVHO0FBQUE7QUFBQSxlQUFBdks7QUFBQUE7QUFBQUEsUUFBQSxJQUE2RTtBQUFBLFlBQWhCO0FBQUEsWUFBZDtBQUFBLE9BQWpCO0FBQUEsT0FBNEU7QUFBQTtBQUFBO0FBQUEsWUFBbVI7QUFBQSxJQUF0TjtBQUFBO0FBQUEsZUFBQTZFO0FBQUFBLFdBQUEsSUFBNkM7QUFBQSxPQUFWO0FBQUEsZ0JBQTZJO0FBQUEsUUFBeEc7QUFBQTtBQUFBLG1CQUFBc0k7QUFBQUE7QUFBQUEsWUFBQSxJQUErRTtBQUFBLGdCQUFqQjtBQUFBLGdCQUF4QjtBQUFBLFdBQVg7QUFBQSxXQUEyRTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQTdHO0FBQUEsTUFBbUo7QUFBQTtBQUFBO0FBQUEsU0FBZ007QUFBQSxTQUFsQjtBQUFBLFNBQXhDO0FBQUEsU0FBWjtBQUFBLElBQXJFO0FBQUEscUJBQUE1QyxHQUEyQixXQUFhLHNCQUEyQjtBQUFBLFlBQWdIO0FBQUEsSUFBZSx3Q0FBYTtBQUFBO0FBQUE7QUFBQSxJQUFBOVEsYUQvakIvd0U7QUFBQSxJQUFBMlQsYUFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQSxZQUFBQyxpQkFBQUMsVUFBQUM7QUFBQUE7QUFBQUEsS0FBQS9KLFNBK2lCaEM7QUFBQSxLQUFBcE4sTUFBNEQ7QUFBQTtBQUFBLE9BQTZCO0FBQUEsVUFBZ0M7QUFBQTtBQUFBLElBQXBGO0FBQUEsS0FBNEwsOERBQXNDO0FBQUEsWUFBL0U7QUFBQSxJQUFrQyw0Q0FBNkM7QUFBQTtBQUFBLFlBL2lCdk87QUFBQSxZQUFBb1gsY0FBQTVVLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBc1UsVUFtakJoQztBQUFBLEtBQUEvUixPQUE2QjtBQUFBLEtBQUFDLFFBQTZCO0FBQUEsU0FBMG5CO0FBQUEsSUFBamxCO0FBQUE7QUFBQSxlQUFBNlY7QUFBQUE7QUFBQUEsUUFBQVgsUUFBOEM7QUFBQSxRQUFBRyxXQUFtQztBQUFBLFFBQUF6SixTQUFnRCxXQUFZO0FBQUEsUUFBQXBOLE1BQTBFO0FBQUE7QUFBQSxVQUE2QjtBQUFBLGFBQWdDO0FBQUE7QUFBQSxRQUFBc1g7QUFBQUEsVUFBcEY7QUFBQSxhQUFnSTtBQUFBO0FBQUEsT0FBNkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBQTlVO0FBQUFBLFdBQXVEO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQWxCLE9BQUE7QUFBQSxjQUFBdVEsTUFBQTtBQUFBLGtCQUFxRztBQUFBLGtCQUF0QjtBQUFBLGtCQUFkO0FBQUEsYUFBbUMsNkNBQXVDO0FBQUE7QUFBQTtBQUFBLFdBQUg7QUFBQSxVQUFHO0FBQUE7QUFBQSxPQUFZO0FBQUEsTUFBSTtBQUFBO0FBQUEsWUFBeUssZ0NBQUEwRixXQUF4STtBQUFBLElBQWdEO0FBQUE7QUFBQSxlQUFBcEQsR0FBcUQsY0FBWixXQUFZLHNCQUE0QixTQUFLO0FBQUE7QUFBQSxJQUE4QjtBQUFBLEdBQWE7QUFBQSxZQW5qQnAyQjtBQUFBLFlBQUFxRCxpQkFBQWhWLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBMFgsUUF1akJsQztBQUFBLEtBQUFHLFdBQWlDO0FBQUEsS0FBQXpKLFNBQThDLFdBQVk7QUFBQSxLQUFBcE4sTUFBd0U7QUFBQTtBQUFBLE9BQTZCO0FBQUEsVUFBZ0M7QUFBQTtBQUFBLEtBQUFzWDtBQUFBQSxPQUFwRjtBQUFBLFVBQWdJO0FBQUE7QUFBQSxJQUE4RTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUFBOVU7QUFBQUEsUUFBd0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBbEIsT0FBQTtBQUFBLFdBQUF1USxNQUFBO0FBQUEsZUFBbUc7QUFBQSxlQUF0QjtBQUFBLGVBQWQ7QUFBQSxVQUFtQywyQ0FBdUM7QUFBQTtBQUFBO0FBQUEsUUFBSDtBQUFBLE9BQUc7QUFBQTtBQUFBLElBQWlCO0FBQUEsR0FBTztBQUFBLFlBQUE0RixlQUFBalYsTUFBQXhELEtBQUFDO0FBQUFBLFFBQUF5WSxNQUlyakIsMEJBQWlFO0FBQUEsSUFBckIsT0FBb0IsZUFBcEIsc0NBQWlEO0FBQUE7QUFBQSxZQTNqQnpEO0FBQUEsWUFBQUMscUJBQUFuVixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTJZLFNBK2pCakMsV0FBWSxVQUFZO0FBQUEsS0FBQXJXLE9BQXdDLFdBQVksVUFBWTtBQUFBLEtBQUFzVyxRQUFzRCxXQUFZLFVBQVk7QUFBQSxJQUEyRDtBQUFBLFFBQUEvUSxjQUF3RDtBQUFBLElBQTREO0FBQUEsSUFBOEcsT0FBOEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQTFFLFVBQVksc0RBQW1FO0FBQUE7QUFBQTtBQUFBLFNBL2pCcmU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQWdSLFNBQUF0VixNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQXNDLE9BbWtCbkMsV0FBWSxVQUFZO0FBQUEsS0FBQXlXLE9BQXdDO0FBQUEsU0FBZ0s7QUFBQSxLQUFBL1gsTUFBakI7QUFBQSxJQUF3RDtBQUFBO0FBQUEsVUFBcUU7QUFBQSxVQUFUO0FBQUEsTUFBQUEsUUFBaEI7QUFBQSxLQUEyRTtBQUFBO0FBQUEsV0FBOEQ7QUFBQSxXQUFkO0FBQUEsV0FBaEI7QUFBQTtBQUFBLGNBQWhCO0FBQUE7QUFBQTtBQUFBLGFBQXZIO0FBQUEsSUFBL0Y7QUFBQTtBQUFBLFVBQTZVLFdBQVksVUFBWTtBQUFBLE1BQUFnQixhQUFnRTtBQUFBLE1BQUF5TixNQUEwQztBQUFBO0FBQUEsU0FBQXpOLGFBQW5LLE1BQUF5TixNQUFBO0FBQUEsSUFBOE47QUFBQSxZQUFxSyxzQ0FBQXJCLFNBQXBJO0FBQUEsSUFBK0M7QUFBQTtBQUFBLGVBQUErRyxHQUFvRCxZQUFaLFdBQVksb0JBQTBCLFNBQUs7QUFBQTtBQUFBLElBQXNEO0FBQUEsSUFBd0I7QUFBQSxHQUFjO0FBQUEsWUFua0I5NUI7QUFBQSxZQUFBNkQsV0FBQXhWLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBc0MsT0F1a0JuQyxXQUFZLFVBQVk7QUFBQSxLQUFBbU4sTUFBd0MsV0FBWSxVQUFZO0FBQUEsS0FBQXpOLGFBQTJEO0FBQUEsSUFBd0Y7QUFBQSxZQUF3SSxzQ0FBQW9NLFNBQXBMO0FBQUEsSUFBK0Y7QUFBQTtBQUFBLGVBQUErRyxHQUFvRCxZQUFaLFdBQVksb0JBQTBCLFNBQUs7QUFBQTtBQUFBLElBQXFEO0FBQUEsSUFBd0I7QUFBQSxHQUFZO0FBQUE7QUFBQSxJQUFBOEQsa0JEM2xCeGQ7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGFBQUFuQyxLQUFBNVQsVUFBQXJEO0FBQUFBO0FBQUFBLEtBQUF1QyxPQTJrQm5DO0FBQUEsS0FBQXZCLE1BQWlEO0FBQUEsSUFBNEI7QUFBQTtBQUFBLFVBQWdEO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBbkU7QUFBQTtBQUFBLE1BQUFxWSxVQUFrTDtBQUFBLFVBQStGO0FBQUEsS0FBakQsT0FBZ0Q7QUFBQSxjQUFoRCxvREFBc3lCO0FBQUE7QUFBQTtBQUFBLFNBQTdwQjtBQUFBLEtBQUE3VyxRQUFYO0FBQUEsU0FBcVk7QUFBQSxTQUFaO0FBQUE7QUFBQSxPQUF6RTtBQUFBO0FBQUE7QUFBQSxtQkFBQWdOLEdBQUFvRCxPQUFBcEQsTUFBc0QsUUFBSSxnQ0FBYTtBQUFBO0FBQUEsU0FBekY7QUFBQSxJQUE5TjtBQUFBO0FBQUEsZUFBQTVFO0FBQUFBO0FBQUFBLFFBQUEsSUFBeUk7QUFBQSxZQUE3QjtBQUFBLFlBQWpCO0FBQUEsT0FBVjtBQUFBO0FBQUEsYUFBaUc7QUFBQSxhQUFoQjtBQUFBO0FBQUEsZ0JBQW9EO0FBQUE7QUFBQSxZQUF6SjtBQUFBLFlBQWQ7QUFBQSxPQUFqQjtBQUFBLE9BQThMO0FBQUE7QUFBQTtBQUFBLFlBQTRLO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBcUk7QUFBQSxVQUFMO0FBQUEsVUFBOUI7QUFBQSxVQUExQjtBQUFBLFVBQWQ7QUFBQSxLQUFoQjtBQUFBO0FBQUEsSUFBNEosT0FBOEIsV0FBMUMsVUFBWSxxQ0FBb0M7QUFBQTtBQUFBLFlBQUEwTyxjQUFBdlk7QUFBQUEsUUFBQUEsUUFJbGhDO0FBQUE7QUFBQTtBQUFBLE1BQUFzTCxLQUFBO0FBQUEsTUFBQUEsT0FBK0IsbUNBQTRCO0FBQUEsS0FBakYsa0NBQWtIO0FBQUEsU0FBQXRMLFVBQTBCO0FBQUEsS0FBb0I7QUFBQTtBQUFBLEdBQUU7QUFBQTtBQUFBLElBQUF3WSxpQ0RubUJ4SztBQUFBLFNDb0JpRDtBQUFBLFlBQUFDLFFBQUF6WTtBQUFBQSxRQUFBMFksUUFtbEJsQywwQkFBeUM7QUFBQSxJQUFWLGlDQUFvTSx1QkFBcUI7QUFBQSxRQUFBeE8sUUFBOUs7QUFBQSxrQkFBQXlPLE9BQUEsVUFBK0MsOEJBQStIO0FBQUEsWUFBdkY7QUFBQSxJQUF5RDtBQUFBLEdBQThCO0FBQUEsWUFBQUMsV0FBQUMsaUJBQUF4TDtBQUFBQSxRQUFBLElBSTdMO0FBQUEsSUFBOUIsT0FBOEQsY0FBekYsdUJBQTJCLDZCQUErRDtBQUFBO0FBQUEsWUF2bEIxRDtBQUFBLFlBQUF5TCxTQUFBOVk7QUFBQUEsUUFBQSxJQTJsQmhCLCtCQUFqQjtBQUFBLElBQVY7QUFBQSxjQUF3RTtBQUFBLGNBQXlCLG9CQUF3QjtBQUFBO0FBQUE7QUFBQSxJQUFBK1ksa0JEL21CL0g7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFVBQUFoWjtBQUFBQTtBQUFBQSxLQUFBaVosT0ErbEJuQztBQUFBLEtBQUFoYSxNQUFtQztBQUFBLEtBQUFDLE9BQWdDO0FBQUEsS0FBQWdFLFlBQXdDO0FBQUEsSUFBd0IsOEJBQW9DLHNDQUFzOUQ7QUFBQSxJQUF4NkQsOEJBQW9DLHNDQUFvNEQ7QUFBQSxJQUF0MUQsOEJBQXFDLHNDQUFpekQ7QUFBQSxJQUFud0QsOEJBQWlDLG1DQUFrdUQ7QUFBQSxJQUFyckQ7QUFBQSxLQUE0ekI7QUFBQSxNQUFxRCxPQUF1QixlQUF2Qix5Q0FBbzBCO0FBQUEsS0FBcnhCO0FBQUE7QUFBQSxPQUFBZ1csS0FBNEM7QUFBQSxXQUEyQztBQUFBLE1BQVY7QUFBQSxPQUF1RCxPQUFrQjtBQUFBLG9CQUFsQiwrQ0FBaXBCO0FBQUE7QUFBQSxPQUFBQyxZQUF4bEI7QUFBQSxXQUFnTjtBQUFBLFdBQVo7QUFBQSxPQUFBQyxvQkFBcEw7QUFBQSxNQUE4RDtBQUFBO0FBQUEsaUJBQUEvTjtBQUFBQSxhQUFBLElBQTJGO0FBQUEsU0FBekM7QUFBQTtBQUFBLFNBQTZEO0FBQUEsUUFBSztBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQXNGO0FBQUEsV0FBWTtBQUFBO0FBQUE7QUFBQSxNQUE3QyxPQUEwQjtBQUFBLGVBQTFCLG1EQUFpVztBQUFBO0FBQUEsS0FBaE4sZ0NBQWtLLHNDQUE4QztBQUFBLGFBQWhLO0FBQUEsS0FBVjtBQUFBLGVBQWtDO0FBQUEsZUFBK0MsK0JBQXlGO0FBQUE7QUFBQTtBQUFBLEtBQUE5SixPQUFyb0Q7QUFBQSxTQUFrRDtBQUFBLElBQVY7QUFBQSxTQUFBbU4sTUFBd0M7QUFBQTtBQUFBLGFBQTBDO0FBQUEsS0FBVjtBQUFBLFVBQUFBLE1BQXVDO0FBQUE7QUFBQSxjQUEwQztBQUFBLE1BQVY7QUFBQSxXQUFBQSxNQUFtRDtBQUFBO0FBQUEsZUFBcUM7QUFBQSxPQUFWO0FBQUEsWUFBQUEsTUFBb0Q7QUFBQTtBQUFBLGdCQUFzQztBQUFBLFFBQVY7QUFBQTtBQUFBLGNBQTBHO0FBQUEsY0FBdEI7QUFBQSxTQUFzRTtBQUFBO0FBQUEsWUFBQUEsTUFBbEc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQUF6TyxNQUEwSjtBQUFBLElBQTBCO0FBQUEsS0FBZ0M7QUFBQSxJQUEwSCxxQ0FBMDZCO0FBQUE7QUFBQSxZQS9sQjFsRTtBQUFBLFlBQUFvWixjQUFBNVcsTUFBQXhELEtBQUFDO0FBQUFBLFFBQUEsSUFtbUJSLFVBQVk7QUFBQSxJQUFuQyxPQUFnQixlQUFoQix3Q0FBMkY7QUFBQTtBQUFBO0FBQUEsSUFBQVksU0R2bkI3RztBQUFBLElBQUF3WixjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGdCQUFBQyxTQUFBcFgsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE0YSxjQXVtQjVCO0FBQUEsS0FBQXRZLE9BQTZCO0FBQUEsS0FBQXVZLE9BQTJCO0FBQUEsS0FBQXhHLFVBQXVDO0FBQUEsS0FBQXlHLFdBQXVDO0FBQUE7QUFBQSxPQUEwcEI7QUFBQTtBQUFBLE9BQTNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUF4QjtBQUFBLFNBQTNEO0FBQUEsU0FBdEI7QUFBQSxTQUExRDtBQUFBLFNBQXRCO0FBQUEsU0FBdEI7QUFBQSxTQUFoQztBQUFBLFNBQS9DO0FBQUEsU0FBdEI7QUFBQTtBQUFBLE9BQW5DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFva0I7QUFBQTtBQUFBLHlFQUFnYztBQUFBO0FBQUEsWUFBQUosY0FBQW5YLE1BQUF4RCxLQUFBQztBQUFBQSxJQUFyeUMsT0QzbkJGLGdCQzJuQkUsb0NBQXF5QztBQUFBO0FBQUEsWUFBQSthLGVBQUF4WCxNQUFBeEQsS0FBQUM7QUFBQUEsUUFBQSxJQUk5dkMsVUFBWTtBQUFBLElBQW5DLE9BQWdCLGVBQWhCLHdDQUF3RTtBQUFBO0FBQUEsWUFBQWdiLGFBQUF6WCxNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BSWpEO0FBQUEsU0FBWSxtQkFBd0I7QUFBQSxJQUEzRCxPQUFnQixlQUFoQix3Q0FBNEY7QUFBQTtBQUFBLFlBL21CN0Q7QUFBQSxZQUFBaWIsa0JBQUExWCxNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQWtiLFVBbW5CaEM7QUFBQSxLQUFBbkIsT0FBNkI7QUFBQSxTQUFnRDtBQUFBLEtBQUF6WCxPQUFOO0FBQUEsSUFBdUUsT0FBZ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFDQUFoQztBQUFBO0FBQUE7QUFBQSxrQkFBb0Q7QUFBQTtBQUFBO0FBQUEsSUFBQTZZLGNEdm9Cbk47QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQXpWLGNBQUE7QUFBQSxJQUFBMFYsa0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQ29CaUQ7QUFBQSxJQUFBQyxZQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGlCQUFBZixTQUFBWixRQUFBaGEsS0FBQUM7QUFBQUEsUUFBQStaLE9BdW5CL0M7QUFBQTtBQUFBO0FBQUEsTUFBQTFDLE9BQVk7QUFBQSxNQUFBOVQsT0FBNkI7QUFBQSxVQUFrRjtBQUFBLE1BQUE2SSxLQUFoQjtBQUFBLEtBQTREO0FBQUEsVUFBQUEsT0FBYTtBQUFBO0FBQUE7QUFBQSxZQUEwQztBQUFBLE9BQUFBLE9BQWhCO0FBQUEsTUFBNEQ7QUFBQSxXQUFBQSxPQUFhO0FBQUE7QUFBQTtBQUFBLGFBQStCO0FBQUEsUUFBQUEsT0FBaEI7QUFBQTtBQUFBLGFBQWxOO0FBQUEsS0FBdEI7QUFBQSxjQUFzVDtBQUFBLE1BQVYsK0JBQWtDLG9DQUF3M1U7QUFBQTtBQUFBO0FBQUEsU0FBbHlVO0FBQUEsV0FBWSxrQkFBdUI7QUFBQSxNQUExRCxPQUFnQixlQUFoQix3Q0FBeXpVO0FBQUE7QUFBQTtBQUFBLFVBQTVxVTtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBLE1BQXlwVSw0Q0FBOEM7QUFBQTtBQUFBLE1BQUFwSSxZQUFwblU7QUFBQSxVQUFnRTtBQUFBLEtBQVYsK0JBQTZELGtDQUFpZ1U7QUFBQSxhQUE3OFQ7QUFBQSxLQUFWLCtCQUErRCxvQ0FBdzVUO0FBQUEsYUFBbDJUO0FBQUEsS0FBViwrQkFBK0Qsb0NBQTZ5VDtBQUFBLGFBQXZ2VDtBQUFBLEtBQVYsK0JBQStELG9DQUFrc1Q7QUFBQSxhQUE1b1Q7QUFBQSxLQUFWLCtCQUE4RCxtQ0FBd2xUO0FBQUEsYUFBbmlUO0FBQUEsS0FBViwrQkFBNkQsa0NBQWcvUztBQUFBLGFBQTU3UztBQUFBLEtBQVYsK0JBQThELG1DQUF3NFM7QUFBQSxhQUFuMVM7QUFBQSxLQUFWLCtCQUErRCxtQ0FBOHhTO0FBQUEsYUFBenVTO0FBQUEsS0FBViwrQkFBaUUsc0NBQWtyUztBQUFBLGFBQTFuUztBQUFBLEtBQVYsK0JBQTZELHNDQUF1a1M7QUFBQSxhQUEvZ1M7QUFBQSxLQUFWLCtCQUFpRSxzQ0FBdzlSO0FBQUEsYUFBaDZSO0FBQUEsS0FBVjtBQUFBLE1BQWtGLE9BQTJCLGVBQTNCLGlDQUF3MVI7QUFBQSxhQUEzeFI7QUFBQSxLQUFWO0FBQUEsTUFBb0YsT0FBNkIsZUFBN0IsbUNBQWl0UjtBQUFBLGFBQWxwUjtBQUFBLEtBQVY7QUFBQSxNQUFtRixPQUE0QixlQUE1QixrQ0FBeWtSO0FBQUEsYUFBM2dSO0FBQUEsS0FBVjtBQUFBLE1BQWdGLE9BQXlCLGVBQXpCLCtCQUFxOFE7QUFBQSxhQUExNFE7QUFBQSxLQUFWO0FBQUEsTUFBeUUsOENBQTIwUTtBQUFBLGFBQTN3UTtBQUFBLEtBQVYsK0JBQTZELGtDQUF3dFE7QUFBQSxhQUFwcVE7QUFBQSxLQUFWLCtCQUFnRSxxQ0FBOG1RO0FBQUEsYUFBdmpRO0FBQUEsS0FBVjtBQUFBO0FBQUEsVUFBeUc7QUFBQSxNQUFBakQsTUFBakI7QUFBQSxLQUF3RDtBQUFBO0FBQUEsV0FBb0Q7QUFBQSxPQUFBQSxRQUFSO0FBQUEsTUFBb0M7QUFBQTtBQUFBLFlBQTRFO0FBQUEsWUFBVjtBQUFBLFFBQUFBLFFBQVg7QUFBQSxPQUFxRDtBQUFBO0FBQUEsYUFBZ0g7QUFBQSxhQUFaO0FBQUEsU0FBQUE7QUFBQUEsV0FBbEQ7QUFBQTtBQUFBO0FBQUEsdUJBQUE0YTtBQUFBQSxtQkFBQSxJQUFrQztBQUFBLGVBQWM7QUFBQTtBQUFBO0FBQUEsUUFBMEM7QUFBQTtBQUFBLGNBQXdDO0FBQUEsY0FBUjtBQUFBO0FBQUEsaUJBQWhCO0FBQUE7QUFBQTtBQUFBLGdCQUE1STtBQUFBO0FBQUE7QUFBQSxlQUE1RztBQUFBO0FBQUE7QUFBQSxjQUFoRjtBQUFBLEtBQS9GLGlDQUFnOUMscUNBQWdqTjtBQUFBO0FBQUEsTUFBQS9HLFdBQXhnUDtBQUFBLE1BQUFnSCxjQUFvQztBQUFBLFVBQWdEO0FBQUEsTUFBQXRaLE9BQU47QUFBQSxVQUE0RTtBQUFBLEtBQWpDO0FBQUEsc0JBQUFxWixHQUFvQixtQ0FBVztBQUFBLGFBQTZGO0FBQUEsS0FBOUM7QUFBQSxzQkFBQUEsR0FBb0IsdUNBQXdCO0FBQUE7QUFBQSxVQUE4SztBQUFBLE1BQUFFO0FBQUFBLFFBQS9IO0FBQUE7QUFBQTtBQUFBLG9CQUFBRjtBQUFBQTtBQUFBQSxhQUFBLElBQW1EO0FBQUEsaUJBQWpCO0FBQUEsWUFBVjtBQUFBLHNCQUEyRDtBQUFBLHNCQUE4Qiw0QkFBWTtBQUFBO0FBQUE7QUFBQSxNQUFBbEgsT0FBd0M7QUFBQSxNQUFBdEcsU0FBdUM7QUFBQSxVQUF5WjtBQUFBLFVBQW5DO0FBQUEsVUFBekI7QUFBQSxVQUFsRjtBQUFBO0FBQUEsUUFBVixpQ0FBOEM7QUFBQSxVQUExRDtBQUFBLFVBQWQ7QUFBQSxVQUF0QjtBQUFBLFVBQWpDO0FBQUE7QUFBQSxRQUFwRTtBQUFBO0FBQUE7QUFBQSxvQkFBQXdOO0FBQUFBLGdCQUFBLElBQXdDO0FBQUEsWUFBYixnREFBVztBQUFBLFdBQTRCO0FBQUE7QUFBQSxVQUFoRjtBQUFBLFVBQTlCO0FBQUEsTUFBQTVCLFNBQXhCO0FBQUEsS0FBNmE7QUFBQTtBQUFBLFlBQTZFO0FBQUEsSUFBVjtBQUFBLEtBQWdFO0FBQUE7QUFBQSw0RUFBazhNO0FBQUEsWUFBMzRNO0FBQUEsSUFBVjtBQUFBO0FBQUEsV0FBK0Y7QUFBQSxXQUFWLGtDQUEyQztBQUFBLEtBQWYsb0NBQW95TTtBQUFBO0FBQUEsYUFBbnVNO0FBQUEsSUFBVjtBQUFBLEtBQWlHLE9BQXdCO0FBQUEsY0FBcEMsVUFBWSxpREFBNG9NO0FBQUEsYUFBbGxNO0FBQUEsSUFBVjtBQUFBLEtBQTZELDRDQUEraE07QUFBQSxhQUFqK0w7QUFBQSxJQUFWO0FBQUEsS0FBOEQsMkNBQTY2TDtBQUFBLGFBQWgzTDtBQUFBLElBQVY7QUFBQSxLQUE2RCwyQ0FBNnpMO0FBQUEsYUFBaHdMO0FBQUEsSUFBVixnQ0FBK0QseUNBQTJzTDtBQUFBLGFBQWhwTDtBQUFBLElBQVYsZ0NBQStELHFDQUEybEw7QUFBQSxhQUFwaUw7QUFBQSxJQUFWLGdDQUFpRSxzQ0FBNitLO0FBQUEsYUFBcjdLO0FBQUEsSUFBVixnQ0FBZ0UscUNBQSszSztBQUFBLGFBQXgwSztBQUFBLElBQVYsZ0NBQWdFLHFDQUFreEs7QUFBQSxhQUEzdEs7QUFBQSxJQUFWLGdDQUFnRSxxQ0FBcXFLO0FBQUEsYUFBOW1LO0FBQUEsSUFBVixnQ0FBZ0UscUNBQXdqSztBQUFBLGFBQWpnSztBQUFBLElBQVYsZ0NBQWtFLHVDQUF5OEo7QUFBQSxhQUFoNUo7QUFBQSxJQUFWLGdDQUErRCxvQ0FBMjFKO0FBQUEsYUFBcnlKO0FBQUEsSUFBVixnQ0FBbUUseUNBQTR1SjtBQUFBLGFBQWpySjtBQUFBLElBQVYsZ0NBQWtFLHVDQUF5bko7QUFBQSxhQUFoa0o7QUFBQSxJQUFWLGdDQUErRCxvQ0FBMmdKO0FBQUEsYUFBcjlJO0FBQUEsSUFBVixnQ0FBZ0Usb0NBQSs1STtBQUFBLGFBQXoySTtBQUFBLElBQVYsZ0NBQWtFLHVDQUFpekk7QUFBQSxhQUF4dkk7QUFBQSxJQUFWO0FBQUEsS0FBdUUsNENBQTJySTtBQUFBLGFBQTduSTtBQUFBLElBQVY7QUFBQSxLQUF1RSw0Q0FBZ2tJO0FBQUEsYUFBbGdJO0FBQUEsSUFBVixnQ0FBMkUsc0NBQWk4SDtBQUFBLGFBQXo0SDtBQUFBLElBQVY7QUFBQSxLQUF5RSw4Q0FBMDBIO0FBQUEsYUFBMXdIO0FBQUEsSUFBVixnQ0FBZ0UscUNBQW90SDtBQUFBLGFBQTdwSDtBQUFBLElBQVYsZ0NBQW9FLHlDQUFtbUg7QUFBQSxhQUF4aUg7QUFBQSxJQUFWO0FBQUEsS0FBdUUsNENBQTIrRztBQUFBLGFBQTc2RztBQUFBLElBQVYsZ0NBQThELG1DQUF5M0c7QUFBQSxhQUFwMEc7QUFBQSxJQUFWO0FBQUEsS0FBc0UsMkNBQXd3RztBQUFBLGFBQTNzRztBQUFBLElBQVYsZ0NBQWlFLHNDQUFvcEc7QUFBQSxhQUE1bEc7QUFBQSxJQUFWLGdDQUFpRSxzQ0FBcWlHO0FBQUEsYUFBNytGO0FBQUEsSUFBVixnQ0FBK0Qsb0NBQXc3RjtBQUFBLGFBQWw0RjtBQUFBLElBQVYsZ0NBQWlFLHFDQUEyMEY7QUFBQSxhQUFweEY7QUFBQSxJQUFWLGdDQUFtRSx3Q0FBMnRGO0FBQUEsYUFBanFGO0FBQUEsSUFBVixnQ0FBZ0UscUNBQTJtRjtBQUFBLGFBQXBqRjtBQUFBLElBQVY7QUFBQSxjQUFtSCxVQUFZO0FBQUEsS0FBbkMsT0FBZ0IsZUFBaEIseUNBQWsrRTtBQUFBO0FBQUEsYUFBcDNFO0FBQUEsSUFBVixnQ0FBa0Usc0NBQTR6RTtBQUFBLGFBQXB3RTtBQUFBLElBQVYsZ0NBQXlGLHNDQUFxckU7QUFBQSxhQUE3bkU7QUFBQSxJQUFWLGdDQUFrRSx1Q0FBcWtFO0FBQUEsYUFBNWdFO0FBQUEsSUFBVjtBQUFBLEtBQXlFLDhDQUE2OEQ7QUFBQSxhQUE3NEQ7QUFBQSxJQUFWLGdDQUFpRSxzQ0FBczFEO0FBQUEsYUFBOXhEO0FBQUEsSUFBVjtBQUFBLEtBQTZGLE9BQXNDLGVBQXRDLDRDQUEyc0Q7QUFBQSxhQUFub0Q7QUFBQSxJQUFWO0FBQUEsS0FBMEYsT0FBbUMsZUFBbkMseUNBQW1qRDtBQUFBLGFBQTkrQztBQUFBLElBQVY7QUFBQSxLQUFvRixPQUE2QixlQUE3QixtQ0FBbzZDO0FBQUEsYUFBcjJDO0FBQUEsSUFBVjtBQUFBLEtBQXVFLDRDQUF3eUM7QUFBQSxhQUExdUM7QUFBQSxJQUFWO0FBQUEsS0FBdUYsT0FBZ0MsZUFBaEMsc0NBQTZwQztBQUFBLGFBQTNsQztBQUFBLElBQVYsZ0NBQXdFLHNDQUE2aEM7QUFBQTtBQUFBLEtBQUFoWjtBQUFBQSxPQUF4OUI7QUFBQTtBQUFBLElBQThEO0FBQUE7QUFBQSxXQUFzRDtBQUFBLFVBQXlCLFFBQXBDO0FBQUE7QUFBQSxhQUEzQjtBQUFBLElBQXJHO0FBQUEsS0FBeU0sT0FBMEQ7QUFBQSxjQUFyRTtBQUFBLGdCQUFXO0FBQUE7QUFBQTtBQUFBLG1CQUFzeUI7QUFBQSxRQUFBQSxRQUE3ckI7QUFBQSxJQUFpQztBQUFBO0FBQUEsV0FBMEM7QUFBQSxVQUFWO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQXhFO0FBQUEsU0FBQWlXLE1BQThJO0FBQUEsS0FBMEMsT0FBbUMsZUFBbkMsd0NBQTRoQjtBQUFBO0FBQUEsSUFBbGI7QUFBQTtBQUFBLFdBQWtFO0FBQUEsTUFBQWpXLFFBQVg7QUFBQTtBQUFBLFFBQWlEO0FBQUEsV0FBZ0M7QUFBQTtBQUFBO0FBQUEsYUFBeEg7QUFBQSxJQUE5RDtBQUFBLGNBQXNTO0FBQUEsZUFBM0M7QUFBQSxjQUErRCxxQ0FBc0s7QUFBQTtBQUFBLFlBQUEyYSxlQUFBM0IsTUFBQWhhLEtBQUFDO0FBQUFBLElBQXB3VixPRDNvQkYsZ0JDMm9CRSxxQ0FBb3dWO0FBQUE7QUFBQTtBQUFBLElBQUE4YixjRDNvQnR3VjtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFNBQUExWSxNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQSxJQTJuQlQ7QUFBQSxLQUFBbWMsUUFBekI7QUFBQSxLQUFBdmIsSUFBOEQ7QUFBQSxJQUFvQjtBQUFBLElBQTJDO0FBQUEsSUFBMEM7QUFBQSxJQUFrQztBQUFBLElBQThCO0FBQUEsR0FBVztBQUFBO0FBQUEsSUFBQXdiLGdCRC9vQmpRO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsZUFBQTdZLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBLElBK25CVDtBQUFBLEtBQUFtYyxRQUF6QjtBQUFBLEtBQUF2YixJQUE4RDtBQUFBLElBQW9CO0FBQUEsSUFBNkM7QUFBQSxJQUEyQztBQUFBLElBQTBDO0FBQUEsSUFBa0M7QUFBQSxJQUE4QjtBQUFBLEdBQVc7QUFBQSxZQS9uQjdQO0FBQUEsWUFBQTBiLFVBQUE1YztBQUFBQSxRQUFBc0IsTUFtb0JuQztBQUFBLElBQXVCO0FBQUEsY0FBZ0M7QUFBQSxpQkFBZ0M7QUFBQTtBQUFBLFlBbm9CcEQ7QUFBQSxZQUFBdWIsYUFBQTdjO0FBQUFBLFFBQUFrQixJQXVvQnJDO0FBQUEsSUFBb0I7QUFBQSxJQUEyQztBQUFBLElBQXlDO0FBQUEsSUFBNEI7QUFBQSxHQUFVO0FBQUE7QUFBQSxTQXZvQnpHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBNGIsTUFBQTVKO0FBQUFBLFFBQUEsSUEyb0JWLGtCQUFYO0FBQUEsSUFBdEIsK0JBQTREO0FBQUEsWUFBcUI7QUFBQSxJQUFWLCtCQUErQyx1Q0FBMGE7QUFBQTtBQUFBLFNBQS9XO0FBQUEsS0FBQXhFLFNBQVY7QUFBQSxLQUFBcE4sTUFBNkY7QUFBQSxTQUE0QywrQkFBZ0M7QUFBQSxLQUFBeVksUUFBbkcsNkJBQWdJO0FBQUEsSUFBb0Q7QUFBQSxJQUFzRTtBQUFBLElBQThDO0FBQUEsR0FBVztBQUFBO0FBQUEsU0Ezb0JyZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFnRCxzQkFBQXhjO0FBQUFBLFFBQUEsSUErb0JqQztBQUFBLElBQVYsK0JBQWtDO0FBQUE7QUFBQSxLQUFBOEksUUFBNEI7QUFBQSxLQUFBMlQsY0FBb0Msc0JBQXVCO0FBQUEsU0FBbUQ7QUFBQSxTQUFqQjtBQUFBLElBQVYsaUNBQXlYO0FBQUE7QUFBQSxTQUExRTtBQUFBLFNBQXhJO0FBQUE7QUFBQSxPQUExQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUE4QixnREFBNE87QUFBQTtBQUFBO0FBQUEsSUFBQUMsZURucUI5aEI7QUFBQSxJQUFBQywwQkNvQmlEO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyx5QkFBQXphO0FBQUFBLFFBQUEwYSxPQW1wQm5DO0FBQUEsSUFBc0Y7QUFBQTtBQUFBLFVBQXNEO0FBQUEsVUFBbUIsUUFBOUI7QUFBQTtBQUFBLGFBQTNCO0FBQUEsSUFBdEQsaUNBQXFpQjtBQUFBO0FBQUEsU0FBOVo7QUFBQSxJQUFWO0FBQUEsYUFBNFM7QUFBQSxLQUFoTztBQUFBO0FBQUEsZ0JBQUFDO0FBQUFBO0FBQUFBLFNBQUE7QUFBQSxXQUFtRTtBQUFBO0FBQUEsYUFBWDtBQUFBLFFBQXRCO0FBQUEsU0FBa0k7QUFBQTtBQUFBLFFBQW5DO0FBQUEsT0FBNkY7QUFBQTtBQUFBLEtBQW1CO0FBQUE7QUFBQSxZQUE2RTtBQUFBLElBQWhFLG9DQUFBQSxLQUE2QixtQkFBaUM7QUFBQSxJQUFtQjtBQUFBLEdBQWtCO0FBQUEsWUFucEJ2akI7QUFBQSxZQUFBQyxjQUFBcFA7QUFBQUEsSUF1cEJsQjtBQUFBO0FBQUEsSUFBMkQ7QUFBQSxHQUFJO0FBQUE7QUFBQSxTQXZwQjdDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXFQLFlBQUFyUDtBQUFBQSxJQTJwQkE7QUFBQTtBQUFBO0FBQUEsU0FBa0Y7QUFBQSxJQUFWLGlDQUF5UjtBQUFBLFFBQUFzUCxRQUE5TTtBQUFBLElBQTBDO0FBQUEsWUFBb0k7QUFBQSxJQUFoRSxvQ0FBQUgsS0FBNkIsbUJBQWlDO0FBQUEsSUFBb0I7QUFBQSxHQUFtQjtBQUFBLE9BQUFJLG9CQTNwQnRXO0FBQUEsWUFBQUMsYUFBQTlaLE1BQUF4RCxLQUFBQztBQUFBQSxRQUFBc0MsT0ErcEJuQyxpQ0FBQWdiLE9BQWtCO0FBQUEsSUFBa0M7QUFBQSxJQUFzRyxPQUFnRDtBQUFBLHdCQUE1RCxVQUFZLHdDQUFtRDtBQUFBO0FBQUEsWUEvcEIxSztBQUFBLFlBQUFDLHFCQUFBaGEsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE0VSxXQW1xQi9CO0FBQUEsS0FBQXRTLE9BQTZCO0FBQUEsS0FBQThKLEtBQTJDO0FBQUEsS0FBQUE7QUFBQUEsT0FBMEIsbUNBQTRCO0FBQUEsSUFBNUUsa0NBQXdHLHFDQUE0TjtBQUFBO0FBQUEsS0FBQW9SLGFBQWpLO0FBQUEsU0FBbUUsVUFBWTtBQUFBLElBQXpDLE9BQXNCLGVBQXRCLDhDQUEySDtBQUFBO0FBQUEsWUFucUJ2VjtBQUFBLFlBQUFDLG1CQUFBdkMsU0FBQTNXLE1BQUFtWjtBQUFBQSxRQUFBM2MsTUF1cUJwQjtBQUFBLElBQStCO0FBQUE7QUFBQSxVQUFnRDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQXRFO0FBQUEsS0FBMkosOENBQWtCO0FBQUEsUUFBQUEsUUFBa0M7QUFBQSxJQUErQjtBQUFBO0FBQUEsVUFBa0U7QUFBQSxVQUFsQztBQUFBO0FBQUEsYUFBaEI7QUFBQSxJQUF0RTtBQUFBLFNBQUFBLFFBQW9MO0FBQUEsS0FBNEI7QUFBQTtBQUFBLFdBQXlFO0FBQUEsV0FBekI7QUFBQSxXQUFoQjtBQUFBO0FBQUEsY0FBaEI7QUFBQSxLQUFuRTtBQUFBLG1CQUFnSztBQUFBLGdCQUErdUI7QUFBQTtBQUFBLFlBQTlyQjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFKLElBQXFEO0FBQUEsVUFBMEQ7QUFBQSxLQUFsQjtBQUFBLEtBQW9EO0FBQUE7QUFBQTtBQUFBLEtBQUFJLFFBQW9DO0FBQUE7QUFBQSxPQUE2QjtBQUFBLFVBQWdDO0FBQUE7QUFBQSxJQUFwRjtBQUFBO0FBQUEsTUFBQUEsUUFBMEk7QUFBQTtBQUFBLFFBQTBCO0FBQUEsV0FBZ0M7QUFBQTtBQUFBLEtBQWpGO0FBQUEsbUJBQStHO0FBQUEsZ0JBQXdVO0FBQUE7QUFBQTtBQUFBLEtBQUFBLFFBQTFRO0FBQUE7QUFBQSxPQUE2QjtBQUFBLFVBQWdDO0FBQUE7QUFBQSxJQUFwRjtBQUFBLEtBQTJHLCtEQUFzTDtBQUFBLFlBQS9FO0FBQUEsSUFBVjtBQUFBLGtCQUF1RDtBQUFBLGVBQWtDO0FBQUE7QUFBQTtBQUFBLElBQUFILFNEM3JCMXVDO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBK2Msd0JBQUF6QyxTQUFBMEMsSUFBQXJaLE1BQUFzWixJQUFBSDtBQUFBQTtBQUFBQSxLQUFBSSxPQTJxQm5DO0FBQUEsS0FBQUMsT0FBOEI7QUFBQSxLQUFBaGQsTUFBMkM7QUFBQTtBQUFBLE9BQXNDO0FBQUEsVUFBZ0M7QUFBQTtBQUFBLElBQTdGO0FBQUEsS0FBc0ksOENBQWtCO0FBQUEsWUFBcUI7QUFBQSxJQUFWLCtCQUE2QztBQUFBO0FBQUEsU0FBb0Q7QUFBQSxLQUFBQSxRQUFoQjtBQUFBLElBQXFFO0FBQUE7QUFBQSxVQUFzRTtBQUFBLFVBQWhCO0FBQUEsTUFBQUEsUUFBVjtBQUFBLEtBQTRFO0FBQUE7QUFBQSxXQUE2RTtBQUFBLFdBQWhCO0FBQUEsV0FBYjtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUF4SDtBQUFBLElBQTVHO0FBQUE7QUFBQSxNQUFBaWQsVUFBa1g7QUFBQSxVQUFtRTtBQUFBLEtBQXRCO0FBQUEsS0FBOEU7QUFBQTtBQUFBLFVBQWlIO0FBQUEsVUFBdEI7QUFBQSxVQUE1QjtBQUFBLE1BQUFDLGFBQWhCO0FBQUEsVUFBMEg7QUFBQSxLQUFWLCtCQUE0RDtBQUFBO0FBQUE7QUFBQSxRQUE2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBOUI7QUFBQTtBQUFBO0FBQUEsUUFBME07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQTlCO0FBQUEsVUFBWjtBQUFBLE1BQUFDO0FBQUFBLFFBQW5FO0FBQUE7QUFBQTtBQUFBLG9CQUFBemYsR0FBb0IsK0NBQTZDO0FBQUE7QUFBQSxVQUFtRztBQUFBLEtBQVYsK0JBQTZEO0FBQUE7QUFBQSxVQUEyRztBQUFBLE1BQUEwZjtBQUFBQSxRQUEvRTtBQUFBO0FBQUEsVUFBbUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUE0RztBQUFBLEtBQVYsK0JBQXdDO0FBQUE7QUFBQSxNQUFBQyxTQUE2QjtBQUFBLFVBQXlYO0FBQUEsS0FBL1U7QUFBQTtBQUFBLGdCQUFBekM7QUFBQUE7QUFBQUEsU0FBQSxJQUErUztBQUFBLGFBQVo7QUFBQSxRQUF0UTtBQUFBO0FBQUEsbUJBQUF4RjtBQUFBQTtBQUFBQSxZQUFBa0ksV0FBOEM7QUFBQSxnQkFBMkM7QUFBQSxXQUFWO0FBQUEsb0JBQXNFO0FBQUEsWUFBakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQXlIO0FBQUE7QUFBQTtBQUFBLGlCQUF0QztBQUFBLFlBQTFCO0FBQUE7QUFBQSxXQUEvRDtBQUFBLFVBQXNKO0FBQUE7QUFBQSxRQUFxQztBQUFBLE9BQU87QUFBQTtBQUFBO0FBQUEsVUFBMEo7QUFBQSxVQUFaO0FBQUEsS0FBckY7QUFBQTtBQUFBLGdCQUFBbEk7QUFBQUEsWUFBQSxJQUF3RDtBQUFBLFFBQTNCO0FBQUEsUUFBc0Q7QUFBQTtBQUFBO0FBQUEsS0FBMEQ7QUFBQTtBQUFBLFlBQW1DO0FBQUEsSUFBViwrQkFBNkM7QUFBQTtBQUFBLFNBQXNFO0FBQUEsS0FBQW1JO0FBQUFBLE9BQTNDLG1CQUFvQjtBQUFBLFNBQXdFO0FBQUEsSUFBViwrQkFBdUM7QUFBQTtBQUFBLFNBQTJHO0FBQUEsS0FBQUg7QUFBQUEsT0FBL0U7QUFBQTtBQUFBLFNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBOEc7QUFBQSxJQUFWLCtCQUF3QztBQUFBO0FBQUEsU0FBaUk7QUFBQSxTQUFaO0FBQUEsSUFBekY7QUFBQTtBQUFBLGVBQUFoSTtBQUFBQSxXQUFBLElBQTZEO0FBQUEsT0FBaEM7QUFBQSxPQUEwRDtBQUFBO0FBQUE7QUFBQSxJQUF5RDtBQUFBLEdBQXFCO0FBQUEsWUFBQW9JLHNCQUFBbkgsVUFBQXhDO0FBQUFBLFFBQUE3VCxNQUlwcUY7QUFBQSxJQUFnQztBQUFBO0FBQUEsVUFBNkU7QUFBQSxNQUFBQSxRQUFqQztBQUFBLEtBQXNFO0FBQUE7QUFBQSxXQUF5RDtBQUFBLFdBQWpCO0FBQUEsV0FBUjtBQUFBO0FBQUEsY0FBaEI7QUFBQTtBQUFBO0FBQUEsYUFBbEg7QUFBQSxJQUF2RSwrQkFBd1Esd0NBQXNPO0FBQUEsWUFBMUw7QUFBQSxJQUFWLGlDQUErTDtBQUFBLFlBQTVCO0FBQUEsSUFBcUI7QUFBQTtBQUFBLHNCQUFBeWQsT0FBQXROO0FBQUFBLGtCQUFBLElBQXJHO0FBQUEsY0FBVjtBQUFBLHdCQUFrQztBQUFBLDZCQUFrRDtBQUFBO0FBQUE7QUFBQSxlQUF1QztBQUFBO0FBQUEsWUEvcUJuYztBQUFBLFlBQUF1TiwyQkFBQXJILFVBQUF4QztBQUFBQSxRQUFBN1QsTUFtckJwQjtBQUFBLElBQWdDO0FBQUE7QUFBQSxVQUE2RTtBQUFBLE1BQUFBLFFBQWpDO0FBQUEsS0FBc0U7QUFBQTtBQUFBLFdBQXlEO0FBQUEsV0FBakI7QUFBQSxXQUFSO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUFsSDtBQUFBLElBQXZFO0FBQUEsS0FBK1EscURBQXdCO0FBQUEsWUFBc0I7QUFBQSxJQUFWLGlDQUFrTDtBQUFBLFlBQTVCO0FBQUEsSUFBcUI7QUFBQTtBQUFBLHNCQUFBZ1EsS0FBQUc7QUFBQUE7QUFBQUEsZUFBQSxJQUE5RTtBQUFBLGNBQTJDLDhDQUFFO0FBQUE7QUFBQTtBQUFBLGVBQW1EO0FBQUE7QUFBQSxZQW5yQnJjO0FBQUEsWUFBQXdOLHlCQUFBdEgsVUFBQXhDO0FBQUFBLFFBQUE3VCxNQXVyQnBCO0FBQUEsSUFBZ0M7QUFBQTtBQUFBLFVBQWlFO0FBQUEsVUFBakM7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBdkU7QUFBQSxhQUEwSztBQUFBLEtBQTBCLDZDQUF3TjtBQUFBO0FBQUE7QUFBQSxTQUE1SztBQUFBLFNBQVg7QUFBQSxJQUF0QiwrQkFBZ0U7QUFBQSxZQUE0QjtBQUFBLElBQVY7QUFBQTtBQUFBLGNBQW9ELHFEQUF1RTtBQUFBO0FBQUE7QUFBQSxTQXZyQmpYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBNGQsOEJBQUF2SCxVQUFBN0gsS0FBQXFGO0FBQUFBLFFBQUFyRixJQTJyQi9DO0FBQUE7QUFBQTtBQUFBLFVBQW1DO0FBQUEsVUFBckI7QUFBQSxLQUFWLCtCQUF3RDtBQUFBO0FBQUEsTUFBQXFQLE9BQTJCO0FBQUEsVUFBMEc7QUFBQSxVQUFuQztBQUFBLE1BQUE3ZCxNQUFoQjtBQUFBLEtBQWdGO0FBQUE7QUFBQSxXQUF1RTtBQUFBLFdBQWpCO0FBQUEsT0FBQUEsUUFBVjtBQUFBLE1BQTRFO0FBQUE7QUFBQSxZQUE4RTtBQUFBLFlBQWpCO0FBQUEsWUFBYjtBQUFBLFFBQUE4ZCxlQUFoQjtBQUFBO0FBQUEsV0FBQUEsZUFBaEI7QUFBQTtBQUFBO0FBQUEsVUFBQUEsZUFBeEg7QUFBQSxLQUF3UDtBQUFBO0FBQUE7QUFBQSxTQUEyOUI7QUFBQSxxQkFBMkM7QUFBQSxXQUExRjtBQUFBLE1BQThDLHNDQUFnRztBQUFBO0FBQUE7QUFBQSxNQUFBQyxXQUE1Z0M7QUFBQSxVQUFnRTtBQUFBLEtBQVY7QUFBQSxTQUFBdlAsTUFBZ0Y7QUFBQSxLQUFtQztBQUFBO0FBQUE7QUFBQSxTQUFxRDtBQUFBLFNBQWpCO0FBQUEsS0FBQXdQLFFBQUw7QUFBQSxTQUEwZTtBQUFBLFNBQVo7QUFBQSxLQUFBQztBQUFBQSxPQUF4WjtBQUFBO0FBQUE7QUFBQSxtQkFBQXBNO0FBQUFBO0FBQUFBLFlBQUErSSxJQUFxQztBQUFBLGdCQUFtSTtBQUFBLGdCQUFaO0FBQUEsV0FBN0U7QUFBQTtBQUFBLHNCQUFBeEY7QUFBQUEsa0JBQUEsSUFBbUQ7QUFBQSxjQUF0QjtBQUFBLGNBQThDO0FBQUE7QUFBQTtBQUFBLG1CQUFvTDtBQUFBLFdBQTFHO0FBQUE7QUFBQSxzQkFBQThJO0FBQUFBO0FBQUFBLGVBQUEsSUFBa0U7QUFBQSxtQkFBTDtBQUFBLGNBQTNCO0FBQUEsY0FBc0U7QUFBQTtBQUFBO0FBQUEsV0FBa0Msd0NBQXdDO0FBQUE7QUFBQTtBQUFBLEtBQUFkO0FBQUFBLE9BQWtFO0FBQUEsbUJBQTBDO0FBQUEsSUFBbUQ7QUFBQSxrRUFBeU07QUFBQTtBQUFBLFlBM3JCai9DO0FBQUEsWUFBQWUsb0JBQUF4QixVQUFBeUIsT0FBQTVhO0FBQUFBO0FBQUFBLEtBQUEsSUErckJ4QjtBQUFBLEtBQUE2YSxZQUFOO0FBQUEsSUFBZ0QseURBQXdEO0FBQUE7QUFBQSxZQS9yQjFFO0FBQUEsWUFBQUMsdUJBQUEzQixVQUFBeUIsU0FBQUM7QUFBQUEsUUFBQUQsUUFtc0IvQztBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVY7QUFBQTtBQUFBLFdBQXVJO0FBQUEsV0FBM0Q7QUFBQSxXQUF0QjtBQUFBLE1BQTBHO0FBQUE7QUFBQTtBQUFBLE1BQUFHLE9BQW9CO0FBQUEsTUFBQXBFLFVBQWlDO0FBQUEsTUFBQTlELFdBQWlDO0FBQUEsTUFBQXhDLFdBQStDO0FBQUEsVUFBOEY7QUFBQSxVQUFYO0FBQUEsS0FBdEI7QUFBQSxNQUFnRSxtREFBMEg7QUFBQSxTQUFBdUssVUFBakM7QUFBQSxLQUFnQjtBQUFBO0FBQUEsR0FBaUI7QUFBQTtBQUFBLFNBbnNCamY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBSSxnQkFBQWhjLE1BQUF4RDtBQUFBQSxRQUFBLElBdXNCUixxQ0FBVDtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQW9LO0FBQUEsVUFBWjtBQUFBLE1BQUEyZDtBQUFBQSxRQUE0QjtBQUFBLFNBQW5JO0FBQUE7QUFBQSxvQkFBQXhjO0FBQUFBLGdCQUFBLElBQWtDO0FBQUEsWUFBVjtBQUFBLHNCQUFnQztBQUFBLDBCQUErQixvQ0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQUF3YyxXQUFqSDtBQUFBO0FBQUEsS0FBQXlCLFFBQWdMO0FBQUEsS0FBQS9GLFVBQWdDO0FBQUEsU0FBMEQ7QUFBQSxJQUFuQjtBQUFBLFlBQTZHO0FBQUEsSUFBbkI7QUFBQSxJQUFtRSx1REFBMEg7QUFBQTtBQUFBO0FBQUEsU0F2c0J4aEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFvRyx1QkFBQWpjLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBeWYsV0Eyc0IvQjtBQUFBLEtBQUFDLFFBQThCO0FBQUEsS0FBQUMsVUFBZ0M7QUFBQSxTQUEyK0I7QUFBQSxLQUFBclMsVUFBcjlCO0FBQUEsS0FBQXNTLGFBQWlDO0FBQUEsSUFBdUQ7QUFBQTtBQUFBLGVBQUFDO0FBQUFBLFdBQUE5ZSxNQUEwRDtBQUFBLE9BQTBCO0FBQUE7QUFBQSxhQUFrRTtBQUFBLFNBQUFBLFFBQVg7QUFBQSxRQUEyQztBQUFBO0FBQUEsY0FBMEM7QUFBQSxjQUFWO0FBQUE7QUFBQSxpQkFBaEI7QUFBQTtBQUFBO0FBQUEsZ0JBQWxHO0FBQUEsT0FBakU7QUFBQTtBQUFBLGFBQWdQO0FBQUEsU0FBQStlLE9BQWI7QUFBQSxhQUFnRDtBQUFBLFFBQVY7QUFBQTtBQUFBLGNBQStOO0FBQUEsY0FBWjtBQUFBO0FBQUEsWUFBdkc7QUFBQTtBQUFBO0FBQUE7QUFBQSx5QkFBQTVlO0FBQUFBLHFCQUFBLElBQWtDO0FBQUEsaUJBQVY7QUFBQSwyQkFBZ0M7QUFBQSwrQkFBK0Isb0NBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUExSTtBQUFBO0FBQUE7QUFBQSxpQkFBb007QUFBQSxTQUFWO0FBQUE7QUFBQSxlQUF3SjtBQUFBLGVBQVo7QUFBQSxVQUFoRjtBQUFBO0FBQUEscUJBQUFrSjtBQUFBQSxhQUFvQztBQUFBLGFBQTBDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxrQkFBc0Q7QUFBQSxVQUFWO0FBQUEsbUJBQTJHO0FBQUEsV0FBbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBeGpCO0FBQUEsTUFBdW9CO0FBQUE7QUFBQSxZQUFnSDtBQUFBLElBQTlEO0FBQUEscUJBQUE3RixNQUE4QiwwQkFBOEI7QUFBQTtBQUFBLEtBQUF3YixjQUE4RDtBQUFBLFNBQWlNO0FBQUEsSUFBdko7QUFBQTtBQUFBLGVBQUExZDtBQUFBQSxXQUFBLElBQTZDO0FBQUEsT0FBVjtBQUFBLGdCQUE0RTtBQUFBLFFBQWhDO0FBQUE7QUFBQSxPQUFOO0FBQUEsTUFBNEU7QUFBQTtBQUFBLElBQW1EO0FBQUEsSUFBaUQsbUNBQTBDO0FBQUE7QUFBQTtBQUFBLElBQUEyZCxhRC90QmxqRDtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsZ0JBQUFoVyxZQUFBcks7QUFBQUEsUUFBQWdCLE1BK3NCUjtBQUFBLElBQWdDO0FBQUE7QUFBQSxVQUFrRTtBQUFBLE1BQUFBLFFBQVg7QUFBQSxLQUFpRDtBQUFBO0FBQUEsV0FBMEM7QUFBQSxXQUFWO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUF4RztBQUFBLElBQXZFO0FBQUE7QUFBQSxVQUFzUDtBQUFBLE1BQUFzVyxPQUFiO0FBQUE7QUFBQSxTQUFBQSxPQUEwQztBQUFBLFFBQUFqTCxLQUFrRDtBQUFBLElBQThDO0FBQUEsU0FBQUEsT0FBYTtBQUFBO0FBQUEsU0FBQUEsT0FBMEI7QUFBQSxLQUFnRDtBQUFBLFVBQUFBLE9BQWE7QUFBQTtBQUFBO0FBQUEsT0FBQUEsT0FBMEI7QUFBQSxPQUFBQTtBQUFBQSxTQUFnRDtBQUFBO0FBQUEsWUFBNEI7QUFBQTtBQUFBO0FBQUEsS0FBQXFUO0FBQUFBLE9BQTlRO0FBQUEsVUFBaVU7QUFBQTtBQUFBLEtBQUFuUyxVQUFxRTtBQUFBLFNBQThDO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBb1U7QUFBQSxVQUFOO0FBQUEsVUFBWjtBQUFBLEtBQXhQO0FBQUE7QUFBQSxnQkFBQXBNO0FBQUFBO0FBQUFBLFNBQUEsSUFBb0Q7QUFBQSxTQUFBbWY7QUFBQUEsV0FBVjtBQUFBLGNBQWdDO0FBQUEsa0JBQStCO0FBQUEsYUFBZ0M7QUFBQSxRQUFWO0FBQUE7QUFBQSxjQUFzRjtBQUFBLGNBQWxCO0FBQUEsU0FBZDtBQUFBO0FBQUEsUUFBTjtBQUFBLE9BQXVFO0FBQUE7QUFBQSxLQUEyQztBQUFBO0FBQUEsWUFBMEI7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUF1RjtBQUFBLE1BQUFDLE1BQVQ7QUFBQSxVQUErSztBQUFBLFVBQVo7QUFBQSxLQUFqSDtBQUFBO0FBQUEsZ0JBQUFuSztBQUFBQTtBQUFBQSxTQUFBLElBQXdGO0FBQUEsYUFBdEI7QUFBQSxhQUF0QjtBQUFBLFFBQWY7QUFBQSxRQUFrRjtBQUFBO0FBQUE7QUFBQSxLQUEyQztBQUFBO0FBQUE7QUFBQSxTQUFrSDtBQUFBLFNBQVo7QUFBQSxJQUF4RjtBQUFBO0FBQUEsZUFBQUE7QUFBQUE7QUFBQUEsUUFBQSxJQUErRDtBQUFBLFlBQW5CO0FBQUEsT0FBZjtBQUFBLE9BQXlEO0FBQUE7QUFBQTtBQUFBLElBQTJDO0FBQUEsR0FBVztBQUFBO0FBQUEsU0Evc0J6OUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQW9LLGVBQUFoZCxRQUFBeEQsS0FBQUM7QUFBQUEsUUFBQXVELE9BbXRCL0M7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFrQyxtQ0FBMnZDO0FBQUE7QUFBQSxNQUFBNkcsYUFBaHNDO0FBQUEsTUFBQW9XLFlBQWtDO0FBQUEsTUFBQXpmLE1BQXdFO0FBQUEsS0FBZ0M7QUFBQTtBQUFBLFdBQWtFO0FBQUEsT0FBQUEsUUFBWDtBQUFBLE1BQWlEO0FBQUE7QUFBQSxZQUEwQztBQUFBLFlBQVY7QUFBQTtBQUFBLGVBQWhCO0FBQUE7QUFBQTtBQUFBLGNBQXhHO0FBQUEsS0FBdkU7QUFBQTtBQUFBLFdBQXNQO0FBQUEsT0FBQXNXLE9BQWI7QUFBQTtBQUFBLFVBQUFBLE9BQTBDO0FBQUEsU0FBQWpMLEtBQWtDO0FBQUEsS0FBOEM7QUFBQSxVQUFBQSxPQUFhO0FBQUE7QUFBQSxVQUFBQSxPQUEwQjtBQUFBLE1BQWdEO0FBQUEsV0FBQUEsT0FBYTtBQUFBO0FBQUE7QUFBQSxRQUFBQSxPQUEwQjtBQUFBLFFBQUFBO0FBQUFBLFVBQWdEO0FBQUE7QUFBQSxhQUE0QjtBQUFBO0FBQUE7QUFBQSxNQUFBcVQ7QUFBQUEsUUFBOVE7QUFBQSxXQUFpVTtBQUFBO0FBQUEsVUFBcUU7QUFBQSxLQUFWO0FBQUE7QUFBQSxXQUFvWSxVQUFZO0FBQUEsT0FBQTllLElBQWxJO0FBQUEsTUFBb0I7QUFBQSxNQUF1QztBQUFBLE1BQXlDLHlDQUFnRztBQUFBO0FBQUEsS0FBbFo7QUFBQSxhQUF3RDtBQUFBLEtBQVYsK0JBQXVDLG1DQUE2VDtBQUFBLEtBQW5VO0FBQUE7QUFBQSxHQUFtVTtBQUFBLFlBbnRCbHZDO0FBQUEsWUFBQThmLGdCQUFBbGQsTUFBQXhELEtBQUFDO0FBQUFBLFFBQUEsSUF1dEJqQztBQUFBLElBQVY7QUFBQSxhQUFxRDtBQUFBLEtBQWlFO0FBQUE7QUFBQSxZQUErQyxVQUFZO0FBQUEsSUFBbkMsT0FBZ0IsZUFBaEIsd0NBQTBFO0FBQUE7QUFBQTtBQUFBLFNBdnRCN0s7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBMGdCLHNCQUFBbmQsTUFBQXhEO0FBQUFBO0FBQUFBLEtBQUE0Z0IsV0E0dEIvQjtBQUFBLEtBQUFDLFlBQWtDO0FBQUEsS0FBQUMsV0FBOEM7QUFBQSxLQUFBQyxjQUFpRDtBQUFBLEtBQUFDLFdBQTREO0FBQUEsS0FBQWhnQixNQUF3RTtBQUFBO0FBQUEsT0FBOEQ7QUFBQSxVQUFnQztBQUFBO0FBQUEsSUFBckg7QUFBQTtBQUFBLFVBQTBPO0FBQUEsVUFBaEI7QUFBQSxNQUFBaWdCLFlBQTVDO0FBQUE7QUFBQSxTQUFBQSxZQUFOO0FBQUE7QUFBQSxTQUFvSjtBQUFBLEtBQUFDLFlBQWI7QUFBQSxTQUFrSDtBQUFBLFNBQVo7QUFBQSxLQUFBQztBQUFBQSxPQUF2QztBQUFBO0FBQUEseUJBQUFoZ0IsR0FBb0IsaUNBQWlCO0FBQUEsS0FBQWlnQixZQUF1RDtBQUFBLFNBQXVHO0FBQUEsS0FBQUM7QUFBQUEsT0FBbkQ7QUFBQTtBQUFBO0FBQUEsbUJBQUFDO0FBQUFBLGVBQUEsSUFBa0M7QUFBQSxXQUFjLGlDQUFDO0FBQUE7QUFBQTtBQUFBLEtBQUFDLFVBQStDO0FBQUEsU0FBK0c7QUFBQSxTQUF6QjtBQUFBLElBQWY7QUFBQTtBQUFBLFNBQTBJO0FBQUEsU0FBekI7QUFBQSxJQUFmO0FBQUEsSUFBZ0c7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBQS9kO0FBQUFBLFFBQXdEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBQThkLEtBQUE7QUFBQSxXQUFBek8sTUFBQTtBQUFBLGVBQStFO0FBQUEsV0FBQTJPLGdCQUFiO0FBQUEsZUFBMEc7QUFBQSxlQUE3QjtBQUFBLFVBQWY7QUFBQTtBQUFBLGVBQThHO0FBQUEsZUFBbEI7QUFBQSxVQUFWLGlDQUEyTTtBQUFBO0FBQUEsZUFBN0c7QUFBQSxXQUFBQyxlQUFiO0FBQUEsZUFBdUY7QUFBQSxlQUE1QjtBQUFBLFVBQTJCLDJDQUE2RDtBQUFBO0FBQUE7QUFBQSxRQUFIO0FBQUEsT0FBRztBQUFBO0FBQUEsSUFBdUI7QUFBQSxHQUFVO0FBQUE7QUFBQSxJQUFBQyx3QkRodkJ0bkQ7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxtQkFBQXhlLE1BQUF4RDtBQUFBQTtBQUFBQSxLQUFBLElBZ3VCaEI7QUFBQSxLQUFBaWlCLGFBQWI7QUFBQSxLQUFBQyxlQUFxRDtBQUFBLFNBQW1FO0FBQUEsSUFBZjtBQUFBLFlBQW9HO0FBQUEsSUFBZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBQTFlO0FBQUFBLFFBQXVGO0FBQUE7QUFBQTtBQUFBLGNBQUFpTSxNQUFBLE1BQUEwUyxRQUFBO0FBQUEsVUFBcUQsOEJBQW1EO0FBQUE7QUFBQTtBQUFBLFFBQUg7QUFBQSxPQUFHO0FBQUE7QUFBQSxLQUFBdmhCLElBQW1GO0FBQUEsU0FBcUQ7QUFBQSxJQUFqQztBQUFBO0FBQUEsU0FBMlA7QUFBQTtBQUFBLE9BQWxLO0FBQUE7QUFBQTtBQUFBLG1CQUFBbUM7QUFBQUE7QUFBQUEsWUFBQW5DLElBQWlDO0FBQUEsZ0JBQStDO0FBQUEsV0FBM0I7QUFBQTtBQUFBLGdCQUFnRjtBQUFBLGdCQUFiO0FBQUEsV0FBMUI7QUFBQSxXQUF3RDtBQUFBLFVBQVU7QUFBQTtBQUFBLElBQW5NO0FBQUEsSUFBa087QUFBQSxJQUFyVztBQUFBLFlBQWl0QztBQUFBLElBQXJ5QjtBQUFBO0FBQUEsZUFBQW1DO0FBQUFBO0FBQUFBLFFBQUEsSUFBK0Q7QUFBQSxRQUFBcWYsY0FBYjtBQUFBLFFBQUE3UyxTQUErQztBQUFBLFFBQUE4UyxXQUEyRDtBQUFBLFlBQW1sQjtBQUFBO0FBQUEsVUFBalQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw0QkFBcU47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFoUDtBQUFBLE9BQWQ7QUFBQSxPQUEyWTtBQUFBLE1BQUc7QUFBQTtBQUFBLElBQXNDO0FBQUEsR0FBTztBQUFBO0FBQUEsU0FodUJ2bkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGFBQUE5ZSxNQUFBeEQ7QUFBQUE7QUFBQUEsS0FBQSxJQW91QmhCO0FBQUEsS0FBQWlpQixhQUFiO0FBQUEsU0FBbUU7QUFBQSxLQUFBTSxnQkFBYjtBQUFBLFNBQWdJO0FBQUE7QUFBQSxPQUFoQjtBQUFBLEtBQUF0QixZQUFqRDtBQUFBLFNBQW9JO0FBQUEsS0FBQXVCLGNBQU47QUFBQSxLQUFBQyxRQUF1QztBQUFBLFNBQTBEO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBMkU7QUFBQSxVQUF0QjtBQUFBLEtBQTRFO0FBQUE7QUFBQTtBQUFBLEtBQUFDLFFBQXFCO0FBQUEsS0FBQXJXLEtBQWdFO0FBQUEsS0FBQXNXO0FBQUFBLE9BQWdDO0FBQUE7QUFBQSxjQUFrQztBQUFBLFNBQXk1QjtBQUFBLElBQTkyQjtBQUFBO0FBQUEsZUFBQUM7QUFBQUE7QUFBQUEsUUFBQSxJQUErRDtBQUFBLFFBQUFDLFFBQWI7QUFBQSxZQUE4SztBQUFBLFlBQVo7QUFBQTtBQUFBLFVBQXpGO0FBQUE7QUFBQTtBQUFBLHNCQUFBQztBQUFBQTtBQUFBQSxlQUFBLElBQWtEO0FBQUEsbUJBQWpCO0FBQUEsY0FBc0Q7QUFBQTtBQUFBO0FBQUEsUUFBQUMsZUFBckc7QUFBQSxZQUE0SztBQUFBLE9BQVY7QUFBQTtBQUFBO0FBQUEsV0FBa0Y7QUFBQTtBQUFBO0FBQUEsYUFBdEI7QUFBQSxRQUEwRztBQUFBO0FBQUE7QUFBQSxRQUFBQyxRQUFxQjtBQUFBLFFBQUF6VDtBQUFBQSxVQUF3RDtBQUFBO0FBQUEsWUFBdUg7QUFBQSxZQUFwQjtBQUFBLFlBQWpCO0FBQUEsT0FBVjtBQUFBLFlBQUFoTixPQUE2RjtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQXlEO0FBQUEsU0FBQUEsT0FBekI7QUFBQSxlQUF3RztBQUFBLE9BQWhDO0FBQUEsT0FBeUY7QUFBQSxNQUFJO0FBQUE7QUFBQSxJQUFzRDtBQUFBLElBQWdEO0FBQUEsR0FBUztBQUFBLFlBcHVCM2tEO0FBQUEsWUFBQTBnQixZQUFBaEIsWUFBQTdoQjtBQUFBQTtBQUFBQSxLQUFBLElBd3VCVjtBQUFBLFNBQVg7QUFBQSxJQUF0QiwrQkFBK0Q7QUFBQTtBQUFBLFNBQXlFO0FBQUE7QUFBQSxPQUFWO0FBQUEsVUFBeUM7QUFBQTtBQUFBLEtBQUFxaUIsUUFBekU7QUFBQSxTQUF3STtBQUFBLElBQVYsK0JBQWtDO0FBQUE7QUFBQSxTQUEwRjtBQUFBLFNBQW5DO0FBQUEsU0FBTjtBQUFBLFNBQVQ7QUFBQSxJQUFYLDBDQUFxRjtBQUFBLEdBQUs7QUFBQTtBQUFBLElBQUFTLFdENXZCM1g7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLDJCQUFBN087QUFBQUE7QUFBQUEsS0FBQSxJQTR1QjBDO0FBQUEsS0FBQThPO0FBQUFBLE9BQWpDO0FBQUE7QUFBQSx5QkFBQTdPLEdBQW9CLG1DQUFXO0FBQUEsU0FBK1U7QUFBQSxLQUFBOE87QUFBQUEsT0FBMVI7QUFBQTtBQUFBO0FBQUEsbUJBQUF6UTtBQUFBQSxlQUFBNVIsTUFBOEM7QUFBQSxXQUF5QjtBQUFBO0FBQUEsaUJBQWtFO0FBQUEsYUFBQUEsUUFBWDtBQUFBLFlBQTJEO0FBQUE7QUFBQSxrQkFBc0Q7QUFBQSxrQkFBb0MsUUFBL0M7QUFBQTtBQUFBLHFCQUEzQjtBQUFBO0FBQUE7QUFBQSxvQkFBbEg7QUFBQSw0Q0FBaU07QUFBQTtBQUFBO0FBQUEsU0FBMkg7QUFBQSxLQUFBc2lCO0FBQUFBLE9BQXpFO0FBQUE7QUFBQTtBQUFBLG1CQUFBMVE7QUFBQUEsZUFBQSxJQUFpQztBQUFBLFdBQXNDO0FBQUE7QUFBQTtBQUFBLFNBQXVIO0FBQUEsS0FBQTJRO0FBQUFBLE9BQXJFO0FBQUE7QUFBQTtBQUFBLG1CQUFBM1E7QUFBQUEsZUFBQSxJQUFpQztBQUFBLFdBQWtDO0FBQUE7QUFBQTtBQUFBLFNBQXlIO0FBQUEsS0FBQTRRO0FBQUFBLE9BQXRFO0FBQUE7QUFBQTtBQUFBLG1CQUFBNVE7QUFBQUEsZUFBQSxJQUFpQztBQUFBLFdBQW1DO0FBQUE7QUFBQTtBQUFBLEtBQUE1UixNQUFxRjtBQUFBO0FBQUEsT0FBdUM7QUFBQSxrQkFBMkM7QUFBQTtBQUFBLEtBQUFraUI7QUFBQUEsT0FBcEg7QUFBQSxVQUFpSztBQUFBO0FBQUEsS0FBQWxpQixRQUE0TTtBQUFBLElBQWlEO0FBQUE7QUFBQSxNQUFBd2lCLGNBQWtHO0FBQUEsTUFBQXhpQixRQUEzQztBQUFBLEtBQW9HO0FBQUE7QUFBQSxPQUFBQSxRQUF1RDtBQUFBO0FBQUEsU0FBdUM7QUFBQSxvQkFBMkM7QUFBQTtBQUFBO0FBQUEsY0FBekg7QUFBQTtBQUFBO0FBQUEsYUFBM0o7QUFBQSxJQUFsSDtBQUFBO0FBQUEsVUFBZ2U7QUFBQSxNQUFBa2lCO0FBQUFBLFFBQTNDO0FBQUE7QUFBQTtBQUFBLFNBQUFBLGFBQW5CO0FBQUEsSUFBbU47QUFBQSxHQUFZO0FBQUEsWUE1dUIxc0Q7QUFBQSxZQUFBTyxrQkFBQWhVLEtBQUE2RSxXQUFBdFU7QUFBQUEsUUFBQXNVLFVBZ3ZCL0M7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFxQztBQUFBO0FBQUEsTUFBQStELFNBQXVCO0FBQUEsTUFBQThDLFVBQW1DO0FBQUEsTUFBQTVZLE9BQStCO0FBQUEsTUFBQUMsUUFBNkM7QUFBQSxVQUFvQztBQUFBLEtBQVYsK0JBQTBEO0FBQUEsU0FBQThSLFlBQW9EO0FBQUEsS0FBa0I7QUFBQTtBQUFBLEdBQVU7QUFBQTtBQUFBLElBQUFvUCxVRHB3QnJWO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGNBQUF4SSxTQUFBL2EsT0FBQUo7QUFBQUEsUUFBQSxJQW92QmpDO0FBQUEsSUFBViwrQkFBeUQ7QUFBQSxRQUFBZ0IsTUFBNEM7QUFBQSxJQUE2QjtBQUFBO0FBQUEsVUFBNEQ7QUFBQSxNQUFBQSxRQUFoQjtBQUFBLEtBQTBEO0FBQUE7QUFBQSxXQUFnRDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUF0RztBQUFBLElBQXBFO0FBQUEsU0FBQTZKLE9BQWdRLFVBQVc7QUFBQSxLQUEyQyx5Q0FBdWdHO0FBQUE7QUFBQSxRQUFBN0osUUFBbjhGO0FBQUEsSUFBNkI7QUFBQTtBQUFBLFVBQWtFO0FBQUEsTUFBQUEsUUFBWDtBQUFBLEtBQThDO0FBQUE7QUFBQSxXQUFnRDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUFyRztBQUFBLElBQXBFO0FBQUEsYUFBOFE7QUFBQSxLQUE4Qix1Q0FBOHFGO0FBQUE7QUFBQSxZQUF4cEY7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUFvRjtBQUFBLFVBQWQ7QUFBQSxLQUFmO0FBQUEsS0FBaUU7QUFBQTtBQUFBLFFBQUFBLFFBQTZDO0FBQUEsSUFBNkI7QUFBQTtBQUFBLFVBQWtFO0FBQUEsTUFBQUEsUUFBWDtBQUFBLEtBQThDO0FBQUE7QUFBQSxXQUFzRDtBQUFBLE9BQUFBLFFBQVY7QUFBQSxNQUF5QztBQUFBO0FBQUEsUUFBQUEsUUFBNEM7QUFBQTtBQUFBLFVBQTJCO0FBQUEsYUFBZ0M7QUFBQTtBQUFBO0FBQUEsZUFBdkY7QUFBQTtBQUFBO0FBQUEsY0FBckY7QUFBQTtBQUFBO0FBQUEsYUFBckc7QUFBQSxJQUFwRTtBQUFBO0FBQUEsVUFBNlo7QUFBQSxNQUFBa2dCLFlBQWI7QUFBQSxNQUFBMEMsaUJBQTBEO0FBQUEsTUFBQUMsU0FBaUM7QUFBQSxVQUFrRTtBQUFBLE1BQUE3aUIsUUFBaEI7QUFBQSxLQUF3RSxxQ0FBc0I7QUFBQTtBQUFBLFVBQThEO0FBQUEsVUFBeEI7QUFBQSxNQUFBQSxRQUFoQjtBQUFBLEtBQW1FLHFDQUFzQjtBQUFBO0FBQUE7QUFBQSxRQUF5STtBQUFBLFVBQVo7QUFBQSxLQUE3RztBQUFBO0FBQUE7QUFBQSx3QkFBQTRKO0FBQUFBO0FBQUFBLGlCQUFBLElBQXNFO0FBQUEscUJBQWpDLGNBQWdCO0FBQUEsZ0JBQXNEO0FBQUE7QUFBQSxrQkFBMEQ7QUFBQTtBQUFBO0FBQUEsS0FBQTVKLFFBQXFDO0FBQUE7QUFBQSxPQUE2QjtBQUFBLFVBQWdDO0FBQUE7QUFBQSxJQUFwRjtBQUFBO0FBQUEsVUFBbU87QUFBQSxVQUFaO0FBQUEsS0FBckc7QUFBQTtBQUFBO0FBQUEsd0JBQUFvTDtBQUFBQTtBQUFBQSxpQkFBQSxJQUF3RTtBQUFBO0FBQUEsbUJBQXRDLGNBQWdCO0FBQUEsZ0JBQWlEO0FBQUE7QUFBQSxrQkFBNEM7QUFBQTtBQUFBLFFBQUFwTCxTQUFrQztBQUFBLElBQTZCO0FBQUE7QUFBQSxNQUFBQSxTQUE0QztBQUFBO0FBQUEsUUFBMkI7QUFBQSxXQUFnQztBQUFBO0FBQUE7QUFBQSxhQUF2RjtBQUFBLElBQXBFO0FBQUE7QUFBQSxNQUFBa1MsV0FBdU87QUFBQSxVQUFtRjtBQUFBLE1BQUFsUyxTQUFqQjtBQUFBLEtBQXFELHNDQUFzQjtBQUFBO0FBQUE7QUFBQSxRQUE4TjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFsQjtBQUFBLFVBQVo7QUFBQSxNQUFBQTtBQUFBQSxRQUE3RztBQUFBO0FBQUE7QUFBQSxvQkFBQTRKO0FBQUFBO0FBQUFBLGFBQUEsSUFBc0U7QUFBQSxpQkFBakMsY0FBZ0I7QUFBQSxZQUFzRDtBQUFBO0FBQUE7QUFBQSxLQUEwSixzQ0FBc0I7QUFBQTtBQUFBLFVBQTBDO0FBQUEsTUFBQXVJLFlBQWY7QUFBQSxVQUF1STtBQUFBLFVBQTNCO0FBQUEsVUFBZDtBQUFBLEtBQWY7QUFBQSxLQUFtRztBQUFBO0FBQUE7QUFBQSxLQUFBblMsU0FBaUQ7QUFBQTtBQUFBLE9BQTZCO0FBQUEsVUFBZ0M7QUFBQTtBQUFBLElBQXBGO0FBQUEsS0FBaWEsaUVBQXdDO0FBQUE7QUFBQSxTQUF0UjtBQUFBLFNBQWpCO0FBQUEsU0FBakI7QUFBQSxTQUFYO0FBQUEsSUFBdEIsK0JBQTZGO0FBQUE7QUFBQSxLQUFBdUwsUUFBK0I7QUFBQSxTQUF5SjtBQUFBLElBQTdHO0FBQUE7QUFBQTtBQUFBLHVCQUFBM0I7QUFBQUE7QUFBQUEsZ0JBQUEsSUFBc0U7QUFBQSxvQkFBakMsY0FBZ0I7QUFBQSxlQUFzRDtBQUFBO0FBQUEsaUJBQXFCO0FBQUEsR0FBaUQ7QUFBQTtBQUFBLFNBcHZCaDJHO0FBQUE7QUFBQTtBQUFBLFlBQUFrWix1QkFBQXpMO0FBQUFBO0FBQUFBLEtBQUF6RixJQXd2QnRDO0FBQUEsS0FBQXZHLEtBQStCO0FBQUEsSUFBd0MsZ0NBQW1CO0FBQUEsUUFBQUEsT0FBb0I7QUFBQSxJQUEyQztBQUFBO0FBQUEsY0FBNEIseUNBQXVDO0FBQUE7QUFBQSxZQXh2QnRMO0FBQUEsWUFBQTBYLHVCQUFBMUw7QUFBQUE7QUFBQUEsS0FBQXpGLElBNHZCdEM7QUFBQSxLQUFBNVIsTUFBK0M7QUFBQSxJQUF1QjtBQUFBO0FBQUEsVUFBa0U7QUFBQSxNQUFBQSxRQUFYO0FBQUEsS0FBd0M7QUFBQSxjQUEwQyxrQ0FBVjtBQUFBO0FBQUEsY0FBaEI7QUFBQTtBQUFBO0FBQUEsYUFBL0Y7QUFBQSxJQUE5RDtBQUFBLGFBQTJOO0FBQUEsS0FBYSxpQ0FBcVM7QUFBQTtBQUFBLFFBQUFBLFFBQW5RO0FBQUEsSUFBeUI7QUFBQTtBQUFBLFVBQWtFO0FBQUEsTUFBQUEsUUFBWDtBQUFBLEtBQTREO0FBQUE7QUFBQSxXQUFzRDtBQUFBLFdBQXVDLFFBQWxEO0FBQUE7QUFBQSxjQUEzQjtBQUFBO0FBQUE7QUFBQSxhQUFuSDtBQUFBLElBQWhFLHlDQUEwUjtBQUFBO0FBQUE7QUFBQSxJQUFBZ2pCLGlCRGh4QmhqQjtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQztBQUFBQSxJQUFBamtCLEtBQUFpaEIsV0FBQWlELFlBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUFnd0IrRTtBQUFBLEtBQUFDO0FBQUFBLE9BQXpHO0FBQUE7QUFBQTtBQUFBLG1CQUFBN1A7QUFBQUE7QUFBQUEsWUFBQTtBQUFBLGNBQXdEO0FBQUE7QUFBQSxnQkFBWDtBQUFBLFdBQXVELGlDQUFHO0FBQUE7QUFBQTtBQUFBLFNBQXNGO0FBQUEsU0FBWDtBQUFBLElBQXRCO0FBQUE7QUFBQSxVQUF1SDtBQUFBLFVBQVg7QUFBQSxLQUF0QjtBQUFBO0FBQUEsV0FBaUo7QUFBQSxXQUE3QztBQUFBLE1BQWQ7QUFBQTtBQUFBO0FBQUEsTUFBQThQLFNBQTRHO0FBQUE7QUFBQSxRQUFpRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBQWpPLE1BQWxDO0FBQUEsVUFBd0g7QUFBQSxVQUFYO0FBQUEsS0FBdEI7QUFBQSxNQUFrRjtBQUFBO0FBQUE7QUFBQSxTQUF1SjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUF2RjtBQUFBLE1BQXBCO0FBQUE7QUFBQTtBQUFBLElBQXVMO0FBQUEsR0FBSztBQUFBO0FBQUEsSUFBQWtPLG1CRHB4QjM1QjtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLDJCQUFBOVUsS0FBQTZFLFNBQUF0VTtBQUFBQTtBQUFBQSxLQUFBZ0IsTUFvd0JwQjtBQUFBO0FBQUEsT0FBMEIsK0JBQWdDO0FBQUEsSUFBakYsaUNBQSszQjtBQUFBO0FBQUEsS0FBQWlnQixZQUF2dkI7QUFBQSxLQUFBamdCLFFBQThEO0FBQUEsS0FBQWlnQixjQUFzRDtBQUFBLElBQTdFLDJDQUFxc0I7QUFBQTtBQUFBLFNBQWhqQjtBQUFBLEtBQUFpRCxhQUFMO0FBQUEsSUFBbUg7QUFBQTtBQUFBLFVBQThIO0FBQUE7QUFBQSxRQUFqRTtBQUFBO0FBQUE7QUFBQSxvQkFBQTNQO0FBQUFBLGdCQUFBLElBQWlDO0FBQUEsWUFBOEI7QUFBQTtBQUFBO0FBQUEsVUFBMEIsUUFBM0c7QUFBQTtBQUFBLGFBQTNCO0FBQUEsSUFBNUQsaUNBQW1lO0FBQUE7QUFBQSxTQUE3RztBQUFBO0FBQUEsT0FBbEQ7QUFBQTtBQUFBLHlCQUFBQSxHQUFvQixnQ0FBNEI7QUFBQSxTQUFsRTtBQUFBLEtBQUE0UDtBQUFBQSxPQUE1RTtBQUFBO0FBQUE7QUFBQSxtQkFBQXBNO0FBQUFBO0FBQUFBLFlBQUEsSUFBd0Q7QUFBQSxnQkFBWDtBQUFBLFdBQTBCLGlDQUFHO0FBQUE7QUFBQTtBQUFBLElBQW1HLDBFQUEwRztBQUFBO0FBQUEsWUFwd0J4MUI7QUFBQSxZQUFBeU0sY0FBQWhoQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQXdQLE1Bd3dCbkMsV0FBWSxVQUFZO0FBQUEsS0FBQTZFLFVBQTJDO0FBQUEsSUFBa0M7QUFBQTtBQUFBLEtBQUFsRyxTQUF3RTtBQUFBLFNBQTREO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBdUksVUFBWTtBQUFBLFVBQXZDO0FBQUEsS0FBL0MsT0FBaUUsbUJBQWpFLHFDQUFvTztBQUFBO0FBQUEsWUFBL0I7QUFBQSxJQUFqQyxPQUFnQyxlQUFoQywrQ0FBZ0U7QUFBQTtBQUFBLFlBeHdCN2Q7QUFBQSxZQUFBcVcscUJBQUFqaEIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUF5a0IsZ0JBNHdCMUI7QUFBQSxLQUFBbmlCLE9BQTZCO0FBQUEsU0FBeUw7QUFBQSxLQUFBMkc7QUFBQUEsT0FBbko7QUFBQTtBQUFBO0FBQUEsbUJBQUFuRztBQUFBQTtBQUFBQSxZQUFBO0FBQUEsY0FBeUc7QUFBQSxlQUF4QixXQUFZLFVBQVk7QUFBQTtBQUFBLFdBQW5EO0FBQUE7QUFBQSxvQkFBeEIsV0FBWSxVQUFZO0FBQUEsdUJBQXlCO0FBQUEsVUFBa0U7QUFBQTtBQUFBLFNBQWdEO0FBQUEsSUFBViwrQkFBa0MsbUNBQStKO0FBQUE7QUFBQTtBQUFBLE9BQS9FO0FBQUEsU0FBWSw2QkFBZ0M7QUFBQTtBQUFBLElBQW5FLE9BQWdCLGVBQWhCLHdDQUFzRztBQUFBO0FBQUEsWUE1d0JqYTtBQUFBLFlBQUE0aEIscUJBQUFuaEIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFzQyxPQWd4Qm5DO0FBQUEsS0FBQXFpQixnQkFBc0M7QUFBQSxTQUFzTztBQUFBLEtBQUF2YjtBQUFBQSxPQUFoTTtBQUFBO0FBQUE7QUFBQSxtQkFBQXRHO0FBQUFBO0FBQUFBLFlBQUEsSUFBaUs7QUFBQSxnQkFBN0I7QUFBQSxnQkFBN0U7QUFBQSxnQkFBWDtBQUFBLFdBQVY7QUFBQTtBQUFBLGlCQUEwRDtBQUFBLGlCQUFiO0FBQUE7QUFBQSxvQkFBb0M7QUFBQSxXQUExQztBQUFBLFVBQXFIO0FBQUE7QUFBQSxJQUEyRSxPQUE0RDtBQUFBO0FBQUE7QUFBQSxhQUF4RSxVQUFZLDZDQUE4RDtBQUFBO0FBQUEsWUFoeEJoWDtBQUFBLFlBQUE4aEIsZUFBQXJoQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTBLLFlBb3hCOUIsV0FBWSxVQUFZO0FBQUEsS0FBQUcsYUFBOEM7QUFBQSxTQUF3RDtBQUFBLElBQVY7QUFBQSxLQUF5UCxPQUFrRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBOUQsVUFBWSwyQ0FBcUQ7QUFBQTtBQUFBLFNBQW5MO0FBQUEsU0FBM0M7QUFBQSxTQUF0QjtBQUFBLElBQTBGO0FBQUEsR0FBMEo7QUFBQTtBQUFBLFNBcHhCcFk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFnYSx1QkFBQXRoQixNQUFBeEQsS0FBQUM7QUFBQUEsUUFBQSxJQXd4QlEscUNBQVg7QUFBQSxJQUFWO0FBQUEsYUFBMEQsaUNBQUE4a0IsS0FBYjtBQUFBO0FBQUEsU0FBQUEsS0FBb0MsV0FBWSxVQUFZO0FBQUE7QUFBQSxTQUE0QztBQUFBLEtBQUFDO0FBQUFBLE9BQVYsNkJBQWlDO0FBQUEsU0FBa0Y7QUFBQSxTQUFsQjtBQUFBLEtBQUFDO0FBQUFBLE9BQVY7QUFBQSxVQUErRCxXQUFZLFVBQVk7QUFBQTtBQUFBLEtBQUF4RyxRQUFnRTtBQUFBLFNBQTJEO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBbUg7QUFBQSxVQUF4QztBQUFBLFVBQXRCO0FBQUEsS0FBMEY7QUFBQTtBQUFBO0FBQUEsS0FBQS9TLFFBQXFCO0FBQUEsS0FBQXdaLGdCQUF1QztBQUFBLEtBQUFDLFlBQWdEO0FBQUEsS0FBQTVWLFNBQThDO0FBQUEsS0FBQWhOLE9BQTJDO0FBQUEsU0FBOEQ7QUFBQSxLQUFBNmlCLGNBQVo7QUFBQSxTQUFnSDtBQUFBLFNBQVg7QUFBQSxJQUF0QjtBQUFBO0FBQUEsVUFBbUc7QUFBQSxVQUFkO0FBQUEsS0FBdEI7QUFBQTtBQUFBLElBQWlGLG1EQUFzRDtBQUFBO0FBQUEsWUF4eEJ4akM7QUFBQSxZQUFBQyxXQUFBN2hCLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBLElBNHhCa0Y7QUFBQSxTQUFqQjtBQUFBLFNBQVYsNkJBQThEO0FBQUE7QUFBQSxPQUE3SDtBQUFBLFNBQVksY0FBZ0I7QUFBQSxJQUFuRCxPQUFnQixlQUFoQix3Q0FBNE07QUFBQTtBQUFBLFlBQUFxbEIsYUFBQTloQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BSXJMLFVBQVksZ0JBQWtCO0FBQUEsSUFBckQsT0FBZ0IsZUFBaEIsd0NBQXNGO0FBQUE7QUFBQSxZQWh5QnZEO0FBQUEsWUFBQXNsQixjQUFBL2hCLE1BQUF4RCxLQUFBQztBQUFBQSxRQUFBLElBb3lCakM7QUFBQSxJQUFWLCtCQUFrQyxtQ0FBd1E7QUFBQTtBQUFBLFNBQWhNO0FBQUEsU0FBakI7QUFBQSxJQUFWO0FBQUEsS0FBOEUsT0FBZ0IsZUFBaEIsMkNBQTZJO0FBQUE7QUFBQTtBQUFBLE9BQWxFLFVBQVksaUJBQW1CO0FBQUEsSUFBdEQsT0FBZ0IsZUFBaEIsd0NBQXlGO0FBQUE7QUFBQTtBQUFBLFNBcHlCL1A7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBdWxCLFlBQUFoaUIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUF3eUJnQjtBQUFBLFNBQVQ7QUFBQSxTQUFqQjtBQUFBLElBQVY7QUFBQSxLQUFpRyxPQUE2QixlQUE3QixtQ0FBNjhDO0FBQUE7QUFBQSxLQUFBNFUsV0FBNTRDO0FBQUEsS0FBQXRTLE9BQTZCO0FBQUEsS0FBQUMsUUFBNkI7QUFBQSxTQUFvQztBQUFBLElBQVYsK0JBQXNDLHVDQUFreEM7QUFBQTtBQUFBLFNBQTlwQztBQUFBLFNBQVQ7QUFBQSxLQUFBeEIsTUFBaEI7QUFBQSxJQUE0RTtBQUFBO0FBQUEsVUFBcUQ7QUFBQSxVQUFMO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBbkg7QUFBQSxTQUFBeWtCLGdCQUFxTTtBQUFBO0FBQUE7QUFBQSxVQUFtRDtBQUFBLE1BQUFBLGdCQUFGLFFBQWxCO0FBQUE7QUFBQSxTQUFrSTtBQUFBLFNBQVQ7QUFBQSxLQUFBemtCLFFBQWhCO0FBQUEsSUFBNEU7QUFBQTtBQUFBLFVBQXFEO0FBQUEsVUFBTDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQW5IO0FBQUEsU0FBQTBrQixnQkFBcU07QUFBQTtBQUFBO0FBQUEsVUFBc1Y7QUFBQSxVQUFoQjtBQUFBLFVBQWxDO0FBQUEsVUFBWjtBQUFBLE1BQUFuWixRQUFqUTtBQUFBLEtBQWlEO0FBQUE7QUFBQSxnQkFBQXlFLEtBQUF4QjtBQUFBQTtBQUFBQSxTQUFBLElBQTZKO0FBQUEsYUFBbkI7QUFBQSxhQUFoQjtBQUFBLGFBQXRDO0FBQUEsYUFBaEI7QUFBQSxRQUExQjtBQUFBLFFBQTRKO0FBQUEsT0FBSTtBQUFBO0FBQUE7QUFBQSxTQUFBa1csZ0JBQTZHO0FBQUE7QUFBQTtBQUFBLFNBQWtFO0FBQUEsU0FBVDtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBdUc7QUFBQSxNQUFBOU4sUUFBYjtBQUFBO0FBQUEsU0FBQUEsUUFBNkM7QUFBQTtBQUFBLFNBQTJGLFVBQVk7QUFBQSxJQUEzRCxPQUFzQztBQUFBLGFBQXRDLHVEQUFtSTtBQUFBO0FBQUE7QUFBQSxTQXh5QjFoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQStOLGVBQUFuaUIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUE0eUJjO0FBQUEsU0FBVDtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBcUc7QUFBQSxNQUFBMmxCLFVBQVA7QUFBQSxVQUErQztBQUFBLE1BQUFyVyxTQUFOO0FBQUEsTUFBQXNXLGFBQTRDO0FBQUE7QUFBQSxRQUE2RDtBQUFBO0FBQUE7QUFBQSxNQUFBQztBQUFBQSxRQUE4RCxxQkFBMUY7QUFBQTtBQUFBLFNBQUFBLGdCQUEzSTtBQUFBO0FBQUEsS0FBQW5RLFdBQXVRO0FBQUEsU0FBMEU7QUFBQSxLQUFBM1UsTUFBakI7QUFBQSxJQUFpRTtBQUFBO0FBQUEsVUFBcUU7QUFBQSxVQUFUO0FBQUEsTUFBQUEsUUFBaEI7QUFBQSxLQUFpRztBQUFBO0FBQUEsV0FBOEQ7QUFBQSxXQUFkO0FBQUEsT0FBQTJCLGNBQWhCO0FBQUE7QUFBQSxVQUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxTQUFBQSxjQUE3STtBQUFBO0FBQUEsU0FBd1Q7QUFBQSxLQUFBM0IsUUFBakI7QUFBQSxJQUFpRTtBQUFBO0FBQUEsVUFBcUU7QUFBQSxVQUFUO0FBQUEsTUFBQUEsUUFBaEI7QUFBQSxLQUFpRztBQUFBO0FBQUEsV0FBOEQ7QUFBQSxXQUFkO0FBQUEsV0FBaEI7QUFBQTtBQUFBLGNBQWhCO0FBQUE7QUFBQTtBQUFBLGFBQTdJO0FBQUE7QUFBQSxLQUFBK2tCLFVBQXhHO0FBQUEsU0FBMGM7QUFBQSxLQUFBL2tCLFFBQWpCO0FBQUEsSUFBaUU7QUFBQTtBQUFBLFVBQXFFO0FBQUEsVUFBVDtBQUFBLE1BQUFBLFFBQWhCO0FBQUEsS0FBaUc7QUFBQTtBQUFBLFdBQThEO0FBQUEsV0FBZDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUE3STtBQUFBO0FBQUEsS0FBQTRCO0FBQUFBLE9BQXhHO0FBQUEsVUFBeVc7QUFBQTtBQUFBO0FBQUEsT0FBMEc7QUFBQSxTQUFZO0FBQUEsV0FBb0I7QUFBQTtBQUFBLElBQXhFLE9BQWlDO0FBQUEsYUFBakMsMERBQWtKO0FBQUE7QUFBQSxZQTV5Qm5yRDtBQUFBLFlBQUFvakIsY0FBQXhpQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQWd6QmdEO0FBQUEsU0FBM0MsVUFBWSxlQUFpQjtBQUFBLElBQWpFLE9BQTZCLGVBQTdCLDRDQUFtSDtBQUFBO0FBQUEsWUFoekJwRjtBQUFBLFlBQUFnbUIsWUFBQXppQixNQUFBeEQsS0FBQUM7QUFBQUEsUUFBQSxJQW96QmpDO0FBQUEsSUFBViwrQkFBa0Msb0NBQXVKO0FBQUE7QUFBQSxTQUEvRCxVQUFZLGVBQWlCO0FBQUEsSUFBcEQsT0FBZ0IsZUFBaEIsd0NBQXNGO0FBQUE7QUFBQSxZQXB6QjlJO0FBQUEsWUFBQWltQixXQUFBMWlCLE1BQUF4RCxLQUFBQztBQUFBQSxRQUFBLElBd3pCakM7QUFBQSxJQUFWLCtCQUFrQyxvQ0FBdUo7QUFBQTtBQUFBLFNBQTlELFVBQVksY0FBZ0I7QUFBQSxJQUFuRCxPQUFnQixlQUFoQix3Q0FBcUY7QUFBQTtBQUFBO0FBQUEsU0F4ekI5STtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQWttQixhQUFBM2lCLE1BQUF4RCxLQUFBQztBQUFBQSxRQUFBMEQsV0E0ekIvQjtBQUFBLElBQThCO0FBQUEsYUFBd0M7QUFBQSxLQUFWLCtCQUFrQyxtQ0FBZ3FCO0FBQUE7QUFBQSxNQUFBMFUsU0FBem1CO0FBQUEsTUFBQTNELE9BQTZCO0FBQUEsVUFBa0M7QUFBQSxLQUFWO0FBQUEsZUFBd0Y7QUFBQSxnQkFBL0I7QUFBQSxlQUFtSjtBQUFBLDJCQUFuRSxVQUFZLHNDQUErWjtBQUFBO0FBQUE7QUFBQSxTQUEvVDtBQUFBLFNBQWpCO0FBQUEsSUFBViwrQkFBOEQsbUNBQTRSO0FBQUEsUUFBQUEsU0FBdk8scUNBQWdDO0FBQUEsSUFBVjtBQUFBLGNBQXNGLGVBQTdCO0FBQUEsY0FBa0o7QUFBQSw0QkFBcEUsVUFBWSxzQ0FBOEQ7QUFBQTtBQUFBLFlBNXpCL3RCO0FBQUEsWUFBQTBSLHFCQUFBNWlCLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0FnMEJSO0FBQUEsU0FBWSxrQkFBb0I7QUFBQSxJQUF2RCxPQUFnQixlQUFoQix3Q0FBaUg7QUFBQTtBQUFBLE9BQUFvbUIsV0RwMUJuSSxhQ29CaUQ7QUFBQSxZQUFBQyxvQkFBQTlpQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BbzBCUjtBQUFBLFNBQVksa0JBQW9CO0FBQUEsSUFBdkQsT0FBZ0IsZUFBaEIsd0NBQWdIO0FBQUE7QUFBQSxZQXAwQmpGO0FBQUEsWUFBQXNtQixrQkFBQS9pQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQXVtQixPQXcwQm5DO0FBQUEsS0FBQWxrQixPQUE2QjtBQUFBLFNBQWlEO0FBQUEsS0FBQW1rQixRQUFOO0FBQUEsSUFBbUUsT0FBbUU7QUFBQTtBQUFBO0FBQUEsYUFBL0UsVUFBWSwrQ0FBcUU7QUFBQTtBQUFBLFlBQUFDLGVBQUFsakIsTUFBQXhELEtBQUFDO0FBQUFBLElBSTVNLE9BQTBCLGVBQTFCLGdDQUF3QztBQUFBO0FBQUE7QUFBQSxTQTUwQlQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQTBtQixjQUFBbmpCLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBcUMsT0FnMUJuQyxXQUFZLFVBQVk7QUFBQSxLQUFBc2tCLFlBQTZDO0FBQUEsU0FBMEo7QUFBQSxLQUFBNWxCLE1BQWpCO0FBQUEsSUFBNkQ7QUFBQTtBQUFBLFVBQXFFO0FBQUEsVUFBVDtBQUFBLE1BQUFBLFFBQWhCO0FBQUEsS0FBZ0Y7QUFBQTtBQUFBLFdBQThEO0FBQUEsV0FBZDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUE1SDtBQUFBLElBQXBHO0FBQUE7QUFBQSxVQUE0VixXQUFZLFVBQVk7QUFBQSxNQUFBdUIsT0FBK0Q7QUFBQSxNQUFBa04sTUFBK0M7QUFBQTtBQUFBLFNBQUFsTixPQUF2SyxXQUFBa04sTUFBQTtBQUFBLFlBQThOO0FBQUEsSUFBViwrQkFBbUMsbUNBQXdLO0FBQUE7QUFBQTtBQUFBLE9BQXZGO0FBQUEsU0FBWSxnQ0FBc0M7QUFBQTtBQUFBLElBQTFFLE9BQWlCLGVBQWpCLHdDQUErRztBQUFBO0FBQUEsWUFoMUI5MkI7QUFBQSxZQUFBb1gsZ0JBQUFyakIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFxQyxPQW8xQm5DLFdBQVksVUFBWTtBQUFBLEtBQUFtTixNQUF3QyxXQUFZLFVBQVk7QUFBQSxLQUFBbE4sT0FBcUQ7QUFBQSxJQUE2RDtBQUFBLFlBQThDO0FBQUEsSUFBVjtBQUFBLEtBQW1EO0FBQUEsS0FBd0IsbUNBQW9LO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBbkY7QUFBQSxTQUFZLDhCQUFtQztBQUFBO0FBQUEsSUFBdEUsT0FBZ0IsZUFBaEIsd0NBQTBHO0FBQUE7QUFBQSxZQXAxQjFiO0FBQUEsWUFBQXVrQixnQkFBQXRqQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQXFDLE9BdzFCbkMsV0FBWSxVQUFZO0FBQUEsU0FBK0U7QUFBQSxTQUFsQjtBQUFBLEtBQUF5a0I7QUFBQUEsT0FBVjtBQUFBLFVBQStELFdBQVksVUFBWTtBQUFBO0FBQUEsS0FBQWhlLFFBQWdFO0FBQUEsSUFBMkQ7QUFBQTtBQUFBO0FBQUEsUUFBMEU7QUFBQTtBQUFBLFVBQVg7QUFBQSxLQUF0QjtBQUFBLE1BQXVIO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBQWllLEtBQThGO0FBQUEsU0FBcUM7QUFBQTtBQUFBLE9BQVY7QUFBQSxVQUFtQztBQUFBO0FBQUE7QUFBQSxZQUF1QjtBQUFBO0FBQUE7QUFBQSxJQUFqQyxtQ0FBOEc7QUFBQTtBQUFBO0FBQUEsU0F4MUIxcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGFBQUF6akIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFxQyxPQTQxQm5DLFdBQVksVUFBWTtBQUFBLFNBQStFO0FBQUEsU0FBbEI7QUFBQSxLQUFBeWtCO0FBQUFBLE9BQVY7QUFBQSxVQUErRCxXQUFZLFVBQVk7QUFBQTtBQUFBLEtBQUFoZSxRQUFnRTtBQUFBLElBQTBEO0FBQUEsYUFBdUI7QUFBQTtBQUFBLGFBQW9EO0FBQUEsS0FBVjtBQUFBO0FBQUEsV0FBNkQ7QUFBQSxXQUFWO0FBQUE7QUFBQSxjQUFOO0FBQUE7QUFBQSxJQUE3RixtQ0FBNk07QUFBQTtBQUFBLFlBNTFCdmQ7QUFBQSxZQUFBbWUsa0JBQUExakIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFxQyxPQWcyQm5DLFdBQVksVUFBWTtBQUFBLFNBQWlGLFVBQVk7QUFBQSxJQUFoRCxPQUE2QixlQUE3Qiw0Q0FBa0c7QUFBQTtBQUFBO0FBQUEsSUFBQTZrQixpQkRwM0JyTDtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsYUFBQTVqQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQXFDLE9BbzJCbkMsV0FBWSxVQUFZO0FBQUEsS0FBQW1OLE1BQXdDLFdBQVksVUFBWTtBQUFBLEtBQUExRyxRQUFzRDtBQUFBLElBQTJDO0FBQUE7QUFBQSxVQUFzRztBQUFBLFVBQXJCO0FBQUEsS0FBekM7QUFBQSxLQUF1SCxtQ0FBc1A7QUFBQTtBQUFBLFlBQTVLO0FBQUEsSUFBVjtBQUFBLGFBQW9FO0FBQUEsS0FBVjtBQUFBO0FBQUEsSUFBc0YsbUNBQXNDO0FBQUE7QUFBQTtBQUFBLFNBcDJCM2lCO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXNlLGdCQUFBN2pCLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBcUMsT0F3MkJuQyxXQUFZLFVBQVk7QUFBQSxLQUFBeUcsUUFBeUM7QUFBQSxJQUE0RDtBQUFBLGFBQXVCO0FBQUE7QUFBQSxhQUFzRDtBQUFBLEtBQVY7QUFBQTtBQUFBLFdBQWdFO0FBQUEsV0FBVjtBQUFBO0FBQUEsY0FBTjtBQUFBO0FBQUEsSUFBbEcsbUNBQXNNO0FBQUE7QUFBQSxZQUFBdWUsY0FBQTlqQixNQUFBeEQsS0FBQUM7QUFBQUEsUUFBQSxJQUl6VCxVQUFZO0FBQUEsSUFBbkMsT0FBZ0IsZUFBaEIsd0NBQXVFO0FBQUE7QUFBQSxZQTUyQnhDO0FBQUEsWUFBQXNuQixjQUFBL2pCLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBLElBZzNCcEI7QUFBQSxLQUFBdW5CLFNBQWI7QUFBQSxLQUFBamxCLE9BQTZDO0FBQUEsS0FBQWtsQixrQkFBcUQ7QUFBQSxLQUFBdmIsV0FBaUQ7QUFBQSxLQUFBaVosWUFBNkM7QUFBQSxLQUFBL1ksSUFBbUQ7QUFBQSxLQUFBc2IsWUFBbUU7QUFBQSxTQUE0RDtBQUFBLElBQXJCO0FBQUEsSUFBa0QsaURBQW1EO0FBQUE7QUFBQSxZQUFBQyxjQUFBbmtCLE1BQUF4RCxLQUFBQztBQUFBQSxRQUFBLElBSXphLFVBQVk7QUFBQSxJQUFuQyxPQUFnQixlQUFoQix3Q0FBdUU7QUFBQTtBQUFBLFlBcDNCeEM7QUFBQSxZQUFBMm5CLFNBQUFscEIsR0FBQThFO0FBQUFBO0FBQUFBLEtBQUEsSUF3M0J4QjtBQUFBLEtBQUFxa0IsSUFBVjtBQUFBLFNBQXVFO0FBQUEsSUFBViwrQkFBOEI7QUFBQTtBQUFBLEtBQUF4YixLQUFtQztBQUFBLEtBQUFBLE9BQXNCLG1DQUE0QjtBQUFBLElBQXhFO0FBQUEsY0FBd0s7QUFBQSxlQUE5RCx5QkFBNkI7QUFBQSxlQUE4QztBQUFBO0FBQUE7QUFBQSxJQUFBeWIsZ0JENTRCNVM7QUFBQSxTQ29CaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxxQkFBQUMsS0FBQWhvQixLQUFBQztBQUFBQTtBQUFBQSxLQUFBZ29CLGNBNDNCNUI7QUFBQSxLQUFBQyxrQkFBaUU7QUFBQSxLQUFBQyxjQUEyQztBQUFBLEtBQUFDLGlCQUEyRDtBQUFBLEtBQUE1Z0IsWUFBc0Q7QUFBQSxLQUFBNmdCO0FBQUFBLE9BQXNGO0FBQUE7QUFBQSxpQkFBQTdrQjtBQUFBQSxhQUFBLElBQXNLO0FBQUEsU0FBbkQsb0NBQUE1QyxHQUEyQixnQkFBc0I7QUFBQTtBQUFBLFVBQUEwbkIsWUFBaUg7QUFBQSxVQUFBQztBQUFBQSxZQUErRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUE4RTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFBL2tCO0FBQUFBLG9CQUF3RDtBQUFBLHlCQUFBNUMsSUFBQTtBQUFBLHFCQUFtRjtBQUFBLHFCQUE4QjtBQUFBO0FBQUEsb0JBQWU7QUFBQSxtQkFBRztBQUFBO0FBQUE7QUFBQSw0QkFBQTRDO0FBQUFBLG9CQUE4RSxPQUEwQztBQUFBLDZCQUEzRDtBQUFBLCtCQUFpQixnREFBK0M7QUFBQSxzQkFBVztBQUFBO0FBQUEsSUFBdUI7QUFBQTtBQUFBLEtBQUFnbEI7QUFBQUEsT0FBd1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBZ0csT0FBdUIsZUFBdkIsbURBQW1EO0FBQUE7QUFBQSxZQTUzQjkrQztBQUFBLFlBQUFDLGVBQUFuUixNQUFBOVQsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUFnNEJIO0FBQUEsU0FBakI7QUFBQSxLQUFBeW9CLFFBQVYsNkJBQXVFO0FBQUEsSUFBMkUsT0FBeUU7QUFBQTtBQUFBO0FBQUEsYUFBckYsVUFBWSxxREFBMkU7QUFBQTtBQUFBO0FBQUEsU0FoNEIvTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGVBQUFybUI7QUFBQUEsUUFBQStKLEtBbzRCcEM7QUFBQSxJQUE2QyxnQ0FBbUI7QUFBQSxRQUFBQSxPQUFvQjtBQUFBLElBQXFELGtDQUFtQjtBQUFBLFFBQUFBLE9BQW9CO0FBQUEsSUFBZ0Qsa0NBQW1CO0FBQUEsUUFBQUEsT0FBb0I7QUFBQSxJQUFnRCxrQ0FBbUI7QUFBQSxRQUFBQSxPQUFvQjtBQUFBLElBQThDLGtDQUFtQjtBQUFBLFFBQUFBLE9BQW9CO0FBQUEsSUFBZ0Q7QUFBQTtBQUFBLGNBQTRCLDRDQUFpRDtBQUFBO0FBQUEsWUFBQXVjLFFBQUFscEI7QUFBQUEsUUFBQTJNLEtBSWhqQjtBQUFBLElBQXdCLDBDQUE0Qiw0QkFBZ0I7QUFBQTtBQUFBLFlBeDRCaEM7QUFBQSxZQUFBd2MsYUFBQXZnQixTQUFBbEY7QUFBQUEsUUFBQSxJQTQ0QmpDO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQXlrQixJQUF1RTtBQUFBLE1BQUFqTSxJQUE0QjtBQUFBLFVBQWtGO0FBQUEsTUFBQTVhLE1BQVg7QUFBQSxVQUF3QywrQkFBZ0M7QUFBQSxLQUExRztBQUFBO0FBQUEsMEJBQXlJO0FBQUEscUJBQTJSO0FBQUE7QUFBQTtBQUFBLEtBQUE2bUIsTUFBNU47QUFBQSxLQUFBak0sTUFBNEI7QUFBQSxTQUFrRjtBQUFBLEtBQUE1YSxRQUFYO0FBQUEsU0FBd0MsaUNBQWdDO0FBQUEsSUFBMUcsdUVBQTJKO0FBQUE7QUFBQTtBQUFBLElBQUE4bkIsa0JEaDZCbGpCO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUEvWCxNQUFBO0FBQUEsU0NvQmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFnWSxZQUFBQztBQUFBQSxRQUFBLElBZzVCakM7QUFBQSxJQUFWLCtCQUEwQztBQUFBLFlBQTZCO0FBQUEsSUFBViwrQkFBOEI7QUFBQSxZQUFxQjtBQUFBLElBQVY7QUFBQSxLQUEyQywyREFBOFg7QUFBQSxZQUE1VTtBQUFBLElBQVYsaUNBQWlWO0FBQUE7QUFBQSxLQUFBbFIsSUFBeFM7QUFBQSxLQUFBdkksTUFBZ1A7QUFBQSxLQUFBQSxJQUFtQztBQUFBLEtBQUF3QixRQUFBO0FBQUE7QUFBQSxhQUExTjtBQUFBLEtBQVYsK0JBQW1EO0FBQUE7QUFBQSxVQUFxRjtBQUFBLFVBQTNCO0FBQUEsTUFBQUEsUUFBUDtBQUFBLE1BQUF4QixNQUFwQztBQUFBLEtBQW1DO0FBQUE7QUFBQTtBQUFBLEdBQXlKO0FBQUE7QUFBQSxTQWg1QnBlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUEwWixrQkFBQTVnQixTQUFBbEYsUUFBQXBELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFrcEIsVUFvNUJoQztBQUFBLEtBQUF6cUIsSUFBOEM7QUFBQSxTQUFnRTtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQTZGO0FBQUEsVUFBakI7QUFBQSxLQUFWO0FBQUE7QUFBQSxPQUFBMHFCLFFBQThFO0FBQUEsV0FBMkY7QUFBQTtBQUFBLFNBQWxEO0FBQUE7QUFBQTtBQUFBLHFCQUFBN1U7QUFBQUEsaUJBQUEsSUFBaUM7QUFBQSxhQUFlO0FBQUE7QUFBQTtBQUFBLE1BQWpFLCtCQUE4RixvQ0FBbThGO0FBQUE7QUFBQSxXQUFoMkY7QUFBQSxPQUFBOFU7QUFBQUEsU0FBakM7QUFBQTtBQUFBLDJCQUFBOVUsR0FBb0IsbUNBQVc7QUFBQSxXQUE0RTtBQUFBLE9BQUErVTtBQUFBQSxTQUFoQztBQUFBO0FBQUEsMkJBQUEvVSxHQUFvQixtQ0FBVTtBQUFBLE1BQXdGLE9BQStEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUEzRSxVQUFZLCtDQUFnc0Y7QUFBQTtBQUFBO0FBQUEsTUFBQWdWLE9BQTNtRixZQUFhO0FBQUEsVUFBbUQ7QUFBQSxLQUFWLCtCQUFrQyxvQ0FBbWhGO0FBQUE7QUFBQTtBQUFBLFFBQWg2RTtBQUFBLFVBQVksa0JBQXFCO0FBQUEsS0FBckUsT0FBYztBQUFBLHlCQUFkLGlEQUFvOEU7QUFBQTtBQUFBLFlBQTN6RTtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFBLFNBQWtGLFlBQWE7QUFBQSxVQUFtRDtBQUFBLEtBQVYsK0JBQWtDLG9DQUEycEU7QUFBQTtBQUFBO0FBQUEsUUFBMWhFO0FBQUEsVUFBWTtBQUFBLGVBQTZCO0FBQUE7QUFBQSxLQUE3RSxPQUFjO0FBQUE7QUFBQSw4QkFBZDtBQUFBO0FBQUE7QUFBQSxnQkFBOGpFO0FBQUE7QUFBQSxZQUE5NkQ7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBQSxTQUE2RSxZQUFhO0FBQUEsVUFBbUQ7QUFBQSxLQUFWLCtCQUFrQyxvQ0FBbXhEO0FBQUE7QUFBQSxVQUFobUQ7QUFBQTtBQUFBLFFBQWhFO0FBQUEsVUFBWSxxQkFBd0I7QUFBQTtBQUFBLEtBQXhFLE9BQWM7QUFBQSx5QkFBZCxtREFBb3NEO0FBQUE7QUFBQSxZQUF4aUQ7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBL0MsT0FBNkU7QUFBQSxNQUFBK0MsU0FBNkMsWUFBYTtBQUFBLFVBQW1EO0FBQUEsS0FBViwrQkFBa0Msc0NBQWcyQztBQUFBO0FBQUE7QUFBQSxRQUE1dUM7QUFBQSxVQUFZLHFCQUF3QjtBQUFBLEtBQXhFLE9BQWM7QUFBQTtBQUFBLGdDQUFkO0FBQUE7QUFBQTtBQUFBLGdCQUFneEM7QUFBQTtBQUFBLFlBQWpwQztBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFBLFNBQTJFLFlBQWE7QUFBQSxVQUFtRDtBQUFBLEtBQVYsK0JBQWtDLG9DQUF3L0I7QUFBQTtBQUFBO0FBQUEsUUFBbDRCO0FBQUEsVUFBWSxtQkFBc0I7QUFBQSxLQUF0RSxPQUFjO0FBQUEseUJBQWQsbURBQXM2QjtBQUFBO0FBQUEsWUFBenlCO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQUEsU0FBNEUsWUFBYTtBQUFBLFVBQW1EO0FBQUEsS0FBViwrQkFBa0Msb0NBQStvQjtBQUFBO0FBQUE7QUFBQSxRQUExaEI7QUFBQSxVQUFZLG9CQUF1QjtBQUFBLEtBQXZFLE9BQWM7QUFBQSx5QkFBZCxtREFBOGpCO0FBQUE7QUFBQSxZQUFoYztBQUFBLElBQVY7QUFBQTtBQUFBLFVBQTRZO0FBQUEsVUFBdEI7QUFBQSxLQUF3RTtBQUFBO0FBQUE7QUFBQSxLQUFBQSxTQUEvVyxZQUFhO0FBQUEsU0FBbUQ7QUFBQSxJQUFWLCtCQUFrQyxtQ0FBbVM7QUFBQTtBQUFBO0FBQUEsT0FBdEw7QUFBQSxTQUFZLHVCQUEwQjtBQUFBLElBQTFFLE9BQWM7QUFBQSx3QkFBZCxtREFBME47QUFBQTtBQUFBLFlBQUFDLGlCQUFBcm9CLEdBSTV6RyxxQkFBaUI7QUFBQSxPQUFBc29CLGtCRDU2Qm5CO0FBQUEsWUFBQUMsbUJBQUF2b0I7QUFBQUEsUUFBQSxJQ2c3QjZCO0FBQUEsSUFBaUIsbURBQUU7QUFBQTtBQUFBLFlBNTVCQztBQUFBLFlBQUF3b0IsZ0JBQUF4b0I7QUFBQUEsUUFBQSxJQWc2QmpDO0FBQUEsSUFBViwrQkFBMEM7QUFBQSxZQUFnQztBQUFBLElBQVYsK0JBQThCLG1DQUFtTDtBQUFBLFlBQXRKO0FBQUEsSUFBVjtBQUFBLEtBQTJDLDJEQUFxSDtBQUFBLFlBQWxFO0FBQUEsSUFBViwrQkFBZ0MsbUNBQTRDO0FBQUEsWUFBeEI7QUFBQSxJQUFtQixtQ0FBSztBQUFBO0FBQUEsWUFoNkJ0TztBQUFBLFlBQUF5b0IsYUFBQXpvQixHQUFBcU87QUFBQUE7QUFBQUEsS0FBQW5ELEtBbzZCckI7QUFBQSxLQUFBQSxPQUErQixtQ0FBNEI7QUFBQSxJQUFqRixrQ0FBcUcsc0NBQThPO0FBQUEsWUFBN007QUFBQSxJQUFWO0FBQUEsS0FBMkMsZ0VBQTRLO0FBQUEsWUFBekg7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUEwRDtBQUFBLEtBQWlDLDZDQUF3QztBQUFBO0FBQUEsWUFBM0I7QUFBQSxJQUFtQixzQ0FBUTtBQUFBO0FBQUEsWUFBQXdkLGdCQUFBQyxJQUFBQztBQUFBQTtBQUFBQSxLQUFBL29CLE1BSTVUO0FBQUE7QUFBQSxPQUFxQztBQUFBLFVBQWdDO0FBQUE7QUFBQSxJQUE1RjtBQUFBO0FBQUEsVUFBK007QUFBQSxVQUFqQztBQUFBLFVBQXJCO0FBQUEsS0FBdUYsbURBQW1OO0FBQUE7QUFBQTtBQUFBLEtBQUFBLFFBQWhMO0FBQUE7QUFBQSxPQUEwQixpQ0FBZ0M7QUFBQSxJQUFqRjtBQUFBLEtBQWdILHlEQUFpQjtBQUFBLFlBQWdELDZCQUFwQjtBQUFBLElBQWtCLDhDQUF3QjtBQUFBO0FBQUEsWUF4NkJ4WjtBQUFBLFlBQUFncEIsWUFBQXhtQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BNDZCUjtBQUFBLFNBQVksd0JBQXVDO0FBQUE7QUFBQSxJQUExRSxPQUFnQixlQUFoQix3Q0FBdUg7QUFBQTtBQUFBLFlBNTZCeEY7QUFBQSxZQUFBZ3FCLG9CQUFBem1CLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0FnN0JSO0FBQUEsU0FBWSx3QkFBK0M7QUFBQTtBQUFBLElBQWxGLE9BQWdCLGVBQWhCLHdDQUErSDtBQUFBO0FBQUEsWUFoN0JoRztBQUFBLFlBQUFpcUIsZUFBQTFtQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BbzdCUjtBQUFBLFNBQVksd0JBQTBDO0FBQUE7QUFBQSxJQUE3RSxPQUFnQixlQUFoQix3Q0FBMEg7QUFBQTtBQUFBLFlBcDdCM0Y7QUFBQSxZQUFBa3FCLGVBQUEzbUIsTUFBQXhELEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQXc3QlI7QUFBQSxTQUFZLHdCQUEwQztBQUFBO0FBQUEsSUFBN0UsT0FBZ0IsZUFBaEIsd0NBQTBIO0FBQUE7QUFBQSxZQXg3QjNGO0FBQUEsWUFBQW1xQixhQUFBNW1CLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0E0N0JSO0FBQUEsU0FBWSx3QkFBd0M7QUFBQTtBQUFBLElBQTNFLE9BQWdCLGVBQWhCLHdDQUF3SDtBQUFBO0FBQUEsWUE1N0J6RjtBQUFBLFlBQUFvcUIsY0FBQTdtQixNQUFBeEQsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9BZzhCUjtBQUFBLFNBQVksd0JBQXlDO0FBQUE7QUFBQSxJQUE1RSxPQUFnQixlQUFoQix3Q0FBeUg7QUFBQTtBQUFBLFlBaDhCMUY7QUFBQSxZQUFBcXFCLGlCQUFBOW1CLE1BQUF4RCxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0FvOEJSO0FBQUEsU0FBWSx3QkFBNEM7QUFBQTtBQUFBLElBQS9FLE9BQWdCLGVBQWhCLHdDQUE0SDtBQUFBO0FBQUE7QUFBQSxJQUFBc3FCLG1CRHg5QjlJO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFNDb0JpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGNBQUFscUI7QUFBQUE7QUFBQUEsS0FBQW1xQixnQkF3OEJsQztBQUFBLEtBQUFsckIsTUFBaUM7QUFBQSxLQUFBQyxPQUFnQztBQUFBLFNBQW9DO0FBQUEsSUFBViwrQkFBdUM7QUFBQTtBQUFBLEtBQUE4SSxRQUF3QjtBQUFBLEtBQUF1QyxTQUFrQztBQUFBLEtBQUFySCxZQUE4QjtBQUFBLFNBQThEO0FBQUEsSUFBVjtBQUFBLEtBQXdHO0FBQUE7QUFBQSxXQUFzRDtBQUFBLFdBQW1CLFFBQTlCO0FBQUE7QUFBQSxjQUEzQjtBQUFBLEtBQXZEO0FBQUEsY0FBNEs7QUFBQSxNQUFsQyxPQUFpQyxlQUFqQyxnREFBNHcxQjtBQUFBO0FBQUE7QUFBQSxVQUFucTFCO0FBQUEsVUFBVDtBQUFBLEtBQVYsK0JBQTRELHFDQUEwbjFCO0FBQUEsYUFBN2gxQjtBQUFBLEtBQWxDLE9BQWlDLGVBQWpDLGdEQUErajFCO0FBQUE7QUFBQSxZQUE3OTBCO0FBQUEsSUFBVjtBQUFBLEtBQTBHO0FBQUE7QUFBQSxXQUFzRDtBQUFBLFdBQW1CLFFBQTlCO0FBQUE7QUFBQSxjQUEzQjtBQUFBLEtBQXZELGlDQUFxaEIscUNBQSs0ekI7QUFBQTtBQUFBLE1BQUExQixPQUE5eDBCO0FBQUEsTUFBQWtDLE9BQThDO0FBQUEsVUFBZ0Q7QUFBQSxLQUFWLCtCQUFrQyxzQ0FBd3EwQjtBQUFBO0FBQUEsVUFBN2wwQjtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBLE1BQThFLE9BQWdCLGVBQWhCLDhDQUEwaTBCO0FBQUE7QUFBQTtBQUFBLFFBQTM5ekI7QUFBQSxVQUFZLGlCQUFtQjtBQUFBLEtBQXZELE9BQWdCLGVBQWhCLHlDQUFtL3pCO0FBQUE7QUFBQSxZQUFyMXpCO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQXRDLFlBQWlGO0FBQUEsTUFBQXNDLFNBQW1EO0FBQUEsVUFBZ0Q7QUFBQSxLQUFWO0FBQUEsTUFBdUMsb0RBQThvekI7QUFBQTtBQUFBLFVBQWprekI7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQSxNQUFtRixPQUFxQjtBQUFBLGVBQXJCLHFEQUF5Z3pCO0FBQUE7QUFBQTtBQUFBLFFBQWg3eUI7QUFBQSxVQUFZLGlCQUFtQjtBQUFBO0FBQUEsS0FBNUQsT0FBcUIsZUFBckIsZ0RBQTY4eUI7QUFBQTtBQUFBLFlBQWoxeUI7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBbkMsT0FBMEU7QUFBQSxNQUFBSCxjQUFtRDtBQUFBLE1BQUFJLFNBQW1EO0FBQUEsTUFBQUMsUUFBK0M7QUFBQSxVQUFvRTtBQUFBLEtBQWpCO0FBQUEsYUFBOEQ7QUFBQSxLQUFWO0FBQUEsTUFBdUMsMkNBQTgreEI7QUFBQTtBQUFBLE1BQUEyb0IsZUFBNzZ4QjtBQUFBLFVBQTJFO0FBQUEsVUFBVDtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBO0FBQUEsV0FBc0c7QUFBQSxPQUFBdlQsUUFBYjtBQUFBO0FBQUEsVUFBQUEsUUFBNEM7QUFBQTtBQUFBO0FBQUEsUUFBeUY7QUFBQSxVQUFZO0FBQUEsbUJBQXlCO0FBQUE7QUFBQSxLQUFuRixPQUFxQztBQUFBLGNBQXJDLHNEQUFzdHhCO0FBQUE7QUFBQSxZQUExanhCO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQXRWLFNBQTZFO0FBQUEsTUFBQW1DLFNBQThDO0FBQUEsTUFBQTlCLGNBQW9EO0FBQUEsTUFBQUMsY0FBNEQ7QUFBQSxNQUFBNUIsTUFBdUY7QUFBQSxLQUE4QjtBQUFBO0FBQUEsV0FBd0M7QUFBQSxXQUFSO0FBQUE7QUFBQSxjQUFoQjtBQUFBLEtBQXJFO0FBQUEsY0FBb0o7QUFBQSxNQUF2QjtBQUFBO0FBQUEsYUFBMkY7QUFBQSxLQUFoQjtBQUFBLEtBQXFFO0FBQUE7QUFBQSxXQUE4SztBQUFBLE9BQUFvcUI7QUFBQUEsU0FBdkg7QUFBQTtBQUFBO0FBQUEscUJBQUFqVztBQUFBQTtBQUFBQSxjQUFBLElBQW1EO0FBQUEsa0JBQWpCO0FBQUEsYUFBVjtBQUFBLHVCQUFvRTtBQUFBLHdCQUF5QjtBQUFBO0FBQUE7QUFBQSxXQUFnRTtBQUFBLE9BQUFlO0FBQUFBLFNBQVY7QUFBQSxZQUFvRTtBQUFBLGdCQUE4RDtBQUFBLE1BQXlDO0FBQUEsY0FBa0U7QUFBQSxNQUFmO0FBQUE7QUFBQSxLQUEyRixvREFBaS91QjtBQUFBO0FBQUEsWUFBajd1QjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUE1VCxTQUFxRjtBQUFBLE1BQUFtQyxTQUE4QztBQUFBLE1BQUF6RCxRQUErRTtBQUFBLEtBQThCO0FBQUE7QUFBQSxXQUF3QztBQUFBLFdBQVI7QUFBQTtBQUFBLGNBQWhCO0FBQUEsS0FBckU7QUFBQSxjQUFvSjtBQUFBLE1BQXZCO0FBQUE7QUFBQSxhQUEyRjtBQUFBLEtBQWhCO0FBQUEsS0FBK0Msb0RBQXlndUI7QUFBQTtBQUFBLFlBQTE4dEI7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBc0IsU0FBMEU7QUFBQSxNQUFBbUMsU0FBOEM7QUFBQSxVQUFrRTtBQUFBLEtBQWY7QUFBQSxLQUE4QyxpREFBMnZ0QjtBQUFBO0FBQUEsWUFBOXJ0QjtBQUFBLElBQVY7QUFBQSxhQUF3RjtBQUFBLEtBQXRCO0FBQUEsTUFBa0QsaURBQW9sdEI7QUFBQTtBQUFBLE1BQUF0QyxjQUF0aHRCO0FBQUEsVUFBc0Q7QUFBQSxLQUFWO0FBQUEsTUFBdUMsaURBQW04c0I7QUFBQTtBQUFBLFVBQS95c0I7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQSxVQUFBbUosV0FBNkQ7QUFBQTtBQUFBO0FBQUEsWUFBbUU7QUFBQSxPQUFBQTtBQUFBQSxTQUFqRDtBQUFBLFdBQVcsZUFBaUI7QUFBQSxhQUFqSjtBQUFBLEtBQXRCLE9BQXFCO0FBQUEsY0FBckIsb0RBQXM0c0I7QUFBQTtBQUFBLGFBQXBvc0I7QUFBQSxJQUFWO0FBQUEsS0FBaUU7QUFBQSxNQUF1QixpREFBc2pzQjtBQUFBO0FBQUEsTUFBQW5KLGNBQXgvckI7QUFBQSxXQUFzRDtBQUFBLEtBQVYsZ0NBQXVDLHNDQUFxNnJCO0FBQUE7QUFBQSxXQUExd3JCO0FBQUEsV0FBakI7QUFBQSxLQUFWO0FBQUEsVUFBQW1KLFdBQTZEO0FBQUE7QUFBQTtBQUFBLFlBQWtFO0FBQUEsT0FBQUE7QUFBQUEsU0FBaEQ7QUFBQSxXQUFXLGNBQWdCO0FBQUEsY0FBaEo7QUFBQSxLQUF0QixPQUFxQjtBQUFBLGNBQXJCLHFEQUFpMnJCO0FBQUE7QUFBQSxhQUFobXJCO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQW5KLGNBQWdGO0FBQUEsTUFBQXNDLFNBQW1EO0FBQUEsTUFBQWQsV0FBaUQ7QUFBQSxLQUF5QztBQUFBLE1BQXVrQztBQUFBLE9BQXVDLE9BQWtDO0FBQUEsZ0JBQWxDLDJEQUEreG9CO0FBQUE7QUFBQTtBQUFBLFNBQTdxb0I7QUFBQTtBQUFBO0FBQUEsT0FBQTBuQixPQUE3QztBQUFBLFlBQW1HO0FBQUEsWUFBakI7QUFBQSxNQUFWO0FBQUEsT0FBOEQsd0NBQW9sb0I7QUFBQTtBQUFBLE9BQUFDLGNBQXZob0I7QUFBQSxZQUFnQztBQUFBLE1BQVY7QUFBQSxnQkFBMkY7QUFBQSxpQkFBN0I7QUFBQSxnQkFBOEo7QUFBQTtBQUFBO0FBQUEsaUJBQXZFLFVBQVksMkNBQWcybkI7QUFBQTtBQUFBLEtBQS8ycUI7QUFBQTtBQUFBLE9BQUFDLGVBQXFtQjtBQUFBLFlBQW9DO0FBQUEsTUFBVjtBQUFBLE9BQTBDLHdDQUFzc3BCO0FBQUE7QUFBQSxPQUFBQyxjQUF2b3BCO0FBQUEsT0FBQUYsWUFBMEM7QUFBQSxZQUF1QztBQUFBLE1BQVY7QUFBQSxnQkFBa0c7QUFBQSxpQkFBcEM7QUFBQSxnQkFBNEs7QUFBQTtBQUFBO0FBQUEsaUJBQTlFLFVBQVksbURBQXc1b0I7QUFBQTtBQUFBO0FBQUEsTUFBQWpULFNBQTEwcUI7QUFBQSxXQUFrRTtBQUFBLE1BQUFyWCxRQUFoQjtBQUFBLEtBQXlEO0FBQUE7QUFBQSxZQUFxRTtBQUFBLFlBQVQ7QUFBQSxPQUFBQSxRQUFoQjtBQUFBLE1BQXlGO0FBQUE7QUFBQSxhQUE2RDtBQUFBLGFBQWI7QUFBQSxZQUFoQjtBQUFBO0FBQUEsZUFBaEI7QUFBQTtBQUFBO0FBQUEsY0FBckk7QUFBQSxLQUFoRztBQUFBLE1BQXlkLE9BQStCO0FBQUEsZUFBL0Isc0RBQXMxcEI7QUFBQSxjQUE1NnBCLFVBQVk7QUFBQSxLQUFuRCxPQUErQixlQUEvQixrREFBbTlwQjtBQUFBO0FBQUEsYUFBenduQjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFpRCxjQUFnRjtBQUFBLE1BQUE5QixjQUF3RDtBQUFBLE1BQUFzQyxTQUFtRDtBQUFBLFdBQWdEO0FBQUEsS0FBVjtBQUFBLGVBQXNDO0FBQUEsZUFBNkQsMkRBQSs4bUI7QUFBQTtBQUFBLGFBQTkzbUI7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBdEMsY0FBa0Y7QUFBQSxNQUFBc0MsU0FBbUQ7QUFBQSxNQUFBTCxPQUE2QztBQUFBLE1BQUFxbkIsWUFBb0Q7QUFBQSxXQUFpRDtBQUFBLEtBQVY7QUFBQSxNQUF1QyxvREFBb2xtQjtBQUFBO0FBQUEsTUFBQWpuQixPQUExaG1CO0FBQUEsTUFBQWtuQixhQUF3QztBQUFBLFdBQTZEO0FBQUEsV0FBVjtBQUFBLE1BQUFuRDtBQUFBQSxRQUFWO0FBQUE7QUFBQSxXQUE0RDtBQUFBLFlBQVc7QUFBQSxjQUFvQjtBQUFBO0FBQUEsV0FBNkU7QUFBQSxLQUFWO0FBQUE7QUFBQSxPQUFBb0QsVUFBc0U7QUFBQSxZQUF5RTtBQUFBLFlBQWQ7QUFBQSxNQUFuQjtBQUFBLE1BQXVFLDhDQUFzbmxCO0FBQUE7QUFBQTtBQUFBLFdBQXZobEI7QUFBQSxNQUFBM3FCLFFBQWhCO0FBQUEsS0FBOEQ7QUFBQTtBQUFBLFlBQWtFO0FBQUEsT0FBQUEsUUFBWDtBQUFBLE1BQTJDO0FBQUE7QUFBQSxhQUFxRTtBQUFBLGFBQVQ7QUFBQSxRQUFBQSxRQUFoQjtBQUFBLE9BQTBFO0FBQUE7QUFBQSxjQUE4RDtBQUFBLGFBQTlCLGVBQWdCO0FBQUE7QUFBQSxnQkFBaEM7QUFBQTtBQUFBO0FBQUEsZUFBdEg7QUFBQTtBQUFBO0FBQUEsY0FBbEc7QUFBQSxLQUFyRztBQUFBO0FBQUEsWUFBMGQ7QUFBQSxZQUExQztBQUFBLFlBQWpCO0FBQUEsTUFBUCxPQUFxRjtBQUFBLGVBQXJGLG9EQUFzcWtCO0FBQUE7QUFBQSxjQUExaWtCO0FBQUEsS0FBVjtBQUFBO0FBQUEsT0FBQW9OLFNBQXdFO0FBQUEsWUFBZ0U7QUFBQSxNQUFWO0FBQUEsZ0JBQXdDO0FBQUEsZ0JBQW9LO0FBQUE7QUFBQTtBQUFBLGlCQUFuRjtBQUFBLG1CQUFZO0FBQUEsMkJBQWl6akI7QUFBQTtBQUFBO0FBQUEsTUFBQUEsV0FBbHRqQjtBQUFBLFdBQTJEO0FBQUEsS0FBVjtBQUFBLGVBQXdDO0FBQUEsZUFBb0s7QUFBQTtBQUFBO0FBQUEsZ0JBQW5GO0FBQUEsa0JBQVk7QUFBQSwwQkFBNGhqQjtBQUFBO0FBQUEsYUFBeDdpQjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUExUCxJQUF1RTtBQUFBLE1BQUEwRSxTQUE2QztBQUFBLE1BQUFqQixjQUFxRDtBQUFBLE1BQUFzQyxTQUFtRDtBQUFBLE1BQUFwQixXQUFpRDtBQUFBLE1BQUFxbEIsUUFBbUQ7QUFBQSxXQUFzRDtBQUFBLEtBQVY7QUFBQTtBQUFBLE9BQUExbkIsUUFBOEI7QUFBQSxPQUFBMG5CLFVBQW9FO0FBQUEsTUFBOUMscUNBQTJGO0FBQUEsZUFBb0U7QUFBQSxNQUFWO0FBQUEsT0FBdUMsc0VBQXMyaEI7QUFBQTtBQUFBO0FBQUEsU0FBaHZoQjtBQUFBLFdBQVk7QUFBQTtBQUFBO0FBQUEsYUFBcUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQTlFLE9BQXFCO0FBQUEsZUFBckIsbURBQTZ3aEI7QUFBQTtBQUFBO0FBQUEsTUFBQWtEO0FBQUFBLFFBQXptaEI7QUFBQTtBQUFBLFdBQStEO0FBQUEsS0FBVjtBQUFBO0FBQUE7QUFBQSxTQUFtVTtBQUFBLFdBQVk7QUFBQTtBQUFBO0FBQUEsYUFBa0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQTNFLE9BQXFCO0FBQUEsZUFBckIsbURBQTh3Z0I7QUFBQTtBQUFBO0FBQUEsTUFBQTVxQixRQUE3Z2hCO0FBQUEsTUFBQTBuQixVQUFvRTtBQUFBLEtBQTlDO0FBQUEsTUFBMkY7QUFBQSxLQUF1RCxrRUFBcTJnQjtBQUFBO0FBQUEsYUFBL21nQjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUF2bUIsY0FBZ0Y7QUFBQSxNQUFBMkMsVUFBc0Q7QUFBQSxNQUFBTCxTQUFpRDtBQUFBLE1BQUFvbkIsY0FBcUQ7QUFBQTtBQUFBLFFBQXlKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBbkM7QUFBQTtBQUFBLFFBQWxCO0FBQUEsV0FBM0M7QUFBQSxNQUFBQyxZQUFyQjtBQUFBLFdBQXlLO0FBQUEsS0FBVjtBQUFBO0FBQUEsT0FBQWxyQixJQUFzRDtBQUFBLFlBQXdJO0FBQUEsTUFBOUY7QUFBQTtBQUFBLGlCQUFBZ0s7QUFBQUE7QUFBQUEsVUFBQSxJQUErRDtBQUFBLGNBQWY7QUFBQSxTQUFsQjtBQUFBLFNBQThEO0FBQUE7QUFBQTtBQUFBLE1BQW1DLHdDQUEyK2U7QUFBQTtBQUFBO0FBQUEsTUFBQW1oQixhQUE3NmU7QUFBQTtBQUFBLFFBQW9MO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEvQztBQUFBO0FBQUEsUUFBbkQ7QUFBQSxVQUFZLGdCQUFrQjtBQUFBO0FBQUEsS0FBekUsT0FBbUM7QUFBQSxjQUFuQyxzREFBczRlO0FBQUE7QUFBQSxhQUFqcmU7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBempCLFVBQWtGO0FBQUEsTUFBQW5HLGNBQXNEO0FBQUE7QUFBQSxRQUEwRTtBQUFBO0FBQUE7QUFBQSxNQUFBaUIsV0FBckI7QUFBQSxNQUFBcUIsU0FBdUY7QUFBQSxXQUFnRDtBQUFBLEtBQVY7QUFBQSxNQUF1QywyREFBMDFkO0FBQUE7QUFBQTtBQUFBLFFBQWp2ZDtBQUFBLFVBQVk7QUFBQSxxQkFBZ0M7QUFBQTtBQUFBLEtBQXpFLE9BQXFCLGVBQXJCLG1EQUE4d2Q7QUFBQTtBQUFBLGFBQTduZDtBQUFBLElBQVY7QUFBQSxLQUFnRSxpREFBdWtkO0FBQUEsYUFBNWdkO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQUEsVUFBZ0c7QUFBQSxXQUF1RTtBQUFBLFdBQVg7QUFBQSxLQUF0QjtBQUFBLE1BQStELHFEQUFpMWM7QUFBQSxjQUF0eGM7QUFBQSxLQUFWO0FBQUEsTUFBdUQsMkRBQXl1YztBQUFBLFNBQUF1bkIsTUFBenBjO0FBQUEsS0FBbUQ7QUFBQTtBQUFBLE9BQUFDLFdBQXlDO0FBQUEsT0FBQUMsWUFBbUQ7QUFBQTtBQUFBLFNBQXdFO0FBQUE7QUFBQSxZQUFYO0FBQUEsTUFBdEI7QUFBQSxPQUFxSDtBQUFBLE9BQXFDO0FBQUE7QUFBQTtBQUFBLEtBQWlGLE9BQXVCO0FBQUEsY0FBdkIsMkRBQXd2YjtBQUFBO0FBQUEsYUFBeHJiO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQTFrQixZQUEwRjtBQUFBLE1BQUEya0IsVUFBc0Q7QUFBQTtBQUFBLFFBQTRHO0FBQUEsbUJBQTJDO0FBQUE7QUFBQSxLQUF0RjtBQUFBLE1BQXFIO0FBQUEsS0FBc0QsaURBQXMwYTtBQUFBO0FBQUEsYUFBendhO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQTdwQixTQUE0RTtBQUFBLE1BQUFILGNBQW1EO0FBQUEsTUFBQXNDLFVBQW1EO0FBQUEsV0FBZ0Q7QUFBQSxLQUFWO0FBQUEsTUFBd0Q7QUFBQSxNQUF3QixxREFBMitaO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBLzRaO0FBQUEsVUFBWTtBQUFBLG9CQUEwQjtBQUFBO0FBQUEsS0FBbkUsT0FBcUI7QUFBQSxjQUFyQixvREFBNDZaO0FBQUE7QUFBQSxhQUExeVo7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBdEMsZUFBbUY7QUFBQSxNQUFBc0MsVUFBbUQ7QUFBQSxXQUFnRDtBQUFBLEtBQVY7QUFBQSxlQUFvRTtBQUFBLE1BQVo7QUFBQSxNQUFtRCxxREFBNmhaO0FBQUE7QUFBQTtBQUFBLFdBQXA0WTtBQUFBLFdBQW5DO0FBQUEsTUFBQTJuQjtBQUFBQSxRQUF0RDtBQUFBLFVBQW9CO0FBQUEsV0FBdUs7QUFBQSxLQUFqRDtBQUFBLGNBQTBJO0FBQUEsS0FBN0IsT0FBcUI7QUFBQSxjQUFyQixxREFBc3VZO0FBQUE7QUFBQSxhQUE5b1k7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBQyxVQUErRDtBQUFBLE1BQUE5cEIsU0FBaUQ7QUFBQSxNQUFBa0MsVUFBOEM7QUFBQSxNQUFBOFksT0FBNkM7QUFBQSxLQUE0QztBQUFBO0FBQUEsTUFBQThLO0FBQUFBLFFBQXdEO0FBQUE7QUFBQSxrQkFBQTdrQjtBQUFBQSxVQUF3RTtBQUFBLFdBQTJELE9BQTRDLFFBQTVDLG9DQUFtRTtBQUFBLFVBQUg7QUFBQSxTQUFHO0FBQUEsV0FBdVA7QUFBQSxLQUFoUDtBQUFBO0FBQUEsZ0JBQUFsQjtBQUFBQTtBQUFBQSxTQUFBZ2M7QUFBQUEsV0FBK0M7QUFBQSxTQUFBQSxhQUFtSDtBQUFBO0FBQUEsV0FBekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUE5QztBQUFBLFFBQWlKO0FBQUEsT0FBRTtBQUFBO0FBQUEsS0FBa0MscURBQTQ0VztBQUFBO0FBQUEsYUFBNzBXO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQWhjLFNBQWtGO0FBQUEsTUFBQW1DLFVBQThDO0FBQUEsTUFBQTZuQixTQUErQztBQUFBLE1BQUFDO0FBQUFBLFFBQTBEO0FBQUEsV0FBd0I7QUFBQSxXQUF1QztBQUFBLEtBQThDO0FBQUEsTUFBd0I7QUFBQSxLQUE2RTtBQUFBLEtBQXlDO0FBQUE7QUFBQSxXQUF3RjtBQUFBLFdBQVg7QUFBQSxLQUF0QixnQ0FBNkU7QUFBQSxLQUFnRCxxREFBK3JWO0FBQUE7QUFBQSxhQUE3blY7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBcHFCLGVBQXFGO0FBQUEsTUFBQXNDLFVBQW1EO0FBQUEsV0FBZ0Q7QUFBQSxLQUFWO0FBQUEsTUFBdUMscURBQWs3VTtBQUFBO0FBQUEsV0FBOXRVO0FBQUEsV0FBbkM7QUFBQSxNQUFBMm5CO0FBQUFBLFFBQXhEO0FBQUEsVUFBc0I7QUFBQSxXQUFtSztBQUFBLEtBQTdDO0FBQUEsY0FBMUs7QUFBQSxLQUE3QixPQUFxQjtBQUFBLGNBQXJCLHFEQUFvM1U7QUFBQTtBQUFBLGFBQTFpVTtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUExdEIsTUFBdUU7QUFBQSxNQUFBeUQsZUFBZ0Q7QUFBQSxNQUFBMkMsWUFBc0Q7QUFBQSxNQUFBMG5CLFVBQW9EO0FBQUEsTUFBQS9uQixVQUFpRDtBQUFBLE1BQUFnb0I7QUFBQUEsUUFBcUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFnRTtBQUFBLEtBQVY7QUFBQSxNQUF1QyxtREFBZ3BUO0FBQUEsS0FBdmtUO0FBQUE7QUFBQSxZQUFxRDtBQUFBLE9BQUFDLFlBQUYsUUFBbkI7QUFBQTtBQUFBLFVBQUFBLFlBQTBFLFFBQW5CO0FBQUE7QUFBQSxNQUFBQztBQUFBQSxRQUErQztBQUFBLFdBQXlCO0FBQUE7QUFBQSxZQUE0QjtBQUFBO0FBQUE7QUFBQSxXQUFnRDtBQUFBO0FBQUEsWUFBb0I7QUFBQTtBQUFBO0FBQUEsS0FBc0csT0FBbUM7QUFBQSwyQ0FBbkMsOEJBQWt1UztBQUFBO0FBQUEsYUFBdHFTO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQWp1QixNQUEwRTtBQUFBLE1BQUF5RCxlQUFnRDtBQUFBLE1BQUEyQyxZQUFzRDtBQUFBLE1BQUFPLGVBQXlEO0FBQUEsTUFBQVosVUFBc0Q7QUFBQSxNQUFBZ29CO0FBQUFBLFFBQXlEO0FBQUEsV0FBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBcUY7QUFBQSxLQUFWO0FBQUEsTUFBdUMscURBQStzUjtBQUFBO0FBQUEsV0FBMWdSO0FBQUE7QUFBQSxRQUF2RTtBQUFBLFVBQVk7QUFBQTtBQUFBLFlBQXdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUE5RSxPQUFtQjtBQUFBO0FBQUEsc0JBQW5CO0FBQUE7QUFBQTtBQUFBLGlCQUEyblI7QUFBQTtBQUFBLGFBQXo4UTtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUEvdEIsTUFBMEU7QUFBQSxNQUFBeUQsZUFBZ0Q7QUFBQSxNQUFBc0MsVUFBbUQ7QUFBQSxXQUFnRDtBQUFBLEtBQVY7QUFBQSxNQUF1QyxxREFBeXRRO0FBQUE7QUFBQTtBQUFBLFFBQTFsUTtBQUFBLFVBQVk7QUFBQSxpQkFBd0I7QUFBQTtBQUFBLEtBQTlFLE9BQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFBbkI7QUFBQTtBQUFBO0FBQUEsaUJBQW9vUTtBQUFBO0FBQUEsYUFBdi9QO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQS9GLE1BQTRFO0FBQUEsTUFBQXlELGVBQWdEO0FBQUEsTUFBQXNDLFVBQW1EO0FBQUEsV0FBZ0Q7QUFBQSxLQUFWO0FBQUEsTUFBdUMseUNBQXF3UDtBQUFBO0FBQUE7QUFBQSxRQUEvb1A7QUFBQSxVQUFZO0FBQUEsaUJBQTBCO0FBQUE7QUFBQSxLQUFoRixPQUFtQjtBQUFBO0FBQUEsc0JBQW5CO0FBQUE7QUFBQTtBQUFBLGlCQUF5clA7QUFBQTtBQUFBLGFBQTFpUDtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUEvRixNQUF3RTtBQUFBLE1BQUF5RCxlQUFnRDtBQUFBLE1BQUFzQyxVQUFtRDtBQUFBLEtBQXNDO0FBQUEsTUFBdUIscURBQTQwTztBQUFBLGNBQWh4TztBQUFBLEtBQVY7QUFBQSxNQUF1QywwQ0FBbXZPO0FBQUE7QUFBQTtBQUFBLFFBQXBuTztBQUFBLFVBQVk7QUFBQSxpQkFBc0I7QUFBQTtBQUFBLEtBQTVFLE9BQW1CO0FBQUE7QUFBQSxzQkFBbkI7QUFBQTtBQUFBO0FBQUEsaUJBQThwTztBQUFBO0FBQUEsYUFBbGhPO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQS9GLE1BQXlFO0FBQUEsTUFBQXlELGVBQWdEO0FBQUEsTUFBQXNDLFVBQW1EO0FBQUEsV0FBNEQ7QUFBQSxLQUF0QjtBQUFBLE1BQWtELDBDQUF3eE47QUFBQSxjQUFydE47QUFBQSxLQUFWO0FBQUEsTUFBdUMsMENBQXdyTjtBQUFBO0FBQUE7QUFBQSxRQUExak47QUFBQSxVQUFZO0FBQUEsaUJBQXVCO0FBQUE7QUFBQSxLQUE3RSxPQUFtQjtBQUFBO0FBQUEsc0JBQW5CO0FBQUE7QUFBQTtBQUFBLGlCQUFvbU47QUFBQTtBQUFBLGFBQXY5TTtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUF0QyxlQUFtRjtBQUFBLE1BQUFzQyxVQUFtRDtBQUFBLFdBQWdEO0FBQUEsS0FBVjtBQUFBLE1BQXVDLHFEQUE4d007QUFBQTtBQUFBLFdBQW5uTTtBQUFBO0FBQUEsUUFBaEU7QUFBQSxVQUFZO0FBQUEsWUFBcUI7QUFBQTtBQUFBLEtBQTlELE9BQXFCO0FBQUEsY0FBckIscURBQWd0TTtBQUFBO0FBQUEsYUFBcGpNO0FBQUEsSUFBVjtBQUFBLEtBQWtFLGlEQUE0L0w7QUFBQSxhQUFqOEw7QUFBQSxJQUFWO0FBQUEsU0FBQStFLGFBQTBGO0FBQUEsS0FBd0QsT0FBZ0M7QUFBQSw2QkFBaEMsaURBQXl6TDtBQUFBO0FBQUEsYUFBdHZMO0FBQUEsSUFBVjtBQUFBLEtBQXFFLGlEQUEyckw7QUFBQSxhQUFob0w7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBMUYsYUFBdUY7QUFBQSxNQUFBVyxVQUFtRDtBQUFBLEtBQWtDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBODlLO0FBQUE7QUFBQSxhQUFqM0s7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBNEMsY0FBd0Y7QUFBQSxNQUFBUyxjQUE0RDtBQUFBLE1BQUFyRCxVQUFnRjtBQUFBLFdBQW1GO0FBQUEsV0FBakI7QUFBQSxLQUFWO0FBQUEsTUFBdUY7QUFBQSxLQUF3SCxPQUEwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBdEU7QUFBQSxnQkFBWSx3REFBZzVKO0FBQUE7QUFBQSxhQUEveko7QUFBQSxJQUFWO0FBQUEsY0FBK0g7QUFBQSxLQUF6QyxPQUF3QyxlQUF4QyxpREFBbXZKO0FBQUE7QUFBQSxhQUE1b0o7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBQSxVQUEwRztBQUFBLE1BQUFrRixnQkFBc0Q7QUFBQSxNQUFBaWpCLGdCQUF5RDtBQUFBLE1BQUE5aEIsYUFBa0U7QUFBQSxNQUFBK2hCLFlBQThEO0FBQUEsV0FBeUQ7QUFBQSxLQUFWO0FBQUEsTUFBdUM7QUFBQTtBQUFBLFlBQStIO0FBQUEsWUFBM0M7QUFBQSxNQUFrRSxxQ0FBaWxJO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBaC9IO0FBQUEsV0FBK0IsVUFBVztBQUFBLFdBQStELFVBQVc7QUFBQSxLQUEzRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBQXU5SDtBQUFBO0FBQUEsYUFBenlIO0FBQUEsSUFBVjtBQUFBLEtBQXNFO0FBQUEsS0FBNEQscUNBQWlySDtBQUFBO0FBQUEsYUFBN2tIO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQW51QixNQUE2RTtBQUFBLE1BQUF5RCxlQUFnRDtBQUFBO0FBQUEsUUFBK0U7QUFBQTtBQUFBO0FBQUEsTUFBQXNxQixnQkFBckI7QUFBQSxNQUFBaG9CLFVBQXdGO0FBQUEsV0FBeUc7QUFBQTtBQUFBLFFBQWxEO0FBQUE7QUFBQTtBQUFBLG9CQUFBOFA7QUFBQUEsZ0JBQUEsSUFBaUM7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBLEtBQWpFO0FBQUEsTUFBa0cscURBQWdzRztBQUFBO0FBQUEsV0FBeGxHO0FBQUEsTUFBQThVO0FBQUFBLFFBQWpDO0FBQUE7QUFBQSwwQkFBQTlVLEdBQW9CLG1DQUFXO0FBQUEsV0FBZ0Y7QUFBQSxNQUFBK1U7QUFBQUEsUUFBaEM7QUFBQTtBQUFBLDBCQUFBL1UsR0FBb0IsbUNBQVU7QUFBQSxLQUE2RixPQUFvRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBaEY7QUFBQSxnQkFBWTtBQUFBLHdCQUErNkY7QUFBQTtBQUFBLGFBQW4xRjtBQUFBLElBQVY7QUFBQTtBQUFBLFdBQTZHO0FBQUEsTUFBQW5JLElBQW5DO0FBQUEsS0FBd0csT0FBZ0M7QUFBQTtBQUFBO0FBQUEsY0FBaEM7QUFBQTtBQUFBLHFCQUEycUY7QUFBQTtBQUFBLGFBQS9sRjtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFsQyxZQUFxRjtBQUFBLE1BQUFrRTtBQUFBQSxRQUErQztBQUFBLE1BQUFwTixRQUFrRTtBQUFBO0FBQUEsUUFBNkI7QUFBQSxXQUFnQztBQUFBO0FBQUEsS0FBcEY7QUFBQSxNQUEwWCxPQUFnQztBQUFBLHlCQUFoQyw2Q0FBZ2tFO0FBQUE7QUFBQSxXQUE5b0U7QUFBQTtBQUFBLFFBQXpFO0FBQUEsVUFBWSxxQkFBdUI7QUFBQTtBQUFBLFdBQXBFO0FBQUEsS0FBdkMsT0FBc0M7QUFBQSxjQUF0QyxnREFBK3hFO0FBQUE7QUFBQSxhQUEvL0Q7QUFBQSxJQUFWO0FBQUEsS0FBOEYsT0FBZ0M7QUFBQSw2QkFBaEMsNkNBQTI2RDtBQUFBLGFBQTcyRDtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFxSixhQUFtRjtBQUFBLE1BQUFDLGlCQUF3RDtBQUFBLE1BQUE3RixVQUFtRDtBQUFBLEtBQW1EO0FBQUEsY0FBeUQ7QUFBQSxLQUFWO0FBQUEsZUFBNEM7QUFBQSxlQUE0QywrQ0FBKy9DO0FBQUE7QUFBQSxhQUF2N0M7QUFBQSxJQUFWO0FBQUEsS0FBeXZDO0FBQUE7QUFBQSxXQUFxRztBQUFBLFdBQXRCO0FBQUEsS0FBc0U7QUFBQTtBQUFBO0FBQUEsS0FBQXRDLGVBQXR6QztBQUFBLEtBQUFzSSxnQkFBNEQ7QUFBQSxLQUFBM0YsWUFBOEM7QUFBQSxLQUFBdkMsU0FBaUQ7QUFBQSxLQUFBa0MsVUFBOEM7QUFBQSxVQUFnRDtBQUFBLElBQVY7QUFBQTtBQUFBLFdBQXdGO0FBQUEsTUFBQW9ULFdBQUw7QUFBQSxLQUE0RixPQUFzRjtBQUFBO0FBQUE7QUFBQSxjQUFsRztBQUFBLGdCQUFZO0FBQUE7QUFBQSx3QkFBMjhCO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBanhCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUFBNFUsZ0JBQTVDO0FBQUEsS0FBQS9HLGdCQUF3SDtBQUFBLFVBQW9DO0FBQUEsSUFBVjtBQUFBO0FBQUEsV0FBMkY7QUFBQSxXQUFqQjtBQUFBLE1BQUFvSDtBQUFBQSxRQUFWO0FBQUEsV0FBOEQ7QUFBQSxXQUFvQjtBQUFBLE1BQUFDLGVBQXdEO0FBQUEsS0FBc0QsdURBQTJhO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBdlQ7QUFBQSxTQUFZO0FBQUE7QUFBQTtBQUFBLFVBQS9DO0FBQUEsSUFBUixPQUFtQyxlQUFuQywyQ0FBa1c7QUFBQTtBQUFBO0FBQUEsU0F4OEJuczJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxtQkFBQXR1QixHQUFBOEUsTUFBQXhELEtBQUFxRCxVQUFBcEQ7QUFBQUEsUUFBQSxJQTQ4QmpDO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQWd0QixNQUE4QztBQUFBLE1BQUFsa0IsUUFBbUM7QUFBQTtBQUFBLFFBQXlEO0FBQUEsV0FBdUI7QUFBQSxXQUFzQztBQUFBLEtBQTVDLG1DQUEyM0g7QUFBQTtBQUFBLFlBQW54SDtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQXNFO0FBQUEsTUFBQW9MLE1BQVYsaUNBQTJDO0FBQUEsTUFBQWpJLFdBQWtDO0FBQUEsTUFBQWdoQixRQUE4QztBQUFBLEtBQTBEO0FBQUEsS0FBOEIseUNBQThnSDtBQUFBO0FBQUEsWUFBajlHO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBK0Q7QUFBQSxNQUFBL1ksUUFBVixpQ0FBMkM7QUFBQSxNQUFBZ1osWUFBbUM7QUFBQSxNQUFBamhCLGFBQTJDO0FBQUEsTUFBQWtDLFNBQTBELFFBQVM7QUFBQSxLQUE4Qyx3Q0FBNHJHO0FBQUE7QUFBQSxRQUFBcE4sTUFBam5HO0FBQUEsSUFBNEI7QUFBQTtBQUFBLFVBQWtFO0FBQUEsTUFBQUEsUUFBWDtBQUFBLEtBQTBDO0FBQUE7QUFBQSxXQUFrRTtBQUFBLE9BQUFBLFFBQVg7QUFBQSxNQUE2QztBQUFBO0FBQUEsWUFBc0Q7QUFBQSxZQUFrQixRQUE3QjtBQUFBO0FBQUEsZUFBM0I7QUFBQTtBQUFBO0FBQUEsY0FBcEc7QUFBQTtBQUFBO0FBQUEsYUFBakc7QUFBQSxJQUFuRTtBQUFBO0FBQUEsTUFBQW9OLFdBQTJWO0FBQUEsVUFBa0Q7QUFBQSxLQUFqQjtBQUFBLGNBQTZHLFVBQVk7QUFBQSxNQUF6RCxPQUFzQyxlQUF0QyxnREFBNHNGO0FBQUE7QUFBQTtBQUFBLE1BQUFwTixRQUExakY7QUFBQTtBQUFBLFFBQTZCO0FBQUEsV0FBZ0M7QUFBQTtBQUFBLEtBQXBGO0FBQUEsTUFBd1MsMENBQXl5RTtBQUFBO0FBQUE7QUFBQSxRQUF6NEU7QUFBQSxVQUFZLHFCQUF1QjtBQUFBO0FBQUEsS0FBaEYsT0FBc0M7QUFBQSxjQUF0QyxnREFBczdFO0FBQUE7QUFBQSxZQUEzdUU7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBcUwsT0FBaTVDO0FBQUEsTUFBQUE7QUFBQUEsUUFBeUIsdUNBQTRCO0FBQUEsS0FBM0U7QUFBQTtBQUFBLFdBQWkyQjtBQUFBLFdBQXBDO0FBQUEsV0FBdEI7QUFBQSxNQUEyRTtBQUFBO0FBQUE7QUFBQSxNQUFBc0gsU0FBbHdCO0FBQUEsTUFBQUMsU0FBc0Q7QUFBQSxNQUFBQyxXQUFtQztBQUFBLFVBQXdEO0FBQUEsTUFBQXJSLFVBQVg7QUFBQSxVQUF3TjtBQUFBLFVBQVo7QUFBQSxLQUExSTtBQUFBO0FBQUEsZ0JBQUFvUTtBQUFBQTtBQUFBQSxTQUFBdkcsS0FBd0U7QUFBQSxTQUFBQSxPQUE4QjtBQUFBLGFBQTFEO0FBQUEsUUFBakI7QUFBQSxRQUE2RztBQUFBO0FBQUE7QUFBQSxhQUFnRjtBQUFBLEtBQVY7QUFBQSxjQUE4RDtBQUFBLE1BQWhCO0FBQUE7QUFBQTtBQUFBLFVBQXFMO0FBQUE7QUFBQSxRQUEzRCxVQUFZLHNCQUF3QjtBQUFBLEtBQW5FLE9BQXNCLGVBQXRCLHVDQUEyTztBQUFBO0FBQUE7QUFBQSxLQUFBa0QsU0FBdHNFO0FBQUEsU0FBOEM7QUFBQSxLQUFBL00sUUFBWDtBQUFBLFNBQW1HO0FBQUEsU0FBWDtBQUFBLElBQXRCO0FBQUE7QUFBQSxVQUF3SjtBQUFBLFVBQWQ7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQTtBQUFBLFdBQW1RO0FBQUEsV0FBeEM7QUFBQSxPQUFBNkosS0FBOUY7QUFBQSxPQUFBQSxPQUF3QjtBQUFBLFdBQTVDO0FBQUEsV0FBdEI7QUFBQSxNQUFnTTtBQUFBO0FBQUE7QUFBQSxVQUE0SjtBQUFBLFVBQVo7QUFBQSxLQUE1RztBQUFBO0FBQUEsZ0JBQUF6QjtBQUFBQTtBQUFBQSxTQUFBLElBQTZFO0FBQUEsYUFBaEI7QUFBQSxhQUFkO0FBQUEsUUFBakI7QUFBQSxRQUE0RTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQXVLO0FBQUEsVUFBNUI7QUFBQSxVQUFaO0FBQUEsS0FBcEU7QUFBQTtBQUFBLGdCQUFBZ0k7QUFBQUEsWUFBQSxJQUE0QztBQUFBLFFBQWpCO0FBQUEsUUFBdUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUF3YSxhQUFrRztBQUFBLFNBQTJDO0FBQUEsSUFBVjtBQUFBLEtBQTJELE9BQW1CLGVBQW5CLHdDQUFzeEM7QUFBQTtBQUFBLEtBQUFwc0IsUUFBbHRDO0FBQUE7QUFBQSxPQUFnQztBQUFBLFVBQWdDO0FBQUE7QUFBQSxJQUF2RjtBQUFBLEtBQW9ULDhDQUFxN0I7QUFBQTtBQUFBO0FBQUEsT0FBeGhDO0FBQUEsU0FBWSxxQkFBdUI7QUFBQTtBQUFBLElBQW5GLE9BQXlDO0FBQUEsYUFBekMsa0RBQXdrQztBQUFBO0FBQUEsWUE1OEIzK0g7QUFBQSxZQUFBcXNCLGtCQUFBcHBCLFdBQUFxUSxXQUFBdFUsS0FBQUM7QUFBQUEsUUFBQXFVLFVBZzlCL0M7QUFBQTtBQUFBO0FBQUEsVUFBK0I7QUFBQSxVQUFqQjtBQUFBLEtBQVYsK0JBQWlFLG1DQUE2YztBQUFBO0FBQUEsTUFBQUksT0FBeFo7QUFBQSxNQUFBblMsT0FBZ0M7QUFBQSxVQUFnRDtBQUFBLEtBQVYsK0JBQXlDLHNDQUF5UztBQUFBO0FBQUEsTUFBQStxQixXQUEvTyxXQUFZO0FBQUEsVUFBNkM7QUFBQSxLQUFWLCtCQUF1RCxzQ0FBeUk7QUFBQSxTQUFBaFosWUFBaEU7QUFBQSxLQUE2QztBQUFBO0FBQUEsR0FBbUI7QUFBQSxZQWg5Qm5lO0FBQUEsWUFBQWlaLGNBQUF2VCxNQUFBaGE7QUFBQUEsSUFvOUJ0QyxPQUEyQyxRQUEzQyw4QkFBNEM7QUFBQTtBQUFBLFlBQUF3dEIsZUFBQS9kO0FBQUFBLFFBQUEsSUFJdkM7QUFBQSxJQUFWLGlDQUFtRztBQUFBLFlBQTNCO0FBQUEsSUFBdEIsT0FBcUIsY0FBckIsZ0NBQXNEO0FBQUE7QUFBQSxZQUFBZ2UsZUFBQXRSO0FBQUFBLElBSTVHO0FBQUEsR0FBa0w7QUFBQSxZQTU5Qm5JO0FBQUEsWUFBQXVSLFVBQUExVCxNQUFBaGE7QUFBQUEsSUFnK0J0QyxPQUEyQyxRQUEzQyw4QkFBNEM7QUFBQTtBQUFBLFlBQUEydEIsT0FBQXhzQixHQVFyRCxpQ0FBaUI7QUFBQSxZQXgrQjhCO0FBQUEsWUFBQXlzQixrQkFBQUMsS0E0K0IvQyxVQUFXO0FBQUEsR0E1cUJhO0FBQUEsK0JBQWxCO0FBQUEsR0FBa0I7QUFBQTtBQUFBO0FBQUEsR0E4QmlDO0FBQUEsc0NBQWxCO0FBQUEsT0FBQUMsc0JBOVZRO0FBQUEsR0FnV3ZCO0FBQUEsOEJBQWxCO0FBQUEsR0FBa0I7QUFBQSxHQVNBO0FBQUEsMkJBQWxCO0FBQUEsR0FvQmtCLG1DQUFsQjtBQUFBLEdBb0JrQjtBQUFBLDJCQUFsQjtBQUFBLEdBQWtCO0FBQUE7QUFBQTtBQUFBLGFBQUFwdUI7QUFBQUEsS0FnbUJ4QjtBQUFBLFVBQUFNLE1BQUEsTUFBQWdhLE9BQUE7QUFBQSxNQUN1QixpQ0FDZjtBQUFBO0FBQUEsS0FBRDtBQUFBLElBQUM7QUFBQSxHQWxtQmdCO0FBQUEsWUFBQStULGtCQUFBaHRCO0FBQUFBLFFBQUFJLElBMG1CeEI7QUFBQSxJQUNBO0FBQUE7QUFBQSxVQUFBOEosUUFDbUI7QUFBQTtBQUFBO0FBQUEsT0FBaUIsb0VBQW1CO0FBQUEsZUFBWTtBQUFBO0FBQUEsTUFBL0I7QUFBQSxXQUFBQSxVQUNqQjtBQUFBO0FBQUE7QUFBQSxRQUFrQiwwRUFBbUI7QUFBQSxnQkFBWTtBQUFBO0FBQUEsT0FBL0IsUUFDNUI7QUFBQTtBQUFBLFVBQUFBLFVBRUE7QUFBQTtBQUFBO0FBQUEsT0FBa0I7QUFBQSxZQUFBQSxVQUV0QjtBQUFBO0FBQUEsU0FFVztBQUFBO0FBQUEsWUFBQXlPLE9BRlgsZ0JBQ2dCO0FBQUE7QUFBQTtBQUFBLGVBRVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQUFzVTtBQUFBQSxTQUFBQSxNRDFoQ1o7QUFBQTtBQUFBLFNBQUFDLE1BQUE7QUFBQSxLQzRoQzRCO0FBQUEsS0FDeEI7QUFBQTtBQUFBLEdBQXVCO0FBQUEsT0FBQXB0QixTRDdoQzNCO0FBQUEsWUFBQXF0QixtQkFBQWp1QjtBQUFBQSxRQUFBbU0sSUNtaUNFLE1BQUEraEIsUUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhEQUFvQztBQUFBLGNBQVk7QUFBQTtBQUFBLEtBQWhELFFBZ0JBLHdDQUFlO0FBQUEsS0FmYjtBQUFBO0FBQUE7QUFBQSxVQUFBbGpCLFFBQUE7QUFBQTtBQUFBLFdBQUE4TixPQUFBLFVBQUFoUSxRQUFBO0FBQUEsT0FFRztBQUFBLFlBQUFvbEIsVUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXZ0QixJQUFBO0FBQUEsWUFBQXFLLFVBS3NCO0FBQUE7QUFBQTtBQUFBLFlBQXlCO0FBQUE7QUFBQTtBQUFBLHVGQUFvQztBQUFBO0FBQUEsb0JBQVk7QUFBQTtBQUFBLFdBQWhEO0FBQUE7QUFBQSxhQUFBQSxVQUMzQjtBQUFBLGFBQUFwSyxNRDVpQzNCO0FBQUEsWUM0aUNvRDtBQUFBLGlCQUFBb0ssVUFBQTtBQUFBO0FBQUEsa0JBQUEzSSxPQUFBO0FBQUE7QUFBQSxrQkFBQW5CLE1BQUEsWUFBQW1CLE9BQXlCO0FBQUE7QUFBQTtBQUFBLGlCQUFBQSxPQUF6QjtBQUFBO0FBQUEsYUFBQTJJLFVBQ3pCO0FBQUEsYUFBQXBLLFFEN2lDM0I7QUFBQSxZQzZpQ29EO0FBQUEsaUJBQUFvSyxVQUFBO0FBQUE7QUFBQSxrQkFBQXRDLE9BQUE7QUFBQTtBQUFBLGtCQUFBeEgsSUFBQSxZQUFBd0gsT0FBeUI7QUFBQTtBQUFBO0FBQUEsaUJBQUFBLE9BQXpCO0FBQUEsZ0JBQUF3bEIsVUFDMUM7QUFBQTtBQUFBO0FBQUEsZ0JBQUFBLFVBSDRDO0FBQUE7QUFBQTtBQUFBLGVBQUF6dkIsSUFML0M7QUFBQSxXQUMyQztBQUFBLGdCQUFBdU0sVUFDeEM7QUFBQTtBQUFBLGlCQUFBM0ksU0FBQTtBQUFBO0FBQUEsaUJBQUFuQixNQUFBLFlBQUFtQixTQUE0QztBQUFBLGdCQUFBMkksVUFDNUMsTUFBQXBLLFFEemlDVjtBQUFBLFlDeWlDVTtBQUFBLGlCQUFBOEgsU0FBQTtBQUFBO0FBQUEsaUJBQUF4SCxNQUFBLFlBQUF3SCxTQUEyQztBQUFBO0FBQUEsaUJBQUFBLFNBQTNDO0FBQUEsZ0JBQUF3bEIsVUFDQTtBQUFBO0FBQUE7QUFBQSxnQkFBQUEsVUFId0M7QUFBQTtBQUFBLHVCQUFBQSxVQUQzQztBQUFBO0FBQUEsT0FVQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BWkg7QUFBQTtBQUFBO0FBQUEsR0FlYTtBQUFBLFlBQUFDLGtCQUFBRDtBQUFBQSxJQUlmLFlBQ1E7QUFBQTtBQUFBLEtBQUFFO0FBQUFBLE9BRU07QUFBQTtBQUFBLGtCQUFBN2UsR0FBQTFCO0FBQUFBO0FBQUFBLFdBQUFuRixPQUFVO0FBQUEsV0FBQXJHLE9BQUE7QUFBQSxXQUFBZ3NCLFNBQ3BCO0FBQUEsVUFDWTtBQUFBLG1CQUFlO0FBQUEsV0FBVSx1Q0FFdEM7QUFBQTtBQUFBO0FBQUEsZUFEbUM7QUFBQSxlQUFQO0FBQUEsZUFBUDtBQUFBLGVBQU47QUFBQSxVQUE4Qix1Q0FDN0M7QUFBQTtBQUFBO0FBQUEsS0FBQXp0QixNRDlqQ0w7QUFBQSxTQ2drQ0k7QUFBQSxJQUNHO0FBQUE7QUFBQSxZQUFBMHRCLHlCQUFBTjtBQUFBQSxRQUFBRSxRQUlPO0FBQUEsSUFDWjtBQUFBLFlBQ007QUFBQSxJQUF5QjtBQUFBO0FBQUE7QUFBQSxTQWxxQlA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBSyxlQUFBaHJCLE1BQUFpckI7QUFBQUE7QUFBQUE7QUFBQUEsS0EwcUJ4QixrREFBQUMsSUFBQSxTQUFBbmdCLFFBQXVDO0FBQUEsU0FBQUEsUUFBUztBQUFBO0FBQUE7QUFBQSxLQUFBcVMsV0FDakM7QUFBQSxLQUFBSyxZQUNDO0FBQUEsS0FBQTBOLGFBQ0M7QUFBQSxhQUFBQyxXQUFBeGlCLEdBQUExTTtBQUFBQSxLQUVXO0FBQUEsS0FBK0I7QUFBQTtBQUFBLFlBRC9CO0FBQUEsSUFBNEI7QUFBQSxLQUl0RCxpQ0FBa0M7QUFBQTtBQUFBLEtBQUFtdkIsV0FGbEI7QUFBQSxLQUFBQztBQUFBQSxPQUlEO0FBQUE7QUFBQSxrQkFBQS9yQjtBQUFBQSxVQUNmO0FBQUEsZUFBQWtJLFFBQUE7QUFBQTtBQUFBLGdCQUFBNGlCLE1BQUE7QUFBQSxZQUEyQyx3Q0FBcUI7QUFBQTtBQUFBO0FBQUEsVUFBUTtBQUFBLFNBQUk7QUFBQTtBQUFBLElBRTlFO0FBQUEsU0FBQWp0QixJQUFBO0FBQUEsS0FBK0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUVsQjtBQUFBO0FBQUEsaUJBQUFtdUI7QUFBQUEsU0FDVDtBQUFBLGNBQUFydkIsSUFBQTtBQUFBLFVBRUU7QUFBQSxlQUFBbW9CLElBQUE7QUFBQSxXQUM0QztBQUFBO0FBQUEsVUFDckM7QUFBQTtBQUFBLFNBQ0Y7QUFBQSxRQUFXO0FBQUEsSUFQdEIsV0FBVztBQUFBLElBUVg7QUFBQTtBQUFBLGVBQUE5a0I7QUFBQUEsT0FDRTtBQUFBLFlBQUFrSSxRQUFBO0FBQUE7QUFBQTtBQUFBLFVBQUE0WSxTQUFBO0FBQUEsVUFBQWdLLE1BQUE7QUFBQSxVQUFBbUIsS0FFVztBQUFBLFVBQUEzTixjQUNTO0FBQUEsVUFBQTJCLFFBQ047QUFBQSxTQUNaO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQUFpTTtBQUFBQSxhQUVPO0FBQUEsY0FPYTtBQUFBLGlGQUF1QjtBQUFBO0FBQUEsa0JBTDFCO0FBQUEsa0JBRE87QUFBQSxhQUNpQjtBQUFBLFlBTWxDO0FBQUE7QUFBQTtBQUFBLFlBRU07QUFBQTtBQUFBLHNCQUFBRjtBQUFBQSxjQUNUO0FBQUEsbUJBQUFydkIsSUFBQTtBQUFBLGVBRUU7QUFBQSxvQkFBQW1vQixJQUFBO0FBQUEsZ0JBQ3FDO0FBQUE7QUFBQSxlQUM5QjtBQUFBO0FBQUEsY0FDRjtBQUFBLGFBQVc7QUFBQSxTQVB0QixXQUFXO0FBQUEsU0FPYTtBQUFBO0FBQUEsMkJBQUFoVixLQUFBcWM7QUFBQUE7QUFBQUEsb0JBQUEsSUFHSjtBQUFBO0FBQUEsc0JBQUw7QUFBQTtBQUFBLGdDQUFBSDtBQUFBQSx3QkFDVDtBQUFBLDZCQUFBcnZCLElBQUE7QUFBQSx5QkFFRTtBQUFBLDhCQUFBbW9CLElBQUE7QUFBQSwwQkFFRTtBQUFBLDJCQUF1QyxtREFBaUI7QUFBQTtBQUFBLCtCQUNyQjtBQUFBLCtCQUFOO0FBQUEsK0JBQU47QUFBQSwwQkFBNEM7QUFBQTtBQUFBO0FBQUEsOEJBQ2hDO0FBQUEsOEJBQU47QUFBQSw4QkFBTjtBQUFBLHlCQUFtQztBQUFBO0FBQUE7QUFBQSw2QkFDekI7QUFBQSw2QkFBTjtBQUFBLDZCQUFOO0FBQUEsd0JBQXVDO0FBQUEsdUJBQUU7QUFBQSx3QkFUckQ7QUFBQSxtQkFBTixPQUFrQixXQUFsQixnQ0FTNkQ7QUFBQTtBQUFBLDhCQUVsRTtBQUFBO0FBQUE7QUFBQSxPQUFIO0FBQUEsTUFBRztBQUFBO0FBQUEsSUFDQTtBQUFBLEdBQ1Q7QUFBQSxPQUFBc0gsa0JENW9DTDtBQUFBLEdDcXBDZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBekM7QUFBQUEsT0FFWjtBQUFBO0FBQUE7QUFBQSxhQUFBMXNCLE1BQUEsTUFBQXdELE9BQUE7QUFBQSxTQUNpQixnQ0FDUDtBQUFBO0FBQUE7QUFBQSxPQUFIO0FBQUEsTUFBRztBQUFBLE9BQUE0ckIsaUJEenBDZDtBQUFBLEdDMnBDZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBMUM7QUFBQUEsT0FFWjtBQUFBO0FBQUE7QUFBQSxhQUFBMXNCLE1BQUEsTUFBQXdELE9BQUE7QUFBQSxTQUNpQiwrQkFDUDtBQUFBO0FBQUE7QUFBQSxPQUFIO0FBQUEsTUFBRztBQUFBLE9BQUE2ckIsb0JEL3BDZDtBQUFBLEdDaXFDZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBM0M7QUFBQUEsT0FFWjtBQUFBO0FBQUE7QUFBQSxhQUFBMXNCLE1BQUEsTUFBQXdELE9BQUE7QUFBQSxTQUNpQixrQ0FDUDtBQUFBO0FBQUE7QUFBQSxPQUFIO0FBQUEsTUFBRztBQUFBLE9BQUE4ckIsWURycUNkO0FBQUEsR0N1cUNnQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUE1QztBQUFBQSxPQUVaO0FBQUE7QUFBQTtBQUFBLGFBQUExc0IsTUFBQSxNQUFBd0QsT0FBQTtBQUFBLFNBQ2lCLDBCQUNQO0FBQUE7QUFBQTtBQUFBLE9BQUg7QUFBQSxNQUFHO0FBQUEsT0FBQStyQixrQkQzcUNkO0FBQUEsR0M2cUNnQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUE3QztBQUFBQSxPQUVaO0FBQUE7QUFBQTtBQUFBLGFBQUExc0IsTUFBQSxNQUFBd0QsT0FBQTtBQUFBLFNBQ2lCLGdDQUNQO0FBQUE7QUFBQTtBQUFBLE9BQUg7QUFBQSxNQUFHO0FBQUEsR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEanJDakIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo2Njc0NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfdm0ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogU1ggYnl0ZWNvZGUgVk0g4oCUIHN0YWNrLWJhc2VkIGludGVycHJldGVyLlxuXG4gICAgRXhlY3V0ZXMgYnl0ZWNvZGUgcHJvZHVjZWQgYnkgY29tcGlsZXIuc3guXG4gICAgRGVzaWduZWQgZm9yIHNwZWVkOiBhcnJheS1iYXNlZCBzdGFjaywgZGlyZWN0IGRpc3BhdGNoLFxuICAgIG5vIGFsbG9jYXRpb24gcGVyIHN0ZXAgKHVubGlrZSB0aGUgQ0VLIG1hY2hpbmUpLlxuXG4gICAgVGhpcyBpcyB0aGUgcGxhdGZvcm0tbmF0aXZlIGV4ZWN1dGlvbiBlbmdpbmUuIFRoZSBzYW1lIGJ5dGVjb2RlXG4gICAgcnVucyBvbiBhbGwgcGxhdGZvcm1zIChPQ2FtbCwgSlMsIFdBU00pLlxuXG4gICAgVk0gdHlwZXMgKHZtX2NvZGUsIHZtX3VwdmFsdWVfY2VsbCwgdm1fY2xvc3VyZSkgYXJlIGRlZmluZWQgaW5cbiAgICBzeF90eXBlcy5tbCB0byBzaGFyZSB0aGUgbXV0dWFsIHJlY3Vyc2lvbiBibG9jayB3aXRoIFt2YWx1ZV0uICopXG5cbm9wZW4gU3hfdHlwZXNcblxuKCoqIENhbGwgZnJhbWUg4oCUIG9uZSBwZXIgZnVuY3Rpb24gaW52b2NhdGlvbi4gKilcbnR5cGUgZnJhbWUgPSB7XG4gIGNsb3N1cmUgICA6IHZtX2Nsb3N1cmU7XG4gIG11dGFibGUgaXAgOiBpbnQ7XG4gIGJhc2UgICAgICA6IGludDsgICgqIGJhc2UgaW5kZXggaW4gdmFsdWUgc3RhY2sgZm9yIGxvY2FscyAqKVxuICBsb2NhbF9jZWxscyA6IChpbnQsIHZtX3VwdmFsdWVfY2VsbCkgSGFzaHRibC50OyAgKCogc2xvdCDihpIgc2hhcmVkIGNlbGwgZm9yIGNhcHR1cmVkIGxvY2FscyAqKVxufVxuXG4oKiogRXhjZXB0aW9uIGhhbmRsZXIgZW50cnkgb24gdGhlIGhhbmRsZXIgc3RhY2suICopXG50eXBlIGhhbmRsZXJfZW50cnkgPSB7XG4gIGhfY2F0Y2hfaXAgICAgOiBpbnQ7ICAgICgqIElQIHRvIGp1bXAgdG8gd2hlbiBleGNlcHRpb24gaXMgcmFpc2VkICopXG4gIGhfZnJhbWVfZGVwdGggOiBpbnQ7ICAgICgqIG51bWJlciBvZiBmcmFtZXMgd2hlbiBoYW5kbGVyIHdhcyBwdXNoZWQgKilcbiAgaF9zcCAgICAgICAgICA6IGludDsgICAgKCogc3RhY2sgcG9pbnRlciB3aGVuIGhhbmRsZXIgd2FzIHB1c2hlZCAqKVxuICBoX2ZyYW1lICAgICAgIDogZnJhbWU7ICAoKiB0aGUgZnJhbWUgdGhhdCBwdXNoZWQgdGhlIGhhbmRsZXIgKilcbn1cblxuKCoqIFZNIHN0YXRlLiAqKVxudHlwZSB2bSA9IHtcbiAgbXV0YWJsZSBzdGFjayAgOiB2YWx1ZSBhcnJheTtcbiAgbXV0YWJsZSBzcCAgICAgOiBpbnQ7XG4gIG11dGFibGUgZnJhbWVzIDogZnJhbWUgbGlzdDtcbiAgZ2xvYmFscyAgICAgICAgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50OyAgKCogbGl2ZSByZWZlcmVuY2UgdG8ga2VybmVsIGVudiAqKVxuICBtdXRhYmxlIHBlbmRpbmdfY2VrIDogdmFsdWUgb3B0aW9uOyAgKCogc3VzcGVuZGVkIENFSyBzdGF0ZSBmcm9tIENvbXBvbmVudC9MYW1iZGEgY2FsbCAqKVxuICBtdXRhYmxlIGhhbmRsZXJfc3RhY2sgOiBoYW5kbGVyX2VudHJ5IGxpc3Q7ICAoKiBleGNlcHRpb24gaGFuZGxlciBzdGFjayAqKVxuICBtdXRhYmxlIHJldXNlX3N0YWNrIDogKGZyYW1lIGxpc3QgKiBpbnQpIGxpc3Q7ICAoKiBzYXZlZCBjYWxsX2Nsb3N1cmVfcmV1c2UgY29udGludWF0aW9ucyAqKVxufVxuXG4oKiogUmFpc2VkIHdoZW4gT1BfUEVSRk9STSBpcyBleGVjdXRlZC4gQ2FycmllcyB0aGUgSU8gcmVxdWVzdCBkaWN0XG4gICAgYW5kIGEgcmVmZXJlbmNlIHRvIHRoZSBWTSAod2hpY2ggaXMgaW4gYSByZXN1bWFibGUgc3RhdGU6XG4gICAgaXAgcGFzdCBPUF9QRVJGT1JNLCBzdGFjayByZWFkeSBmb3IgYSByZXN1bHQgcHVzaCkuICopXG5leGNlcHRpb24gVm1TdXNwZW5kZWQgb2YgdmFsdWUgKiB2bVxuXG4oKiogUmFpc2VkIGJ5IHRoZSBleHRlbnNpb24gZGlzcGF0Y2ggZmFsbHRocm91Z2ggd2hlbiBhbiBvcGNvZGUgaW4gdGhlXG4gICAgZXh0ZW5zaW9uIHJhbmdlICjiiaUgMjAwKSBpcyBlbmNvdW50ZXJlZCB3aXRoIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZC5cbiAgICBDYXJyaWVzIHRoZSBvZmZlbmRpbmcgb3Bjb2RlIGlkLiBTZWUgcGxhbnMvc3gtdm0tb3Bjb2RlLWV4dGVuc2lvbi5tZC4gKilcbmV4Y2VwdGlvbiBJbnZhbGlkX29wY29kZSBvZiBpbnRcblxuKCogUmVnaXN0ZXIgdGhlIFZNIHN1c3BlbnNpb24gY29udmVydGVyIHNvIHN4X3J1bnRpbWUuc3hfYXBwbHlfY2VrIGNhblxuICAgY2F0Y2ggVm1TdXNwZW5kZWQgYW5kIGNvbnZlcnQgaXQgdG8gQ2VrUGVyZm9ybVJlcXVlc3Qgd2l0aG91dCBhXG4gICBkaXJlY3QgZGVwZW5kZW5jeSBvbiB0aGlzIG1vZHVsZS4gKilcbmxldCAoKSA9IFN4X3R5cGVzLl9jb252ZXJ0X3ZtX3N1c3BlbnNpb24gOj0gKGZ1biBleG4gLT5cbiAgbWF0Y2ggZXhuIHdpdGhcbiAgfCBWbVN1c3BlbmRlZCAocmVxdWVzdCwgX3ZtKSAtPiByYWlzZSAoQ2VrUGVyZm9ybVJlcXVlc3QgcmVxdWVzdClcbiAgfCBfIC0+ICgpKVxuXG5cbigqKiBGb3J3YXJkIHJlZmVyZW5jZSBmb3IgSklUIGNvbXBpbGF0aW9uIOKAlCBzZXQgYWZ0ZXIgZGVmaW5pdGlvbi4gKilcbmxldCBqaXRfY29tcGlsZV9yZWYgOiAobGFtYmRhIC0+IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQgLT4gdm1fY2xvc3VyZSBvcHRpb24pIHJlZiA9XG4gIHJlZiAoZnVuIF8gXyAtPiBOb25lKVxuXG4oKiogRm9yd2FyZCByZWZlcmVuY2UgZm9yIGV4dGVuc2lvbiBvcGNvZGUgZGlzcGF0Y2gg4oCUIFBoYXNlIEIgaW5zdGFsbHMgdGhlXG4gICAgcmVhbCByZWdpc3RyeSdzIGRpc3BhdGNoIGZ1bmN0aW9uIGhlcmUgYXQgbW9kdWxlIGluaXQuIFVudGlsIHRoZW4sIGFueVxuICAgIG9wY29kZSBpbiB0aGUgZXh0ZW5zaW9uIHJhbmdlIHJhaXNlcyBbSW52YWxpZF9vcGNvZGVdLiBTYW1lIGZvcndhcmQtcmVmXG4gICAgcGF0dGVybiBhcyBbaml0X2NvbXBpbGVfcmVmXSBhYm92ZTsga2VlcHMgW1N4X3ZtX2V4dGVuc2lvbnNdIGZyZWUgdG9cbiAgICBkZXBlbmQgb24gW1N4X3ZtXSdzIFt2bV0gLyBbZnJhbWVdIHR5cGVzIHdpdGhvdXQgYSBjeWNsZS4gKilcbmxldCBleHRlbnNpb25fZGlzcGF0Y2hfcmVmIDogKGludCAtPiB2bSAtPiBmcmFtZSAtPiB1bml0KSByZWYgPVxuICByZWYgKGZ1biBvcCBfdm0gX2ZyYW1lIC0+IHJhaXNlIChJbnZhbGlkX29wY29kZSBvcCkpXG5cbigqKiBGb3J3YXJkIHJlZmVyZW5jZSBmb3IgZXh0ZW5zaW9uIG9wY29kZSDihpIgbmFtZSBsb29rdXAsIHVzZWQgYnlcbiAgICBbb3Bjb2RlX25hbWVdIC8gW2Rpc2Fzc2VtYmxlXSBmb3IgaHVtYW4tcmVhZGFibGUgZGlzYXNzZW1ibHkuICBUaGVcbiAgICByZWdpc3RyeSBpbnN0YWxscyBhIHJlYWwgbG9va3VwIGF0IG1vZHVsZSBpbml0OyBkZWZhdWx0IHJldHVybnNcbiAgICBbTm9uZV0gKHRoZW4gW29wY29kZV9uYW1lXSBmYWxscyBiYWNrIHRvIFwiVU5LTk9XTl9uXCIpLiAqKVxubGV0IGV4dGVuc2lvbl9vcGNvZGVfbmFtZV9yZWYgOiAoaW50IC0+IHN0cmluZyBvcHRpb24pIHJlZiA9XG4gIHJlZiAoZnVuIF8gLT4gTm9uZSlcblxuKCogSklUIHRocmVzaG9sZCBhbmQgY291bnRlcnMgbGl2ZSBpbiBTeF90eXBlcyBzbyBwcmltaXRpdmVzIGNhbiByZWFkIHRoZW1cbiAgIHdpdGhvdXQgY3JlYXRpbmcgYSBzeF9wcmltaXRpdmVzIOKGkiBzeF92bSBkZXBlbmRlbmN5IGN5Y2xlLiAqKVxuXG4oKiogU2VudGluZWwgY2xvc3VyZSBpbmRpY2F0aW5nIEpJVCBjb21waWxhdGlvbiB3YXMgYXR0ZW1wdGVkIGFuZCBmYWlsZWQuXG4gICAgUHJldmVudHMgcmV0cnlpbmcgY29tcGlsYXRpb24gb24gZXZlcnkgY2FsbC4gKilcbmxldCBqaXRfZmFpbGVkX3NlbnRpbmVsID0ge1xuICB2bV9jb2RlID0geyB2Y19hcml0eSA9IC0xOyB2Y19yZXN0X2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDA7IHZjX2J5dGVjb2RlID0gW3x8XTsgdmNfY29uc3RhbnRzID0gW3x8XTtcbiAgICAgICAgICAgICAgdmNfYnl0ZWNvZGVfbGlzdCA9IE5vbmU7IHZjX2NvbnN0YW50c19saXN0ID0gTm9uZSB9O1xuICB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwiX19qaXRfZmFpbGVkX19cIjsgdm1fZW52X3JlZiA9IEhhc2h0YmwuY3JlYXRlIDA7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZVxufVxuXG5sZXQgaXNfaml0X2ZhaWxlZCBjbCA9IGNsLnZtX2NvZGUudmNfYXJpdHkgPSAtMVxuXG4oKiogQ3VycmVudCBhY3RpdmUgVk0g4oCUIGFsbG93cyBITyBwcmltaXRpdmVzIChtYXAsIGZpbHRlciwgZm9yLWVhY2gsIHNvbWUpXG4gICAgdG8gY2FsbCBWbUNsb3N1cmUgY2FsbGJhY2tzIG9uIHRoZSBzYW1lIFZNIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIFRoaXMgaXMgY3JpdGljYWw6IGNyZWF0aW5nIGEgbmV3IFZNIHBlciBjYWxsYmFjayBsb3NlcyB0aGUgY2FsbGluZyBWTSdzXG4gICAgc3RhY2svZnJhbWUgY29udGV4dCwgY2F1c2luZyB1cHZhbHVlLWNhcHR1cmVkIGhvc3Qgb2JqZWN0cyB0byBiZWNvbWVcbiAgICBpbmFjY2Vzc2libGUuICopXG5sZXQgX2FjdGl2ZV92bSA6IHZtIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgY3JlYXRlIGdsb2JhbHMgPVxuICB7IHN0YWNrID0gQXJyYXkubWFrZSA0MDk2IE5pbDsgc3AgPSAwOyBmcmFtZXMgPSBbXTsgZ2xvYmFsczsgcGVuZGluZ19jZWsgPSBOb25lOyBoYW5kbGVyX3N0YWNrID0gW107IHJldXNlX3N0YWNrID0gW10gfVxuXG4oKiogU3RhY2sgb3BzIOKAlCBpbmxpbmVkIGZvciBzcGVlZC4gKilcbmxldCBwdXNoIHZtIHYgPVxuICBpZiB2bS5zcCA+PSBBcnJheS5sZW5ndGggdm0uc3RhY2sgdGhlbiBiZWdpblxuICAgIGxldCBucyA9IEFycmF5Lm1ha2UgKHZtLnNwICogMikgTmlsIGluXG4gICAgQXJyYXkuYmxpdCB2bS5zdGFjayAwIG5zIDAgdm0uc3A7XG4gICAgdm0uc3RhY2sgPC0gbnNcbiAgZW5kO1xuICB2bS5zdGFjay4odm0uc3ApIDwtIHY7XG4gIHZtLnNwIDwtIHZtLnNwICsgMVxuXG5sZXRbQGlubGluZV0gcG9wIHZtID1cbiAgdm0uc3AgPC0gdm0uc3AgLSAxO1xuICB2bS5zdGFjay4odm0uc3ApXG5cbmxldFtAaW5saW5lXSBwZWVrIHZtID0gdm0uc3RhY2suKHZtLnNwIC0gMSlcblxuKCoqIFJlYWQgb3BlcmFuZHMuICopXG5sZXRbQGlubGluZV0gcmVhZF91OCBmID1cbiAgbGV0IHYgPSBmLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi5pcCkgaW5cbiAgZi5pcCA8LSBmLmlwICsgMTsgdlxuXG5sZXRbQGlubGluZV0gcmVhZF91MTYgZiA9XG4gIGxldCBsbyA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwKSBpblxuICBsZXQgaGkgPSBmLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi5pcCArIDEpIGluXG4gIGYuaXAgPC0gZi5pcCArIDI7XG4gIGxvIGxvciAoaGkgbHNsIDgpXG5cbmxldFtAaW5saW5lXSByZWFkX2kxNiBmID1cbiAgbGV0IHYgPSByZWFkX3UxNiBmIGluXG4gIGlmIHYgPj0gMzI3NjggdGhlbiB2IC0gNjU1MzYgZWxzZSB2XG5cbigqKiBXcmFwIGEgVk0gY2xvc3VyZSBhcyBhbiBTWCB2YWx1ZSAoTmF0aXZlRm4pLiAqKVxubGV0IGNsb3N1cmVfdG9fdmFsdWUgY2wgPVxuICBOYXRpdmVGbiAoXCJ2bTpcIiBeIChtYXRjaCBjbC52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiYW5vblwiKSxcbiAgICBmdW4gYXJncyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTV9DTE9TVVJFX0NBTEw6XCIgXiBTdHJpbmcuY29uY2F0IFwiLFwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBhcmdzKSkpKVxuICAoKiBQbGFjZWhvbGRlciDigJQgYWN0dWFsIGNhbGxzIGdvIHRocm91Z2ggdm1fY2FsbCBiZWxvdyAqKVxuXG4oKiogUGFyc2Uga2V5d29yZCBhcmdzIGZyb20gYW4gZXZhbHVhdGVkIGFyZ3MgbGlzdC5cbiAgICBUaGUgY29tcGlsZXIgY29udmVydHMgOmtleXdvcmQgdG8gaXRzIHN0cmluZyBuYW1lLCBzbyB3ZSBuZWVkIHRoZVxuICAgIGNvbXBvbmVudCdzIHBhcmFtIGxpc3QgdG8gaWRlbnRpZnkgd2hpY2ggc3RyaW5ncyBhcmUga2V5d29yZCBuYW1lcy5cbiAgICBSZXR1cm5zIChrd2FyZ3NfaGFzaHRibCwgY2hpbGRyZW5fbGlzdCkuICopXG5sZXQgcGFyc2Vfa2V5d29yZF9hcmdzIHBhcmFtcyBhcmdzID1cbiAgbGV0IHBhcmFtX3NldCA9IEhhc2h0YmwuY3JlYXRlIChMaXN0Lmxlbmd0aCBwYXJhbXMpIGluXG4gIExpc3QuaXRlciAoZnVuIHAgLT4gSGFzaHRibC5yZXBsYWNlIHBhcmFtX3NldCBwIHRydWUpIHBhcmFtcztcbiAgbGV0IGt3YXJncyA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgbGV0IGNoaWxkcmVuID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgIHwgKFN0cmluZyBrIHwgS2V5d29yZCBrKSA6OiB2IDo6IHJlc3Qgd2hlbiBIYXNodGJsLm1lbSBwYXJhbV9zZXQgayAtPlxuICAgICAgSGFzaHRibC5yZXBsYWNlIGt3YXJncyBrIHY7IGdvIHJlc3RcbiAgICB8IHYgOjogcmVzdCAtPiBjaGlsZHJlbiA6PSB2IDo6ICFjaGlsZHJlbjsgZ28gcmVzdFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgZ28gYXJncztcbiAgKGt3YXJncywgTGlzdC5yZXYgIWNoaWxkcmVuKVxuXG5sZXQgX3ZtX2NvbXBfaml0X2NvdW50ID0gcmVmIDBcbmxldCBfdm1fY29tcF9jZWtfY291bnQgPSByZWYgMFxubGV0IF92bV9pbnNuX2NvdW50ID0gcmVmIDBcbmxldCBfdm1fY2FsbF9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2Nla19jb3VudCA9IHJlZiAwXG5sZXQgdm1fcmVzZXRfY291bnRlcnMgKCkgPSBfdm1faW5zbl9jb3VudCA6PSAwOyBfdm1fY2FsbF9jb3VudCA6PSAwOyBfdm1fY2VrX2NvdW50IDo9IDA7XG4gIF92bV9jb21wX2ppdF9jb3VudCA6PSAwOyBfdm1fY29tcF9jZWtfY291bnQgOj0gMFxubGV0IHZtX3JlcG9ydF9jb3VudGVycyAoKSA9XG4gIFByaW50Zi5lcHJpbnRmIFwiW3ZtLXBlcmZdIGluc25zPSVkIGNhbGxzPSVkIGNla19mYWxsYmFja3M9JWQgY29tcF9qaXQ9JWQgY29tcF9jZWs9JWRcXG4lIVwiXG4gICAgIV92bV9pbnNuX2NvdW50ICFfdm1fY2FsbF9jb3VudCAhX3ZtX2Nla19jb3VudCAhX3ZtX2NvbXBfaml0X2NvdW50ICFfdm1fY29tcF9jZWtfY291bnRcblxuKCoqIEdsb2JhbCBmbGFnOiB0cnVlIHdoaWxlIGEgSklUIGNvbXBpbGF0aW9uIGlzIGluIHByb2dyZXNzLlxuICAgIFByZXZlbnRzIHRoZSBKSVQgaG9vayBmcm9tIGludGVyY2VwdGluZyBjYWxscyBkdXJpbmcgY29tcGlsYXRpb24sXG4gICAgd2hpY2ggd291bGQgY2F1c2UgaW5maW5pdGUgY2FzY2FkZXMgKGNvbXBpbGluZyB0aGUgY29tcGlsZXIpLiAqKVxubGV0IF9qaXRfY29tcGlsaW5nID0gcmVmIGZhbHNlXG5cbigqKiBQdXNoIGEgVk0gY2xvc3VyZSBmcmFtZSBvbnRvIHRoZSBjdXJyZW50IFZNIOKAlCBubyBuZXcgVk0gYWxsb2NhdGlvbi5cbiAgICBUaGlzIGlzIHRoZSBmYXN0IHBhdGggZm9yIGludHJhLVZNIGNsb3N1cmUgY2FsbHMuICopXG5sZXQgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3MgPVxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gdm0uc3A7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGxldCByZXN0X2FyaXR5ID0gY2wudm1fY29kZS52Y19yZXN0X2FyaXR5IGluXG4gIGlmIHJlc3RfYXJpdHkgPj0gMCB0aGVuIGJlZ2luXG4gICAgKCogJnJlc3QgZnVuY3Rpb246IHB1c2ggcG9zaXRpb25hbCBhcmdzLCBjb2xsZWN0IHJlbWFpbmRlciBpbnRvIGEgbGlzdC5cbiAgICAgICBGb3IgKGZuIChhIGIgJnJlc3QgYykgYm9keSkgd2l0aCByZXN0X2FyaXR5PTI6XG4gICAgICAgICBzbG90czogMD1hLCAxPWIsIDI9YyAodGhlIHJlc3QgbGlzdCkgKilcbiAgICBsZXQgbmFyZ3MgPSBMaXN0Lmxlbmd0aCBhcmdzIGluXG4gICAgbGV0IHJlYyBwdXNoX2FyZ3MgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+XG4gICAgICAgIGZvciBfID0gaSB0byByZXN0X2FyaXR5IC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICAgICAgICBwdXNoIHZtIChMaXN0IFtdKVxuICAgICAgfCBhIDo6IHJlbWFpbmluZyAtPlxuICAgICAgICBpZiBpIDwgcmVzdF9hcml0eSB0aGVuIChwdXNoIHZtIGE7IHB1c2hfYXJncyAoaSArIDEpIHJlbWFpbmluZylcbiAgICAgICAgZWxzZSBwdXNoIHZtIChMaXN0IChhIDo6IHJlbWFpbmluZykpXG4gICAgaW5cbiAgICBwdXNoX2FyZ3MgMCBhcmdzO1xuICAgIGxldCB1c2VkID0gKGlmIG5hcmdzID4gcmVzdF9hcml0eSB0aGVuIHJlc3RfYXJpdHkgKyAxIGVsc2UgbmFyZ3MgKyAxKSBpblxuICAgIGZvciBfID0gdXNlZCB0byBjbC52bV9jb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZVxuICBlbmQgZWxzZSBiZWdpblxuICAgIExpc3QuaXRlciAoZnVuIGEgLT4gcHVzaCB2bSBhKSBhcmdzO1xuICAgIGZvciBfID0gTGlzdC5sZW5ndGggYXJncyB0byBjbC52bV9jb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZVxuICBlbmQ7XG4gIHZtLmZyYW1lcyA8LSBmcmFtZSA6OiB2bS5mcmFtZXNcblxuKCoqIENvbnZlcnQgY29tcGlsZXIgb3V0cHV0IChTWCBkaWN0KSB0byBhIHZtX2NvZGUgb2JqZWN0LiAqKVxubGV0IGNvZGVfZnJvbV92YWx1ZSB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKCogQWNjZXB0IGJvdGggY29tcGlsZXIgb3V0cHV0IGtleXMgKGJ5dGVjb2RlL2NvbnN0YW50cy9hcml0eSkgYW5kXG4gICAgICAgU1ggdm0tY29kZSBrZXlzICh2Yy1ieXRlY29kZS92Yy1jb25zdGFudHMvdmMtYXJpdHkpICopXG4gICAgbGV0IGZpbmQyIGsxIGsyID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIGsxIHdpdGhcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gciB8IE5vbmUgLT4gSGFzaHRibC5maW5kX29wdCBkIGsyIGluXG4gICAgbGV0IGJjX2xpc3QgPSBtYXRjaCBmaW5kMiBcImJ5dGVjb2RlXCIgXCJ2Yy1ieXRlY29kZVwiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPlxuICAgICAgICBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gbWF0Y2ggeCB3aXRoXG4gICAgICAgICAgfCBJbnRlZ2VyIG4gLT4gbiB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKSBsKVxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBlbnRyaWVzID0gbWF0Y2ggZmluZDIgXCJjb25zdGFudHNcIiBcInZjLWNvbnN0YW50c1wiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPiBBcnJheS5vZl9saXN0IGxcbiAgICAgIHwgXyAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgY29uc3RhbnRzID0gQXJyYXkubWFwIChmdW4gZW50cnkgLT5cbiAgICAgIG1hdGNoIGVudHJ5IHdpdGhcbiAgICAgIHwgRGljdCBlZCB3aGVuIEhhc2h0YmwubWVtIGVkIFwiYnl0ZWNvZGVcIiB8fCBIYXNodGJsLm1lbSBlZCBcInZjLWJ5dGVjb2RlXCIgLT4gZW50cnlcbiAgICAgIHwgXyAtPiBlbnRyeVxuICAgICkgZW50cmllcyBpblxuICAgIGxldCBhcml0eSA9IG1hdGNoIGZpbmQyIFwiYXJpdHlcIiBcInZjLWFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG4gfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDBcbiAgICBpblxuICAgIGxldCByZXN0X2FyaXR5ID0gbWF0Y2ggZmluZDIgXCJyZXN0LWFyaXR5XCIgXCJ2Yy1yZXN0LWFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG4gfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IC0xXG4gICAgaW5cbiAgICAoKiBDb21wdXRlIGxvY2FscyBmcm9tIGJ5dGVjb2RlOiBzY2FuIGZvciBoaWdoZXN0IExPQ0FMX0dFVC9MT0NBTF9TRVQgc2xvdC5cbiAgICAgICBUaGUgY29tcGlsZXIncyBhcml0eSBtYXkgdW5kZXJjb3VudCB3aGVuIG5lc3RlZCBsZXRzIGFkZCBtYW55IGxvY2Fscy4gKilcbiAgICBsZXQgbWF4X2xvY2FsID0gcmVmIChhcml0eSAtIDEpIGluXG4gICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBiY19saXN0IGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICBsZXQgb3AgPSBiY19saXN0LighaSkgaW5cbiAgICAgIGlmIChvcCA9IDE2ICgqIExPQ0FMX0dFVCAqKSB8fCBvcCA9IDE3ICgqIExPQ0FMX1NFVCAqKSkgJiYgIWkgKyAxIDwgbGVuIHRoZW5cbiAgICAgICAgKGxldCBzbG90ID0gYmNfbGlzdC4oIWkgKyAxKSBpblxuICAgICAgICAgaWYgc2xvdCA+ICFtYXhfbG9jYWwgdGhlbiBtYXhfbG9jYWwgOj0gc2xvdDtcbiAgICAgICAgIGkgOj0gIWkgKyAyKVxuICAgICAgZWxzZSBpZiBvcCA9IDE4ICgqIFVQVkFMVUVfR0VUICopIHx8IG9wID0gMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgICAgICAgICAgfHwgb3AgPSA4ICgqIEpVTVBfSUZfRkFMU0UgKikgfHwgb3AgPSAzMyAoKiBKVU1QX0lGX0ZBTFNFX3UxNiAqKVxuICAgICAgICAgICB8fCBvcCA9IDM0ICgqIEpVTVBfSUZfVFJVRSAqKSB0aGVuXG4gICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICBlbHNlIGlmIG9wID0gMSAoKiBDT05TVCAqKSB8fCBvcCA9IDIwICgqIEdMT0JBTF9HRVQgKikgfHwgb3AgPSAyMSAoKiBHTE9CQUxfU0VUICopXG4gICAgICAgICAgIHx8IG9wID0gMzIgKCogSlVNUCAqKSB8fCBvcCA9IDUxICgqIENMT1NVUkUgKikgfHwgb3AgPSA1MiAoKiBDQUxMX1BSSU0gKilcbiAgICAgICAgICAgfHwgb3AgPSA2NCAoKiBNQUtFX0xJU1QgKikgfHwgb3AgPSA2NSAoKiBNQUtFX0RJQ1QgKikgdGhlblxuICAgICAgICBpIDo9ICFpICsgMyAgKCogdTE2IG9wZXJhbmQgKilcbiAgICAgIGVsc2VcbiAgICAgICAgaSA6PSAhaSArIDFcbiAgICBkb25lO1xuICAgIGxldCBsb2NhbHMgPSAhbWF4X2xvY2FsICsgMSArIDE2IGluICAoKiArMTYgaGVhZHJvb20gZm9yIHRlbXBvcmFyaWVzICopXG4gICAgeyB2Y19hcml0eSA9IGFyaXR5OyB2Y19yZXN0X2FyaXR5ID0gcmVzdF9hcml0eTsgdmNfbG9jYWxzID0gbG9jYWxzO1xuICAgICAgdmNfYnl0ZWNvZGUgPSBiY19saXN0OyB2Y19jb25zdGFudHMgPSBjb25zdGFudHM7XG4gICAgICB2Y19ieXRlY29kZV9saXN0ID0gTm9uZTsgdmNfY29uc3RhbnRzX2xpc3QgPSBOb25lIH1cbiAgfCBfIC0+IHsgdmNfYXJpdHkgPSAwOyB2Y19yZXN0X2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDE2OyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF07XG4gICAgICAgICAgIHZjX2J5dGVjb2RlX2xpc3QgPSBOb25lOyB2Y19jb25zdGFudHNfbGlzdCA9IE5vbmUgfVxuXG4oKiogSklULWNvbXBpbGUgYSBjb21wb25lbnQgb3IgaXNsYW5kIGJvZHkuXG4gICAgV3JhcHMgYm9keSBhcyAoZm4gKHBhcmFtMSBwYXJhbTIgLi4uIFtjaGlsZHJlbl0pIGJvZHkpIGFuZCBjb21waWxlcy5cbiAgICBSZXR1cm5zIFNvbWUgdm1fY2xvc3VyZSBvbiBzdWNjZXNzLCBOb25lIG9uIGZhaWx1cmUuICopXG5sZXQgaml0X2NvbXBpbGVfY29tcCB+bmFtZSB+cGFyYW1zIH5oYXNfY2hpbGRyZW4gfmJvZHkgfmNsb3N1cmUgZ2xvYmFscyA9XG4gIHRyeVxuICAgIGxldCBfY29tcGlsZV9mbiA9IHRyeSBIYXNodGJsLmZpbmQgZ2xvYmFscyBcImNvbXBpbGVcIlxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJKSVQ6IGNvbXBpbGVyIG5vdCBsb2FkZWRcIikgaW5cbiAgICBsZXQgcGFyYW1fbmFtZXMgPSBwYXJhbXMgQCAoaWYgaGFzX2NoaWxkcmVuIHRoZW4gW1wiY2hpbGRyZW5cIl0gZWxzZSBbXSkgaW5cbiAgICBsZXQgcGFyYW1fc3ltcyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTeW1ib2wgcykgcGFyYW1fbmFtZXMpIGluXG4gICAgbGV0IGZuX2V4cHIgPSBMaXN0IFtTeW1ib2wgXCJmblwiOyBwYXJhbV9zeW1zOyBib2R5XSBpblxuICAgIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBmbl9leHByXSBpblxuICAgIGxldCBjb21waWxlX2VudiA9IFN4X3R5cGVzLmVudl9leHRlbmQgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgY29tcGlsZV9lbnYuYmluZGluZ3MgKFN4X3R5cGVzLmludGVybiBrKSB2KSBnbG9iYWxzO1xuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtTeW1ib2wgXCJjb21waWxlXCI7IHF1b3RlZF0pIChFbnYgY29tcGlsZV9lbnYpIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgdm1fbmFtZSA9IFNvbWUgbmFtZTsgdm1fZW52X3JlZiA9IGdsb2JhbHM7XG4gICAgICAgICAgICAgICAgIHZtX2Nsb3N1cmVfZW52ID0gU29tZSBjbG9zdXJlIH1cbiAgICAgICAgZWxzZSBOb25lXG4gICAgICBlbmQgZWxzZSBOb25lXG4gICAgfCBfIC0+IE5vbmUpXG4gIHdpdGggZSAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdC1jb21wXSBGQUlMICVzOiAlc1xcbiUhXCIgbmFtZSAoUHJpbnRleGMudG9fc3RyaW5nIGUpO1xuICAgIE5vbmVcblxuKCoqIENhbGwgYW4gU1ggdmFsdWUgdmlhIENFSywgZGV0ZWN0aW5nIHN1c3BlbnNpb24gaW5zdGVhZCBvZiBlcnJvcmluZy5cbiAgICBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUsIG9yIHJhaXNlcyBWbVN1c3BlbmRlZCBpZiBDRUsgc3VzcGVuZHMuXG4gICAgU2F2ZXMgdGhlIHN1c3BlbmRlZCBDRUsgc3RhdGUgaW4gdm0ucGVuZGluZ19jZWsgZm9yIGxhdGVyIHJlc3VtZS4gKilcbmxldCBjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgYXJncyA9XG4gIGluY3IgX3ZtX2Nla19jb3VudDtcbiAgKCogUmVtb3ZlZCBkZWJ1ZyB0cmFjZSAqKVxuICBsZXQgYSA9IG1hdGNoIGFyZ3Mgd2l0aCBOaWwgLT4gW10gfCBMaXN0IGwgLT4gbCB8IF8gLT4gW2FyZ3NdIGluXG4gICgqIFJlcGxhY2UgX2FjdGl2ZV92bSB3aXRoIGFuIGVtcHR5IGlzb2xhdGlvbiBWTSBzbyBjYWxsX2Nsb3N1cmVfcmV1c2VcbiAgICAgaW5zaWRlIHRoZSBDRUsgcHVzaGVzIG9udG8gYW4gZW1wdHkgZnJhbWUgc3RhY2sgcmF0aGVyIHRoYW4gdGhlIGNhbGxlcidzLlxuICAgICBXaXRob3V0IHRoaXMsIGEgVm1DbG9zdXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgQ0VLIChlLmcuIGhzLXdhaXQpXG4gICAgIG1lcmdlcyBmcmFtZXMgd2l0aCB0aGUgY2FsbGVyJ3MgVk0gKGUuZy4gZG8tcmVwZWF0KSwgYW5kIG9uIHJlc3VtZVxuICAgICB0aGUgVk0gc2tpcHMgdGhlIENFSydzIHJlbWFpbmluZyBjb250aW51YXRpb24gKHdyb25nIG11dGF0aW9uIG9yZGVyKS5cbiAgICAgVXNpbmcgU29tZShpc29sYXRpb24pIHJhdGhlciB0aGFuIE5vbmUga2VlcHMgdGhlIGNhbGxfY2xvc3VyZV9yZXVzZVxuICAgICBcIlNvbWVcIiBwYXRoIHdoaWNoIHByZXNlcnZlcyBleGNlcHRpb24gaWRlbnRpdHkgaW4ganNfb2Zfb2NhbWwuICopXG4gIGxldCBzYXZlZF9hY3RpdmUgPSAhX2FjdGl2ZV92bSBpblxuICBfYWN0aXZlX3ZtIDo9IFNvbWUgKGNyZWF0ZSB2bS5nbG9iYWxzKTtcbiAgbGV0IHN0YXRlID0gU3hfcmVmLmNvbnRpbnVlX3dpdGhfY2FsbCBmIChMaXN0IGEpIChFbnYgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSkgKExpc3QgYSkgKExpc3QgW10pIGluXG4gIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlIGluXG4gIF9hY3RpdmVfdm0gOj0gc2F2ZWRfYWN0aXZlO1xuICBtYXRjaCBTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgIHZtLnBlbmRpbmdfY2VrIDwtIFNvbWUgZmluYWw7XG4gICAgcmFpc2UgKFZtU3VzcGVuZGVkIChTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIHZtKSlcbiAgfCBfIC0+IFN4X3JlZi5jZWtfdmFsdWUgZmluYWxcblxuKCoqIEV4ZWN1dGUgYSBjbG9zdXJlIHdpdGggYXJndW1lbnRzIOKAlCBjcmVhdGVzIGEgZnJlc2ggVk0uXG4gICAgVXNlZCBmb3IgZW50cnkgcG9pbnRzOiBKSVQgTGFtYmRhIGNhbGxzLCBtb2R1bGUgZXhlY3V0aW9uLCBjcm9zcy1ib3VuZGFyeS4gKilcbmxldCByZWMgY2FsbF9jbG9zdXJlIGNsIGFyZ3MgZ2xvYmFscyA9XG4gIGluY3IgX3ZtX2NhbGxfY291bnQ7XG4gIGxldCBwcmV2X3ZtID0gIV9hY3RpdmVfdm0gaW5cbiAgbGV0IHZtID0gY3JlYXRlIGdsb2JhbHMgaW5cbiAgX2FjdGl2ZV92bSA6PSBTb21lIHZtO1xuICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJncztcbiAgKHRyeSBydW4gdm0gd2l0aCBlIC0+IF9hY3RpdmVfdm0gOj0gcHJldl92bTsgcmFpc2UgZSk7XG4gIF9hY3RpdmVfdm0gOj0gcHJldl92bTtcbiAgcG9wIHZtXG5cbigqKiBDYWxsIGEgVm1DbG9zdXJlIG9uIHRoZSBhY3RpdmUgVk0gaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgVGhpcyBpcyB0aGUgcGF0aCB1c2VkIGJ5IEhPIHByaW1pdGl2ZXMgKG1hcCwgZmlsdGVyLCBmb3ItZWFjaCwgc29tZSkgc29cbiAgICBjYWxsYmFja3MgcnVuIG9uIHRoZSBzYW1lIFZNLCBhdm9pZGluZyBwZXItY2FsbCBWTSBhbGxvY2F0aW9uIG92ZXJoZWFkLiAqKVxuYW5kIGNhbGxfY2xvc3VyZV9yZXVzZSBjbCBhcmdzID1cbiAgbWF0Y2ggIV9hY3RpdmVfdm0gd2l0aFxuICB8IFNvbWUgdm0gLT5cbiAgICBsZXQgc2F2ZWRfc3AgPSB2bS5zcCBpblxuICAgIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzO1xuICAgIGxldCBzYXZlZF9mcmFtZXMgPSBMaXN0LnRsIHZtLmZyYW1lcyBpblxuICAgIHZtLmZyYW1lcyA8LSBbTGlzdC5oZCB2bS5mcmFtZXNdO1xuICAgIGxldCByZXN1bHQgPVxuICAgICAgKHRyeSBydW4gdm07XG4gICAgICAgICgqIE5vcm1hbCBjb21wbGV0aW9uOiByZXN1bHQgc2l0cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgT1BfUkVUVVJOIG5vcm1hbGx5IGxlYXZlcyBzcCA9IHNhdmVkX3NwICsgMSwgYnV0IHRoZVxuICAgICAgICAgICBieXRlY29kZS1leGhhdXN0ZWQgcGF0aCAob3IgYSBjYWxsZWUgdGhhdCByZXR1cm5zIGEgY2xvc3VyZSB3aG9zZVxuICAgICAgICAgICBvd24gUkVUVVJOIGxlYXZlcyBleHRyYSBzdGFjayByZXNpZHVlKSBjYW4gbGVhdmUgc3AgaW5jb25zaXN0ZW50LlxuICAgICAgICAgICBSZWFkIHRoZSByZXN1bHQgYXQgdGhlIGV4cGVjdGVkIHNsb3QuICopXG4gICAgICAgIGlmIHZtLnNwID4gc2F2ZWRfc3AgdGhlbiB2bS5zdGFjay4odm0uc3AgLSAxKSBlbHNlIE5pbFxuICAgICAgIHdpdGhcbiAgICAgICB8IFZtU3VzcGVuZGVkIChyZXEsIF8pIGFzIGUgLT5cbiAgICAgICAgIChtYXRjaCAhU3hfdHlwZXMuX2Nla19pb19yZXNvbHZlciB3aXRoXG4gICAgICAgICAgfCBTb21lIHJlc29sdmVyIC0+XG4gICAgICAgICAgICAoKiBTZXJ2aW5nIHBhdGg6IGEgYHBlcmZvcm1gIGZpcmVkIGluc2lkZSB0aGlzIEhPLXByaW1pdGl2ZVxuICAgICAgICAgICAgICAgY2FsbGJhY2sgKG1hcC9maWx0ZXIvcmVkdWNlL2Zvci1lYWNoL+KApikuIFRoZSBwcmltaXRpdmUncyBuYXRpdmVcbiAgICAgICAgICAgICAgIE9DYW1sIGxvb3Agc2l0cyBiZXR3ZWVuIHVzIGFuZCB0aGUgcmVzdW1lIHBvaW50LCBzbyB3ZSBDQU5OT1RcbiAgICAgICAgICAgICAgIHVud2luZCBpdCBhbmQgcmVzdW1lIGxhdGVyICh0aGUgbG9vcCBzdGF0ZSB3b3VsZCBiZSBsb3N0IGFuZCB0aGVcbiAgICAgICAgICAgICAgIHJlbWFpbmluZyBlbGVtZW50cyBkcm9wcGVkIOKAlCBjb3JydXB0aW5nIHRoZSBzdGFjayBzbyB0aGUgbmV4dFxuICAgICAgICAgICAgICAgQ0FMTF9QUklNIHNlZXMgd3JvbmcgYXJncykuIEluc3RlYWQgcmVzb2x2ZSB0aGUgY2FsbGJhY2sncyBJT1xuICAgICAgICAgICAgICAgaW5saW5lIGFuZCBydW4gaXQgdG8gY29tcGxldGlvbiByaWdodCBoZXJlLCByZXR1cm5pbmcgaXRzIHZhbHVlXG4gICAgICAgICAgICAgICB0byB0aGUgbmF0aXZlIGxvb3AgZXhhY3RseSBhcyBhIG5vbi1zdXNwZW5kaW5nIGNhbGxiYWNrIHdvdWxkLlxuICAgICAgICAgICAgICAgcmV1c2Vfc3RhY2sgaXMgaXNvbGF0ZWQgc28gYW4gb3V0ZXIgc3VzcGVuc2lvbidzIHNhdmVkXG4gICAgICAgICAgICAgICBjb250aW51YXRpb25zIGFyZW4ndCBjb25zdW1lZCBieSB0aGlzIG5lc3RlZCByZXN1bWUuICopXG4gICAgICAgICAgICBsZXQgc2F2ZWRfcmV1c2UgPSB2bS5yZXVzZV9zdGFjayBpblxuICAgICAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gW107XG4gICAgICAgICAgICBsZXQgcmVjIHNldHRsZSByZXEgPVxuICAgICAgICAgICAgICBsZXQgciA9IHJlc29sdmVyIHJlcSBOaWwgaW5cbiAgICAgICAgICAgICAgKHRyeSByZXN1bWVfdm0gdm0gclxuICAgICAgICAgICAgICAgd2l0aCBWbVN1c3BlbmRlZCAocmVxMiwgXykgLT4gc2V0dGxlIHJlcTIpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGNiID0gc2V0dGxlIHJlcSBpblxuICAgICAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gc2F2ZWRfcmV1c2U7XG4gICAgICAgICAgICBjYlxuICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgKCogQ0VLLWRyaXZlbiBwYXRoIChubyBzeW5jaHJvbm91cyByZXNvbHZlcik6IHByZXNlcnZlIHRoZSBleGlzdGluZ1xuICAgICAgICAgICAgICAgYmVoYXZpb3VyIOKAlCBzYXZlIHRoZSBjYWxsZXIncyBjb250aW51YXRpb24gb24gdGhlIHJldXNlIHN0YWNrIGFuZFxuICAgICAgICAgICAgICAgcmUtcmFpc2Ugc28gcmVzdW1lX3ZtIHJlc3RvcmVzIGl0IGFmdGVyIHRoZSBjYWxsYmFjayBmaW5pc2hlcy5cbiAgICAgICAgICAgICAgIERPTidUIG1lcmdlIGZyYW1lcyDigJQgdGhhdCBjb3JydXB0cyB0aGUgZnJhbWUgY2hhaW4uICopXG4gICAgICAgICAgICB2bS5yZXVzZV9zdGFjayA8LSAoc2F2ZWRfZnJhbWVzLCBzYXZlZF9zcCkgOjogdm0ucmV1c2Vfc3RhY2s7XG4gICAgICAgICAgICByYWlzZSBlKVxuICAgICAgIHwgZSAtPlxuICAgICAgICAgdm0uZnJhbWVzIDwtIHNhdmVkX2ZyYW1lcztcbiAgICAgICAgIHZtLnNwIDwtIHNhdmVkX3NwO1xuICAgICAgICAgcmFpc2UgZSlcbiAgICBpblxuICAgIHZtLmZyYW1lcyA8LSBzYXZlZF9mcmFtZXM7XG4gICAgdm0uc3AgPC0gc2F2ZWRfc3A7XG4gICAgcmVzdWx0XG4gIHwgTm9uZSAtPlxuICAgIGNhbGxfY2xvc3VyZSBjbCBhcmdzIGNsLnZtX2Vudl9yZWZcblxuKCoqIENhbGwgYSB2YWx1ZSBhcyBhIGZ1bmN0aW9uIOKAlCBkaXNwYXRjaCBieSB0eXBlLlxuICAgIFZtQ2xvc3VyZTogcHVzaGVzIGZyYW1lIG9uIGN1cnJlbnQgVk0gKGZhc3QgaW50cmEtVk0gcGF0aCkuXG4gICAgTGFtYmRhOiB0cmllcyBKSVQgdGhlbiBmYWxscyBiYWNrIHRvIENFSy5cbiAgICBOYXRpdmVGbjogY2FsbHMgZGlyZWN0bHkuICopXG5hbmQgdm1fY2FsbCB2bSBmIGFyZ3MgPVxuICBtYXRjaCBmIHdpdGhcbiAgfCBWbUNsb3N1cmUgY2wgLT5cbiAgICAoKiBGYXN0IHBhdGg6IHB1c2ggZnJhbWUgb24gY3VycmVudCBWTSDigJQgbm8gYWxsb2NhdGlvbiwgZW5hYmxlcyBUQ08gKilcbiAgICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJnc1xuICB8IE5hdGl2ZUZuIChfbmFtZSwgZm4pIC0+XG4gICAgbGV0IHJlc3VsdCA9IGZuIGFyZ3MgaW5cbiAgICBwdXNoIHZtIHJlc3VsdFxuICB8IExhbWJkYSBsIC0+XG4gICAgKG1hdGNoIGwubF9jb21waWxlZCB3aXRoXG4gICAgIHwgU29tZSBjbCB3aGVuIG5vdCAoaXNfaml0X2ZhaWxlZCBjbCkgLT5cbiAgICAgICAoKiBDYWNoZWQgYnl0ZWNvZGUg4oCUIHB1c2ggZnJhbWUgb24gY3VycmVudCBWTSAqKVxuICAgICAgIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzXG4gICAgIHwgU29tZSBfIC0+XG4gICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKVxuICAgICB8IE5vbmUgLT5cbiAgICAgICBpZiBsLmxfbmFtZSA8PiBOb25lXG4gICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgbC5sX2NhbGxfY291bnQgPC0gbC5sX2NhbGxfY291bnQgKyAxO1xuICAgICAgICAgaWYgbC5sX2NhbGxfY291bnQgPj0gIVN4X3R5cGVzLmppdF90aHJlc2hvbGQgJiYgIVN4X3R5cGVzLmppdF9idWRnZXQgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgaml0X2ZhaWxlZF9zZW50aW5lbDtcbiAgICAgICAgICAgbWF0Y2ggIWppdF9jb21waWxlX3JlZiBsIHZtLmdsb2JhbHMgd2l0aFxuICAgICAgICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICAgICAgICBpbmNyIFN4X3R5cGVzLmppdF9jb21waWxlZF9jb3VudDtcbiAgICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSBjbDtcbiAgICAgICAgICAgICAoKiBQaGFzZSAyIExSVTogdHJhY2sgdGhpcyBjb21waWxlZCBsYW1iZGE7IGlmIGNhY2hlIGV4Y2VlZHMgYnVkZ2V0LFxuICAgICAgICAgICAgICAgIGV2aWN0IHRoZSBvbGRlc3QgYnkgY2xlYXJpbmcgaXRzIGxfY29tcGlsZWQgc2xvdC4gKilcbiAgICAgICAgICAgICBRdWV1ZS5hZGQgKGwubF91aWQsIExhbWJkYSBsKSBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWU7XG4gICAgICAgICAgICAgd2hpbGUgUXVldWUubGVuZ3RoIFN4X3R5cGVzLmppdF9jYWNoZV9xdWV1ZSA+ICFTeF90eXBlcy5qaXRfYnVkZ2V0IGRvXG4gICAgICAgICAgICAgICAobWF0Y2ggUXVldWUucG9wIFN4X3R5cGVzLmppdF9jYWNoZV9xdWV1ZSB3aXRoXG4gICAgICAgICAgICAgICAgfCAoXywgTGFtYmRhIGV2X2wpIC0+IGV2X2wubF9jb21waWxlZCA8LSBOb25lOyBpbmNyIFN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50XG4gICAgICAgICAgICAgICAgfCBfIC0+ICgpKVxuICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3NcbiAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgaW5jciBTeF90eXBlcy5qaXRfc2tpcHBlZF9jb3VudDtcbiAgICAgICAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpXG4gICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICBpbmNyIFN4X3R5cGVzLmppdF90aHJlc2hvbGRfc2tpcHBlZF9jb3VudDtcbiAgICAgICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKVxuICAgICAgICAgZW5kXG4gICAgICAgZW5kXG4gICAgICAgZWxzZVxuICAgICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKSlcbiAgfCBDb21wb25lbnQgYyAtPlxuICAgIGxldCAoa3dhcmdzLCBjaGlsZHJlbikgPSBwYXJzZV9rZXl3b3JkX2FyZ3MgYy5jX3BhcmFtcyBhcmdzIGluXG4gICAgKCogR2V0IG9yIGNvbXBpbGUgdGhlIGNvbXBvbmVudCBib2R5ICopXG4gICAgbGV0IGNvbXBpbGVkID0gbWF0Y2ggYy5jX2NvbXBpbGVkIHdpdGhcbiAgICAgIHwgU29tZSBjbCB3aGVuIG5vdCAoaXNfaml0X2ZhaWxlZCBjbCkgLT4gU29tZSBjbFxuICAgICAgfCBTb21lIF8gLT4gTm9uZVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIGMuY19jb21waWxlZCA8LSBTb21lIGppdF9mYWlsZWRfc2VudGluZWw7XG4gICAgICAgIGxldCByZXN1bHQgPSBqaXRfY29tcGlsZV9jb21wIH5uYW1lOmMuY19uYW1lIH5wYXJhbXM6Yy5jX3BhcmFtc1xuICAgICAgICAgIH5oYXNfY2hpbGRyZW46Yy5jX2hhc19jaGlsZHJlbiB+Ym9keTpjLmNfYm9keVxuICAgICAgICAgIH5jbG9zdXJlOmMuY19jbG9zdXJlIHZtLmdsb2JhbHMgaW5cbiAgICAgICAgKG1hdGNoIHJlc3VsdCB3aXRoIFNvbWUgY2wgLT4gYy5jX2NvbXBpbGVkIDwtIFNvbWUgY2wgfCBOb25lIC0+ICgpKTtcbiAgICAgICAgcmVzdWx0XG4gICAgaW5cbiAgICAobWF0Y2ggY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICBpbmNyIF92bV9jb21wX2ppdF9jb3VudDtcbiAgICAgICAoKiBCdWlsZCBwb3NpdGlvbmFsIGFyZ3M6IGtleXdvcmQgcGFyYW1zIGluIG9yZGVyLCB0aGVuIGNoaWxkcmVuICopXG4gICAgICAgbGV0IGNhbGxfYXJncyA9IExpc3QubWFwIChmdW4gcCAtPlxuICAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBrd2FyZ3MgcCB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWxcbiAgICAgICApIGMuY19wYXJhbXMgaW5cbiAgICAgICBsZXQgY2FsbF9hcmdzID0gaWYgYy5jX2hhc19jaGlsZHJlblxuICAgICAgICAgdGhlbiBjYWxsX2FyZ3MgQCBbTGlzdCBjaGlsZHJlbl1cbiAgICAgICAgIGVsc2UgY2FsbF9hcmdzIGluXG4gICAgICAgKHRyeSBwdXNoIHZtIChjYWxsX2Nsb3N1cmUgY2wgY2FsbF9hcmdzIGNsLnZtX2Vudl9yZWYpXG4gICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgIGluY3IgX3ZtX2Nla19jb3VudDsgaW5jciBfdm1fY29tcF9jZWtfY291bnQ7XG4gICAgICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKSlcbiAgICAgfCBOb25lIC0+XG4gICAgICAgaW5jciBfdm1fY2VrX2NvdW50OyBpbmNyIF92bV9jb21wX2Nla19jb3VudDtcbiAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpKVxuICB8IElzbGFuZCBpIC0+XG4gICAgbGV0IChrd2FyZ3MsIGNoaWxkcmVuKSA9IHBhcnNlX2tleXdvcmRfYXJncyBpLmlfcGFyYW1zIGFyZ3MgaW5cbiAgICBsZXQgY29tcGlsZWQgPSBtYXRjaCBpLmlfY29tcGlsZWQgd2l0aFxuICAgICAgfCBTb21lIGNsIHdoZW4gbm90IChpc19qaXRfZmFpbGVkIGNsKSAtPiBTb21lIGNsXG4gICAgICB8IFNvbWUgXyAtPiBOb25lXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgaS5pX2NvbXBpbGVkIDwtIFNvbWUgaml0X2ZhaWxlZF9zZW50aW5lbDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGppdF9jb21waWxlX2NvbXAgfm5hbWU6aS5pX25hbWUgfnBhcmFtczppLmlfcGFyYW1zXG4gICAgICAgICAgfmhhc19jaGlsZHJlbjppLmlfaGFzX2NoaWxkcmVuIH5ib2R5OmkuaV9ib2R5XG4gICAgICAgICAgfmNsb3N1cmU6aS5pX2Nsb3N1cmUgdm0uZ2xvYmFscyBpblxuICAgICAgICAobWF0Y2ggcmVzdWx0IHdpdGggU29tZSBjbCAtPiBpLmlfY29tcGlsZWQgPC0gU29tZSBjbCB8IE5vbmUgLT4gKCkpO1xuICAgICAgICByZXN1bHRcbiAgICBpblxuICAgIChtYXRjaCBjb21waWxlZCB3aXRoXG4gICAgIHwgU29tZSBjbCAtPlxuICAgICAgIGluY3IgX3ZtX2NvbXBfaml0X2NvdW50O1xuICAgICAgIGxldCBjYWxsX2FyZ3MgPSBMaXN0Lm1hcCAoZnVuIHAgLT5cbiAgICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQga3dhcmdzIHAgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsXG4gICAgICAgKSBpLmlfcGFyYW1zIGluXG4gICAgICAgbGV0IGNhbGxfYXJncyA9IGlmIGkuaV9oYXNfY2hpbGRyZW5cbiAgICAgICAgIHRoZW4gY2FsbF9hcmdzIEAgW0xpc3QgY2hpbGRyZW5dXG4gICAgICAgICBlbHNlIGNhbGxfYXJncyBpblxuICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGNhbGxfYXJncyBjbC52bV9lbnZfcmVmKVxuICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICBpbmNyIF92bV9jZWtfY291bnQ7IGluY3IgX3ZtX2NvbXBfY2VrX2NvdW50O1xuICAgICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSkpXG4gICAgIHwgTm9uZSAtPlxuICAgICAgIGluY3IgX3ZtX2Nla19jb3VudDsgaW5jciBfdm1fY29tcF9jZWtfY291bnQ7XG4gICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKSlcbiAgfCBfIC0+XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk06IG5vdCBjYWxsYWJsZTogXCIgXiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBmKSlcblxuKCoqIE1haW4gZXhlY3V0aW9uIGxvb3Ag4oCUIGl0ZXJhdGl2ZSAobm8gT0NhbWwgc3RhY2sgZ3Jvd3RoKS5cbiAgICBWbUNsb3N1cmUgY2FsbHMgcHVzaCBmcmFtZXM7IHRoZSBsb29wIHBpY2tzIHRoZW0gdXAuXG4gICAgT1BfVEFJTF9DQUxMICsgVm1DbG9zdXJlID0gdHJ1ZSBUQ086IGRyb3AgZnJhbWUsIHB1c2ggbmV3LCBsb29wLiAqKVxuYW5kIHJ1biB2bSA9XG4gIHdoaWxlIHZtLmZyYW1lcyA8PiBbXSBkb1xuICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoXG4gICAgfCBbXSAtPiAoKSAgKCogZ3VhcmQgaGFuZGxlZCBieSB3aGlsZSBjb25kaXRpb24gKilcbiAgICB8IGZyYW1lIDo6IHJlc3RfZnJhbWVzIC0+XG4gICAgICBsZXQgYmMgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUgaW5cbiAgICAgIGxldCBjb25zdHMgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzIGluXG4gICAgICBpZiBmcmFtZS5pcCA+PSBBcnJheS5sZW5ndGggYmMgdGhlbiBiZWdpblxuICAgICAgICAoKiBCeXRlY29kZSBleGhhdXN0ZWQgd2l0aG91dCBleHBsaWNpdCBSRVRVUk4g4oCUIHBvcCBmcmFtZSBsaWtlIFJFVFVSTiAqKVxuICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICBQcmludGYuZXByaW50ZiBcIlt2bV0gV0FSTjogYnl0ZWNvZGUgZXhoYXVzdGVkIHdpdGhvdXQgUkVUVVJOIGluICVzIChiYXNlPSVkIHNwPSVkIGZyYW1lcz0lZClcXG4lIVwiXG4gICAgICAgICAgZm5fbmFtZSBmcmFtZS5iYXNlIHZtLnNwIChMaXN0Lmxlbmd0aCByZXN0X2ZyYW1lcyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBpZiB2bS5zcCA+IGZyYW1lLmJhc2UgdGhlbiBwb3Agdm0gZWxzZSBOaWwgaW5cbiAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzO1xuICAgICAgICB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICBpZiByZXN0X2ZyYW1lcyA8PiBbXSB0aGVuIHB1c2ggdm0gcmVzdWx0XG4gICAgICAgICgqIElmIG5vIG1vcmUgZnJhbWVzLCByZXN1bHQgc3RheXMgb24gc3RhY2sgZm9yIGNhbGxfY2xvc3VyZSB0byBwb3AgKilcbiAgICAgIGVuZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgc2F2ZWRfaXAgPSBmcmFtZS5pcCBpblxuICAgICAgICBsZXQgb3AgPSBiYy4oZnJhbWUuaXApIGluXG4gICAgICAgIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgMTtcbiAgICAgICAgaW5jciBfdm1faW5zbl9jb3VudDtcbiAgICAgICAgKCogQ2hlY2sgdGltZW91dCDigJQgY29tcGFyZSBWTSBpbnN0cnVjdGlvbiBjb3VudCBhZ2FpbnN0IHN0ZXAgbGltaXQgKilcbiAgICAgICAgaWYgIV92bV9pbnNuX2NvdW50IGxhbmQgMHhGRkZGID0gMCAmJiAhU3hfcmVmLnN0ZXBfbGltaXQgPiAwXG4gICAgICAgICAgICYmICFfdm1faW5zbl9jb3VudCA+ICFTeF9yZWYuc3RlcF9saW1pdCB0aGVuXG4gICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJUSU1FT1VUOiBzdGVwIGxpbWl0IGV4Y2VlZGVkXCIpO1xuICAgICAgICAodHJ5IG1hdGNoIG9wIHdpdGhcbiAgICAgICAgKCogLS0tLSBDb25zdGFudHMgLS0tLSAqKVxuICAgICAgICB8IDEgKCogT1BfQ09OU1QgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBpZiBpZHggPj0gQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogQ09OU1QgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbCBzaXplICVkKVwiXG4gICAgICAgICAgICAgIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBwdXNoIHZtIGNvbnN0cy4oaWR4KVxuICAgICAgICB8IDIgKCogT1BfTklMICopICAgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgfCAzICgqIE9QX1RSVUUgKikgIC0+IHB1c2ggdm0gKEJvb2wgdHJ1ZSlcbiAgICAgICAgfCA0ICgqIE9QX0ZBTFNFICopIC0+IHB1c2ggdm0gKEJvb2wgZmFsc2UpXG4gICAgICAgIHwgNSAoKiBPUF9QT1AgKikgICAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgfCA2ICgqIE9QX0RVUCAqKSAgIC0+IHB1c2ggdm0gKHBlZWsgdm0pXG4gICAgICAgIHwgNyAoKiBPUF9TV0FQICopICAtPlxuICAgICAgICAgIGxldCBhID0gcG9wIHZtIGluIGxldCBiID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSBhOyBwdXNoIHZtIGJcblxuICAgICAgICAoKiAtLS0tIFZhcmlhYmxlIGFjY2VzcyAtLS0tICopXG4gICAgICAgIHwgMTYgKCogT1BfTE9DQUxfR0VUICopIC0+XG4gICAgICAgICAgbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZVxuICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIGxldCBpZHggPSBmcmFtZS5iYXNlICsgc2xvdCBpblxuICAgICAgICAgICAgICBpZiBpZHggPj0gdm0uc3AgdGhlblxuICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICAgICAgXCJWTTogTE9DQUxfR0VUIHNsb3Q9JWQgYmFzZT0lZCBzcD0lZCBvdXQgb2YgYm91bmRzXCIgc2xvdCBmcmFtZS5iYXNlIHZtLnNwKSk7XG4gICAgICAgICAgICAgIHZtLnN0YWNrLihpZHgpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgfCAxNyAoKiBPUF9MT0NBTF9TRVQgKikgLT5cbiAgICAgICAgICBsZXQgc2xvdCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICAoKiBXcml0ZSB0byBzaGFyZWQgY2VsbCBpZiBjYXB0dXJlZCwgZWxzZSB0byBzdGFjayAqKVxuICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlIDwtIHZcbiAgICAgICAgICAgfCBOb25lIC0+IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgc2xvdCkgPC0gdilcbiAgICAgICAgfCAxOCAoKiBPUF9VUFZBTFVFX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgaWYgaWR4ID49IEFycmF5Lmxlbmd0aCBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzIHRoZW5cbiAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICBcIlZNOiBVUFZBTFVFX0dFVCBpZHg9JWQgb3V0IG9mIGJvdW5kcyAoaGF2ZSAlZClcIiBpZHhcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzKSkpO1xuICAgICAgICAgIHB1c2ggdm0gZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZVxuICAgICAgICB8IDE5ICgqIE9QX1VQVkFMVUVfU0VUICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlIDwtIHBlZWsgdm1cbiAgICAgICAgfCAyMCAoKiBPUF9HTE9CQUxfR0VUICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBjb25zdHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgKCogQ2hlY2sgY2xvc3VyZSBlbnYgZmlyc3QgKG1hdGNoZXMgT1BfR0xPQkFMX1NFVCBwcmlvcml0eSkgKilcbiAgICAgICAgICBsZXQgaWQgPSBTeF90eXBlcy5pbnRlcm4gbmFtZSBpblxuICAgICAgICAgIGxldCBmb3VuZF9pbl9lbnYgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBlbnYgLT5cbiAgICAgICAgICAgICAgbGV0IHJlYyBlbnZfbG9va3VwIGUgPVxuICAgICAgICAgICAgICAgIHRyeSBTb21lIChIYXNodGJsLmZpbmQgZS5iaW5kaW5ncyBpZClcbiAgICAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgICAgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZW52X2xvb2t1cCBwIHwgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgIGluIGVudl9sb29rdXAgZW52XG4gICAgICAgICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHYgPSBtYXRjaCBmb3VuZF9pbl9lbnYgd2l0aFxuICAgICAgICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lXG4gICAgICAgICAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgICAoKiBUcnkgcmVzb2x2ZSBob29rIOKAlCBsb2FkcyB0aGUgbGlicmFyeSB0aGF0IGV4cG9ydHMgdGhpcyBzeW1ib2wgKilcbiAgICAgICAgICAgICAgICAgICh0cnlcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVfZm4gPSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBcIl9fcmVzb2x2ZS1zeW1ib2xcIiBpblxuICAgICAgICAgICAgICAgICAgICBpZ25vcmUgKFN4X3J1bnRpbWUuc3hfY2FsbCByZXNvbHZlX2ZuIFtTdHJpbmcgbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZVxuICAgICAgICAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpXG4gICAgICAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgIHwgMjEgKCogT1BfR0xPQkFMX1NFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICgqIFdyaXRlIHRvIGNsb3N1cmUgZW52IGlmIHRoZSBuYW1lIGV4aXN0cyB0aGVyZSAobXV0YWJsZSBjbG9zdXJlIHZhcnMpICopXG4gICAgICAgICAgbGV0IHdyaXR0ZW4gPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBlbnYgLT5cbiAgICAgICAgICAgICAgbGV0IGlkID0gU3hfdHlwZXMuaW50ZXJuIG5hbWUgaW5cbiAgICAgICAgICAgICAgbGV0IHJlYyBmaW5kX2VudiBlID1cbiAgICAgICAgICAgICAgICBpZiBIYXNodGJsLm1lbSBlLmJpbmRpbmdzIGlkIHRoZW5cbiAgICAgICAgICAgICAgICAgIChIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCAocGVlayB2bSk7IHRydWUpXG4gICAgICAgICAgICAgICAgZWxzZSBtYXRjaCBlLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBmaW5kX2VudiBwIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgICAgICAgICBpbiBmaW5kX2VudiBlbnZcbiAgICAgICAgICAgIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgICAgIGluXG4gICAgICAgICAgaWYgbm90IHdyaXR0ZW4gdGhlbiBiZWdpblxuICAgICAgICAgICAgbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIHY7XG4gICAgICAgICAgICAobWF0Y2ggIVN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgd2l0aCBTb21lIGYgLT4gZiBuYW1lIHYgfCBOb25lIC0+ICgpKVxuICAgICAgICAgIGVuZFxuXG4gICAgICAgICgqIC0tLS0gQ29udHJvbCBmbG93IC0tLS0gKilcbiAgICAgICAgfCAzMiAoKiBPUF9KVU1QICopIC0+XG4gICAgICAgICAgbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluXG4gICAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgfCAzMyAoKiBPUF9KVU1QX0lGX0ZBTFNFICopIC0+XG4gICAgICAgICAgbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBpZiBub3QgKHN4X3RydXRoeSB2KSB0aGVuIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgIHwgMzQgKCogT1BfSlVNUF9JRl9UUlVFICopIC0+XG4gICAgICAgICAgbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG5cbiAgICAgICAgKCogLS0tLSBFeGNlcHRpb24gaGFuZGxpbmcgLS0tLSAqKVxuICAgICAgICB8IDM1ICgqIE9QX1BVU0hfSEFORExFUiAqKSAtPlxuICAgICAgICAgIGxldCBjYXRjaF9vZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBlbnRyeSA9IHtcbiAgICAgICAgICAgIGhfY2F0Y2hfaXAgPSBmcmFtZS5pcCArIGNhdGNoX29mZnNldDtcbiAgICAgICAgICAgIGhfZnJhbWVfZGVwdGggPSBMaXN0Lmxlbmd0aCB2bS5mcmFtZXM7XG4gICAgICAgICAgICBoX3NwID0gdm0uc3A7XG4gICAgICAgICAgICBoX2ZyYW1lID0gZnJhbWU7XG4gICAgICAgICAgfSBpblxuICAgICAgICAgIHZtLmhhbmRsZXJfc3RhY2sgPC0gZW50cnkgOjogdm0uaGFuZGxlcl9zdGFja1xuICAgICAgICB8IDM2ICgqIE9QX1BPUF9IQU5ETEVSICopIC0+XG4gICAgICAgICAgKG1hdGNoIHZtLmhhbmRsZXJfc3RhY2sgd2l0aFxuICAgICAgICAgICB8IF8gOjogcmVzdCAtPiB2bS5oYW5kbGVyX3N0YWNrIDwtIHJlc3RcbiAgICAgICAgICAgfCBbXSAtPiAoKSlcbiAgICAgICAgfCAzNyAoKiBPUF9SQUlTRSAqKSAtPlxuICAgICAgICAgIGxldCBleG5fdmFsID0gcG9wIHZtIGluXG4gICAgICAgICAgKG1hdGNoIHZtLmhhbmRsZXJfc3RhY2sgd2l0aFxuICAgICAgICAgICB8IGVudHJ5IDo6IHJlc3QgLT5cbiAgICAgICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIHJlc3Q7XG4gICAgICAgICAgICAgKCogVW53aW5kIGZyYW1lcyB0byB0aGUgaGFuZGxlcidzIGRlcHRoICopXG4gICAgICAgICAgICAgd2hpbGUgTGlzdC5sZW5ndGggdm0uZnJhbWVzID4gZW50cnkuaF9mcmFtZV9kZXB0aCBkb1xuICAgICAgICAgICAgICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGhcbiAgICAgICAgICAgICAgIHwgXyA6OiBmcyAtPiB2bS5mcmFtZXMgPC0gZnNcbiAgICAgICAgICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICgqIFJlc3RvcmUgc3RhY2sgcG9pbnRlciBhbmQganVtcCB0byBjYXRjaCAqKVxuICAgICAgICAgICAgIHZtLnNwIDwtIGVudHJ5Lmhfc3A7XG4gICAgICAgICAgICAgZW50cnkuaF9mcmFtZS5pcCA8LSBlbnRyeS5oX2NhdGNoX2lwO1xuICAgICAgICAgICAgIHB1c2ggdm0gZXhuX3ZhbFxuICAgICAgICAgICB8IFtdIC0+XG4gICAgICAgICAgICAgKCogTm8gaGFuZGxlciDigJQgcmFpc2UgT0NhbWwgZXhjZXB0aW9uIGZvciBDRUsgdG8gY2F0Y2ggKilcbiAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmhhbmRsZWQgZXhjZXB0aW9uOiAlc1wiXG4gICAgICAgICAgICAgICAoU3hfcnVudGltZS52YWx1ZV90b19zdHIgZXhuX3ZhbCkpKSlcblxuICAgICAgICAoKiAtLS0tIEZ1bmN0aW9uIGNhbGxzIC0tLS0gKilcbiAgICAgICAgfCA0OCAoKiBPUF9DQUxMICopIC0+XG4gICAgICAgICAgbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgIGxldCBhcmdzX2xpc3QgPSBMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSBpblxuICAgICAgICAgIHZtX2NhbGwgdm0gZiBhcmdzX2xpc3RcbiAgICAgICAgICAoKiBMb29wIGNvbnRpbnVlcyDigJQgaWYgVm1DbG9zdXJlLCBuZXcgZnJhbWUgcnVucyBuZXh0IGl0ZXJhdGlvbiAqKVxuICAgICAgICB8IDQ5ICgqIE9QX1RBSUxfQ0FMTCAqKSAtPlxuICAgICAgICAgIGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBsZXQgYXJnc19saXN0ID0gTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykgaW5cbiAgICAgICAgICAoKiBEcm9wIGN1cnJlbnQgZnJhbWUsIHJldXNlIHN0YWNrIHNwYWNlIOKAlCB0cnVlIFRDTyBmb3IgVm1DbG9zdXJlICopXG4gICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzO1xuICAgICAgICAgIHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgICAgdm1fY2FsbCB2bSBmIGFyZ3NfbGlzdFxuICAgICAgICB8IDUwICgqIE9QX1JFVFVSTiAqKSAtPlxuICAgICAgICAgIGxldCByZXN1bHQgPSBwb3Agdm0gaW5cbiAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgICAgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgICBwdXNoIHZtIHJlc3VsdFxuICAgICAgICAgICgqIExvb3AgY29udGludWVzIHdpdGggY2FsbGVyIGZyYW1lICopXG4gICAgICAgIHwgNTEgKCogT1BfQ0xPU1VSRSAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGlmIGlkeCA+PSBBcnJheS5sZW5ndGggY29uc3RzIHRoZW5cbiAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlZNOiBDTE9TVVJFIGlkeCAlZCA+PSBjb25zdHMgJWRcIiBpZHggKEFycmF5Lmxlbmd0aCBjb25zdHMpKSk7XG4gICAgICAgICAgbGV0IGNvZGVfdmFsID0gY29uc3RzLihpZHgpIGluXG4gICAgICAgICAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgICAgICAgICAoKiBSZWFkIHVwdmFsdWUgZGVzY3JpcHRvcnMgZnJvbSBieXRlY29kZSAqKVxuICAgICAgICAgIGxldCB1dl9jb3VudCA9IG1hdGNoIGNvZGVfdmFsIHdpdGhcbiAgICAgICAgICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ1cHZhbHVlLWNvdW50XCIgd2l0aFxuICAgICAgICAgICAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG5cbiAgICAgICAgICAgICAgICB8IF8gLT4gMClcbiAgICAgICAgICAgIHwgXyAtPiAwXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgdXB2YWx1ZXMgPSBBcnJheS5pbml0IHV2X2NvdW50IChmdW4gXyAtPlxuICAgICAgICAgICAgbGV0IGlzX2xvY2FsID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGluZGV4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgaWYgaXNfbG9jYWwgPSAxIHRoZW4gYmVnaW5cbiAgICAgICAgICAgICAgKCogQ2FwdHVyZSBmcm9tIGVuY2xvc2luZyBmcmFtZSdzIGxvY2FsIHNsb3QuXG4gICAgICAgICAgICAgICAgIENyZWF0ZSBhIHNoYXJlZCBjZWxsIOKAlCBib3RoIHBhcmVudCBhbmQgY2xvc3VyZVxuICAgICAgICAgICAgICAgICByZWFkL3dyaXRlIHRocm91Z2ggdGhpcyBjZWxsLiAqKVxuICAgICAgICAgICAgICBsZXQgY2VsbCA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgaW5kZXggd2l0aFxuICAgICAgICAgICAgICAgIHwgU29tZSBleGlzdGluZyAtPiBleGlzdGluZyAgKCogcmV1c2UgZXhpc3RpbmcgY2VsbCAqKVxuICAgICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgbGV0IGMgPSB7IHV2X3ZhbHVlID0gdm0uc3RhY2suKGZyYW1lLmJhc2UgKyBpbmRleCkgfSBpblxuICAgICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IGM7XG4gICAgICAgICAgICAgICAgICBjXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIGNlbGxcbiAgICAgICAgICAgIGVuZCBlbHNlXG4gICAgICAgICAgICAgICgqIENhcHR1cmUgZnJvbSBlbmNsb3NpbmcgZnJhbWUncyB1cHZhbHVlIOKAlCBhbHJlYWR5IGEgc2hhcmVkIGNlbGwgKilcbiAgICAgICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaW5kZXgpXG4gICAgICAgICAgKSBpblxuICAgICAgICAgIGxldCBjbCA9IHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gdXB2YWx1ZXM7IHZtX25hbWUgPSBOb25lO1xuICAgICAgICAgICAgICAgICAgICAgdm1fZW52X3JlZiA9IHZtLmdsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB9IGluXG4gICAgICAgICAgcHVzaCB2bSAoVm1DbG9zdXJlIGNsKVxuICAgICAgICB8IDUyICgqIE9QX0NBTExfUFJJTSAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAoKiBSZXNvbHZlIHRodW5rcyDigJQgdGhlIENFSyBldmFsdWF0b3IgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICAgICB2aWEgdHJhbXBvbGluZSwgYnV0IHRoZSBWTSBtdXN0IGRvIGl0IGV4cGxpY2l0bHkgYmVmb3JlXG4gICAgICAgICAgICAgcGFzc2luZyBhcmdzIHRvIHByaW1pdGl2ZXMuICopXG4gICAgICAgICAgbGV0IGFyZ3MgPSBMaXN0Lm1hcCAoZnVuIHYgLT5cbiAgICAgICAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBUaHVuayBfIC0+ICFTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIHZcbiAgICAgICAgICAgIHwgXyAtPiB2KSBhcmdzIGluXG4gICAgICAgICAgbGV0IHJlc3VsdCA9XG4gICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgKCogU2luZ2xlIGxvb2t1cDogdm0uZ2xvYmFscyBpcyB0aGUgc29sZSBzb3VyY2Ugb2YgdHJ1dGguXG4gICAgICAgICAgICAgICAgIFByaW1pdGl2ZXMgYXJlIHNlZWRlZCBpbnRvIHZtLmdsb2JhbHMgYXQgaW5pdCBhcyBOYXRpdmVGbiB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgIE9QX0RFRklORSBhbmQgcmVnaXN0ZXJOYXRpdmUgbmF0dXJhbGx5IG92ZXJyaWRlIHRoZW0uICopXG4gICAgICAgICAgICAgIGxldCBmbl92YWwgPSB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgICgqIEZhbGxiYWNrIHRvIFN4X3ByaW1pdGl2ZXMg4oCUIHByaW1pdGl2ZXMgcmVnaXN0ZXJlZCBBRlRFUiBKSVRcbiAgICAgICAgICAgICAgICAgICBzZXR1cCAoZS5nLiBob3N0LWdsb2JhbCwgaG9zdC1nZXQgcmVnaXN0ZXJlZCBpbnNpZGUgdGhlIHRlc3RcbiAgICAgICAgICAgICAgICAgICBydW5uZXIncyBiaW5kL3JlZ2lzdGVyIHBhdGgpIGFyZSBub3QgaW4gdm0uZ2xvYmFscy4gKilcbiAgICAgICAgICAgICAgICB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWVcbiAgICAgICAgICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNOiB1bmtub3duIHByaW1pdGl2ZSBcIiBeIG5hbWUpKVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAobWF0Y2ggZm5fdmFsIHdpdGhcbiAgICAgICAgICAgICAgIHwgTmF0aXZlRm4gKF8sIGZuKSAtPiBmbiBhcmdzXG4gICAgICAgICAgICAgICB8IFZtQ2xvc3VyZSBfIHwgTGFtYmRhIF8gfCBDb21wb25lbnQgXyB8IElzbGFuZCBfIC0+XG4gICAgICAgICAgICAgICAgIFN4X3JlZi5jZWtfY2FsbCBmbl92YWwgKExpc3QgYXJncylcbiAgICAgICAgICAgICAgIHwgXyAtPiBOaWwpXG4gICAgICAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIiVzIChpbiBDQUxMX1BSSU0gXFxcIiVzXFxcIiB3aXRoICVkIGFyZ3MpXCJcbiAgICAgICAgICAgICAgICBtc2cgbmFtZSBhcmdjKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIHB1c2ggdm0gcmVzdWx0XG5cbiAgICAgICAgKCogLS0tLSBDb2xsZWN0aW9ucyAtLS0tICopXG4gICAgICAgIHwgNjQgKCogT1BfTElTVCAqKSAtPlxuICAgICAgICAgIGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGl0ZW1zID0gTGlzdC5pbml0IGNvdW50IChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgcHVzaCB2bSAoTGlzdCBpdGVtcylcbiAgICAgICAgfCA2NSAoKiBPUF9ESUNUICopIC0+XG4gICAgICAgICAgbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIGNvdW50IGluXG4gICAgICAgICAgZm9yIF8gPSAxIHRvIGNvdW50IGRvXG4gICAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgbGV0IGsgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGxldCBrZXkgPSBtYXRjaCBrIHdpdGggU3RyaW5nIHMgLT4gcyB8IEtleXdvcmQgcyAtPiBzIHwgXyAtPiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBrIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBrZXkgdlxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgcHVzaCB2bSAoRGljdCBkKVxuXG4gICAgICAgICgqIC0tLS0gU3RyaW5nIG9wcyAtLS0tICopXG4gICAgICAgIHwgMTQ0ICgqIE9QX1NUUl9DT05DQVQgKikgLT5cbiAgICAgICAgICBsZXQgY291bnQgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHBhcnRzID0gTGlzdC5pbml0IGNvdW50IChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIHBhcnRzKSBpblxuICAgICAgICAgIHB1c2ggdm0gKFN0cmluZyBzKVxuXG4gICAgICAgICgqIC0tLS0gRGVmaW5lIC0tLS0gKilcbiAgICAgICAgfCAxMjggKCogT1BfREVGSU5FICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBjb25zdHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSB2O1xuICAgICAgICAgIChtYXRjaCAhU3hfdHlwZXMuX3ZtX2dsb2JhbF9zZXRfaG9vayB3aXRoXG4gICAgICAgICAgIHwgU29tZSBmIC0+IGYgbmFtZSB2IHwgTm9uZSAtPiAoKSlcblxuICAgICAgICAoKiAtLS0tIElubGluZSBwcmltaXRpdmVzIC0tLS1cbiAgICAgICAgICAgRmFzdCBwYXRoIGZvciBjb21tb24gdHlwZXM7IGZhbGxiYWNrIHRvIGFjdHVhbCBwcmltaXRpdmVcbiAgICAgICAgICAgZm9yIGVkZ2UgY2FzZXMgKHR5cGUgY29lcmNpb24sIHRodW5rcywgUmF3SFRNTCwgZXRjLilcbiAgICAgICAgICAgdG8gZ3VhcmFudGVlIGJlaGF2aW9yYWwgcGFyaXR5IHdpdGggQ0FMTF9QUklNLiAqKVxuICAgICAgICB8IDE2MCAoKiBPUF9BREQgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiBJbnRlZ2VyICh4ICsgeSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCArLiB5KVxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IHggKy4geSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiBOdW1iZXIgKHggKy4gZmxvYXRfb2ZfaW50IHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCIrXCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjEgKCogT1BfU1VCICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4gSW50ZWdlciAoeCAtIHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLS4geSlcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCB4IC0uIHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4gTnVtYmVyICh4IC0uIGZsb2F0X29mX2ludCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiLVwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTYyICgqIE9QX01VTCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IEludGVnZXIgKHggKiB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICouIHkpXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgeCAqLiB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IE51bWJlciAoeCAqLiBmbG9hdF9vZl9pbnQgeSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIipcIikgW2E7IGJdKVxuICAgICAgICB8IDE2MyAoKiBPUF9ESVYgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSB3aGVuIHkgPD4gMCAmJiB4IG1vZCB5ID0gMCAtPiBJbnRlZ2VyICh4IC8geSlcbiAgICAgICAgICAgICgqIE5vbi1kaXZpc2libGUgSW50ZWdlci9JbnRlZ2VyICsgYW55IFJhdGlvbmFsIG9wZXJhbmQgZGVsZWdhdGUgdG9cbiAgICAgICAgICAgICAgIHRoZSBcIi9cIiBwcmltaXRpdmUgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpOiAoLyA1IDIpPTIuNSBmbG9hdCxcbiAgICAgICAgICAgICAgICgvIDEvMiAyKT0xLzQgcmF0aW9uYWwuIEtlZXBpbmcgdGhlIFZNIGluIGxvY2tzdGVwIHdpdGggdGhlXG4gICAgICAgICAgICAgICBwcmltaXRpdmUgYXZvaWRzIGRpdmVyZ2luZyBmcm9tIHRoZSBDRUsgaW50ZXJwcmV0ZXIuICopXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLy4geSlcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCB4IC8uIHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4gTnVtYmVyICh4IC8uIGZsb2F0X29mX2ludCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiL1wiKSBbYTsgYl0pXG4gICAgICAgIHwgMTY0ICgqIE9QX0VRICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAoKiBUcml2aWFsIHNjYWxhciBjYXNlcyBpbmxpbmU7IGV2ZXJ5dGhpbmcgZWxzZSAoUmF0aW9uYWwsIERpY3QsXG4gICAgICAgICAgICAgUmVjb3JkLCBWZWN0b3IsIExpc3RSZWYsIG5lc3RlZCBsaXN0cykgZGVsZWdhdGVzIHRvIHRoZSBcIj1cIlxuICAgICAgICAgICAgIHByaW1pdGl2ZSBzbyBWTSBlcXVhbGl0eSBtYXRjaGVzIENFSyBleGFjdGx5LiBfZmFzdF9lcSBpcyBhXG4gICAgICAgICAgICAgc3RyaXBwZWQtZG93biBzdWJzZXQgYW5kIG11c3Qgbm90IGJlIHRoZSBzb3VyY2Ugb2YgdHJ1dGggaGVyZS4gKilcbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4gQm9vbCAoeCA9IHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4ID0geSlcbiAgICAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBCb29sIChmbG9hdF9vZl9pbnQgeCA9IHkpXG4gICAgICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4gQm9vbCAoeCA9IGZsb2F0X29mX2ludCB5KVxuICAgICAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4gQm9vbCAoeCA9IHkpXG4gICAgICAgICAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IEJvb2wgKHggPSB5KVxuICAgICAgICAgICAgfCBTeW1ib2wgeCwgU3ltYm9sIHkgLT4gQm9vbCAoeCA9IHkpXG4gICAgICAgICAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IEJvb2wgKHggPSB5KVxuICAgICAgICAgICAgfCBOaWwsIE5pbCAtPiBCb29sIHRydWVcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIj1cIikgW2E7IGJdKVxuICAgICAgICB8IDE2NSAoKiBPUF9MVCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoeCA8IHkpXG4gICAgICAgICAgICB8IEludGVnZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoZmxvYXRfb2ZfaW50IHggPCB5KVxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IEJvb2wgKHggPCBmbG9hdF9vZl9pbnQgeSlcbiAgICAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBfIC0+IFN4X3J1bnRpbWUucHJpbV9jYWxsIFwiPFwiIFthOyBiXSlcbiAgICAgICAgfCAxNjYgKCogT1BfR1QgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiBCb29sICh4ID4geSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPiB5KVxuICAgICAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IEJvb2wgKGZsb2F0X29mX2ludCB4ID4geSlcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiBCb29sICh4ID4gZmxvYXRfb2ZfaW50IHkpXG4gICAgICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiBCb29sICh4ID4geSlcbiAgICAgICAgICAgIHwgXyAtPiBTeF9ydW50aW1lLnByaW1fY2FsbCBcIj5cIiBbYTsgYl0pXG4gICAgICAgIHwgMTY3ICgqIE9QX05PVCAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAoQm9vbCAobm90IChzeF90cnV0aHkgdikpKVxuICAgICAgICB8IDE2OCAoKiBPUF9MRU4gKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggbClcbiAgICAgICAgICAgIHwgU3RyaW5nIHMgLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gSW50ZWdlciAoSGFzaHRibC5sZW5ndGggZClcbiAgICAgICAgICAgIHwgTmlsIC0+IEludGVnZXIgMFxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwibGVuXCIpIFt2XSlcbiAgICAgICAgfCAxNjkgKCogT1BfRklSU1QgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBMaXN0ICh4IDo6IF8pIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH0gLT4geFxuICAgICAgICAgICAgfCBMaXN0IFtdIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfSB8IE5pbCAtPiBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImZpcnN0XCIpIFt2XSlcbiAgICAgICAgfCAxNzAgKCogT1BfUkVTVCAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgKF8gOjogeHMpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gXyA6OiB4cyB9IC0+IExpc3QgeHNcbiAgICAgICAgICAgIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gfCBOaWwgLT4gTGlzdCBbXVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwicmVzdFwiKSBbdl0pXG4gICAgICAgIHwgMTcxICgqIE9QX05USCAqKSAtPlxuICAgICAgICAgIGxldCBuID0gcG9wIHZtIGFuZCBjb2xsID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCwgbiB3aXRoXG4gICAgICAgICAgICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBmKSB3aXRoIF8gLT4gTmlsKVxuICAgICAgICAgICAgfCBTdHJpbmcgcywgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgZiBpblxuICAgICAgICAgICAgICBpZiBpID49IDAgJiYgaSA8IFN0cmluZy5sZW5ndGggcyB0aGVuIFN0cmluZyAoU3RyaW5nLm1ha2UgMSBzLltpXSlcbiAgICAgICAgICAgICAgZWxzZSBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIm50aFwiKSBbY29sbDsgbl0pXG4gICAgICAgIHwgMTcyICgqIE9QX0NPTlMgKikgLT5cbiAgICAgICAgICBsZXQgY29sbCA9IHBvcCB2bSBhbmQgeCA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwgd2l0aFxuICAgICAgICAgICAgfCBMaXN0IGwgLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBOaWwgLT4gTGlzdCBbeF1cbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImNvbnNcIikgW3g7IGNvbGxdKVxuICAgICAgICB8IDE3MyAoKiBPUF9ORUcgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKC0ueClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi1cIikgW3ZdKVxuICAgICAgICB8IDE3NCAoKiBPUF9JTkMgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggKy4gMS4wKVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiaW5jXCIpIFt2XSlcbiAgICAgICAgfCAxNzUgKCogT1BfREVDICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHggLT4gTnVtYmVyICh4IC0uIDEuMClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImRlY1wiKSBbdl0pXG5cbiAgICAgICAgKCogLS0tLSBJTyBTdXNwZW5zaW9uIC0tLS0gKilcbiAgICAgICAgfCAxMTIgKCogT1BfUEVSRk9STSAqKSAtPlxuICAgICAgICAgIGxldCByZXF1ZXN0ID0gcG9wIHZtIGluXG4gICAgICAgICAgcmFpc2UgKFZtU3VzcGVuZGVkIChyZXF1ZXN0LCB2bSkpXG5cbiAgICAgICAgKCogLS0tLSBFeHRlbnNpb24gZGlzcGF0Y2ggZmFsbHRocm91Z2ggLS0tLVxuICAgICAgICAgICBPcGNvZGUgcGFydGl0aW9uIChzZWUgcGxhbnMvc3gtdm0tb3Bjb2RlLWV4dGVuc2lvbi5tZCk6XG4gICAgICAgICAgICAgMCAgICAgICByZXNlcnZlZCAvIE5PUFxuICAgICAgICAgICAgIDEtMTk5ICAgY29yZSBvcGNvZGVzIChjdXJyZW50IGNlaWxpbmcgMTc1ID0gT1BfREVDKVxuICAgICAgICAgICAgIDIwMC0yNDcgZXh0ZW5zaW9uIG9wY29kZXMgKHJlZ2lzdGVyZWQgdmlhIFN4X3ZtX2V4dGVuc2lvbnMpXG4gICAgICAgICAgICAgMjQ4LTI1NSByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbiAvIG11bHRpLWJ5dGVcbiAgICAgICAgICAgQW55IG9wY29kZSDiiaUgMjAwIHJvdXRlcyB0aHJvdWdoIHRoZSBleHRlbnNpb24gcmVnaXN0cnkuICopXG4gICAgICAgIHwgb3Agd2hlbiBvcCA+PSAyMDAgLT4gIWV4dGVuc2lvbl9kaXNwYXRjaF9yZWYgb3Agdm0gZnJhbWVcblxuICAgICAgICB8IG9wY29kZSAtPlxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlZNOiB1bmtub3duIG9wY29kZSAlZCBhdCBpcD0lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlIChmcmFtZS5pcCAtIDEpKSlcbiAgICAgICAgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICBcIlZNOiAlcyBhdCBpcD0lZCBvcD0lZCBpbiAlcyAoYmFzZT0lZCBzcD0lZCBiY19sZW49JWQgY29uc3RzPSVkKVwiXG4gICAgICAgICAgICBtc2cgc2F2ZWRfaXAgb3AgZm5fbmFtZSBmcmFtZS5iYXNlIHZtLnNwXG4gICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGJjKSAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKSlcbiAgICAgIGVuZFxuICBkb25lXG5cbigqKiBSZXN1bWUgYSBzdXNwZW5kZWQgVk0gYnkgcHVzaGluZyB0aGUgSU8gcmVzdWx0IGFuZCBjb250aW51aW5nLlxuICAgIE1heSByYWlzZSBWbVN1c3BlbmRlZCBhZ2FpbiBpZiB0aGUgVk0gaGl0cyBhbm90aGVyIE9QX1BFUkZPUk0uXG5cbiAgICBBZnRlciB0aGUgY2FsbGJhY2sgZmluaXNoZXMsIHJlc3RvcmVzIGFueSBjYWxsX2Nsb3N1cmVfcmV1c2VcbiAgICBjb250aW51YXRpb25zIHNhdmVkIG9uIHZtLnJldXNlX3N0YWNrIChpbm5lcm1vc3QgZmlyc3QpLiAqKVxuYW5kIHJlc3VtZV92bSB2bSByZXN1bHQgPVxuICAoKiBUaGUgcmVzdW1lZCBleGVjdXRpb24gcnVucyBvbiBbdm1dOyBITyBwcmltaXRpdmVzIChtYXAvZmlsdGVyL+KApikgY2FsbGVkXG4gICAgIGR1cmluZyB0aGUgcmVzdW1lIHJlYWNoIGZvciBbIV9hY3RpdmVfdm1dIHRvIHJ1biB0aGVpciBjYWxsYmFja3Mgb24gdGhlXG4gICAgIHNhbWUgc3RhY2suIGNhbGxfY2xvc3VyZSByZXN0b3JlZCBbX2FjdGl2ZV92bV0gdG8gdGhlICpjYWxsZXIqIHdoZW4gdGhlXG4gICAgIG9yaWdpbmFsIFZtU3VzcGVuZGVkIHVud291bmQgdGhyb3VnaCBpdCwgc28gd2l0aG91dCByZS1hc3NlcnRpbmcgaXQgaGVyZVxuICAgICB0aGUgcmVzdW1lZCBydW4ncyBjYWxsYmFja3MgbGFuZCBvbiB0aGUgd3JvbmcgVk0gKG9yIGFsbG9jYXRlIGEgZnJlc2hcbiAgICAgb25lKSwgY29ycnVwdGluZyB0aGUgc3RhY2suIE1pcnJvciBjYWxsX2Nsb3N1cmUncyBzYXZlL3NldC9yZXN0b3JlLiAqKVxuICBsZXQgcHJldl9hY3RpdmUgPSAhX2FjdGl2ZV92bSBpblxuICBfYWN0aXZlX3ZtIDo9IFNvbWUgdm07XG4gIGxldCByZXN0b3JlICgpID0gX2FjdGl2ZV92bSA6PSBwcmV2X2FjdGl2ZSBpblxuICAodHJ5XG4gIChtYXRjaCB2bS5wZW5kaW5nX2NlayB3aXRoXG4gICB8IFNvbWUgY2VrX3N0YXRlIC0+XG4gICAgIHZtLnBlbmRpbmdfY2VrIDwtIE5vbmU7XG4gICAgIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfcmVzdW1lIGNla19zdGF0ZSByZXN1bHQgaW5cbiAgICAgKG1hdGNoIFN4X3J1bnRpbWUuZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicGhhc2VcIikgd2l0aFxuICAgICAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgICAgICB2bS5wZW5kaW5nX2NlayA8LSBTb21lIGZpbmFsO1xuICAgICAgICByYWlzZSAoVm1TdXNwZW5kZWQgKFN4X3J1bnRpbWUuZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicmVxdWVzdFwiKSwgdm0pKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfdmFsdWUgZmluYWwpKVxuICAgfCBOb25lIC0+XG4gICAgIHB1c2ggdm0gcmVzdWx0KTtcbiAgKHRyeSBydW4gdm1cbiAgIHdpdGhcbiAgIHwgVm1TdXNwZW5kZWQgXyBhcyBlIC0+XG4gICAgICgqIFJlLXN1c3BlbnNpb24gZHVyaW5nIHJlc3VtZTogdGhlIFZNIGhpdCBhbm90aGVyIHBlcmZvcm0uICopXG4gICAgIHJhaXNlIGVcbiAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgKCogRXJyb3IgZHVyaW5nIHJlc3VtZWQgZXhlY3V0aW9uLiBJZiB0aGUgVk0gaGFzIGEgaGFuZGxlciBvbiBpdHNcbiAgICAgICAgaGFuZGxlcl9zdGFjaywgZGlzcGF0Y2ggdG8gaXQgKHNhbWUgYXMgT1BfUkFJU0UpLiBUaGlzIGVuYWJsZXNcbiAgICAgICAgdHJ5L2NhdGNoIGFjcm9zcyBhc3luYyBwZXJmb3JtL3Jlc3VtZSBib3VuZGFyaWVzIOKAlCB0aGUgaGFuZGxlclxuICAgICAgICB3YXMgcHVzaGVkIGJlZm9yZSB0aGUgcGVyZm9ybSBhbmQgc3Vydml2ZXMgb24gdGhlIHZtIHN0cnVjdC4gKilcbiAgICAgKG1hdGNoIHZtLmhhbmRsZXJfc3RhY2sgd2l0aFxuICAgICAgfCBlbnRyeSA6OiByZXN0IC0+XG4gICAgICAgIHZtLmhhbmRsZXJfc3RhY2sgPC0gcmVzdDtcbiAgICAgICAgd2hpbGUgTGlzdC5sZW5ndGggdm0uZnJhbWVzID4gZW50cnkuaF9mcmFtZV9kZXB0aCBkb1xuICAgICAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoIF8gOjogZnMgLT4gdm0uZnJhbWVzIDwtIGZzIHwgW10gLT4gKClcbiAgICAgICAgZG9uZTtcbiAgICAgICAgdm0uc3AgPC0gZW50cnkuaF9zcDtcbiAgICAgICAgZW50cnkuaF9mcmFtZS5pcCA8LSBlbnRyeS5oX2NhdGNoX2lwO1xuICAgICAgICBwdXNoIHZtIChTdHJpbmcgbXNnKTtcbiAgICAgICAgcnVuIHZtXG4gICAgICB8IFtdIC0+IHJhaXNlIChFdmFsX2Vycm9yIG1zZykpKTtcbiAgKCogQ2xlYXIgcmV1c2Vfc3RhY2sg4oCUIGFueSBlbnRyaWVzIGhlcmUgYXJlIHN0YWxlIGZyb20gdGhlIG9yaWdpbmFsXG4gICAgIHN1c3BlbnNpb24gYW5kIGRvbid0IGFwcGx5IHRvIHRoZSBjdXJyZW50IHN0YXRlLiBUaGUgVk0ganVzdFxuICAgICBjb21wbGV0ZWQgaXRzIGV4ZWN1dGlvbiBzdWNjZXNzZnVsbHkuICopXG4gIHZtLnJldXNlX3N0YWNrIDwtIFtdO1xuICAoKiBSZXN0b3JlIGNhbGxfY2xvc3VyZV9yZXVzZSBjb250aW51YXRpb25zIHNhdmVkIGR1cmluZyBzdXNwZW5zaW9uLlxuICAgICByZXVzZV9zdGFjayBpcyBpbiBjYXRjaCBvcmRlciAob3V0ZXJtb3N0IGZpcnN0IGZyb20gcHJlcGVuZCkg4oCUXG4gICAgIHJldmVyc2UgdG8gZ2V0IGlubmVybW9zdCBmaXJzdCwgbWF0Y2hpbmcgY2FsbGJhY2vihpJjYWxsZXIgdW53aW5kaW5nLiAqKVxuICBsZXQgcmVjIHJlc3RvcmVfcmV1c2UgcGVuZGluZyA9XG4gICAgbWF0Y2ggcGVuZGluZyB3aXRoXG4gICAgfCBbXSAtPiAoKVxuICAgIHwgKHNhdmVkX2ZyYW1lcywgc2F2ZWRfc3ApIDo6IHJlc3QgLT5cbiAgICAgIGxldCBjYWxsYmFja19yZXN1bHQgPSBwb3Agdm0gaW5cbiAgICAgIHZtLmZyYW1lcyA8LSBzYXZlZF9mcmFtZXM7XG4gICAgICAoKiBSZXN0b3JlIHNwIHRvIHRoZSB2YWx1ZSBjYXB0dXJlZCBiZWZvcmUgdGhlIHN1c3BlbmRlZCBjYWxsZWUgd2FzXG4gICAgICAgICBwdXNoZWQuIFRoZSBjYWxsZWUncyBsb2NhbHMvdGVtcHMgbWF5IHN0aWxsIGJlIG9uIHRoZSBzdGFjayBhYm92ZVxuICAgICAgICAgc2F2ZWRfc3A7IHdpdGhvdXQgdGhpcyByZXNldCwgc3Vic2VxdWVudCBMT0NBTF9HRVQvU0VUIGluIHRoZVxuICAgICAgICAgY2FsbGVyIGZyYW1lIChlLmcuIGxldHJlYyBzaWJsaW5nIGJpbmRpbmdzIHdhaXRpbmcgb24gdGhlIGNhbGwpXG4gICAgICAgICBzZWUgc3RhbGUgY2FsbGVlIGRhdGEgaW5zdGVhZCBvZiB0aGVpciBvd24gc2xvdHMuIE1pcnJvcnMgdGhlXG4gICAgICAgICBPUF9SRVRVUk4rc3AtcmVzZXQgc2VtYW50aWNzIHRoYXQgc3luYyBgY2FsbF9jbG9zdXJlX3JldXNlYFxuICAgICAgICAgcmVsaWVzIG9uIGZvciBjbGVhbiBjYWxsZXItZnJhbWUgc3RhdGUuICopXG4gICAgICBpZiBzYXZlZF9zcCA8IHZtLnNwIHRoZW4gdm0uc3AgPC0gc2F2ZWRfc3A7XG4gICAgICBwdXNoIHZtIGNhbGxiYWNrX3Jlc3VsdDtcbiAgICAgICh0cnlcbiAgICAgICAgcnVuIHZtO1xuICAgICAgICAoKiBDaGVjayBmb3IgbmV3IHJldXNlIGVudHJpZXMgYWRkZWQgYnkgbmVzdGVkIGNhbGxfY2xvc3VyZV9yZXVzZSAqKVxuICAgICAgICBsZXQgbmV3X3BlbmRpbmcgPSBMaXN0LnJldiB2bS5yZXVzZV9zdGFjayBpblxuICAgICAgICB2bS5yZXVzZV9zdGFjayA8LSBbXTtcbiAgICAgICAgcmVzdG9yZV9yZXVzZSAobmV3X3BlbmRpbmcgQCByZXN0KVxuICAgICAgd2l0aCBWbVN1c3BlbmRlZCBfIGFzIGUgLT5cbiAgICAgICAgKCogUmUtc3VzcGVuc2lvbjogc2F2ZSB1bnByb2Nlc3NlZCBlbnRyaWVzIGJhY2sgZm9yIG5leHQgcmVzdW1lLlxuICAgICAgICAgICByZXN0IGlzIGlubmVybW9zdC1maXJzdDsgdm0ucmV1c2Vfc3RhY2sgaXMgb3V0ZXJtb3N0LWZpcnN0LlxuICAgICAgICAgICBDb21iaW5lIHNvIG5leHQgcmVzdW1lJ3MgcmV2ZXJzYWwgeWllbGRzOiBuZXdfaW5uZXIsIG9sZF9pbm5lcuKGkm91dGVyLiAqKVxuICAgICAgICB2bS5yZXVzZV9zdGFjayA8LSAoTGlzdC5yZXYgcmVzdCkgQCB2bS5yZXVzZV9zdGFjaztcbiAgICAgICAgcmFpc2UgZSlcbiAgaW5cbiAgbGV0IHBlbmRpbmcgPSBMaXN0LnJldiB2bS5yZXVzZV9zdGFjayBpblxuICB2bS5yZXVzZV9zdGFjayA8LSBbXTtcbiAgcmVzdG9yZV9yZXVzZSBwZW5kaW5nO1xuICBsZXQgciA9IHBvcCB2bSBpblxuICByZXN0b3JlICgpOyByXG4gIHdpdGggZSAtPiByZXN0b3JlICgpOyByYWlzZSBlKVxuXG4oKiogRXhlY3V0ZSBhIGNvbXBpbGVkIG1vZHVsZSAodG9wLWxldmVsIGJ5dGVjb2RlKS4gKilcbmxldCBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwibW9kdWxlXCI7IHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gMDsgbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICB2bS5mcmFtZXMgPC0gW2ZyYW1lXTtcbiAgcnVuIHZtO1xuICBwb3Agdm1cblxuKCoqIEV4ZWN1dGUgbW9kdWxlLCBjYXRjaGluZyBWbVN1c3BlbmRlZCBsb2NhbGx5IChzYW1lIGNvbXBpbGF0aW9uIHVuaXQpLlxuICAgIFJldHVybnMgW09rIHJlc3VsdF0gb3IgW0Vycm9yIChyZXF1ZXN0LCB2bSldIGZvciBpbXBvcnQgc3VzcGVuc2lvbi5cbiAgICBOZWVkZWQgYmVjYXVzZSBqc19vZl9vY2FtbCBjYW4ndCBjYXRjaCBleGNlcHRpb25zIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcy4gKilcbmxldCBleGVjdXRlX21vZHVsZV9zYWZlIGNvZGUgZ2xvYmFscyA9XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgaW5cbiAgICBPayByZXN1bHRcbiAgd2l0aCBWbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgRXJyb3IgKHJlcXVlc3QsIHZtKVxuXG5cbigqKiB7MSBMYXp5IEpJVCBjb21waWxhdGlvbn0gKilcblxuKCoqIENvbXBpbGUgYSBsYW1iZGEgb3IgY29tcG9uZW50IGJvZHkgdG8gYnl0ZWNvZGUgdXNpbmcgdGhlIFNYIGNvbXBpbGVyLlxuICAgIEludm9rZXMgW2NvbXBpbGVdIGZyb20gc3BlYy9jb21waWxlci5zeCB2aWEgdGhlIENFSyBtYWNoaW5lLlxuICAgIFJldHVybnMgYSBbdm1fY2xvc3VyZV0gcmVhZHkgZm9yIGV4ZWN1dGlvbiwgb3IgW05vbmVdIG9uIGZhaWx1cmVcbiAgICAoc2FmZSBmYWxsYmFjayB0byBDRUsgaW50ZXJwcmV0YXRpb24pLlxuXG4gICAgVGhlIGNvbXBpbGF0aW9uIGNvc3QgaXMgYSBzaW5nbGUgQ0VLIGV2YWx1YXRpb24gb2YgdGhlIGNvbXBpbGVyIOKAlFxuICAgIG1pY3Jvc2Vjb25kcyBwZXIgZnVuY3Rpb24uIFRoZSByZXN1bHQgaXMgY2FjaGVkIGluIHRoZSBsYW1iZGEvY29tcG9uZW50XG4gICAgcmVjb3JkIHNvIHN1YnNlcXVlbnQgY2FsbHMgZ28gc3RyYWlnaHQgdG8gdGhlIFZNLiAqKVxuKCogRnVuY3Rpb25zIHdob3NlIEpJVCBieXRlY29kZSBpcyBrbm93biBicm9rZW4gKHNlZSBwcm9qZWN0X2ppdF9ieXRlY29kZV9idWcpOlxuICAgcGFyc2VyIGNvbWJpbmF0b3JzIGRyb3AgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHRoZSBoeXBlcnNjcmlwdCBwYXJzZS9jb21waWxlXG4gICBzdGFjayBjb3JydXB0cyBBU1RzIHdoZW4gY29tcGlsZWQsIGFuZCB0ZXN0LW9yY2hlc3RyYXRpb24gaGVscGVycyBoYXZlXG4gICBjYWxsLWNvdW50L2FyZy1zaGFwZSBtaXNtYXRjaGVzIHZzIENFSy4gVGhlc2UgbXVzdCBydW4gdW5kZXIgQ0VLLiAqKVxubGV0IF9qaXRfaXNfYnJva2VuX25hbWUgbiA9XG4gICgqIFBhcnNlciBjb21iaW5hdG9ycyAqKVxuICBuID0gXCJwYXJzZS1iaW5kXCIgfHwgbiA9IFwic2VxXCIgfHwgbiA9IFwic2VxMlwiIHx8IG4gPSBcIm1hbnlcIiB8fCBuID0gXCJtYW55MVwiXG4gIHx8IG4gPSBcInNhdGlzZnlcIiB8fCBuID0gXCJmbWFwXCIgfHwgbiA9IFwiYWx0XCIgfHwgbiA9IFwiYWx0MlwiXG4gIHx8IG4gPSBcInNraXAtbGVmdFwiIHx8IG4gPSBcInNraXAtcmlnaHRcIiB8fCBuID0gXCJza2lwLW1hbnlcIiB8fCBuID0gXCJvcHRpb25hbFwiXG4gIHx8IG4gPSBcImJldHdlZW5cIiB8fCBuID0gXCJzZXAtYnlcIiB8fCBuID0gXCJzZXAtYnkxXCIgfHwgbiA9IFwicGFyc2UtY2hhclwiXG4gIHx8IG4gPSBcInBhcnNlLXN0cmluZ1wiIHx8IG4gPSBcImxhenktcGFyc2VyXCIgfHwgbiA9IFwibGFiZWxcIlxuICB8fCBuID0gXCJub3QtZm9sbG93ZWQtYnlcIiB8fCBuID0gXCJsb29rLWFoZWFkXCJcbiAgKCogSHlwZXJzY3JpcHQgb3JjaGVzdHJhdG9ycyDigJQgY2FsbCBwYXJzZXIgY29tYmluYXRvcnMgKilcbiAgfHwgbiA9IFwiaHMtdG9rZW5pemVcIiB8fCBuID0gXCJocy1wYXJzZVwiIHx8IG4gPSBcImhzLWNvbXBpbGVcIlxuICB8fCBuID0gXCJocy10by1zeFwiIHx8IG4gPSBcImhzLXRvLXN4LWZyb20tc291cmNlXCJcbiAgKCogVGVzdCBvcmNoZXN0cmF0aW9uIGhlbHBlcnMgKilcbiAgfHwgbiA9IFwiZXZhbC1oc1wiIHx8IG4gPSBcImV2YWwtaHMtaW5uZXJcIiB8fCBuID0gXCJldmFsLWhzLXdpdGgtbWVcIlxuICB8fCBuID0gXCJydW4taHMtZml4dHVyZVwiXG4gICgqIExhcmdlIHRvcC1sZXZlbCBmdW5jdGlvbnMgd2hvc2UgSklUIGNvbXBpbGUgZXhjZWVkcyB0aGUgNXMgdGVzdFxuICAgICBkZWFkbGluZSDigJQgdHctcmVzb2x2ZS1zdHlsZSwgdHctcmVzb2x2ZS1sYXlvdXQsIGdyYXBocWwgcGFyc2UuICopXG4gIHx8IG4gPSBcInR3LXJlc29sdmUtc3R5bGVcIiB8fCBuID0gXCJ0dy1yZXNvbHZlLWxheW91dFwiXG4gIHx8IG4gPSBcImdxbC13cz9cIiB8fCBuID0gXCJncWwtcGFyc2UtdG9rZW5zXCIgfHwgbiA9IFwiZ3FsLWV4ZWN1dGUtb3BlcmF0aW9uXCJcbiAgKCogSHlwZXJzY3JpcHQgbG9vcCBydW50aW1lOiB1c2VzIGBndWFyZGAgdG8gY2F0Y2ggaHMtYnJlYWsvaHMtY29udGludWVcbiAgICAgZXhjZXB0aW9ucy4gSklULWNvbXBpbGVkIGd1YXJkIGRyb3BzIHRoZSBleGNlcHRpb24gaGFuZGxlciBzdWNoIHRoYXRcbiAgICAgYnJlYWsgcHJvcGFnYXRlcyBvdXQgb2YgdGhlIGNsaWNrIGhhbmRsZXIgaW5zdGVhZCBvZiBleGl0aW5nIHRoZSBsb29wLlxuICAgICBTZWUgaHMtdXBzdHJlYW0tcmVwZWF0L2hzLXVwc3RyZWFtLXB1dCB0ZXN0cy4gKilcbiAgfHwgbiA9IFwiaHMtcmVwZWF0LXRpbWVzXCIgfHwgbiA9IFwiaHMtcmVwZWF0LWZvcmV2ZXJcIlxuICB8fCBuID0gXCJocy1yZXBlYXQtd2hpbGVcIiB8fCBuID0gXCJocy1yZXBlYXQtdW50aWxcIlxuICB8fCBuID0gXCJocy1mb3ItZWFjaFwiIHx8IG4gPSBcImhzLXB1dCFcIlxuXG4oKiogU2NhbiBieXRlY29kZSBmb3IgYW55IGV4dGVuc2lvbiBvcGNvZGUgKOKJpSAyMDAsIHRoZSByZWdpc3RyeSdzXG4gICAgW1N4X3ZtX2V4dGVuc2lvbnMuZXh0ZW5zaW9uX21pbl0pLiBXYWxrcyBvcGVyYW5kIGJ5dGVzIGNvcnJlY3RseVxuICAgIHNvIHZhbHVlcyB0aGF0IGhhcHBlbiB0byBiZSDiiaUyMDAgKGUuZy4gYSBDT05TVCB1MTYgaW5kZXggcG9pbnRpbmdcbiAgICBpbnRvIGEgbGFyZ2UgcG9vbCkgZG8gbm90IHRyaWdnZXIgZmFsc2UgcG9zaXRpdmVzLiBDTE9TVVJFJ3NcbiAgICBkeW5hbWljIHVwdmFsdWUgZGVzY3JpcHRvcnMgYXJlIHJlYWQgZnJvbSB0aGUgY29uc3RhbnQgcG9vbCBlbnRyeVxuICAgIGF0IHRoZSBzYW1lIGluZGV4IGl0IHB1c2hlcy5cblxuICAgIFVzZWQgYnkgW2ppdF9jb21waWxlX2xhbWJkYV0gKFBoYXNlIEUgb2YgdGhlIG9wY29kZS1leHRlbnNpb25cbiAgICBwbGFuKTogYSBsYW1iZGEgd2hvc2UgY29tcGlsZWQgYm9keSBjb250YWlucyBhbnkgZXh0ZW5zaW9uIG9wY29kZVxuICAgIGlzIHJvdXRlZCB0aHJvdWdoIGludGVycHJldGF0aW9uIHJhdGhlciB0aGFuIEpJVC4gIEV4dGVuc2lvbnNcbiAgICBpbnRlcnByZXQgdGhlaXIgb3Bjb2RlcyB2aWEgdGhlIHJlZ2lzdHJ5OyB0aGUgSklUIGRvZXMgbm90XG4gICAgY3VycmVudGx5IGtub3cgaG93IHRvIGNvbXBpbGUgdGhlbS5cblxuICAgIE9wZXJhbmQtc2l6ZSBsb2dpYyBtaXJyb3JzIFtvcGNvZGVfb3BlcmFuZF9zaXplXSAod2hpY2ggaXMgZGVmaW5lZFxuICAgIGxhdGVyLCBpbiB0aGUgZGlzYXNzZW1ibHkgc2VjdGlvbik7IGlubGluZWQgaGVyZSBzbyB0aGlzIGhlbHBlciBjYW5cbiAgICBzaXQgYmVmb3JlIFtqaXRfY29tcGlsZV9sYW1iZGFdIGluIHRoZSBmaWxlLiAqKVxubGV0IGJ5dGVjb2RlX2ZpbmRfb3Bjb2RlIChwcmVkIDogaW50IC0+IGJvb2wpIChiYyA6IGludCBhcnJheSkgKGNvbnN0cyA6IHZhbHVlIGFycmF5KSA9XG4gIGxldCBjb3JlX29wZXJhbmRfc2l6ZSA9IGZ1bmN0aW9uXG4gICAgfCAxIHwgMjAgfCAyMSB8IDY0IHwgNjUgfCAxMjggLT4gMiAgKCogdTE2ICopXG4gICAgfCAxNiB8IDE3IHwgMTggfCAxOSB8IDQ4IHwgNDkgfCAxNDQgLT4gMSAgKCogdTggKilcbiAgICB8IDMyIHwgMzMgfCAzNCB8IDM1IC0+IDIgICgqIGkxNiAqKVxuICAgIHwgNTIgLT4gMyAgKCogQ0FMTF9QUklNOiB1MTYgKyB1OCAqKVxuICAgIHwgXyAtPiAwXG4gIGluXG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYmMgaW5cbiAgbGV0IGlwID0gcmVmIDAgaW5cbiAgbGV0IGZvdW5kID0gcmVmIGZhbHNlIGluXG4gIHdoaWxlIG5vdCAhZm91bmQgJiYgIWlwIDwgbGVuIGRvXG4gICAgbGV0IG9wID0gYmMuKCFpcCkgaW5cbiAgICBpZiBwcmVkIG9wIHRoZW4gZm91bmQgOj0gdHJ1ZVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGlwIDo9ICFpcCArIDE7XG4gICAgICBsZXQgZXh0cmEgPSBtYXRjaCBvcCB3aXRoXG4gICAgICAgIHwgNTEgKCogQ0xPU1VSRSAqKSB3aGVuICFpcCArIDEgPCBsZW4gLT5cbiAgICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpblxuICAgICAgICAgIGxldCBoaSA9IGJjLighaXAgKyAxKSBpblxuICAgICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICAgIGxldCB1dl9jb3VudCA9XG4gICAgICAgICAgICBpZiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzIHRoZW5cbiAgICAgICAgICAgICAgKG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoXG4gICAgICAgICAgICAgICB8IERpY3QgZCAtPlxuICAgICAgICAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgblxuICAgICAgICAgICAgICAgICAgfCBfIC0+IDApXG4gICAgICAgICAgICAgICB8IF8gLT4gMClcbiAgICAgICAgICAgIGVsc2UgMFxuICAgICAgICAgIGluXG4gICAgICAgICAgMiArIHV2X2NvdW50ICogMlxuICAgICAgICB8IF8gLT4gY29yZV9vcGVyYW5kX3NpemUgb3BcbiAgICAgIGluXG4gICAgICBpcCA6PSAhaXAgKyBleHRyYVxuICAgIGVuZFxuICBkb25lO1xuICAhZm91bmRcblxubGV0IGJ5dGVjb2RlX3VzZXNfZXh0ZW5zaW9uX29wY29kZXMgYmMgY29uc3RzID1cbiAgYnl0ZWNvZGVfZmluZF9vcGNvZGUgKGZ1biBvcCAtPiBvcCA+PSAyMDApIGJjIGNvbnN0c1xuXG4oKiogVHJ1ZSBpZiBbY29kZV0g4oCUIG9yIGFueSBjbG9zdXJlIG5lc3RlZCBpbiBpdHMgY29uc3RhbnQgcG9vbCDigJQgaW5zdGFsbHMgYW5cbiAgICBleGNlcHRpb24gaGFuZGxlciAoT1BfUFVTSF9IQU5ETEVSID0gMzUpLCBpLmUuIGNvbnRhaW5zIGEgYGd1YXJkYCAvXG4gICAgYGhhbmRsZXItYmluZGAgLyBkcmVhbS1jYXRjaCBmb3JtLiBUaGUgVk0ncyBQVVNIX0hBTkRMRVIgb25seSBpbnRlcmNlcHRzIGFcbiAgICBWTS1sZXZlbCBSQUlTRSAob3Bjb2RlIDM3KTsgaXQgZG9lcyBOT1QgY2F0Y2ggdGhlIE9DYW1sIFtFdmFsX2Vycm9yXSB0aGF0XG4gICAgdGhlIGBlcnJvcmAgcHJpbWl0aXZlIHRocm93cyBmcm9tIGluc2lkZSBhIENBTEwvQ0FMTF9QUklNIGluIGEgY2FsbGVlXG4gICAgZnJhbWUuIFNvIGEgSklULWNvbXBpbGVkIGd1YXJkIHNpbGVudGx5IGZhaWxzIHRvIGNhdGNoIHRocm93biBlcnJvcnMgKHRoZXlcbiAgICBlc2NhcGUgYWNyb3NzIHRoZSBKSVQgZnJhbWUpLlxuXG4gICAgVGhlIHNjYW4gaXMgUkVDVVJTSVZFOiBhIGN1cnJpZWQgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIChlLmcuIERyZWFtJ3NcbiAgICBgZHJlYW0tY2F0Y2gtd2l0aCA9IChmbiAob24tZXJyb3IpIChmbiAobmV4dCkgKGZuIChyZXEpIChndWFyZCAuLi4pKSkpYClcbiAgICBoYXMgbm8gUFVTSF9IQU5ETEVSIGluIGl0cyBvd24gYm9keSDigJQgdGhlIGd1YXJkIGxpdmVzIGluIGEgbmVzdGVkXG4gICAgYE9QX0NMT1NVUkVgIHdob3NlIGNvZGUgc2l0cyBpbiB0aGUgY29uc3RhbnQgcG9vbC4gSklULWNvbXBpbGluZyB0aGUgb3V0ZXJcbiAgICBmdW5jdGlvbiB3b3VsZCBtaW50IHRoYXQgaW5uZXIgZ3VhcmQgYXMgYSBWbUNsb3N1cmUgd2l0aCB0aGUgYnJva2VuIFZNXG4gICAgaGFuZGxlci4gRGVzY2VuZGluZyBpbnRvIG5lc3RlZCBjbG9zdXJlIGNvZGVzIGNhdGNoZXMgdGhpcywgc28gdGhlIHdob2xlXG4gICAgY2xvc3VyZSBmYW1pbHkgcnVucyBvbiB0aGUgQ0VLICh3aG9zZSBndWFyZCBjYXRjaGVzIGNvcnJlY3RseSkuIENvdmVyc1xuICAgIGRyZWFtLWNhdGNoLXdpdGgsIGhvc3Qgd3JhcC1lcnJvcnMsIGFuZCBldmVyeSBndWFyZCB1c2VyIGNlbnRyYWxseS4gKilcbmxldCByZWMgY29kZV91c2VzX2hhbmRsZXIgY29kZSA9XG4gIGJ5dGVjb2RlX2ZpbmRfb3Bjb2RlIChmdW4gb3AgLT4gb3AgPSAzNSkgY29kZS52Y19ieXRlY29kZSBjb2RlLnZjX2NvbnN0YW50c1xuICB8fCBBcnJheS5leGlzdHMgKGZ1biBjIC0+XG4gICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiB8fCBIYXNodGJsLm1lbSBkIFwidmMtYnl0ZWNvZGVcIiAtPlxuICAgICAgICAgKHRyeSBjb2RlX3VzZXNfaGFuZGxlciAoY29kZV9mcm9tX3ZhbHVlIGMpIHdpdGggXyAtPiBmYWxzZSlcbiAgICAgICB8IF8gLT4gZmFsc2UpIGNvZGUudmNfY29uc3RhbnRzXG5cbigqKiBUcnVlIGlmIFtjb2RlXSDigJQgb3IgYW55IG5lc3RlZCBjbG9zdXJlIGNvZGUg4oCUIHJlZmVyZW5jZXMgKGluIGl0cyBjb25zdGFudFxuICAgIHBvb2wsIGFzIGEgR0xPQkFMX0dFVC9DQUxMIG5hbWUpIGEgZnVuY3Rpb24gcmVnaXN0ZXJlZCBpblxuICAgIFtTeF90eXBlcy5qaXRfZXhjbHVkZWRfY2FsbGVyX25hbWVzXSAoYSBjYWxsL2NjLWVzdGFibGlzaGluZyBmb3JtIGxpa2VcbiAgICBDb21tb24tTGlzcCdzIGNsLXJlc3RhcnQtY2FzZS9jbC1oYW5kbGVyLWNhc2UpLiBTdWNoIGEgY2FsbGVyIG11c3QgcnVuIG9uXG4gICAgdGhlIENFSyBzbyB0aGUgY29udGludWF0aW9uIGNhcHR1cmVkIGluc2lkZSB0aGUgY2FsbGVkIGZvcm0gY2FuIGVzY2FwZS5cbiAgICBUaGUgY29uc3RhbnQtcG9vbCBzdHJpbmcgSVMgdGhlIHJlZmVyZW5jZWQgc3ltYm9sIG5hbWUsIHNvIG1lbWJlcnNoaXAgaXMgYVxuICAgIGRpcmVjdCBsb29rdXA7IHJlY3Vyc2UgaW50byBuZXN0ZWQgY2xvc3VyZSBjb2Rlcy4gU2tpcHBlZCBlbnRpcmVseSAobm9cbiAgICBIYXNodGJsIHdhbGspIHdoZW4gbm8gZXNjYXBpbmcgZm9ybXMgYXJlIHJlZ2lzdGVyZWQuICopXG5sZXQgcmVjIGNvZGVfcmVmc19lc2NhcGluZ19jYWxsZXIgY29kZSA9XG4gIEFycmF5LmV4aXN0cyAoZnVuIGMgLT5cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IFN0cmluZyBzIC0+IEhhc2h0YmwubWVtIFN4X3R5cGVzLmppdF9leGNsdWRlZF9jYWxsZXJfbmFtZXMgc1xuICAgIHwgRGljdCBkIHdoZW4gSGFzaHRibC5tZW0gZCBcImJ5dGVjb2RlXCIgfHwgSGFzaHRibC5tZW0gZCBcInZjLWJ5dGVjb2RlXCIgLT5cbiAgICAgICh0cnkgY29kZV9yZWZzX2VzY2FwaW5nX2NhbGxlciAoY29kZV9mcm9tX3ZhbHVlIGMpIHdpdGggXyAtPiBmYWxzZSlcbiAgICB8IF8gLT4gZmFsc2UpIGNvZGUudmNfY29uc3RhbnRzXG5cbmxldCBqaXRfY29tcGlsZV9sYW1iZGEgKGwgOiBsYW1iZGEpIGdsb2JhbHMgPVxuICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiPGFub24+XCIgaW5cbiAgaWYgIV9qaXRfY29tcGlsaW5nIHRoZW4gKFxuICAgICgqIEFscmVhZHkgY29tcGlsaW5nIOKAlCBwcmV2ZW50IGNhc2NhZGUuIFRoZSBDRUsgd2lsbCBoYW5kbGUgdGhpcyBjYWxsLiAqKVxuICAgIE5vbmVcbiAgKSBlbHNlIGlmIExpc3QubWVtIFwiJmtleVwiIGwubF9wYXJhbXMgfHwgTGlzdC5tZW0gXCI6YXNcIiBsLmxfcGFyYW1zIHRoZW4gKFxuICAgICgqICZrZXkvOmFzIHJlcXVpcmUgY29tcGxleCBydW50aW1lIGFyZ3VtZW50IHByb2Nlc3NpbmcgdGhhdCB0aGUgY29tcGlsZXJcbiAgICAgICBkb2Vzbid0IGVtaXQuIFRoZXNlIGZ1bmN0aW9ucyBtdXN0IHJ1biB2aWEgQ0VLLiAqKVxuICAgIE5vbmVcbiAgKSBlbHNlIGlmIGwubF9uYW1lID0gTm9uZSB8fCBsLmxfY2xvc3VyZS5TeF90eXBlcy5wYXJlbnQgPD4gTm9uZSB0aGVuIChcbiAgICAoKiBBbm9ueW1vdXMgb3IgbmVzdGVkIGxhbWJkYXM6IHNraXAgSklULiBOZXN0ZWQgZGVmaW5lcyBnZXQgcmUtY3JlYXRlZFxuICAgICAgIG9uIGVhY2ggb3V0ZXIgY2FsbCwgc28gcGVyLWNhbGwgY29tcGlsZSBjb3N0IGlzIHB1cmUgb3ZlcmhlYWQuICopXG4gICAgTm9uZVxuICApIGVsc2UgaWYgX2ppdF9pc19icm9rZW5fbmFtZSBmbl9uYW1lIHRoZW4gKFxuICAgIE5vbmVcbiAgKSBlbHNlIGlmIFN4X3R5cGVzLmppdF9uYW1lX2V4Y2x1ZGVkIGZuX25hbWUgdGhlbiAoXG4gICAgKCogR3Vlc3QtZGVjbGFyZWQgaW50ZXJwcmV0LW9ubHkgZnVuY3Rpb24gKGNvbnRpbnVhdGlvbi11c2luZyBkaXNwYXRjaFxuICAgICAgIGNvcmUsIG9yIGEgd2hvbGUgbmFtZXNwYWNlIHZpYSBwcmVmaXgpLiBSdW4gb24gdGhlIENFSzsgdGhlIHN0YWNrIFZNXG4gICAgICAgY2FuJ3QgZXNjYXBlIHRocm91Z2ggYSBDRUsgY29udGludWF0aW9uIGFuZCBtYXkgbWlzY29tcGlsZSBkZWVwIEFTVFxuICAgICAgIHJlY3Vyc2lvbiBpbnRvIGEgbm9uLXRlcm1pbmF0aW5nIGxvb3AuIFNlZSBTeF90eXBlcy5qaXRfZXhjbHVkZWQgL1xuICAgICAgIGppdF9leGNsdWRlZF9wcmVmaXhlcy4gKilcbiAgICBOb25lXG4gICkgZWxzZVxuICB0cnlcbiAgICBfaml0X2NvbXBpbGluZyA6PSB0cnVlO1xuICAgIGxldCBjb21waWxlX2ZuID0gdHJ5IEhhc2h0YmwuZmluZCBnbG9iYWxzIFwiY29tcGlsZVwiXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoX2ppdF9jb21waWxpbmcgOj0gZmFsc2U7IHJhaXNlIChFdmFsX2Vycm9yIFwiSklUOiBjb21waWxlciBub3QgbG9hZGVkXCIpKSBpblxuICAgIGxldCBwYXJhbV9zeW1zID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN5bWJvbCBzKSBsLmxfcGFyYW1zKSBpblxuICAgIGxldCBmbl9leHByID0gTGlzdCBbU3ltYm9sIFwiZm5cIjsgcGFyYW1fc3ltczsgbC5sX2JvZHldIGluXG4gICAgbGV0IHF1b3RlZCA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGZuX2V4cHJdIGluXG4gICAgKCogRmFzdCBwYXRoOiBpZiBjb21waWxlIGhhcyBieXRlY29kZSwgY2FsbCBpdCBkaXJlY3RseSB2aWEgdGhlIFZNLlxuICAgICAgIEFsbCBoZWxwZXIgY2FsbHMgKGNvbXBpbGUtZXhwciwgZW1pdC1ieXRlLCBldGMuKSBoYXBwZW4gaW5zaWRlIHRoZVxuICAgICAgIHNhbWUgVk0gZXhlY3V0aW9uIOKAlCBubyBwZXItY2FsbCBWTSBhbGxvY2F0aW9uIG92ZXJoZWFkLiAqKVxuICAgIGxldCByZXN1bHQgPSBtYXRjaCBjb21waWxlX2ZuIHdpdGhcbiAgICB8IExhbWJkYSB7IGxfY29tcGlsZWQgPSBTb21lIGNsOyBfIH0gd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICBjYWxsX2Nsb3N1cmUgY2wgW2ZuX2V4cHJdIGdsb2JhbHNcbiAgICB8IF8gLT5cbiAgICAgIGlnbm9yZSBjb21waWxlX2ZuO1xuICAgICAgbGV0IGNvbXBpbGVfZW52ID0gU3hfdHlwZXMuZW52X2V4dGVuZCAoU3hfdHlwZXMubWFrZV9lbnYgKCkpIGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIGNvbXBpbGVfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gaykgdikgZ2xvYmFscztcbiAgICAgIFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW1N5bWJvbCBcImNvbXBpbGVcIjsgcXVvdGVkXSkgKEVudiBjb21waWxlX2VudilcbiAgICBpblxuICAgIF9qaXRfY29tcGlsaW5nIDo9IGZhbHNlO1xuICAgICgqIE1lcmdlIGNsb3N1cmUgYmluZGluZ3MgaW50byBlZmZlY3RpdmVfZ2xvYmFscyBzbyBHTE9CQUxfR0VUIHJlc29sdmVzXG4gICAgICAgdmFyaWFibGVzIGZyb20gbGV0L2RlZmluZSBibG9ja3MuIFRoZSBjb21waWxlciBlbWl0cyBHTE9CQUxfR0VUIGZvclxuICAgICAgIGZyZWUgdmFyaWFibGVzOyB0aGUgVk0gcmVzb2x2ZXMgdGhlbSBmcm9tIHZtX2Vudl9yZWYuICopXG4gICAgbGV0IGVmZmVjdGl2ZV9nbG9iYWxzID1cbiAgICAgIGlmIEhhc2h0YmwubGVuZ3RoIGwubF9jbG9zdXJlLlN4X3R5cGVzLmJpbmRpbmdzID4gMCB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBtZXJnZWQgPSBIYXNodGJsLmNvcHkgZ2xvYmFscyBpblxuICAgICAgICBsZXQgcmVjIG1lcmdlX2VudiBlbnYgPVxuICAgICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT5cbiAgICAgICAgICAgIGxldCBuYW1lID0gU3hfdHlwZXMudW5pbnRlcm4gaWQgaW5cbiAgICAgICAgICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gbWVyZ2VkIG5hbWUpIHRoZW5cbiAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIG1lcmdlZCBuYW1lIHYpIGVudi5TeF90eXBlcy5iaW5kaW5ncztcbiAgICAgICAgICBtYXRjaCBlbnYuU3hfdHlwZXMucGFyZW50IHdpdGggU29tZSBwIC0+IG1lcmdlX2VudiBwIHwgTm9uZSAtPiAoKVxuICAgICAgICBpblxuICAgICAgICBtZXJnZV9lbnYgbC5sX2Nsb3N1cmU7XG4gICAgICAgIG1lcmdlZFxuICAgICAgZW5kIGVsc2UgZ2xvYmFsc1xuICAgIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiB8fCBIYXNodGJsLm1lbSBkIFwidmMtYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICAoKiBQaGFzZSBFOiBpZiB0aGUgaW5uZXIgbGFtYmRhJ3MgYnl0ZWNvZGUgY29udGFpbnMgYW55XG4gICAgICAgICAgICAgZXh0ZW5zaW9uIG9wY29kZSAo4omlMjAwKSwgc2tpcCBKSVQgYW5kIGxldCB0aGUgbGFtYmRhIHJ1blxuICAgICAgICAgICAgIGludGVycHJldGVkIHZpYSBDRUsuIEV4dGVuc2lvbiBvcGNvZGVzIGRpc3BhdGNoIGNvcnJlY3RseVxuICAgICAgICAgICAgIHRocm91Z2ggdGhlIFZNJ3MgcmVnaXN0cnkgZmFsbHRocm91Z2gsIGJ1dCB0aGUgSklUIGhhcyBub1xuICAgICAgICAgICAgIGtub3dsZWRnZSBvZiB0aGVtIGFuZCBzaG91bGRuJ3QgY2xhaW0gb3duZXJzaGlwLiAqKVxuICAgICAgICAgIGlmIGJ5dGVjb2RlX3VzZXNfZXh0ZW5zaW9uX29wY29kZXMgY29kZS52Y19ieXRlY29kZSBjb2RlLnZjX2NvbnN0YW50cyB0aGVuIGJlZ2luXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFNLSVAgJXM6IGJ5dGVjb2RlIHVzZXMgZXh0ZW5zaW9uIG9wY29kZXMgKGludGVycHJldC1vbmx5IGluIHYxKVxcbiUhXCJcbiAgICAgICAgICAgICAgZm5fbmFtZTtcbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICBlbmQgZWxzZSBpZiBjb2RlX3VzZXNfaGFuZGxlciBjb2RlIHRoZW4gYmVnaW5cbiAgICAgICAgICAgICgqIGd1YXJkIC8gaGFuZGxlci1iaW5kIChwb3NzaWJseSBpbiBhIG5lc3RlZCBjbG9zdXJlKTogVk1cbiAgICAgICAgICAgICAgIFBVU0hfSEFORExFUiBkb2Vzbid0IGNhdGNoIHRoZSBgZXJyb3JgIHByaW1pdGl2ZSdzIE9DYW1sXG4gICAgICAgICAgICAgICBleGNlcHRpb24gYWNyb3NzIGZyYW1lcyDigJQgcnVuIG9uIHRoZSBDRUsuICopXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFNLSVAgJXM6IGluc3RhbGxzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIChndWFyZCkg4oCUIGludGVycHJldC1vbmx5XFxuJSFcIlxuICAgICAgICAgICAgICBmbl9uYW1lO1xuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVuZCBlbHNlIGlmIEhhc2h0YmwubGVuZ3RoIFN4X3R5cGVzLmppdF9leGNsdWRlZF9jYWxsZXJfbmFtZXMgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgY29kZV9yZWZzX2VzY2FwaW5nX2NhbGxlciBjb2RlIHRoZW4gYmVnaW5cbiAgICAgICAgICAgICgqIENhbGxzIGEgY2FsbC9jYy1lc3RhYmxpc2hpbmcgZm9ybSAoZS5nLiBjbC1yZXN0YXJ0LWNhc2UpOiBtdXN0XG4gICAgICAgICAgICAgICBydW4gb24gdGhlIENFSyBzbyB0aGUgY2FwdHVyZWQgY29udGludWF0aW9uIGNhbiBlc2NhcGUuICopXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFNLSVAgJXM6IGNhbGxzIGEgY2FsbC9jYy1lc3RhYmxpc2hpbmcgZm9ybSDigJQgaW50ZXJwcmV0LW9ubHlcXG4lIVwiXG4gICAgICAgICAgICAgIGZuX25hbWU7XG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZW5kIGVsc2VcbiAgICAgICAgICAgIFNvbWUgeyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSBbfHxdO1xuICAgICAgICAgICAgICAgICAgIHZtX25hbWUgPSBsLmxfbmFtZTsgdm1fZW52X3JlZiA9IGVmZmVjdGl2ZV9nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IFNvbWUgbC5sX2Nsb3N1cmUgfVxuICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiBjbG9zdXJlIGluZGV4ICVkIG91dCBvZiBib3VuZHMgKHBvb2w9JWQpXFxuJSFcIlxuICAgICAgICAgICAgZm5fbmFtZSBpZHggKEFycmF5Lmxlbmd0aCBvdXRlcl9jb2RlLnZjX2NvbnN0YW50cyk7XG4gICAgICAgICAgTm9uZVxuICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICh0cnlcbiAgICAgICAgICBsZXQgdmFsdWUgPSBleGVjdXRlX21vZHVsZSBvdXRlcl9jb2RlIGdsb2JhbHMgaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFJFU09MVkVEICVzOiAlcyAoYmNbMF09JWQpXFxuJSFcIlxuICAgICAgICAgICAgZm5fbmFtZSAodHlwZV9vZiB2YWx1ZSkgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSk7XG4gICAgICAgICAgTm9uZVxuICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFNLSVAgJXM6IG5vbi1jbG9zdXJlIGV4ZWN1dGlvbiBmYWlsZWQgKGJjWzBdPSVkLCBsZW49JWQpXFxuJSFcIlxuICAgICAgICAgICAgZm5fbmFtZSAoaWYgQXJyYXkubGVuZ3RoIGJjID4gMCB0aGVuIGJjLigwKSBlbHNlIC0xKSAoQXJyYXkubGVuZ3RoIGJjKTtcbiAgICAgICAgICBOb25lKVxuICAgICAgZW5kXG4gICAgfCBfIC0+XG4gICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6IGNvbXBpbGVyIHJldHVybmVkICVzXFxuJSFcIiBmbl9uYW1lICh0eXBlX29mIHJlc3VsdCk7XG4gICAgICBOb25lKVxuICB3aXRoIGUgLT5cbiAgICBfaml0X2NvbXBpbGluZyA6PSBmYWxzZTtcbiAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6ICVzXFxuJSFcIiBmbl9uYW1lIChQcmludGV4Yy50b19zdHJpbmcgZSk7XG4gICAgTm9uZVxuXG4oKiBXaXJlIHVwIGZvcndhcmQgcmVmZXJlbmNlcyAqKVxubGV0ICgpID0gaml0X2NvbXBpbGVfcmVmIDo9IGppdF9jb21waWxlX2xhbWJkYVxubGV0ICgpID0gX3ZtX2NhbGxfY2xvc3VyZV9yZWYgOj0gKGZ1biBjbCBhcmdzIC0+IGNhbGxfY2xvc3VyZV9yZXVzZSBjbCBhcmdzKVxubGV0ICgpID0gX3ZtX3N1c3BlbnNpb25fdG9fZGljdCA6PSAoZnVuIGV4biAtPlxuICBtYXRjaCBleG4gd2l0aFxuICB8IFZtU3VzcGVuZGVkIChyZXF1ZXN0LCB2bSkgLT5cbiAgICAoKiBTbmFwc2hvdCBwZW5kaW5nX2NlayBhbmQgcmV1c2Vfc3RhY2sgTk9XIOKAlCBhIG5lc3RlZCBjZWtfY2FsbF9vcl9zdXNwZW5kXG4gICAgICAgb24gdGhlIHNhbWUgVk0gbWF5IG92ZXJ3cml0ZSB0aGVtIGJlZm9yZSBvdXIgcmVzdW1lIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKilcbiAgICBsZXQgc2F2ZWRfY2VrID0gdm0ucGVuZGluZ19jZWsgaW5cbiAgICBsZXQgc2F2ZWRfcmV1c2UgPSB2bS5yZXVzZV9zdGFjayBpblxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMyBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX192bV9zdXNwZW5kZWRcIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInJlcXVlc3RcIiByZXF1ZXN0O1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVzdW1lXCIgKE5hdGl2ZUZuIChcInZtLXJlc3VtZVwiLCBmdW4gYXJncyAtPlxuICAgICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtyZXN1bHRdIC0+XG4gICAgICAgICgqIFJlc3RvcmUgc2F2ZWQgc3RhdGUgYmVmb3JlIHJlc3VtaW5nIOKAlCBtYXkgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuXG4gICAgICAgICAgIGJ5IGEgbmVzdGVkIHN1c3BlbnNpb24gb24gdGhlIHNhbWUgVk0uICopXG4gICAgICAgIHZtLnBlbmRpbmdfY2VrIDwtIHNhdmVkX2NlaztcbiAgICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gc2F2ZWRfcmV1c2U7XG4gICAgICAgICh0cnkgcmVzdW1lX3ZtIHZtIHJlc3VsdFxuICAgICAgICAgd2l0aCBleG4yIC0+XG4gICAgICAgICAgIG1hdGNoICFfdm1fc3VzcGVuc2lvbl90b19kaWN0IGV4bjIgd2l0aFxuICAgICAgICAgICB8IFNvbWUgbWFya2VyIC0+IG1hcmtlclxuICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgZXhuMilcbiAgICAgIHwgXyAtPiBOaWwpKTtcbiAgICBTb21lIChEaWN0IGQpXG4gIHwgXyAtPiBOb25lKVxuKCogSG9vazogd2hlbiBldmFsX2V4cHIgKGNla19ydW5faXRlcmF0aXZlKSBlbmNvdW50ZXJzIGEgQ0VLIHN1c3BlbnNpb24sXG4gICBjb252ZXJ0IGl0IHRvIFZtU3VzcGVuZGVkIHNvIGl0IHByb3BhZ2F0ZXMgdG8gdGhlIG91dGVyIGhhbmRsZXJcbiAgICh2YWx1ZV90b19qcyB3cmFwcGVyLCBfZHJpdmVBc3luYywgZXRjLikuIFdpdGhvdXQgdGhpcywgcGVyZm9ybVxuICAgaW5zaWRlIG5lc3RlZCBldmFsX2V4cHIgY2FsbHMgKGV2ZW50IGhhbmRsZXIg4oaSIHRyYW1wb2xpbmUg4oaSIGV2YWxfZXhwcilcbiAgIGdldHMgc3dhbGxvd2VkIGFzIFwiSU8gc3VzcGVuc2lvbiBpbiBub24tSU8gY29udGV4dFwiLiAqKVxubGV0ICgpID0gX2Nla19pb19zdXNwZW5kX2hvb2sgOj0gU29tZSAoZnVuIHN1c3BlbmRlZF9zdGF0ZSAtPlxuICBsZXQgcmVxdWVzdCA9IFN4X3JlZi5jZWtfaW9fcmVxdWVzdCBzdXNwZW5kZWRfc3RhdGUgaW5cbiAgbGV0IHZtID0gY3JlYXRlICFfZGVmYXVsdF92bV9nbG9iYWxzIGluXG4gIHZtLnBlbmRpbmdfY2VrIDwtIFNvbWUgc3VzcGVuZGVkX3N0YXRlO1xuICAoKiBUcmFuc2ZlciByZXVzZV9zdGFjayBmcm9tIHRoZSBhY3RpdmUgVk0gc28gcmVzdW1lX3ZtIGNhbiByZXN0b3JlXG4gICAgIGNhbGxlciBmcmFtZXMgc2F2ZWQgYnkgY2FsbF9jbG9zdXJlX3JldXNlIGR1cmluZyB0aGUgc3VzcGVuc2lvbiBjaGFpbi4gKilcbiAgKG1hdGNoICFfYWN0aXZlX3ZtIHdpdGhcbiAgIHwgU29tZSBhY3RpdmUgd2hlbiBhY3RpdmUucmV1c2Vfc3RhY2sgPD4gW10gLT5cbiAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gYWN0aXZlLnJldXNlX3N0YWNrO1xuICAgICBhY3RpdmUucmV1c2Vfc3RhY2sgPC0gW11cbiAgIHwgXyAtPiAoKSk7XG4gIHJhaXNlIChWbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pKSlcblxubGV0ICgpID0gX2Nla19ldmFsX2xhbWJkYV9yZWYgOj0gKGZ1biBmIGFyZ3MgLT5cbiAgbGV0IHN0YXRlID0gU3hfcmVmLmNvbnRpbnVlX3dpdGhfY2FsbCBmIChMaXN0IGFyZ3MpIChFbnYgKG1ha2VfZW52ICgpKSkgKExpc3QgYXJncykgKExpc3QgW10pIGluXG4gIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlIGluXG4gIG1hdGNoIFN4X3J1bnRpbWUuZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicGhhc2VcIikgd2l0aFxuICB8IFN0cmluZyBcImlvLXN1c3BlbmRlZFwiIC0+XG4gICAgKCogQ3JlYXRlIGEgc3R1YiBWTSB0byBjYXJyeSB0aGUgc3VzcGVuZGVkIENFSyBzdGF0ZS5cbiAgICAgICByZXN1bWVfdm0gd2lsbDogY2VrX3Jlc3VtZSDihpIgcHVzaCByZXN1bHQg4oaSIHJ1biAobm8tb3AsIG5vIGZyYW1lcykg4oaSIHBvcCAqKVxuICAgIGxldCB2bSA9IGNyZWF0ZSAoSGFzaHRibC5jcmVhdGUgMCkgaW5cbiAgICB2bS5wZW5kaW5nX2NlayA8LSBTb21lIGZpbmFsO1xuICAgICgqIFRyYW5zZmVyIHJldXNlX3N0YWNrIGZyb20gYWN0aXZlIFZNICopXG4gICAgKG1hdGNoICFfYWN0aXZlX3ZtIHdpdGhcbiAgICAgfCBTb21lIGFjdGl2ZSB3aGVuIGFjdGl2ZS5yZXVzZV9zdGFjayA8PiBbXSAtPlxuICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIGFjdGl2ZS5yZXVzZV9zdGFjaztcbiAgICAgICBhY3RpdmUucmV1c2Vfc3RhY2sgPC0gW11cbiAgICAgfCBfIC0+ICgpKTtcbiAgICByYWlzZSAoVm1TdXNwZW5kZWQgKFN4X3J1bnRpbWUuZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicmVxdWVzdFwiKSwgdm0pKVxuICB8IF8gLT4gU3hfcmVmLmNla192YWx1ZSBmaW5hbClcblxuXG4oKiogezEgRGVidWdnaW5nIC8gaW50cm9zcGVjdGlvbn0gKilcblxuKCoqIE1hcCBvcGNvZGUgaW50ZWdlciB0byBodW1hbi1yZWFkYWJsZSBuYW1lLiAqKVxubGV0IG9wY29kZV9uYW1lID0gZnVuY3Rpb25cbiAgfCAxIC0+IFwiQ09OU1RcIiB8IDIgLT4gXCJOSUxcIiB8IDMgLT4gXCJUUlVFXCIgfCA0IC0+IFwiRkFMU0VcIlxuICB8IDUgLT4gXCJQT1BcIiB8IDYgLT4gXCJEVVBcIiB8IDcgLT4gXCJTV0FQXCJcbiAgfCAxNiAtPiBcIkxPQ0FMX0dFVFwiIHwgMTcgLT4gXCJMT0NBTF9TRVRcIlxuICB8IDE4IC0+IFwiVVBWQUxVRV9HRVRcIiB8IDE5IC0+IFwiVVBWQUxVRV9TRVRcIlxuICB8IDIwIC0+IFwiR0xPQkFMX0dFVFwiIHwgMjEgLT4gXCJHTE9CQUxfU0VUXCJcbiAgfCAzMiAtPiBcIkpVTVBcIiB8IDMzIC0+IFwiSlVNUF9JRl9GQUxTRVwiIHwgMzQgLT4gXCJKVU1QX0lGX1RSVUVcIlxuICB8IDM1IC0+IFwiUFVTSF9IQU5ETEVSXCIgfCAzNiAtPiBcIlBPUF9IQU5ETEVSXCIgfCAzNyAtPiBcIlJBSVNFXCJcbiAgfCA0OCAtPiBcIkNBTExcIiB8IDQ5IC0+IFwiVEFJTF9DQUxMXCIgfCA1MCAtPiBcIlJFVFVSTlwiXG4gIHwgNTEgLT4gXCJDTE9TVVJFXCIgfCA1MiAtPiBcIkNBTExfUFJJTVwiXG4gIHwgNjQgLT4gXCJMSVNUXCIgfCA2NSAtPiBcIkRJQ1RcIlxuICB8IDEyOCAtPiBcIkRFRklORVwiXG4gIHwgMTQ0IC0+IFwiU1RSX0NPTkNBVFwiXG4gIHwgMTYwIC0+IFwiQUREXCIgfCAxNjEgLT4gXCJTVUJcIiB8IDE2MiAtPiBcIk1VTFwiIHwgMTYzIC0+IFwiRElWXCJcbiAgfCAxNjQgLT4gXCJFUVwiIHwgMTY1IC0+IFwiTFRcIiB8IDE2NiAtPiBcIkdUXCIgfCAxNjcgLT4gXCJOT1RcIlxuICB8IDE2OCAtPiBcIkxFTlwiIHwgMTY5IC0+IFwiRklSU1RcIiB8IDE3MCAtPiBcIlJFU1RcIiB8IDE3MSAtPiBcIk5USFwiXG4gIHwgMTcyIC0+IFwiQ09OU1wiIHwgMTczIC0+IFwiTkVHXCIgfCAxNzQgLT4gXCJJTkNcIiB8IDE3NSAtPiBcIkRFQ1wiXG4gIHwgbiAtPlxuICAgICgqIEV4dGVuc2lvbiBvcGNvZGVzICjiiaUyMDApIGdldCB0aGVpciBodW1hbi1yZWFkYWJsZSBuYW1lIGZyb20gdGhlXG4gICAgICAgcmVnaXN0cnk7IGRlZmF1bHRzIHRvIFVOS05PV05fbiBpZiB0aGUgZXh0ZW5zaW9uIGlzbid0IGxvYWRlZC4gKilcbiAgICAobWF0Y2ggIWV4dGVuc2lvbl9vcGNvZGVfbmFtZV9yZWYgbiB3aXRoXG4gICAgIHwgU29tZSBuYW1lIC0+IG5hbWVcbiAgICAgfCBOb25lIC0+IFByaW50Zi5zcHJpbnRmIFwiVU5LTk9XTl8lZFwiIG4pXG5cbigqKiBOdW1iZXIgb2YgZXh0cmEgb3BlcmFuZCBieXRlcyBjb25zdW1lZCBieSBlYWNoIG9wY29kZS5cbiAgICBSZXR1cm5zIChmb3JtYXQsIHRvdGFsX2J5dGVzKSB3aGVyZSBmb3JtYXQgZGVzY3JpYmVzIHRoZSBvcGVyYW5kIHR5cGVzLiAqKVxubGV0IG9wY29kZV9vcGVyYW5kX3NpemUgPSBmdW5jdGlvblxuICB8IDEgKCogQ09OU1QgKikgfCAyMCAoKiBHTE9CQUxfR0VUICopIHwgMjEgKCogR0xPQkFMX1NFVCAqKVxuICB8IDY0ICgqIExJU1QgKikgfCA2NSAoKiBESUNUICopIHwgMTI4ICgqIERFRklORSAqKSAtPiAyICAoKiB1MTYgKilcbiAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgfCAxOCAoKiBVUFZBTFVFX0dFVCAqKSB8IDE5ICgqIFVQVkFMVUVfU0VUICopXG4gIHwgNDggKCogQ0FMTCAqKSB8IDQ5ICgqIFRBSUxfQ0FMTCAqKVxuICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+IDEgICgqIHU4ICopXG4gIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKilcbiAgfCAzNSAoKiBQVVNIX0hBTkRMRVIgKikgLT4gMiAgKCogaTE2ICopXG4gIHwgNTEgKCogQ0xPU1VSRSAqKSAtPiAyICAoKiB1MTYgZm9yIGNvbnN0YW50IGluZGV4OyB1cHZhbHVlIGRlc2NyaXB0b3JzIGZvbGxvdyBkeW5hbWljYWxseSAqKVxuICB8IDUyICgqIENBTExfUFJJTSAqKSAtPiAzICAoKiB1MTYgKyB1OCAqKVxuICB8IF8gLT4gMCAgKCogbm8gb3BlcmFuZCAqKVxuXG4oKiogVHJhY2UgYSBzaW5nbGUgZXhlY3V0aW9uIOKAlCBjb21waWxlICsgcnVuLCBjb2xsZWN0aW5nIHRyYWNlIGVudHJpZXMuXG4gICAgRWFjaCBlbnRyeSBpcyBhIGRpY3Qgd2l0aCA6b3Bjb2RlLCA6c3RhY2ssIDpkZXB0aC4gKilcbmxldCB0cmFjZV9ydW4gc3JjIGdsb2JhbHMgPVxuICAoKiBDb21waWxlICopXG4gIGxldCBjb21waWxlX2ZuID0gdHJ5IEhhc2h0YmwuZmluZCBnbG9iYWxzIFwiY29tcGlsZVwiXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmFjZTogY29tcGlsZXIgbm90IGxvYWRlZFwiKSBpblxuICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGggW2VdIC0+IGUgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpIGluXG4gIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBleHByXSBpblxuICBsZXQgY29kZV92YWwgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtjb21waWxlX2ZuOyBxdW90ZWRdKSAoRW52IChtYWtlX2VudiAoKSkpIGluXG4gIGxldCBjb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gIGxldCBjbCA9IHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTsgdm1fbmFtZSA9IFNvbWUgXCJ0cmFjZVwiO1xuICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUwID0geyBjbG9zdXJlID0gY2w7IGlwID0gMDsgYmFzZSA9IDA7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGZvciBfID0gMCB0byBjb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZTtcbiAgdm0uZnJhbWVzIDwtIFtmcmFtZTBdO1xuICAoKiBSdW4gd2l0aCB0cmFjaW5nICopXG4gIGxldCB0cmFjZSA9IHJlZiBbXSBpblxuICBsZXQgbWF4X3N0ZXBzID0gMTAwMDAgaW5cbiAgbGV0IHN0ZXBzID0gcmVmIDAgaW5cbiAgKHRyeVxuICAgIHdoaWxlIHZtLmZyYW1lcyA8PiBbXSAmJiAhc3RlcHMgPCBtYXhfc3RlcHMgZG9cbiAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoXG4gICAgICB8IFtdIC0+ICgpXG4gICAgICB8IGZyYW1lIDo6IF8gLT5cbiAgICAgICAgbGV0IGJjID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuXG4gICAgICAgICAgdm0uZnJhbWVzIDwtIFtdXG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgb3AgPSBiYy4oZnJhbWUuaXApIGluXG4gICAgICAgICAgKCogU25hcHNob3Qgc3RhY2sgdG9wIDUgKilcbiAgICAgICAgICBsZXQgc3RhY2tfc25hcCA9IExpc3QuaW5pdCAobWluIDUgdm0uc3ApIChmdW4gaSAtPlxuICAgICAgICAgICAgbGV0IHYgPSB2bS5zdGFjay4odm0uc3AgLSAxIC0gaSkgaW5cbiAgICAgICAgICAgIFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KSkgaW5cbiAgICAgICAgICBsZXQgZW50cnkgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib3Bjb2RlXCIgKFN0cmluZyAob3Bjb2RlX25hbWUgb3ApKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJzdGFja1wiIChMaXN0IHN0YWNrX3NuYXApO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcImRlcHRoXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCB2bS5mcmFtZXMpKSk7XG4gICAgICAgICAgdHJhY2UgOj0gRGljdCBlbnRyeSA6OiAhdHJhY2U7XG4gICAgICAgICAgaW5jciBzdGVwcztcbiAgICAgICAgICAoKiBFeGVjdXRlIG9uZSBzdGVwIOKAlCB1c2UgdGhlIG1haW4gcnVuIGxvb3AgZm9yIDEgc3RlcC5cbiAgICAgICAgICAgICBXZSBkbyB0aGlzIGJ5IHNhdmluZyB0aGUgc3RhdGUgYW5kIHJ1bm5pbmcgdGhlIG9yaWdpbmFsIGRpc3BhdGNoLiAqKVxuICAgICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICAgIGxldCByZXN0X2ZyYW1lcyA9IExpc3QudGwgdm0uZnJhbWVzIGluXG4gICAgICAgICAgKHRyeSBtYXRjaCBvcCB3aXRoXG4gICAgICAgICAgfCAxIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpbiBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeClcbiAgICAgICAgICB8IDIgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgICB8IDMgLT4gcHVzaCB2bSAoQm9vbCB0cnVlKVxuICAgICAgICAgIHwgNCAtPiBwdXNoIHZtIChCb29sIGZhbHNlKVxuICAgICAgICAgIHwgNSAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgICB8IDYgLT4gcHVzaCB2bSAocGVlayB2bSlcbiAgICAgICAgICB8IDcgLT4gbGV0IGEgPSBwb3Agdm0gaW4gbGV0IGIgPSBwb3Agdm0gaW4gcHVzaCB2bSBhOyBwdXNoIHZtIGJcbiAgICAgICAgICB8IDE2IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IHYgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIGluXG4gICAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgICB8IDE3IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpbiBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWUgPC0gdlxuICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgICAgfCAxOCAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgcHVzaCB2bSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlXG4gICAgICAgICAgfCAxOSAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgICAgfCAyMCAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIGxldCB2ID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICAgIHwgMjEgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIChwZWVrIHZtKVxuICAgICAgICAgIHwgMzIgLT4gbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgICAgfCAzMyAtPiBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGlmIG5vdCAoc3hfdHJ1dGh5IHYpIHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgICB8IDM0IC0+IGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpbiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICAgIHwgMzUgLT4gbGV0IGNhdGNoX29mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluXG4gICAgICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIHsgaF9jYXRjaF9pcCA9IGZyYW1lLmlwICsgY2F0Y2hfb2Zmc2V0O1xuICAgICAgICAgICAgICBoX2ZyYW1lX2RlcHRoID0gTGlzdC5sZW5ndGggdm0uZnJhbWVzOyBoX3NwID0gdm0uc3A7XG4gICAgICAgICAgICAgIGhfZnJhbWUgPSBmcmFtZSB9IDo6IHZtLmhhbmRsZXJfc3RhY2tcbiAgICAgICAgICB8IDM2IC0+IChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGggXyA6OiByIC0+IHZtLmhhbmRsZXJfc3RhY2sgPC0gciB8IFtdIC0+ICgpKVxuICAgICAgICAgIHwgMzcgLT4gbGV0IGV4bl92YWwgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGhcbiAgICAgICAgICAgICB8IGVudHJ5IDo6IHJlc3QgLT5cbiAgICAgICAgICAgICAgIHZtLmhhbmRsZXJfc3RhY2sgPC0gcmVzdDtcbiAgICAgICAgICAgICAgIHdoaWxlIExpc3QubGVuZ3RoIHZtLmZyYW1lcyA+IGVudHJ5LmhfZnJhbWVfZGVwdGggZG9cbiAgICAgICAgICAgICAgICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGggXyA6OiBmcyAtPiB2bS5mcmFtZXMgPC0gZnMgfCBbXSAtPiAoKSBkb25lO1xuICAgICAgICAgICAgICAgdm0uc3AgPC0gZW50cnkuaF9zcDsgZW50cnkuaF9mcmFtZS5pcCA8LSBlbnRyeS5oX2NhdGNoX2lwO1xuICAgICAgICAgICAgICAgcHVzaCB2bSBleG5fdmFsXG4gICAgICAgICAgICAgfCBbXSAtPiB2bS5mcmFtZXMgPC0gW10pXG4gICAgICAgICAgfCA0OCAtPiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgdm1fY2FsbCB2bSBmIChMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSlcbiAgICAgICAgICB8IDQ5IC0+IGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7IHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgICAgICB2bV9jYWxsIHZtIGYgKExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpKVxuICAgICAgICAgIHwgNTAgLT4gbGV0IHJlc3VsdCA9IHBvcCB2bSBpblxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzOyB2bS5zcCA8LSBmcmFtZS5iYXNlOyBwdXNoIHZtIHJlc3VsdFxuICAgICAgICAgIHwgNTEgLT4gKCogQ0xPU1VSRSDigJQgc2tpcCBmb3IgdHJhY2UsIGp1c3QgYWR2YW5jZSBwYXN0IHVwdmFsdWUgZGVzY3JpcHRvcnMgKilcbiAgICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGNvZGVfdmFsMiA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICAgIGxldCB1dl9jb3VudCA9IG1hdGNoIGNvZGVfdmFsMiB3aXRoXG4gICAgICAgICAgICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ1cHZhbHVlLWNvdW50XCIgd2l0aFxuICAgICAgICAgICAgICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG5cbiAgICAgICAgICAgICAgICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuXG4gICAgICAgICAgICAgICAgICB8IF8gLT4gMClcbiAgICAgICAgICAgICAgfCBfIC0+IDAgaW5cbiAgICAgICAgICAgIGxldCB1cHZhbHVlcyA9IEFycmF5LmluaXQgdXZfY291bnQgKGZ1biBfIC0+XG4gICAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgICBpZiBpc19sb2NhbCA9IDEgdGhlbiBiZWdpblxuICAgICAgICAgICAgICAgIGxldCBjZWxsID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCB3aXRoXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmdcbiAgICAgICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgYyA9IHsgdXZfdmFsdWUgPSB2bS5zdGFjay4oZnJhbWUuYmFzZSArIGluZGV4KSB9IGluXG4gICAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjOyBjIGluXG4gICAgICAgICAgICAgICAgY2VsbFxuICAgICAgICAgICAgICBlbmQgZWxzZSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpbmRleClcbiAgICAgICAgICAgICkgaW5cbiAgICAgICAgICAgIGxldCBpbm5lcl9jb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsMiBpblxuICAgICAgICAgICAgbGV0IGMgPSB7IHZtX2NvZGUgPSBpbm5lcl9jb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgdm1fZW52X3JlZiA9IHZtLmdsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB9IGluXG4gICAgICAgICAgICBwdXNoIHZtIChWbUNsb3N1cmUgYylcbiAgICAgICAgICB8IDUyIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpbiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIGxldCBmbl92YWwgPSB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWUgd2l0aCBfIC0+XG4gICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk06IHVua25vd24gcHJpbWl0aXZlIFwiIF4gbmFtZSkpIGluXG4gICAgICAgICAgICAobWF0Y2ggZm5fdmFsIHdpdGggTmF0aXZlRm4gKF8sIGZuKSAtPiBwdXNoIHZtIChmbiBhcmdzKSB8IF8gLT4gcHVzaCB2bSBOaWwpXG4gICAgICAgICAgfCA2NCAtPiBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gTGlzdC5pbml0IGNvdW50IChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgICBwdXNoIHZtIChMaXN0IGl0ZW1zKVxuICAgICAgICAgIHwgNjUgLT4gbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgY291bnQgaW5cbiAgICAgICAgICAgIGZvciBfID0gMSB0byBjb3VudCBkbyBsZXQgdiA9IHBvcCB2bSBpbiBsZXQgayA9IHBvcCB2bSBpblxuICAgICAgICAgICAgICBsZXQga2V5ID0gbWF0Y2ggayB3aXRoIFN0cmluZyBzIC0+IHMgfCBLZXl3b3JkIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgayBpblxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBrZXkgdiBkb25lO1xuICAgICAgICAgICAgcHVzaCB2bSAoRGljdCBkKVxuICAgICAgICAgIHwgMTI4IC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSAocGVlayB2bSlcbiAgICAgICAgICB8IDE0NCAtPiBsZXQgY291bnQgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgcGFydHMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKFN0cmluZyAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBwYXJ0cykpKVxuICAgICAgICAgIHwgMTYwIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCArLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYxIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAtLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYyIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAqLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYzIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAvLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTY0IC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluIHB1c2ggdm0gKEJvb2wgKGEgPSBiKSlcbiAgICAgICAgICB8IDE2NSAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4IDwgeSkgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCAxNjYgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoeCA+IHkpIHwgXyAtPiBCb29sIGZhbHNlKVxuICAgICAgICAgIHwgMTY3IC0+IGxldCB2ID0gcG9wIHZtIGluIHB1c2ggdm0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IHYpKSlcbiAgICAgICAgICB8IDE2OCAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICAgIHwgTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCBsKSlcbiAgICAgICAgICAgICAgfCBTdHJpbmcgcyAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSlcbiAgICAgICAgICAgICAgfCBfIC0+IE51bWJlciAwLjApXG4gICAgICAgICAgfCAxNjkgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBMaXN0ICh4IDo6IF8pIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH0gLT4geCB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTcwIC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgICAgfCBMaXN0IChfIDo6IHhzKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfSAtPiBMaXN0IHhzIHwgXyAtPiBMaXN0IFtdKVxuICAgICAgICAgIHwgMTcxIC0+IGxldCBuID0gcG9wIHZtIGFuZCBjb2xsID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsLCBuIHdpdGhcbiAgICAgICAgICAgICAgfCAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSwgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBmKSB3aXRoIF8gLT4gTmlsKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTcyIC0+IGxldCBjb2xsID0gcG9wIHZtIGFuZCB4ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsIHdpdGggTGlzdCBsIC0+IExpc3QgKHggOjogbCkgfCBfIC0+IExpc3QgW3hdKVxuICAgICAgICAgIHwgMTczIC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTnVtYmVyIHggLT4gTnVtYmVyICgtLngpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzQgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggKy4gMS4wKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTc1IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTnVtYmVyIHggLT4gTnVtYmVyICh4IC0uIDEuMCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgICB3aXRoIGUgLT5cbiAgICAgICAgICAgIGxldCBfID0gZSBpblxuICAgICAgICAgICAgaWdub3JlIHNhdmVkX2lwO1xuICAgICAgICAgICAgKCogT24gZXJyb3IgZHVyaW5nIHRyYWNlLCBqdXN0IHN0b3AgKilcbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSBbXSlcbiAgICAgICAgZW5kXG4gICAgZG9uZVxuICB3aXRoIF8gLT4gKCkpO1xuICBMaXN0IChMaXN0LnJldiAhdHJhY2UpXG5cbigqKiBEaXNhc3NlbWJsZSBhIHZtX2NvZGUgaW50byBhIGxpc3Qgb2YgaW5zdHJ1Y3Rpb24gZGljdHMuICopXG5sZXQgZGlzYXNzZW1ibGUgKGNvZGUgOiB2bV9jb2RlKSA9XG4gIGxldCBiYyA9IGNvZGUudmNfYnl0ZWNvZGUgaW5cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBiYyBpblxuICBsZXQgY29uc3RzID0gY29kZS52Y19jb25zdGFudHMgaW5cbiAgbGV0IGluc3RycyA9IHJlZiBbXSBpblxuICBsZXQgaXAgPSByZWYgMCBpblxuICB3aGlsZSAhaXAgPCBsZW4gZG9cbiAgICBsZXQgb2Zmc2V0ID0gIWlwIGluXG4gICAgbGV0IG9wID0gYmMuKCFpcCkgaW5cbiAgICBpcCA6PSAhaXAgKyAxO1xuICAgIGxldCBuYW1lID0gb3Bjb2RlX25hbWUgb3AgaW5cbiAgICBsZXQgb3BlcmFuZHMgPSByZWYgW10gaW5cbiAgICAobWF0Y2ggb3Agd2l0aFxuICAgIHwgMSAoKiBDT05TVCAqKSB8IDIwICgqIEdMT0JBTF9HRVQgKikgfCAyMSAoKiBHTE9CQUxfU0VUICopXG4gICAgfCAxMjggKCogREVGSU5FICopIC0+XG4gICAgICBpZiAhaXAgKyAxIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBsZXQgY29uc3Rfc3RyID0gaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0c1xuICAgICAgICAgIHRoZW4gU3hfdHlwZXMuaW5zcGVjdCBjb25zdHMuKGlkeCkgZWxzZSBcIj9cIiBpblxuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaWR4KTsgU3RyaW5nIGNvbnN0X3N0cl1cbiAgICAgIGVuZFxuICAgIHwgNjQgKCogTElTVCAqKSB8IDY1ICgqIERJQ1QgKikgfCA1MSAoKiBDTE9TVVJFICopIC0+XG4gICAgICBpZiAhaXAgKyAxIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaWR4KV07XG4gICAgICAgICgqIEZvciBDTE9TVVJFLCBza2lwIHVwdmFsdWUgZGVzY3JpcHRvcnMgKilcbiAgICAgICAgaWYgb3AgPSA1MSAmJiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzIHRoZW4gYmVnaW5cbiAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb25zdHMuKGlkeCkgd2l0aFxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG5cbiAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgblxuICAgICAgICAgICAgICAgIHwgXyAtPiAwKVxuICAgICAgICAgICAgfCBfIC0+IDAgaW5cbiAgICAgICAgICBpcCA6PSAhaXAgKyB1dl9jb3VudCAqIDJcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IDE2ICgqIExPQ0FMX0dFVCAqKSB8IDE3ICgqIExPQ0FMX1NFVCAqKVxuICAgIHwgMTggKCogVVBWQUxVRV9HRVQgKikgfCAxOSAoKiBVUFZBTFVFX1NFVCAqKVxuICAgIHwgNDggKCogQ0FMTCAqKSB8IDQ5ICgqIFRBSUxfQ0FMTCAqKVxuICAgIHwgMTQ0ICgqIFNUUl9DT05DQVQgKikgLT5cbiAgICAgIGlmICFpcCA8IGxlbiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCB2ID0gYmMuKCFpcCkgaW4gaXAgOj0gIWlwICsgMTtcbiAgICAgICAgb3BlcmFuZHMgOj0gW051bWJlciAoZmxvYXRfb2ZfaW50IHYpXVxuICAgICAgZW5kXG4gICAgfCAzMiAoKiBKVU1QICopIHwgMzMgKCogSlVNUF9JRl9GQUxTRSAqKSB8IDM0ICgqIEpVTVBfSUZfVFJVRSAqKSAtPlxuICAgICAgaWYgIWlwICsgMSA8IGxlbiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsbyA9IGJjLighaXApIGluIGxldCBoaSA9IGJjLighaXAgKyAxKSBpblxuICAgICAgICBsZXQgcmF3ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgICAgICAgbGV0IHNpZ25lZCA9IGlmIHJhdyA+PSAzMjc2OCB0aGVuIHJhdyAtIDY1NTM2IGVsc2UgcmF3IGluXG4gICAgICAgIGlwIDo9ICFpcCArIDI7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBzaWduZWQpXVxuICAgICAgZW5kXG4gICAgfCA1MiAoKiBDQUxMX1BSSU0gKikgLT5cbiAgICAgIGlmICFpcCArIDIgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IGlkeCA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGxldCBhcmdjID0gYmMuKCFpcCArIDIpIGluXG4gICAgICAgIGlwIDo9ICFpcCArIDM7XG4gICAgICAgIGxldCBwcmltX25hbWUgPSBpZiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzXG4gICAgICAgICAgdGhlbiAobWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCI/XCIpIGVsc2UgXCI/XCIgaW5cbiAgICAgICAgb3BlcmFuZHMgOj0gW051bWJlciAoZmxvYXRfb2ZfaW50IGlkeCk7IFN0cmluZyBwcmltX25hbWU7IE51bWJlciAoZmxvYXRfb2ZfaW50IGFyZ2MpXVxuICAgICAgZW5kXG4gICAgfCBfIC0+ICgpKTtcbiAgICBsZXQgZW50cnkgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib2Zmc2V0XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IG9mZnNldCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9wY29kZVwiIChTdHJpbmcgbmFtZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib3BlcmFuZHNcIiAoTGlzdCAhb3BlcmFuZHMpO1xuICAgIGluc3RycyA6PSBEaWN0IGVudHJ5IDo6ICFpbnN0cnNcbiAgZG9uZTtcbiAgbGV0IHJlc3VsdCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcImFyaXR5XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGNvZGUudmNfYXJpdHkpKTtcbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcIm51bV9sb2NhbHNcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgY29kZS52Y19sb2NhbHMpKTtcbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcImNvbnN0YW50c1wiIChMaXN0IChBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biB2IC0+IFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KSkgY29uc3RzKSkpO1xuICBIYXNodGJsLnJlcGxhY2UgcmVzdWx0IFwiYnl0ZWNvZGVcIiAoTGlzdCAoTGlzdC5yZXYgIWluc3RycykpO1xuICBEaWN0IHJlc3VsdFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJjYW1sX2NhbGw0IiwiYTMiLCJjYW1sX2NhbGw1IiwiYTQiLCJjYW1sX2NhbGw4IiwiYTUiLCJhNiIsImE3IiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9MaXN0IiwiU3hfdHlwZXMiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9RdWV1ZSIsIlN0ZGxpYiIsIlN4X3J1bnRpbWUiLCJTeF9wcmltaXRpdmVzIiwiU3RkbGliX1ByaW50ZiIsIlN4X3JlZiIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQXJyYXkiLCJTeF9wYXJzZXIiLCJTdGRsaWJfUHJpbnRleGMiLCJWbVN1c3BlbmRlZCIsIkludmFsaWRfb3Bjb2RlIiwiZXhuIiwicmVxdWVzdCIsImppdF9jb21waWxlX3JlZiIsInBhcmFtIiwiZXh0ZW5zaW9uX2Rpc3BhdGNoX3JlZiIsIm9wIiwidm0iLCJmcmFtZSIsImV4dGVuc2lvbl9vcGNvZGVfbmFtZV9yZWYiLCJqaXRfZmFpbGVkX3NlbnRpbmVsIiwiaXNfaml0X2ZhaWxlZCIsImNsIiwiY3JlYXRlIiwiZ2xvYmFscyIsInB1c2giLCJ2IiwibnMiLCJwb3AiLCJwZWVrIiwicmVhZF91OCIsInJlYWRfdTE2IiwibG8iLCJoaSIsInJlYWRfaTE2IiwiY2xvc3VyZV90b192YWx1ZSIsIm1hdGNoIiwiYXJncyIsIm4iLCJwYXJzZV9rZXl3b3JkX2FyZ3MiLCJwYXJhbXMiLCJwYXJhbV9zZXQiLCJwIiwia3dhcmdzIiwiY2hpbGRyZW4iLCJrIiwicmVzdCIsInZtX2NvbXBfaml0X2NvdW50Iiwidm1fY29tcF9jZWtfY291bnQiLCJ2bV9pbnNuX2NvdW50Iiwidm1fY2FsbF9jb3VudCIsInZtX2Nla19jb3VudCIsInZtX3Jlc2V0X2NvdW50ZXJzIiwidm1fcmVwb3J0X2NvdW50ZXJzIiwicHVzaF9jbG9zdXJlX2ZyYW1lIiwicmVzdF9hcml0eSIsIm5hcmdzIiwiaSIsInJlbWFpbmluZyIsImEiLCJmb3IkIiwidXNlZCIsImNzdF9hcml0eSIsImNzdF9ieXRlY29kZSIsImNzdF9jb25zdGFudHMiLCJjc3RfdmNfYnl0ZWNvZGUiLCJjb2RlX2Zyb21fdmFsdWUiLCJkIiwiZmluZDIiLCJrMSIsImsyIiwiciIsImwiLCJ4IiwiYmNfbGlzdCIsImVudHJpZXMiLCJjb25zdGFudHMiLCJlbnRyeSIsImVkIiwiYXJpdHkiLCJsZW4iLCJtYXhfbG9jYWwiLCJsb2NhbHMiLCJzbG90IiwiY3N0IiwiY3N0X0pJVF9jb21waWxlcl9ub3RfbG9hZGVkIiwiY3N0X2NvbXBpbGUiLCJjc3RfZm4iLCJjc3RfcXVvdGUiLCJqaXRfY29tcGlsZV9jb21wIiwibmFtZSIsImhhc19jaGlsZHJlbiIsImJvZHkiLCJjbG9zdXJlIiwicGFyYW1fbmFtZXMiLCJwYXJhbV9zeW1zIiwicyIsImZuX2V4cHIiLCJjb21waWxlX2VudiIsInJlc3VsdCIsIm91dGVyX2NvZGUiLCJiYyIsImlkeCIsImlubmVyX3ZhbCIsImNvZGUiLCJlIiwiY3N0X2lvX3N1c3BlbmRlZCIsImNzdF9waGFzZSIsImNzdF9yZXF1ZXN0IiwiYWN0aXZlX3ZtIiwiY2VrX2NhbGxfb3Jfc3VzcGVuZCIsInNhdmVkX2FjdGl2ZSIsInN0YXRlIiwiZmluYWwiLCJjYWxsX2Nsb3N1cmUiLCJwcmV2X3ZtIiwiY2FsbF9jbG9zdXJlX3JldXNlIiwic2F2ZWRfc3AiLCJzYXZlZF9mcmFtZXMiLCJyZXEiLCJyZXNvbHZlciIsInNhdmVkX3JldXNlIiwiY2IiLCJyZXEyIiwidm1fY2FsbCIsImV2X2wiLCJjIiwiY29tcGlsZWQiLCJjYWxsX2FyZ3MiLCJmbiIsImNzdF9iYXNlIiwiY3N0X2F0X2lwIiwiY3N0X3NwIiwiY3N0X1ZNX3VuZGVmaW5lZCIsImNzdF9WTV91bmtub3duX3ByaW1pdGl2ZSIsImNzdF91cHZhbHVlX2NvdW50IiwicnVuIiwicmVzdF9mcmFtZXMiLCJjb25zdHMiLCJmbl9uYW1lIiwic2F2ZWRfaXAiLCJzd2l0Y2hlciIsImNvdW50IiwicGFydHMiLCJiIiwieSIsInhzIiwiY29sbCIsImNlbGwiLCJpZCIsImVudiIsImZvdW5kX2luX2VudiIsInJlc29sdmVfZm4iLCJ3cml0dGVuIiwib2Zmc2V0IiwiY2F0Y2hfb2Zmc2V0IiwiZXhuX3ZhbCIsImZzIiwiYXJnYyIsImFyZ3NfbGlzdCIsImNvZGVfdmFsIiwidXZfY291bnQiLCJ1cHZhbHVlcyIsImlzX2xvY2FsIiwiaW5kZXgiLCJleGlzdGluZyIsImZuX3ZhbCIsIm1zZyIsIml0ZW1zIiwia2V5IiwicmVzdW1lX3ZtIiwicHJldl9hY3RpdmUiLCJyZXN0b3JlIiwiY2VrX3N0YXRlIiwicmVzdG9yZV9yZXVzZSIsInBlbmRpbmciLCJjYWxsYmFja19yZXN1bHQiLCJuZXdfcGVuZGluZyIsImV4ZWN1dGVfbW9kdWxlIiwiZXhlY3V0ZV9tb2R1bGVfc2FmZSIsImppdF9pc19icm9rZW5fbmFtZSIsImJ5dGVjb2RlX2ZpbmRfb3Bjb2RlIiwicHJlZCIsImZvdW5kIiwiaXAiLCJleHRyYSIsImJ5dGVjb2RlX3VzZXNfZXh0ZW5zaW9uX29wY29kZSIsImNvZGVfdXNlc19oYW5kbGVyIiwiY29kZV9yZWZzX2VzY2FwaW5nX2NhbGxlciIsImNzdF9qaXRfRkFJTCIsImNzdF9qaXRfU0tJUCIsImppdF9jb21waWxpbmciLCJqaXRfY29tcGlsZV9sYW1iZGEiLCJjb21waWxlX2ZuIiwibWVyZ2VkIiwiZWZmZWN0aXZlX2dsb2JhbHMiLCJ2YWx1ZSIsInNhdmVkX2NlayIsImV4bjIiLCJtYXJrZXIiLCJzdXNwZW5kZWRfc3RhdGUiLCJhY3RpdmUiLCJvcGNvZGVfbmFtZSIsIm9wY29kZV9vcGVyYW5kX3NpemUiLCJjc3Rfb3Bjb2RlIiwidHJhY2VfcnVuIiwic3JjIiwiZXhwcnMiLCJleHByIiwicXVvdGVkIiwiZnJhbWUwIiwidHJhY2UiLCJzdGVwcyIsInN0YWNrX3NuYXAiLCJjb2RlX3ZhbDIiLCJpbm5lcl9jb2RlIiwiZGlzYXNzZW1ibGUiLCJpbnN0cnMiLCJvcGVyYW5kcyIsInByaW1fbmFtZSIsInJhdyIsInNpZ25lZCIsImNvbnN0X3N0ciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBTixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQVIsR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUUsSUFBQUU7QUFB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QWxDLE9BQUE7QUFBQTtBQUFBLFFBQUF4SixLQUNXO0FBQUEsWUFBWTtBQUFBLFFBQUFDLEtBQVM7QUFBQSxRQUFBcUUsTUFDOUI7QUFBQSxRQUFBa0YsT0FDQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLGFBQ3dCO0FBQUEsU0FBQXNDLFlBQWpCO0FBQUE7QUFBQSxZQUFBQSxZQURQO0FBQUEsV0FBQUosYUFFc0MsdUNBQUFsQyxPQUFBO0FBQUE7QUFBQTtBQUFBLE1BdUJ4QztBQUFBO0FBQUEsUUFBQTlKLElBQ1U7QUFBQSxRQUFBZ00sYUFzQlo7QUFBQSxRQUFBbEMsT0FBQTtBQUFBO0FBQUEsV0FBQWtDLGFBdkJFLFVBQUFsQyxPQUFBO0FBQUE7QUFBQSxTQUFBM0csUUF1QlU7QUFBQSxLQUNaO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUFpRDtBQUFBO0FBQUE7QUFBQSxRQUFBc0IsU0FHdEM7QUFBQSxJQUNiO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQSxPQUN3RDtBQUFBLHdCQUFBekUsR0FBNEIsdUNBQW9CO0FBQUEsU0FBL0Q7QUFBQSxJQUF6QztBQUFBLFlBQ3dDO0FBQUEsSUFBeEM7QUFBQSxJQUEyRDtBQUFBLEdBQ2hEO0FBQUEsR0F6bER1RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHZGcEYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3MDQ0MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfdm1fcmVmLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogc3hfdm1fcmVmLm1sIOKAlCBBdXRvLWdlbmVyYXRlZCBmcm9tIGxpYi92bS5zeCAqKVxuKCogRG8gbm90IGVkaXQg4oCUIHJlZ2VuZXJhdGUgd2l0aDogcHl0aG9uMyBob3N0cy9vY2FtbC9ib290c3RyYXBfdm0ucHkgKilcblxuW0BAQHdhcm5pbmcgXCItMjYtMjctMzlcIl1cblxub3BlbiBTeF90eXBlc1xub3BlbiBTeF9ydW50aW1lXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZvcndhcmQgcmVmZXJlbmNlcyBmb3IgQ0VLIGludGVyb3BcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGNla19jYWxsID0gU3hfcmVmLmNla19jYWxsXG5sZXQgZXZhbF9leHByID0gU3hfcmVmLmV2YWxfZXhwclxubGV0IHRyYW1wb2xpbmUgdiA9IG1hdGNoIHYgd2l0aFxuICB8IFRodW5rIChleHByLCBlbnYpIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGVudilcbiAgfCBvdGhlciAtPiBvdGhlclxuXG4oKiBTWCBMaXN0IOKGkiBPQ2FtbCBsaXN0ICopXG5sZXQgdG9fb2NhbWxfbGlzdCB2ID0gbWF0Y2ggdiB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgXyAtPiBbdl1cblxuKCogc3RyIGFzIE5hdGl2ZUZuIHZhbHVlIOKAlCB0cmFuc3BpbGVkIGNvZGUgcGFzc2VzIGl0IHRvIHN4X2FwcGx5ICopXG5sZXQgc3RyID0gTmF0aXZlRm4gKFwic3RyXCIsIGZ1biBhcmdzIC0+IFN0cmluZyAoc3hfc3RyIGFyZ3MpKVxuXG4oKiBQcmltaXRpdmUgY2FsbCBkaXNwYXRjaCDigJQgdHJhbnNwaWxlZCBjb2RlIHVzZXMgdGhpcyBmb3IgQ0FMTF9QUklNICopXG5sZXQgY2FsbF9wcmltaXRpdmUgbmFtZSBhcmdzID1cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBwcmltX2NhbGwgbiAodG9fb2NhbWxfbGlzdCBhcmdzKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQcmVhbWJsZTogNDggbmF0aXZlIE9DYW1sIGZ1bmN0aW9ucyBmb3IgVk0gdHlwZSBhY2Nlc3MuXG4gICBUaGVzZSBhcmUgU0tJUFBFRCBmcm9tIHRyYW5zcGlsYXRpb24g4oCUIHRoZSB0cmFuc3BpbGVkIGxvZ2ljXG4gICBmdW5jdGlvbnMgY2FsbCB0aGVtIGZvciBhbGwgdHlwZSBjb25zdHJ1Y3Rpb24gYW5kIGZpZWxkIGFjY2Vzcy5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCogLS0tIFVud3JhcCBoZWxwZXJzIC0tLSAqKVxubGV0IHVud3JhcF92bSB2ID0gbWF0Y2ggdiB3aXRoIFZtTWFjaGluZSBtIC0+IG0gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgdm1cIilcbmxldCB1bndyYXBfZnJhbWUgdiA9IG1hdGNoIHYgd2l0aCBWbUZyYW1lIGYgLT4gZiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBmcmFtZVwiKVxubGV0IHVud3JhcF9jbG9zdXJlIHYgPSBtYXRjaCB2IHdpdGggVm1DbG9zdXJlIGMgLT4gYyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBjbG9zdXJlXCIpXG5cbigqIC0tLSBVcHZhbHVlIGNlbGxzIChpbnRlcm5hbCB0byBwcmVhbWJsZSDigJQgbmV2ZXIgU1ggdmFsdWVzKSAtLS0gKilcbmxldCBfbWFrZV91dl9jZWxsIHYgOiB2bV91cHZhbHVlX2NlbGwgPSB7IHV2X3ZhbHVlID0gdiB9XG5sZXQgX3V2X2dldCAoYyA6IHZtX3VwdmFsdWVfY2VsbCkgPSBjLnV2X3ZhbHVlXG5sZXQgX3V2X3NldCAoYyA6IHZtX3VwdmFsdWVfY2VsbCkgdiA9IGMudXZfdmFsdWUgPC0gdlxuXG4oKiBTWC1mYWNpbmcgc3R1YnMgKGluIHNraXAgc2V0LCBuZXZlciBjYWxsZWQgZnJvbSB0cmFuc3BpbGVkIGNvZGUpICopXG5sZXQgbWFrZV91cHZhbHVlX2NlbGwgdiA9IE5pbFxubGV0IHV2X2dldCBfID0gTmlsXG5sZXQgdXZfc2V0X2IgXyBfID0gTmlsXG5cbigqIC0tLSBWTSBjb2RlIGNvbnN0cnVjdGlvbiAtLS0gKilcbmxldCBjb2RlX2Zyb21fdmFsdWUgdiA9IFN4X3ZtLmNvZGVfZnJvbV92YWx1ZSB2XG5cbmxldCBtYWtlX3ZtX2NvZGUgYXJpdHkgbG9jYWxzIGJ5dGVjb2RlIGNvbnN0YW50cyA9XG4gICgqIEJ1aWxkIGEgRGljdCB0aGF0IGNvZGVfZnJvbV92YWx1ZSBjYW4gcGFyc2UgKilcbiAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSBkIFwiYXJpdHlcIiBhcml0eTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJieXRlY29kZVwiIGJ5dGVjb2RlO1xuICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN0YW50c1wiIGNvbnN0YW50cztcbiAgRGljdCBkXG5cbigqIC0tLSBWTSBjbG9zdXJlIC0tLSAqKVxubGV0IG1ha2Vfdm1fY2xvc3VyZSBjb2RlIHVwdmFsdWVzIG5hbWUgZ2xvYmFscyBjbG9zdXJlX2VudiA9XG4gIGxldCB1diA9IG1hdGNoIHVwdmFsdWVzIHdpdGhcbiAgICB8IExpc3QgbCAtPiBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHYgLT4geyB1dl92YWx1ZSA9IHYgfSkgbClcbiAgICB8IF8gLT4gW3x8XSBpblxuICBWbUNsb3N1cmUgeyB2bV9jb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGU7XG4gICAgICAgICAgICAgIHZtX3VwdmFsdWVzID0gdXY7XG4gICAgICAgICAgICAgIHZtX25hbWUgPSAobWF0Y2ggbmFtZSB3aXRoIFN0cmluZyBzIC0+IFNvbWUgcyB8IE5pbCAtPiBOb25lIHwgXyAtPiBOb25lKTtcbiAgICAgICAgICAgICAgdm1fZW52X3JlZiA9IChtYXRjaCBnbG9iYWxzIHdpdGggRGljdCBkIC0+IGQgfCBfIC0+IEhhc2h0YmwuY3JlYXRlIDApO1xuICAgICAgICAgICAgICB2bV9jbG9zdXJlX2VudiA9IChtYXRjaCBjbG9zdXJlX2VudiB3aXRoIEVudiBlIC0+IFNvbWUgZSB8IF8gLT4gTm9uZSkgfVxuXG4oKiAtLS0gVk0gZnJhbWUgLS0tICopXG5sZXQgbWFrZV92bV9mcmFtZSBjbG9zdXJlIGJhc2UgPVxuICBsZXQgY2wgPSB1bndyYXBfY2xvc3VyZSBjbG9zdXJlIGluXG4gIFZtRnJhbWUgeyB2Zl9jbG9zdXJlID0gY2w7IHZmX2lwID0gMDtcbiAgICAgICAgICAgIHZmX2Jhc2UgPSB2YWxfdG9faW50IGJhc2U7XG4gICAgICAgICAgICB2Zl9sb2NhbF9jZWxscyA9IEhhc2h0YmwuY3JlYXRlIDQgfVxuXG4oKiAtLS0gVk0gbWFjaGluZSAtLS0gKilcbmxldCBtYWtlX3ZtIGdsb2JhbHMgPVxuICBsZXQgZyA9IG1hdGNoIGdsb2JhbHMgd2l0aCBEaWN0IGQgLT4gZCB8IF8gLT4gSGFzaHRibC5jcmVhdGUgMCBpblxuICBWbU1hY2hpbmUgeyB2bV9zdGFjayA9IEFycmF5Lm1ha2UgNDA5NiBOaWw7IHZtX3NwID0gMDtcbiAgICAgICAgICAgICAgdm1fZnJhbWVzID0gW107IHZtX2dsb2JhbHMgPSBnOyB2bV9wZW5kaW5nX2NlayA9IE5vbmUgfVxuXG4oKiAtLS0gU3RhY2sgb3BzIC0tLSAqKVxubGV0IHZtX3B1c2ggdm1fdmFsIHYgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgaWYgbS52bV9zcCA+PSBBcnJheS5sZW5ndGggbS52bV9zdGFjayB0aGVuIGJlZ2luXG4gICAgbGV0IG5zID0gQXJyYXkubWFrZSAobS52bV9zcCAqIDIpIE5pbCBpblxuICAgIEFycmF5LmJsaXQgbS52bV9zdGFjayAwIG5zIDAgbS52bV9zcDtcbiAgICBtLnZtX3N0YWNrIDwtIG5zXG4gIGVuZDtcbiAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gdjtcbiAgbS52bV9zcCA8LSBtLnZtX3NwICsgMTtcbiAgTmlsXG5cbmxldCB2bV9wb3Agdm1fdmFsID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIG0udm1fc3AgPC0gbS52bV9zcCAtIDE7XG4gIG0udm1fc3RhY2suKG0udm1fc3ApXG5cbmxldCB2bV9wZWVrIHZtX3ZhbCA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBtLnZtX3N0YWNrLihtLnZtX3NwIC0gMSlcblxuKCogLS0tIEZyYW1lIG9wZXJhbmQgcmVhZGluZyAtLS0gKilcbmxldCBmcmFtZV9yZWFkX3U4IGZyYW1lX3ZhbCA9XG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgdiA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpblxuICBmLnZmX2lwIDwtIGYudmZfaXAgKyAxO1xuICBOdW1iZXIgKGZsb2F0X29mX2ludCB2KVxuXG5sZXQgZnJhbWVfcmVhZF91MTYgZnJhbWVfdmFsID1cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGxldCBsbyA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpblxuICBsZXQgaGkgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCArIDEpIGluXG4gIGYudmZfaXAgPC0gZi52Zl9pcCArIDI7XG4gIE51bWJlciAoZmxvYXRfb2ZfaW50IChsbyBsb3IgKGhpIGxzbCA4KSkpXG5cbmxldCBmcmFtZV9yZWFkX2kxNiBmcmFtZV92YWwgPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IGxvID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXApIGluXG4gIGxldCBoaSA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwICsgMSkgaW5cbiAgZi52Zl9pcCA8LSBmLnZmX2lwICsgMjtcbiAgbGV0IHYgPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICBOdW1iZXIgKGZsb2F0X29mX2ludCAoaWYgdiA+PSAzMjc2OCB0aGVuIHYgLSA2NTUzNiBlbHNlIHYpKVxuXG4oKiAtLS0gTG9jYWwgdmFyaWFibGUgYWNjZXNzIC0tLSAqKVxubGV0IGZyYW1lX2xvY2FsX2dldCB2bV92YWwgZnJhbWVfdmFsIHNsb3QgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGxldCBpZHggPSBmLnZmX2Jhc2UgKyB2YWxfdG9faW50IHNsb3QgaW5cbiAgKCogQ2hlY2sgZm9yIHNoYXJlZCB1cHZhbHVlIGNlbGwgKilcbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmLnZmX2xvY2FsX2NlbGxzICh2YWxfdG9faW50IHNsb3QpIHdpdGhcbiAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZVxuICB8IE5vbmUgLT4gbS52bV9zdGFjay4oaWR4KVxuXG5sZXQgZnJhbWVfbG9jYWxfc2V0IHZtX3ZhbCBmcmFtZV92YWwgc2xvdCB2ID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgcyA9IHZhbF90b19pbnQgc2xvdCBpblxuICAoKiBJZiBzbG90IGhhcyBhIHNoYXJlZCBjZWxsLCB3cml0ZSB0aHJvdWdoIGNlbGwgKilcbiAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZi52Zl9sb2NhbF9jZWxscyBzIHdpdGhcbiAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWUgPC0gdlxuICAgfCBOb25lIC0+IG0udm1fc3RhY2suKGYudmZfYmFzZSArIHMpIDwtIHYpO1xuICBOaWxcblxuKCogLS0tIFVwdmFsdWUgYWNjZXNzIC0tLSAqKVxubGV0IGZyYW1lX3VwdmFsdWVfZ2V0IGZyYW1lX3ZhbCBpZHggPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgZi52Zl9jbG9zdXJlLnZtX3VwdmFsdWVzLih2YWxfdG9faW50IGlkeCkudXZfdmFsdWVcblxubGV0IGZyYW1lX3VwdmFsdWVfc2V0IGZyYW1lX3ZhbCBpZHggdiA9XG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBmLnZmX2Nsb3N1cmUudm1fdXB2YWx1ZXMuKHZhbF90b19pbnQgaWR4KS51dl92YWx1ZSA8LSB2O1xuICBOaWxcblxuKCogLS0tIEZpZWxkIGFjY2Vzc29ycyAtLS0gKilcbmxldCBmcmFtZV9pcCBmID0gbGV0IGZyID0gdW53cmFwX2ZyYW1lIGYgaW4gTnVtYmVyIChmbG9hdF9vZl9pbnQgZnIudmZfaXApXG5sZXQgZnJhbWVfc2V0X2lwX2IgZiB2ID0gbGV0IGZyID0gdW53cmFwX2ZyYW1lIGYgaW4gZnIudmZfaXAgPC0gdmFsX3RvX2ludCB2OyBOaWxcbmxldCBmcmFtZV9iYXNlIGYgPSBsZXQgZnIgPSB1bndyYXBfZnJhbWUgZiBpbiBOdW1iZXIgKGZsb2F0X29mX2ludCBmci52Zl9iYXNlKVxubGV0IGZyYW1lX2Nsb3N1cmUgZiA9IGxldCBmciA9IHVud3JhcF9mcmFtZSBmIGluIFZtQ2xvc3VyZSBmci52Zl9jbG9zdXJlXG5cbmxldCBjbG9zdXJlX2NvZGUgY2wgPSBsZXQgYyA9IHVud3JhcF9jbG9zdXJlIGNsIGluXG4gICgqIFJldHVybiBhcyBEaWN0IGZvciBjb2RlX2J5dGVjb2RlL2NvZGVfY29uc3RhbnRzL2NvZGVfbG9jYWxzICopXG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWJ5dGVjb2RlXCIgKExpc3QgKEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIGkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkpIGMudm1fY29kZS52Y19ieXRlY29kZSkpKTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1jb25zdGFudHNcIiAoTGlzdCAoQXJyYXkudG9fbGlzdCBjLnZtX2NvZGUudmNfY29uc3RhbnRzKSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtYXJpdHlcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgYy52bV9jb2RlLnZjX2FyaXR5KSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtbG9jYWxzXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudm1fY29kZS52Y19sb2NhbHMpKTtcbiAgRGljdCBkXG5cbmxldCBjbG9zdXJlX3VwdmFsdWVzIGNsID0gbGV0IGMgPSB1bndyYXBfY2xvc3VyZSBjbCBpblxuICBMaXN0IChBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biBjZWxsIC0+IGNlbGwudXZfdmFsdWUpIGMudm1fdXB2YWx1ZXMpKVxuXG5sZXQgY2xvc3VyZV9lbnYgY2wgPSBtYXRjaCBjbCB3aXRoXG4gIHwgVm1DbG9zdXJlIGMgLT4gKG1hdGNoIGMudm1fY2xvc3VyZV9lbnYgd2l0aCBTb21lIGUgLT4gRW52IGUgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxuXG5sZXQgY29kZV9ieXRlY29kZSBjb2RlID0gZ2V0X3ZhbCBjb2RlIChTdHJpbmcgXCJ2Yy1ieXRlY29kZVwiKVxubGV0IGNvZGVfY29uc3RhbnRzIGNvZGUgPSBnZXRfdmFsIGNvZGUgKFN0cmluZyBcInZjLWNvbnN0YW50c1wiKVxubGV0IGNvZGVfbG9jYWxzIGNvZGUgPSBnZXRfdmFsIGNvZGUgKFN0cmluZyBcInZjLWxvY2Fsc1wiKVxuXG5sZXQgdm1fc3AgdiA9IGxldCBtID0gdW53cmFwX3ZtIHYgaW4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbS52bV9zcClcbmxldCB2bV9zZXRfc3BfYiB2IHMgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluIG0udm1fc3AgPC0gdmFsX3RvX2ludCBzOyBOaWxcbmxldCB2bV9zdGFjayB2ID0gbGV0IF9tID0gdW53cmFwX3ZtIHYgaW4gTmlsICAoKiBvcGFxdWUg4oCUIHVzZSB2bV9wdXNoL3BvcCAqKVxubGV0IHZtX3NldF9zdGFja19iIHYgX3MgPSBOaWxcbmxldCB2bV9mcmFtZXMgdiA9IGxldCBtID0gdW53cmFwX3ZtIHYgaW4gTGlzdCAoTGlzdC5tYXAgKGZ1biBmIC0+IFZtRnJhbWUgZikgbS52bV9mcmFtZXMpXG5sZXQgdm1fc2V0X2ZyYW1lc19iIHYgZnMgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluXG4gIG0udm1fZnJhbWVzIDwtIChtYXRjaCBmcyB3aXRoXG4gICAgfCBMaXN0IGwgLT4gTGlzdC5tYXAgdW53cmFwX2ZyYW1lIGxcbiAgICB8IF8gLT4gW10pO1xuICBOaWxcbmxldCB2bV9nbG9iYWxzX3JlZiB2ID0gbGV0IG0gPSB1bndyYXBfdm0gdiBpbiBEaWN0IG0udm1fZ2xvYmFsc1xuXG4oKiAtLS0gR2xvYmFsIHZhcmlhYmxlIGFjY2VzcyAtLS0gKilcbmxldCB2bV9nbG9iYWxfZ2V0IHZtX3ZhbCBmcmFtZV92YWwgbmFtZSA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZyBuYW1lIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICAoKiBDaGVjayBjbG9zdXJlIGVudiBmaXJzdCAobWF0Y2hlcyB2bV9nbG9iYWxfc2V0IHByaW9yaXR5KSAqKVxuICBsZXQgZm91bmRfaW5fZW52ID0gbWF0Y2ggZi52Zl9jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IHdpdGhcbiAgICB8IFNvbWUgZW52IC0+XG4gICAgICBsZXQgaWQgPSBpbnRlcm4gbiBpblxuICAgICAgbGV0IHJlYyBmaW5kX2VudiBlID1cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBlLmJpbmRpbmdzIGlkIHdpdGhcbiAgICAgICAgfCBTb21lIHYgLT4gU29tZSB2XG4gICAgICAgIHwgTm9uZSAtPiAobWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZF9lbnYgcCB8IE5vbmUgLT4gTm9uZSlcbiAgICAgIGluIGZpbmRfZW52IGVudlxuICAgIHwgTm9uZSAtPiBOb25lXG4gIGluXG4gIG1hdGNoIGZvdW5kX2luX2VudiB3aXRoXG4gIHwgU29tZSB2IC0+IHZcbiAgfCBOb25lIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBtLnZtX2dsb2JhbHMgbiB3aXRoXG4gICAgfCBTb21lIHYgLT4gdlxuICAgIHwgTm9uZSAtPlxuICAgICAgdHJ5IHByaW1fY2FsbCBuIFtdIHdpdGggXyAtPlxuICAgICAgbWF0Y2ggIV9zeW1ib2xfcmVzb2x2ZV9ob29rIHdpdGhcbiAgICAgIHwgU29tZSBob29rIC0+XG4gICAgICAgIChtYXRjaCBob29rIG4gd2l0aFxuICAgICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuKSkpXG4gICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG4pKVxuXG5sZXQgdm1fZ2xvYmFsX3NldCB2bV92YWwgZnJhbWVfdmFsIG5hbWUgdiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZyBuYW1lIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICAoKiBXcml0ZSB0byBjbG9zdXJlIGVudiBpZiBuYW1lIGV4aXN0cyB0aGVyZSAqKVxuICBsZXQgd3JpdHRlbiA9IG1hdGNoIGYudmZfY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgfCBTb21lIGVudiAtPlxuICAgICAgbGV0IGlkID0gaW50ZXJuIG4gaW5cbiAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgIGlmIEhhc2h0YmwubWVtIGUuYmluZGluZ3MgaWQgdGhlblxuICAgICAgICAgIChIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCB2OyB0cnVlKVxuICAgICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmRfZW52IHAgfCBOb25lIC0+IGZhbHNlXG4gICAgICBpbiBmaW5kX2VudiBlbnZcbiAgICB8IE5vbmUgLT4gZmFsc2VcbiAgaW5cbiAgaWYgbm90IHdyaXR0ZW4gdGhlbiBiZWdpblxuICAgIEhhc2h0YmwucmVwbGFjZSBtLnZtX2dsb2JhbHMgbiB2O1xuICAgIChtYXRjaCAhX3ZtX2dsb2JhbF9zZXRfaG9vayB3aXRoIFNvbWUgZiAtPiBmIG4gdiB8IE5vbmUgLT4gKCkpXG4gIGVuZDtcbiAgTmlsXG5cbigqIC0tLSBGcmFtZSBwdXNoIC0tLSAqKVxubGV0IHZtX3B1c2hfZnJhbWUgdm1fdmFsIGNsb3N1cmVfdmFsIGFyZ3MgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IGNsID0gdW53cmFwX2Nsb3N1cmUgY2xvc3VyZV92YWwgaW5cbiAgbGV0IGYgPSB7IHZmX2Nsb3N1cmUgPSBjbDsgdmZfaXAgPSAwOyB2Zl9iYXNlID0gbS52bV9zcDsgdmZfbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgbGV0IGFyZ19saXN0ID0gdG9fb2NhbWxfbGlzdCBhcmdzIGluXG4gIExpc3QuaXRlciAoZnVuIGEgLT5cbiAgICBtLnZtX3N0YWNrLihtLnZtX3NwKSA8LSBhOyBtLnZtX3NwIDwtIG0udm1fc3AgKyAxXG4gICkgYXJnX2xpc3Q7XG4gICgqIFBhZCByZW1haW5pbmcgbG9jYWxzICopXG4gIGZvciBfID0gTGlzdC5sZW5ndGggYXJnX2xpc3QgdG8gY2wudm1fY29kZS52Y19sb2NhbHMgLSAxIGRvXG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gTmlsOyBtLnZtX3NwIDwtIG0udm1fc3AgKyAxXG4gIGRvbmU7XG4gIG0udm1fZnJhbWVzIDwtIGYgOjogbS52bV9mcmFtZXM7XG4gIE5pbFxuXG4oKiAtLS0gQ2xvc3VyZSB0eXBlIGNoZWNrIC0tLSAqKVxubGV0IHZtX2Nsb3N1cmVfcCB2ID0gbWF0Y2ggdiB3aXRoIFZtQ2xvc3VyZSBfIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiAtLS0gQ2xvc3VyZSBjcmVhdGlvbiAodXB2YWx1ZSBjYXB0dXJlKSAtLS0gKilcbmxldCB2bV9jcmVhdGVfY2xvc3VyZSB2bV92YWwgZnJhbWVfdmFsIGNvZGVfdmFsID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb2RlX3ZhbCB3aXRoXG4gICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgIHwgU29tZSAoSW50ZWdlciBuKSAtPiBuXG4gICAgICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuXG4gICAgICAgIHwgXyAtPiAwKVxuICAgIHwgXyAtPiAwXG4gIGluXG4gIGxldCB1cHZhbHVlcyA9IEFycmF5LmluaXQgdXZfY291bnQgKGZ1biBfIC0+XG4gICAgbGV0IGlzX2xvY2FsID0gbGV0IHYgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCkgaW4gZi52Zl9pcCA8LSBmLnZmX2lwICsgMTsgdiBpblxuICAgIGxldCBpbmRleCA9IGxldCB2ID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXApIGluIGYudmZfaXAgPC0gZi52Zl9pcCArIDE7IHYgaW5cbiAgICBpZiBpc19sb2NhbCA9IDEgdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmLnZmX2xvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgIHwgU29tZSBleGlzdGluZyAtPiBleGlzdGluZ1xuICAgICAgfCBOb25lIC0+XG4gICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IG0udm1fc3RhY2suKGYudmZfYmFzZSArIGluZGV4KSB9IGluXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBmLnZmX2xvY2FsX2NlbGxzIGluZGV4IGM7XG4gICAgICAgIGNcbiAgICBlbmQgZWxzZVxuICAgICAgZi52Zl9jbG9zdXJlLnZtX3VwdmFsdWVzLihpbmRleClcbiAgKSBpblxuICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICBWbUNsb3N1cmUgeyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSB1cHZhbHVlczsgdm1fbmFtZSA9IE5vbmU7XG4gICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBtLnZtX2dsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gZi52Zl9jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IH1cblxuKCogLS0tIEpJVCBzZW50aW5lbCAtLS0gKilcbmxldCBfaml0X2ZhaWxlZF9zZW50aW5lbCA9IHtcbiAgdm1fY29kZSA9IHsgdmNfYXJpdHkgPSAtMTsgdmNfcmVzdF9hcml0eSA9IC0xOyB2Y19sb2NhbHMgPSAwOyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF07XG4gICAgICAgICAgICAgIHZjX2J5dGVjb2RlX2xpc3QgPSBOb25lOyB2Y19jb25zdGFudHNfbGlzdCA9IE5vbmUgfTtcbiAgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcIl9faml0X2ZhaWxlZF9fXCI7IHZtX2Vudl9yZWYgPSBIYXNodGJsLmNyZWF0ZSAwOyB2bV9jbG9zdXJlX2VudiA9IE5vbmVcbn1cbmxldCBfaXNfaml0X2ZhaWxlZCBjbCA9IGNsLnZtX2NvZGUudmNfYXJpdHkgPSAtMVxuXG4oKiAtLS0gTGFtYmRhIGFjY2Vzc29ycyAtLS0gKilcbmxldCBpc19sYW1iZGEgdiA9IG1hdGNoIHYgd2l0aCBMYW1iZGEgXyAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcbmxldCBsYW1iZGFfY29tcGlsZWQgdiA9IG1hdGNoIHYgd2l0aFxuICB8IExhbWJkYSBsIC0+IChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aCBTb21lIGMgLT4gVm1DbG9zdXJlIGMgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxubGV0IGxhbWJkYV9zZXRfY29tcGlsZWRfYiB2IGMgPSBtYXRjaCB2IHdpdGhcbiAgfCBMYW1iZGEgbCAtPiAobWF0Y2ggYyB3aXRoXG4gICAgfCBWbUNsb3N1cmUgY2wgLT4gbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7IE5pbFxuICAgIHwgU3RyaW5nIFwiaml0LWZhaWxlZFwiIC0+IGwubF9jb21waWxlZCA8LSBTb21lIF9qaXRfZmFpbGVkX3NlbnRpbmVsOyBOaWxcbiAgICB8IF8gLT4gbC5sX2NvbXBpbGVkIDwtIE5vbmU7IE5pbClcbiAgfCBfIC0+IE5pbFxubGV0IGxhbWJkYV9uYW1lIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBMYW1iZGEgbCAtPiAobWF0Y2ggbC5sX25hbWUgd2l0aCBTb21lIG4gLT4gU3RyaW5nIG4gfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxuXG4oKiAtLS0gQ0VLIGNhbGwgd2l0aCBzdXNwZW5zaW9uIGF3YXJlbmVzcyAtLS0gKilcbmxldCBjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MgPVxuICBsZXQgYSA9IHRvX29jYW1sX2xpc3QgYXJncyBpblxuICBsZXQgc3RhdGUgPSBTeF9yZWYuY29udGludWVfd2l0aF9jYWxsIGYgKExpc3QgYSkgKEVudiAoU3hfdHlwZXMubWFrZV9lbnYgKCkpKSAoTGlzdCBhKSAoTGlzdCBbXSkgaW5cbiAgbGV0IGZpbmFsID0gU3hfcmVmLmNla19zdGVwX2xvb3Agc3RhdGUgaW5cbiAgbWF0Y2ggZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicGhhc2VcIikgd2l0aFxuICB8IFN0cmluZyBcImlvLXN1c3BlbmRlZFwiIC0+XG4gICAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gICAgbS52bV9wZW5kaW5nX2NlayA8LSBTb21lIGZpbmFsO1xuICAgIHJhaXNlIChTeF92bS5WbVN1c3BlbmRlZCAoZ2V0X3ZhbCBmaW5hbCAoU3RyaW5nIFwicmVxdWVzdFwiKSwgU3hfdm0uY3JlYXRlIG0udm1fZ2xvYmFscykpXG4gIHwgXyAtPiBTeF9yZWYuY2VrX3ZhbHVlIGZpbmFsXG5cbigqIC0tLSBFbnYgd2Fsa2luZyAoZm9yIGdsb2JhbCB2YXJpYWJsZSByZXNvbHV0aW9uKSAtLS0gKilcbmxldCByZWMgZW52X3dhbGsgZW52IG5hbWUgPVxuICBtYXRjaCBlbnYgd2l0aFxuICB8IEVudiBlIC0+XG4gICAgbGV0IGlkID0gaW50ZXJuICh2YWx1ZV90b19zdHJpbmcgbmFtZSkgaW5cbiAgICBsZXQgcmVjIGZpbmQgZSA9XG4gICAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGUuYmluZGluZ3MgaWQgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgfCBOb25lIC0+IChtYXRjaCBlLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBmaW5kIHAgfCBOb25lIC0+IE5pbClcbiAgICBpbiBmaW5kIGVcbiAgfCBOaWwgLT4gTmlsXG4gIHwgXyAtPiBOaWxcblxubGV0IGVudl93YWxrX3NldF9iIGVudiBuYW1lIHZhbHVlID1cbiAgbWF0Y2ggZW52IHdpdGhcbiAgfCBFbnYgZSAtPlxuICAgIGxldCBpZCA9IGludGVybiAodmFsdWVfdG9fc3RyaW5nIG5hbWUpIGluXG4gICAgbGV0IHJlYyBmaW5kIGUgPVxuICAgICAgaWYgSGFzaHRibC5tZW0gZS5iaW5kaW5ncyBpZCB0aGVuXG4gICAgICAgIChIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCB2YWx1ZTsgdHJ1ZSlcbiAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZCBwIHwgTm9uZSAtPiBmYWxzZVxuICAgIGluXG4gICAgaWYgZmluZCBlIHRoZW4gTmlsIGVsc2UgTmlsXG4gIHwgXyAtPiBOaWxcblxuKCogLS0tIEFjdGl2ZSBWTSB0cmFja2luZyAobW9kdWxlLWxldmVsIG11dGFibGUgc3RhdGUpIC0tLSAqKVxubGV0IF9hY3RpdmVfdm0gOiB2bV9tYWNoaW5lIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBGb3J3YXJkIHJlZiDigJQgcmVzb2x2ZWQgYWZ0ZXIgdHJhbnNwaWxlZCBsZXQgcmVjIGJsb2NrICopXG5sZXQgX3ZtX3J1bl9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gXyAtPiBOaWwpXG5sZXQgX3ZtX2NhbGxfZm4gOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gXyBfIC0+IE5pbClcblxuKCogdm0tY2FsbC1jbG9zdXJlOiBjcmVhdGVzIGZyZXNoIFZNLCBydW5zIGNsb3N1cmUsIHJldHVybnMgcmVzdWx0ICopXG5sZXQgdm1fY2FsbF9jbG9zdXJlIGNsb3N1cmVfdmFsIGFyZ3MgZ2xvYmFscyA9XG4gIGxldCBjbCA9IHVud3JhcF9jbG9zdXJlIGNsb3N1cmVfdmFsIGluXG4gIGxldCBwcmV2X3ZtID0gIV9hY3RpdmVfdm0gaW5cbiAgbGV0IGcgPSBtYXRjaCBnbG9iYWxzIHdpdGggRGljdCBkIC0+IGQgfCBfIC0+IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgbGV0IG0gPSB7IHZtX3N0YWNrID0gQXJyYXkubWFrZSA0MDk2IE5pbDsgdm1fc3AgPSAwO1xuICAgICAgICAgICAgdm1fZnJhbWVzID0gW107IHZtX2dsb2JhbHMgPSBnOyB2bV9wZW5kaW5nX2NlayA9IE5vbmUgfSBpblxuICBsZXQgdm1fdmFsID0gVm1NYWNoaW5lIG0gaW5cbiAgX2FjdGl2ZV92bSA6PSBTb21lIG07XG4gIGlnbm9yZSAodm1fcHVzaF9mcmFtZSB2bV92YWwgY2xvc3VyZV92YWwgYXJncyk7XG4gICh0cnkgaWdub3JlICghX3ZtX3J1bl9mbiB2bV92YWwpIHdpdGggZSAtPiBfYWN0aXZlX3ZtIDo9IHByZXZfdm07IHJhaXNlIGUpO1xuICBfYWN0aXZlX3ZtIDo9IHByZXZfdm07XG4gIHZtX3BvcCB2bV92YWxcblxuKCogLS0tIEpJVCBkaXNwYXRjaCAocGxhdGZvcm0tc3BlY2lmaWMpIC0tLSAqKVxubGV0IHRyeV9qaXRfY2FsbCB2bV92YWwgZiBhcmdzID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIG1hdGNoIGYgd2l0aFxuICB8IExhbWJkYSBsIC0+XG4gICAgKG1hdGNoIGwubF9jb21waWxlZCB3aXRoXG4gICAgIHwgU29tZSBjbCB3aGVuIG5vdCAoX2lzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICAgKHRyeSB2bV9wdXNoIHZtX3ZhbCAodm1fY2FsbF9jbG9zdXJlIChWbUNsb3N1cmUgY2wpIGFyZ3MgKERpY3QgY2wudm1fZW52X3JlZikpXG4gICAgICAgIHdpdGggXyAtPiB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKSlcbiAgICAgfCBTb21lIF8gLT5cbiAgICAgICB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKVxuICAgICB8IE5vbmUgLT5cbiAgICAgICBpZiBsLmxfbmFtZSA8PiBOb25lIHRoZW4gYmVnaW5cbiAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIF9qaXRfZmFpbGVkX3NlbnRpbmVsO1xuICAgICAgICAgbWF0Y2ggIVN4X3ZtLmppdF9jb21waWxlX3JlZiBsIG0udm1fZ2xvYmFscyB3aXRoXG4gICAgICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICh0cnkgdm1fcHVzaCB2bV92YWwgKHZtX2NhbGxfY2xvc3VyZSAoVm1DbG9zdXJlIGNsKSBhcmdzIChEaWN0IGNsLnZtX2Vudl9yZWYpKVxuICAgICAgICAgICAgd2l0aCBfIC0+IHZtX3B1c2ggdm1fdmFsIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MpKVxuICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgIHZtX3B1c2ggdm1fdmFsIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MpXG4gICAgICAgZW5kIGVsc2VcbiAgICAgICAgIHZtX3B1c2ggdm1fdmFsIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MpKVxuICB8IF8gLT4gdm1fcHVzaCB2bV92YWwgKGNla19jYWxsX29yX3N1c3BlbmQgdm1fdmFsIGYgYXJncylcblxuKCogLS0tIENvbGxlY3Rpb24gaGVscGVycyAtLS0gKilcbmxldCBjb2xsZWN0X25fZnJvbV9zdGFjayB2bV92YWwgbiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgY291bnQgPSB2YWxfdG9faW50IG4gaW5cbiAgbGV0IHJlc3VsdCA9IHJlZiBbXSBpblxuICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICAgIHJlc3VsdCA6PSBtLnZtX3N0YWNrLihtLnZtX3NwKSA6OiAhcmVzdWx0XG4gIGRvbmU7XG4gIExpc3QgIXJlc3VsdFxuXG5sZXQgY29sbGVjdF9uX3BhaXJzIHZtX3ZhbCBuID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBjb3VudCA9IHZhbF90b19pbnQgbiBpblxuICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIGNvdW50IGluXG4gIGZvciBfID0gMSB0byBjb3VudCBkb1xuICAgIG0udm1fc3AgPC0gbS52bV9zcCAtIDE7XG4gICAgbGV0IHYgPSBtLnZtX3N0YWNrLihtLnZtX3NwKSBpblxuICAgIG0udm1fc3AgPC0gbS52bV9zcCAtIDE7XG4gICAgbGV0IGsgPSB2YWx1ZV90b19zdHJpbmcgbS52bV9zdGFjay4obS52bV9zcCkgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBrIHZcbiAgZG9uZTtcbiAgRGljdCBkXG5cbmxldCBwYWRfbl9uaWxzIHZtX3ZhbCBuID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBjb3VudCA9IHZhbF90b19pbnQgbiBpblxuICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICBtLnZtX3N0YWNrLihtLnZtX3NwKSA8LSBOaWw7XG4gICAgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICBkb25lO1xuICBOaWxcblxuXG4oKiA9PT0gVHJhbnNwaWxlZCBmcm9tIGxpYi92bS5zeCA9PT0gKilcbigqIHZtLWNhbGwgKilcbmxldCByZWMgdm1fY2FsbCB2bSBmIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgodm1fY2xvc3VyZV9wIChmKSkpIHRoZW4gKHZtX3B1c2hfZnJhbWUgKHZtKSAoZikgKGFyZ3MpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAodHJ5X2ppdF9jYWxsICh2bSkgKGYpIChhcmdzKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmKSk7IChTdHJpbmcgXCJjb21wb25lbnRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGYpKTsgKFN0cmluZyBcImlzbGFuZFwiKV0pKSkgdGhlbiAodm1fcHVzaCAodm0pICgoY2VrX2NhbGxfb3Jfc3VzcGVuZCAodm0pIChmKSAoYXJncykpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfY2FsbGFibGUgKGYpKSkgdGhlbiAodm1fcHVzaCAodm0pICgoc3hfYXBwbHkgZiBhcmdzKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVk06IG5vdCBjYWxsYWJsZTogXCIpOyAodHlwZV9vZiAoZikpXSkpKSkpKSkpKVxuXG4oKiB2bS1yZXNvbHZlLWhvLWZvcm0gKilcbmFuZCB2bV9yZXNvbHZlX2hvX2Zvcm0gdm0gbmFtZSA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBjb2xsXSAtPiAoZnVuIGYgY29sbCAtPiAoTGlzdC5pdGVyIChmdW4geCAtPiBpZ25vcmUgKCh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbeF0pKSkpKSAoc3hfdG9fbGlzdCBjb2xsKTsgTmlsKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGNvbGxdIC0+IChmdW4gZiBjb2xsIC0+IChMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHggLT4gbGV0IGkgPSBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSBpbiAodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW2k7IHhdKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBjb2xsXSAtPiAoZnVuIGYgY29sbCAtPiAoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHN4X3RydXRoeSAoKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFt4XSkpKSkpIChzeF90b19saXN0IGNvbGwpKSkpIGYgY29sbCB8IF8gLT4gTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGluaXQ7IGNvbGxdIC0+IChmdW4gZiBpbml0IGNvbGwgLT4gKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFthY2M7IHhdKSkpKSBpbml0IChzeF90b19saXN0IGNvbGwpKSkgZiBpbml0IGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4geCAtPiBzeF90cnV0aHkgKCh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbeF0pKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImV2ZXJ5P1wiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBjb2xsXSAtPiAoZnVuIGYgY29sbCAtPiAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4geCAtPiBzeF90cnV0aHkgKCh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbeF0pKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVk0gdW5kZWZpbmVkOiBcIik7IG5hbWVdKSkpKSkpKSkpKSkpXG5cbigqIHZtLWNhbGwtZXh0ZXJuYWwgKilcbmFuZCB2bV9jYWxsX2V4dGVybmFsIHZtIGYgYXJncyA9XG4gIChpZiBzeF90cnV0aHkgKCh2bV9jbG9zdXJlX3AgKGYpKSkgdGhlbiAodm1fY2FsbF9jbG9zdXJlIChmKSAoYXJncykgKCh2bV9nbG9iYWxzX3JlZiAodm0pKSkpIGVsc2UgKGNla19jYWxsIChmKSAoYXJncykpKVxuXG4oKiB2bS1ydW4gKilcbmFuZCB2bV9ydW4gdm0gPVxuICAobGV0ICgpID0gaWdub3JlICgoU3RyaW5nIFwiRXhlY3V0ZSBieXRlY29kZSB1bnRpbCBhbGwgZnJhbWVzIGFyZSBjb25zdW1lZC5cIikpIGluIChsZXQgcmVjIGxvb3AgPSAoZnVuICgpIC0+IChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKCh2bV9mcmFtZXMgKHZtKSkpKSkpKSkpIHRoZW4gKGxldCBmcmFtZSA9IChmaXJzdCAoKHZtX2ZyYW1lcyAodm0pKSkpIGluIGxldCByZXN0X2ZyYW1lcyA9IChyZXN0ICgodm1fZnJhbWVzICh2bSkpKSkgaW4gKGxldCBiYyA9IChjb2RlX2J5dGVjb2RlICgoY2xvc3VyZV9jb2RlICgoZnJhbWVfY2xvc3VyZSAoZnJhbWUpKSkpKSkgaW4gbGV0IGNvbnN0cyA9IChjb2RlX2NvbnN0YW50cyAoKGNsb3N1cmVfY29kZSAoKGZyYW1lX2Nsb3N1cmUgKGZyYW1lKSkpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsoZnJhbWVfaXAgKGZyYW1lKSk7IChsZW4gKGJjKSldKSkgdGhlbiAodm1fc2V0X2ZyYW1lc19iICh2bSkgKChMaXN0IFtdKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKHZtX3N0ZXAgKHZtKSAoZnJhbWUpIChyZXN0X2ZyYW1lcykgKGJjKSAoY29uc3RzKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKChnZXQgKCh2bV9nbG9iYWxzX3JlZiAodm0pKSkgKChTdHJpbmcgXCJfX2lvX3JlcXVlc3RcIikpKSkpKSB0aGVuIChsb29wICgpKSBlbHNlIE5pbCkpKSkpIGVsc2UgTmlsKSkgaW4gKGxvb3AgKCkpKSlcblxuKCogdm0tc3RlcCAqKVxuYW5kIHZtX3N0ZXAgdm0gZnJhbWUgcmVzdF9mcmFtZXMgYmMgY29uc3RzID1cbiAgKGxldCBvcCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiAodm1fcHVzaCAodm0pICgobnRoIChjb25zdHMpIChpZHgpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pIChOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDMuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgoQm9vbCB0cnVlKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNC4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChCb29sIGZhbHNlKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNS4wKV0pKSB0aGVuICh2bV9wb3AgKHZtKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA2LjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHZtX3BlZWsgKHZtKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2LjApXSkpIHRoZW4gKGxldCBzbG90ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGZyYW1lX2xvY2FsX2dldCAodm0pIChmcmFtZSkgKHNsb3QpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3LjApXSkpIHRoZW4gKGxldCBzbG90ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gKGZyYW1lX2xvY2FsX3NldCAodm0pIChmcmFtZSkgKHNsb3QpICgodm1fcGVlayAodm0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE4LjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiAodm1fcHVzaCAodm0pICgoZnJhbWVfdXB2YWx1ZV9nZXQgKGZyYW1lKSAoaWR4KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxOS4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gKGZyYW1lX3VwdmFsdWVfc2V0IChmcmFtZSkgKGlkeCkgKCh2bV9wZWVrICh2bSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMjAuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgbmFtZSA9IChudGggKGNvbnN0cykgKGlkeCkpIGluICh2bV9wdXNoICh2bSkgKCh2bV9nbG9iYWxfZ2V0ICh2bSkgKGZyYW1lKSAobmFtZSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMjEuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgbmFtZSA9IChudGggKGNvbnN0cykgKGlkeCkpIGluICh2bV9nbG9iYWxfc2V0ICh2bSkgKGZyYW1lKSAobmFtZSkgKCh2bV9wZWVrICh2bSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMzIuMCldKSkgdGhlbiAobGV0IG9mZnNldCA9IChmcmFtZV9yZWFkX2kxNiAoZnJhbWUpKSBpbiAoZnJhbWVfc2V0X2lwX2IgKGZyYW1lKSAoKHByaW1fY2FsbCBcIitcIiBbKGZyYW1lX2lwIChmcmFtZSkpOyBvZmZzZXRdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDMzLjApXSkpIHRoZW4gKGxldCBvZmZzZXQgPSAoZnJhbWVfcmVhZF9pMTYgKGZyYW1lKSkgaW4gbGV0IHYgPSAodm1fcG9wICh2bSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodikpKSkpIHRoZW4gKGZyYW1lX3NldF9pcF9iIChmcmFtZSkgKChwcmltX2NhbGwgXCIrXCIgWyhmcmFtZV9pcCAoZnJhbWUpKTsgb2Zmc2V0XSkpKSBlbHNlIE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMzQuMCldKSkgdGhlbiAobGV0IG9mZnNldCA9IChmcmFtZV9yZWFkX2kxNiAoZnJhbWUpKSBpbiBsZXQgdiA9ICh2bV9wb3AgKHZtKSkgaW4gKGlmIHN4X3RydXRoeSAodikgdGhlbiAoZnJhbWVfc2V0X2lwX2IgKGZyYW1lKSAoKHByaW1fY2FsbCBcIitcIiBbKGZyYW1lX2lwIChmcmFtZSkpOyBvZmZzZXRdKSkpIGVsc2UgTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA0OC4wKV0pKSB0aGVuIChsZXQgYXJnYyA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIGxldCBhcmdzID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGFyZ2MpKSBpbiBsZXQgZiA9ICh2bV9wb3AgKHZtKSkgaW4gKHZtX2NhbGwgKHZtKSAoZikgKGFyZ3MpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA0OS4wKV0pKSB0aGVuIChsZXQgYXJnYyA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIGxldCBhcmdzID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGFyZ2MpKSBpbiBsZXQgZiA9ICh2bV9wb3AgKHZtKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZtX3NldF9mcmFtZXNfYiAodm0pIChyZXN0X2ZyYW1lcykpKSBpbiAobGV0ICgpID0gaWdub3JlICgodm1fc2V0X3NwX2IgKHZtKSAoKGZyYW1lX2Jhc2UgKGZyYW1lKSkpKSkgaW4gKHZtX2NhbGwgKHZtKSAoZikgKGFyZ3MpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDUwLjApXSkpIHRoZW4gKGxldCByZXN1bHQnID0gKHZtX3BvcCAodm0pKSBpbiAobGV0ICgpID0gaWdub3JlICgodm1fc2V0X2ZyYW1lc19iICh2bSkgKHJlc3RfZnJhbWVzKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2bV9zZXRfc3BfYiAodm0pICgoZnJhbWVfYmFzZSAoZnJhbWUpKSkpKSBpbiAodm1fcHVzaCAodm0pIChyZXN1bHQnKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA1MS4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBjb2RlX3ZhbCA9IChudGggKGNvbnN0cykgKGlkeCkpIGluIChsZXQgY2wgPSAodm1fY3JlYXRlX2Nsb3N1cmUgKHZtKSAoZnJhbWUpIChjb2RlX3ZhbCkpIGluICh2bV9wdXNoICh2bSkgKGNsKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDUyLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IGFyZ2MgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgbmFtZSA9IChudGggKGNvbnN0cykgKGlkeCkpIGluIGxldCBhcmdzID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGFyZ2MpKSBpbiAodm1fcHVzaCAodm0pICgoY2FsbF9wcmltaXRpdmUgKG5hbWUpIChhcmdzKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA2NC4wKV0pKSB0aGVuIChsZXQgY291bnQgPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IGl0ZW1zID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGNvdW50KSkgaW4gKHZtX3B1c2ggKHZtKSAoaXRlbXMpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA2NS4wKV0pKSB0aGVuIChsZXQgY291bnQgPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IGQgPSAoY29sbGVjdF9uX3BhaXJzICh2bSkgKGNvdW50KSkgaW4gKHZtX3B1c2ggKHZtKSAoZCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE0NC4wKV0pKSB0aGVuIChsZXQgY291bnQgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgcGFydHMgPSAoY29sbGVjdF9uX2Zyb21fc3RhY2sgKHZtKSAoY291bnQpKSBpbiAodm1fcHVzaCAodm0pICgoc3hfYXBwbHkgc3RyIHBhcnRzKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDEyOC4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBuYW1lID0gKG50aCAoY29uc3RzKSAoaWR4KSkgaW4gKHN4X2RpY3Rfc2V0X2IgKHZtX2dsb2JhbHNfcmVmICh2bSkpIG5hbWUgKHZtX3BlZWsgKHZtKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2MC4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCIrXCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2MS4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCItXCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2Mi4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCIqXCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2My4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCIvXCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2NC4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCI9XCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2NS4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCI8XCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2Ni4wKV0pKSB0aGVuIChsZXQgYiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGEgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCI+XCIgW2E7IGJdKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2Ny4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHZtX3BvcCAodm0pKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2OC4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChsZW4gKCh2bV9wb3AgKHZtKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTY5LjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKGZpcnN0ICgodm1fcG9wICh2bSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3MC4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChyZXN0ICgodm1fcG9wICh2bSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3MS4wKV0pKSB0aGVuIChsZXQgbiA9ICh2bV9wb3AgKHZtKSkgaW4gbGV0IGNvbGwgPSAodm1fcG9wICh2bSkpIGluICh2bV9wdXNoICh2bSkgKChudGggKGNvbGwpIChuKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzIuMCldKSkgdGhlbiAobGV0IGNvbGwgPSAodm1fcG9wICh2bSkpIGluIGxldCB4ID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgoY29ucyAoeCkgKGNvbGwpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3My4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCItXCIgWyhOdW1iZXIgMC4wKTsgKHZtX3BvcCAodm0pKV0pKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzQuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiaW5jXCIgWyh2bV9wb3AgKHZtKSldKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTc1LjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHByaW1fY2FsbCBcImRlY1wiIFsodm1fcG9wICh2bSkpXSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDExMi4wKV0pKSB0aGVuIChsZXQgcmVxdWVzdCA9ICh2bV9wb3AgKHZtKSkgaW4gKHN4X2RpY3Rfc2V0X2IgKHZtX2dsb2JhbHNfcmVmICh2bSkpIChTdHJpbmcgXCJfX2lvX3JlcXVlc3RcIikgcmVxdWVzdCkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVk06IHVua25vd24gb3Bjb2RlIFwiKTsgb3BdKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSlcblxuXG5cbigqIFdpcmUgZm9yd2FyZCByZWZlcmVuY2VzIHRvIHRyYW5zcGlsZWQgZnVuY3Rpb25zICopXG5sZXQgKCkgPSBfdm1fcnVuX2ZuIDo9IHZtX3J1blxubGV0ICgpID0gX3ZtX2NhbGxfZm4gOj0gdm1fY2FsbFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQdWJsaWMgQVBJIOKAlCBtYXRjaGVzIFN4X3ZtIGludGVyZmFjZSBmb3IgZHJvcC1pbiByZXBsYWNlbWVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogQnVpbGQgYSBzdXNwZW5zaW9uIGRpY3QgZnJvbSBfX2lvX3JlcXVlc3QgaW4gZ2xvYmFscy4gKilcbmxldCBjaGVja19pb19zdXNwZW5zaW9uIGdsb2JhbHMgdm1fdmFsID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBnbG9iYWxzIFwiX19pb19yZXF1ZXN0XCIgd2l0aFxuICB8IFNvbWUgcmVxIHdoZW4gc3hfdHJ1dGh5IHJlcSAtPlxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwic3VzcGVuZGVkXCIgKEJvb2wgdHJ1ZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJvcFwiIChTdHJpbmcgXCJpbXBvcnRcIik7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJyZXF1ZXN0XCIgcmVxO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidm1cIiB2bV92YWw7XG4gICAgU29tZSAoRGljdCBkKVxuICB8IF8gLT4gTm9uZVxuXG4oKiogRXhlY3V0ZSBhIGNvbXBpbGVkIG1vZHVsZSDigJQgZW50cnkgcG9pbnQgZm9yIGxvYWQtc3hiYywgY29tcGlsZS1ibG9iLlxuICAgIFJldHVybnMgdGhlIHJlc3VsdCB2YWx1ZSwgb3IgYSBzdXNwZW5zaW9uIGRpY3QgaWYgT1BfUEVSRk9STSBmaXJlZC4gKilcbmxldCBleGVjdXRlX21vZHVsZSAoY29kZSA6IHZtX2NvZGUpIChnbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCkgPVxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwibW9kdWxlXCI7XG4gICAgICAgICAgICAgdm1fZW52X3JlZiA9IGdsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZSB9IGluXG4gIGxldCBtID0geyB2bV9zdGFjayA9IEFycmF5Lm1ha2UgNDA5NiBOaWw7IHZtX3NwID0gMDtcbiAgICAgICAgICAgIHZtX2ZyYW1lcyA9IFtdOyB2bV9nbG9iYWxzID0gZ2xvYmFsczsgdm1fcGVuZGluZ19jZWsgPSBOb25lIH0gaW5cbiAgbGV0IHZtX3ZhbCA9IFZtTWFjaGluZSBtIGluXG4gIGxldCBmcmFtZSA9IHsgdmZfY2xvc3VyZSA9IGNsOyB2Zl9pcCA9IDA7IHZmX2Jhc2UgPSAwOyB2Zl9sb2NhbF9jZWxscyA9IEhhc2h0YmwuY3JlYXRlIDQgfSBpblxuICBmb3IgXyA9IDAgdG8gY29kZS52Y19sb2NhbHMgLSAxIGRvXG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gTmlsOyBtLnZtX3NwIDwtIG0udm1fc3AgKyAxXG4gIGRvbmU7XG4gIG0udm1fZnJhbWVzIDwtIFtmcmFtZV07XG4gIGlnbm9yZSAodm1fcnVuIHZtX3ZhbCk7XG4gIG1hdGNoIGNoZWNrX2lvX3N1c3BlbnNpb24gZ2xvYmFscyB2bV92YWwgd2l0aFxuICB8IFNvbWUgc3VzcGVuc2lvbiAtPiBzdXNwZW5zaW9uXG4gIHwgTm9uZSAtPiB2bV9wb3Agdm1fdmFsXG5cbigqKiBSZXN1bWUgYSBzdXNwZW5kZWQgbW9kdWxlLiBDbGVhcnMgX19pb19yZXF1ZXN0LCBwdXNoZXMgbmlsLCByZS1ydW5zLiAqKVxubGV0IHJlc3VtZV9tb2R1bGUgKHN1c3BlbmRlZCA6IHZhbHVlKSA9XG4gIG1hdGNoIHN1c3BlbmRlZCB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgbGV0IHZtX3ZhbCA9IEhhc2h0YmwuZmluZCBkIFwidm1cIiBpblxuICAgIGxldCBnbG9iYWxzID0gbWF0Y2ggdm1fdmFsIHdpdGhcbiAgICAgIHwgVm1NYWNoaW5lIG0gLT4gbS52bV9nbG9iYWxzXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXN1bWVfbW9kdWxlOiBleHBlY3RlZCBWbU1hY2hpbmVcIikgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFscyBcIl9faW9fcmVxdWVzdFwiIE5pbDtcbiAgICBpZ25vcmUgKHZtX3B1c2ggdm1fdmFsIE5pbCk7XG4gICAgaWdub3JlICh2bV9ydW4gdm1fdmFsKTtcbiAgICAobWF0Y2ggY2hlY2tfaW9fc3VzcGVuc2lvbiBnbG9iYWxzIHZtX3ZhbCB3aXRoXG4gICAgIHwgU29tZSBzdXNwZW5zaW9uIC0+IHN1c3BlbnNpb25cbiAgICAgfCBOb25lIC0+IHZtX3BvcCB2bV92YWwpXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlc3VtZV9tb2R1bGU6IGV4cGVjdGVkIHN1c3BlbnNpb24gZGljdFwiKVxuXG4oKiogRXhlY3V0ZSBhIGNsb3N1cmUgd2l0aCBhcmdzIOKAlCBlbnRyeSBwb2ludCBmb3IgSklUIExhbWJkYSBjYWxscy4gKilcbmxldCBjYWxsX2Nsb3N1cmUgKGNsIDogdm1fY2xvc3VyZSkgKGFyZ3MgOiB2YWx1ZSBsaXN0KSAoZ2xvYmFscyA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQpID1cbiAgdm1fY2FsbF9jbG9zdXJlIChWbUNsb3N1cmUgY2wpIChMaXN0IGFyZ3MpIChEaWN0IGdsb2JhbHMpXG5cbigqKiBSZWV4cG9ydCBjb2RlX2Zyb21fdmFsdWUgZm9yIGNhbGxlcnMgKilcbmxldCBjb2RlX2Zyb21fdmFsdWUgPSBjb2RlX2Zyb21fdmFsdWVcblxuKCoqIFJlZXhwb3J0IGppdCByZWZzICopXG5sZXQgaml0X2NvbXBpbGVfcmVmID0gU3hfdm0uaml0X2NvbXBpbGVfcmVmXG5sZXQgaml0X2ZhaWxlZF9zZW50aW5lbCA9IF9qaXRfZmFpbGVkX3NlbnRpbmVsXG5sZXQgaXNfaml0X2ZhaWxlZCA9IF9pc19qaXRfZmFpbGVkXG5cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfdHlwZXMiLCJTeF9ydW50aW1lIiwiU3RkbGliX0xpc3QiLCJTeF92bSIsIlN4X3JlZiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYiIsImNla19jYWxsIiwiZXZhbF9leHByIiwidHJhbXBvbGluZSIsInYiLCJlbnYiLCJleHByIiwidG9fb2NhbWxfbGlzdCIsImwiLCJzdHIiLCJhcmdzIiwiY2FsbF9wcmltaXRpdmUiLCJuYW1lIiwibiIsInVud3JhcF92bSIsIm0iLCJ1bndyYXBfZnJhbWUiLCJ1bndyYXBfY2xvc3VyZSIsImMiLCJtYWtlX3V2X2NlbGwiLCJ1dl9nZXQiLCJ1dl9zZXQiLCJtYWtlX3VwdmFsdWVfY2VsbCIsInBhcmFtIiwidXZfc2V0X2IiLCJjb2RlX2Zyb21fdmFsdWUiLCJtYWtlX3ZtX2NvZGUiLCJhcml0eSIsImxvY2FscyIsImJ5dGVjb2RlIiwiY29uc3RhbnRzIiwiZCIsIm1ha2Vfdm1fY2xvc3VyZSIsImNvZGUiLCJ1cHZhbHVlcyIsImdsb2JhbHMiLCJjbG9zdXJlX2VudiIsInV2IiwiZSIsInMiLCJtYWtlX3ZtX2ZyYW1lIiwiY2xvc3VyZSIsImJhc2UiLCJjbCIsIm1ha2Vfdm0iLCJnIiwidm1fcHVzaCIsInZtX3ZhbCIsIm5zIiwidm1fcG9wIiwidm1fcGVlayIsImZyYW1lX3JlYWRfdTgiLCJmcmFtZV92YWwiLCJmcmFtZV9yZWFkX3UxNiIsImxvIiwiaGkiLCJmcmFtZV9yZWFkX2kxNiIsImZyYW1lX2xvY2FsX2dldCIsInNsb3QiLCJpZHgiLCJtYXRjaCIsImNlbGwiLCJmcmFtZV9sb2NhbF9zZXQiLCJmcmFtZV91cHZhbHVlX2dldCIsImZyYW1lX3VwdmFsdWVfc2V0IiwiZnJhbWVfaXAiLCJmciIsImZyYW1lX3NldF9pcF9iIiwiZnJhbWVfYmFzZSIsImZyYW1lX2Nsb3N1cmUiLCJjc3RfdmNfYnl0ZWNvZGUiLCJjc3RfdmNfY29uc3RhbnRzIiwiY3N0X3ZjX2xvY2FscyIsImNsb3N1cmVfY29kZSIsImkiLCJjbG9zdXJlX3VwdmFsdWVzIiwiY29kZV9ieXRlY29kZSIsImNvZGVfY29uc3RhbnRzIiwiY29kZV9sb2NhbHMiLCJ2bV9zcCIsInZtX3NldF9zcF9iIiwidm1fc3RhY2siLCJ2bV9zZXRfc3RhY2tfYiIsInZtX2ZyYW1lcyIsInZtX3NldF9mcmFtZXNfYiIsImZzIiwidm1fZ2xvYmFsc19yZWYiLCJjc3RfVk1fdW5kZWZpbmVkIiwidm1fZ2xvYmFsX2dldCIsImlkIiwiZm91bmRfaW5fZW52IiwicCIsImV4biIsImhvb2siLCJ2bV9nbG9iYWxfc2V0Iiwid3JpdHRlbiIsInZtX3B1c2hfZnJhbWUiLCJjbG9zdXJlX3ZhbCIsImFyZ19saXN0IiwiYSIsImZvciQiLCJ2bV9jbG9zdXJlX3AiLCJ2bV9jcmVhdGVfY2xvc3VyZSIsImNvZGVfdmFsIiwidXZfY291bnQiLCJpc19sb2NhbCIsImluZGV4IiwiZXhpc3RpbmciLCJqaXRfZmFpbGVkX3NlbnRpbmVsIiwiaXNfaml0X2ZhaWxlZCIsImlzX2xhbWJkYSIsImxhbWJkYV9jb21waWxlZCIsImxhbWJkYV9zZXRfY29tcGlsZWRfYiIsImxhbWJkYV9uYW1lIiwiY3N0X3JlcXVlc3QiLCJjZWtfY2FsbF9vcl9zdXNwZW5kIiwic3RhdGUiLCJmaW5hbCIsImVudl93YWxrIiwiZW52X3dhbGtfc2V0X2IiLCJ2YWx1ZSIsInZtX3J1bl9mbiIsInZtX2NhbGxfZm4iLCJhY3RpdmVfdm0iLCJ2bV9jYWxsX2Nsb3N1cmUiLCJwcmV2X3ZtIiwidHJ5X2ppdF9jYWxsIiwiY29sbGVjdF9uX2Zyb21fc3RhY2siLCJjb3VudCIsInJlc3VsdCIsImNvbGxlY3Rfbl9wYWlycyIsImsiLCJwYWRfbl9uaWxzIiwiY3N0Iiwidm1fY2FsbCIsInZtIiwib3IiLCJ2bV9yZXNvbHZlX2hvX2Zvcm0iLCJjb2xsIiwieCIsImluaXQiLCJhY2MiLCJ2bV9jYWxsX2V4dGVybmFsIiwiY3N0X2lvX3JlcXVlc3QiLCJ2bV9ydW4iLCJmcmFtZSIsInJlc3RfZnJhbWVzIiwiYmMiLCJjb25zdHMiLCJ2bV9zdGVwIiwib3AiLCJvZmZzZXQiLCJhcmdjIiwiaXRlbXMiLCJwYXJ0cyIsImIiLCJyZXF1ZXN0IiwiY3N0X3ZtIiwiY2hlY2tfaW9fc3VzcGVuc2lvbiIsInJlcSIsImV4ZWN1dGVfbW9kdWxlIiwic3VzcGVuc2lvbiIsInJlc3VtZV9tb2R1bGUiLCJzdXNwZW5kZWQiLCJjYWxsX2Nsb3N1cmUiLCJqaXRfY29tcGlsZV9yZWYiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEs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QUFBLE9BQUFrSSxrQkF2TnlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEMVNwRiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjcxNzc4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9yZW5kZXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBzeF9yZW5kZXIubWwg4oCUIEF1dG8tZ2VuZXJhdGVkIGZyb20gc3BlYy9yZW5kZXIuc3ggKyB3ZWIvYWRhcHRlci1odG1sLnN4ICopXG4oKiBEbyBub3QgZWRpdCDigJQgcmVnZW5lcmF0ZSB3aXRoOiBweXRob24zIGhvc3RzL29jYW1sL2Jvb3RzdHJhcF9yZW5kZXIucHkgKilcblxuW0BAQHdhcm5pbmcgXCItMjYtMjdcIl1cblxub3BlbiBTeF90eXBlc1xub3BlbiBTeF9ydW50aW1lXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBsYXRmb3JtIGJpbmRpbmdzIOKAlCBuYXRpdmUgT0NhbWwgZm9yIHBlcmZvcm1hbmNlIGFuZCB0eXBlIGFjY2VzcyAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGV2YWxfZXhwciBleHByIGVudiA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlbnZcbmxldCBjb25kX3NjaGVtZV9wID0gU3hfcmVmLmNvbmRfc2NoZW1lX3BcblxuKCogUHJpbWl0aXZlIHdyYXBwZXJzIG5lZWRlZCBhcyBkaXJlY3QgT0NhbWwgZnVuY3Rpb25zICopXG5sZXQgcmF3X2h0bWxfY29udGVudCB2ID0gbWF0Y2ggdiB3aXRoIFJhd0hUTUwgcyAtPiBTdHJpbmcgcyB8IF8gLT4gU3RyaW5nIFwiXCJcbmxldCBtYWtlX3Jhd19odG1sIHYgPSBtYXRjaCB2IHdpdGggU3RyaW5nIHMgLT4gUmF3SFRNTCBzIHwgXyAtPiBOaWxcbmxldCBzY29wZV9lbWl0IHYxIHYyID0gcHJpbV9jYWxsIFwic2NvcGUtZW1pdCFcIiBbdjE7IHYyXVxubGV0IGluaXQgdiA9IHByaW1fY2FsbCBcImluaXRcIiBbdl1cbmxldCBkaWN0X2hhcyBhIGIgPSBwcmltX2NhbGwgXCJkaWN0LWhhcz9cIiBbYTsgYl1cbmxldCBkaWN0X2dldCBhIGIgPSBwcmltX2NhbGwgXCJkaWN0LWdldFwiIFthOyBiXVxubGV0IGlzX2NvbXBvbmVudCB2ID0gcHJpbV9jYWxsIFwiY29tcG9uZW50P1wiIFt2XVxubGV0IGlzX2lzbGFuZCB2ID0gcHJpbV9jYWxsIFwiaXNsYW5kP1wiIFt2XVxubGV0IGlzX21hY3JvIHYgPSBwcmltX2NhbGwgXCJtYWNybz9cIiBbdl1cbmxldCBpc19sYW1iZGEgdiA9IHByaW1fY2FsbCBcImxhbWJkYT9cIiBbdl1cbmxldCBpc19uaWwgdiA9IHByaW1fY2FsbCBcIm5pbD9cIiBbdl1cblxuKCogRm9yd2FyZCByZWZzIGZvciB3ZWItc3BlY2lmaWMgcmVuZGVyZXJzIOKAlCBzZXQgaW4gRklYVVBTIG9yIGJ5IGNhbGxlciAqKVxubGV0IHJlbmRlcl9odG1sX2xha2VfcmVmIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biBfIF8gLT4gU3RyaW5nIFwiXCIpXG5sZXQgcmVuZGVyX2h0bWxfbWFyc2hfcmVmIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biBfIF8gLT4gU3RyaW5nIFwiXCIpXG5sZXQgcmVuZGVyX2h0bWxfaXNsYW5kX3JlZiA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gXyBfIF8gLT4gU3RyaW5nIFwiXCIpXG5cbmxldCByZW5kZXJfaHRtbF9sYWtlIGFyZ3MgZW52ID0gIXJlbmRlcl9odG1sX2xha2VfcmVmIGFyZ3MgZW52XG5sZXQgcmVuZGVyX2h0bWxfbWFyc2ggYXJncyBlbnYgPSAhcmVuZGVyX2h0bWxfbWFyc2hfcmVmIGFyZ3MgZW52XG5sZXQgcmVuZGVyX2h0bWxfaXNsYW5kIGNvbXAgYXJncyBlbnYgPSAhcmVuZGVyX2h0bWxfaXNsYW5kX3JlZiBjb21wIGFyZ3MgZW52XG5sZXQgY2VrX2NhbGwgPSBTeF9yZWYuY2VrX2NhbGxcblxubGV0IHRyYW1wb2xpbmUgdiA9IG1hdGNoIHYgd2l0aFxuICB8IFRodW5rIChleHByLCBlbnYpIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGVudilcbiAgfCBvdGhlciAtPiBvdGhlclxuXG5sZXQgZXhwYW5kX21hY3JvIG0gYXJnc192YWwgX2VudiA9IG1hdGNoIG0gd2l0aFxuICB8IE1hY3JvIG1hYyAtPlxuICAgIGxldCBhcmdzID0gbWF0Y2ggYXJnc192YWwgd2l0aCBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gbCB8IF8gLT4gW10gaW5cbiAgICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIChFbnYgbWFjLm1fY2xvc3VyZSkgaW5cbiAgICBsZXQgcmVjIGJpbmRfcGFyYW1zIHBzIGFzJyA9IG1hdGNoIHBzLCBhcycgd2l0aFxuICAgICAgfCBbXSwgcmVzdCAtPlxuICAgICAgICAobWF0Y2ggbWFjLm1fcmVzdF9wYXJhbSB3aXRoXG4gICAgICAgICB8IFNvbWUgcnAgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCAoU3RyaW5nIHJwKSAoTGlzdCByZXN0KSlcbiAgICAgICAgIHwgTm9uZSAtPiAoKSlcbiAgICAgIHwgcCA6OiBwc19yZXN0LCBhIDo6IGFzX3Jlc3QgLT5cbiAgICAgICAgaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIGEpO1xuICAgICAgICBiaW5kX3BhcmFtcyBwc19yZXN0IGFzX3Jlc3RcbiAgICAgIHwgXyA6OiBfLCBbXSAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCBOaWwpKSAoTGlzdC5yZXYgcHMpXG4gICAgaW5cbiAgICBiaW5kX3BhcmFtcyAoTGlzdC5tYXAgKGZ1biBwIC0+IFN0cmluZyBwKSBtYWMubV9wYXJhbXMpIGFyZ3M7XG4gICAgU3hfcmVmLmV2YWxfZXhwciBtYWMubV9ib2R5IGxvY2FsXG4gIHwgXyAtPiBOaWxcblxuKCoqIHRyeS1jYXRjaDogd3JhcHMgYSB0cnkgYm9keSBmbiBhbmQgY2F0Y2ggaGFuZGxlciBmbi5cbiAgICBNYXBzIHRvIE9DYW1sIGV4Y2VwdGlvbiBoYW5kbGluZy4gKilcbmxldCB0cnlfY2F0Y2ggdHJ5X2ZuIGNhdGNoX2ZuID1cbiAgdHJ5IHN4X2NhbGwgdHJ5X2ZuIFtdXG4gIHdpdGhcbiAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIGFzIGUgLT4gcmFpc2UgZVxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IHN4X2NhbGwgY2F0Y2hfZm4gW1N0cmluZyBtc2ddXG4gIHwgZSAtPiBzeF9jYWxsIGNhdGNoX2ZuIFtTdHJpbmcgKFByaW50ZXhjLnRvX3N0cmluZyBlKV1cblxuKCoqIHNldC1yZW5kZXItYWN0aXZlISDigJQgbm8tb3Agb24gT0NhbWwgKGFsd2F5cyBhY3RpdmUpLiAqKVxubGV0IHNldF9yZW5kZXJfYWN0aXZlX2IgX3YgPSBOaWxcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUGVyZm9ybWFuY2UtY3JpdGljYWw6IG5hdGl2ZSBCdWZmZXItYmFzZWQgSFRNTCBlc2NhcGluZyAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogVGFnIHJlZ2lzdHJpZXMg4oCUIG5hdGl2ZSBzdHJpbmcgbGlzdHMgZm9yIGNhbGxlcnMsIHZhbHVlIExpc3RzIGZvciBTWCAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBib29sZWFuX2F0dHJzX3NldCA9IFtcbiAgXCJhc3luY1wiOyBcImF1dG9mb2N1c1wiOyBcImF1dG9wbGF5XCI7IFwiY2hlY2tlZFwiOyBcImNvbnRyb2xzXCI7IFwiZGVmYXVsdFwiO1xuICBcImRlZmVyXCI7IFwiZGlzYWJsZWRcIjsgXCJmb3Jtbm92YWxpZGF0ZVwiOyBcImhpZGRlblwiOyBcImluZXJ0XCI7IFwiaXNtYXBcIjtcbiAgXCJsb29wXCI7IFwibXVsdGlwbGVcIjsgXCJtdXRlZFwiOyBcIm5vbW9kdWxlXCI7IFwibm92YWxpZGF0ZVwiOyBcIm9wZW5cIjtcbiAgXCJwbGF5c2lubGluZVwiOyBcInJlYWRvbmx5XCI7IFwicmVxdWlyZWRcIjsgXCJyZXZlcnNlZFwiOyBcInNlbGVjdGVkXCJcbl1cbmxldCBpc19ib29sZWFuX2F0dHIgbmFtZSA9IExpc3QubWVtIG5hbWUgYm9vbGVhbl9hdHRyc19zZXRcblxubGV0IGh0bWxfdGFnc19saXN0ID0gW1xuICBcImh0bWxcIjsgXCJoZWFkXCI7IFwiYm9keVwiOyBcInRpdGxlXCI7IFwibWV0YVwiOyBcImxpbmtcIjsgXCJzY3JpcHRcIjsgXCJzdHlsZVwiOyBcIm5vc2NyaXB0XCI7XG4gIFwiaGVhZGVyXCI7IFwibmF2XCI7IFwibWFpblwiOyBcInNlY3Rpb25cIjsgXCJhcnRpY2xlXCI7IFwiYXNpZGVcIjsgXCJmb290ZXJcIjtcbiAgXCJoMVwiOyBcImgyXCI7IFwiaDNcIjsgXCJoNFwiOyBcImg1XCI7IFwiaDZcIjsgXCJoZ3JvdXBcIjtcbiAgXCJkaXZcIjsgXCJwXCI7IFwiYmxvY2txdW90ZVwiOyBcInByZVwiOyBcImZpZ3VyZVwiOyBcImZpZ2NhcHRpb25cIjsgXCJhZGRyZXNzXCI7IFwiaHJcIjtcbiAgXCJ1bFwiOyBcIm9sXCI7IFwibGlcIjsgXCJkbFwiOyBcImR0XCI7IFwiZGRcIjsgXCJtZW51XCI7IFwiZGV0YWlsc1wiOyBcInN1bW1hcnlcIjsgXCJkaWFsb2dcIjtcbiAgXCJhXCI7IFwic3BhblwiOyBcImVtXCI7IFwic3Ryb25nXCI7IFwic21hbGxcIjsgXCJiXCI7IFwiaVwiOyBcInVcIjsgXCJzXCI7IFwic3ViXCI7IFwic3VwXCI7XG4gIFwibWFya1wiOyBcImFiYnJcIjsgXCJjaXRlXCI7IFwiY29kZVwiOyBcImtiZFwiOyBcInNhbXBcIjsgXCJ2YXJcIjsgXCJ0aW1lXCI7IFwiYnJcIjsgXCJ3YnJcIjtcbiAgXCJ0YWJsZVwiOyBcInRoZWFkXCI7IFwidGJvZHlcIjsgXCJ0Zm9vdFwiOyBcInRyXCI7IFwidGhcIjsgXCJ0ZFwiOyBcImNhcHRpb25cIjsgXCJjb2xncm91cFwiOyBcImNvbFwiO1xuICBcImZvcm1cIjsgXCJpbnB1dFwiOyBcInRleHRhcmVhXCI7IFwic2VsZWN0XCI7IFwib3B0aW9uXCI7IFwib3B0Z3JvdXBcIjsgXCJidXR0b25cIjsgXCJsYWJlbFwiO1xuICBcImZpZWxkc2V0XCI7IFwibGVnZW5kXCI7IFwiZGF0YWxpc3RcIjsgXCJvdXRwdXRcIjtcbiAgXCJpbWdcIjsgXCJ2aWRlb1wiOyBcImF1ZGlvXCI7IFwic291cmNlXCI7IFwicGljdHVyZVwiOyBcImNhbnZhc1wiOyBcImlmcmFtZVwiO1xuICBcInN2Z1wiOyBcInBhdGhcIjsgXCJjaXJjbGVcIjsgXCJyZWN0XCI7IFwibGluZVwiOyBcInBvbHlsaW5lXCI7IFwicG9seWdvblwiOyBcImVsbGlwc2VcIjtcbiAgXCJnXCI7IFwiZGVmc1wiOyBcInVzZVwiOyBcInRleHRcIjsgXCJ0c3BhblwiOyBcImNsaXBQYXRoXCI7IFwibWFza1wiOyBcInBhdHRlcm5cIjtcbiAgXCJsaW5lYXJHcmFkaWVudFwiOyBcInJhZGlhbEdyYWRpZW50XCI7IFwic3RvcFwiOyBcImZpbHRlclwiO1xuICBcImZlR2F1c3NpYW5CbHVyXCI7IFwiZmVPZmZzZXRcIjsgXCJmZUJsZW5kXCI7IFwiZmVDb2xvck1hdHJpeFwiOyBcImZlQ29tcG9zaXRlXCI7XG4gIFwiZmVNZXJnZVwiOyBcImZlTWVyZ2VOb2RlXCI7IFwiZmVUdXJidWxlbmNlXCI7IFwiZmVDb21wb25lbnRUcmFuc2ZlclwiO1xuICBcImZlRnVuY1JcIjsgXCJmZUZ1bmNHXCI7IFwiZmVGdW5jQlwiOyBcImZlRnVuY0FcIjsgXCJmZURpc3BsYWNlbWVudE1hcFwiOyBcImZlRmxvb2RcIjtcbiAgXCJmZUltYWdlXCI7IFwiZmVNb3JwaG9sb2d5XCI7IFwiZmVTcGVjdWxhckxpZ2h0aW5nXCI7IFwiZmVEaWZmdXNlTGlnaHRpbmdcIjtcbiAgXCJmZVBvaW50TGlnaHRcIjsgXCJmZVNwb3RMaWdodFwiOyBcImZlRGlzdGFudExpZ2h0XCI7XG4gIFwiYW5pbWF0ZVwiOyBcImFuaW1hdGVUcmFuc2Zvcm1cIjsgXCJmb3JlaWduT2JqZWN0XCI7IFwidGVtcGxhdGVcIjsgXCJzbG90XCJcbl1cbmxldCBodG1sX3RhZ3MgPSBodG1sX3RhZ3NfbGlzdCAgKCogY2FsbGVycyBleHBlY3Qgc3RyaW5nIGxpc3QgKilcbmxldCBodG1sX3RhZ3NfdmFsID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBodG1sX3RhZ3NfbGlzdClcblxubGV0IHZvaWRfZWxlbWVudHNfbGlzdCA9IFtcbiAgXCJhcmVhXCI7IFwiYmFzZVwiOyBcImJyXCI7IFwiY29sXCI7IFwiZW1iZWRcIjsgXCJoclwiOyBcImltZ1wiOyBcImlucHV0XCI7XG4gIFwibGlua1wiOyBcIm1ldGFcIjsgXCJwYXJhbVwiOyBcInNvdXJjZVwiOyBcInRyYWNrXCI7IFwid2JyXCJcbl1cbmxldCB2b2lkX2VsZW1lbnRzID0gdm9pZF9lbGVtZW50c19saXN0ICAoKiBjYWxsZXJzIGV4cGVjdCBzdHJpbmcgbGlzdCAqKVxubGV0IHZvaWRfZWxlbWVudHNfdmFsID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSB2b2lkX2VsZW1lbnRzX2xpc3QpXG5cbmxldCBib29sZWFuX2F0dHJzID0gYm9vbGVhbl9hdHRyc19zZXQgICgqIGNhbGxlcnMgZXhwZWN0IHN0cmluZyBsaXN0ICopXG5sZXQgYm9vbGVhbl9hdHRyc192YWwgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGJvb2xlYW5fYXR0cnNfc2V0KVxuXG4oKiBOYXRpdmUgZXNjYXBlIGZvciBpbnRlcm5hbCB1c2Ug4oCUIHJldHVybnMgcmF3IE9DYW1sIHN0cmluZyAqKVxubGV0IGVzY2FwZV9odG1sX3JhdyBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgU3RyaW5nLml0ZXIgKGZ1bmN0aW9uXG4gICAgfCAnJicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmFtcDtcIlxuICAgIHwgJzwnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZsdDtcIlxuICAgIHwgJz4nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZndDtcIlxuICAgIHwgJ1wiJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImcXVvdDtcIlxuICAgIHwgYyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuKCogZXNjYXBlX2h0bWw6IG5hdGl2ZSBzdHJpbmcgLT4gc3RyaW5nIGZvciBjYWxsZXJzICopXG5sZXQgZXNjYXBlX2h0bWwgPSBlc2NhcGVfaHRtbF9yYXdcblxuKCogZXNjYXBlX2h0bWxfdmFsIC8gZXNjYXBlX2F0dHJfdmFsIOKAlCB0YWtlIGEgdmFsdWUsIHJldHVybiBTdHJpbmcgdmFsdWUgKGZvciB0cmFuc3BpbGVkIGNvZGUpICopXG5sZXQgZXNjYXBlX2h0bWxfdmFsIHYgPVxuICBsZXQgcyA9IG1hdGNoIHYgd2l0aCBTdHJpbmcgcyAtPiBzIHwgdiAtPiB2YWx1ZV90b19zdHJpbmcgdiBpblxuICBTdHJpbmcgKGVzY2FwZV9odG1sX3JhdyBzKVxuXG5sZXQgZXNjYXBlX2F0dHJfdmFsIHYgPSBlc2NhcGVfaHRtbF92YWwgdlxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQZXJmb3JtYW5jZS1jcml0aWNhbDogbmF0aXZlIGF0dHJpYnV0ZSByZW5kZXJpbmcgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgcmVuZGVyX2F0dHJzIGF0dHJzID0gbWF0Y2ggYXR0cnMgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICAgIGlmIHN4X3RydXRoeSB2IHRoZW4gYmVnaW5cbiAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJztcbiAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIHYgPD4gTmlsIHRoZW4gYmVnaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBrO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI9XFxcIlwiO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGVzY2FwZV9odG1sX3JhdyAodmFsdWVfdG9fc3RyaW5nIHYpKTtcbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG4gICAgICBlbmQpIGQ7XG4gICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICB8IF8gLT4gU3RyaW5nIFwiXCJcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogRm9yd2FyZCByZWYg4oCUIHVzZWQgYnkgc2V0dXBfcmVuZGVyX2VudiBhbmQgYnVmZmVyIHJlbmRlcmVyICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgcmVuZGVyX3RvX2h0bWxfcmVmIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfZXhwciBfZW52IC0+IFN0cmluZyBcIlwiKVxuXG4oKiBzY29wZS1lbWl0dGVkIGlzIGEgcHJpbSBhbGlhcyAqKVxubGV0IHNjb3BlX2VtaXR0ZWQgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLWVtaXR0ZWRcIiBbbmFtZV1cblxuKCogUkVOREVSX0hUTUxfRk9STVMg4oCUIGxpc3Qgb2Ygc3BlY2lhbCBmb3JtIG5hbWVzIGhhbmRsZWQgYnkgZGlzcGF0Y2gtaHRtbC1mb3JtICopXG5sZXQgcmVuZGVyX2h0bWxfZm9ybXMgPSBMaXN0IFtcbiAgU3RyaW5nIFwiaWZcIjsgU3RyaW5nIFwid2hlblwiOyBTdHJpbmcgXCJjb25kXCI7IFN0cmluZyBcImNhc2VcIjtcbiAgU3RyaW5nIFwibGV0XCI7IFN0cmluZyBcImxldCpcIjsgU3RyaW5nIFwibGV0cmVjXCI7XG4gIFN0cmluZyBcImJlZ2luXCI7IFN0cmluZyBcImRvXCI7XG4gIFN0cmluZyBcImRlZmluZVwiOyBTdHJpbmcgXCJkZWZjb21wXCI7IFN0cmluZyBcImRlZm1hY3JvXCI7IFN0cmluZyBcImRlZmlzbGFuZFwiO1xuICBTdHJpbmcgXCJkZWZwYWdlXCI7IFN0cmluZyBcImRlZmhhbmRsZXJcIjsgU3RyaW5nIFwiZGVmcXVlcnlcIjsgU3RyaW5nIFwiZGVmYWN0aW9uXCI7XG4gIFN0cmluZyBcImRlZnJlbGF0aW9uXCI7IFN0cmluZyBcImRlZnR5cGVcIjsgU3RyaW5nIFwiZGVmZWZmZWN0XCI7IFN0cmluZyBcImRlZnN0eWxlXCI7XG4gIFN0cmluZyBcIm1hcFwiOyBTdHJpbmcgXCJtYXAtaW5kZXhlZFwiOyBTdHJpbmcgXCJmaWx0ZXJcIjsgU3RyaW5nIFwiZm9yLWVhY2hcIjtcbiAgU3RyaW5nIFwic2NvcGVcIjsgU3RyaW5nIFwicHJvdmlkZVwiXG5dXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSByZW5kZXIgc3BlYyArIGFkYXB0ZXIgPT09ICopXG4oKiAqZGVmaW5pdGlvbi1mb3JtLWV4dGVuc2lvbnMqICopXG5sZXQgcmVjIF9kZWZpbml0aW9uX2Zvcm1fZXh0ZW5zaW9uc18gPVxuICAoTGlzdCBbXSlcblxuKCogZGVmaW5pdGlvbi1mb3JtPyAqKVxuYW5kIGRlZmluaXRpb25fZm9ybV9wIG5hbWUgPVxuICAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZpbmVcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmY29tcFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZpc2xhbmRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmbWFjcm9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmc3R5bGVcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVmdHlwZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZlZmZlY3RcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFtfZGVmaW5pdGlvbl9mb3JtX2V4dGVuc2lvbnNfOyBuYW1lXSkpKSkpKSkpXG5cbigqIHBhcnNlLWVsZW1lbnQtYXJncyAqKVxuYW5kIHBhcnNlX2VsZW1lbnRfYXJncyBhcmdzIGVudiA9XG4gIChsZXQgYXR0cnMgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBjaGlsZHJlbiA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBhcmcgLT4gKGxldCBza2lwID0gKGdldCAoc3RhdGUpICgoU3RyaW5nIFwic2tpcFwiKSkpIGluIChpZiBzeF90cnV0aHkgKHNraXApIHRoZW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgZmFsc2UpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGFyZykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgWyhwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSk7IChsZW4gKGFyZ3MpKV0pKSkgdGhlbiAobGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSkpKSkgKGVudikpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgYXR0cnMgKGtleXdvcmRfbmFtZSAoYXJnKSkgdmFsJykpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIHRydWUpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgoY2hpbGRyZW4gOj0gc3hfYXBwZW5kX2IgIWNoaWxkcmVuIGFyZzsgTmlsKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pKSkpKSkgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcImlcIikpIChOdW1iZXIgMC4wKTsgSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInNraXBcIikpIChCb29sIGZhbHNlKTsgIERpY3QgX2QpIChzeF90b19saXN0IGFyZ3MpKSkgaW4gKExpc3QgW2F0dHJzOyAhY2hpbGRyZW5dKSkpXG5cbigqIGV2YWwtY29uZCAqKVxuYW5kIGV2YWxfY29uZCBjbGF1c2VzIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChjb25kX3NjaGVtZV9wIChjbGF1c2VzKSkpIHRoZW4gKGV2YWxfY29uZF9zY2hlbWUgKGNsYXVzZXMpIChlbnYpKSBlbHNlIChldmFsX2NvbmRfY2xvanVyZSAoY2xhdXNlcykgKGVudikpKVxuXG4oKiBldmFsLWNvbmQtc2NoZW1lICopXG5hbmQgZXZhbF9jb25kX3NjaGVtZSBjbGF1c2VzIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjbGF1c2VzKSkpIHRoZW4gTmlsIGVsc2UgKGxldCBjbGF1c2UgPSAoZmlyc3QgKGNsYXVzZXMpKSBpbiBsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlKSkgaW4gbGV0IGJvZHkgPSAobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiBib2R5IGVsc2UgKGlmIHN4X3RydXRoeSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKHRlc3QpIChlbnYpKSkpKSB0aGVuIGJvZHkgZWxzZSAoZXZhbF9jb25kX3NjaGVtZSAoKHJlc3QgKGNsYXVzZXMpKSkgKGVudikpKSkpKVxuXG4oKiBldmFsLWNvbmQtY2xvanVyZSAqKVxuYW5kIGV2YWxfY29uZF9jbG9qdXJlIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoY2xhdXNlcykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiBOaWwgZWxzZSAobGV0IHRlc3QgPSAoZmlyc3QgKGNsYXVzZXMpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZXMpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiBib2R5IGVsc2UgKGlmIHN4X3RydXRoeSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKHRlc3QpIChlbnYpKSkpKSB0aGVuIGJvZHkgZWxzZSAoZXZhbF9jb25kX2Nsb2p1cmUgKChwcmltX2NhbGwgXCJzbGljZVwiIFtjbGF1c2VzOyAoTnVtYmVyIDIuMCldKSkgKGVudikpKSkpKVxuXG4oKiBwcm9jZXNzLWJpbmRpbmdzICopXG5hbmQgcHJvY2Vzc19iaW5kaW5ncyBiaW5kaW5ncyBlbnYgPVxuICAobGV0IGxvY2FsID0gKGVudl9leHRlbmQgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHBhaXIpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocGFpcikpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKGxldCBuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocGFpcikpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocGFpcikpKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgWyhmaXJzdCAocGFpcikpXSkpKSBpbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBuYW1lKSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSAobG9jYWwpKSkpKSkgZWxzZSBOaWwpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpKSBpbiBsb2NhbCkpXG5cbigqIGlzLXJlbmRlci1leHByPyAqKVxuYW5kIGlzX3JlbmRlcl9leHByX3AgZXhwciA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZXhwcikpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSkpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGVtcHR5X3AgKGV4cHIpKSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGxldCBoID0gKGZpcnN0IChleHByKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgbiA9IChzeW1ib2xfbmFtZSAoaCkpIGluIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbjsgKFN0cmluZyBcIjw+XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbjsgKFN0cmluZyBcInJhdyFcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW247IChTdHJpbmcgXCJ+XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcInN0YXJ0cy13aXRoP1wiIFtuOyAoU3RyaW5nIFwiaHRtbDpcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW2h0bWxfdGFnc192YWw7IG5dKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj5cIiBbKHByaW1fY2FsbCBcImluZGV4LW9mXCIgW247IChTdHJpbmcgXCItXCIpXSk7IChOdW1iZXIgMC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAxLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pKSkpKSkpKSkpKSlcblxuKCogbWVyZ2Utc3ByZWFkLWF0dHJzICopXG5hbmQgbWVyZ2Vfc3ByZWFkX2F0dHJzIHRhcmdldCBzcHJlYWRfZGljdCA9XG4gIChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgobGV0IHZhbCcgPSAoZGljdF9nZXQgKHNwcmVhZF9kaWN0KSAoa2V5KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2V5OyAoU3RyaW5nIFwiY2xhc3NcIildKSkgdGhlbiAobGV0IGV4aXN0aW5nID0gKGRpY3RfZ2V0ICh0YXJnZXQpICgoU3RyaW5nIFwiY2xhc3NcIikpKSBpbiAoc3hfZGljdF9zZXRfYiB0YXJnZXQgKFN0cmluZyBcImNsYXNzXCIpIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IGV4aXN0aW5nIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhpc3Rpbmc7IChTdHJpbmcgXCJcIildKSkpKSkpKSB0aGVuIChTdHJpbmcgKHN4X3N0ciBbZXhpc3Rpbmc7IChTdHJpbmcgXCIgXCIpOyB2YWwnXSkpIGVsc2UgdmFsJykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2tleTsgKFN0cmluZyBcInN0eWxlXCIpXSkpIHRoZW4gKGxldCBleGlzdGluZyA9IChkaWN0X2dldCAodGFyZ2V0KSAoKFN0cmluZyBcInN0eWxlXCIpKSkgaW4gKHN4X2RpY3Rfc2V0X2IgdGFyZ2V0IChTdHJpbmcgXCJzdHlsZVwiKSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSBleGlzdGluZyBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2V4aXN0aW5nOyAoU3RyaW5nIFwiXCIpXSkpKSkpKSkgdGhlbiAoU3RyaW5nIChzeF9zdHIgW2V4aXN0aW5nOyAoU3RyaW5nIFwiO1wiKTsgdmFsJ10pKSBlbHNlIHZhbCcpKSkgZWxzZSAoc3hfZGljdF9zZXRfYiB0YXJnZXQga2V5IHZhbCcpKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcImtleXNcIiBbc3ByZWFkX2RpY3RdKSk7IE5pbClcblxuKCogcmVuZGVyLXRvLWh0bWwgKilcbmFuZCByZW5kZXJfdG9faHRtbCBleHByIGVudiA9XG4gIChsZXQgKCkgPSBpZ25vcmUgKChzZXRfcmVuZGVyX2FjdGl2ZV9iICgoQm9vbCB0cnVlKSkpKSBpbiAobGV0IF9tYXRjaF92YWwgPSAodHlwZV9vZiAoZXhwcikpIGluIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm5pbFwiKSB0aGVuIChTdHJpbmcgXCJcIikgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzdHJpbmdcIikgdGhlbiAoZXNjYXBlX2h0bWxfdmFsIChleHByKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJudW1iZXJcIikgdGhlbiAoU3RyaW5nIChzeF9zdHIgW2V4cHJdKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJib29sZWFuXCIpIHRoZW4gKGlmIHN4X3RydXRoeSAoZXhwcikgdGhlbiAoU3RyaW5nIFwidHJ1ZVwiKSBlbHNlIChTdHJpbmcgXCJmYWxzZVwiKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJsaXN0XCIpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGV4cHIpKSkgdGhlbiAoU3RyaW5nIFwiXCIpIGVsc2UgKHJlbmRlcl9saXN0X3RvX2h0bWwgKGV4cHIpIChlbnYpKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzeW1ib2xcIikgdGhlbiAocmVuZGVyX3ZhbHVlX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwia2V5d29yZFwiKSB0aGVuIChlc2NhcGVfaHRtbF92YWwgKChrZXl3b3JkX25hbWUgKGV4cHIpKSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwicmF3LWh0bWxcIikgdGhlbiAocmF3X2h0bWxfY29udGVudCAoZXhwcikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ByZWFkXCIpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX2VtaXQgKChTdHJpbmcgXCJlbGVtZW50LWF0dHJzXCIpKSAoKHNwcmVhZF9hdHRycyAoZXhwcikpKSkpIGluIChTdHJpbmcgXCJcIikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwidGh1bmtcIikgdGhlbiAocmVuZGVyX3RvX2h0bWwgKCh0aHVua19leHByIChleHByKSkpICgodGh1bmtfZW52IChleHByKSkpKSBlbHNlIChyZW5kZXJfdmFsdWVfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkpKSkpKSkpKSkpKSlcblxuKCogcmVuZGVyLXZhbHVlLXRvLWh0bWwgKilcbmFuZCByZW5kZXJfdmFsdWVfdG9faHRtbCB2YWwnIGVudiA9XG4gIChsZXQgX21hdGNoX3ZhbCA9ICh0eXBlX29mICh2YWwnKSkgaW4gKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibmlsXCIpIHRoZW4gKFN0cmluZyBcIlwiKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInN0cmluZ1wiKSB0aGVuIChlc2NhcGVfaHRtbF92YWwgKHZhbCcpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm51bWJlclwiKSB0aGVuIChTdHJpbmcgKHN4X3N0ciBbdmFsJ10pKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImJvb2xlYW5cIikgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWwnKSB0aGVuIChTdHJpbmcgXCJ0cnVlXCIpIGVsc2UgKFN0cmluZyBcImZhbHNlXCIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImxpc3RcIikgdGhlbiAocmVuZGVyX2xpc3RfdG9faHRtbCAodmFsJykgKGVudikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwicmF3LWh0bWxcIikgdGhlbiAocmF3X2h0bWxfY29udGVudCAodmFsJykpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ByZWFkXCIpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX2VtaXQgKChTdHJpbmcgXCJlbGVtZW50LWF0dHJzXCIpKSAoKHNwcmVhZF9hdHRycyAodmFsJykpKSkpIGluIChTdHJpbmcgXCJcIikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwidGh1bmtcIikgdGhlbiAocmVuZGVyX3RvX2h0bWwgKCh0aHVua19leHByICh2YWwnKSkpICgodGh1bmtfZW52ICh2YWwnKSkpKSBlbHNlIChlc2NhcGVfaHRtbF92YWwgKChTdHJpbmcgKHN4X3N0ciBbdmFsJ10pKSkpKSkpKSkpKSkpXG5cbigqIHJlbmRlci1odG1sLWZvcm0/ICopXG5hbmQgcmVuZGVyX2h0bWxfZm9ybV9wIG5hbWUgPVxuICAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3JlbmRlcl9odG1sX2Zvcm1zOyBuYW1lXSlcblxuKCogcmVuZGVyLWxpc3QtdG8taHRtbCAqKVxuYW5kIHJlbmRlcl9saXN0X3RvX2h0bWwgZXhwciBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChTdHJpbmcgXCJcIikgZWxzZSAobGV0IGhlYWQgPSAoZmlyc3QgKGV4cHIpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkpKSkpIHRoZW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAocmVuZGVyX3ZhbHVlX3RvX2h0bWwgKHgpIChlbnYpKSkgKHN4X3RvX2xpc3QgZXhwcikpKV0pIGVsc2UgKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChoZWFkKSkgaW4gbGV0IGFyZ3MgPSAocmVzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCI8PlwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHJlbmRlcl90b19odG1sICh4KSAoZW52KSkpIChzeF90b19saXN0IGFyZ3MpKSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyYXchXCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAoU3RyaW5nIChzeF9zdHIgWyh0cmFtcG9saW5lICgoZXZhbF9leHByICh4KSAoZW52KSkpKV0pKSkgKHN4X3RvX2xpc3QgYXJncykpKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxha2VcIildKSkgdGhlbiAocmVuZGVyX2h0bWxfbGFrZSAoYXJncykgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcnNoXCIpXSkpIHRoZW4gKHJlbmRlcl9odG1sX21hcnNoIChhcmdzKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZXJyb3ItYm91bmRhcnlcIildKSkgdGhlbiAobGV0IGhhc19mYWxsYmFjayA9IChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkgaW4gKGxldCBib2R5X2V4cHJzID0gKGlmIHN4X3RydXRoeSAoaGFzX2ZhbGxiYWNrKSB0aGVuIChyZXN0IChhcmdzKSkgZWxzZSBhcmdzKSBpbiBsZXQgZmFsbGJhY2tfZXhwciA9IChpZiBzeF90cnV0aHkgKGhhc19mYWxsYmFjaykgdGhlbiAoZmlyc3QgKGFyZ3MpKSBlbHNlIE5pbCkgaW4gKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPGRpdiBkYXRhLXN4LWJvdW5kYXJ5PVxcXCJ0cnVlXFxcIj5cIik7ICh0cnlfY2F0Y2ggKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiAoZnVuICgpIC0+IChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHJlbmRlcl90b19odG1sICh4KSAoZW52KSkpIChzeF90b19saXN0IGJvZHlfZXhwcnMpKSldKSkgKCkpKSkgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtlcnJdIC0+IChmdW4gZXJyIC0+IChsZXQgc2FmZV9lcnIgPSAocHJpbV9jYWxsIFwicmVwbGFjZVwiIFsocHJpbV9jYWxsIFwicmVwbGFjZVwiIFsoU3RyaW5nIChzeF9zdHIgW2Vycl0pKTsgKFN0cmluZyBcIjxcIik7IChTdHJpbmcgXCImbHQ7XCIpXSk7IChTdHJpbmcgXCI+XCIpOyAoU3RyaW5nIFwiJmd0O1wiKV0pIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IGZhbGxiYWNrX2V4cHIgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsIChmYWxsYmFja19leHByKSkpKSkpKSkgdGhlbiAodHJ5X2NhdGNoICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAocmVuZGVyX3RvX2h0bWwgKChMaXN0IFsodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZmFsbGJhY2tfZXhwcikgKGVudikpKSk7IGVycjsgTmlsXSkpIChlbnYpKSkgKCkpKSkgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtlMl0gLT4gKGZ1biBlMiAtPiAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8ZGl2IGNsYXNzPVxcXCJzeC1yZW5kZXItZXJyb3JcXFwiIHN0eWxlPVxcXCJjb2xvcjpyZWQ7Zm9udC1zaXplOjAuODc1cmVtO3BhZGRpbmc6MC41cmVtO2JvcmRlcjoxcHggc29saWQgcmVkO2JvcmRlci1yYWRpdXM6MC4yNXJlbTttYXJnaW46MC41cmVtIDA7XFxcIj5SZW5kZXIgZXJyb3I6IFwiKTsgc2FmZV9lcnI7IChTdHJpbmcgXCI8L2Rpdj5cIildKSkpIGUyIHwgXyAtPiBOaWwpKSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPGRpdiBjbGFzcz1cXFwic3gtcmVuZGVyLWVycm9yXFxcIiBzdHlsZT1cXFwiY29sb3I6cmVkO2ZvbnQtc2l6ZTowLjg3NXJlbTtwYWRkaW5nOjAuNXJlbTtib3JkZXI6MXB4IHNvbGlkIHJlZDtib3JkZXItcmFkaXVzOjAuMjVyZW07bWFyZ2luOjAuNXJlbSAwO1xcXCI+UmVuZGVyIGVycm9yOiBcIik7IHNhZmVfZXJyOyAoU3RyaW5nIFwiPC9kaXY+XCIpXSkpKSkpIGVyciB8IF8gLT4gTmlsKSkpKTsgKFN0cmluZyBcIjwvZGl2PlwiKV0pKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicG9ydGFsXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJwcm9taXNlLWRlbGF5ZWRcIildKSkpIHRoZW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAocmVuZGVyX3RvX2h0bWwgKHgpIChlbnYpKSkgKHN4X3RvX2xpc3QgYXJncykpKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFtodG1sX3RhZ3NfdmFsOyBuYW1lXSkpIHRoZW4gKHJlbmRlcl9odG1sX2VsZW1lbnQgKG5hbWUpIChhcmdzKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW25hbWU7IChTdHJpbmcgXCJ+XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGVudl9oYXMgKGVudikgKG5hbWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaXNfaXNsYW5kICgoZW52X2dldCAoZW52KSAobmFtZSkpKSkpKSkgdGhlbiAocmVuZGVyX2h0bWxfaXNsYW5kICgoZW52X2dldCAoZW52KSAobmFtZSkpKSAoYXJncykgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcInN0YXJ0cy13aXRoP1wiIFtuYW1lOyAoU3RyaW5nIFwiflwiKV0pKSB0aGVuIChsZXQgdmFsJyA9IChlbnZfZ2V0IChlbnYpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2NvbXBvbmVudCAodmFsJykpKSB0aGVuIChyZW5kZXJfaHRtbF9jb21wb25lbnQgKHZhbCcpIChhcmdzKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbWFjcm8gKHZhbCcpKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChleHBhbmRfbWFjcm8gKHZhbCcpIChhcmdzKSAoZW52KSkpIChlbnYpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjwhLS0gdW5rbm93biBjb21wb25lbnQ6IFwiKTsgbmFtZTsgKFN0cmluZyBcIiAtLT5cIildKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocmVuZGVyX2h0bWxfZm9ybV9wIChuYW1lKSkpIHRoZW4gKGRpc3BhdGNoX2h0bWxfZm9ybSAobmFtZSkgKGV4cHIpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChlbnZfaGFzIChlbnYpIChuYW1lKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX21hY3JvICgoZW52X2dldCAoZW52KSAobmFtZSkpKSkpKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKGV4cGFuZF9tYWNybyAoKGVudl9nZXQgKGVudikgKG5hbWUpKSkgKGFyZ3MpIChlbnYpKSkgKGVudikpIGVsc2UgKHJlbmRlcl92YWx1ZV90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSkpKSkpKSkpKSkpKSkpKVxuXG4oKiBkaXNwYXRjaC1odG1sLWZvcm0gKilcbmFuZCBkaXNwYXRjaF9odG1sX2Zvcm0gbmFtZSBleHByIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJpZlwiKV0pKSB0aGVuIChsZXQgY29uZF92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiAoaWYgc3hfdHJ1dGh5IChjb25kX3ZhbCkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDMuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpICgoTnVtYmVyIDMuMCkpKSkgKGVudikpIGVsc2UgKFN0cmluZyBcIlwiKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJ3aGVuXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSkpKSkpIHRoZW4gKFN0cmluZyBcIlwiKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAzLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSBlbHNlIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGkgLT4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoaSkpKSAoZW52KSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDIuMCk7IChsZW4gKGV4cHIpKV0pKSkpXSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJjb25kXCIpXSkpIHRoZW4gKGxldCBicmFuY2ggPSAoZXZhbF9jb25kICgocmVzdCAoZXhwcikpKSAoZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoYnJhbmNoKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoYnJhbmNoKSAoZW52KSkgZWxzZSAoU3RyaW5nIFwiXCIpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY2FzZVwiKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGV0cmVjXCIpXSkpIHRoZW4gKGxldCBiaW5kaW5ncyA9IChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtleHByOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IHBuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocGFpcikpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocGFpcikpKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgWyhmaXJzdCAocGFpcikpXSkpKSBpbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwbmFtZSkgTmlsKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGxldCBwbmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHBhaXIpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKHBhaXIpKSkpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFsoZmlyc3QgKHBhaXIpKV0pKSkgaW4gKGVudl9zZXQgbG9jYWwgKHN4X3RvX3N0cmluZyBwbmFtZSkgKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSkpKSkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBlIC0+IGlnbm9yZSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChsb2NhbCkpKSkpKSAoc3hfdG9fbGlzdCAoaW5pdCAoYm9keSkpKTsgTmlsKSBlbHNlIE5pbCkpIGluIChyZW5kZXJfdG9faHRtbCAoKGxhc3QgKGJvZHkpKSkgKGxvY2FsKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGV0XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJsZXQqXCIpXSkpKSB0aGVuIChsZXQgbG9jYWwgPSAocHJvY2Vzc19iaW5kaW5ncyAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDMuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGxvY2FsKSkgZWxzZSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpIC0+IChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKGkpKSkgKGxvY2FsKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDIuMCk7IChsZW4gKGV4cHIpKV0pKSkpXSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImJlZ2luXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkb1wiKV0pKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkgZWxzZSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpIC0+IChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKGkpKSkgKGVudikpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAxLjApOyAobGVuIChleHByKSldKSkpKV0pKSBlbHNlIChpZiBzeF90cnV0aHkgKChkZWZpbml0aW9uX2Zvcm1fcCAobmFtZSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgaW4gKFN0cmluZyBcIlwiKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGNvbGwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkpKSBpbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpdGVtIC0+IChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAocmVuZGVyX2xhbWJkYV9odG1sIChmKSAoKExpc3QgW2l0ZW1dKSkgKGVudikpIGVsc2UgKHJlbmRlcl90b19odG1sICgoc3hfYXBwbHkgZiAoTGlzdCBbaXRlbV0pKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgY29sbCkpKV0pKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKV0pKSB0aGVuIChsZXQgZiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBjb2xsID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgaXRlbSAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAocmVuZGVyX2xhbWJkYV9odG1sIChmKSAoKExpc3QgW2k7IGl0ZW1dKSkgKGVudikpIGVsc2UgKHJlbmRlcl90b19odG1sICgoc3hfYXBwbHkgZiAoTGlzdCBbaTsgaXRlbV0pKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgY29sbCkpKV0pKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpIHRoZW4gKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGNvbGwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkpKSBpbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpdGVtIC0+IChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAocmVuZGVyX2xhbWJkYV9odG1sIChmKSAoKExpc3QgW2l0ZW1dKSkgKGVudikpIGVsc2UgKHJlbmRlcl90b19odG1sICgoc3hfYXBwbHkgZiAoTGlzdCBbaXRlbV0pKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgY29sbCkpKV0pKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChsZXQgc2NvcGVfbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCByZXN0X2FyZ3MgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbZXhwcjsgKE51bWJlciAyLjApXSkgaW4gbGV0IHNjb3BlX3ZhbCA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keV9leHBycyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9hcmdzKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV92YWwgOj0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJlc3RfYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKTsgTmlsKSkgaW4gKGJvZHlfZXhwcnMgOj0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3RfYXJnczsgKE51bWJlciAyLjApXSk7IE5pbCkpIGVsc2UgKGJvZHlfZXhwcnMgOj0gcmVzdF9hcmdzOyBOaWwpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKHNjb3BlX25hbWUpICghc2NvcGVfdmFsKSkpIGluIChsZXQgcmVzdWx0JyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKCFib2R5X2V4cHJzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKGZpcnN0ICghYm9keV9leHBycykpKSAoZW52KSkgZWxzZSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+IChyZW5kZXJfdG9faHRtbCAoZSkgKGVudikpKSAoc3hfdG9fbGlzdCAhYm9keV9leHBycykpKV0pKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChzY29wZV9uYW1lKSkpIGluIHJlc3VsdCcpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkpIHRoZW4gKGxldCBwcm92X25hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgcHJvdl92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keV9zdGFydCA9IChOdW1iZXIgMy4wKSBpbiBsZXQgYm9keV9jb3VudCA9IChwcmltX2NhbGwgXCItXCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAzLjApXSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKHByb3ZfbmFtZSkgKHByb3ZfdmFsKSkpIGluIChsZXQgcmVzdWx0JyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2JvZHlfY291bnQ7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKGJvZHlfc3RhcnQpKSkgKGVudikpIGVsc2UgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaSAtPiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpIChpKSkpIChlbnYpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgW2JvZHlfc3RhcnQ7IChwcmltX2NhbGwgXCIrXCIgW2JvZHlfc3RhcnQ7IGJvZHlfY291bnRdKV0pKSkpXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKHByb3ZfbmFtZSkpKSBpbiByZXN1bHQnKSkpKSBlbHNlIChyZW5kZXJfdmFsdWVfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkpKSkpKSkpKSkpKSkpKVxuXG4oKiByZW5kZXItbGFtYmRhLWh0bWwgKilcbmFuZCByZW5kZXJfbGFtYmRhX2h0bWwgZiBhcmdzIGVudiA9XG4gIChsZXQgbG9jYWwgPSAoZW52X21lcmdlICgobGFtYmRhX2Nsb3N1cmUgKGYpKSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JfZWFjaF9pbmRleGVkICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbaTsgcF0gLT4gKGZ1biBpIHAgLT4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgKG50aCAoYXJncykgKGkpKSkpIGkgcCB8IF8gLT4gTmlsKSkpICgobGFtYmRhX3BhcmFtcyAoZikpKSkpIGluIChyZW5kZXJfdG9faHRtbCAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkpKSlcblxuKCogcmVuZGVyLWh0bWwtY29tcG9uZW50ICopXG5hbmQgcmVuZGVyX2h0bWxfY29tcG9uZW50IGNvbXAgYXJncyBlbnYgPVxuICAobGV0IGt3YXJncyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gbGV0IGNoaWxkcmVuID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0LmZvbGRfbGVmdCAoZnVuIHN0YXRlIGFyZyAtPiAobGV0IHNraXAgPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJza2lwXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2tpcCkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCBmYWxzZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYXJnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKTsgKGxlbiAoYXJncykpXSkpKSB0aGVuIChsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKSkpKSAoZW52KSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBrd2FyZ3MgKGtleXdvcmRfbmFtZSAoYXJnKSkgdmFsJykpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIHRydWUpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgoY2hpbGRyZW4gOj0gc3hfYXBwZW5kX2IgIWNoaWxkcmVuIGFyZzsgTmlsKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKV0pKSkpKSkgKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcImlcIikpIChOdW1iZXIgMC4wKTsgSGFzaHRibC5yZXBsYWNlIF9kICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInNraXBcIikpIChCb29sIGZhbHNlKTsgIERpY3QgX2QpIChzeF90b19saXN0IGFyZ3MpKSkgaW4gKGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoY29tcCkpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAoaWYgc3hfdHJ1dGh5ICgoZGljdF9oYXMgKGt3YXJncykgKHApKSkgdGhlbiAoZGljdF9nZXQgKGt3YXJncykgKHApKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKGNvbXBvbmVudF9wYXJhbXMgKGNvbXApKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChjb21wb25lbnRfaGFzX2NoaWxkcmVuIChjb21wKSkpIHRoZW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKFN0cmluZyBcImNoaWxkcmVuXCIpKSAobWFrZV9yYXdfaHRtbCAoKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAocmVuZGVyX3RvX2h0bWwgKGMpIChlbnYpKSkgKHN4X3RvX2xpc3QgIWNoaWxkcmVuKSkpXSkpKSkgZWxzZSBOaWwpKSBpbiAocmVuZGVyX3RvX2h0bWwgKChjb21wb25lbnRfYm9keSAoY29tcCkpKSAobG9jYWwpKSkpKSkpXG5cbigqIHJlbmRlci1odG1sLWVsZW1lbnQgKilcbmFuZCByZW5kZXJfaHRtbF9lbGVtZW50IHRhZyBhcmdzIGVudiA9XG4gIChsZXQgcGFyc2VkID0gKHBhcnNlX2VsZW1lbnRfYXJncyAoYXJncykgKGVudikpIGluIGxldCBhdHRycyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGNoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGlzX3ZvaWQgPSAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3ZvaWRfZWxlbWVudHNfdmFsOyB0YWddKSBpbiAoaWYgc3hfdHJ1dGh5IChpc192b2lkKSB0aGVuIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjxcIik7IHRhZzsgKHJlbmRlcl9hdHRycyAoYXR0cnMpKTsgKFN0cmluZyBcIiAvPlwiKV0pKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wdXNoICgoU3RyaW5nIFwiZWxlbWVudC1hdHRyc1wiKSkgKE5pbCkpKSBpbiAobGV0IGNvbnRlbnQgPSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChyZW5kZXJfdG9faHRtbCAoYykgKGVudikpKSAoc3hfdG9fbGlzdCBjaGlsZHJlbikpKV0pIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBzcHJlYWRfZGljdCAtPiBpZ25vcmUgKChtZXJnZV9zcHJlYWRfYXR0cnMgKGF0dHJzKSAoc3ByZWFkX2RpY3QpKSkpIChzeF90b19saXN0IChzY29wZV9lbWl0dGVkICgoU3RyaW5nIFwiZWxlbWVudC1hdHRyc1wiKSkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAoKFN0cmluZyBcImVsZW1lbnQtYXR0cnNcIikpKSkgaW4gKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPFwiKTsgdGFnOyAocmVuZGVyX2F0dHJzIChhdHRycykpOyAoU3RyaW5nIFwiPlwiKTsgY29udGVudDsgKFN0cmluZyBcIjwvXCIpOyB0YWc7IChTdHJpbmcgXCI+XCIpXSkpKSkpKSkpXG5cblxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBXaXJlIHVwIGZvcndhcmQgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgKCkgPSByZW5kZXJfdG9faHRtbF9yZWYgOj0gcmVuZGVyX3RvX2h0bWxcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogQnVmZmVyLWJhc2VkIHN0cmVhbWluZyByZW5kZXJlciDigJQgemVybyBpbnRlcm1lZGlhdGUgc3RyaW5nIGFsbG9jYXRpb24gICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogRXNjYXBlIEhUTUwgZGlyZWN0bHkgaW50byBhIGJ1ZmZlci4gKilcbmxldCBlc2NhcGVfaHRtbF9idWYgYnVmIHMgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgfCAnJicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmFtcDtcIlxuICAgIHwgJzwnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZsdDtcIlxuICAgIHwgJz4nIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZndDtcIlxuICAgIHwgJ1wiJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImcXVvdDtcIlxuICAgIHwgYyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGNcbiAgZG9uZVxuXG5sZXQgcmVuZGVyX2F0dHJzX2J1ZiBidWYgYXR0cnMgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgZW5kXG4gICAgZW5kIGVsc2UgaWYgdiA8PiBOaWwgdGhlbiBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICBlc2NhcGVfaHRtbF9idWYgYnVmICh2YWx1ZV90b19zdHJpbmcgdik7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICBlbmQpIGF0dHJzXG5cbigqKiBSZW5kZXIgdG8gcHJlLWFsbG9jYXRlZCBidWZmZXIg4oCUIGRlbGVnYXRlcyB0byB0cmFuc3BpbGVkIHJlbmRlcl90b19odG1sXG4gICAgYW5kIGV4dHJhY3RzIHRoZSBzdHJpbmcgcmVzdWx0LiAqKVxubGV0IHJlbmRlcl90b19idWYgYnVmIGV4cHIgKGVudiA6IGVudikgPVxuICBtYXRjaCAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgKEVudiBlbnYpIHdpdGhcbiAgfCBTdHJpbmcgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc1xuICB8IFJhd0hUTUwgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc1xuICB8IHYgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh2YWx1ZV90b19zdHIgdilcblxuKCoqIFB1YmxpYyBBUEk6IHJlbmRlciB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiAqKVxubGV0IHJlbmRlcl90b19idWZmZXIgYnVmIGV4cHIgZW52ID0gcmVuZGVyX3RvX2J1ZiBidWYgZXhwciBlbnZcblxuKCoqIENvbnZlbmllbmNlOiByZW5kZXIgdG8gc3RyaW5nLiAqKVxubGV0IHJlbmRlcl90b19odG1sX3N0cmVhbWluZyBleHByIChlbnYgOiBlbnYpID1cbiAgbWF0Y2ggIXJlbmRlcl90b19odG1sX3JlZiBleHByIChFbnYgZW52KSB3aXRoXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IFJhd0hUTUwgcyAtPiBzXG4gIHwgdiAtPiB2YWx1ZV90b19zdHIgdlxuXG4oKiogVGhlIG5hdGl2ZSBPQ2FtbCByZW5kZXJlciDigJQgdXNlZCBieSBzeF9zZXJ2ZXIgd2hlbiBTWCBhZGFwdGVyIGlzbid0IGxvYWRlZC4gKilcbmxldCBkb19yZW5kZXJfdG9faHRtbCBleHByIChlbnZfdmFsIDogdmFsdWUpID1cbiAgbWF0Y2ggIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudl92YWwgd2l0aFxuICB8IFN0cmluZyBzIC0+IHNcbiAgfCBSYXdIVE1MIHMgLT4gc1xuICB8IHYgLT4gdmFsdWVfdG9fc3RyIHZcblxuKCoqIFJlbmRlciB2aWEgdGhlIFNYIGFkYXB0ZXIgKHJlbmRlci10by1odG1sIGZyb20gYWRhcHRlci1odG1sLnN4KS5cbiAgICBGYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgcmVmIGlmIHRoZSBTWCBhZGFwdGVyIGlzbid0IGxvYWRlZC4gKilcbmxldCBzeF9yZW5kZXJfdG9faHRtbCAocmVuZGVyX2VudiA6IGVudikgZXhwciAoZXZhbF9lbnYgOiBlbnYpID1cbiAgaWYgU3hfdHlwZXMuZW52X2hhcyByZW5kZXJfZW52IFwicmVuZGVyLXRvLWh0bWxcIiB0aGVuXG4gICAgbGV0IGZuID0gU3hfdHlwZXMuZW52X2dldCByZW5kZXJfZW52IFwicmVuZGVyLXRvLWh0bWxcIiBpblxuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuY2VrX2NhbGwgZm4gKExpc3QgW2V4cHI7IEVudiBldmFsX2Vudl0pIGluXG4gICAgbWF0Y2ggcmVzdWx0IHdpdGggU3RyaW5nIHMgLT4gcyB8IFJhd0hUTUwgcyAtPiBzIHwgXyAtPiB2YWx1ZV90b19zdHIgcmVzdWx0XG4gIGVsc2VcbiAgICBkb19yZW5kZXJfdG9faHRtbCBleHByIChFbnYgZXZhbF9lbnYpXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogU2V0dXAg4oCUIGJpbmQgcmVuZGVyIHByaW1pdGl2ZXMgaW4gYW4gZW52IGFuZCB3aXJlIHVwIHRoZSByZWYgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgaXNfaHRtbF90YWcgbmFtZSA9IExpc3QubWVtIG5hbWUgaHRtbF90YWdzX2xpc3RcbmxldCBpc192b2lkIG5hbWUgPSBMaXN0Lm1lbSBuYW1lIHZvaWRfZWxlbWVudHNfbGlzdFxuXG4oKiBlc2NhcGVfaHRtbF9zdHI6IHRha2VzIHJhdyBPQ2FtbCBzdHJpbmcsIHJldHVybnMgcmF3IHN0cmluZyDigJQgZm9yIGNhbGxlcnMgKilcbmxldCBlc2NhcGVfaHRtbF9zdHIgPSBlc2NhcGVfaHRtbF9yYXdcblxubGV0IHNldHVwX3JlbmRlcl9lbnYgKHJhd19lbnYgOiBlbnYpID1cbiAgbGV0IGVudiA9IEVudiByYXdfZW52IGluXG4gIGxldCBiaW5kIG5hbWUgZm4gPVxuICAgIGlnbm9yZSAoU3hfdHlwZXMuZW52X2JpbmQgcmF3X2VudiBuYW1lIChOYXRpdmVGbiAobmFtZSwgZm4pKSlcbiAgaW5cblxuICBiaW5kIFwicmVuZGVyLWh0bWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPlxuICAgICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICAgIGxldCBleHByID0gbWF0Y2ggZXhwcnMgd2l0aFxuICAgICAgICB8IFtlXSAtPiBlXG4gICAgICAgIHwgW10gLT4gTmlsXG4gICAgICAgIHwgXyAtPiBMaXN0IChTeW1ib2wgXCJkb1wiIDo6IGV4cHJzKVxuICAgICAgaW5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciBlbnZcbiAgICB8IFtleHByXSAtPlxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuICAgIHwgW2V4cHI7IEVudiBlXSAtPlxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIChFbnYgZSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuXG4gIGJpbmQgXCJyZW5kZXItdG8taHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgbGV0IGV4cHIgPSBtYXRjaCBleHBycyB3aXRoXG4gICAgICAgIHwgW2VdIC0+IGVcbiAgICAgICAgfCBbXSAtPiBOaWxcbiAgICAgICAgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpXG4gICAgICBpblxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuICAgIHwgW2V4cHJdIC0+XG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgZW52XG4gICAgfCBbZXhwcjsgRW52IGVdIC0+XG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgKEVudiBlKVxuICAgIHwgXyAtPiBTdHJpbmcgXCJcIilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9lcXVhbCIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMiIsImYiLCJhMCIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJib29sZWFuX2F0dHJzX3NldCIsImNzdF9iciIsImNzdF9jb2wiLCJjc3RfZmlsdGVyIiwiY3N0X2hyIiwiY3N0X2kiLCJjc3RfaW1nIiwiY3N0X2lucHV0IiwiY3N0X2xpbmsiLCJjc3RfbWV0YSIsImNzdF9zb3VyY2UiLCJjc3Rfc3R5bGUiLCJjc3Rfd2JyIiwiaHRtbF90YWdzX2xpc3QiLCJ2b2lkX2VsZW1lbnRzX2xpc3QiLCJjc3RfYmVnaW4iLCJjc3RfY2FzZSIsImNzdF9jb25kIiwiY3N0X2RlZmNvbXAiLCJjc3RfZGVmZWZmZWN0IiwiY3N0X2RlZmluZSIsImNzdF9kZWZpc2xhbmQiLCJjc3RfZGVmbWFjcm8iLCJjc3RfZGVmc3R5bGUiLCJjc3RfZGVmdHlwZSIsImNzdF9kbyIsImNzdF9mb3JfZWFjaCIsImNzdF9pZiIsImNzdF9sZXQiLCJjc3RfbGV0cmVjIiwiY3N0X21hcCIsImNzdF9tYXBfaW5kZXhlZCIsImNzdF9wcm92aWRlIiwiY3N0X3Njb3BlIiwiY3N0X3doZW4iLCJyZW5kZXJfaHRtbF9mb3JtcyIsIlN4X3J1bnRpbWUiLCJTeF90eXBlcyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0xpc3QiLCJTeF9wYXJzZXIiLCJTeF9yZWYiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX1N0cmluZyIsIlN4X3ZtIiwiU3RkbGliX1ByaW50ZXhjIiwiZXZhbF9leHByIiwiZXhwciIsImVudiIsImNvbmRfc2NoZW1lX3AiLCJjc3QiLCJyYXdfaHRtbF9jb250ZW50IiwidiIsInMiLCJtYWtlX3Jhd19odG1sIiwic2NvcGVfZW1pdCIsInYxIiwidjIiLCJpbml0IiwiZGljdF9oYXMiLCJhIiwiYiIsImRpY3RfZ2V0IiwiaXNfY29tcG9uZW50IiwiaXNfaXNsYW5kIiwiaXNfbWFjcm8iLCJpc19sYW1iZGEiLCJpc19uaWwiLCJyZW5kZXJfaHRtbF9sYWtlX3JlZiIsInBhcmFtIiwicmVuZGVyX2h0bWxfbWFyc2hfcmVmIiwicmVuZGVyX2h0bWxfaXNsYW5kX3JlZiIsInJlbmRlcl9odG1sX2xha2UiLCJhcmdzIiwicmVuZGVyX2h0bWxfbWFyc2giLCJyZW5kZXJfaHRtbF9pc2xhbmQiLCJjb21wIiwiY2VrX2NhbGwiLCJ0cmFtcG9saW5lIiwiZXhwYW5kX21hY3JvIiwibSIsImFyZ3NfdmFsIiwibWFjIiwibG9jYWwiLCJwcyIsInAiLCJhcyIsIm1hdGNoIiwicnAiLCJwc19yZXN0IiwiYXNfcmVzdCIsInRyeV9jYXRjaCIsInRyeV9mbiIsImNhdGNoX2ZuIiwiZSIsIm1zZyIsInNldF9yZW5kZXJfYWN0aXZlX2IiLCJpc19ib29sZWFuX2F0dHIiLCJuYW1lIiwiaHRtbF90YWdzX3ZhbCIsInZvaWRfZWxlbWVudHNfdmFsIiwiYm9vbGVhbl9hdHRyc192YWwiLCJjc3RfYW1wIiwiY3N0X2d0IiwiY3N0X2x0IiwiY3N0X3F1b3QiLCJlc2NhcGVfaHRtbF9yYXciLCJidWYiLCJjIiwiZXNjYXBlX2h0bWxfdmFsIiwiZXNjYXBlX2F0dHJfdmFsIiwicmVuZGVyX2F0dHJzIiwiYXR0cnMiLCJkIiwiayIsInJlbmRlcl90b19odG1sX3JlZiIsInNjb3BlX2VtaXR0ZWQiLCJjc3RfY29udGFpbnMiLCJkZWZpbml0aW9uX2Zvcm1fZXh0ZW5zaW9ucyIsImRlZmluaXRpb25fZm9ybV9wIiwib3IiLCJjc3RfYXNzb2MiLCJjc3RfaW5jIiwiY3N0X2tleXdvcmQiLCJjc3Rfc2tpcCIsInBhcnNlX2VsZW1lbnRfYXJncyIsImNoaWxkcmVuIiwic3RhdGUiLCJhcmciLCJza2lwIiwiYW5kIiwidmFsIiwiZXZhbF9jb25kIiwiY2xhdXNlcyIsImV2YWxfY29uZF9zY2hlbWUiLCJjbGF1c2UiLCJ0ZXN0IiwiYm9keSIsImNzdF9zbGljZSIsImV2YWxfY29uZF9jbG9qdXJlIiwiY3N0X2xpc3QiLCJjc3Rfc3ltYm9sIiwicHJvY2Vzc19iaW5kaW5ncyIsImJpbmRpbmdzIiwicGFpciIsImNzdF9yYXciLCJjc3Rfc3RhcnRzX3dpdGgiLCJpc19yZW5kZXJfZXhwcl9wIiwiaCIsIm4iLCJjc3RfY2xhc3MiLCJtZXJnZV9zcHJlYWRfYXR0cnMiLCJ0YXJnZXQiLCJzcHJlYWRfZGljdCIsImtleSIsImV4aXN0aW5nIiwiY3N0X2Jvb2xlYW4iLCJjc3RfZWxlbWVudF9hdHRycyIsImNzdF9mYWxzZSIsImNzdF9uaWwiLCJjc3RfbnVtYmVyIiwiY3N0X3Jhd19odG1sIiwiY3N0X3NwcmVhZCIsImNzdF9zdHJpbmciLCJjc3RfdGh1bmsiLCJjc3RfdHJ1ZSIsInJlbmRlcl90b19odG1sIiwiY291bnRlciIsIm1hdGNoX3ZhbCIsInJlbmRlcl92YWx1ZV90b19odG1sIiwicmVuZGVyX2h0bWxfZm9ybV9wIiwiY3N0X2RpdiIsImNzdF9kaXZfY2xhc3Nfc3hfcmVuZGVyX2Vycm9yXyIsImNzdF9qb2luIiwicmVuZGVyX2xpc3RfdG9faHRtbCIsImhlYWQiLCJ4IiwiaGFzX2ZhbGxiYWNrIiwiYm9keV9leHBycyIsImZhbGxiYWNrX2V4cHIiLCJlcnIiLCJjc3RfcmVwbGFjZSIsInNhZmVfZXJyIiwiYm9keV9zdGFydCIsImRpc3BhdGNoX2h0bWxfZm9ybSIsImNvbmRfdmFsIiwiY3N0X3JhbmdlIiwiaSIsImJyYW5jaCIsInBuYW1lIiwiY29sbCIsIml0ZW0iLCJwcm92X25hbWUiLCJwcm92X3ZhbCIsImJvZHlfY291bnQiLCJyZXN1bHQiLCJzY29wZV9uYW1lIiwicmVzdF9hcmdzIiwic2NvcGVfdmFsIiwicmVuZGVyX2xhbWJkYV9odG1sIiwicmVuZGVyX2h0bWxfY29tcG9uZW50Iiwia3dhcmdzIiwicmVuZGVyX2h0bWxfZWxlbWVudCIsInRhZyIsInBhcnNlZCIsImlzX3ZvaWQiLCJjb250ZW50IiwiZXNjYXBlX2h0bWxfYnVmIiwicmVuZGVyX2F0dHJzX2J1ZiIsInJlbmRlcl90b19idWYiLCJyZW5kZXJfdG9fYnVmZmVyIiwicmVuZGVyX3RvX2h0bWxfc3RyZWFtaW5nIiwiZG9fcmVuZGVyX3RvX2h0bWwiLCJlbnZfdmFsIiwiY3N0X3JlbmRlcl90b19odG1sIiwic3hfcmVuZGVyX3RvX2h0bWwiLCJyZW5kZXJfZW52IiwiZXZhbF9lbnYiLCJmbiIsImlzX2h0bWxfdGFnIiwic2V0dXBfcmVuZGVyX2VudiIsInJhd19lbnYiLCJiaW5kIiwic3JjIiwiZXhwcnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSCxHQUFBQyxJQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUEsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxr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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEMUg3RSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjczODY0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Impzb29fcnVudGltZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiXSwibWFwcGluZ3MiOiJPQUFBQSxVQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NzM4NzcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvb19ydW50aW1lLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBKc19vZl9vY2FtbCBsaWJyYXJ5XG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4gKiBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbiAqKVxuXG5tb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgcnVudGltZV92YWx1ZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc29vX3J1bnRpbWVfdmFsdWVcIlxuICAoKiogW3J1bnRpbWVfdmFsdWUgXCJGT09cIl0gcmV0dXJucyB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBGT08gcHJvdmlkZWQgYnkgdGhlIEphdmFTY3JpcHQgcnVudGltZSAod2l0aCAnLy9Qcm92aWRlczogRk9PJykuIFRoZSBzdHJpbmcgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBsaXRlcmFsLiAqKVxuXG4gIGV4dGVybmFsIGN1c3RvbV9pZGVudGlmaWVyIDogT2JqLnQgLT4gc3RyaW5nID0gXCJjYW1sX2N1c3RvbV9pZGVudGlmaWVyXCJcbmVuZFxuXG5tb2R1bGUgU3lzID0gc3RydWN0XG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAnYVxuXG4gIGV4dGVybmFsIGNyZWF0ZV9maWxlIDogbmFtZTpzdHJpbmcgLT4gY29udGVudDpzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9jcmVhdGVfZmlsZVwiXG5cbiAgZXh0ZXJuYWwgcmVhZF9maWxlIDogbmFtZTpzdHJpbmcgLT4gc3RyaW5nID0gXCJjYW1sX3JlYWRfZmlsZV9jb250ZW50XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9vdXRwdXQnIDogb3V0X2NoYW5uZWwgLT4gKGpzX3N0cmluZzpKcy50IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX2lucHV0JyA6IGluX2NoYW5uZWwgLT4gKHVuaXQgLT4gc3RyaW5nKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXCJcblxuICBleHRlcm5hbCBtb3VudF9wb2ludCA6IHVuaXQgLT4gc3RyaW5nIGxpc3QgPSBcImNhbWxfbGlzdF9tb3VudF9wb2ludFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfYXV0b2xvYWQgOiBzdHJpbmcgLT4gKHN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvbikgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21vdW50X2F1dG9sb2FkXCJcblxuICBleHRlcm5hbCB1bm1vdW50IDogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfdW5tb3VudFwiXG5cbiAgdHlwZSByZWRpcmVjdGlvblxuXG4gIGV4dGVybmFsIHJlZGlyZWN0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiBpbnRvOm91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uXG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFwiXG5cbiAgZXh0ZXJuYWwgcmVzdG9yZV9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb24gLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVwiXG5cbiAgbW9kdWxlIENvbmZpZyA9IHN0cnVjdFxuICAgIGV4dGVybmFsIHVzZV9qc19zdHJpbmcgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXCJcblxuICAgIHR5cGUgZWZmZWN0c19iYWNrZW5kID1cbiAgICAgIFsgYERpc2FibGVkXG4gICAgICB8IGBDcHNcbiAgICAgIHwgYERvdWJsZV90cmFuc2xhdGlvblxuICAgICAgXVxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0c18gOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuXG4gICAgbGV0IGVmZmVjdHMgKCkgPVxuICAgICAgbWF0Y2ggZWZmZWN0c18gKCkgd2l0aFxuICAgICAgfCBcImRpc2FibGVkXCIgLT4gYERpc2FibGVkXG4gICAgICB8IFwiY3BzXCIgLT4gYENwc1xuICAgICAgfCBcImRvdWJsZS10cmFuc2xhdGlvblwiIC0+IGBEb3VibGVfdHJhbnNsYXRpb25cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgZW5kXG5cbiAgbGV0IHZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uc1xuXG4gIGxldCBnaXRfdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5naXRfdmVyc2lvblxuZW5kXG5cbm1vZHVsZSBFcnJvciA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcmFpc2VfIDogdCAtPiAnYVxuXG4gIHZhbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuXG4gICgqKiBBdHRhY2ggYSBKYXZhU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhU2NyaXB0IGVycm9ycyB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5IHdoZW4gY29tcGlsaW5nIHdpdGhcbiAgICBbLS1lbmFibGUgd2l0aC1qcy1lcnJvcl0uICopXG5cbiAgdmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvblxuICAoKiogRXh0cmFjdCBhIEphdmFTY3JpcHQgZXJyb3IgYXR0YWNoZWQgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLCBpZiBhbnkuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgICAgaW5zcGVjdCBhbiBldmVudHVhbCBzdGFjayB0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBleHRlcm5hbCByYWlzZV8gOiB0IC0+ICdhID0gXCJjYW1sX3Rocm93X2pzX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbid0IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuXG4gIGV4dGVybmFsIGNhbWxfc3RyaW5nX29mX2FycmF5IDogJ2EgYXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9hcnJheVwiXG5lbmRcblxubW9kdWxlIFR5cGVkX2FycmF5ID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdHlwZWRBcnJheSA9IEpzLnRcblxuICB0eXBlIGFycmF5QnVmZmVyID0gSnMudFxuXG4gIHR5cGUgdWludDhBcnJheSA9IEpzLnRcblxuICBleHRlcm5hbCBraW5kIDogKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiKSBCaWdhcnJheS5raW5kXG4gICAgPSBcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgZnJvbV9nZW5hcnJheSA6XG4gICAgKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnQgLT4gKCdhLCAnYikgdHlwZWRBcnJheVxuICAgID0gXCJjYW1sX2JhX3RvX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19nZW5hcnJheSA6XG4gICAgKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudFxuICAgID0gXCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXlcIlxuXG4gIG1vZHVsZSBCaWdzdHJpbmcgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSAoY2hhciwgQmlnYXJyYXkuaW50OF91bnNpZ25lZF9lbHQsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5BcnJheTEudFxuXG4gICAgZXh0ZXJuYWwgdG9fYXJyYXlCdWZmZXIgOiB0IC0+IGFycmF5QnVmZmVyID0gXCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIHRvX3VpbnQ4QXJyYXkgOiB0IC0+IHVpbnQ4QXJyYXkgPSBcImJpZ3N0cmluZ190b190eXBlZF9hcnJheVwiXG5cbiAgICBleHRlcm5hbCBvZl9hcnJheUJ1ZmZlciA6IGFycmF5QnVmZmVyIC0+IHQgPSBcImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gdCA9IFwiYmlnc3RyaW5nX29mX3R5cGVkX2FycmF5XCJcbiAgZW5kXG5cbiAgZXh0ZXJuYWwgc3RyaW5nX29mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGJ5dGVzX29mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IGJ5dGVzID0gXCJjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XCJcblxuICBleHRlcm5hbCB1aW50OEFycmF5X29mX2J5dGVzIDogYnl0ZXMgLT4gdWludDhBcnJheSA9IFwiY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1wiXG5lbmRcblxubW9kdWxlIEludDY0ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZV9pbnQ2NF9sb19taV9oaSA6IGludCAtPiBpbnQgLT4gaW50IC0+IEludDY0LnRcbiAgICA9IFwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcIlxuZW5kXG5cbm1vZHVsZSBFZmZlY3QgOiBzaWdcbiAgZXh0ZXJuYWwgYXNzdW1lX25vX3BlcmZvcm0gOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfYXNzdW1lX25vX3BlcmZvcm1cIlxuICAoKiogUGFzc2luZyBhIGZ1bmN0aW9uIFtmXSBhcyBhcmd1bWVudCBvZiBgYXNzdW1lX25vX3BlcmZvcm1gIGd1YXJhbnRlZXMgdGhhdCxcbiAgICAgIHdoZW4gY29tcGlsaW5nIHdpdGggYC0tZWZmZWN0cz1kb3VibGUtdHJhbnNsYXRpb25gLCB0aGUgZGlyZWN0LXN0eWxlXG4gICAgICB2ZXJzaW9uIG9mIFtmXSBpcyBjYWxsZWQsIHdoaWNoIGlzIGZhc3RlciB0aGFuIHRoZSBDUFMgdmVyc2lvbi4gQXMgYVxuICAgICAgY29uc2VxdWVuY2UsIHBlcmZvcm1pbmcgYW4gZWZmZWN0IGluIGEgdHJhbnNpdGl2ZSBjYWxsZWUgb2YgW2ZdIHdpbGxcbiAgICAgIHJhaXNlIGBFZmZlY3QuVW5oYW5kbGVkYCwgcmVnYXJkbGVzcyBvZiBhbnkgZWZmZWN0IGhhbmRsZXJzIGluc3RhbGxlZFxuICAgICAgYmVmb3JlIHRoZSBjYWxsIHRvIGBhc3N1bWVfbm9fcGVyZm9ybWAsIHVubGVzcyBhIG5ldyBlZmZlY3QgaGFuZGxlciB3YXNcbiAgICAgIGluc3RhbGxlZCBpbiB0aGUgbWVhbnRpbWUuXG5cbiAgICAgIFRoaXMgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIHdoZW4gZG91YmxlIHRyYW5zbGF0aW9uIGlzIGRpc2FibGVkLiAqKVxuZW5kID0gc3RydWN0XG4gIGV4dGVybmFsIGFzc3VtZV9ub19wZXJmb3JtIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2Fzc3VtZV9ub19wZXJmb3JtXCJcbmVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiSnNvb19ydW50aW1lX1J1bnRpbWVfdmVyc2lvbiIsIlN0ZGxpYl9DYWxsYmFjayIsImVmZmVjdHMiLCJwYXJhbSIsIm1hdGNoIiwidmVyc2lvbiIsImdpdF92ZXJzaW9uIiwiRXhuIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQywrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUE7QUFBQSxZQUFBQyxRQUFBQztBQUFBQSxRQUFBQyxRQ2lLWTtBQUFBLElBQVcsb0JBRU47QUFBQSxJQUZNLHlCQUNEO0FBQUEsSUFEQztBQUFBLEtBSVY7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUFDLFVEckt6QjtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsR0N3TVU7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQTREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHhNdEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3MzkyNSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc19vZl9vY2FtbC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL2pzX29mX29jYW1sL2ltcG9ydC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEpzX29mX29jYW1sXG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4gKiBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbiAqKVxuXG5tb2R1bGUgUG9seSA9IHN0cnVjdFxuICBleHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcblxuICBleHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuXG4gIGV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuXG4gIGV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxuICBleHRlcm5hbCBlcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5lbmRcblxubW9kdWxlIEludF9yZXBsYWNlX3BvbHltb3JwaGljX2NvbXBhcmUgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgKCA8ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA8PSApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcblxuICBleHRlcm5hbCAoIDw+ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA9ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA+ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA+PSApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcblxuICBleHRlcm5hbCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxuICBleHRlcm5hbCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBsZXQgbWF4ICh4IDogaW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuICBsZXQgbWluICh4IDogaW50KSB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmVuZFxuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG5cbiAgbGV0IGVxdWFsICh4IDogc3RyaW5nKSAoeSA6IHN0cmluZykgPSBQb2x5LmVxdWFsIHggeVxuZW5kXG5cbm1vZHVsZSBDaGFyID0gc3RydWN0XG4gIGluY2x1ZGUgQ2hhclxuXG4gIGxldCBlcXVhbCAoeCA6IGNoYXIpICh5IDogY2hhcikgPSBQb2x5LmVxdWFsIHggeVxuZW5kXG5cbmluY2x1ZGUgSW50X3JlcGxhY2VfcG9seW1vcnBoaWNfY29tcGFyZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsIm1heCIsIngiLCJ5IiwibWluIiwibWFrZSIsImluaXQiLCJlbXB0eSIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJibGl0IiwiY29uY2F0IiwiY2F0IiwiY29tcGFyZSIsInN0YXJ0c193aXRoIiwiZW5kc193aXRoIiwiY29udGFpbnNfZnJvbSIsInJjb250YWluc19mcm9tIiwiY29udGFpbnMiLCJzdWIiLCJzcGxpdF9vbl9jaGFyIiwibWFwIiwibWFwaSIsImZvbGRfbGVmdCIsImZvbGRfcmlnaHQiLCJmb3JfYWxsIiwiZXhpc3RzIiwidHJpbSIsImVzY2FwZWQiLCJ1cHBlcmNhc2VfYXNjaWkiLCJsb3dlcmNhc2VfYXNjaWkiLCJjYXBpdGFsaXplX2FzY2lpIiwidW5jYXBpdGFsaXplX2FzY2lpIiwiaXRlciIsIml0ZXJpIiwiaW5kZXhfZnJvbSIsImluZGV4X2Zyb21fb3B0IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfZnJvbV9vcHQiLCJpbmRleCIsImluZGV4X29wdCIsInJpbmRleCIsInJpbmRleF9vcHQiLCJ0b19zZXEiLCJ0b19zZXFpIiwib2Zfc2VxIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X3VpbnQ4IiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X25lIiwiZ2V0X3VpbnQxNl9iZSIsImdldF91aW50MTZfbGUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MzJfbmUiLCJoYXNoIiwic2VlZGVkX2hhc2giLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50NjRfbmUiLCJnZXRfaW50NjRfYmUiLCJnZXRfaW50NjRfbGUiLCJlcXVhbCIsImNociJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsWUFBQUMsSUFBQUMsR0FBQUMsR0NxRHdCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFGLEdBQUFDLEdBRXZCLHFCQUF1QjtBQUFBO0FBQUEsSUFBQUUsT0R2RC9DO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUF6QyxZQUFBO0FBQUEsSUFBQUUsb0JBQUE7QUFBQSxJQUFBRCxvQkFBQTtBQUFBLElBQUFoQixZQUFBO0FBQUEsSUFBQWlELGdCQUFBO0FBQUEsSUFBQUQsU0FBQTtBQUFBLFlBQUFPLFFBQUFsRSxHQUFBQyxHQ21Fb0MsdUJBQWM7QUFBQSxHRG5FbEQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3NDA5NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc19vZl9vY2FtbC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL2pzX29mX29jYW1sL2pzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogSnNfb2Zfb2NhbWwgbGlicmFyeVxuICogaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbiAqIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuICogTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5vcGVuISBJbXBvcnRcblxuKCogVGhpcyBsb2NhbCBtb2R1bGUgW0pzXSBpcyBuZWVkZWQgc28gdGhhdCB0aGUgcHB4X2pzIGV4dGVuc2lvbiB3b3JrIHdpdGhpbiB0aGF0IGZpbGUuICopXG5tb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSArJ2EgdFxuXG4gIHR5cGUgKC0nYSwgKydiKSBtZXRoX2NhbGxiYWNrXG5cbiAgbW9kdWxlIFVuc2FmZSA9IHN0cnVjdFxuICAgIHR5cGUgdG9wXG5cbiAgICB0eXBlIGFueSA9IHRvcCB0XG5cbiAgICB0eXBlIGFueV9qc19hcnJheSA9IGFueVxuXG4gICAgZXh0ZXJuYWwgaW5qZWN0IDogJ2EgLT4gYW55ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgZXh0ZXJuYWwgY29lcmNlIDogXyB0IC0+IF8gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGV4dGVybmFsIGdldCA6ICdhIC0+ICdiIC0+ICdjID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgICBleHRlcm5hbCBzZXQgOiAnYSAtPiAnYiAtPiAnYyAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgICBleHRlcm5hbCBkZWxldGUgOiAnYSAtPiAnYiAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgICBleHRlcm5hbCBjYWxsIDogJ2EgLT4gJ2IgLT4gYW55IGFycmF5IC0+ICdjID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgZnVuX2NhbGwgOiAnYSAtPiBhbnkgYXJyYXkgLT4gJ2IgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogJ2EgLT4gc3RyaW5nIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgbmV3X29iaiA6ICdhIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19uZXdcIlxuXG4gICAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiAnYSAtPiBhbnlfanNfYXJyYXkgLT4gJ2IgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gICAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIGFueSkgYXJyYXkgLT4gJ2EgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICAgIGV4dGVybmFsIGVxdWFscyA6ICdhIC0+ICdiIC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiAnYSAtPiAnYiAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gICAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgICBsZXQgZ2xvYmFsID0gcHVyZV9qc19leHByIFwiZ2xvYmFsVGhpc1wiXG5cbiAgICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICAgKGFueV9qc19hcnJheSAtPiAnYikgLT4gKCdjLCBhbnlfanNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICAgIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgICAoJ2IgLT4gYW55X2pzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIGFueV9qc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgICBleHRlcm5hbCBydW50aW1lX3ZhbHVlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzb29fcnVudGltZV92YWx1ZVwiXG5cbiAgICAoKiBERVBSRUNBVEVEICopXG4gICAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbiAgZW5kXG5cbiAgKCoqKiopXG5cbiAgdHlwZSAnYSBvcHQgPSAnYVxuXG4gIHR5cGUgJ2Egb3B0ZGVmID0gJ2FcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGxldCBudWxsIDogJ2Egb3B0ID0gVW5zYWZlLnB1cmVfanNfZXhwciBcIm51bGxcIlxuXG4gIGV4dGVybmFsIHNvbWUgOiAnYSAtPiAnYSBvcHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IHVuZGVmaW5lZCA6ICdhIG9wdGRlZiA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJ1bmRlZmluZWRcIlxuXG4gIGV4dGVybmFsIGRlZiA6ICdhIC0+ICdhIG9wdGRlZiA9IFwiJWlkZW50aXR5XCJcblxuICBtb2R1bGUgdHlwZSBPUFQgPSBzaWdcbiAgICB0eXBlICdhIHRcblxuICAgIHZhbCBlbXB0eSA6ICdhIHRcblxuICAgIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG5cbiAgICB2YWwgbWFwIDogJ2EgdCAtPiAoJ2EgLT4gJ2IpIC0+ICdiIHRcblxuICAgIHZhbCBiaW5kIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuXG4gICAgdmFsIHRlc3QgOiAnYSB0IC0+IGJvb2xcblxuICAgIHZhbCBpdGVyIDogJ2EgdCAtPiAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG4gICAgdmFsIGNhc2UgOiAnYSB0IC0+ICh1bml0IC0+ICdiKSAtPiAoJ2EgLT4gJ2IpIC0+ICdiXG5cbiAgICB2YWwgZ2V0IDogJ2EgdCAtPiAodW5pdCAtPiAnYSkgLT4gJ2FcblxuICAgIHZhbCBvcHRpb24gOiAnYSBvcHRpb24gLT4gJ2EgdFxuXG4gICAgdmFsIHRvX29wdGlvbiA6ICdhIHQgLT4gJ2Egb3B0aW9uXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG4gIGVuZFxuXG4gIG1vZHVsZSBPcHQgOiBPUFQgd2l0aCB0eXBlICdhIHQgPSAnYSBvcHQgPSBzdHJ1Y3RcbiAgICB0eXBlICdhIHQgPSAnYSBvcHRcblxuICAgIGxldCBlbXB0eSA9IG51bGxcblxuICAgIGxldCByZXR1cm4gPSBzb21lXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgICBsZXQgbWFwIHggZiA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBudWxsIGVsc2UgcmV0dXJuIChmIHgpXG5cbiAgICBsZXQgYmluZCB4IGYgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gbnVsbCBlbHNlIGYgeFxuXG4gICAgbGV0IHRlc3QgeCA9IG5vdCAoZXF1YWxzIHggbnVsbClcblxuICAgIGxldCBpdGVyIHggZiA9IGlmIG5vdCAoZXF1YWxzIHggbnVsbCkgdGhlbiBmIHhcblxuICAgIGxldCBjYXNlIHggZiBnID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIGYgKCkgZWxzZSBnIHhcblxuICAgIGxldCBnZXQgeCBmID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIGYgKCkgZWxzZSB4XG5cbiAgICBsZXQgb3B0aW9uIHggPVxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gZW1wdHlcbiAgICAgIHwgU29tZSB4IC0+IHJldHVybiB4XG5cbiAgICBsZXQgdG9fb3B0aW9uIHggPSBjYXNlIHggKGZ1biAoKSAtPiBOb25lKSAoZnVuIHggLT4gU29tZSB4KVxuICBlbmRcblxuICBtb2R1bGUgT3B0ZGVmIDogT1BUIHdpdGggdHlwZSAnYSB0ID0gJ2Egb3B0ZGVmID0gc3RydWN0XG4gICAgdHlwZSAnYSB0ID0gJ2Egb3B0ZGVmXG5cbiAgICBsZXQgZW1wdHkgPSB1bmRlZmluZWRcblxuICAgIGxldCByZXR1cm4gPSBkZWZcblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAgIGxldCBtYXAgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIHVuZGVmaW5lZCBlbHNlIHJldHVybiAoZiB4KVxuXG4gICAgbGV0IGJpbmQgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIHVuZGVmaW5lZCBlbHNlIGYgeFxuXG4gICAgbGV0IHRlc3QgeCA9IG5vdCAoc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZClcblxuICAgIGxldCBpdGVyIHggZiA9IGlmIG5vdCAoc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCkgdGhlbiBmIHhcblxuICAgIGxldCBjYXNlIHggZiBnID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIGYgKCkgZWxzZSBnIHhcblxuICAgIGxldCBnZXQgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIGYgKCkgZWxzZSB4XG5cbiAgICBsZXQgb3B0aW9uIHggPVxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gZW1wdHlcbiAgICAgIHwgU29tZSB4IC0+IHJldHVybiB4XG5cbiAgICBsZXQgdG9fb3B0aW9uIHggPSBjYXNlIHggKGZ1biAoKSAtPiBOb25lKSAoZnVuIHggLT4gU29tZSB4KVxuICBlbmRcblxuICAoKioqKilcblxuICBsZXQgY29lcmNlIHggZiBnID0gT3B0LmdldCAoZiB4KSAoZnVuICgpIC0+IGcgeClcblxuICBsZXQgY29lcmNlX29wdCB4IGYgZyA9IE9wdC5nZXQgKE9wdC5iaW5kIHggZikgKGZ1biAoKSAtPiBnIHgpXG5cbiAgKCoqKiopXG5cbiAgdHlwZSArJ2EgbWV0aFxuXG4gIHR5cGUgKydhIGdlbl9wcm9wXG5cbiAgdHlwZSAnYSByZWFkb25seV9wcm9wID0gPCBnZXQgOiAnYSA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSB3cml0ZW9ubHlfcHJvcCA9IDwgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSBwcm9wID0gPCBnZXQgOiAnYSA7IHNldCA6ICdhIC0+IHVuaXQgPiBnZW5fcHJvcFxuXG4gIHR5cGUgJ2Egb3B0ZGVmX3Byb3AgPSA8IGdldCA6ICdhIG9wdGRlZiA7IHNldCA6ICdhIC0+IHVuaXQgPiBnZW5fcHJvcFxuXG4gIHR5cGUgKydhIGNvbnN0clxuXG4gICgqKioqKVxuXG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAodW5pdCwgJ2EpIG1ldGhfY2FsbGJhY2tcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcblxuICAoKioqKilcblxuICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICgqKioqKVxuXG4gIGxldCBfdHJ1ZSA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJ0cnVlXCJcblxuICBsZXQgX2ZhbHNlID0gVW5zYWZlLnB1cmVfanNfZXhwciBcImZhbHNlXCJcblxuICB0eXBlIG1hdGNoX3Jlc3VsdF9oYW5kbGVcblxuICB0eXBlIHN0cmluZ19hcnJheVxuXG4gIGNsYXNzIHR5cGUgbnVtYmVyID0gb2JqZWN0XG4gICAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvU3RyaW5nX3JhZGl4IDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0ZpeGVkIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0V4cG9uZW50aWFsIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRXhwb25lbnRpYWxfZGlnaXRzIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1ByZWNpc2lvbiA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG4gIGVuZFxuXG4gIGFuZCBqc19zdHJpbmcgPSBvYmplY3RcbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdmFsdWVPZiA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjaGFyQXQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNoYXJDb2RlQXQgOiBpbnQgLT4gbnVtYmVyIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvZGVQb2ludEF0IDogaW50IC0+IG51bWJlciB0IG9wdGRlZiBtZXRoXG5cbiAgICAoKiBUaGlzIG1heSByZXR1cm4gTmFOLi4uICopXG4gICAgbWV0aG9kIGNvbmNhdCA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfMiA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfMyA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfNCA6XG4gICAgICBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgaW5kZXhPZiA6IGpzX3N0cmluZyB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgaW5kZXhPZl9mcm9tIDoganNfc3RyaW5nIHQgLT4gaW50IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgbGFzdEluZGV4T2YgOiBqc19zdHJpbmcgdCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGxhc3RJbmRleE9mX2Zyb20gOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBsb2NhbGVDb21wYXJlIDoganNfc3RyaW5nIHQgLT4gbnVtYmVyIHQgbWV0aFxuXG4gICAgbWV0aG9kIF9tYXRjaCA6IHJlZ0V4cCB0IC0+IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCBvcHQgbWV0aFxuXG4gICAgbWV0aG9kIG5vcm1hbGl6ZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBub3JtYWxpemVfZm9ybSA6IG5vcm1hbGl6YXRpb24gdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgcmVwbGFjZSA6IHJlZ0V4cCB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCByZXBsYWNlX3N0cmluZyA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzZWFyY2ggOiByZWdFeHAgdCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIHNsaWNlIDogaW50IC0+IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc2xpY2VfZW5kIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdCA6IGpzX3N0cmluZyB0IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9saW1pdGVkIDoganNfc3RyaW5nIHQgLT4gaW50IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9yZWdFeHAgOiByZWdFeHAgdCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3BsaXRfcmVnRXhwTGltaXRlZCA6IHJlZ0V4cCB0IC0+IGludCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3Vic3RyaW5nIDogaW50IC0+IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3Vic3RyaW5nX3RvRW5kIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvd2VyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZUxvd2VyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1VwcGVyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZVVwcGVyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0cmltIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGxlbmd0aCA6IGludCByZWFkb25seV9wcm9wXG4gIGVuZFxuXG4gIGFuZCByZWdFeHAgPSBvYmplY3RcbiAgICBtZXRob2QgZXhlYyA6IGpzX3N0cmluZyB0IC0+IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCBvcHQgbWV0aFxuXG4gICAgbWV0aG9kIHRlc3QgOiBqc19zdHJpbmcgdCAtPiBib29sIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNvdXJjZSA6IGpzX3N0cmluZyB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBnbG9iYWwgOiBib29sIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIGlnbm9yZUNhc2UgOiBib29sIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIG11bHRpbGluZSA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgbGFzdEluZGV4IDogaW50IHByb3BcbiAgZW5kXG5cbiAgYW5kIG5vcm1hbGl6YXRpb24gPSBqc19zdHJpbmdcblxuICB0eXBlIG51bWJlcl90ID0gbnVtYmVyIHRcblxuICAoKiBzdHJpbmcgaXMgdXNlZCBieSBwcHhfanMsIGl0IG5lZWRzIHRvIGNvbWUgYmVmb3JlIGFueSB1c2Ugb2YgdGhlXG4gICAgIG5ldyBzeW50YXggaW4gdGhpcyBmaWxlICopXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiBqc19zdHJpbmcgdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IGpzX3N0cmluZyB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGxldCBuZmMgPSBzdHJpbmcgXCJORkNcIlxuXG4gIGxldCBuZmQgPSBzdHJpbmcgXCJORkRcIlxuXG4gIGxldCBuZmtjID0gc3RyaW5nIFwiTkZLQ1wiXG5cbiAgbGV0IG5ma2QgPSBzdHJpbmcgXCJORktEXCJcbmVuZFxuXG5pbmNsdWRlIEpzXG5cbmNsYXNzIHR5cGUgc3RyaW5nX2NvbnN0ciA9IG9iamVjdFxuICBtZXRob2QgZnJvbUNoYXJDb2RlIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5sZXQgc3RyaW5nX2NvbnN0ciA9IFVuc2FmZS5nbG9iYWwjIy5fU3RyaW5nXG5cbmxldCByZWdFeHAgPSBVbnNhZmUuZ2xvYmFsIyMuX1JlZ0V4cFxuXG5sZXQgcmVnRXhwX2NvcHkgPSByZWdFeHBcblxubGV0IHJlZ0V4cF93aXRoRmxhZ3MgPSByZWdFeHBcblxuY2xhc3MgdHlwZSBbJ2FdIGpzX2FycmF5ID0gb2JqZWN0XG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIGNvbmNhdCA6ICdhIGpzX2FycmF5IHQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIGpvaW4gOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHBvcCA6ICdhIG9wdGRlZiBtZXRoXG5cbiAgbWV0aG9kIHB1c2ggOiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzIgOiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzMgOiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzQgOiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCByZXZlcnNlIDogJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNoaWZ0IDogJ2Egb3B0ZGVmIG1ldGhcblxuICBtZXRob2Qgc2xpY2UgOiBpbnQgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzbGljZV9lbmQgOiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNvcnQgOiAoJ2EgLT4gJ2EgLT4gbnVtYmVyX3QpIGNhbGxiYWNrIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzb3J0X2FzU3RyaW5ncyA6ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2UgOiBpbnQgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfMSA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV8yIDogaW50IC0+IGludCAtPiAnYSAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzMgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfNCA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnQgOiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzIgOiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzMgOiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzQgOiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBzb21lIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IGJvb2wgdCkgY2FsbGJhY2sgLT4gYm9vbCB0IG1ldGhcblxuICBtZXRob2QgZXZlcnkgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiBib29sIHQgbWV0aFxuXG4gIG1ldGhvZCBmb3JFYWNoIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXQgbWV0aFxuXG4gIG1ldGhvZCBtYXAgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBmaWx0ZXIgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2QgcmVkdWNlX2luaXQgOiAoJ2IgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiIC0+ICdiIG1ldGhcblxuICBtZXRob2QgcmVkdWNlIDogKCdhIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdhKSBjYWxsYmFjayAtPiAnYSBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZVJpZ2h0X2luaXQgOlxuICAgICgnYiAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgLT4gJ2IgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2VSaWdodCA6ICgnYSAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYSkgY2FsbGJhY2sgLT4gJ2EgbWV0aFxuXG4gIG1ldGhvZCBsZW5ndGggOiBpbnQgcHJvcFxuZW5kXG5cbmxldCBvYmplY3RfY29uc3RydWN0b3IgPSBVbnNhZmUuZ2xvYmFsIyMuX09iamVjdFxuXG5sZXQgb2JqZWN0X2tleXMgbyA6IGpzX3N0cmluZyB0IGpzX2FycmF5IHQgPSBvYmplY3RfY29uc3RydWN0b3IjI2tleXMgb1xuXG5sZXQgYXJyYXlfY29uc3RydWN0b3IgPSBVbnNhZmUuZ2xvYmFsIyMuX0FycmF5XG5cbmxldCBhcnJheV9lbXB0eSA9IGFycmF5X2NvbnN0cnVjdG9yXG5cbmxldCBhcnJheV9sZW5ndGggPSBhcnJheV9jb25zdHJ1Y3RvclxuXG5sZXQgYXJyYXlfZ2V0IDogJ2EgI2pzX2FycmF5IHQgLT4gaW50IC0+ICdhIG9wdGRlZiA9IFVuc2FmZS5nZXRcblxubGV0IGFycmF5X3NldCA6ICdhICNqc19hcnJheSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gVW5zYWZlLnNldFxuXG5sZXQgYXJyYXlfbWFwX3BvbHkgOlxuICAgICdhICNqc19hcnJheSB0IC0+ICgnYSAtPiBpbnQgLT4gJ2EgI2pzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiICNqc19hcnJheSB0ID1cbiBmdW4gYSBjYiAtPiAoVW5zYWZlLmNvZXJjZSBhKSMjbWFwIGNiXG5cbmxldCBhcnJheV9tYXAgZiBhID0gYXJyYXlfbWFwX3BvbHkgYSAod3JhcF9jYWxsYmFjayAoZnVuIHggX2lkeCBfIC0+IGYgeCkpXG5cbmxldCBhcnJheV9tYXBpIGYgYSA9IGFycmF5X21hcF9wb2x5IGEgKHdyYXBfY2FsbGJhY2sgKGZ1biB4IGlkeCBfIC0+IGYgaWR4IHgpKVxuXG5jbGFzcyB0eXBlIG1hdGNoX3Jlc3VsdCA9IG9iamVjdFxuICBpbmhlcml0IFtqc19zdHJpbmcgdF0ganNfYXJyYXlcblxuICBtZXRob2QgaW5kZXggOiBpbnQgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBpbnB1dCA6IGpzX3N0cmluZyB0IHJlYWRvbmx5X3Byb3BcbmVuZFxuXG5sZXQgc3RyX2FycmF5IDogc3RyaW5nX2FycmF5IHQgLT4ganNfc3RyaW5nIHQganNfYXJyYXkgdCA9IFVuc2FmZS5jb2VyY2VcblxubGV0IG1hdGNoX3Jlc3VsdCA6IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCAtPiBtYXRjaF9yZXN1bHQgdCA9IFVuc2FmZS5jb2VyY2VcblxuY2xhc3MgdHlwZSBkYXRlID0gb2JqZWN0XG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9EYXRlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b1RpbWVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZURhdGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlVGltZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdmFsdWVPZiA6IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZ2V0VGltZSA6IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZ2V0RnVsbFllYXIgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENGdWxsWWVhciA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldE1vbnRoIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTW9udGggOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXREYXRlIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDRGF0ZSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldERheSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0RheSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldEhvdXJzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDSG91cnMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRNaW51dGVzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTWludXRlcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENTZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0TWlsbGlzZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTWlsbGlzZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VGltZXpvbmVPZmZzZXQgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBzZXRUaW1lIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRGdWxsWWVhciA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0Z1bGxZZWFyIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0TW9udGggOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNb250aCA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldERhdGUgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENEYXRlIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0SG91cnMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENIb3VycyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldE1pbnV0ZXMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNaW51dGVzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0U2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ1NlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRNaWxsaXNlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNaWxsaXNlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCB0b1VUQ1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9JU09TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvSlNPTiA6ICdhIC0+IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5jbGFzcyB0eXBlIGRhdGVfY29uc3RyID0gb2JqZWN0XG4gIG1ldGhvZCBwYXJzZSA6IGpzX3N0cmluZyB0IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19tb250aCA6IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX2RheSA6IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX2hvdXIgOiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21pbiA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX3NlYyA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19tcyA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG5vdyA6IG51bWJlcl90IG1ldGhcbmVuZFxuXG5sZXQgZGF0ZV9jb25zdHIgPSBVbnNhZmUuZ2xvYmFsIyMuX0RhdGVcblxubGV0IGRhdGUgOiBkYXRlX2NvbnN0ciB0ID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbm93IDogZGF0ZSB0IGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX2Zyb21UaW1lVmFsdWUgOiAobnVtYmVyX3QgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9tb250aCA6IChpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfZGF5IDogKGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfaG91ciA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9taW4gOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX3NlYyA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21zIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9XG4gIGRhdGVfY29uc3RyXG5cbmNsYXNzIHR5cGUgbWF0aCA9IG9iamVjdFxuICBtZXRob2QgX0UgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MTjIgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MTjEwIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfTE9HMkUgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MT0cxMEUgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9QSSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX1NRUlQxXzJfIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfU1FSVDIgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIGFicyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYWNvcyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXNpbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXRhbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXRhbjIgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGNlaWwgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGNvcyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZXhwIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBmbG9vciA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbG9nIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtYXggOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heF8zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtYXhfNCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWluIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW5fMyA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWluXzQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHBvdyA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgcmFuZG9tIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCByb3VuZCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2luIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzcXJ0IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCB0YW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5lbmRcblxubGV0IG1hdGggPSBVbnNhZmUuZ2xvYmFsIyMuX01hdGhcblxuY2xhc3MgdHlwZSBlcnJvciA9IG9iamVjdFxuICBtZXRob2QgbmFtZSA6IGpzX3N0cmluZyB0IHByb3BcblxuICBtZXRob2QgbWVzc2FnZSA6IGpzX3N0cmluZyB0IHByb3BcblxuICBtZXRob2Qgc3RhY2sgOiBqc19zdHJpbmcgdCBvcHRkZWYgcHJvcFxuXG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5sZXQgZXJyb3JfY29uc3RyID0gVW5zYWZlLmdsb2JhbCMjLl9FcnJvclxuXG5tb2R1bGUgSnNfZXJyb3IgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvcl90ID0gZXJyb3IgdFxuXG4gIGluY2x1ZGUgSnNvb19ydW50aW1lLkVycm9yXG5cbiAgZXh0ZXJuYWwgb2ZfZXJyb3IgOiBlcnJvcl90IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgZXh0ZXJuYWwgdG9fZXJyb3IgOiB0IC0+IGVycm9yX3QgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IG5hbWUgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjIy5uYW1lXG5cbiAgbGV0IG1lc3NhZ2UgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjIy5tZXNzYWdlXG5cbiAgbGV0IHN0YWNrIChlIDogdCkgOiBzdHJpbmcgb3B0aW9uID1cbiAgICBPcHQudG9fb3B0aW9uIChPcHQubWFwICh0b19lcnJvciBlKSMjLnN0YWNrIHRvX3N0cmluZylcblxuICBsZXQgdG9fc3RyaW5nIGUgPSB0b19zdHJpbmcgKHRvX2Vycm9yIGUpIyN0b1N0cmluZ1xuZW5kXG5cbm1vZHVsZSBNYWdpYyA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBUID0gc2lnXG4gICAgZXhjZXB0aW9uIEVycm9yIG9mIGVycm9yIHRcbiAgZW5kXG5cbiAgdHlwZSAoJ2EsICdiKSBlcSA9IEVxIDogKCdhLCAnYSkgZXFcblxuICBsZXQgKGVxIDogKGVycm9yIHQsIEpzX2Vycm9yLnQpIGVxKSA9IE9iai5tYWdpYyBFcVxuXG4gIGxldCBtID1cbiAgICBtYXRjaCBlcSB3aXRoXG4gICAgfCBFcSAtPlxuICAgICAgICAobW9kdWxlIHN0cnVjdFxuICAgICAgICAgIGV4Y2VwdGlvbiBFcnJvciA9IEpzX2Vycm9yLkV4blxuICAgICAgICBlbmQgOiBUKVxuXG4gIG1vZHVsZSBFcnJvciA9ICh2YWwgbSA6IFQpXG5lbmRcblxuaW5jbHVkZSBNYWdpYy5FcnJvclxuXG5sZXQgcmFpc2VfanNfZXJyb3IgZSA9IEpzX2Vycm9yLnJhaXNlXyAoSnNfZXJyb3Iub2ZfZXJyb3IgZSlcblxubGV0IHN0cmluZ19vZl9lcnJvciBlID0gSnNfZXJyb3IudG9fc3RyaW5nIChKc19lcnJvci5vZl9lcnJvciBlKVxuXG5sZXQgZXhuX3dpdGhfanNfYmFja3RyYWNlID0gSnNfZXJyb3IuYXR0YWNoX2pzX2JhY2t0cmFjZVxuXG5leHRlcm5hbCBqc19lcnJvcl9vZl9leG4gOiBleG4gLT4gZXJyb3IgdCBvcHQgPSBcImNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uXCJcblxuY2xhc3MgdHlwZSBqc29uID0gb2JqZWN0XG4gIG1ldGhvZCBwYXJzZSA6IGpzX3N0cmluZyB0IC0+ICdhIG1ldGhcblxuICBtZXRob2Qgc3RyaW5naWZ5IDogJ2EgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBfSlNPTiA6IGpzb24gdCA9IFVuc2FmZS5nbG9iYWwjIy5fSlNPTlxuXG5sZXQgZGVjb2RlVVJJIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmRlY29kZVVSSSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGRlY29kZVVSSUNvbXBvbmVudCAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5kZWNvZGVVUklDb21wb25lbnQgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBlbmNvZGVVUkkgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZW5jb2RlVVJJIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZW5jb2RlVVJJQ29tcG9uZW50IChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmVuY29kZVVSSUNvbXBvbmVudCBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGVzY2FwZSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5lc2NhcGUgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCB1bmVzY2FwZSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy51bmVzY2FwZSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxuZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gYm9vbCB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbmV4dGVybmFsIHRvX2Jvb2wgOiBib29sIHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiAnYSBqc19hcnJheSB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG5leHRlcm5hbCB0b19hcnJheSA6ICdhIGpzX2FycmF5IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG5leHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IGpzX3N0cmluZyB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbmV4dGVybmFsIGZsb2F0IDogZmxvYXQgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbmV4dGVybmFsIHRvX2Zsb2F0IDogbnVtYmVyX3QgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG5leHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiBudW1iZXIgdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogbnVtYmVyIHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG5leHRlcm5hbCBpbnQzMiA6IGludDMyIC0+IG51bWJlcl90ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG5leHRlcm5hbCB0b19pbnQzMiA6IG51bWJlcl90IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuZXh0ZXJuYWwgbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IG51bWJlcl90ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuZXh0ZXJuYWwgdG9fbmF0aXZlaW50IDogbnVtYmVyX3QgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbmV4dGVybmFsIHR5cGVvZiA6IF8gdCAtPiBqc19zdHJpbmcgdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG5leHRlcm5hbCBpbnN0YW5jZW9mIDogXyB0IC0+IF8gY29uc3RyIC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbmxldCBpc05hTiAoaSA6ICdhKSA6IGJvb2wgPVxuICB0b19ib29sIChVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmlzTmFOIFt8IFVuc2FmZS5pbmplY3QgaSB8XSlcblxubGV0IHBhcnNlSW50IChzIDoganNfc3RyaW5nIHQpIDogaW50ID1cbiAgbGV0IHMgPSBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnBhcnNlSW50IFt8IFVuc2FmZS5pbmplY3QgcyB8XSBpblxuICBpZiBpc05hTiBzIHRoZW4gZmFpbHdpdGggXCJwYXJzZUludFwiIGVsc2Ugc1xuXG5sZXQgcGFyc2VGbG9hdCAocyA6IGpzX3N0cmluZyB0KSA6IG51bWJlcl90ID1cbiAgbGV0IHMgPSBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnBhcnNlRmxvYXQgW3wgVW5zYWZlLmluamVjdCBzIHxdIGluXG4gIGlmIGlzTmFOIHMgdGhlbiBmYWlsd2l0aCBcInBhcnNlRmxvYXRcIiBlbHNlIHNcblxubGV0IF8gPVxuICBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIChmdW4gZSAtPlxuICAgICAgaWYgaW5zdGFuY2VvZiAoT2JqLm1hZ2ljIGUgOiA8IC4uID4gdCkgZXJyb3JfY29uc3RyXG4gICAgICB0aGVuXG4gICAgICAgIGxldCBlID0gSnNfZXJyb3Iub2ZfZXJyb3IgKE9iai5tYWdpYyBlIDogZXJyb3IgdCkgaW5cbiAgICAgICAgU29tZSAoSnNfZXJyb3IudG9fc3RyaW5nIGUpXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGUgd2l0aFxuICAgICAgICB8IEpzX2Vycm9yLkV4biBlIC0+IFNvbWUgKEpzX2Vycm9yLnRvX3N0cmluZyBlKVxuICAgICAgICB8IF8gLT4gTm9uZSlcblxubGV0IGV4cG9ydF9qcyAoZmllbGQgOiBqc19zdHJpbmcgdCkgeCA9XG4gIFVuc2FmZS5zZXRcbiAgICAoVW5zYWZlLnB1cmVfanNfZXhwciBcImpzb29fZXhwb3J0c1wiKVxuICAgIGZpZWxkXG4gICAgKGlmXG4gICAgICAgU3RyaW5nLmVxdWFsIChKcy50b19zdHJpbmcgKHR5cGVvZiAoT2JqLm1hZ2ljIHgpKSkgXCJmdW5jdGlvblwiXG4gICAgICAgKCogZnVuY3Rpb24gd2l0aCBhcml0eS9sZW5ndGggZXF1YWwgdG8gemVybyBhcmUgYWxyZWFkeSB3cmFwcGVkICopXG4gICAgICAgJiYgVW5zYWZlLmdldCAoT2JqLm1hZ2ljIHgpIChKcy5zdHJpbmcgXCJsZW5ndGhcIikgPiAwXG4gICAgIHRoZW4gT2JqLm1hZ2ljICh3cmFwX2NhbGxiYWNrIChPYmoubWFnaWMgeCkpXG4gICAgIGVsc2UgeClcblxubGV0IGV4cG9ydCBmaWVsZCB4ID0gZXhwb3J0X2pzIChzdHJpbmcgZmllbGQpIHhcblxubGV0IGV4cG9ydF9hbGwgb2JqID1cbiAgbGV0IGtleXMgPSBvYmplY3Rfa2V5cyBvYmogaW5cbiAga2V5cyMjZm9yRWFjaFxuICAgICh3cmFwX2NhbGxiYWNrIChmdW4gKGtleSA6IGpzX3N0cmluZyB0KSBfIF8gLT4gZXhwb3J0X2pzIGtleSAoVW5zYWZlLmdldCBvYmoga2V5KSkpXG5cbigqKioqKVxuXG4oKiBERVBSRUNBVEVEICopXG5cbnR5cGUgZmxvYXRfcHJvcCA9IG51bWJlcl90IHByb3BcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9qc19nZXQiLCJjYW1sX2pzX3NldCIsImNhbWxfanNfd3JhcF9jYWxsYmFjayIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiSnNfb2Zfb2NhbWxfSW1wb3J0IiwiU3RkbGliIiwiSnNvb19ydW50aW1lIiwiU3RkbGliX1ByaW50ZXhjIiwiZ2xvYmFsIiwibnVsbCQiLCJ1bmRlZmluZWQkIiwicmV0dXJuJCIsIm1hcCIsIngiLCJiaW5kIiwidGVzdCIsIml0ZXIiLCJjYXNlJCIsImciLCJnZXQiLCJvcHRpb24iLCJ0b19vcHRpb24iLCJjb2VyY2UiLCJjb2VyY2Vfb3B0Iiwic3RyaW5nX2NvbnN0ciIsInJlZ0V4cCIsIm9iamVjdF9jb25zdHJ1Y3RvciIsIm9iamVjdF9rZXlzIiwidDQiLCJhcnJheV9jb25zdHJ1Y3RvciIsImFycmF5X21hcCIsInQ2IiwiY2IiLCJpZHgiLCJwYXJhbSIsImFycmF5X21hcGkiLCJzdHJfYXJyYXkiLCJtYXRjaF9yZXN1bHQiLCJkYXRlX2NvbnN0ciIsIm1hdGgiLCJlcnJvcl9jb25zdHIiLCJpbmNsdWRlIiwicmFpc2UiLCJleG5fd2l0aF9qc19iYWNrdHJhY2UiLCJvZl9leG4iLCJFcnJvciIsIm5hbWUiLCJ0MTEiLCJtZXNzYWdlIiwidDEyIiwic3RhY2siLCJ0MTMiLCJ0b19zdHJpbmciLCJ0MTQiLCJyYWlzZV9qc19lcnJvciIsImUiLCJzdHJpbmdfb2ZfZXJyb3IiLCJKU09OIiwiZGVjb2RlVVJJIiwicyIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsInVuZXNjYXBlIiwiaXNOYU4iLCJpIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0IiwiZXhwb3J0X2pzIiwiZmllbGQiLCJleHBvcnQkIiwiZXhwb3J0X2FsbCIsIm9iaiIsImtleXMiLCJ0MjYiLCJrZXkiLCJKc19vZl9vY2FtbF9KcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEs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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDdXpCb0I7QUFBQTtBQUFBLEVEdnpCcEIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo3NDM1MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL2R1bmVfX2V4ZV9fU3hfYnJvd3Nlci5jbW8uanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jyb3dzZXIvc3hfYnJvd3Nlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBzeF9icm93c2VyLm1sIOKAlCBPQ2FtbCBTWCBrZXJuZWwgY29tcGlsZWQgdG8gV0FTTS9KUyBmb3IgYnJvd3NlciB1c2UuXG5cbiAgICBFeHBvc2VzIHRoZSBDRUsgbWFjaGluZSwgYnl0ZWNvZGUgVk0sIHBhcnNlciwgYW5kIHByaW1pdGl2ZXMgYXMgYVxuICAgIGdsb2JhbCBbU3hLZXJuZWxdIG9iamVjdCB0aGF0IHRoZSBKUyBwbGF0Zm9ybSBsYXllciBiaW5kcyB0by5cblxuICAgIEZyZXNoIGltcGxlbWVudGF0aW9uIG9uIHRoZSBvY2FtbC12bSBicmFuY2gg4oCUIGJ1aWxkcyBvbiB0aGUgYnl0ZWNvZGVcbiAgICBWTSArIGxhenkgSklUIGluZnJhc3RydWN0dXJlLiAqKVxuXG5vcGVuIEpzX29mX29jYW1sXG5vcGVuIFN4X3R5cGVzXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogT3BhcXVlIHZhbHVlIGhhbmRsZSB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogTm9uLXByaW1pdGl2ZSBTWCB2YWx1ZXMgKGxhbWJkYXMsIGNvbXBvbmVudHMsIHNpZ25hbHMsIGV0Yy4pIGFyZSAgICAqKVxuKCogc3RvcmVkIGhlcmUgYW5kIHJlcHJlc2VudGVkIG9uIHRoZSBKUyBzaWRlIGFzIG9iamVjdHMgd2l0aCBhbiAgICAgICAqKVxuKCogX19zeF9oYW5kbGUgaW50ZWdlciBrZXkuICBQcmVzZXJ2ZXMgaWRlbnRpdHkgYWNyb3NzIEpT4oaUT0NhbWwuICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgX25leHRfaGFuZGxlID0gcmVmIDBcbmxldCBfaGFuZGxlX3RhYmxlIDogKGludCwgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDI1NlxuXG5sZXQgYWxsb2NfaGFuZGxlICh2IDogdmFsdWUpIDogaW50ID1cbiAgbGV0IGlkID0gIV9uZXh0X2hhbmRsZSBpblxuICBpbmNyIF9uZXh0X2hhbmRsZTtcbiAgSGFzaHRibC5yZXBsYWNlIF9oYW5kbGVfdGFibGUgaWQgdjtcbiAgaWRcblxubGV0IGdldF9oYW5kbGUgKGlkIDogaW50KSA6IHZhbHVlID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfaGFuZGxlX3RhYmxlIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiSW52YWxpZCBTWCBoYW5kbGU6ICVkXCIgaWQpKVxuXG4oKiBKUy1zaWRlIG9wYXF1ZSBob3N0IG9iamVjdCB0YWJsZS5cbiAgIEhvc3Qgb2JqZWN0cyAoRE9NIGVsZW1lbnRzLCBjb25zb2xlLCBldGMuKSBhcmUgc3RvcmVkIGhlcmUgdG8gcHJlc2VydmVcbiAgIGlkZW50aXR5IGFjcm9zcyB0aGUgT0NhbWzihpRKUyBib3VuZGFyeS4gUmVwcmVzZW50ZWQgYXMgRGljdCB3aXRoXG4gICBfX2hvc3RfaGFuZGxlIGtleSBvbiB0aGUgT0NhbWwgc2lkZS4gKilcbmxldCBfbmV4dF9ob3N0X2hhbmRsZSA9IHJlZiAwXG5sZXQgX2FsbG9jX2hvc3RfaGFuZGxlID0gSnMuVW5zYWZlLnB1cmVfanNfZXhwclxuICBcIihmdW5jdGlvbigpIHsgdmFyIHQgPSB7fTsgdmFyIG4gPSAwOyByZXR1cm4geyBwdXQ6IGZ1bmN0aW9uKG9iaikgeyB2YXIgaWQgPSBuKys7IHRbaWRdID0gb2JqOyByZXR1cm4gaWQ7IH0sIGdldDogZnVuY3Rpb24oaWQpIHsgcmV0dXJuIHRbaWRdOyB9IH07IH0pKClcIlxubGV0IGhvc3RfcHV0IChvYmogOiBKcy5VbnNhZmUuYW55KSA6IGludCA9XG4gIGxldCBpZCA9ICFfbmV4dF9ob3N0X2hhbmRsZSBpblxuICBpbmNyIF9uZXh0X2hvc3RfaGFuZGxlO1xuICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGwgX2FsbG9jX2hvc3RfaGFuZGxlIFwicHV0XCIgW3wgb2JqIHxdKTtcbiAgaWRcbmxldCBob3N0X2dldF9qcyAoaWQgOiBpbnQpIDogSnMuVW5zYWZlLmFueSA9XG4gIEpzLlVuc2FmZS5tZXRoX2NhbGwgX2FsbG9jX2hvc3RfaGFuZGxlIFwiZ2V0XCIgW3wgSnMuVW5zYWZlLmluamVjdCBpZCB8XVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEdsb2JhbCBlbnZpcm9ubWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiBDbGVhciBzY29wZSBzdGFja3MgYXQgc3RhcnR1cCAqKVxubGV0ICgpID0gU3hfcHJpbWl0aXZlcy5zY29wZV9jbGVhcl9hbGwgKClcblxubGV0IGdsb2JhbF9lbnYgPSBtYWtlX2VudiAoKVxubGV0IF9zeF9yZW5kZXJfbW9kZSA9IHJlZiBmYWxzZVxuXG5sZXQgY2FsbF9zeF9mbiAoZm4gOiB2YWx1ZSkgKGFyZ3MgOiB2YWx1ZSBsaXN0KSA6IHZhbHVlID1cbiAgbGV0IHJlc3VsdCA9IFN4X3J1bnRpbWUuc3hfY2FsbCBmbiBhcmdzIGluXG4gICFTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIHJlc3VsdFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFZhbHVlIGNvbnZlcnNpb246IE9DYW1sIDwtPiBKUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogVGFnIGEgSlMgZnVuY3Rpb24gd2l0aCBfX3N4X2hhbmRsZSBhbmQgX3R5cGUgcHJvcGVydGllcy4gKilcbmxldCBfdGFnX2ZuID0gSnMuVW5zYWZlLnB1cmVfanNfZXhwclxuICBcIihmdW5jdGlvbihmbiwgaGFuZGxlLCB0eXBlKSB7IGZuLl9fc3hfaGFuZGxlID0gaGFuZGxlOyBmbi5fdHlwZSA9IHR5cGU7IHJldHVybiBmbjsgfSlcIlxuXG5sZXQgcmVjIHZhbHVlX3RvX2pzICh2IDogdmFsdWUpIDogSnMuVW5zYWZlLmFueSA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IE5pbCAtPiBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcbiAgfCBCb29sIGIgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCBiKVxuICB8IE51bWJlciBuIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCBuKVxuICB8IEludGVnZXIgbiAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKGZsb2F0X29mX2ludCBuKSlcbiAgfCBTdHJpbmcgcyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgcylcbiAgfCBSYXdIVE1MIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpXG4gIHwgU3ltYm9sIHMgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJzeW1ib2xcIikpO1xuICAgICAgKFwibmFtZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgcykpIHxdKVxuICB8IEtleXdvcmQgayAtPlxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLlVuc2FmZS5vYmogW3xcbiAgICAgIChcIl90eXBlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcImtleXdvcmRcIikpO1xuICAgICAgKFwibmFtZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgaykpIHxdKVxuICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+XG4gICAgbGV0IGFyciA9IGl0ZW1zIHw+IExpc3QubWFwIHZhbHVlX3RvX2pzIHw+IEFycmF5Lm9mX2xpc3QgaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJsaXN0XCIpKTtcbiAgICAgIChcIml0ZW1zXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5IGFycikpIHxdKVxuICB8IERpY3QgZCAtPlxuICAgICgqIENoZWNrIGZvciBfX2hvc3RfaGFuZGxlIOKAlCByZXR1cm4gb3JpZ2luYWwgSlMgb2JqZWN0ICopXG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIl9faG9zdF9oYW5kbGVcIiB3aXRoXG4gICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGhvc3RfZ2V0X2pzIChpbnRfb2ZfZmxvYXQgbilcbiAgICAgfCBfIC0+XG4gICAgICAgbGV0IG9iaiA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICAgICAgIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJfdHlwZVwiKSAoSnMuc3RyaW5nIFwiZGljdFwiKTtcbiAgICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgICAgIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgaykgKHZhbHVlX3RvX2pzIHYpKSBkO1xuICAgICAgIEpzLlVuc2FmZS5pbmplY3Qgb2JqKVxuICAoKiBDYWxsYWJsZSB2YWx1ZXM6IHdyYXAgYXMgSlMgZnVuY3Rpb25zIHdpdGggX19zeF9oYW5kbGUgKilcbiAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBDb250aW51YXRpb24gXyB8IENhbGxjY0NvbnRpbnVhdGlvbiBfIHwgVm1DbG9zdXJlIF8gLT5cbiAgICBsZXQgaGFuZGxlID0gYWxsb2NfaGFuZGxlIHYgaW5cbiAgICBsZXQgaW5uZXIgPSBKcy53cmFwX2NhbGxiYWNrIChmdW4gYXJnc19qcyAtPlxuICAgICAgdHJ5XG4gICAgICAgIGxldCBhcmcgPSBqc190b192YWx1ZSBhcmdzX2pzIGluXG4gICAgICAgIGxldCBhcmdzID0gbWF0Y2ggYXJnIHdpdGggTmlsIC0+IFtdIHwgXyAtPiBbYXJnXSBpblxuICAgICAgICBsZXQgcmVzdWx0ID0gY2FsbF9zeF9mbiB2IGFyZ3MgaW5cbiAgICAgICAgdmFsdWVfdG9fanMgcmVzdWx0XG4gICAgICB3aXRoXG4gICAgICB8IFN4X3ZtLlZtU3VzcGVuZGVkIChyZXF1ZXN0LCB2bSkgLT5cbiAgICAgICAgKCogVHJhbnNmZXIgcmV1c2Vfc3RhY2sgZnJvbSB0aGUgYWN0aXZlIFZNIHRvIHRoZSBzdXNwZW5zaW9uIFZNLlxuICAgICAgICAgICBjYWxsX2Nsb3N1cmVfcmV1c2Ugc2F2ZXMgY2FsbGVyIGZyYW1lcyBvbiBfYWN0aXZlX3ZtIEFGVEVSIHRoZVxuICAgICAgICAgICBpbm5lciBWbVN1c3BlbmRlZCBwcm9wYWdhdGVzLCBzbyB0aGUgc3VzcGVuc2lvbiBWTSBkb2Vzbid0IGhhdmUgdGhlbS4gKilcbiAgICAgICAgKG1hdGNoICFTeF92bS5fYWN0aXZlX3ZtIHdpdGhcbiAgICAgICAgIHwgU29tZSBhY3RpdmUgd2hlbiBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2sgPD4gW10gLT5cbiAgICAgICAgICAgdm0uU3hfdm0ucmV1c2Vfc3RhY2sgPC0gdm0uU3hfdm0ucmV1c2Vfc3RhY2sgQCBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2s7XG4gICAgICAgICAgIGFjdGl2ZS5TeF92bS5yZXVzZV9zdGFjayA8LSBbXVxuICAgICAgICAgfCBfIC0+ICgpKTtcbiAgICAgICAgKCogQnVpbGQge3N1c3BlbmRlZCwgcmVxdWVzdCwgcmVzdW1lfSBhbmQgaGFuZCB0byBfZHJpdmVBc3luYy5cbiAgICAgICAgICAgVGhlIHJlc3VtZSBjYWxsYmFjayBtdXN0IGFsc28gY2F0Y2ggVm1TdXNwZW5kZWQgZm9yIGNoYWluaW5nXG4gICAgICAgICAgIChlLmcuIHJlcGVhdCAzIHRpbWVzIC4uLiB3YWl0IC4uLiBlbmQpLiAqKVxuICAgICAgICBsZXQgcmVjIG1ha2Vfc3VzcGVuc2lvbiByZXEgdiA9XG4gICAgICAgICAgbGV0IG9iaiA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICAgICAgICAgIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJzdXNwZW5kZWRcIikgKEpzLlVuc2FmZS5pbmplY3QgSnMuX3RydWUpO1xuICAgICAgICAgIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXF1ZXN0XCIpICh2YWx1ZV90b19qcyByZXEpO1xuICAgICAgICAgIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXN1bWVcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biByZXN1bHRfanMgLT5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBqc190b192YWx1ZSByZXN1bHRfanMgaW5cbiAgICAgICAgICAgIHRyeSB2YWx1ZV90b19qcyAoU3hfdm0ucmVzdW1lX3ZtIHYgcmVzdWx0KVxuICAgICAgICAgICAgd2l0aFxuICAgICAgICAgICAgfCBTeF92bS5WbVN1c3BlbmRlZCAocmVxMiwgdm0yKSAtPlxuICAgICAgICAgICAgICAoKiBSZXR1cm4gc3VzcGVuc2lvbiBvYmplY3Qg4oCUIHRoZSBKUyBkcml2ZUFzeW5jIGNhbGxlciBoYW5kbGVzIHNjaGVkdWxpbmcgKilcbiAgICAgICAgICAgICAgSnMuVW5zYWZlLmluamVjdCAobWFrZV9zdXNwZW5zaW9uIHJlcTIgdm0yKVxuICAgICAgICAgICAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICAoKiBFbmhhbmNlZCBlcnJvcjogc2hvdyBwZW5kaW5nX2NlayBrb250LCByZXVzZV9zdGFjaywgYW5kIFZNIGZyYW1lIGluZm8gKilcbiAgICAgICAgICAgICAgbGV0IHZtX2ZyYW1lX25hbWVzID0gU3RyaW5nLmNvbmNhdCBcIixcIiAoTGlzdC5tYXAgKGZ1biBmIC0+XG4gICAgICAgICAgICAgICAgbWF0Y2ggZi5TeF92bS5jbG9zdXJlLlN4X3R5cGVzLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCI/XCJcbiAgICAgICAgICAgICAgKSB2LlN4X3ZtLmZyYW1lcykgaW5cbiAgICAgICAgICAgICAgbGV0IGV4dHJhID0gUHJpbnRmLnNwcmludGYgXCIgW3ZtOiBwZW5kaW5nX2Nlaz0lYiByZXVzZT0lZCBmcmFtZXM9WyVzXSBzcD0lZF1cIlxuICAgICAgICAgICAgICAgICh2LlN4X3ZtLnBlbmRpbmdfY2VrIDw+IE5vbmUpXG4gICAgICAgICAgICAgICAgKExpc3QubGVuZ3RoIHYuU3hfdm0ucmV1c2Vfc3RhY2spXG4gICAgICAgICAgICAgICAgdm1fZnJhbWVfbmFtZXNcbiAgICAgICAgICAgICAgICB2LlN4X3ZtLnNwIGluXG4gICAgICAgICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAgICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgICAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIHJlc3VtZTogXCIgXiBtc2cgXiBleHRyYSkpIHxdKTtcbiAgICAgICAgICAgICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSk7XG4gICAgICAgICAgb2JqXG4gICAgICAgIGluXG4gICAgICAgIGxldCBzID0gbWFrZV9zdXNwZW5zaW9uIHJlcXVlc3Qgdm0gaW5cbiAgICAgICAgbGV0IGRyaXZlID0gSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJfZHJpdmVBc3luY1wiKSBpblxuICAgICAgICBpZiBub3QgKEpzLlVuc2FmZS5lcXVhbHMgZHJpdmUgSnMudW5kZWZpbmVkKSB0aGVuXG4gICAgICAgICAgaWdub3JlIChKcy5VbnNhZmUuZnVuX2NhbGwgZHJpdmUgW3wgSnMuVW5zYWZlLmluamVjdCBzIHxdKTtcbiAgICAgICAgSnMuVW5zYWZlLmluamVjdCBzXG4gICAgICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgIGxldCBmbl9pbmZvID0gUHJpbnRmLnNwcmludGYgXCIgW2NhbGxiYWNrICVzIGhhbmRsZT0lZF1cIiAodHlwZV9vZiB2KSBoYW5kbGUgaW5cbiAgICAgICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAgICAgKEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiY29uc29sZVwiKSlcbiAgICAgICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gXCIgXiBtc2cgXiBmbl9pbmZvKSkgfF0pO1xuICAgICAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcbiAgICAgIHwgZXhuIC0+XG4gICAgICAgIGxldCBmbl9pbmZvID0gUHJpbnRmLnNwcmludGYgXCIgW2NhbGxiYWNrICVzIGhhbmRsZT0lZF1cIiAodHlwZV9vZiB2KSBoYW5kbGUgaW5cbiAgICAgICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAgICAgKEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiY29uc29sZVwiKSlcbiAgICAgICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gVU5DQVVHSFQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4biBeIGZuX2luZm8pKSB8XSk7XG4gICAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkgaW5cbiAgICBKcy5VbnNhZmUuZnVuX2NhbGwgX3RhZ19mbiBbfFxuICAgICAgSnMuVW5zYWZlLmluamVjdCBpbm5lcjtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgaGFuZGxlO1xuICAgICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIHYpKSB8XVxuICAoKiBOb24tY2FsbGFibGUgY29tcG91bmQ6IHRhZ2dlZCBvYmplY3Qgd2l0aCBoYW5kbGUgKilcbiAgfCBfIC0+XG4gICAgbGV0IGhhbmRsZSA9IGFsbG9jX2hhbmRsZSB2IGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIHYpKSk7XG4gICAgICAoXCJfX3N4X2hhbmRsZVwiLCBKcy5VbnNhZmUuaW5qZWN0IGhhbmRsZSkgfF0pXG5cbmFuZCBqc190b192YWx1ZSAoanMgOiBKcy5VbnNhZmUuYW55KSA6IHZhbHVlID1cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBqcyBKcy5udWxsIHx8IEpzLlVuc2FmZS5lcXVhbHMganMgSnMudW5kZWZpbmVkIHRoZW4gTmlsXG4gIGVsc2VcbiAgICBsZXQgdHkgPSBKcy50b19zdHJpbmcgKEpzLnR5cGVvZiBqcykgaW5cbiAgICBtYXRjaCB0eSB3aXRoXG4gICAgfCBcIm51bWJlclwiIC0+IE51bWJlciAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGpzKSlcbiAgICB8IFwiYm9vbGVhblwiIC0+IEJvb2wgKEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5jb2VyY2UganMpKVxuICAgIHwgXCJzdHJpbmdcIiAtPiBTdHJpbmcgKEpzLnRvX3N0cmluZyAoSnMuVW5zYWZlLmNvZXJjZSBqcykpXG4gICAgfCBcImZ1bmN0aW9uXCIgLT5cbiAgICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICAgIGxldCBoYXNfaG9zdF9jYiA9IEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5jb2VyY2UgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl9faG9zdF9jYWxsYmFja1wiKSkpIGluXG4gICAgICBpZiBub3QgKEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQpICYmIG5vdCBoYXNfaG9zdF9jYiB0aGVuXG4gICAgICAgIGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpXG4gICAgICBlbHNlXG4gICAgICAgICgqIFBsYWluIEpTIGZ1bmN0aW9uIOKAlCBzdG9yZSBhcyBob3N0IG9iamVjdCBzbyB2YWx1ZV90b19qc1xuICAgICAgICAgICByZXR1cm5zIHRoZSBPUklHSU5BTCBKUyBmdW5jdGlvbiB3aGVuIHBhc3NlZCB0byBob3N0LWNhbGwuXG4gICAgICAgICAgIFRoaXMgcHJlc2VydmVzIHdyYXBwZXJzIGxpa2UgX2RyaXZlQXN5bmMgdGhhdCBob3N0LWNhbGxiYWNrXG4gICAgICAgICAgIGF0dGFjaGVzIGZvciBJTyBzdXNwZW5zaW9uIGhhbmRsaW5nLiAqKVxuICAgICAgICBsZXQgaWQgPSBob3N0X3B1dCBqcyBpblxuICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2hvc3RfaGFuZGxlXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGlkKSk7XG4gICAgICAgIERpY3QgZFxuICAgIHwgXCJvYmplY3RcIiAtPlxuICAgICAgbGV0IGggPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJfX3N4X2hhbmRsZVwiKSBpblxuICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkKSB0aGVuXG4gICAgICAgIGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB0eXBlX2ZpZWxkID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX3R5cGVcIikgaW5cbiAgICAgICAgaWYgSnMuVW5zYWZlLmVxdWFscyB0eXBlX2ZpZWxkIEpzLnVuZGVmaW5lZCB0aGVuIGJlZ2luXG4gICAgICAgICAgaWYgSnMudG9fYm9vbCAoSnMuVW5zYWZlLmdsb2JhbCMjLl9BcnJheSMjaXNBcnJheSBqcykgdGhlbiBiZWdpblxuICAgICAgICAgICAgbGV0IG4gPSBKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcImxlbmd0aFwiKSkpIHw+IGludF9vZl9mbG9hdCBpblxuICAgICAgICAgICAgTGlzdCAoTGlzdC5pbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgICAgIGpzX3RvX3ZhbHVlIChKcy5hcnJheV9nZXQgKEpzLlVuc2FmZS5jb2VyY2UganMpIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSkpXG4gICAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICgqIE9wYXF1ZSBob3N0IG9iamVjdCDigJQgc3RvcmUgaW4gSlMtc2lkZSB0YWJsZSwgcmV0dXJuIERpY3Qgd2l0aCBfX2hvc3RfaGFuZGxlICopXG4gICAgICAgICAgICBsZXQgaWQgPSBob3N0X3B1dCBqcyBpblxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9faG9zdF9oYW5kbGVcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgaWQpKTtcbiAgICAgICAgICAgIERpY3QgZFxuICAgICAgICAgIGVuZFxuICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgIGxldCB0YWcgPSBKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5jb2VyY2UgdHlwZV9maWVsZCkgaW5cbiAgICAgICAgICBtYXRjaCB0YWcgd2l0aFxuICAgICAgICAgIHwgXCJzeW1ib2xcIiAtPiBTeW1ib2wgKEpzLnRvX3N0cmluZyAoSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwibmFtZVwiKSkpXG4gICAgICAgICAgfCBcImtleXdvcmRcIiAtPiBLZXl3b3JkIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIm5hbWVcIikpKVxuICAgICAgICAgIHwgXCJsaXN0XCIgLT5cbiAgICAgICAgICAgIGxldCBpdGVtc19qcyA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIml0ZW1zXCIpIGluXG4gICAgICAgICAgICBsZXQgbiA9IEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSAoSnMuVW5zYWZlLmdldCBpdGVtc19qcyAoSnMuc3RyaW5nIFwibGVuZ3RoXCIpKSkgfD4gaW50X29mX2Zsb2F0IGluXG4gICAgICAgICAgICBMaXN0IChMaXN0LmluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICAgICAganNfdG9fdmFsdWUgKEpzLmFycmF5X2dldCAoSnMuVW5zYWZlLmNvZXJjZSBpdGVtc19qcykgaSB8PiBKcy5PcHRkZWYudG9fb3B0aW9uIHw+IE9wdGlvbi5nZXQpKSlcbiAgICAgICAgICB8IFwiZGljdFwiIC0+XG4gICAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICAgICAgICAgIGxldCBrZXlzID0gSnMuVW5zYWZlLmdsb2JhbCMjLl9PYmplY3QjI2tleXMganMgaW5cbiAgICAgICAgICAgIGxldCBsZW4gPSBrZXlzIyMubGVuZ3RoIGluXG4gICAgICAgICAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgICAgICAgICBsZXQgayA9IEpzLnRvX3N0cmluZyAoSnMuYXJyYXlfZ2V0IGtleXMgaSB8PiBKcy5PcHRkZWYudG9fb3B0aW9uIHw+IE9wdGlvbi5nZXQpIGluXG4gICAgICAgICAgICAgIGlmIGsgPD4gXCJfdHlwZVwiIHRoZW5cbiAgICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBrIChqc190b192YWx1ZSAoSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIGspKSlcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBEaWN0IGRcbiAgICAgICAgICB8IF8gLT4gTmlsXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBOaWxcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBTaWRlLWNoYW5uZWwgcmV0dXJuIChieXBhc3NlcyBqc19vZl9vY2FtbCBzdHJpcHBpbmcgcHJvcGVydGllcykgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2IDogSnMuVW5zYWZlLmFueSkgOiBKcy5VbnNhZmUuYW55ID1cbiAgSnMuVW5zYWZlLnNldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJfX3N4UlwiKSB2OyB2XG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUGVyc2lzdGVudCBWTSBnbG9iYWxzIOKAlCBzeW5jZWQgd2l0aCBnbG9iYWxfZW52ICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCogU3RyaW5nLWtleWVkIG1pcnJvciBvZiBnbG9iYWxfZW52LmJpbmRpbmdzIGZvciBWbUNsb3N1cmVzLlxuICAgVm1DbG9zdXJlcyBmcm9tIGJ5dGVjb2RlIG1vZHVsZXMgaG9sZCB2bV9lbnZfcmVmIHBvaW50aW5nIGhlcmUuXG4gICBNdXN0IHN0YXkgaW4gc3luYyBzbyBWbUNsb3N1cmVzIHNlZSBwb3N0LWJvb3QgZGVmaW5pdGlvbnMuICopXG5sZXQgX3ZtX2dsb2JhbHMgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNTEyXG5sZXQgKCkgPSBTeF90eXBlcy5fZGVmYXVsdF92bV9nbG9iYWxzIDo9IF92bV9nbG9iYWxzXG5sZXQgX2luX2JhdGNoID0gcmVmIGZhbHNlXG5cbigqIFN5bmMgZW524oaSVk06IGNvcHkgYWxsIGJpbmRpbmdzIGZyb20gZ2xvYmFsX2Vudi5iaW5kaW5ncyB0byBfdm1fZ2xvYmFscy5cbiAgIENhbGxlZCBhZnRlciBDRUsgZXZhbC9sb2FkIHNvIFZtQ2xvc3VyZXMgY2FuIHNlZSBuZXcgZGVmaW5pdGlvbnMuICopXG5sZXQgc3luY19lbnZfdG9fdm0gKCkgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBpZCB2IC0+XG4gICAgSGFzaHRibC5yZXBsYWNlIF92bV9nbG9iYWxzICh1bmludGVybiBpZCkgdlxuICApIGdsb2JhbF9lbnYuYmluZGluZ3NcblxuKCogSG9vazogaW50ZXJjZXB0IGVudl9iaW5kIG9uIGdsb2JhbF9lbnYgdG8gYWxzbyB1cGRhdGUgX3ZtX2dsb2JhbHMuXG4gICBPbmx5IHN5bmMgYmluZGluZ3Mgb24gdGhlIGdsb2JhbCBlbnYg4oCUIGxldCBiaW5kaW5ncyBpbiBjaGlsZCBlbnZzXG4gICBtdXN0IE5PVCBsZWFrIGludG8gX3ZtX2dsb2JhbHMgKHRoZXknZCBvdmVyd3JpdGUgcmVhbCBkZWZpbml0aW9ucykuICopXG5sZXQgKCkgPVxuICBTeF90eXBlcy5fZW52X2JpbmRfaG9vayA6PSBTb21lIChmdW4gZW52IG5hbWUgdiAtPlxuICAgIGlmIGVudiA9PSBnbG9iYWxfZW52IHRoZW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyBuYW1lIHYpXG5cbigqIFJldmVyc2UgaG9vazogc3luYyBWTSBHTE9CQUxfU0VUIG11dGF0aW9ucyBiYWNrIHRvIGdsb2JhbF9lbnYuXG4gICBXaXRob3V0IHRoaXMsIHNldCEgaW5zaWRlIEpJVC1jb21waWxlZCBmdW5jdGlvbnMgd3JpdGVzIHRvIF92bV9nbG9iYWxzXG4gICBidXQgbGVhdmVzIGdsb2JhbF9lbnYgc3RhbGUg4oCUIENFSyByZWFkcyB0aGVuIHNlZSB0aGUgb2xkIHZhbHVlLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX3ZtX2dsb2JhbF9zZXRfaG9vayA6PSBTb21lIChmdW4gbmFtZSB2IC0+XG4gICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgKFN4X3R5cGVzLmludGVybiBuYW1lKSB2KVxuXG4oKiBTeW1ib2wgcmVzb2x2ZSBob29rOiB0cmFuc3BhcmVudCBsYXp5IG1vZHVsZSBsb2FkaW5nLlxuICAgV2hlbiBHTE9CQUxfR0VUIGNhbid0IGZpbmQgYSBzeW1ib2wsIHRoaXMgY2FsbHMgdGhlIEpTIF9fcmVzb2x2ZS1zeW1ib2xcbiAgIG5hdGl2ZSB3aGljaCBjaGVja3MgdGhlIG1hbmlmZXN0J3Mgc3ltYm9s4oaSbGlicmFyeSBpbmRleCBhbmQgbG9hZHMgdGhlXG4gICBsaWJyYXJ5IHRoYXQgZXhwb3J0cyBpdC4gIEFmdGVyIGxvYWRpbmcsIHRoZSBzeW1ib2wgaXMgaW4gX3ZtX2dsb2JhbHMuICopXG5sZXQgKCkgPVxuICBTeF90eXBlcy5fc3ltYm9sX3Jlc29sdmVfaG9vayA6PSBTb21lIChmdW4gbmFtZSAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiX19yZXNvbHZlLXN5bWJvbFwiIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSByZXNvbHZlX2ZuIC0+XG4gICAgICAodHJ5IGlnbm9yZSAocmVzb2x2ZV9mbiBbU3RyaW5nIG5hbWVdKSB3aXRoIF8gLT4gKCkpO1xuICAgICAgKCogQ2hlY2sgaWYgdGhlIHN5bWJvbCBhcHBlYXJlZCBpbiBnbG9iYWxzIGFmdGVyIHRoZSBsb2FkICopXG4gICAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IF92bV9nbG9iYWxzIG5hbWUgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gU29tZSB2XG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgKCogRmFsbGJhY2s6IGNoZWNrIGdsb2JhbF9lbnYgZGlyZWN0bHkgaWYgdm1fZ2xvYmFscyBtaXNzZWQgdGhlIHN5bmMgKilcbiAgICAgICAgSGFzaHRibC5maW5kX29wdCBnbG9iYWxfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gbmFtZSkpXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogQ29yZSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBhcGlfcGFyc2Ugc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IHZhbHVlcyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkgKHZhbHVlcyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0KSlcbiAgd2l0aCBQYXJzZV9lcnJvciBtc2cgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxuKCoqIEJ1aWxkIGEgSlMgc3VzcGVuc2lvbiBtYXJrZXIgZm9yIHRoZSBwbGF0Zm9ybSB0byBoYW5kbGUuXG4gICAgUmV0dXJucyB7c3VzcGVuZGVkOiB0cnVlLCBvcDogc3RyaW5nLCByZXF1ZXN0OiBvYmosIHJlc3VtZTogZm4ocmVzdWx0KX0gKilcbmxldCBfbWFrZV9qc19zdXNwZW5zaW9uIHJlcXVlc3QgcmVzdW1lX2ZuID1cbiAgbGV0IG9iaiA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwic3VzcGVuZGVkXCIpIChKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIHRydWUpKTtcbiAgbGV0IG9wID0gbWF0Y2ggcmVxdWVzdCB3aXRoXG4gICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIm9wXCIgd2l0aCBTb21lIChTdHJpbmcgcykgLT4gcyB8IF8gLT4gXCJ1bmtub3duXCIpXG4gICAgfCBfIC0+IFwidW5rbm93blwiIGluXG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJvcFwiKSAoSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIG9wKSk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXF1ZXN0XCIpICh2YWx1ZV90b19qcyByZXF1ZXN0KTtcbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInJlc3VtZVwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuIHJlc3VsdF9qcyAtPlxuICAgIGxldCByZXN1bHQgPSBqc190b192YWx1ZSByZXN1bHRfanMgaW5cbiAgICByZXN1bWVfZm4gcmVzdWx0KSk7XG4gIG9ialxuXG4oKiogSGFuZGxlIGFuIGltcG9ydCBzdXNwZW5zaW9uOiBsb2FkIHRoZSBsaWJyYXJ5IGZyb20gdGhlIGxpYnJhcnkgcmVnaXN0cnlcbiAgICBvciByZXR1cm4gYSBzdXNwZW5zaW9uIG1hcmtlciB0byBKUyBmb3IgYXN5bmMgbG9hZGluZy4gKilcbmxldCBoYW5kbGVfaW1wb3J0X3N1c3BlbnNpb24gcmVxdWVzdCA9XG4gIGxldCBsaWJfc3BlYyA9IG1hdGNoIHJlcXVlc3Qgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJsaWJyYXJ5XCIgd2l0aCBTb21lIHYgLT4gdiB8IF8gLT4gTmlsKVxuICAgIHwgXyAtPiBOaWwgaW5cbiAgKCogbGlicmFyeV9sb2FkZWRfcCB0YWtlcyB0aGUgU1BFQyBhbmQgYXBwbGllcyBsaWJyYXJ5X25hbWVfa2V5IGl0c2VsZiDigJRcbiAgICAgcGFzc2luZyBhIHByZS1jb21wdXRlZCBrZXkgc3RyaW5nIGRvdWJsZS1hcHBsaWVzIGl0IGFuZCBjcmFzaGVzLiAqKVxuICBpZiBTeF90eXBlcy5zeF90cnV0aHkgKFN4X3JlZi5saWJyYXJ5X2xvYWRlZF9wIGxpYl9zcGVjKSB0aGVuXG4gICAgU29tZSBOaWwgICgqIEFscmVhZHkgbG9hZGVkIOKAlCByZXN1bWUgaW1tZWRpYXRlbHkgKilcbiAgZWxzZVxuICAgIE5vbmUgICgqIE5vdCBsb2FkZWQg4oCUIEpTIHBsYXRmb3JtIG11c3QgZmV0Y2ggaXQgKilcblxubGV0IGFwaV9ldmFsIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGVudiA9IEVudiBnbG9iYWxfZW52IGluXG4gICAgbGV0IHJlc3VsdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBleHByIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlbnYpIE5pbCBleHBycyBpblxuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyByZXN1bHQpXG4gIHdpdGhcbiAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIC0+XG4gICAgKCogVG9wLWxldmVsIGV2YWwgZW5jb3VudGVyZWQgYW4gSU8gc3VzcGVuc2lvbiBwcm9wYWdhdGVkIHZpYSB0aGVcbiAgICAgICBjZWtfcnVuIGhvb2sgKHBlcmZvcm0gaW5zaWRlIGxldHJlYyBpbml0IC8gbm9uLWxhc3QgYm9keSAvIG1hY3JvIC9cbiAgICAgICBxcSB0cmVlLXdhbGtlZCBwYXRoKS4gSy5ldmFsIGRvZXNuJ3QgZHJpdmUgcmVzdW1wdGlvbiDigJQgc3VyZmFjZSBhc1xuICAgICAgIGEgY2xlYXIgZXJyb3Igc28gdGhlIGNhbGxlciBrbm93cyB0byB1c2UgY2FsbEZuIGluc3RlYWQuICopXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IElPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHQgKHVzZSBjYWxsRm4gZm9yIElPLWF3YXJlIHBhdGhzKVwiKVxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxuKCoqIGV2YWxWTTogY29tcGlsZSBTWCBzb3VyY2UgdG8gYnl0ZWNvZGUgYW5kIHJ1biB0aHJvdWdoIHRoZSBWTS5cbiAgICBHbG9iYWxzIGRlZmluZWQgd2l0aCBgZGVmaW5lYCBhcmUgdmlzaWJsZSB0byBzdWJzZXF1ZW50IGV2YWxWTS9ldmFsIGNhbGxzLlxuICAgIFRoaXMgdGVzdHMgdGhlIGV4YWN0IHNhbWUgY29kZSBwYXRoIGFzIGlzbGFuZCBoeWRyYXRpb24gYW5kIGNsaWNrIGhhbmRsZXJzLiAqKVxubGV0IGFwaV9ldmFsX3ZtIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGNvbXBpbGVfZm4gPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IF92bV9nbG9iYWxzIFwiY29tcGlsZS1tb2R1bGVcIiB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICB8IE5vbmUgLT4gZW52X2dldCBnbG9iYWxfZW52IFwiY29tcGlsZS1tb2R1bGVcIiBpblxuICAgIGxldCBjb2RlX3ZhbCA9IFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgY29tcGlsZV9mbiBbTGlzdCBleHByc10pIGluXG4gICAgbGV0IGNvZGUgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfdm1fcmVmLmV4ZWN1dGVfbW9kdWxlIGNvZGUgX3ZtX2dsb2JhbHMgaW5cbiAgICAoKiBTeW5jIFZNIGdsb2JhbHMg4oaSIENFSyBlbnYgc28gc3Vic2VxdWVudCBldmFsKCkgY2FsbHMgc2VlIGRlZmluZXMgKilcbiAgICBIYXNodGJsLml0ZXIgKGZ1biBuYW1lIHYgLT5cbiAgICAgIGxldCBpZCA9IGludGVybiBuYW1lIGluXG4gICAgICBpZiBub3QgKEhhc2h0YmwubWVtIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQpIHRoZW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgZWxzZSAobWF0Y2ggSGFzaHRibC5maW5kIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQsIHYgd2l0aFxuICAgICAgICB8IFZtQ2xvc3VyZSBfLCBWbUNsb3N1cmUgXyB8IF8sIFZtQ2xvc3VyZSBfIC0+IEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgICAgfCBfIC0+ICgpKVxuICAgICkgX3ZtX2dsb2JhbHM7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aFxuICB8IFN4X3ZtLlZtU3VzcGVuZGVkIF8gLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogSU8gc3VzcGVuc2lvbiBpbiBub24tSU8gY29udGV4dCAodXNlIGNhbGxGbiBmb3IgSU8tYXdhcmUgcGF0aHMpXCIpXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuICB8IE5vdF9mb3VuZCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogY29tcGlsZS1tb2R1bGUgbm90IGxvYWRlZFwiKVxuXG5sZXQgYXBpX2V2YWxfZXhwciBleHByX2pzIF9lbnZfanMgPVxuICBsZXQgZXhwciA9IGpzX3RvX3ZhbHVlIGV4cHJfanMgaW5cbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIGluXG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aFxuICB8IFN4X3ZtLlZtU3VzcGVuZGVkIF8gLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogSU8gc3VzcGVuc2lvbiBpbiBub24tSU8gY29udGV4dCAodXNlIGNhbGxGbiBmb3IgSU8tYXdhcmUgcGF0aHMpXCIpXG4gIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcblxubGV0IGFwaV9sb2FkIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGVudiA9IEVudiBnbG9iYWxfZW52IGluXG4gICAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biBleHByIC0+XG4gICAgICAoKiBVc2UgSU8tYXdhcmUgZXZhbCBmb3IgZWFjaCBleHByZXNzaW9uIHRvIGhhbmRsZSBpbXBvcnQgc3VzcGVuc2lvbnMgKilcbiAgICAgIGxldCBzdGF0ZSA9IFN4X3JlZi5tYWtlX2Nla19zdGF0ZSBleHByIGVudiAoTGlzdCBbXSkgaW5cbiAgICAgIGxldCBmaW5hbCA9IHJlZiAoU3hfcmVmLmNla19zdGVwX2xvb3Agc3RhdGUpIGluXG4gICAgICB3aGlsZSBTeF90eXBlcy5zeF90cnV0aHkgKFN4X3JlZi5jZWtfc3VzcGVuZGVkX3AgIWZpbmFsKSBkb1xuICAgICAgICBsZXQgcmVxdWVzdCA9IFN4X3JlZi5jZWtfaW9fcmVxdWVzdCAhZmluYWwgaW5cbiAgICAgICAgbGV0IG9wID0gbWF0Y2ggcmVxdWVzdCB3aXRoXG4gICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIm9wXCIgd2l0aCBTb21lIChTdHJpbmcgcykgLT4gcyB8IF8gLT4gXCJcIilcbiAgICAgICAgICB8IF8gLT4gXCJcIiBpblxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBpZiBvcCA9IFwiaW1wb3J0XCIgdGhlbiBiZWdpblxuICAgICAgICAgIG1hdGNoIGhhbmRsZV9pbXBvcnRfc3VzcGVuc2lvbiByZXF1ZXN0IHdpdGhcbiAgICAgICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICAgICAgfCBOb25lIC0+IE5pbCAgKCogTGlicmFyeSBub3QgZm91bmQg4oCUIHJlc3VtZSB3aXRoIG5pbCwgaW1wb3J0IHdpbGwgdXNlIHdoYXQncyBpbiBlbnYgKilcbiAgICAgICAgZW5kIGVsc2UgTmlsIGluXG4gICAgICAgIGZpbmFsIDo9IFN4X3JlZi5jZWtfcmVzdW1lICFmaW5hbCByZXNwb25zZVxuICAgICAgZG9uZTtcbiAgICAgIGlnbm9yZSAoU3hfcmVmLmNla192YWx1ZSAhZmluYWwpO1xuICAgICAgaW5jciBjb3VudFxuICAgICkgZXhwcnM7XG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCAhY291bnRcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxubGV0IGFwaV9iZWdpbl9tb2R1bGVfbG9hZCAoKSA9XG4gICgqIFNuYXBzaG90IGN1cnJlbnQgZW52IGludG8gdGhlIHBlcnNpc3RlbnQgVk0gZ2xvYmFscyB0YWJsZSAqKVxuICBIYXNodGJsLmNsZWFyIF92bV9nbG9iYWxzO1xuICBIYXNodGJsLml0ZXIgKGZ1biBpZCB2IC0+IEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyAodW5pbnRlcm4gaWQpIHYpIGdsb2JhbF9lbnYuYmluZGluZ3M7XG4gIF9pbl9iYXRjaCA6PSB0cnVlO1xuICBKcy5VbnNhZmUuaW5qZWN0IHRydWVcblxubGV0IGFwaV9lbmRfbW9kdWxlX2xvYWQgKCkgPVxuICBpZiAhX2luX2JhdGNoIHRoZW4gYmVnaW5cbiAgICAoKiBDb3B5IFZNIGdsb2JhbHMgYmFjayB0byBlbnYgKGJ5dGVjb2RlIG1vZHVsZXMgZGVmaW5lZCBuZXcgc3ltYm9scykgKilcbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChpbnRlcm4gaykgdlxuICAgICkgX3ZtX2dsb2JhbHM7XG4gICAgX2luX2JhdGNoIDo9IGZhbHNlXG4gIGVuZDtcbiAgSnMuVW5zYWZlLmluamVjdCB0cnVlXG5cbmxldCBzeW5jX3ZtX3RvX2VudiAoKSA9XG4gIEhhc2h0YmwuaXRlciAoZnVuIG5hbWUgdiAtPlxuICAgIGxldCBpZCA9IGludGVybiBuYW1lIGluXG4gICAgaWYgbm90IChIYXNodGJsLm1lbSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkKSB0aGVuXG4gICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgZWxzZSBiZWdpblxuICAgICAgKCogVXBkYXRlIGV4aXN0aW5nIGJpbmRpbmcgaWYgdGhlIFZNIGhhcyBhIG5ld2VyIHZhbHVlICopXG4gICAgICBsZXQgZXhpc3RpbmcgPSBIYXNodGJsLmZpbmQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCBpblxuICAgICAgbWF0Y2ggZXhpc3RpbmcsIHYgd2l0aFxuICAgICAgfCBWbUNsb3N1cmUgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgfCBfLCBWbUNsb3N1cmUgXyAtPiBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICB8IF8gLT4gKClcbiAgICBlbmRcbiAgKSBfdm1fZ2xvYmFsc1xuXG4oKiogQ29udmVydCBhIFZNIHN1c3BlbnNpb24gZGljdCB0byBhIEpTIHN1c3BlbnNpb24gb2JqZWN0IGZvciB0aGUgcGxhdGZvcm0uICopXG5sZXQgcmVjIG1ha2VfanNfaW1wb3J0X3N1c3BlbnNpb24gKGQgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50KSA9XG4gIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInN1c3BlbmRlZFwiKSAoSnMuVW5zYWZlLmluamVjdCBKcy5fdHJ1ZSk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJvcFwiKSAoSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiaW1wb3J0XCIpKTtcbiAgbGV0IHJlcXVlc3QgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJyZXF1ZXN0XCIgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsIGluXG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXF1ZXN0XCIpICh2YWx1ZV90b19qcyByZXF1ZXN0KTtcbiAgKCogcmVzdW1lIGNhbGxiYWNrOiBjbGVhcnMgX19pb19yZXF1ZXN0LCBwdXNoZXMgbmlsLCByZS1ydW5zIFZNICopXG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXN1bWVcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biBfcmVzdWx0X2pzIC0+XG4gICAgbGV0IHJlc3VtZWQgPSBTeF92bV9yZWYucmVzdW1lX21vZHVsZSAoRGljdCBkKSBpblxuICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgIG1hdGNoIHJlc3VtZWQgd2l0aFxuICAgIHwgRGljdCBkMiB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQyIFwic3VzcGVuZGVkXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgSnMuVW5zYWZlLmluamVjdCAobWFrZV9qc19pbXBvcnRfc3VzcGVuc2lvbiBkMilcbiAgICB8IHJlc3VsdCAtPiB2YWx1ZV90b19qcyByZXN1bHQpKTtcbiAgb2JqXG5cbmxldCBhcGlfbG9hZF9tb2R1bGUgbW9kdWxlX2pzID1cbiAgdHJ5XG4gICAgbGV0IGNvZGVfdmFsID0ganNfdG9fdmFsdWUgbW9kdWxlX2pzIGluXG4gICAgbGV0IGNvZGUgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfdm1fcmVmLmV4ZWN1dGVfbW9kdWxlIGNvZGUgX3ZtX2dsb2JhbHMgaW5cbiAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgIHwgRGljdCBkIHdoZW4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1c3BlbmRlZFwiIHdpdGggU29tZSAoQm9vbCB0cnVlKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgLT5cbiAgICAgICgqIFZNIHN1c3BlbmRlZCBvbiBPUF9QRVJGT1JNIChpbXBvcnQpIOKAlCByZXR1cm4gSlMgc3VzcGVuc2lvbiBvYmplY3QgKilcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2VfanNfaW1wb3J0X3N1c3BlbnNpb24gZClcbiAgICB8IF8gLT5cbiAgICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgICAgSnMuVW5zYWZlLmluamVjdCAoSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMpXG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBleG4gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pKVxuXG5sZXQgYXBpX2RlYnVnX2VudiBuYW1lX2pzID1cbiAgbGV0IG5hbWUgPSBKcy50b19zdHJpbmcgbmFtZV9qcyBpblxuICBsZXQgaWQgPSBpbnRlcm4gbmFtZSBpblxuICBsZXQgZm91bmRfZW52ID0gSGFzaHRibC5maW5kX29wdCBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIGluXG4gIGxldCBmb3VuZF92bSA9IEhhc2h0YmwuZmluZF9vcHQgX3ZtX2dsb2JhbHMgbmFtZSBpblxuICBsZXQgdG90YWxfZW52ID0gSGFzaHRibC5sZW5ndGggZ2xvYmFsX2Vudi5iaW5kaW5ncyBpblxuICBsZXQgdG90YWxfdm0gPSBIYXNodGJsLmxlbmd0aCBfdm1fZ2xvYmFscyBpblxuICBsZXQgZW52X3MgPSBtYXRjaCBmb3VuZF9lbnYgd2l0aCBTb21lIHYgLT4gXCJlbnY6XCIgXiB0eXBlX29mIHYgfCBOb25lIC0+IFwiZW52Ok1JU1NJTkdcIiBpblxuICBsZXQgdm1fcyA9IG1hdGNoIGZvdW5kX3ZtIHdpdGggU29tZSB2IC0+IFwidm06XCIgXiB0eXBlX29mIHYgfCBOb25lIC0+IFwidm06TUlTU0lOR1wiIGluXG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlcyAlcyAoZW52PSVkIHZtPSVkKVwiIGVudl9zIHZtX3MgdG90YWxfZW52IHRvdGFsX3ZtKSlcblxubGV0IGFwaV9jb21waWxlX21vZHVsZSBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBjb21waWxlX2ZuID0gZW52X2dldCBnbG9iYWxfZW52IFwiY29tcGlsZS1tb2R1bGVcIiBpblxuICAgIGxldCBjb2RlID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbY29tcGlsZV9mbjsgTGlzdCBleHByc10pIChFbnYgZ2xvYmFsX2VudikgaW5cbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgY29kZSlcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBOb3RfZm91bmQgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IGNvbXBpbGUtbW9kdWxlIG5vdCBsb2FkZWRcIilcblxubGV0IGFwaV9yZW5kZXJfdG9faHRtbCBleHByX2pzID1cbiAgbGV0IGV4cHIgPSBqc190b192YWx1ZSBleHByX2pzIGluXG4gIGxldCBwcmV2ID0gIV9zeF9yZW5kZXJfbW9kZSBpblxuICBfc3hfcmVuZGVyX21vZGUgOj0gdHJ1ZTtcbiAgKHRyeVxuICAgIGxldCBodG1sID0gU3hfcmVuZGVyLnN4X3JlbmRlcl90b19odG1sIGdsb2JhbF9lbnYgZXhwciBnbG9iYWxfZW52IGluXG4gICAgX3N4X3JlbmRlcl9tb2RlIDo9IHByZXY7XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIGh0bWwpXG4gIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICBfc3hfcmVuZGVyX21vZGUgOj0gcHJldjtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSkpXG5cbmxldCBhcGlfc3RyaW5naWZ5IHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKGluc3BlY3QgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV90eXBlX29mIHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKHR5cGVfb2YgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV9pbnNwZWN0IHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKGluc3BlY3QgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV9lbmdpbmUgKCkgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJvY2FtbC12bS13YXNtXCIpXG5cbmxldCBhcGlfcmVnaXN0ZXJfbmF0aXZlIG5hbWVfanMgY2FsbGJhY2tfanMgPVxuICBsZXQgbmFtZSA9IEpzLnRvX3N0cmluZyBuYW1lX2pzIGluXG4gIGxldCBuYXRpdmVfZm4gYXJncyA9XG4gICAgbGV0IGpzX2FyZ3MgPSBhcmdzIHw+IExpc3QubWFwIHZhbHVlX3RvX2pzIHw+IEFycmF5Lm9mX2xpc3QgaW5cbiAgICBqc190b192YWx1ZSAoSnMuVW5zYWZlLmZ1bl9jYWxsIGNhbGxiYWNrX2pzIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5IGpzX2FyZ3MpIHxdKVxuICBpblxuICBsZXQgdiA9IE5hdGl2ZUZuIChuYW1lLCBuYXRpdmVfZm4pIGluXG4gIFN4X3ByaW1pdGl2ZXMucmVnaXN0ZXIgbmFtZSBuYXRpdmVfZm47XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBuYW1lIHYpO1xuICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2O1xuICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcblxubGV0IHJlYyBtYWtlX2pzX2NhbGxGbl9zdXNwZW5zaW9uIHJlcXVlc3Qgdm0gPVxuICBsZXQgb2JqID0gSnMuVW5zYWZlLm9iaiBbfHxdIGluXG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJzdXNwZW5kZWRcIikgKEpzLlVuc2FmZS5pbmplY3QgSnMuX3RydWUpO1xuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxdWVzdCk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXN1bWVcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biByZXN1bHRfanMgLT5cbiAgICBsZXQgcmVzdWx0ID0ganNfdG9fdmFsdWUgcmVzdWx0X2pzIGluXG4gICAgdHJ5XG4gICAgICBsZXQgdiA9IFN4X3ZtLnJlc3VtZV92bSB2bSByZXN1bHQgaW5cbiAgICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgICAgdmFsdWVfdG9fanMgdlxuICAgIHdpdGhcbiAgICB8IFN4X3ZtLlZtU3VzcGVuZGVkIChyZXEyLCB2bTIpIC0+XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IChtYWtlX2pzX2NhbGxGbl9zdXNwZW5zaW9uIHJlcTIgdm0yKVxuICAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgIGxldCB2bV9mcmFtZV9uYW1lcyA9IFN0cmluZy5jb25jYXQgXCIsXCIgKExpc3QubWFwIChmdW4gZiAtPlxuICAgICAgICBtYXRjaCBmLlN4X3ZtLmNsb3N1cmUuU3hfdHlwZXMudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIlxuICAgICAgKSB2bS5TeF92bS5mcmFtZXMpIGluXG4gICAgICBsZXQgZXh0cmEgPSBQcmludGYuc3ByaW50ZiBcIiBbdm06IHBlbmRpbmdfY2VrPSViIHJldXNlPSVkIGZyYW1lcz1bJXNdIHNwPSVkXVwiXG4gICAgICAgICh2bS5TeF92bS5wZW5kaW5nX2NlayA8PiBOb25lKVxuICAgICAgICAoTGlzdC5sZW5ndGggdm0uU3hfdm0ucmV1c2Vfc3RhY2spXG4gICAgICAgIHZtX2ZyYW1lX25hbWVzXG4gICAgICAgIHZtLlN4X3ZtLnNwIGluXG4gICAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgICAgKEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiY29uc29sZVwiKSlcbiAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIHJlc3VtZTogXCIgXiBtc2cgXiBleHRyYSkpIHxdKTtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBvYmpcblxubGV0IGFwaV9jYWxsX2ZuIGZuX2pzIGFyZ3NfanMgPVxuICB0cnlcbiAgICBsZXQgZm4gPSBqc190b192YWx1ZSBmbl9qcyBpblxuICAgIGxldCBhcmdzID0gQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIGpzX3RvX3ZhbHVlIChKcy50b19hcnJheSAoSnMuVW5zYWZlLmNvZXJjZSBhcmdzX2pzKSkpIGluXG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIChjYWxsX3N4X2ZuIGZuIGFyZ3MpKVxuICB3aXRoXG4gIHwgU3hfdm0uVm1TdXNwZW5kZWQgKHJlcXVlc3QsIHZtKSAtPlxuICAgICgqIFRyYW5zZmVyIHJldXNlX3N0YWNrIGZyb20gYWN0aXZlIFZNICopXG4gICAgKG1hdGNoICFTeF92bS5fYWN0aXZlX3ZtIHdpdGhcbiAgICAgfCBTb21lIGFjdGl2ZSB3aGVuIGFjdGl2ZS5TeF92bS5yZXVzZV9zdGFjayA8PiBbXSAtPlxuICAgICAgIHZtLlN4X3ZtLnJldXNlX3N0YWNrIDwtIHZtLlN4X3ZtLnJldXNlX3N0YWNrIEAgYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrO1xuICAgICAgIGFjdGl2ZS5TeF92bS5yZXVzZV9zdGFjayA8LSBbXVxuICAgICB8IF8gLT4gKCkpO1xuICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2VfanNfY2FsbEZuX3N1c3BlbnNpb24gcmVxdWVzdCB2bSlcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICgqIFN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIHNvIGNhbGxlcnMgY2FuIGRldGVjdCBpdCAqKVxuICAgIGxldCBlcnJfb2JqID0gSnMuVW5zYWZlLm9iaiBbfCAoXCJfX3N4X2Vycm9yXCIsIEpzLlVuc2FmZS5pbmplY3QgSnMuX3RydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwibWVzc2FnZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgbXNnKSkgfF0gaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IGVycl9vYmpcbiAgfCBleG4gLT5cbiAgICBsZXQgZXJyX29iaiA9IEpzLlVuc2FmZS5vYmogW3wgKFwiX19zeF9lcnJvclwiLCBKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcIm1lc3NhZ2VcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChQcmludGV4Yy50b19zdHJpbmcgZXhuKSkpIHxdIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCBlcnJfb2JqXG5cbmxldCBhcGlfaXNfY2FsbGFibGUgZm5fanMgPVxuICBpZiBKcy5VbnNhZmUuZXF1YWxzIGZuX2pzIEpzLm51bGwgfHwgSnMuVW5zYWZlLmVxdWFscyBmbl9qcyBKcy51bmRlZmluZWQgdGhlblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgZmFsc2UpXG4gIGVsc2VcbiAgICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQgZm5fanMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gICAgaWYgSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCB0aGVuIEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgZmFsc2UpXG4gICAgZWxzZSBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIChpc19jYWxsYWJsZSAoZ2V0X2hhbmRsZSAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGgpIHw+IGludF9vZl9mbG9hdCkpKSlcblxubGV0IGFwaV9mbl9hcml0eSBmbl9qcyA9XG4gIGxldCBoID0gSnMuVW5zYWZlLmdldCBmbl9qcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCB0aGVuIEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCAoLTEuMCkpXG4gIGVsc2VcbiAgICBsZXQgdiA9IGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpIGluXG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbC5sX3BhcmFtcykpKVxuICAgIHwgXyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKC0xLjApKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBsYXRmb3JtIGJpbmRpbmdzIChyZWdpc3RlcmVkIGluIGdsb2JhbCBlbnYpICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgKCkgPVxuICBsZXQgYmluZCBuYW1lIGZuID0gaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IG5hbWUgKE5hdGl2ZUZuIChuYW1lLCBmbikpKSBpblxuXG4gICgqIGNsaWVudD8gcmV0dXJucyB0cnVlIGluIGJyb3dzZXIg4oCUIHNldCB0aGUgcmVmIHNvIHRoZSBwcmltaXRpdmUgcmV0dXJucyB0cnVlICopXG4gIFN4X3ByaW1pdGl2ZXMuX2lzX2NsaWVudCA6PSB0cnVlO1xuXG4gICgqIC0tLSBFdmFsdWF0aW9uIC0tLSAqKVxuICBiaW5kIFwiY2VrLWV2YWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gbGV0IGUgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHMgaW4gKG1hdGNoIGUgd2l0aCBoIDo6IF8gLT4gU3hfcmVmLmV2YWxfZXhwciBoIChFbnYgZ2xvYmFsX2VudikgfCBbXSAtPiBOaWwpXG4gICAgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudilcbiAgICB8IFtleHByOyBlbnZfdmFsXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52X3ZhbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1ldmFsOiBleHBlY3RlZCAxLTIgYXJnc1wiKSk7XG5cbiAgYmluZCBcImV2YWwtZXhwci1jZWtcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtleHByOyBlXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZVxuICAgIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZhbC1leHByLWNlazogZXhwZWN0ZWQgMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJjZWstY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgbGV0IGFyZ19saXN0ID0gbWF0Y2ggYSB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgdiAtPiBbdl0gaW5cbiAgICAgIFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgZiBhcmdfbGlzdClcbiAgICB8IFtmOyBfXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjZWstY2FsbDogbm90IGNhbGxhYmxlOiBcIiBeIHR5cGVfb2YgZikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWNhbGw6IGV4cGVjdGVkIChmbiBhcmdzKVwiKSk7XG5cbiAgYmluZCBcInN4LXBhcnNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gLT4gTGlzdCAoU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtcGFyc2U6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG5cbiAgKCogcGFyc2U6IHNhbWUgYXMgc2VydmVyIOKAlCB1bndyYXBzIHNpbmdsZSByZXN1bHRzLCByZXR1cm5zIGxpc3QgZm9yIG11bHRpcGxlLlxuICAgICBVc2VkIGJ5IGJvb3Quc3ggKHBhZ2Ugc2NyaXB0cywgc3VzcGVuc2UpIGFuZCBlbmdpbmUuc3ggKG1hcnNoIHVwZGF0ZSkuICopXG4gIGJpbmQgXCJwYXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIHwgW1N4RXhwciBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgKG1hdGNoIGV4cHJzIHdpdGggW2VdIC0+IGUgfCBfIC0+IExpc3QgZXhwcnMpXG4gICAgfCBbdl0gLT4gdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcnNlOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuXG4gIGJpbmQgXCJzeC1zZXJpYWxpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBTdHJpbmcgKGluc3BlY3QgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeC1zZXJpYWxpemU6IGV4cGVjdGVkIDEgYXJnXCIpKTtcblxuICAoKiAtLS0gQXNzZXJ0aW9ucyAmIGVxdWFsaXR5IC0tLSAqKVxuICBsZXQgcmVjIGRlZXBfZXF1YWwgYSBiID1cbiAgICBtYXRjaCBhLCBiIHdpdGhcbiAgICB8IE5pbCwgTmlsIC0+IHRydWUgfCBCb29sIGEsIEJvb2wgYiAtPiBhID0gYlxuICAgIHwgSW50ZWdlciBhLCBJbnRlZ2VyIGIgLT4gYSA9IGJcbiAgICB8IE51bWJlciBhLCBOdW1iZXIgYiAtPiBhID0gYlxuICAgIHwgSW50ZWdlciBhLCBOdW1iZXIgYiAtPiBmbG9hdF9vZl9pbnQgYSA9IGJcbiAgICB8IE51bWJlciBhLCBJbnRlZ2VyIGIgLT4gYSA9IGZsb2F0X29mX2ludCBiXG4gICAgfCBTdHJpbmcgYSwgU3RyaW5nIGIgLT4gYSA9IGJcbiAgICB8IFN5bWJvbCBhLCBTeW1ib2wgYiAtPiBhID0gYiB8IEtleXdvcmQgYSwgS2V5d29yZCBiIC0+IGEgPSBiXG4gICAgfCAoTGlzdCBhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYSB9KSwgKExpc3QgYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGIgfSkgLT5cbiAgICAgIExpc3QubGVuZ3RoIGEgPSBMaXN0Lmxlbmd0aCBiICYmIExpc3QuZm9yX2FsbDIgZGVlcF9lcXVhbCBhIGJcbiAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICBsZXQga2EgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBhIFtdIGluXG4gICAgICBsZXQga2IgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBiIFtdIGluXG4gICAgICBMaXN0Lmxlbmd0aCBrYSA9IExpc3QubGVuZ3RoIGtiICYmXG4gICAgICBMaXN0LmZvcl9hbGwgKGZ1biBrIC0+IEhhc2h0YmwubWVtIGIgayAmJlxuICAgICAgICBkZWVwX2VxdWFsIChIYXNodGJsLmZpbmQgYSBrKSAoSGFzaHRibC5maW5kIGIgaykpIGthXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGJpbmQgXCJlcXVhbD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBCb29sIChkZWVwX2VxdWFsIGEgYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXF1YWw/OiAyIGFyZ3NcIikpO1xuICBiaW5kIFwiYXNzZXJ0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbY29uZF0gLT4gaWYgbm90IChzeF90cnV0aHkgY29uZCkgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcIkFzc2VydGlvbiBmYWlsZWRcIik7IEJvb2wgdHJ1ZVxuICAgIHwgW2NvbmQ7IG1zZ10gLT4gaWYgbm90IChzeF90cnV0aHkgY29uZCkgdGhlbiByYWlzZSAoRXZhbF9lcnJvciAoXCJBc3NlcnRpb246IFwiIF4gdmFsdWVfdG9fc3RyaW5nIG1zZykpOyBCb29sIHRydWVcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NlcnQ6IDEtMiBhcmdzXCIpKTtcblxuICBiaW5kIFwidHJ5LWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0aHVua10gLT5cbiAgICAgICh0cnkgaWdub3JlIChTeF9yZWYuZXZhbF9leHByIChMaXN0IFt0aHVua10pIChFbnYgZ2xvYmFsX2VudikpO1xuICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJva1wiIChCb29sIHRydWUpOyBEaWN0IGRcbiAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBkIFwib2tcIiAoQm9vbCBmYWxzZSk7IEhhc2h0YmwucmVwbGFjZSBkIFwiZXJyb3JcIiAoU3RyaW5nIG1zZyk7IERpY3QgZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cnktY2FsbDogMSBhcmdcIikpO1xuXG4gICgqIC0tLSBCeXRlY29kZSBsb2FkaW5nIGZyb20gcy1leHByZXNzaW9uIGZvcm1hdCAtLS1cbiAgICAgKHN4YmMgdmVyc2lvbiBoYXNoIChjb2RlIDphcml0eSBOIDp1cHZhbHVlLWNvdW50IE4gOmJ5dGVjb2RlICguLi4pIDpjb25zdGFudHMgKC4uLikpKVxuICAgICBSZWN1cnNpdmVseSBjb252ZXJ0cyB0aGUgU1ggdHJlZSBpbnRvIHRoZSBkaWN0IGZvcm1hdCB0aGF0IGxvYWRNb2R1bGUgZXhwZWN0cy4gKilcbiAgYmluZCBcImxvYWQtc3hiY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgKF8gOjogXyA6OiBfIDo6IGNvZGVfZm9ybSA6OiBfKV0gfCBbTGlzdCAoXyA6OiBfIDo6IGNvZGVfZm9ybSA6OiBfKV0gLT5cbiAgICAgIGxldCByZWMgY29udmVydF9jb2RlIGZvcm0gPVxuICAgICAgICBtYXRjaCBmb3JtIHdpdGhcbiAgICAgICAgfCBMaXN0IChTeW1ib2wgXCJjb2RlXCIgOjogcmVzdCkgLT5cbiAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICAgICAgICBsZXQgcmVjIHBhcnNlX2t2ID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgS2V5d29yZCBcImFyaXR5XCIgOjogKE51bWJlciBfIGFzIG4pIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJhcml0eVwiIG47IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgS2V5d29yZCBcImFyaXR5XCIgOjogKEludGVnZXIgXyBhcyBuKSA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwiYXJpdHlcIiBuOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJ1cHZhbHVlLWNvdW50XCIgOjogKE51bWJlciBfIGFzIG4pIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJ1cHZhbHVlLWNvdW50XCIgbjsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwidXB2YWx1ZS1jb3VudFwiIDo6IChJbnRlZ2VyIF8gYXMgbikgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZCBcInVwdmFsdWUtY291bnRcIiBuOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJieXRlY29kZVwiIDo6IExpc3QgbnVtcyA6OiByZXN0IC0+XG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnl0ZWNvZGVcIiAoTGlzdCBudW1zKTsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiY29uc3RhbnRzXCIgOjogTGlzdCBjb25zdHMgOjogcmVzdCAtPlxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN0YW50c1wiIChMaXN0IChMaXN0Lm1hcCBjb252ZXJ0X2NvbnN0IGNvbnN0cykpOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IF8gOjogcmVzdCAtPiBwYXJzZV9rdiByZXN0ICAoKiBza2lwIHVua25vd24ga2V5d29yZHMgKilcbiAgICAgICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgICBpblxuICAgICAgICAgIHBhcnNlX2t2IHJlc3Q7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJsb2FkLXN4YmM6IGV4cGVjdGVkIChjb2RlIC4uLiksIGdvdCBcIiBeIHR5cGVfb2YgZm9ybSkpXG4gICAgICBhbmQgY29udmVydF9jb25zdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwiY29kZVwiIDo6IF8pIGFzIGZvcm0gLT4gY29udmVydF9jb2RlIGZvcm1cbiAgICAgICAgfCBMaXN0IChTeW1ib2wgXCJsaXN0XCIgOjogaXRlbXMpIC0+IExpc3QgKExpc3QubWFwIGNvbnZlcnRfY29uc3QgaXRlbXMpXG4gICAgICAgIHwgdiAtPiB2ICAoKiBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgbmlsLCBzeW1ib2xzLCBrZXl3b3JkcyBwYXNzIHRocm91Z2ggKilcbiAgICAgIGluXG4gICAgICBsZXQgbW9kdWxlX3ZhbCA9IGNvbnZlcnRfY29kZSBjb2RlX2Zvcm0gaW5cbiAgICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIG1vZHVsZV92YWwgaW5cbiAgICAgICgqIFVzZSBleGVjdXRlX21vZHVsZV9zYWZlIHRvIGhhbmRsZSBpbXBvcnQgc3VzcGVuc2lvbi5cbiAgICAgICAgIExpYnJhcmllcyBjb21waWxlZCBmcm9tIGRlZmluZS1saWJyYXJ5ICsgaW1wb3J0IGVtaXQgT1BfUEVSRk9STVxuICAgICAgICAgYXQgdGhlIGVuZDsgd2UgY2F0Y2ggYW5kIHJlc29sdmUgdGhlIGltcG9ydCBpbmxpbmUuICopXG4gICAgICAodHJ5XG4gICAgICAgIGlnbm9yZSAoU3hfdm0uZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscylcbiAgICAgICB3aXRoXG4gICAgICAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIC0+ICgpICAoKiBJbXBvcnQgc3VzcGVuc2lvbiDigJQgZGVmaW5lcyBhbHJlYWR5IGluIGdsb2JhbHMgKilcbiAgICAgICB8IF8gLT4gKCkpO1xuICAgICAgc3luY192bV90b19lbnYgKCk7XG4gICAgICBOdW1iZXIgKGZsb2F0X29mX2ludCAoSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxvYWQtc3hiYzogZXhwZWN0ZWQgKHN4YmMgdmVyc2lvbiBoYXNoIChjb2RlIC4uLikpXCIpKTtcblxuICAoKiAtLS0gTGlzdCBtdXRhdGlvbiAtLS0gKilcbiAgYmluZCBcImFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IHZdIC0+IHIgOj0gIXIgQCBbdl07IExpc3RSZWYgclxuICAgIHwgW0xpc3QgaXRlbXM7IHZdIC0+IExpc3QgKGl0ZW1zIEAgW3ZdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiByZW1vdmUhIOKAlCBtdXRhdGUgTGlzdFJlZiBpbi1wbGFjZSwgcmVtb3ZpbmcgYnkgaWRlbnRpdHkgKD09KSAqKVxuICBiaW5kIFwicmVtb3ZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgdGFyZ2V0XSAtPlxuICAgICAgciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpICFyOyBMaXN0UmVmIHJcbiAgICB8IFtMaXN0IGl0ZW1zOyB0YXJnZXRdIC0+XG4gICAgICBMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpIGl0ZW1zKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiAtLS0gRW52aXJvbm1lbnQgb3BzIC0tLSAqKVxuICAoKiBVc2UgdW53cmFwX2VudiBmb3IgbmlsL2RpY3QgdG9sZXJhbmNlLCBtYXRjaGluZyB0aGUgc2VydmVyIGtlcm5lbCAqKVxuICBsZXQgdXcgPSBTeF9ydW50aW1lLnVud3JhcF9lbnYgaW5cbiAgYmluZCBcIm1ha2UtZW52XCIgKGZ1biBfIC0+IEVudiAobWFrZV9lbnYgKCkpKTtcbiAgYmluZCBcImdsb2JhbC1lbnZcIiAoZnVuIF8gLT4gRW52IGdsb2JhbF9lbnYpO1xuICBiaW5kIFwiZW52LWhhcz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcga10gfCBbZTsgS2V5d29yZCBrXSAtPiBCb29sIChlbnZfaGFzICh1dyBlKSBrKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtaGFzP1wiKSk7XG4gIGJpbmQgXCJlbnYtZ2V0XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGtdIHwgW2U7IEtleXdvcmQga10gLT4gZW52X2dldCAodXcgZSkgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZ2V0XCIpKTtcbiAgYmluZCBcImVudi1iaW5kIVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrOyB2XSB8IFtlOyBLZXl3b3JkIGs7IHZdIC0+IGVudl9iaW5kICh1dyBlKSBrIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWJpbmQhXCIpKTtcbiAgYmluZCBcImVudi1zZXQhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGs7IHZdIHwgW2U7IEtleXdvcmQgazsgdl0gLT4gZW52X3NldCAodXcgZSkgayB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1zZXQhXCIpKTtcbiAgYmluZCBcImVudi1leHRlbmRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlXSAtPiBFbnYgKGVudl9leHRlbmQgKHV3IGUpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZXh0ZW5kXCIpKTtcbiAgYmluZCBcImVudi1tZXJnZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IFN4X3J1bnRpbWUuZW52X21lcmdlIGEgYiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtbWVyZ2VcIikpO1xuXG4gICgqIC0tLSBUeXBlIGNvbnN0cnVjdG9ycyAtLS0gKilcbiAgYmluZCBcIm1ha2Utc3ltYm9sXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN5bWJvbCBzIHwgW3ZdIC0+IFN5bWJvbCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ltYm9sXCIpKTtcbiAgYmluZCBcIm1ha2Uta2V5d29yZFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBLZXl3b3JkIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1rZXl3b3JkXCIpKTtcbiAgYmluZCBcImtleXdvcmQtbmFtZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0tleXdvcmQga10gLT4gU3RyaW5nIGsgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwia2V5d29yZC1uYW1lXCIpKTtcbiAgYmluZCBcInN5bWJvbC1uYW1lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIHNdIC0+IFN0cmluZyBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbC1uYW1lXCIpKTtcblxuICAoKiAtLS0gQ29tcG9uZW50L0lzbGFuZCBhY2Nlc3NvcnMgKG11c3QgaGFuZGxlIGJvdGggdHlwZXMpIC0tLSAqKVxuICBiaW5kIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBTdHJpbmcgYy5jX25hbWUgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZSB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBFbnYgYy5jX2Nsb3N1cmUgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZSB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGMuY19wYXJhbXMpXG4gICAgfCBbSXNsYW5kIGldIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgICB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gYy5jX2JvZHkgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5IHwgXyAtPiBOaWwpO1xuICBsZXQgaGFzX2NoaWxkcmVuX2ltcGwgPSBOYXRpdmVGbiAoXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiLCBmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlbiB8IFtJc2xhbmQgaV0gLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuIHwgXyAtPiBCb29sIGZhbHNlKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuXCIgaGFzX2NoaWxkcmVuX2ltcGwpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiIGhhc19jaGlsZHJlbl9pbXBsKTtcbiAgYmluZCBcImNvbXBvbmVudC1hZmZpbml0eVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfYWZmaW5pdHkgfCBbSXNsYW5kIF9dIC0+IFN0cmluZyBcImNsaWVudFwiIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtLXR5cGVzXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjb21wb25lbnQtc2V0LXBhcmFtLXR5cGVzIVwiIChmdW4gXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBDRUsgc3RlcHBpbmcgLS0tICopXG4gIGJpbmQgXCJtYWtlLWNlay1zdGF0ZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2M7IGU7IGtdIC0+IFN4X3JlZi5tYWtlX2Nla19zdGF0ZSBjIGUgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWNlay1zdGF0ZVwiKSk7XG4gIGJpbmQgXCJjZWstc3RlcFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfc3RlcCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1zdGVwXCIpKTtcbiAgYmluZCBcImNlay1waGFzZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfcGhhc2UgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstcGhhc2VcIikpO1xuICBiaW5kIFwiY2VrLXZhbHVlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla192YWx1ZSBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay12YWx1ZVwiKSk7XG4gIGJpbmQgXCJjZWstdGVybWluYWw/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla190ZXJtaW5hbF9wIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXRlcm1pbmFsP1wiKSk7XG4gIGJpbmQgXCJjZWsta29udFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfa29udCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1rb250XCIpKTtcbiAgYmluZCBcImZyYW1lLXR5cGVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtmXSAtPiBTeF9yZWYuZnJhbWVfdHlwZSBmIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZyYW1lLXR5cGVcIikpO1xuXG4gICgqIC0tLSBTdHJpY3QgbW9kZSAtLS0gKilcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiKnN0cmljdCpcIiAoQm9vbCBmYWxzZSkpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCIqcHJpbS1wYXJhbS10eXBlcypcIiBOaWwpO1xuICBiaW5kIFwic2V0LXN0cmljdCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3N0cmljdF9yZWYgOj0gdjsgaWdub3JlIChlbnZfc2V0IGdsb2JhbF9lbnYgXCIqc3RyaWN0KlwiIHYpOyBOaWwgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJzZXQtcHJpbS1wYXJhbS10eXBlcyFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3ByaW1fcGFyYW1fdHlwZXNfcmVmIDo9IHY7IGlnbm9yZSAoZW52X3NldCBnbG9iYWxfZW52IFwiKnByaW0tcGFyYW0tdHlwZXMqXCIgdik7IE5pbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInZhbHVlLW1hdGNoZXMtdHlwZT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2OyB0XSAtPiBTeF9yZWYudmFsdWVfbWF0Y2hlc190eXBlX3AgdiB0IHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBBcHBseSAtLS0gKilcbiAgYmluZCBcImFwcGx5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBmIDo6IHJlc3QgLT5cbiAgICAgIGxldCBhbGxfYXJncyA9IG1hdGNoIExpc3QucmV2IHJlc3Qgd2l0aCBMaXN0IGxhc3QgOjogcHJlZml4IC0+IExpc3QucmV2IHByZWZpeCBAIGxhc3QgfCBfIC0+IHJlc3QgaW5cbiAgICAgIFN4X3J1bnRpbWUuc3hfY2FsbCBmIGFsbF9hcmdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHlcIikpO1xuXG4gICgqIC0tLSBTY29wZSBzdGFjayAtLS0gKilcbiAgKCogU2NvcGUgcHJpbWl0aXZlcyAoc2NvcGUtcHVzaCEsIHNjb3BlLXBvcCEsIGNvbnRleHQsIGNvbGxlY3QhLCBjb2xsZWN0ZWQsXG4gICAgIGVtaXQhLCBlbWl0dGVkLCBzY29wZS1lbWl0ISwgc2NvcGUtZW1pdHRlZCwgZXRjLikgYXJlIHJlZ2lzdGVyZWQgYnlcbiAgICAgU3hfcHJpbWl0aXZlcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gaW4gdGhlIHByaW1pdGl2ZXMgdGFibGUuXG4gICAgIFRoZSBDRUsgZXZhbHVhdG9yIGZhbGxzIHRocm91Z2ggdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgd2hlbiBhIHN5bWJvbFxuICAgICBpc24ndCBpbiB0aGUgZW52LCBzbyB0aGVzZSB3b3JrIGF1dG9tYXRpY2FsbHkuXG4gICAgIE9ubHkgcHJvdmlkZS1wdXNoIS9wcm92aWRlLXBvcCEgbmVlZCBleHBsaWNpdCBlbnYgYmluZGluZ3MgYXMgYWxpYXNlcy4gKilcbiAgYmluZCBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuOyB2XSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcHVzaCBuIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wdXNoIVwiKSk7XG4gIGJpbmQgXCJwcm92aWRlLXBvcCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuXSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcG9wIG4gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wb3AhXCIpKTtcblxuICAoKiBSdW50aW1lIGhlbHBlcnMgZm9yIGJ5dGVjb2RlZCBkZWZjb21wL2RlZmlzbGFuZC9kZWZtYWNybyBmb3Jtcy5cbiAgICAgVGhlIGNvbXBpbGVyIGVtaXRzIEdMT0JBTF9HRVQgXCJldmFsLWRlZmNvbXBcIiArIENBTEwg4oCUIHRoZXNlIG11c3RcbiAgICAgZXhpc3QgYXMgY2FsbGFibGUgdmFsdWVzIGZvciBieXRlY29kZWQgLnN4IGZpbGVzIHRoYXQgY29udGFpblxuICAgICBjb21wb25lbnQgZGVmaW5pdGlvbnMgKGUuZy4gY3NzeC5zeCkuICopXG4gIGJpbmQgXCJldmFsLWRlZmNvbXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZjb21wIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJldmFsLWRlZmlzbGFuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZmlzbGFuZCAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiZXZhbC1kZWZtYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZm1hY3JvIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEZyYWdtZW50IC8gcmF3IEhUTUwgLS0tICopXG4gIGJpbmQgXCI8PlwiIChmdW4gYXJncyAtPlxuICAgIFJhd0hUTUwgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgKGZ1biBhIC0+XG4gICAgICBtYXRjaCBhIHdpdGggU3RyaW5nIHMgfCBSYXdIVE1MIHMgLT4gcyB8IE5pbCAtPiBcIlwiXG4gICAgICB8IExpc3QgXyAtPiBTeF9yZW5kZXIuc3hfcmVuZGVyX3RvX2h0bWwgZ2xvYmFsX2VudiBhIGdsb2JhbF9lbnZcbiAgICAgIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgYSkgYXJncykpKTtcbiAgYmluZCBcInJhdyFcIiAoZnVuIGFyZ3MgLT5cbiAgICBSYXdIVE1MIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoIFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHMgfCBfIC0+IHZhbHVlX3RvX3N0cmluZyBhKSBhcmdzKSkpO1xuXG4gIGJpbmQgXCJkZWZpbmUtcGFnZS1oZWxwZXJcIiAoZnVuIF8gLT4gTmlsKTtcblxuICAoKiBJTyByZWdpc3RyeSDigJQgc3BlYy1sZXZlbCBkZWZpbyBwb3B1bGF0ZXMgKmlvLXJlZ2lzdHJ5KiBpbiBldmFsdWF0b3IuXG4gICAgIEFsaWFzIGFzIF9faW8tcmVnaXN0cnkgZm9yIGJhY2t3YXJkIGNvbXBhdC4gKilcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiX19pby1yZWdpc3RyeVwiIFN4X3JlZi5faW9fcmVnaXN0cnlfKTtcblxuICAoKiAtLS0gUmVuZGVyIC0tLSAqKVxuICBTeF9yZW5kZXIuc2V0dXBfcmVuZGVyX2VudiBnbG9iYWxfZW52O1xuICBiaW5kIFwic2V0LXJlbmRlci1hY3RpdmUhXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZW5kZXItYWN0aXZlP1wiIChmdW4gXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaXMtaHRtbC10YWc/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IEJvb2wgKFN4X3JlbmRlci5pc19odG1sX3RhZyBzKSB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogLS0tIFJlbmRlciBjb25zdGFudHMgbmVlZGVkIGJ5IHdlYiBhZGFwdGVycyAtLS0gKilcbiAgbGV0IGh0bWxfdGFncyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmh0bWxfdGFncykgaW5cbiAgbGV0IHZvaWRfZWxlbWVudHMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci52b2lkX2VsZW1lbnRzKSBpblxuICBsZXQgYm9vbGVhbl9hdHRycyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmJvb2xlYW5fYXR0cnMpIGluXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIkhUTUxfVEFHU1wiIGh0bWxfdGFncyk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIlZPSURfRUxFTUVOVFNcIiB2b2lkX2VsZW1lbnRzKTtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiQk9PTEVBTl9BVFRSU1wiIGJvb2xlYW5fYXR0cnMpO1xuXG4gICgqIC0tLSBIVE1MIHRhZyBzcGVjaWFsIGZvcm1zIChkaXYsIHNwYW4sIGgxLCAuLi4pIC0tLSAqKVxuICAoKiBSZWdpc3RlcmVkIGFzIGN1c3RvbSBzcGVjaWFsIGZvcm1zIHNvIGtleXdvcmRzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgIEhhbmRsZXIgcmVjZWl2ZXMgKHJhdy1hcmdzIGVudiksIGV2YWx1YXRlcyBub24ta2V5d29yZCBhcmdzXG4gICAgIHdoaWxlIGtlZXBpbmcga2V5d29yZCBuYW1lcyBpbnRhY3QuICopXG4gIGxldCBldmFsX3RhZ19hcmdzIHJhd19hcmdzIGVudiA9XG4gICAgbGV0IGFyZ3MgPSBTeF9ydW50aW1lLnN4X3RvX2xpc3QgcmF3X2FyZ3MgaW5cbiAgICBsZXQgcmVjIHByb2Nlc3MgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoS2V5d29yZCBfIGFzIGt3KSA6OiB2YWx1ZSA6OiByZXN0IC0+XG4gICAgICAgICgqIGtleXdvcmQgKyBpdHMgdmFsdWU6IGtlZXAga2V5d29yZCwgZXZhbHVhdGUgdmFsdWUgKilcbiAgICAgICAga3cgOjogU3hfcmVmLmV2YWxfZXhwciB2YWx1ZSBlbnYgOjogcHJvY2VzcyByZXN0XG4gICAgICB8IChLZXl3b3JkIF8gYXMga3cpIDo6IFtdIC0+XG4gICAgICAgICgqIHRyYWlsaW5nIGtleXdvcmQgd2l0aCBubyB2YWx1ZSDigJQgYm9vbGVhbiBhdHRyICopXG4gICAgICAgIFtrd11cbiAgICAgIHwgZXhwciA6OiByZXN0IC0+XG4gICAgICAgICgqIG5vbi1rZXl3b3JkOiBldmFsdWF0ZSAqKVxuICAgICAgICBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52IDo6IHByb2Nlc3MgcmVzdFxuICAgIGluXG4gICAgcHJvY2VzcyBhcmdzXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIHRhZyAtPlxuICAgIGlnbm9yZSAoU3hfcmVmLnJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIHRhZylcbiAgICAgIChOYXRpdmVGbiAoXCJzZjpcIiBeIHRhZywgZnVuIGhhbmRsZXJfYXJncyAtPlxuICAgICAgICBtYXRjaCBoYW5kbGVyX2FyZ3Mgd2l0aFxuICAgICAgICB8IFtyYXdfYXJnczsgZW52XSAtPiBMaXN0IChTeW1ib2wgdGFnIDo6IGV2YWxfdGFnX2FyZ3MgcmF3X2FyZ3MgZW52KVxuICAgICAgICB8IF8gLT4gTmlsKSkpXG4gICkgU3hfcmVuZGVyLmh0bWxfdGFncztcblxuICAoKiAtLS0gRXJyb3IgaGFuZGxpbmcgLS0tICopXG4gIGJpbmQgXCJjZWstdHJ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bms7IGhhbmRsZXJdIC0+XG4gICAgICAodHJ5IFN4X3JlZi5jZWtfY2FsbCB0aHVuayBOaWxcbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+IFN4X3JlZi5jZWtfY2FsbCBoYW5kbGVyIChMaXN0IFtTdHJpbmcgbXNnXSkpXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5IGxldCByID0gU3hfcmVmLmNla19jYWxsIHRodW5rIE5pbCBpblxuICAgICAgICBMaXN0IFtTeW1ib2wgXCJva1wiOyByXVxuICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT4gTGlzdCBbU3ltYm9sIFwiZXJyb3JcIjsgU3RyaW5nIG1zZ10pXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEV2YWx1YXRvciBicmlkZ2UgZnVuY3Rpb25zIG5lZWRlZCBieSBzcGVjIC5zeCBmaWxlcyAtLS0gKilcbiAgYmluZCBcImV2YWwtZXhwclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJ0cmFtcG9saW5lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gIVN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gdiB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImV4cGFuZC1tYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbbWFjOyByYXc7IEVudiBlXSAtPiBTeF9yZWYuZXhwYW5kX21hY3JvIG1hYyByYXcgKEVudiBlKSB8IFttYWM7IHJhd10gLT4gU3hfcmVmLmV4cGFuZF9tYWNybyBtYWMgcmF3IChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjYWxsLWxhbWJkYVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGE7IF9dIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgKCogVXNlIGNla19jYWxsIGluc3RlYWQgb2Ygc3hfY2FsbCB0byBhdm9pZCBldmFsX2V4cHIgY29weWluZ1xuICAgICAgICAgRGljdCB2YWx1ZXMgKHNpZ25hbHMpLiBzeF9jYWxsIHJldHVybnMgYSBUaHVuayByZXNvbHZlZCB2aWFcbiAgICAgICAgIGV2YWxfZXhwciB3aGljaCBkZWVwLWNvcGllcyBkaWN0cywgYnJlYWtpbmcgc2lnbmFsIG11dGF0aW9uLiAqKVxuICAgICAgU3hfcmVmLmNla19jYWxsIGYgYVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNhbGwtbGFtYmRhOiBleHBlY3RlZCAoZm4gYXJncyBlbnY/KVwiKSk7XG4gIGJpbmQgXCJjZWstY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgbGV0IGFyZ19saXN0ID0gbWF0Y2ggYSB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgdiAtPiBbdl0gaW5cbiAgICAgIFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgZiBhcmdfbGlzdClcbiAgICB8IFtmOyBfXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjZWstY2FsbDogbm90IGNhbGxhYmxlOiBcIiBeIHR5cGVfb2YgZikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWNhbGw6IGV4cGVjdGVkIChmbiBhcmdzKVwiKSk7XG4gIGJpbmQgXCJjZWstZXZhbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJxcS1leHBhbmQtcnVudGltZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdGVtcGxhdGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBnbG9iYWxfZW52KSB8IFt0ZW1wbGF0ZTsgRW52IGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBlKSB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gVHlwZSBwcmVkaWNhdGVzIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInRodW5rP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1RodW5rIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJ0aHVuay1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZXhwciB2IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidGh1bmstZW52XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZW52IHYgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGE/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtNYWNybyBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiaXNsYW5kP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiY29tcG9uZW50P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImNhbGxhYmxlP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW05hdGl2ZUZuIF9dIHwgW0xhbWJkYSBfXSB8IFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJjb250aW51YXRpb24/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ29udGludWF0aW9uIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJsYW1iZGEtcGFyYW1zXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgbC5sX3BhcmFtcykgfCBfIC0+IExpc3QgW10pO1xuICBiaW5kIFwibGFtYmRhLWJvZHlcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGEtY2xvc3VyZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcblxuICAoKiAtLS0gQ29yZSBvcGVyYXRpb25zIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInNwcmVhZC1hdHRyc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIHBhaXJzXSAtPiBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwucmVwbGFjZSBkIGsgdikgcGFpcnM7IERpY3QgZCB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwibWFrZS1zcHJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gU3ByZWFkIChIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IChrLCB2KSA6OiBhY2MpIGQgW10pIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBSYXdIVE1MIHMgfCBbdl0gLT4gUmF3SFRNTCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicmF3LWh0bWwtY29udGVudFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1Jhd0hUTUwgc10gLT4gU3RyaW5nIHMgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIGJpbmQgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApIHwgXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaWRlbnRpY2FsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IEJvb2wgKGEgPT0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaWRlbnRpY2FsP1wiKSk7XG4gIGJpbmQgXCJmb3ItZWFjaC1pbmRleGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZm5fdmFsOyBMaXN0IGl0ZW1zXSB8IFtmbl92YWw7IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH1dIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSBpdGVtIC0+XG4gICAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbZm5fdmFsOyBOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgaXRlbV0pIChFbnYgZ2xvYmFsX2VudikpXG4gICAgICApIGl0ZW1zOyBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gU3RyaW5nL251bWJlciBoZWxwZXJzIHVzZWQgYnkgb3JjaGVzdHJhdGlvbi9icm93c2VyIC0tLSAqKVxuICBiaW5kIFwibWFrZS1zeC1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN4RXhwciBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3gtZXhwclwiKSk7XG4gIGJpbmQgXCJzeC1leHByLXNvdXJjZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N4RXhwciBzXSAtPiBTdHJpbmcgcyB8IFtTdHJpbmcgc10gLT4gU3RyaW5nIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtZXhwci1zb3VyY2VcIikpO1xuICBiaW5kIFwicGFyc2UtaW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9pbnQgKGludF9vZl9zdHJpbmcgcykpIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IGRlZmF1bHRfdmFsXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2ZfaW50IChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoIF8gLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBOdW1iZXIgKEZsb2F0LnJvdW5kIG4pXG4gICAgfCBbXzsgZGVmYXVsdF92YWxdIC0+IGRlZmF1bHRfdmFsIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicGFyc2UtbnVtYmVyXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBfIC0+IE5pbCkgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFNlcnZlci1vbmx5IHN0dWJzIChuby1vcHMgaW4gYnJvd3NlcikgLS0tICopXG4gIGJpbmQgXCJxdWVyeVwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwiYWN0aW9uXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LWFyZ1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW187IGRdIC0+IGQgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LW1ldGhvZFwiIChmdW4gXyAtPiBTdHJpbmcgXCJHRVRcIik7XG4gIGJpbmQgXCJjdHhcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImhlbHBlclwiIChmdW4gXyAtPiBOaWwpO1xuICAoKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEpJVCBjb21waWxhdGlvbiBob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqIE9uIGZpcnN0IGNhbGwgdG8gYSBuYW1lZCBsYW1iZGEsIHRyeSB0byBjb21waWxlIGl0IHRvIGJ5dGVjb2RlIHZpYSAgKilcbigqIGNvbXBpbGVyLnN4IChsb2FkZWQgYXMgYW4gLnN4IHBsYXRmb3JtIGZpbGUpLiBDb21waWxlZCBjbG9zdXJlcyBydW4gKilcbigqIG9uIHRoZSBieXRlY29kZSBWTTsgZmFpbHVyZXMgZmFsbCBiYWNrIHRvIHRoZSBDRUsgaW50ZXJwcmV0ZXIuICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgX2ppdF9jb21waWxpbmcgPSByZWYgZmFsc2VcbmxldCBfaml0X2VuYWJsZWQgPSByZWYgZmFsc2VcblxubGV0ICgpID1cbiAgU3hfcnVudGltZS5faml0X3RyeV9jYWxsX2ZuIDo9IFNvbWUgKGZ1biBmIGFyZ3MgLT5cbiAgICBtYXRjaCBmIHdpdGhcbiAgICB8IExhbWJkYSBsIHdoZW4gIV9qaXRfZW5hYmxlZCAtPlxuICAgICAgKG1hdGNoIGwubF9jb21waWxlZCB3aXRoXG4gICAgICAgfCBTb21lIGNsIHdoZW4gbm90IChTeF92bS5pc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6ICVzIChiYz0lZCBjb25zdHM9JWQgdXB2PSVkKVxcbiUhXCJcbiAgICAgICAgICAgICAgZm5fbmFtZSBtc2dcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2J5dGVjb2RlKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfY29uc3RhbnRzKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICgqIE1hcmsgYXMgZmFpbGVkIHRvIHN0b3AgcmV0cnlpbmcgKilcbiAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIChTeF92bS5qaXRfZmFpbGVkX3NlbnRpbmVsKTtcbiAgICAgICAgICAgIE5vbmUpXG4gICAgICAgfCBTb21lIF8gLT4gTm9uZVxuICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgaWYgIV9qaXRfY29tcGlsaW5nIHRoZW4gTm9uZVxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSB0cnVlO1xuICAgICAgICAgICBsZXQgY29tcGlsZWQgPSBTeF92bS5qaXRfY29tcGlsZV9sYW1iZGEgbCBfdm1fZ2xvYmFscyBpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSBmYWxzZTtcbiAgICAgICAgICAgKG1hdGNoIGNvbXBpbGVkIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICAgIGxldCBmbl9uYW1lMiA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlcyAoYmM9JWQgY29uc3RzPSVkIHVwdj0lZClcXG4lIVwiXG4gICAgICAgICAgICAgICAgICBmbl9uYW1lMiBtc2dcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19ieXRlY29kZSlcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19jb25zdGFudHMpXG4gICAgICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSAoU3hfdm0uaml0X2ZhaWxlZF9zZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgTm9uZSlcbiAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpXG4gICAgICAgICBlbmQpXG4gICAgfCBfIC0+IE5vbmUpXG5cbmxldCAoKSA9IGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcImVuYWJsZS1qaXQhXCIgKE5hdGl2ZUZuIChcImVuYWJsZS1qaXQhXCIsIGZ1biBfIC0+IF9qaXRfZW5hYmxlZCA6PSB0cnVlOyBOaWwpKSlcblxuKCogU2VlZCBCT1RIIF92bV9nbG9iYWxzIEFORCBnbG9iYWxfZW52IHdpdGggQUxMIHByaW1pdGl2ZXMgYXMgTmF0aXZlRm4gdmFsdWVzLlxuICAgVW5jb25kaXRpb25hbCDigJQgbmF0aXZlIHByaW1pdGl2ZXMgYXJlIGF1dGhvcml0YXRpdmUgZm9yIENBTExfUFJJTSBkaXNwYXRjaC5cbiAgIE11c3QgYmUgaW4gYm90aCBiZWNhdXNlIHN5bmNfZW52X3RvX3ZtKCkgY29waWVzIGdsb2JhbF9lbnYg4oaSIF92bV9nbG9iYWxzLiAqKVxubGV0ICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gbmFtZSBmbiAtPlxuICAgIGxldCB2ID0gTmF0aXZlRm4gKG5hbWUsIGZuKSBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyBuYW1lIHY7XG4gICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2XG4gICkgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUmVnaXN0ZXIgZ2xvYmFsIFN4S2VybmVsIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCAoKSA9XG4gIGxldCBzeCA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICBsZXQgd3JhcCBmbiA9IEpzLlVuc2FmZS5mdW5fY2FsbFxuICAgIChKcy5VbnNhZmUucHVyZV9qc19leHByIFwiKGZ1bmN0aW9uKGZuKSB7IHJldHVybiBmdW5jdGlvbigpIHsgZ2xvYmFsVGhpcy5fX3N4UiA9IHVuZGVmaW5lZDsgdmFyIHIgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpOyByZXR1cm4gZ2xvYmFsVGhpcy5fX3N4UiAhPT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcy5fX3N4UiA6IHI7IH07IH0pXCIpXG4gICAgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMud3JhcF9jYWxsYmFjayBmbikgfF0gaW5cblxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJwYXJzZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcGFyc2UpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzdHJpbmdpZnlcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3N0cmluZ2lmeSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImV2YWxcIikgKHdyYXAgYXBpX2V2YWwpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsVk1cIikgKHdyYXAgYXBpX2V2YWxfdm0pO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsRXhwclwiKSAod3JhcCBhcGlfZXZhbF9leHByKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwicmVuZGVyVG9IdG1sXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9yZW5kZXJfdG9faHRtbCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImxvYWRcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2xvYWQpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkTW9kdWxlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkX21vZHVsZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImJlZ2luTW9kdWxlTG9hZFwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+IGFwaV9iZWdpbl9tb2R1bGVfbG9hZCAoKSkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJlbmRNb2R1bGVMb2FkXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT4gYXBpX2VuZF9tb2R1bGVfbG9hZCAoKSkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJjb21waWxlTW9kdWxlXCIpICh3cmFwIGFwaV9jb21waWxlX21vZHVsZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInR5cGVPZlwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfdHlwZV9vZik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImluc3BlY3RcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2luc3BlY3QpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJlbmdpbmVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2VuZ2luZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlZ2lzdGVyTmF0aXZlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9yZWdpc3Rlcl9uYXRpdmUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkU291cmNlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiY2FsbEZuXCIpICh3cmFwIGFwaV9jYWxsX2ZuKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiaXNDYWxsYWJsZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfaXNfY2FsbGFibGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJmbkFyaXR5XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9mbl9hcml0eSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImRlYnVnRW52XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9kZWJ1Z19lbnYpO1xuXG4gICgqIFNjb3BlIHRyYWNpbmcgQVBJICopXG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInNjb3BlVHJhY2VPblwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+XG4gICAgU3hfcHJpbWl0aXZlcy5zY29wZV90cmFjZV9lbmFibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlT2ZmXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9wcmltaXRpdmVzLnNjb3BlX3RyYWNlX2Rpc2FibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlRHJhaW5cIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIGxldCBsb2cgPSBTeF9wcmltaXRpdmVzLnNjb3BlX3RyYWNlX2RyYWluICgpIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkgKEFycmF5Lm9mX2xpc3QgKExpc3QubWFwIChmdW4gcyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgcykpIGxvZykpKSkpO1xuXG4gICgqIFN0ZXAgbGltaXQgZm9yIHRpbWVvdXQgcHJvdGVjdGlvbiAqKVxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzZXRTdGVwTGltaXRcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biBuIC0+XG4gICAgbGV0IGxpbWl0ID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIG4pIHw+IGludF9vZl9mbG9hdCBpblxuICAgIFN4X3JlZi5zdGVwX2xpbWl0IDo9IGxpbWl0O1xuICAgIFN4X3JlZi5zdGVwX2NvdW50IDo9IDA7XG4gICAgU3hfdm0udm1fcmVzZXRfY291bnRlcnMgKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlc2V0U3RlcENvdW50XCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9yZWYuc3RlcF9jb3VudCA6PSAwO1xuICAgIFN4X3ZtLnZtX3Jlc2V0X2NvdW50ZXJzICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuXG4gIEpzLlVuc2FmZS5zZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiU3hLZXJuZWxcIikgc3hcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsNCIsImEyIiwiYTMiLCJjYW1sX2NhbGw1IiwiYTQiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3hfdm0iLCJTeF90eXBlcyIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWIiLCJKc19vZl9vY2FtbF9KcyIsIlN0ZGxpYl9QcmludGV4YyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX09wdGlvbiIsIlN4X3ZtX3JlZiIsIlN4X3JlZiIsIlN4X3ByaW1pdGl2ZXMiLCJTeF9ydW50aW1lIiwiU3hfcmVuZGVyIiwiU3hfcGFyc2VyIiwiaGFuZGxlX3RhYmxlIiwibmV4dF9oYW5kbGUiLCJhbGxvY19oYW5kbGUiLCJ2IiwiaWQiLCJnZXRfaGFuZGxlIiwibWF0Y2giLCJhbGxvY19ob3N0X2hhbmRsZSIsIm5leHRfaG9zdF9oYW5kbGUiLCJob3N0X3B1dCIsIm9iaiIsImdsb2JhbF9lbnYiLCJjYWxsX3N4X2ZuIiwiZm4iLCJhcmdzIiwicmVzdWx0IiwidGFnX2ZuIiwiY3N0X2NhbGxiYWNrIiwiY3N0X2NhbGxiYWNrX3NfaGFuZGxlX2QiLCJjc3Rfdm1fcGVuZGluZ19jZWsiLCJjc3Rfdm1fcGVuZGluZ19jZWtfYl9yZXVzZV9kX2YiLCJjc3RfZnJhbWVzIiwiY3N0X2hhbmRsZSIsImNzdF9yZXVzZSIsImNzdCIsImNzdF9zeF9yZXN1bWUiLCJjc3Rfc3AiLCJjc3RfaG9zdF9oYW5kbGUiLCJjc3RfZGljdCIsImNzdF9rZXl3b3JkIiwiY3N0X2xpc3QiLCJjc3Rfc3ltYm9sIiwidmFsdWVfdG9fanMiLCJiIiwibiIsInMiLCJrIiwiaXRlbXMiLCJkIiwiaGFuZGxlIiwiaW5uZXIiLCJhcmdzX2pzIiwiYXJnIiwiZXhuIiwibXNnIiwiZm5faW5mbyIsInZtIiwicmVxdWVzdCIsImFjdGl2ZSIsIm1ha2Vfc3VzcGVuc2lvbiIsInJlcSIsInJlc3VsdF9qcyIsInZtMiIsInJlcTIiLCJ2bV9mcmFtZV9uYW1lcyIsImV4dHJhIiwiZHJpdmUiLCJhcnIiLCJqc190b192YWx1ZSIsImpzIiwidHkiLCJoIiwiaGFzX2hvc3RfY2IiLCJ0eXBlX2ZpZWxkIiwidDAiLCJ0MSIsImkiLCJ0YWciLCJpdGVtc19qcyIsInQzIiwidDQiLCJrZXlzIiwibGVuIiwicmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwiLCJ2bV9nbG9iYWxzIiwic3luY19lbnZfdG9fdm0iLCJwYXJhbSIsImVudiIsIm5hbWUiLCJyZXNvbHZlX2ZuIiwiY3N0X1BhcnNlX2Vycm9yIiwiYXBpX3BhcnNlIiwic3JjX2pzIiwic3JjIiwidmFsdWVzIiwiY3N0X0Vycm9yIiwiY3N0X0Vycm9yX0lPX3N1c3BlbnNpb25faW5fbm9uIiwiYXBpX2V2YWwiLCJleHBycyIsImFjYyIsImV4cHIiLCJjc3RfRXJyb3JfY29tcGlsZV9tb2R1bGVfbm90X2wiLCJjc3RfY29tcGlsZV9tb2R1bGUiLCJhcGlfZXZhbF92bSIsImNvbXBpbGVfZm4iLCJjb2RlX3ZhbCIsImNvZGUiLCJhcGlfZXZhbF9leHByIiwiZXhwcl9qcyIsImVudl9qcyIsImNzdF9pbXBvcnQiLCJhcGlfbG9hZCIsImNvdW50Iiwic3RhdGUiLCJmaW5hbCIsIm9wIiwibGliX3NwZWMiLCJyZXNwb25zZSIsInN5bmNfdm1fdG9fZW52IiwiZXhpc3RpbmciLCJjc3Rfc3VzcGVuZGVkIiwibWFrZV9qc19pbXBvcnRfc3VzcGVuc2lvbiIsInJlc3VtZWQiLCJkMiIsImFwaV9sb2FkX21vZHVsZSIsIm1vZHVsZV9qcyIsImFwaV9kZWJ1Z19lbnYiLCJuYW1lX2pzIiwiZm91bmRfZW52IiwiZm91bmRfdm0iLCJ0b3RhbF9lbnYiLCJ0b3RhbF92bSIsImVudl9zIiwidm1fcyIsImFwaV9jb21waWxlX21vZHVsZSIsInN4X3JlbmRlcl9tb2RlIiwiYXBpX3JlbmRlcl90b19odG1sIiwicHJldiIsImh0bWwiLCJhcGlfc3RyaW5naWZ5Iiwidl9qcyIsImFwaV90eXBlX29mIiwiYXBpX2luc3BlY3QiLCJhcGlfZW5naW5lIiwiYXBpX3JlZ2lzdGVyX25hdGl2ZSIsImNhbGxiYWNrX2pzIiwibmF0aXZlX2ZuIiwianNfYXJncyIsIm1ha2VfanNfY2FsbEZuX3N1c3BlbnNpb24iLCJhcGlfY2FsbF9mbiIsImZuX2pzIiwiZXJyX29iaiIsImFwaV9pc19jYWxsYWJsZSIsImFwaV9mbl9hcml0eSIsImwiLCJiaW5kIiwiY3N0X2Nla19ldmFsIiwiZSIsImVudl92YWwiLCJjc3RfY2VrX2NhbGwiLCJjc3RfY2VrX2NhbGxfZXhwZWN0ZWRfZm5fYXJncyIsImNzdF9jZWtfY2FsbF9ub3RfY2FsbGFibGUiLCJhIiwiYXJnX2xpc3QiLCJkZWVwX2VxdWFsIiwia2EiLCJrYiIsImNvbmQiLCJjc3RfZXJyb3IiLCJjc3Rfb2siLCJ0aHVuayIsImNvZGVfZm9ybSIsImNzdF9jb2RlIiwiY29udmVydF9jb2RlIiwiZm9ybSIsInJlc3QiLCJwYXJzZV9rdiIsImNzdF9hcml0eSIsImNzdF9ieXRlY29kZSIsImNzdF9jb25zdGFudHMiLCJjc3RfdXB2YWx1ZV9jb3VudCIsImNvbnN0cyIsIm51bXMiLCJjb252ZXJ0X2NvbnN0IiwibW9kdWxlX3ZhbCIsInIiLCJ0YXJnZXQiLCJ4IiwidXciLCJjc3RfZW52X2hhcyIsImNzdF9lbnZfZ2V0IiwiY3N0X2Vudl9iaW5kIiwiY3N0X2Vudl9zZXQiLCJjc3RfZW52X2V4dGVuZCIsImNzdF9lbnZfbWVyZ2UiLCJjc3RfbWFrZV9zeW1ib2wiLCJjc3RfbWFrZV9rZXl3b3JkIiwiY3N0X2tleXdvcmRfbmFtZSIsImNzdF9zeW1ib2xfbmFtZSIsImMiLCJjc3RfY29tcG9uZW50X2hhc19jaGlsZHJlbiIsImhhc19jaGlsZHJlbl9pbXBsIiwiY3N0X21ha2VfY2VrX3N0YXRlIiwiY3N0X2Nla19zdGVwIiwiY3N0X2Nla19waGFzZSIsImNzdF9jZWtfdmFsdWUiLCJjc3RfY2VrX3Rlcm1pbmFsIiwiY3N0X2Nla19rb250IiwiY3N0X2ZyYW1lX3R5cGUiLCJjc3Rfc3RyaWN0IiwiY3N0X3ByaW1fcGFyYW1fdHlwZXMiLCJ0IiwiY3N0X2FwcGx5IiwiYWxsX2FyZ3MiLCJwcmVmaXgiLCJsYXN0IiwiY3N0X3Byb3ZpZGVfcHVzaCIsImNzdF9wcm92aWRlX3BvcCIsImh0bWxfdGFncyIsInZvaWRfZWxlbWVudHMiLCJib29sZWFuX2F0dHJzIiwiZXZhbF90YWdfYXJncyIsInJhd19hcmdzIiwicHJvY2VzcyIsImt3IiwidmFsdWUiLCJoYW5kbGVyX2FyZ3MiLCJoYW5kbGVyIiwicmF3IiwibWFjIiwidGVtcGxhdGUiLCJwYWlycyIsImNzdF9pZGVudGljYWwiLCJmbl92YWwiLCJpdGVtIiwiY3N0X21ha2Vfc3hfZXhwciIsImNzdF9zeF9leHByX3NvdXJjZSIsImRlZmF1bHRfdmFsIiwiY3N0X2JjIiwiY3N0X2NvbnN0cyIsImNzdF91cHYiLCJjc3Rfaml0X0ZBSUwiLCJjc3Rfaml0X0ZBSUxfc19zX2JjX2RfY29uc3RzX2QiLCJqaXRfY29tcGlsaW5nIiwiaml0X2VuYWJsZWQiLCJjbCIsImZuX25hbWUiLCJjb21waWxlZCIsImZuX25hbWUyIiwiY3N0X2VuYWJsZV9qaXQiLCJ3cmFwIiwic3giLCJpbl9iYXRjaCIs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InZlcnNpb24iOjMsImZpbGUiOiJzdGRfZXhpdC5jbW8uanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWIiXSwibWFwcGluZ3MiOiJPQUFBQSxVQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLFNBQUE7QUFBQSxHQ2lCUTtBQUFBLEdBQVk7QUFBQTtBQUFBLEVEakJwQiIsImlnbm9yZUxpc3QiOlswXX19XX0= diff --git a/shared/static/wasm/sx_browser.bc.wasm.js b/shared/static/wasm/sx_browser.bc.wasm.js index 30b1e31c..3ad252d5 100644 --- a/shared/static/wasm/sx_browser.bc.wasm.js +++ b/shared/static/wasm/sx_browser.bc.wasm.js @@ -1792,7 +1792,7 @@ blake2_js_for_wasm_create: blake2_js_for_wasm_create}; } (globalThis)) -({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["re-9a0de245",[2]],["unix-100664f4",[2]],["sx-809891af",[2,3,4]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,6]],["dune__exe__Sx_browser-4878f9e1",[2,5,7]],["std_exit-10fb8830",[2]],["start-8c705527",0]],"generated":(b=>{var +({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["re-9a0de245",[2]],["unix-100664f4",[2]],["sx-c1aa02f5",[2,3,4]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,6]],["dune__exe__Sx_browser-b2ad0885",[2,5,7]],["std_exit-10fb8830",[2]],["start-8c705527",0]],"generated":(b=>{var c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new diff --git a/shared/sx/boundary.py b/shared/sx/boundary.py index c4685141..82c41333 100644 --- a/shared/sx/boundary.py +++ b/shared/sx/boundary.py @@ -26,8 +26,21 @@ _DECLARED_IO: frozenset[str] | None = None _DECLARED_HELPERS: dict[str, frozenset[str]] | None = None +_LOAD_FAILURE_WARNED = False + + def _load_declarations() -> None: - global _DECLARED_PURE, _DECLARED_IO, _DECLARED_HELPERS + # KNOWN-BROKEN (2026-07 review, finding C24): `.ref.boundary_parser` was + # moved to hosts/python/boundary_parser.py AND its tier-1 declaration + # source (shared/sx/ref/boundary.sx) was deleted, so this ImportError + # fires on every call and boundary validation has been a silent no-op — + # including under SX_BOUNDARY_STRICT=1, which production compose sets. + # Do NOT "fix" the import in isolation: reviving validation while strict + # mode is live in production requires first recreating the core + # declarations and proving zero violations across all services + # (remediation plan, Phase 2 "Python boundary"). Until then we make the + # dead state visible instead of silent. + global _DECLARED_PURE, _DECLARED_IO, _DECLARED_HELPERS, _LOAD_FAILURE_WARNED if _DECLARED_PURE is not None: return try: @@ -42,7 +55,15 @@ def _load_declarations() -> None: # Don't cache failure — parser may not be ready yet (circular import # during startup). Will retry on next call. Validation functions # skip checks when declarations aren't loaded. - logger.debug("Boundary declarations not ready yet: %s", e) + if not _LOAD_FAILURE_WARNED: + _LOAD_FAILURE_WARNED = True + logger.warning( + "SX boundary validation is INACTIVE (declarations failed to " + "load: %s). All validate_* calls are no-ops, even under " + "SX_BOUNDARY_STRICT=1.", e, + ) + else: + logger.debug("Boundary declarations not ready yet: %s", e) def _is_strict() -> bool: diff --git a/spec/evaluator.sx b/spec/evaluator.sx index 845de19a..2103947b 100644 --- a/spec/evaluator.sx +++ b/spec/evaluator.sx @@ -1312,7 +1312,12 @@ (= (type-of item) "list") (= (len item) 2) (= (type-of (first item)) "symbol") - (= (symbol-name (first item)) "splice-unquote")) + ;; ,@ parses to splice-unquote; accept the R7RS longhand + ;; unquote-splicing too (it used to serialize literally — + ;; a silent zero-splice) + (or + (= (symbol-name (first item)) "splice-unquote") + (= (symbol-name (first item)) "unquote-splicing"))) (let ((spliced (trampoline (eval-expr (nth item 1) env)))) (if @@ -1395,7 +1400,9 @@ (let ((result (apply producer (list)))) (if - (and (dict? result) (get result :_values false)) + ;; 2-arg get: absent key → nil (falsy) — the explicit false default + ;; was redundant AND the OCaml transpiler only emits 2-arg get + (and (dict? result) (get result :_values)) (apply consumer (get result :_list)) (apply consumer (list result)))))) @@ -1415,7 +1422,7 @@ (let ((result (trampoline (eval-expr val-expr local)))) (let - ((vs (if (and (dict? result) (get result :_values false)) (get result :_list) (list result)))) + ((vs (if (and (dict? result) (get result :_values)) (get result :_list) (list result)))) (for-each-indexed (fn (idx name) @@ -1442,7 +1449,7 @@ (let ((result (trampoline (eval-expr val-expr env)))) (let - ((vs (if (and (dict? result) (get result :_values false)) (get result :_list) (list result)))) + ((vs (if (and (dict? result) (get result :_values)) (get result :_list) (list result)))) (for-each-indexed (fn (idx name) (env-bind! env (symbol-name name) (nth vs idx))) names) @@ -1699,7 +1706,9 @@ (body (rest args)) (var (first var-clauses)) (clauses (rest var-clauses)) - (sentinel (make-symbol "__guard-reraise__"))) + ;; gensym: fresh tag per guard execution — a user value shaped + ;; (list '__guard-reraise__ x) must not be mistaken for a re-raise + (sentinel (gensym "__guard-reraise__"))) (step-eval-list (list (quote let) @@ -1841,12 +1850,18 @@ ("io" (step-sf-io args env kont)) ("begin" (step-sf-begin args env kont)) ("do" + ;; do-loop only when it really looks like Scheme do: + ;; every element of the first form is a (var init [step]) + ;; list AND a test-clause list follows. A begin-style + ;; (do ((fn (x) x) 5) ...) — IIFE head — used to misparse + ;; as a binding list. (if (and - (not (empty? args)) + (>= (len args) 2) (list? (first args)) (not (empty? (first args))) - (list? (first (first args)))) + (every? (fn (b) (list? b)) (first args)) + (list? (nth args 1))) (let ((bindings (first args)) (test-clause (nth args 1)) @@ -2056,7 +2071,9 @@ (args env) (let ((thunk (make-lambda (list) (first args) env))) {:_iterative true :forced false :value nil :thunk thunk :_promise true}))) -(define promise? (fn (v) (and (dict? v) (get v :_promise false)))) +;; 2-arg get throughout: absent key → nil (falsy) — explicit false/nil +;; defaults were redundant AND the OCaml transpiler only emits 2-arg get +(define promise? (fn (v) (and (dict? v) (get v :_promise)))) ;; ═══════════════════════════════════════════════════════════════ ;; Part 11: Entry Points @@ -2075,12 +2092,12 @@ (not (promise? p)) p (if - (get p :forced false) - (get p :value nil) + (get p :forced) + (get p :value) (let - ((result (apply (get p :thunk nil) (list)))) + ((result (apply (get p :thunk) (list)))) (let - ((final (if (and (get p :_iterative false) (promise? result)) (force result) result))) + ((final (if (and (get p :_iterative) (promise? result)) (force result) result))) (dict-set! p :forced true) (dict-set! p :value final) final)))))) @@ -2971,12 +2988,15 @@ ((registered (get (env-get env "*adt-registry*") type-name))) (when - (and registered (not (some match-clause-is-else? clauses))) + ;; eta-expanded: a bare helper in HO position transpiles to + ;; cek_call on an OCaml function (type error); a lambda body + ;; calling it directly emits a plain application + (and registered (not (some (fn (c) (match-clause-is-else? c)) clauses))) (let ((clause-ctors (filter (fn (n) (not (nil? n))) - (map match-clause-ctor-name clauses)))) + (map (fn (c) (match-clause-ctor-name c)) clauses)))) (match-warn-non-exhaustive env type-name registered clause-ctors))))))))) @@ -4507,8 +4527,12 @@ rest-k))))) ("restart" (make-cek-value value env rest-k)) ("signal-return" + ;; the frame constructor stores the caller's kont under :f + ;; (natively cf_f) — reading "saved-kont" returned nil and + ;; silently discarded the whole continuation outside the + ;; signal site (handler value became the program's result) (let - ((saved-kont (get frame "saved-kont"))) + ((saved-kont (get frame "f"))) (make-cek-value value (get frame "env") saved-kont))) ("comp-trace" (make-cek-value value env rest-k)) ("cond-arrow" @@ -4565,8 +4589,12 @@ (list condition) (if continuable? + ;; R7RS: the handler's value returns to the RAISE SITE, + ;; so save rest-k (the kont at raise time) — unwound-k + ;; has already dropped the frames between the raise + ;; site and the handler (mirrors step-sf-signal) (kont-push - (make-signal-return-frame fenv unwound-k) + (make-signal-return-frame fenv rest-k) unwound-k) (kont-push (make-raise-guard-frame fenv unwound-k) diff --git a/spec/render.sx b/spec/render.sx index 0def04e8..f91a9560 100644 --- a/spec/render.sx +++ b/spec/render.sx @@ -160,7 +160,15 @@ "template" "slot" "dialog" - "menu")) + "menu" + ;; void elements must ALSO be here — render routes a head symbol to + ;; the element renderer only when it's in HTML_TAGS; these five were + ;; only in VOID_ELEMENTS and fell through to "Undefined symbol" + "area" + "base" + "embed" + "param" + "track")) ;; Self-closing tags (br, img, hr, etc.) (define