diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 58ad072..312cd01 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -39,6 +39,9 @@ jobs: platform: [x64] steps: - uses: actions/checkout@v3 + - name: install libcurl + run: | + sudo apt-get install -qy libcurl4-openssl-dev - name: compile run: | make lo @@ -52,7 +55,7 @@ jobs: name: lo-linux-x64 build-linux-arm: -# if: ${{ false }} # disable + if: ${{ false }} # disable name: linux-arm64 runs-on: ubuntu-22.04 strategy: @@ -61,6 +64,9 @@ jobs: platform: [x64] steps: - uses: actions/checkout@v3 + - name: install libcurl + run: | + sudo apt-get install -qy libcurl4-openssl-dev - name: install arm64 tools run: | sudo apt-get install -qy binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu @@ -74,7 +80,7 @@ jobs: name: lo-linux-arm64 build-windows: -# if: ${{ false }} # disable + if: ${{ false }} # disable name: windows runs-on: windows-latest strategy: diff --git a/.gitignore b/.gitignore index a88099a..f4bf085 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ v8 *.so lo .vscode -scratch \ No newline at end of file +scratch +deps diff --git a/Makefile b/Makefile index 3d91926..edfeaad 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,20 @@ C=clang CC=clang++ LARGS=-rdynamic -CCARGS=-std=c++17 -c -CARGS=-c +CCARGS=-std=c++17 -c -fno-omit-frame-pointer -fno-rtti -fno-exceptions +CARGS=-c -fno-omit-frame-pointer WARN=-Werror -Wpedantic -Wall -Wextra -Wno-unused-parameter OPT=-O3 VERSION=0.0.4-pre -V8_VERSION=12.0 +V8_VERSION=1.0.0 RUNTIME=lo LO_HOME=$(shell pwd) -BINDINGS=lib/core/core.a +BINDINGS=core.o curl.o inflate.a ARCH=x64 os=linux TARGET=${RUNTIME} +LIBS=-lcurl +V8_FLAGS=-DV8_COMPRESS_POINTERS -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=0 ifeq ($(OS),Windows_NT) os=win @@ -31,52 +33,63 @@ else endif endif -v8/include: +.PHONY: help clean + +help: + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9\/_\.-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + +v8/include: ## download the v8 headers curl -L -o v8-include.tar.gz https://github.com/just-js/v8/releases/download/${V8_VERSION}/include.tar.gz tar -xvf v8-include.tar.gz ifneq ($(os),win) rm -f v8-include.tar.gz endif -v8/libv8_monolith.a: - curl -L -o v8/libv8_monolith.a.gz https://github.com/just-js/v8/releases/download/${V8_VERSION}/libv8_monolith-${os}-${ARCH}.a.tar.gz +v8/libv8_monolith.a: ## download the v8 static libary for linux/macos + curl -L -o v8/libv8_monolith.a.gz https://github.com/just-js/v8/releases/download/${V8_VERSION}/libv8_monolith-${os}-${ARCH}.a.gz gzip -d v8/libv8_monolith.a.gz rm -f v8/libv8_monolith.a.gz -v8/v8_monolith.lib: - curl -L -o v8/v8_monolith.lib.gz https://github.com/just-js/v8/releases/download/${V8_VERSION}/libv8_monolith-${os}-${ARCH}.lib.tar.gz +v8/v8_monolith.lib: ## download the v8 static library for windows + curl -L -o v8/v8_monolith.lib.gz https://github.com/just-js/v8/releases/download/${V8_VERSION}/libv8_monolith-${os}-${ARCH}.lib.gz gzip -d v8/v8_monolith.lib.gz -${RUNTIME}: v8/include v8/libv8_monolith.a main.js ${BINDINGS} - @echo building ${RUNTIME} for ${os} on ${ARCH} +main.o: ## compile the main.cc object file + $(CC) ${CCARGS} ${OPT} -DRUNTIME='"${RUNTIME}"' -DVERSION='"${VERSION}"' -I./v8 -I./v8/include ${WARN} ${V8_FLAGS} main.cc + +builtins.o: ## link all source files and assets into an object file ifeq (${os},linux) $(C) ${CARGS} builtins_linux.S -o builtins.o else $(C) ${CARGS} builtins.S -o builtins.o endif - $(CC) ${CCARGS} ${OPT} -DRUNTIME='"${RUNTIME}"' -DVERSION='"${VERSION}"' -I./v8 -I./v8/include ${WARN} main.cc - $(CC) ${CCARGS} ${OPT} -DRUNTIME='"${RUNTIME}"' -DVERSION='"${VERSION}"' -I./v8 -I./v8/include ${WARN} ${RUNTIME}.cc - $(CC) $(LARGS) ${OPT} main.o ${RUNTIME}.o builtins.o ${BINDINGS} v8/libv8_monolith.a -o ${TARGET} -${RUNTIME}.exe: v8/include v8/v8_monolith.lib main.js +${RUNTIME}.o: ## compile runtime into an object file + $(CC) ${CCARGS} ${OPT} -DRUNTIME='"${RUNTIME}"' -DVERSION='"${VERSION}"' ${V8_FLAGS} -I./v8 -I./v8/include ${WARN} ${RUNTIME}.cc + +${RUNTIME}: v8/include v8/libv8_monolith.a main.js ${BINDINGS} builtins.o main.o ${RUNTIME}.o ## link the runtime for linux/macos + @echo building ${RUNTIME} for ${os} on ${ARCH} + $(CC) $(LARGS) ${OPT} main.o ${RUNTIME}.o builtins.o ${BINDINGS} v8/libv8_monolith.a ${LIBS} -o ${TARGET} + +${RUNTIME}.exe: v8/include v8/v8_monolith.lib main.js ## link the runtime for windows cl /EHsc /std:c++17 /DRUNTIME='"${RUNTIME}"' /DVERSION='"${VERSION}"' /I./v8 /I./v8/include /c main.cc cl /EHsc /std:c++17 /DRUNTIME='"${RUNTIME}"' /DVERSION='"${VERSION}"' /I./v8 /I./v8/include /c ${RUNTIME}.cc cl v8/v8_monolith.lib ${RUNTIME}.obj main.obj winmm.lib dbghelp.lib advapi32.lib /link /out:${TARGET}.exe -check: - ./${RUNTIME} test/runtime.js - -lib/core/core.a: lib/core/api.js - $(MAKE) BINDING=core staticlib +core.o: lib/core/core.cc ## build the core binding + $(CC) -fPIC $(CCARGS) $(OPT) -I. -I./v8 -I./v8/include $(WARN) ${V8_FLAGS} -o core.o lib/core/core.cc -lib/${BINDING}/${BINDING}.a: lib/${BINDING}/api.js - $(MAKE) BINDING=${BINDING} staticlib +curl.o: lib/curl/curl.cc ## build the curl binding + $(CC) -fPIC $(CCARGS) $(OPT) -I. -I./v8 -I./v8/include $(WARN) ${V8_FLAGS} -o curl.o lib/curl/curl.cc -staticlib: v8/include v8/libv8_monolith.a lib/${BINDING}/api.js - ARCH="${ARCH}" os="${os}" LARGS="${LARGS}" WARN="${WARN}" LO_HOME="${LO_HOME}" CCARGS="${CCARGS}" OPT="${OPT}" $(MAKE) -C lib/${BINDING}/ ${BINDING}.a +inflate.a: lib/inflate/inflate.cc ## build the curl binding + $(C) -fPIC $(CARGS) $(OPT) -I. -I./v8 -I./v8/include -Ilib/inflate -o em_inflate.o lib/inflate/em_inflate.c + $(CC) -fPIC $(CCARGS) $(OPT) -I. -I./v8 -I./v8/include -Ilib/inflate $(WARN) ${V8_FLAGS} -o inflate.o lib/inflate/inflate.cc + ar crsT inflate.a inflate.o em_inflate.o -sharedlib: v8/include v8/libv8_monolith.a lib/${BINDING}/${BINDING}.a - ARCH="${ARCH}" os="${os}" LARGS="${LARGS}" WARN="${WARN}" LO_HOME="${LO_HOME}" CCARGS="${CCARGS}" OPT="${OPT}" $(MAKE) -C lib/${BINDING}/ ${BINDING}.so +check: ## run the runtime sanity tests + ./${RUNTIME} test/dump.js + ./${RUNTIME} test/runtime.js docs: rm -fr docs @@ -85,6 +98,10 @@ docs: mv docs-$(VERSION) docs rm -f docs.tar.gz +install: + mkdir -p ${HOME}/.lo/bin + cp lo ${HOME}/.lo/bin/ + clean: ifeq ($(os),win) @del /q *.obj > NUL 2>&1 @@ -93,6 +110,9 @@ ifeq ($(os),win) @del /q ${RUNTIME}.lib > NUL 2>&1 else rm -f *.o + rm -f *.a + rm -f lib/**/*.a + rm -f lib/**/*.so rm -f ${RUNTIME} endif diff --git a/TODO.md b/TODO.md index 1b2a2ef..5d1615a 100644 --- a/TODO.md +++ b/TODO.md @@ -37,21 +37,41 @@ - [ ] **todo**: can we unload bindings and modules? have a look into this - [ ] **bug**: if i embed the binding definition and change it then the lib won't rebuild as it uses embedded one - [ ] **todo**: change binding defs so we can have multiple entries with same name but with different options for arch and platform +- [ ] **todo**: pass a flag to gen to tell it what os/arch we want to generate for +- [ ] **bug**: when rebuilding after changing bindings defs, they don't get re-generated as the ones on disk are not re-loaded. +- [ ] **todo**: clean up lib/gen.js. it's a real mess +- [ ] **todo**: have an embed cache separate from lib and require caches so we always load them from disk. hmmm... we need a nice way to handle this +- [ ] **todo**: module resolution is really broken +- [ ] **todo**: setTimeout, clearTimeout, setInterval, clearInterval +- [ ] **todo**: performance.now() +- [ ] **todo**: in assert, strip the assert line from the stack trace on the error +- [ ] **question**: should we have something like __dirname on each module? +- [ ] **todo**: make lib/proc exec() async and used pidfd_open to monitor process on event loop +- [ ] **todo**: freeze core apis/intrinsics +- [ ] **question**: how do we handle compiling dependencies of bindings cross platform if we don't depend on make? + we could just write the build script as js? +- [ ] **question**: how do we align structs in memory? +- [ ] **todo**: ability to chain cli args together +- [ ] **todo**: repl - doesn't really need async for now - ```lo repl``` +- [ ] **todo**: rename lo.library and lo.libraries to lo.binding and lo.bindings + ## features +- [ ] **commands**: ability to host command scripts so i can run ```lo cmd blah``` and it will run blah.js from cmd direction in current dir or $HOME/.lo/cmd - [ ] **fetch**: a robust and fast fetch implementation -- [ ] **WebSocket**: a robust and fast websocket implementation - client and server - [ ] **serve**: a robust and fast http serve implementation with Request and Response - [ ] **ffi**: a robust and fast ffi implementation - [ ] **spawn**: a robust and fast process spawning and control implementation -- [ ] **Worker**: a robust and fast Web Worker implementation - [ ] **resources**: a solution for tracking handles, pointers and file descriptors - [ ] **hot loading**: look at ability to easily swap code out on the fly - [ ] **v8 api**: create a simple c api around v8 (like rusty_v8) so we can use it in bindings and compile/link bindings with tcc (maybe - i think so - the bindings libraries can be plain c) +- [ ] **tracing**: a system for hooking into traces events for logging, metrics etc. ## modules +- [ ] **Worker**: a robust and fast Web Worker implementation +- [ ] **WebSocket**: a robust and fast websocket implementation - client and server - [ ] **sqlite**: a robust and fast sqlite implementation - [ ] **thread**: thread library diff --git a/builtins.S b/builtins.S index d07f302..cc169dc 100644 --- a/builtins.S +++ b/builtins.S @@ -3,36 +3,51 @@ __binary_main_js_start: .incbin "main.js" .global __binary_main_js_end __binary_main_js_end: -.global __binary_lib_asm_js_start -__binary_lib_asm_js_start: - .incbin "lib/asm.js" - .global __binary_lib_asm_js_end -__binary_lib_asm_js_end: -.global __binary_lib_ffi_js_start -__binary_lib_ffi_js_start: - .incbin "lib/ffi.js" - .global __binary_lib_ffi_js_end -__binary_lib_ffi_js_end: +.global __binary_lib_bench_js_start +__binary_lib_bench_js_start: + .incbin "lib/bench.js" + .global __binary_lib_bench_js_end +__binary_lib_bench_js_end: .global __binary_lib_gen_js_start __binary_lib_gen_js_start: .incbin "lib/gen.js" .global __binary_lib_gen_js_end __binary_lib_gen_js_end: -.global __binary_lib_path_js_start -__binary_lib_path_js_start: - .incbin "lib/path.js" - .global __binary_lib_path_js_end -__binary_lib_path_js_end: +.global __binary_lib_fs_js_start +__binary_lib_fs_js_start: + .incbin "lib/fs.js" + .global __binary_lib_fs_js_end +__binary_lib_fs_js_end: +.global __binary_lib_untar_js_start +__binary_lib_untar_js_start: + .incbin "lib/untar.js" + .global __binary_lib_untar_js_end +__binary_lib_untar_js_end: .global __binary_lib_proc_js_start __binary_lib_proc_js_start: .incbin "lib/proc.js" .global __binary_lib_proc_js_end __binary_lib_proc_js_end: -.global __binary_Makefile_start -__binary_Makefile_start: - .incbin "Makefile" - .global __binary_Makefile_end -__binary_Makefile_end: +.global __binary_lib_path_js_start +__binary_lib_path_js_start: + .incbin "lib/path.js" + .global __binary_lib_path_js_end +__binary_lib_path_js_end: +.global __binary_lib_inflate_js_start +__binary_lib_inflate_js_start: + .incbin "lib/inflate.js" + .global __binary_lib_inflate_js_end +__binary_lib_inflate_js_end: +.global __binary_lib_curl_js_start +__binary_lib_curl_js_start: + .incbin "lib/curl.js" + .global __binary_lib_curl_js_end +__binary_lib_curl_js_end: +.global __binary_lib_build_js_start +__binary_lib_build_js_start: + .incbin "lib/build.js" + .global __binary_lib_build_js_end +__binary_lib_build_js_end: .global __binary_main_cc_start __binary_main_cc_start: .incbin "main.cc" @@ -48,19 +63,103 @@ __binary_lo_h_start: .incbin "lo.h" .global __binary_lo_h_end __binary_lo_h_end: -.global __binary_globals_d_ts_start -__binary_globals_d_ts_start: - .incbin "globals.d.ts" - .global __binary_globals_d_ts_end -__binary_globals_d_ts_end: -.global __binary_jsconfig_json_start -__binary_jsconfig_json_start: - .incbin "jsconfig.json" - .global __binary_jsconfig_json_end -__binary_jsconfig_json_end: .global __binary_lib_core_api_js_start __binary_lib_core_api_js_start: .incbin "lib/core/api.js" .global __binary_lib_core_api_js_end __binary_lib_core_api_js_end: - +.global __binary_lib_curl_api_js_start +__binary_lib_curl_api_js_start: + .incbin "lib/curl/api.js" + .global __binary_lib_curl_api_js_end +__binary_lib_curl_api_js_end: +.global __binary_lib_encode_api_js_start +__binary_lib_encode_api_js_start: + .incbin "lib/encode/api.js" + .global __binary_lib_encode_api_js_end +__binary_lib_encode_api_js_end: +.global __binary_lib_epoll_api_js_start +__binary_lib_epoll_api_js_start: + .incbin "lib/epoll/api.js" + .global __binary_lib_epoll_api_js_end +__binary_lib_epoll_api_js_end: +.global __binary_lib_inflate_api_js_start +__binary_lib_inflate_api_js_start: + .incbin "lib/inflate/api.js" + .global __binary_lib_inflate_api_js_end +__binary_lib_inflate_api_js_end: +.global __binary_lib_inflate_em_inflate_c_start +__binary_lib_inflate_em_inflate_c_start: + .incbin "lib/inflate/em_inflate.c" + .global __binary_lib_inflate_em_inflate_c_end +__binary_lib_inflate_em_inflate_c_end: +.global __binary_lib_inflate_em_inflate_h_start +__binary_lib_inflate_em_inflate_h_start: + .incbin "lib/inflate/em_inflate.h" + .global __binary_lib_inflate_em_inflate_h_end +__binary_lib_inflate_em_inflate_h_end: +.global __binary_lib_libffi_api_js_start +__binary_lib_libffi_api_js_start: + .incbin "lib/libffi/api.js" + .global __binary_lib_libffi_api_js_end +__binary_lib_libffi_api_js_end: +.global __binary_lib_libssl_api_js_start +__binary_lib_libssl_api_js_start: + .incbin "lib/libssl/api.js" + .global __binary_lib_libssl_api_js_end +__binary_lib_libssl_api_js_end: +.global __binary_lib_lz4_api_js_start +__binary_lib_lz4_api_js_start: + .incbin "lib/lz4/api.js" + .global __binary_lib_lz4_api_js_end +__binary_lib_lz4_api_js_end: +.global __binary_lib_mbedtls_api_js_start +__binary_lib_mbedtls_api_js_start: + .incbin "lib/mbedtls/api.js" + .global __binary_lib_mbedtls_api_js_end +__binary_lib_mbedtls_api_js_end: +.global __binary_lib_net_api_js_start +__binary_lib_net_api_js_start: + .incbin "lib/net/api.js" + .global __binary_lib_net_api_js_end +__binary_lib_net_api_js_end: +.global __binary_lib_pico_api_js_start +__binary_lib_pico_api_js_start: + .incbin "lib/pico/api.js" + .global __binary_lib_pico_api_js_end +__binary_lib_pico_api_js_end: +.global __binary_lib_pthread_api_js_start +__binary_lib_pthread_api_js_start: + .incbin "lib/pthread/api.js" + .global __binary_lib_pthread_api_js_end +__binary_lib_pthread_api_js_end: +.global __binary_lib_seccomp_api_js_start +__binary_lib_seccomp_api_js_start: + .incbin "lib/seccomp/api.js" + .global __binary_lib_seccomp_api_js_end +__binary_lib_seccomp_api_js_end: +.global __binary_lib_sqlite_api_js_start +__binary_lib_sqlite_api_js_start: + .incbin "lib/sqlite/api.js" + .global __binary_lib_sqlite_api_js_end +__binary_lib_sqlite_api_js_end: +.global __binary_lib_system_api_js_start +__binary_lib_system_api_js_start: + .incbin "lib/system/api.js" + .global __binary_lib_system_api_js_end +__binary_lib_system_api_js_end: +.global __binary_lib_tcc_api_js_start +__binary_lib_tcc_api_js_start: + .incbin "lib/tcc/api.js" + .global __binary_lib_tcc_api_js_end +__binary_lib_tcc_api_js_end: +.global __binary_lib_wireguard_api_js_start +__binary_lib_wireguard_api_js_start: + .incbin "lib/wireguard/api.js" + .global __binary_lib_wireguard_api_js_end +__binary_lib_wireguard_api_js_end: +.global __binary_lib_zlib_api_js_start +__binary_lib_zlib_api_js_start: + .incbin "lib/zlib/api.js" + .global __binary_lib_zlib_api_js_end +__binary_lib_zlib_api_js_end: diff --git a/builtins.h b/builtins.h index e826c81..5025b2d 100644 --- a/builtins.h +++ b/builtins.h @@ -1,66 +1,165 @@ const char _binary_main_js_start[] = { -0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0x29, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x27, 0xa, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x61, 0x20, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x27, 0xa, 0xa, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x29, 0x20, 0x70, 0x74, 0x72, 0x28, 0x75, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x26, 0x26, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x22, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x68, 0x2c, 0x20, 0x66, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x70, 0x6c, 0x65, 0x6e, 0x29, 0x29, 0x2e, 0x66, 0x69, 0x6c, 0x6c, 0x28, 0x30, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x5f, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x70, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x24, 0x7b, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x7d, 0x24, 0x7b, 0x70, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x68, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x28, 0x28, 0x32, 0x20, 0x2a, 0x2a, 0x20, 0x33, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x68, 0x5b, 0x31, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x60, 0x2c, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x28, 0x68, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x66, 0x75, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x74, 0x72, 0x20, 0x28, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x75, 0x38, 0x29, 0xa, 0x20, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x38, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x73, 0x74, 0x72, 0x20, 0x28, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x30, 0x60, 0x29, 0x29, 0xa, 0x20, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x20, 0x28, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x33, 0x32, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x28, 0x28, 0x32, 0x20, 0x2a, 0x2a, 0x20, 0x33, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x75, 0x33, 0x32, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x2c, 0x20, 0x60, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x24, 0x7b, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x5b, 0x31, 0x32, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x5b, 0x36, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x75, 0x38, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x65, 0x69, 0x6c, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x2f, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x29, 0x2c, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3e, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x6b, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x2d, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x60, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x79, 0x6d, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x73, 0x79, 0x6d, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6c, 0x69, 0x62, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x6f, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x72, 0x63, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x27, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x3a, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x65, 0x72, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x52, 0x7d, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x65, 0x72, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x28, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x40, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x73, 0x74, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x70, 0x74, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x2e, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x67, 0x65, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0x29, 0x2e, 0x67, 0x65, 0x6e, 0x28, 0x6c, 0x6f, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x27, 0x40, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x65, 0x72, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x65, 0x76, 0x61, 0x6c, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x24, 0x7b, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x7d, 0x29, 0x60, 0x29, 0x29, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x2c, 0x20, 0x74, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x74, 0x65, 0x73, 0x74, 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x2c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x54, 0x44, 0x49, 0x4e, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x44, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x30, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x30, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x30, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x52, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x31, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x52, 0x65, 0x64, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x47, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x32, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6e, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x59, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x33, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x59, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x42, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x34, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x42, 0x6c, 0x75, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x4d, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x35, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x4d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x61, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x36, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x43, 0x79, 0x61, 0x6e, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x57, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x37, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x57, 0x68, 0x69, 0x74, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x36, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x74, 0x61, 0x74, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x67, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x6e, 0x60, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x6e, 0x60, 0x29, 0xa, 0x7d, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x41, 0x44, 0x2c, 0x20, 0x41, 0x30, 0x2c, 0x20, 0x41, 0x52, 0x2c, 0x20, 0x41, 0x47, 0x2c, 0x20, 0x41, 0x59, 0x2c, 0x20, 0x41, 0x42, 0x2c, 0x20, 0x41, 0x4d, 0x2c, 0x20, 0x41, 0x43, 0x2c, 0x20, 0x41, 0x57, 0x20, 0x7d, 0xa, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0xa, 0x6c, 0x6f, 0x2e, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0xa, 0x6c, 0x6f, 0x2e, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0xa, 0x6c, 0x6f, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0xa, 0x6c, 0x6f, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x29, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x73, 0x74, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x64, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x29, 0xa, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x30, 0x27, 0x2c, 0x20, 0x31, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x2c, 0x20, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6d, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x36, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x6f, 0x73, 0x28, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x63, 0x68, 0x28, 0x29, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x6f, 0x73, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x72, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x61, 0x72, 0x63, 0x68, 0x28, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x65, 0x72, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x29, 0x29, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x7d, 0xa +0xa, 0x2f, 0x2f, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x27, 0xa, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x61, 0x20, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x27, 0xa, 0xa, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x29, 0x20, 0x70, 0x74, 0x72, 0x28, 0x75, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x26, 0x26, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x22, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x66, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x70, 0x6c, 0x65, 0x6e, 0x29, 0x29, 0x2e, 0x66, 0x69, 0x6c, 0x6c, 0x28, 0x30, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x5f, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x70, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x49, 0x73, 0x53, 0x61, 0x66, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x61, 0x66, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x24, 0x7b, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x7d, 0x24, 0x7b, 0x70, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x28, 0x28, 0x32, 0x20, 0x2a, 0x2a, 0x20, 0x33, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5b, 0x31, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x60, 0x2c, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x66, 0x75, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x74, 0x72, 0x20, 0x28, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x75, 0x38, 0x29, 0xa, 0x20, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x38, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x73, 0x74, 0x72, 0x20, 0x28, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x30, 0x60, 0x29, 0x29, 0xa, 0x20, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x20, 0x28, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x33, 0x32, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x28, 0x28, 0x32, 0x20, 0x2a, 0x2a, 0x20, 0x33, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x75, 0x33, 0x32, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x2c, 0x20, 0x60, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x24, 0x7b, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x33, 0x32, 0x5b, 0x31, 0x32, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x36, 0x34, 0x20, 0x2a, 0x20, 0x31, 0x30, 0x32, 0x34, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x75, 0x38, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x38, 0xa, 0x7d, 0xa, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x2c, 0x20, 0x60, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x24, 0x7b, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x73, 0x74, 0x61, 0x74, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x5b, 0x31, 0x32, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x5b, 0x36, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x75, 0x38, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x38, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x75, 0x38, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x65, 0x69, 0x6c, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x2f, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x29, 0x2c, 0x20, 0x74, 0x6f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3e, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x62, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6c, 0x69, 0x62, 0x29, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x6b, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x2d, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x60, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x79, 0x6d, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x73, 0x79, 0x6d, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6c, 0x69, 0x62, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x72, 0x63, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x4c, 0x4f, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x20, 0x28, 0x65, 0x72, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x24, 0x7b, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x60, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x72, 0x63, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x4c, 0x4f, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x20, 0x28, 0x65, 0x72, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x24, 0x7b, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x60, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x20, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x6c, 0x6f, 0x2e, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x60, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x24, 0x7b, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x5c, 0x6e, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0x2a, 0xa, 0x2a, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6a, 0x73, 0x20, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x2e, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0xa, 0x2a, 0x20, 0x62, 0x65, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0xa, 0x2a, 0x20, 0x60, 0x60, 0x60, 0xa, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0xa, 0x2a, 0x2f, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x27, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x3a, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0x2a, 0xa, 0x2a, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0xa, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x65, 0x20, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0xa, 0x2a, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0xa, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x20, 0x7b, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x7d, 0x20, 0x61, 0x20, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xa, 0x2a, 0x2f, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x65, 0x72, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x52, 0x7d, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x64, 0x69, 0x65, 0x28, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x40, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x73, 0x74, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x70, 0x74, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x2e, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x2c, 0x20, 0x32, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x77, 0x64, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x30, 0x32, 0x34, 0x29, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x63, 0x77, 0x64, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x63, 0x77, 0x64, 0x62, 0x75, 0x66, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x70, 0x74, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x65, 0x20, 0x28, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x52, 0x7d, 0x46, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x65, 0x72, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x69, 0x74, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x28, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x2c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x54, 0x44, 0x49, 0x4e, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x44, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x30, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x30, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x30, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x52, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x31, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x52, 0x65, 0x64, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x47, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x32, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6e, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x59, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x33, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x59, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x42, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x34, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x42, 0x6c, 0x75, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x4d, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x35, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x4d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x61, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x36, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x43, 0x79, 0x61, 0x6e, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x41, 0x57, 0x20, 0x3d, 0x20, 0x27, 0x5c, 0x75, 0x30, 0x30, 0x31, 0x62, 0x5b, 0x33, 0x37, 0x6d, 0x27, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x4e, 0x53, 0x49, 0x20, 0x57, 0x68, 0x69, 0x74, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x36, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x74, 0x61, 0x74, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4d, 0x61, 0x70, 0x28, 0x29, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x67, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x6e, 0x60, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x7d, 0x5c, 0x6e, 0x60, 0x29, 0xa, 0x7d, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x41, 0x44, 0x2c, 0x20, 0x41, 0x30, 0x2c, 0x20, 0x41, 0x52, 0x2c, 0x20, 0x41, 0x47, 0x2c, 0x20, 0x41, 0x59, 0x2c, 0x20, 0x41, 0x42, 0x2c, 0x20, 0x41, 0x4d, 0x2c, 0x20, 0x41, 0x43, 0x2c, 0x20, 0x41, 0x57, 0x20, 0x7d, 0xa, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0xa, 0x6c, 0x6f, 0x2e, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0xa, 0x6c, 0x6f, 0x2e, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0xa, 0x6c, 0x6f, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0xa, 0x6c, 0x6f, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x29, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x73, 0x74, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x64, 0x72, 0xa, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x29, 0xa, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x27, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4c, 0x4f, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x6c, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x30, 0x27, 0x2c, 0x20, 0x31, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x2c, 0x20, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6d, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x36, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x6f, 0x73, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x72, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x61, 0x72, 0x63, 0x68, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0xa, 0x6c, 0x6f, 0x2e, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x74, 0x63, 0x2e, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x67, 0x65, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0x29, 0x2e, 0x67, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x65, 0x76, 0x61, 0x6c, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x24, 0x7b, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x7d, 0x29, 0x60, 0x29, 0x29, 0x28, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x27, 0x40, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x29, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x64, 0x69, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x2c, 0x20, 0x74, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x32, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x65, 0x73, 0x74, 0x29, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x74, 0x65, 0x73, 0x74, 0x28, 0x2e, 0x2e, 0x2e, 0x70, 0x61, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x29, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x28, 0x2e, 0x2e, 0x2e, 0x70, 0x61, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x70, 0x61, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x29, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x28, 0x2e, 0x2e, 0x2e, 0x70, 0x61, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x64, 0x69, 0x65, 0x29, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x7d, 0xa }; -unsigned int _binary_main_js_len = 8291; +unsigned int _binary_main_js_len = 10462; -const char _binary_lib_asm_js_start[] = { -0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x75, 0x73, 0x65, 0x20, 0x33, 0x32, 0x20, 0x62, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31, 0x36, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x70, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6d, 0x61, 0x70, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x2c, 0x20, 0x70, 0x74, 0x72, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x61, 0x78, 0x3a, 0x20, 0x27, 0x72, 0x61, 0x78, 0x27, 0x2c, 0x20, 0x72, 0x62, 0x78, 0x3a, 0x20, 0x27, 0x72, 0x62, 0x78, 0x27, 0x2c, 0x20, 0x72, 0x63, 0x78, 0x3a, 0x20, 0x27, 0x72, 0x63, 0x78, 0x27, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x3a, 0x20, 0x27, 0x72, 0x64, 0x78, 0x27, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x3a, 0x20, 0x27, 0x72, 0x73, 0x69, 0x27, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x3a, 0x20, 0x27, 0x72, 0x64, 0x69, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x62, 0x70, 0x3a, 0x20, 0x27, 0x72, 0x62, 0x70, 0x27, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x3a, 0x20, 0x27, 0x72, 0x73, 0x70, 0x27, 0x2c, 0x20, 0x72, 0x38, 0x3a, 0x20, 0x27, 0x72, 0x38, 0x27, 0x2c, 0x20, 0x72, 0x39, 0x3a, 0x20, 0x27, 0x72, 0x39, 0x27, 0x2c, 0x20, 0x72, 0x31, 0x30, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x30, 0x27, 0x2c, 0x20, 0x72, 0x31, 0x31, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x31, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x31, 0x32, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x32, 0x27, 0x2c, 0x20, 0x72, 0x31, 0x33, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x33, 0x27, 0x2c, 0x20, 0x72, 0x31, 0x34, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x34, 0x27, 0x2c, 0x20, 0x72, 0x31, 0x35, 0x3a, 0x20, 0x27, 0x72, 0x31, 0x35, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x72, 0x62, 0x70, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x72, 0x38, 0x2c, 0x20, 0x72, 0x39, 0x2c, 0x20, 0x72, 0x31, 0x30, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x20, 0x3d, 0x20, 0x34, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4d, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x4f, 0x4e, 0x59, 0x4d, 0x4f, 0x55, 0x53, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x32, 0x30, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x6d, 0x61, 0x70, 0x28, 0x30, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x2c, 0x20, 0x4d, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x4f, 0x4e, 0x59, 0x4d, 0x4f, 0x55, 0x53, 0x20, 0x7c, 0x20, 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x75, 0x33, 0x32, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x75, 0x33, 0x32, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x61, 0x64, 0x64, 0x72, 0x28, 0x75, 0x33, 0x32, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x20, 0x7c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, 0x6d, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x5d, 0x29, 0x29, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x20, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x28, 0x72, 0x65, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x70, 0x75, 0x73, 0x68, 0x20, 0x25, 0x24, 0x7b, 0x72, 0x65, 0x67, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x67, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x30, 0x78, 0x35, 0x33, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x70, 0x6f, 0x70, 0x20, 0x28, 0x72, 0x65, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x70, 0x6f, 0x70, 0x20, 0x25, 0x24, 0x7b, 0x72, 0x65, 0x67, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x67, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x30, 0x78, 0x35, 0x62, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x73, 0x75, 0x62, 0x20, 0x28, 0x72, 0x65, 0x67, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x73, 0x75, 0x62, 0x20, 0x24, 0x24, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x2c, 0x20, 0x25, 0x24, 0x7b, 0x72, 0x65, 0x67, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x67, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x33, 0x2c, 0x20, 0x30, 0x78, 0x65, 0x63, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x61, 0x64, 0x64, 0x20, 0x28, 0x72, 0x65, 0x67, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x61, 0x64, 0x64, 0x20, 0x24, 0x24, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x2c, 0x20, 0x25, 0x24, 0x7b, 0x72, 0x65, 0x67, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x67, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x33, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x34, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x77, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x61, 0x62, 0x73, 0x20, 0x24, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2c, 0x20, 0x25, 0x72, 0x61, 0x78, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x62, 0x38, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x20, 0x2a, 0x25, 0x72, 0x61, 0x78, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x64, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x6a, 0x6d, 0x70, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x61, 0x62, 0x73, 0x20, 0x24, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2c, 0x20, 0x25, 0x72, 0x61, 0x78, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x62, 0x38, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x27, 0x6a, 0x6d, 0x70, 0x20, 0x20, 0x2a, 0x25, 0x72, 0x61, 0x78, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x65, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x76, 0x20, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x2c, 0x20, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x62, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x37, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x64, 0x36, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x63, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x61, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x38, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x63, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x39, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x64, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x38, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x61, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x37, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x30, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x37, 0x2c, 0x20, 0x30, 0x78, 0x63, 0x37, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x2c, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x78, 0x66, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x2c, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x2c, 0x20, 0x28, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x29, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x61, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x33, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x24, 0x7b, 0x73, 0x6f, 0x66, 0x66, 0x7d, 0x28, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x29, 0x2c, 0x20, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x62, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x62, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x35, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x63, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x62, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x39, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x62, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x39, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x63, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x32, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x63, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x35, 0x31, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x28, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x29, 0x2c, 0x20, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x33, 0x65, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x33, 0x32, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x63, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x64, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x31, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x24, 0x7b, 0x73, 0x6f, 0x66, 0x66, 0x7d, 0x28, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x29, 0x2c, 0x20, 0x25, 0x72, 0x61, 0x78, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x25, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x24, 0x7b, 0x64, 0x6f, 0x66, 0x66, 0x7d, 0x28, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x29, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x64, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x24, 0x7b, 0x73, 0x6f, 0x66, 0x66, 0x7d, 0x28, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x29, 0x2c, 0x20, 0x25, 0x72, 0x61, 0x78, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x25, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x28, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x29, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x73, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x66, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x32, 0x34, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x28, 0x25, 0x24, 0x7b, 0x73, 0x72, 0x63, 0x7d, 0x29, 0x2c, 0x20, 0x25, 0x72, 0x61, 0x78, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x60, 0x6d, 0x6f, 0x76, 0x20, 0x25, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x28, 0x25, 0x24, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x7d, 0x29, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x61, 0x78, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x72, 0x62, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5b, 0x30, 0x78, 0x34, 0x38, 0x2c, 0x20, 0x30, 0x78, 0x38, 0x39, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x33, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x27, 0x72, 0x65, 0x74, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x30, 0x78, 0x63, 0x33, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x6e, 0x73, 0x2e, 0x66, 0x6c, 0x61, 0x74, 0x28, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x63, 0x20, 0x3d, 0x3e, 0x20, 0x63, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3f, 0x20, 0x63, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x63, 0x63, 0x20, 0x3d, 0x3e, 0x20, 0x63, 0x63, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x29, 0x20, 0x3a, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x74, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x66, 0x6c, 0x61, 0x74, 0x28, 0x29, 0x29, 0x29, 0x20, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x2f, 0x66, 0x72, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x2d, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x67, 0x65, 0x74, 0x73, 0x20, 0x67, 0x63, 0x27, 0x64, 0x3f, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x7d, 0xa +const char _binary_lib_bench_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x41, 0x59, 0x2c, 0x20, 0x41, 0x44, 0x2c, 0x20, 0x41, 0x47, 0x2c, 0x20, 0x41, 0x4d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x64, 0x20, 0x28, 0x76, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x2e, 0x74, 0x6f, 0x46, 0x69, 0x78, 0x65, 0x64, 0x28, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x27, 0x20, 0x27, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x73, 0x65, 0x63, 0x2f, 0x69, 0x74, 0x65, 0x72, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x64, 0x28, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x2f, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x6d, 0x73, 0x2f, 0x69, 0x74, 0x65, 0x72, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x64, 0x28, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x2f, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x30, 0x30, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0xce, 0xbc, 0x73, 0x2f, 0x69, 0x74, 0x65, 0x72, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x64, 0x28, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x2f, 0x20, 0x31, 0x30, 0x30, 0x30, 0x29, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x6e, 0x73, 0x2f, 0x69, 0x74, 0x65, 0x72, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x64, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x7d, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x30, 0xa, 0xa, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x23, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x27, 0xa, 0x20, 0x20, 0x23, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x23, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x28, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x6d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x27, 0x2c, 0x20, 0x70, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x30, 0x2c, 0x20, 0x70, 0x61, 0x64, 0x29, 0x2e, 0x70, 0x61, 0x64, 0x45, 0x6e, 0x64, 0x28, 0x70, 0x61, 0x64, 0x2c, 0x20, 0x27, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2f, 0x20, 0x28, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x20, 0x2f, 0x20, 0x31, 0x65, 0x39, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x2f, 0x20, 0x72, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6d, 0x65, 0x6d, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x47, 0x7d, 0x72, 0x61, 0x74, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x64, 0x28, 0x72, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x31, 0x30, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x28, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x72, 0x73, 0x73, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x72, 0x73, 0x73, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x72, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x2c, 0x20, 0x72, 0x73, 0x73, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x20, 0x7d, 0xa }; -unsigned int _binary_lib_asm_js_len = 8375; +unsigned int _binary_lib_bench_js_len = 1229; -const char _binary_lib_ffi_js_start[] = { -0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x61, 0x73, 0x6d, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x72, 0x62, 0x70, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x72, 0x38, 0x2c, 0x20, 0x72, 0x39, 0x2c, 0x20, 0x72, 0x31, 0x30, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x30, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x38, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x69, 0x31, 0x36, 0x3a, 0x20, 0x32, 0x2c, 0x20, 0x69, 0x33, 0x32, 0x3a, 0x20, 0x33, 0x2c, 0x20, 0x75, 0x38, 0x3a, 0x20, 0x34, 0x2c, 0x20, 0x75, 0x31, 0x36, 0x3a, 0x20, 0x35, 0x2c, 0x20, 0x75, 0x33, 0x32, 0x3a, 0x20, 0x36, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3a, 0x20, 0x37, 0x2c, 0x20, 0x66, 0x33, 0x32, 0x3a, 0x20, 0x38, 0x2c, 0x20, 0x66, 0x36, 0x34, 0x3a, 0x20, 0x39, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x36, 0x34, 0x3a, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x69, 0x36, 0x34, 0x3a, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x34, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x20, 0x31, 0x35, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31, 0x36, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x20, 0x31, 0x37, 0x2c, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x3a, 0x20, 0x31, 0x38, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x39, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0xa, 0xa, 0x2d, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, 0x72, 0x67, 0xa, 0x2d, 0x20, 0x66, 0x69, 0x78, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x77, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x73, 0x74, 0x72, 0x64, 0x75, 0x70, 0x29, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x2d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x2d, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x6d, 0x64, 0x2f, 0x31, 0x32, 0x38, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0xa, 0x2d, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x75, 0x33, 0x32, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3e, 0x20, 0x33, 0x32, 0x62, 0x69, 0x74, 0xa, 0x2d, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0xa, 0xa, 0x2d, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x69, 0x74, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x20, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x74, 0xa, 0x2a, 0x2f, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x75, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x36, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x25, 0x20, 0x32, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x6e, 0x2b, 0x2b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x20, 0x2a, 0x20, 0x38, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0xa, 0xa, 0x2d, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0xa, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x75, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6f, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x62, 0x79, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0xa, 0x2a, 0x2f, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x28, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x72, 0x62, 0x78, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x72, 0x62, 0x78, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x35, 0x36, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x31, 0x36, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x32, 0x34, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x33, 0x32, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x38, 0x2c, 0x20, 0x34, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x35, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x39, 0x2c, 0x20, 0x34, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x61, 0x78, 0x2c, 0x20, 0x72, 0x62, 0x78, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x70, 0x6f, 0x70, 0x28, 0x72, 0x62, 0x78, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x72, 0x65, 0x74, 0x28, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x28, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x38, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x72, 0x64, 0x69, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x72, 0x73, 0x69, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x63, 0x78, 0x2c, 0x20, 0x72, 0x64, 0x78, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x38, 0x2c, 0x20, 0x72, 0x63, 0x78, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x39, 0x2c, 0x20, 0x72, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x35, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x72, 0x39, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6d, 0x6f, 0x76, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x72, 0x73, 0x70, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x72, 0x65, 0x74, 0x28, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x6a, 0x6d, 0x70, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x61, 0x73, 0x6d, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x61, 0x73, 0x6d, 0x2e, 0x72, 0x65, 0x74, 0x28, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x73, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x38, 0x20, 0x2b, 0x20, 0x33, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2a, 0x20, 0x38, 0x29, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x76, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x61, 0x56, 0x69, 0x65, 0x77, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5b, 0x72, 0x65, 0x73, 0x5d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5b, 0x6e, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x30, 0x2d, 0x37, 0x3a, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x69, 0x65, 0x76, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x72, 0x61, 0x78, 0xa, 0x20, 0x20, 0x64, 0x76, 0x2e, 0x73, 0x65, 0x74, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x30, 0x2c, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x28, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x29, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x38, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0xa, 0x20, 0x20, 0x64, 0x76, 0x2e, 0x73, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x28, 0x38, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x39, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0xa, 0x20, 0x20, 0x64, 0x76, 0x2e, 0x73, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x28, 0x39, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x31, 0x30, 0x2d, 0x33, 0x39, 0x3a, 0x20, 0x73, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x2d, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x33, 0x30, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x64, 0x76, 0x2e, 0x73, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x28, 0x31, 0x30, 0x20, 0x2b, 0x20, 0x69, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x31, 0x30, 0x34, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x66, 0x6e, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0xa, 0x20, 0x20, 0x64, 0x76, 0x2e, 0x73, 0x65, 0x74, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x34, 0x30, 0x20, 0x2b, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2a, 0x20, 0x38, 0x29, 0x2c, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x28, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6c, 0x6f, 0x77, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x74, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6e, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x74, 0x72, 0x29, 0xa, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6e, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2c, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x73, 0x6d, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x28, 0x29, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x61, 0x73, 0x6d, 0x2c, 0x20, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x61, 0x6c, 0x6c, 0xa, 0x7d, 0xa +const char _binary_lib_gen_js_start[] = { +0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x69, 0x73, 0x4e, 0x61, 0x4e, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x6e, 0x29, 0x29, 0x20, 0x26, 0x26, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x28, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x20, 0x28, 0x74, 0x2c, 0x20, 0x72, 0x76, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x38, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x31, 0x36, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x38, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x31, 0x36, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x73, 0x7a, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x73, 0x7a, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x76, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x28, 0x64, 0x65, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x29, 0x7d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x21, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x5d, 0x29, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x7d, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x2d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x2a, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x7d, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x73, 0x6c, 0x6f, 0x77, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x29, 0x7d, 0x29, 0x2c, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x61, 0x70, 0x69, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x66, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7c, 0x7c, 0x20, 0x66, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2e, 0x68, 0x61, 0x73, 0x4f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0x6e, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x27, 0x69, 0x33, 0x32, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x27, 0x75, 0x36, 0x34, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x28, 0x74, 0x79, 0x70, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x54, 0x4f, 0x44, 0x4f, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x24, 0x7b, 0x6e, 0x7d, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x2c, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x32, 0x7d, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x7d, 0x3b, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x32, 0x7d, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0xa, 0x7d, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x2c, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x7d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x63, 0x61, 0x73, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3f, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x66, 0x20, 0x28, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x26, 0x26, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x26, 0x26, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2a, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2a, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x28, 0x28, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x2a, 0x29, 0x61, 0x62, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x63, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x3e, 0x28, 0x72, 0x63, 0x29, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x3e, 0x28, 0x72, 0x63, 0x29, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x63, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x24, 0x7b, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x28, 0x28, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x5c, 0x6e, 0x7d, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0xa, 0x2f, 0x2f, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x20, 0xa, 0x24, 0x7b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x24, 0x7b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x7d, 0x3e, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x68, 0x3e, 0xa, 0xa, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x20, 0x7b, 0xa, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x7b, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x3b, 0xa, 0xa, 0x24, 0x7b, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x27, 0x7d, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x67, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x24, 0x7b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x7b, 0x7d, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x24, 0x7b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0xa, 0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x78, 0x20, 0x3d, 0x20, 0x2f, 0x5b, 0x2e, 0x2f, 0x2d, 0x5d, 0x2f, 0x67, 0xa, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0xa, 0x69, 0x66, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x44, 0x65, 0x6e, 0x6f, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x28, 0x66, 0x6e, 0x29, 0xa, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x66, 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x28, 0x66, 0x6e, 0x29, 0x29, 0xa, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x28, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0xa, 0x20, 0x20, 0xa, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0xa, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x69, 0x6e, 0x63, 0x62, 0x69, 0x6e, 0x20, 0x22, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0xa, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x3a, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0xa, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x69, 0x6e, 0x63, 0x62, 0x69, 0x6e, 0x20, 0x22, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0xa, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x3a, 0xa, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x24, 0x7b, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, 0x6d, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x62, 0x20, 0x3d, 0x3e, 0x20, 0x27, 0x30, 0x78, 0x27, 0x20, 0x2b, 0x20, 0x62, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0xa, 0x7d, 0x3b, 0x20, 0xa, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x7d, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2e, 0x27, 0x29, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x72, 0x67, 0x73, 0x20, 0x28, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x65, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x64, 0x65, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, 0x6d, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x53, 0x65, 0x74, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x62, 0x20, 0x3d, 0x3e, 0x20, 0x62, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x29, 0x2e, 0x66, 0x6c, 0x61, 0x74, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x60, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x65, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x64, 0x65, 0x70, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x65, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x64, 0x65, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x27, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x23, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0xa, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x68, 0x22, 0xa, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x60, 0x20, 0x20, 0x20, 0x20, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x3b, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x5b, 0x5d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x5b, 0x5d, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x5c, 0x6e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x7d, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x7d, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0x2c, 0x20, 0x26, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x7d, 0xa, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x22, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x7d, 0x22, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3f, 0x20, 0x31, 0x20, 0x3a, 0x20, 0x30, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x7d, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x48, 0x4f, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x74, 0x6f, 0x55, 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x28, 0x29, 0x7d, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x23, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x23, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0xa, 0xa, 0x43, 0x3d, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x7d, 0xa, 0x43, 0x43, 0x3d, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x43, 0x7d, 0xa, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x3d, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0xa, 0xa, 0x2e, 0x50, 0x48, 0x4f, 0x4e, 0x59, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0xa, 0x24, 0x7b, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x27, 0x7d, 0xa, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x3a, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x23, 0x23, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x24, 0x28, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x61, 0x72, 0x20, 0x63, 0x72, 0x73, 0x54, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0x3a, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x20, 0x23, 0x23, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x6d, 0x61, 0x63, 0x29, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x24, 0x28, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x64, 0x79, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x20, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x24, 0x28, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x20, 0x23, 0x23, 0x20, 0x74, 0x69, 0x64, 0x79, 0x20, 0x75, 0x70, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x64, 0x6c, 0x6c, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x23, 0x23, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0xa, 0x9, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0x9, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0xa, 0xa, 0x2e, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x47, 0x4f, 0x41, 0x4c, 0x20, 0x3a, 0x3d, 0x20, 0x68, 0x65, 0x6c, 0x70, 0xa, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x5c, 0x30, 0x60, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x72, 0x63, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3a, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3a, 0x20, 0x32, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x20, 0x27, 0x2d, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x2d, 0x2d, 0x75, 0x73, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x2d, 0x2d, 0x74, 0x75, 0x72, 0x62, 0x6f, 0x2d, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x61, 0x70, 0x69, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x2d, 0x2d, 0x6e, 0x6f, 0x2d, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x2d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x3a, 0x20, 0x30, 0xa, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6f, 0x73, 0x3a, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x3a, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x43, 0x3a, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x72, 0x67, 0x73, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6d, 0x61, 0x6b, 0x65, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2c, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x7d, 0xa }; -unsigned int _binary_lib_ffi_js_len = 5549; +unsigned int _binary_lib_gen_js_len = 19547; -const char _binary_lib_gen_js_start[] = { -0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x69, 0x73, 0x4e, 0x61, 0x4e, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x6e, 0x29, 0x29, 0x20, 0x26, 0x26, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x28, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x20, 0x28, 0x74, 0x2c, 0x20, 0x72, 0x76, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x38, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x31, 0x36, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x38, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x31, 0x36, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x73, 0x7a, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x73, 0x7a, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x5f, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x76, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x36, 0x34, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x28, 0x64, 0x65, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x29, 0x7d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x21, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x5d, 0x29, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x7d, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x70, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x2d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x2a, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x33, 0x32, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x24, 0x7b, 0x70, 0x54, 0x79, 0x70, 0x65, 0x7d, 0x3e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x7d, 0x24, 0x7b, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2e, 0x73, 0x6c, 0x6f, 0x77, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x7d, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x29, 0x7d, 0x20, 0x76, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x70, 0x29, 0x7d, 0x29, 0x2c, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x61, 0x70, 0x69, 0x29, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2e, 0x68, 0x61, 0x73, 0x4f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0x6e, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x27, 0x69, 0x33, 0x32, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x27, 0x75, 0x36, 0x34, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x28, 0x74, 0x79, 0x70, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x24, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x54, 0x4f, 0x44, 0x4f, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x7d, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x2c, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x32, 0x7d, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x7d, 0x3b, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x32, 0x7d, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0xa, 0x7d, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x24, 0x7b, 0x6e, 0x7d, 0x2c, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x24, 0x7b, 0x6e, 0x7d, 0x20, 0x3d, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x24, 0x7b, 0x6e, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x69, 0x5b, 0x6e, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x2c, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x7d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x20, 0x28, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x24, 0x7b, 0x63, 0x61, 0x73, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3f, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x66, 0x20, 0x28, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x26, 0x26, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x26, 0x26, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2a, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2a, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x7d, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x28, 0x28, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x2a, 0x29, 0x61, 0x62, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x63, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x3e, 0x28, 0x72, 0x63, 0x29, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x3e, 0x28, 0x72, 0x63, 0x29, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x63, 0x29, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x7d, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x24, 0x7b, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x20, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x7d, 0x20, 0x24, 0x7b, 0x6e, 0x7d, 0x46, 0x61, 0x73, 0x74, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x24, 0x7b, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x2c, 0x20, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x28, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x7d, 0x29, 0x20, 0x7b, 0xa, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x61, 0x73, 0x74, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x55, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x28, 0x28, 0x24, 0x7b, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x7d, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x5c, 0x6e, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x24, 0x7b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x28, 0x70, 0x2c, 0x20, 0x69, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x43, 0x61, 0x73, 0x74, 0x28, 0x69, 0x29, 0x7d, 0x76, 0x24, 0x7b, 0x69, 0x7d, 0x24, 0x7b, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x7d, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0x29, 0x3b, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x5c, 0x6e, 0x7d, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0xa, 0x2f, 0x2f, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x20, 0xa, 0x24, 0x7b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x24, 0x7b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x7d, 0x3e, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x7d, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x68, 0x3e, 0xa, 0xa, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x20, 0x7b, 0xa, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x7b, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x3b, 0xa, 0xa, 0x24, 0x7b, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x27, 0x7d, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x67, 0x65, 0x74, 0x46, 0x61, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x67, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x24, 0x7b, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x24, 0x7b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x7b, 0x7d, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0xa, 0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x78, 0x20, 0x3d, 0x20, 0x2f, 0x5b, 0x2e, 0x2f, 0x2d, 0x5d, 0x2f, 0x67, 0xa, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0xa, 0x69, 0x66, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x44, 0x65, 0x6e, 0x6f, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x28, 0x66, 0x6e, 0x29, 0xa, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x66, 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x28, 0x66, 0x6e, 0x29, 0x29, 0xa, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0xa, 0x20, 0x20, 0xa, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0xa, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x69, 0x6e, 0x63, 0x62, 0x69, 0x6e, 0x20, 0x22, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0xa, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x3a, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0xa, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x69, 0x6e, 0x63, 0x62, 0x69, 0x6e, 0x20, 0x22, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0xa, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x3a, 0xa, 0x60, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x24, 0x7b, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x66, 0x72, 0x6f, 0x6d, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x62, 0x20, 0x3d, 0x3e, 0x20, 0x27, 0x30, 0x78, 0x27, 0x20, 0x2b, 0x20, 0x62, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x2c, 0x20, 0x27, 0x29, 0x7d, 0xa, 0x7d, 0x3b, 0x20, 0xa, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x7d, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2e, 0x27, 0x29, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3a, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3a, 0x20, 0x32, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x20, 0x27, 0x2d, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x2d, 0x2d, 0x75, 0x73, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x2d, 0x2d, 0x74, 0x75, 0x72, 0x62, 0x6f, 0x2d, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x61, 0x70, 0x69, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x2d, 0x2d, 0x6e, 0x6f, 0x2d, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x2d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x3a, 0x20, 0x30, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x65, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x64, 0x65, 0x70, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x65, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x64, 0x65, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x27, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x23, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0xa, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x68, 0x22, 0xa, 0x60, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x60, 0x20, 0x20, 0x20, 0x20, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x3b, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x5b, 0x5d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5b, 0x5d, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x5b, 0x5d, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x5c, 0x6e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x7d, 0x28, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x7d, 0x5c, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x72, 0x78, 0x2c, 0x20, 0x27, 0x5f, 0x27, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x22, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x20, 0x20, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x3a, 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x28, 0x22, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x22, 0x2c, 0x20, 0x26, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x7d, 0xa, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x22, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x7d, 0x22, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3f, 0x20, 0x31, 0x20, 0x3a, 0x20, 0x30, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x7d, 0x3b, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x24, 0x7b, 0x6f, 0x70, 0x74, 0x73, 0x2e, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x7d, 0x3b, 0xa, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x48, 0x4f, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x74, 0x6f, 0x55, 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x28, 0x29, 0x7d, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x60, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x23, 0x20, 0x5b, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x2c, 0x3c, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2f, 0x3e, 0x5d, 0xa, 0x23, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0xa, 0xa, 0x43, 0x3d, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x7d, 0xa, 0x43, 0x43, 0x3d, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x43, 0x7d, 0xa, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x3d, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0xa, 0xa, 0x2e, 0x50, 0x48, 0x4f, 0x4e, 0x59, 0x3a, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0xa, 0x24, 0x7b, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x27, 0x7d, 0xa, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x3a, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x23, 0x23, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x24, 0x28, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x20, 0x2d, 0x49, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x61, 0x72, 0x20, 0x63, 0x72, 0x73, 0x54, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0xa, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0x3a, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0x20, 0x23, 0x23, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x6d, 0x61, 0x63, 0x29, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x24, 0x28, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x64, 0x79, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x20, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x24, 0x28, 0x24, 0x7b, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x29, 0x2f, 0x24, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x24, 0x28, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x28, 0x4f, 0x50, 0x54, 0x29, 0x20, 0x2d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x24, 0x28, 0x57, 0x41, 0x52, 0x4e, 0x29, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0x20, 0x24, 0x7b, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x6f, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6f, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x20, 0x60, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x7d, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x20, 0x23, 0x23, 0x20, 0x74, 0x69, 0x64, 0x79, 0x20, 0x75, 0x70, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x64, 0x6c, 0x6c, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x61, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x6f, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x23, 0x23, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0xa, 0x9, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0x9, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x24, 0x28, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x29, 0x2e, 0x73, 0x6f, 0xa, 0xa, 0x2e, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x47, 0x4f, 0x41, 0x4c, 0x20, 0x3a, 0x3d, 0x20, 0x68, 0x65, 0x6c, 0x70, 0xa, 0x60, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x2c, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x5c, 0x30, 0x60, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x72, 0x63, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x3a, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x43, 0x3a, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x6d, 0x61, 0x6b, 0x65, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2c, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x7d, 0xa +const char _binary_lib_fs_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x2c, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x46, 0x5f, 0x4f, 0x4b, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x4d, 0x54, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x44, 0x49, 0x52, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x52, 0x45, 0x47, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x31, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x39, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x61, 0x56, 0x69, 0x65, 0x77, 0x28, 0x75, 0x38, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x36, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, 0x74, 0x61, 0x74, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x76, 0x61, 0x6c, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x76, 0x61, 0x6c, 0x20, 0x26, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x4d, 0x54, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x31, 0x39, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x5f, 0x69, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x28, 0x30, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x28, 0x38, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x28, 0x31, 0x36, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x5b, 0x31, 0x38, 0x5d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x2b, 0x20, 0x31, 0x39, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x64, 0x5f, 0x69, 0x6e, 0x6f, 0x2c, 0x20, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x3c, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x73, 0x74, 0x61, 0x74, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x74, 0x61, 0x74, 0x33, 0x32, 0x5b, 0x36, 0x5d, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x52, 0x45, 0x47, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x44, 0x69, 0x72, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x46, 0x5f, 0x4f, 0x4b, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x3c, 0x20, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x74, 0x61, 0x74, 0x33, 0x32, 0x5b, 0x36, 0x5d, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x44, 0x49, 0x52, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6b, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x28, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x75, 0x62, 0x64, 0x69, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x3e, 0x20, 0x64, 0x69, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x75, 0x62, 0x64, 0x69, 0x72, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x24, 0x7b, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x3a, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x2d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x20, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x64, 0x69, 0x72, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2e, 0x2e, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2e, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x2f, 0x24, 0x7b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x28, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x20, 0x3f, 0x20, 0x31, 0x20, 0x3a, 0x20, 0x28, 0x61, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x62, 0x20, 0x3f, 0x20, 0x30, 0x20, 0x3a, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x2e, 0x73, 0x6f, 0x72, 0x74, 0x28, 0x73, 0x74, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x72, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x6b, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x2c, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x2c, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x44, 0x69, 0x72, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_fs_js_len = 2682; + +const char _binary_lib_untar_js_start[] = { +0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x6b, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x2c, 0x20, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x66, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2c, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x2c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x2c, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x63, 0x74, 0x61, 0x6c, 0x20, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x28, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x5d, 0x20, 0x3c, 0x20, 0x34, 0x38, 0x20, 0x7c, 0x7c, 0x20, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x5d, 0x20, 0x3e, 0x20, 0x35, 0x35, 0x29, 0x20, 0x26, 0x26, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x2d, 0x2d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x2b, 0x2b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x5d, 0x20, 0x3e, 0x3d, 0x20, 0x34, 0x38, 0x20, 0x26, 0x26, 0x20, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x5d, 0x20, 0x3c, 0x3d, 0x20, 0x35, 0x35, 0x20, 0x26, 0x26, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x2a, 0x3d, 0x20, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x5d, 0x20, 0x2d, 0x20, 0x34, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x2d, 0x2d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x2b, 0x2b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x35, 0x31, 0x31, 0x3b, 0x20, 0x6e, 0x20, 0x3e, 0x3d, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0x20, 0x2d, 0x2d, 0x6e, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x38, 0x5b, 0x6e, 0x5d, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0xa, 0x2f, 0x2a, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0xa, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x29, 0xa, 0x7b, 0xa, 0x9, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x2c, 0x20, 0x75, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x9, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x6e, 0x20, 0x3c, 0x20, 0x35, 0x31, 0x32, 0x3b, 0x20, 0x2b, 0x2b, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x9, 0x9, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x3c, 0x20, 0x31, 0x34, 0x38, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x20, 0x3e, 0x20, 0x31, 0x35, 0x35, 0x29, 0xa, 0x9, 0x9, 0x9, 0x75, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x29, 0x70, 0x29, 0x5b, 0x6e, 0x5d, 0x3b, 0xa, 0x9, 0x9, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x9, 0x9, 0x75, 0x20, 0x2b, 0x3d, 0x20, 0x30, 0x78, 0x32, 0x30, 0x3b, 0xa, 0xa, 0x9, 0x7d, 0xa, 0x9, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x75, 0x20, 0x3d, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x6f, 0x63, 0x74, 0x28, 0x70, 0x20, 0x2b, 0x20, 0x31, 0x34, 0x38, 0x2c, 0x20, 0x38, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0x2a, 0x2f, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2f, 0x74, 0x61, 0x72, 0x2f, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x2d, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x4f, 0x6c, 0x64, 0x2d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x20, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x29, 0x20, 0x70, 0x74, 0x72, 0x28, 0x75, 0x38, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3c, 0x20, 0x35, 0x31, 0x32, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x42, 0x61, 0x64, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x24, 0x7b, 0x73, 0x69, 0x7a, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x31, 0x30, 0x31, 0x2d, 0x32, 0x35, 0x35, 0x20, 0x73, 0x69, 0x7a, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x75, 0x38, 0x2e, 0x70, 0x74, 0x72, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x33, 0x34, 0x35, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x63, 0x74, 0x61, 0x6c, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x32, 0x34, 0x2c, 0x20, 0x31, 0x32, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x38, 0x5b, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x35, 0x36, 0x5d, 0x20, 0x2d, 0x20, 0x34, 0x38, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x63, 0x74, 0x61, 0x6c, 0x28, 0x75, 0x38, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x30, 0x30, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x35, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x2f, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6b, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x26, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x35, 0x35, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x2f, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x20, 0x26, 0x26, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x20, 0x7c, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x3c, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x7d, 0x3a, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x42, 0x61, 0x64, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x24, 0x7b, 0x73, 0x69, 0x7a, 0x65, 0x7d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x3c, 0x20, 0x35, 0x31, 0x32, 0x29, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x2d, 0x3d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x26, 0x26, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x75, 0x38, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x3a, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x24, 0x7b, 0x6c, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x7d, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x24, 0x7b, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x7d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x64, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x35, 0x31, 0x32, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_untar_js_len = 3122; + +const char _binary_lib_proc_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0xa, 0x7d, 0xa, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0xa, 0xa, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x20, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2b, 0x2b, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x33, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x72, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x30, 0x32, 0x34, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x30, 0x32, 0x34, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x60, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x60, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x31, 0x30, 0x32, 0x34, 0x2c, 0x20, 0x30, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x62, 0x75, 0x66, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x29, 0x20, 0x7b, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x65, 0x78, 0x65, 0x63, 0x76, 0x70, 0x2c, 0x20, 0x77, 0x61, 0x69, 0x74, 0x70, 0x69, 0x64, 0x2c, 0x20, 0x65, 0x78, 0x69, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x73, 0x74, 0x72, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x41, 0x72, 0x67, 0x73, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x3a, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x69, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x62, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x63, 0x73, 0x74, 0x72, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x40, 0x74, 0x73, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x36, 0x34, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x28, 0x73, 0x74, 0x72, 0x2e, 0x70, 0x74, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x3a, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x62, 0x36, 0x34, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x61, 0x72, 0x67, 0x62, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x41, 0x72, 0x67, 0x73, 0x28, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x76, 0x61, 0x72, 0x67, 0x73, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x6f, 0x72, 0x6b, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x65, 0x63, 0x76, 0x70, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x2e, 0x65, 0x78, 0x69, 0x74, 0x28, 0x31, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x69, 0x64, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x77, 0x61, 0x69, 0x74, 0x70, 0x69, 0x64, 0x28, 0x70, 0x69, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x70, 0x69, 0x64, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x65, 0x6d, 0x2c, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x7d, 0xa }; -unsigned int _binary_lib_gen_js_len = 18872; +unsigned int _binary_lib_proc_js_len = 1638; const char _binary_lib_path_js_start[] = { 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x20, 0x3d, 0x20, 0x34, 0x37, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x20, 0x3d, 0x20, 0x39, 0x32, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x44, 0x4f, 0x54, 0x20, 0x3d, 0x20, 0x34, 0x36, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x30, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x2e, 0x27, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x70, 0x6f, 0x73, 0x20, 0x2b, 0x20, 0x31, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x20, 0x7c, 0x7c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x2c, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x28, 0x69, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x69, 0x20, 0x2d, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4e, 0x4f, 0x4f, 0x50, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x20, 0x32, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x32, 0x20, 0x7c, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x44, 0x4f, 0x54, 0x20, 0x7c, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x32, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x44, 0x4f, 0x54, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x30, 0x2c, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x31, 0x20, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x69, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x69, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x7d, 0x2e, 0x2e, 0x60, 0x20, 0x3a, 0x20, 0x27, 0x2e, 0x2e, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x32, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x7d, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x69, 0x29, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x69, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2d, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x2d, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x69, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x44, 0x4f, 0x54, 0x20, 0x26, 0x26, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2b, 0x64, 0x6f, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x2e, 0x27, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x73, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x28, 0x30, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x43, 0x48, 0x41, 0x52, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0xa, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x21, 0x69, 0x73, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x27, 0x2f, 0x27, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x2f, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x70, 0x20, 0x3f, 0x20, 0x27, 0x2e, 0x2f, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x2e, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x65, 0x70, 0x29, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x2b, 0x3d, 0x20, 0x27, 0x2f, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x73, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x3f, 0x20, 0x60, 0x2f, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x60, 0x20, 0x3a, 0x20, 0x70, 0x61, 0x74, 0x68, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x20, 0x28, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x2e, 0x27, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x20, 0x26, 0x26, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x2f, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x60, 0x2f, 0x24, 0x7b, 0x61, 0x72, 0x67, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x2e, 0x27, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0xa }; unsigned int _binary_lib_path_js_len = 3137; -const char _binary_lib_proc_js_start[] = { -0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x30, 0xa, 0xa, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x70, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x20, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x30, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2b, 0x2b, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x33, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x73, 0x74, 0x72, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x30, 0x32, 0x34, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x31, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x70, 0x74, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x30, 0x32, 0x34, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x60, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x60, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x72, 0x65, 0x61, 0x64, 0x28, 0x66, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x31, 0x30, 0x32, 0x34, 0x2c, 0x20, 0x30, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x62, 0x75, 0x66, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x7d, 0xa +const char _binary_lib_inflate_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x62, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x27, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0x29, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x44, 0x45, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x20, 0x3d, 0x20, 0x38, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4f, 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x20, 0x3d, 0x20, 0x33, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x28, 0x62, 0x75, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x5b, 0x20, 0x69, 0x64, 0x31, 0x2c, 0x20, 0x69, 0x64, 0x32, 0x2c, 0x20, 0x63, 0x6d, 0x2c, 0x20, 0x66, 0x6c, 0x67, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x78, 0x66, 0x6c, 0x2c, 0x20, 0x6f, 0x73, 0x20, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x2c, 0x20, 0x31, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x69, 0x64, 0x31, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x66, 0x20, 0x26, 0x26, 0x20, 0x69, 0x64, 0x32, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x27, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x54, 0x45, 0x58, 0x54, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x37, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x48, 0x43, 0x52, 0x43, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x45, 0x58, 0x54, 0x52, 0x41, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x4e, 0x41, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x33, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x69, 0x64, 0x31, 0x2c, 0x20, 0x69, 0x64, 0x32, 0x2c, 0x20, 0x63, 0x6d, 0x2c, 0x20, 0x66, 0x6c, 0x67, 0x2c, 0x20, 0x78, 0x66, 0x6c, 0x2c, 0x20, 0x6f, 0x73, 0x2c, 0x20, 0x46, 0x54, 0x45, 0x58, 0x54, 0x2c, 0x20, 0x46, 0x48, 0x43, 0x52, 0x43, 0x2c, 0x20, 0x46, 0x45, 0x58, 0x54, 0x52, 0x41, 0x2c, 0x20, 0x46, 0x4e, 0x41, 0x4d, 0x45, 0x2c, 0x20, 0x46, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x62, 0x75, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x5b, 0x20, 0x69, 0x64, 0x31, 0x2c, 0x20, 0x69, 0x64, 0x32, 0x2c, 0x20, 0x63, 0x6d, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x6f, 0x73, 0x20, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x2c, 0x20, 0x31, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x69, 0x64, 0x31, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x66, 0x20, 0x26, 0x26, 0x20, 0x69, 0x64, 0x32, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x62, 0x2c, 0x20, 0x27, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x27, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x6d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x44, 0x45, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x2c, 0x20, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x27, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x4f, 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x2c, 0x20, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69, 0x78, 0x20, 0x6f, 0x73, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x61, 0x56, 0x69, 0x65, 0x77, 0x28, 0x62, 0x75, 0x66, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x38, 0x2c, 0x20, 0x38, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x28, 0x34, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x62, 0x2e, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x27, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x64, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x27, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x74, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_inflate_js_len = 1125; + +const char _binary_lib_curl_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x27, 0x29, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x33, 0x2c, 0x20, 0x66, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x55, 0x52, 0x4c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x54, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x44, 0x41, 0x54, 0x41, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x4f, 0x4e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x6c, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x2c, 0x20, 0x30, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x66, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x29, 0xa, 0xa, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x27, 0x77, 0x2b, 0x27, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x20, 0x36, 0x35, 0x35, 0x33, 0x36, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x4f, 0x4e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x30, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x33, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x44, 0x41, 0x54, 0x41, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x55, 0x52, 0x4c, 0x2c, 0x20, 0x75, 0x72, 0x6c, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x2c, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6c, 0x6f, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x54, 0x2c, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6c, 0x6f, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0x29, 0xa, 0x20, 0x20, 0x66, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x29, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x28, 0x63, 0x75, 0x72, 0x6c, 0x29, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x28, 0x29, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x7d, 0xa }; -unsigned int _binary_lib_proc_js_len = 680; +unsigned int _binary_lib_curl_js_len = 1649; -const char _binary_Makefile_start[] = { -0x43, 0x3d, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0xa, 0x43, 0x43, 0x3d, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x2b, 0x2b, 0xa, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x2d, 0x72, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0xa, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x2d, 0x73, 0x74, 0x64, 0x3d, 0x63, 0x2b, 0x2b, 0x31, 0x37, 0x20, 0x2d, 0x63, 0xa, 0x43, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x2d, 0x63, 0xa, 0x57, 0x41, 0x52, 0x4e, 0x3d, 0x2d, 0x57, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x2d, 0x57, 0x70, 0x65, 0x64, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x20, 0x2d, 0x57, 0x61, 0x6c, 0x6c, 0x20, 0x2d, 0x57, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x2d, 0x57, 0x6e, 0x6f, 0x2d, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0xa, 0x4f, 0x50, 0x54, 0x3d, 0x2d, 0x4f, 0x33, 0xa, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x30, 0x2e, 0x30, 0x2e, 0x34, 0x2d, 0x70, 0x72, 0x65, 0xa, 0x56, 0x38, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x31, 0x32, 0x2e, 0x30, 0xa, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x6c, 0x6f, 0xa, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x3d, 0x24, 0x28, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x20, 0x70, 0x77, 0x64, 0x29, 0xa, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x3d, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0xa, 0x41, 0x52, 0x43, 0x48, 0x3d, 0x78, 0x36, 0x34, 0xa, 0x6f, 0x73, 0x3d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0xa, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x3d, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0xa, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x4f, 0x53, 0x29, 0x2c, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x5f, 0x4e, 0x54, 0x29, 0xa, 0x9, 0x6f, 0x73, 0x3d, 0x77, 0x69, 0x6e, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x55, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x20, 0x3a, 0x3d, 0x20, 0x24, 0x28, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x20, 0x75, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2d, 0x73, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x55, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x29, 0x2c, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x29, 0xa, 0x9, 0x9, 0x9, 0x6f, 0x73, 0x3d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0xa, 0x9, 0x9, 0x9, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x2b, 0x3d, 0x2d, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x55, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x29, 0x2c, 0x44, 0x61, 0x72, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x9, 0x9, 0x6f, 0x73, 0x3d, 0x6d, 0x61, 0x63, 0xa, 0x9, 0x9, 0x9, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x41, 0x52, 0x43, 0x48, 0x29, 0x2c, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x29, 0xa, 0x9, 0x9, 0x9, 0x9, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x2b, 0x3d, 0x2d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x72, 0x6d, 0x36, 0x34, 0xa, 0x9, 0x9, 0x9, 0x9, 0x43, 0x41, 0x52, 0x47, 0x53, 0x2b, 0x3d, 0x2d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x72, 0x6d, 0x36, 0x34, 0xa, 0x9, 0x9, 0x9, 0x9, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x2b, 0x3d, 0x2d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x72, 0x6d, 0x36, 0x34, 0xa, 0x9, 0x9, 0x9, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x76, 0x38, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x2f, 0x76, 0x38, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2f, 0x24, 0x7b, 0x56, 0x38, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x74, 0x61, 0x72, 0x20, 0x2d, 0x78, 0x76, 0x66, 0x20, 0x76, 0x38, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x69, 0x66, 0x6e, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x76, 0x38, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x3a, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x2e, 0x67, 0x7a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x2f, 0x76, 0x38, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2f, 0x24, 0x7b, 0x56, 0x38, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2d, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x2d, 0x24, 0x7b, 0x41, 0x52, 0x43, 0x48, 0x7d, 0x2e, 0x61, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x2d, 0x64, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x2e, 0x67, 0x7a, 0xa, 0xa, 0x76, 0x38, 0x2f, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x6c, 0x69, 0x62, 0x3a, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x76, 0x38, 0x2f, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x67, 0x7a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x2f, 0x76, 0x38, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2f, 0x24, 0x7b, 0x56, 0x38, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2d, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x2d, 0x24, 0x7b, 0x41, 0x52, 0x43, 0x48, 0x7d, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x2d, 0x64, 0x20, 0x76, 0x38, 0x2f, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x67, 0x7a, 0xa, 0xa, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x3a, 0x20, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x20, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x7d, 0xa, 0x9, 0x40, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x20, 0x6f, 0x6e, 0x20, 0x24, 0x7b, 0x41, 0x52, 0x43, 0x48, 0x7d, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x2c, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x29, 0xa, 0x9, 0x24, 0x28, 0x43, 0x29, 0x20, 0x24, 0x7b, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2e, 0x53, 0x20, 0x2d, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x24, 0x28, 0x43, 0x29, 0x20, 0x24, 0x7b, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x53, 0x20, 0x2d, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x24, 0x7b, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x20, 0x24, 0x7b, 0x4f, 0x50, 0x54, 0x7d, 0x20, 0x2d, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x22, 0x27, 0x20, 0x2d, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x22, 0x27, 0x20, 0x2d, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x20, 0x2d, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x24, 0x7b, 0x57, 0x41, 0x52, 0x4e, 0x7d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x24, 0x7b, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x20, 0x24, 0x7b, 0x4f, 0x50, 0x54, 0x7d, 0x20, 0x2d, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x22, 0x27, 0x20, 0x2d, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x22, 0x27, 0x20, 0x2d, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x20, 0x2d, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x24, 0x7b, 0x57, 0x41, 0x52, 0x4e, 0x7d, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x24, 0x28, 0x43, 0x43, 0x29, 0x20, 0x24, 0x28, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x29, 0x20, 0x24, 0x7b, 0x4f, 0x50, 0x54, 0x7d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0x20, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x7d, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x2d, 0x6f, 0x20, 0x24, 0x7b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x7d, 0xa, 0xa, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x65, 0x78, 0x65, 0x3a, 0x20, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x76, 0x38, 0x2f, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0xa, 0x9, 0x63, 0x6c, 0x20, 0x2f, 0x45, 0x48, 0x73, 0x63, 0x20, 0x2f, 0x73, 0x74, 0x64, 0x3a, 0x63, 0x2b, 0x2b, 0x31, 0x37, 0x20, 0x2f, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x22, 0x27, 0x20, 0x2f, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x22, 0x27, 0x20, 0x2f, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x20, 0x2f, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x2f, 0x63, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x63, 0x6c, 0x20, 0x2f, 0x45, 0x48, 0x73, 0x63, 0x20, 0x2f, 0x73, 0x74, 0x64, 0x3a, 0x63, 0x2b, 0x2b, 0x31, 0x37, 0x20, 0x2f, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x22, 0x27, 0x20, 0x2f, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x27, 0x22, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x22, 0x27, 0x20, 0x2f, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x20, 0x2f, 0x49, 0x2e, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x2f, 0x63, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x63, 0x63, 0xa, 0x9, 0x63, 0x6c, 0x20, 0x76, 0x38, 0x2f, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x77, 0x69, 0x6e, 0x6d, 0x6d, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x62, 0x67, 0x68, 0x65, 0x6c, 0x70, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x61, 0x64, 0x76, 0x61, 0x70, 0x69, 0x33, 0x32, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x2f, 0x6f, 0x75, 0x74, 0x3a, 0x24, 0x7b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x7d, 0x2e, 0x65, 0x78, 0x65, 0xa, 0xa, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x3a, 0xa, 0x9, 0x2e, 0x2f, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x20, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x6a, 0x73, 0xa, 0xa, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x3a, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0xa, 0x9, 0x24, 0x28, 0x4d, 0x41, 0x4b, 0x45, 0x29, 0x20, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x3d, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x69, 0x62, 0xa, 0xa, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2e, 0x61, 0x3a, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0xa, 0x9, 0x24, 0x28, 0x4d, 0x41, 0x4b, 0x45, 0x29, 0x20, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x3d, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x69, 0x62, 0xa, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x69, 0x62, 0x3a, 0x20, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0xa, 0x9, 0x41, 0x52, 0x43, 0x48, 0x3d, 0x22, 0x24, 0x7b, 0x41, 0x52, 0x43, 0x48, 0x7d, 0x22, 0x20, 0x6f, 0x73, 0x3d, 0x22, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x22, 0x20, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x22, 0x24, 0x7b, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x22, 0x20, 0x57, 0x41, 0x52, 0x4e, 0x3d, 0x22, 0x24, 0x7b, 0x57, 0x41, 0x52, 0x4e, 0x7d, 0x22, 0x20, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x3d, 0x22, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x22, 0x20, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x22, 0x24, 0x7b, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x22, 0x20, 0x4f, 0x50, 0x54, 0x3d, 0x22, 0x24, 0x7b, 0x4f, 0x50, 0x54, 0x7d, 0x22, 0x20, 0x24, 0x28, 0x4d, 0x41, 0x4b, 0x45, 0x29, 0x20, 0x2d, 0x43, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x20, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2e, 0x61, 0xa, 0xa, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x6c, 0x69, 0x62, 0x3a, 0x20, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2e, 0x61, 0xa, 0x9, 0x41, 0x52, 0x43, 0x48, 0x3d, 0x22, 0x24, 0x7b, 0x41, 0x52, 0x43, 0x48, 0x7d, 0x22, 0x20, 0x6f, 0x73, 0x3d, 0x22, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x22, 0x20, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x22, 0x24, 0x7b, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x22, 0x20, 0x57, 0x41, 0x52, 0x4e, 0x3d, 0x22, 0x24, 0x7b, 0x57, 0x41, 0x52, 0x4e, 0x7d, 0x22, 0x20, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x3d, 0x22, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x22, 0x20, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x3d, 0x22, 0x24, 0x7b, 0x43, 0x43, 0x41, 0x52, 0x47, 0x53, 0x7d, 0x22, 0x20, 0x4f, 0x50, 0x54, 0x3d, 0x22, 0x24, 0x7b, 0x4f, 0x50, 0x54, 0x7d, 0x22, 0x20, 0x24, 0x28, 0x4d, 0x41, 0x4b, 0x45, 0x29, 0x20, 0x2d, 0x43, 0x20, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2f, 0x20, 0x24, 0x7b, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x7d, 0x2e, 0x73, 0x6f, 0xa, 0xa, 0x64, 0x6f, 0x63, 0x73, 0x3a, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x72, 0x20, 0x64, 0x6f, 0x63, 0x73, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x64, 0x6f, 0x63, 0x73, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x2f, 0x24, 0x28, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x74, 0x61, 0x72, 0x20, 0x2d, 0x78, 0x76, 0x66, 0x20, 0x64, 0x6f, 0x63, 0x73, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x6d, 0x76, 0x20, 0x64, 0x6f, 0x63, 0x73, 0x2d, 0x24, 0x28, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x20, 0x64, 0x6f, 0x63, 0x73, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x64, 0x6f, 0x63, 0x73, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0xa, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x2a, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x65, 0x78, 0x65, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x65, 0x78, 0x70, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x9, 0x40, 0x64, 0x65, 0x6c, 0x20, 0x2f, 0x71, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x2e, 0x6c, 0x69, 0x62, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x2a, 0x2e, 0x6f, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x20, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x61, 0x6c, 0x6c, 0x3a, 0xa, 0x9, 0x24, 0x28, 0x4d, 0x41, 0x4b, 0x45, 0x29, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0x69, 0x66, 0x65, 0x71, 0x20, 0x28, 0x24, 0x28, 0x6f, 0x73, 0x29, 0x2c, 0x77, 0x69, 0x6e, 0x29, 0xa, 0x9, 0x40, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20, 0x2f, 0x73, 0x20, 0x2f, 0x71, 0x20, 0x76, 0x38, 0x20, 0x3e, 0x20, 0x4e, 0x55, 0x4c, 0x20, 0x32, 0x3e, 0x26, 0x31, 0xa, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x9, 0x72, 0x6d, 0x20, 0x2d, 0x66, 0x72, 0x20, 0x76, 0x38, 0xa, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa +const char _binary_lib_build_js_start[] = { +0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x44, 0x69, 0x72, 0x2c, 0x20, 0x6d, 0x6b, 0x44, 0x69, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x66, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x72, 0x67, 0x73, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x6a, 0x73, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x69, 0x6c, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x2c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x41, 0x4d, 0x2c, 0x20, 0x41, 0x59, 0x2c, 0x20, 0x41, 0x47, 0x2c, 0x20, 0x41, 0x44, 0x2c, 0x20, 0x41, 0x52, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0xa, 0x7d, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x20, 0x27, 0x29, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x31, 0x29, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x20, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x20, 0x69, 0x6e, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x64, 0x69, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x48, 0x4f, 0x4d, 0x45, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x27, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x76, 0x38, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x24, 0x7b, 0x76, 0x38, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 0x60, 0x24, 0x7b, 0x76, 0x38, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x2f, 0x24, 0x7b, 0x76, 0x38, 0x7d, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x47, 0x7d, 0x73, 0x69, 0x7a, 0x65, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x20, 0x24, 0x7b, 0x73, 0x69, 0x7a, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x28, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2d, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x2d, 0x24, 0x7b, 0x61, 0x72, 0x63, 0x68, 0x7d, 0x2e, 0x61, 0x2e, 0x67, 0x7a, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x76, 0x38, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x24, 0x7b, 0x76, 0x38, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 0x60, 0x24, 0x7b, 0x76, 0x38, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x2f, 0x24, 0x7b, 0x76, 0x38, 0x7d, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2d, 0x24, 0x7b, 0x6f, 0x73, 0x7d, 0x2d, 0x24, 0x7b, 0x61, 0x72, 0x63, 0x68, 0x7d, 0x2e, 0x61, 0x2e, 0x67, 0x7a, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x47, 0x7d, 0x73, 0x69, 0x7a, 0x65, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x20, 0x24, 0x7b, 0x73, 0x69, 0x7a, 0x65, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x27, 0x2c, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x63, 0x77, 0x64, 0x29, 0xa, 0x7d, 0x20, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x60, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x69, 0x6e, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x29, 0x20, 0x26, 0x26, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x64, 0x69, 0x72, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x60, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x64, 0x65, 0x66, 0x20, 0x61, 0x74, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x28, 0x64, 0x65, 0x66, 0x29, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x63, 0x63, 0x60, 0x29, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x63, 0x63, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x72, 0x63, 0x29, 0x29, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x64, 0x69, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x4d, 0x7d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x7d, 0x20, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x69, 0x6e, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28, 0x43, 0x2c, 0x20, 0x43, 0x43, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x63, 0x63, 0x20, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x77, 0x69, 0x74, 0x68, 0x24, 0x7b, 0x41, 0x47, 0x7d, 0x20, 0x24, 0x7b, 0x43, 0x43, 0x7d, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x70, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x70, 0x7d, 0x60, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x63, 0x63, 0x60, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x61, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x62, 0x6a, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x27, 0x61, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x72, 0x73, 0x54, 0x27, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x61, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x66, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x66, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6f, 0x27, 0x29, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x27, 0x61, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x72, 0x73, 0x54, 0x27, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x61, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0x60, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x63, 0xa, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x70, 0x79, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x6f, 0x77, 0x74, 0x6f, 0x2f, 0x77, 0x68, 0x61, 0x74, 0x2d, 0x61, 0x72, 0x65, 0x2d, 0x74, 0x68, 0x65, 0x2d, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x2d, 0x73, 0x6f, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x64, 0x79, 0x6c, 0x69, 0x62, 0x2d, 0x6f, 0x6e, 0x2d, 0x6d, 0x61, 0x63, 0x6f, 0x73, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x20, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x77, 0x69, 0x74, 0x68, 0x24, 0x7b, 0x41, 0x47, 0x7d, 0x20, 0x24, 0x7b, 0x43, 0x43, 0x7d, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x4e, 0x4b, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x27, 0x2d, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x27, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x60, 0x29, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x4e, 0x4b, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x27, 0x2d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x27, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x73, 0x6f, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x28, 0x64, 0x65, 0x66, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x2d, 0x6c, 0x24, 0x7b, 0x6c, 0x7d, 0x60, 0x29, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x64, 0x69, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x24, 0x7b, 0x63, 0x77, 0x64, 0x7d, 0x60, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x63, 0x77, 0x64, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x66, 0x2e, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x66, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x66, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x61, 0x27, 0x29, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x66, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x24, 0x7b, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x7d, 0x2f, 0x24, 0x7b, 0x66, 0x7d, 0x60, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x68, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x5b, 0x60, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x5d, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2e, 0x53, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x5b, 0x60, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x5d, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x53, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x5b, 0x60, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x5d, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x27, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x6f, 0x73, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2e, 0x61, 0x60, 0x29, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x29, 0x29, 0xa, 0x7d, 0xa, 0x2a, 0x2f, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x28, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x2e, 0x68, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2e, 0x61, 0x60, 0x29, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x6f, 0x73, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x60, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2e, 0x61, 0x60, 0x29, 0x5d, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x29, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x28, 0x7b, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x28, 0x29, 0x2c, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x20, 0x7d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x60, 0x29, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x73, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x29, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x73, 0x5d, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x29, 0xa, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x60, 0x29, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2e, 0x53, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0x27, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x53, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0x27, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x63, 0x63, 0x60, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x60, 0x2d, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x2d, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x63, 0x63, 0x27, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x63, 0x60, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x60, 0x2d, 0x44, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x3d, 0x24, 0x7b, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x2d, 0x44, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x24, 0x7b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x60, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x60, 0x2d, 0x49, 0x24, 0x7b, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x7d, 0x2f, 0x76, 0x38, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x60, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x60, 0x6c, 0x6f, 0x2e, 0x63, 0x63, 0x60, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x24, 0x7b, 0x41, 0x59, 0x7d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x24, 0x7b, 0x41, 0x44, 0x7d, 0x60, 0x29, 0xa, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2e, 0x61, 0x60, 0x29, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x72, 0x67, 0x73, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6e, 0x20, 0x3d, 0x3e, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x60, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x28, 0x5b, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x4e, 0x4b, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x2c, 0x20, 0x4f, 0x50, 0x54, 0x2c, 0x20, 0x27, 0x2d, 0x72, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x27, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x57, 0x41, 0x52, 0x4e, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x60, 0x24, 0x7b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x7d, 0x60, 0x2c, 0x20, 0x60, 0x24, 0x7b, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x7d, 0x2e, 0x6f, 0x60, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x76, 0x38, 0x2f, 0x6c, 0x69, 0x62, 0x76, 0x38, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x6c, 0x69, 0x74, 0x68, 0x2e, 0x61, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x6d, 0x62, 0x65, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x62, 0x73, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x63, 0x77, 0x64, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x6f, 0x70, 0x20, 0x28, 0x29, 0x20, 0x7b, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x7d, 0x27, 0xa, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x5c, 0x5c, 0x6e, 0x27, 0x29, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7d, 0xa, 0x60, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x75, 0x70, 0x20, 0x61, 0x70, 0x69, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x70, 0x69, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x22, 0x30, 0x2e, 0x30, 0x2e, 0x34, 0x70, 0x72, 0x65, 0x22, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x22, 0x6c, 0x6f, 0x22, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x6c, 0x6f, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x43, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x43, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x43, 0x43, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4c, 0x49, 0x4e, 0x4b, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x49, 0x4e, 0x4b, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4f, 0x50, 0x54, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4f, 0x50, 0x54, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x2d, 0x4f, 0x33, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x20, 0x3d, 0x20, 0x28, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x2d, 0x73, 0x74, 0x64, 0x3d, 0x63, 0x2b, 0x2b, 0x31, 0x37, 0x20, 0x2d, 0x63, 0x20, 0x2d, 0x44, 0x56, 0x38, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x53, 0x20, 0x2d, 0x44, 0x56, 0x38, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x44, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x50, 0x3d, 0x30, 0x27, 0x29, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x57, 0x41, 0x52, 0x4e, 0x20, 0x3d, 0x20, 0x28, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x57, 0x41, 0x52, 0x4e, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0xa, 0x20, 0x20, 0x27, 0x2d, 0x57, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x2d, 0x57, 0x70, 0x65, 0x64, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x20, 0x2d, 0x57, 0x61, 0x6c, 0x6c, 0x20, 0x2d, 0x57, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x2d, 0x57, 0x6e, 0x6f, 0x2d, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x20, 0x3d, 0x20, 0x28, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x41, 0x52, 0x47, 0x53, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x2d, 0x73, 0x27, 0x29, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x60, 0x24, 0x7b, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0x7d, 0x2f, 0x2e, 0x6c, 0x6f, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x56, 0x38, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x4f, 0x53, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x6f, 0x2e, 0x6f, 0x73, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x72, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x6f, 0x2e, 0x61, 0x72, 0x63, 0x68, 0x28, 0x29, 0xa, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x77, 0x64, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x44, 0x49, 0x52, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x72, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x55, 0x52, 0x4c, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28, 0x27, 0x4c, 0x4f, 0x5f, 0x56, 0x38, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x27, 0x76, 0x38, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x2f, 0x24, 0x7b, 0x76, 0x38, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x60, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x2d, 0x20, 0x75, 0x73, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x76, 0x3f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3a, 0x20, 0x30, 0x2c, 0x20, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3a, 0x20, 0x32, 0x2c, 0x20, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x3a, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x20, 0x27, 0x2d, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x2d, 0x2d, 0x75, 0x73, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x2d, 0x2d, 0x74, 0x75, 0x72, 0x62, 0x6f, 0x2d, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x61, 0x70, 0x69, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x2d, 0x2d, 0x6e, 0x6f, 0x2d, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x2d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x6f, 0x73, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x6f, 0x5f, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x73, 0x6f, 0x27, 0x20, 0x3a, 0x20, 0x28, 0x6f, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x20, 0x3f, 0x20, 0x27, 0x64, 0x79, 0x6c, 0x69, 0x62, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x64, 0x6c, 0x6c, 0x27, 0x29, 0x29, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x66, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x63, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x6f, 0x2e, 0x63, 0x63, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x6f, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x6c, 0x69, 0x62, 0x66, 0x66, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x6c, 0x69, 0x62, 0x73, 0x73, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x6c, 0x7a, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x69, 0x63, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x74, 0x63, 0x63, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x7a, 0x6c, 0x69, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x66, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6a, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x27, 0x2d, 0x76, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x61, 0x20, 0x3d, 0x3e, 0x20, 0x61, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x2d, 0x76, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2e, 0x2f, 0x6c, 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x6c, 0x6f, 0x2e, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6c, 0x6f, 0x2e, 0x70, 0x74, 0x72, 0x28, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x27, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x30, 0x32, 0x34, 0x29, 0x29, 0x2e, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28, 0x2f, 0x28, 0x5c, 0x64, 0x2b, 0x29, 0x5c, 0x73, 0x2f, 0x67, 0x29, 0x5b, 0x32, 0x31, 0x5d, 0x2c, 0x20, 0x31, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x22, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x31, 0x31, 0x20, 0x6d, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x75, 0x73, 0x20, 0x37, 0x6d, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, 0x60, 0x60, 0x68, 0x79, 0x70, 0x65, 0x72, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x22, 0x6c, 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x20, 0x31, 0x22, 0x60, 0x60, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x75, 0x73, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x60, 0x60, 0x60, 0x6c, 0x6f, 0x20, 0x4c, 0x49, 0x4e, 0x4b, 0x3d, 0x22, 0x6d, 0x6f, 0x6c, 0x64, 0x20, 0x2d, 0x72, 0x75, 0x6e, 0x20, 0x67, 0x2b, 0x2b, 0x22, 0x20, 0x43, 0x43, 0x3d, 0x22, 0x63, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x67, 0x2b, 0x2b, 0x22, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6a, 0x73, 0x60, 0x60, 0x60, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0xa, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x28, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x5b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x27, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x27, 0x20, 0x5d, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x4a, 0x53, 0x4f, 0x4e, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x27, 0x20, 0x20, 0x27, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x3f, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x6c, 0x69, 0x62, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x27, 0x2e, 0x2f, 0x6c, 0x69, 0x62, 0x27, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x27, 0x2e, 0x2f, 0x6c, 0x69, 0x62, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x44, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x64, 0x69, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x2f, 0x24, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2e, 0x24, 0x7b, 0x73, 0x6f, 0x5f, 0x65, 0x78, 0x74, 0x7d, 0x60, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x60, 0x24, 0x7b, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x2c, 0x20, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x7d, 0x60, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x4c, 0x4f, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x2c, 0x20, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x73, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x29, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x6f, 0x64, 0x27, 0x29, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x7d, 0xa }; -unsigned int _binary_Makefile_len = 3176; +unsigned int _binary_lib_build_js_len = 12412; const char _binary_main_cc_start[] = { -0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x57, 0x49, 0x4e, 0x33, 0x32, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x2e, 0x68, 0x22, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x22, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0xa, 0xa, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x2a, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x2a, 0x20, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x76, 0x38, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x75, 0x70, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x69, 0x63, 0x65, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0xa, 0x20, 0x2a, 0x20, 0x4a, 0x53, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, 0xa, 0x20, 0x2a, 0x20, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0xa, 0x20, 0x2a, 0x2f, 0xa, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x64, 0x75, 0x6d, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x69, 0x74, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x76, 0x38, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x56, 0x38, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x63, 0x70, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x2f, 0x63, 0x2f, 0x69, 0x6f, 0x2f, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x5f, 0x49, 0x4f, 0x4e, 0x42, 0x46, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x5f, 0x49, 0x4f, 0x4e, 0x42, 0x46, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x38, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x5f, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x3a, 0x6b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x6b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x38, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x28, 0x26, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x56, 0x38, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2d, 0x20, 0x62, 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x20, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x65, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x2e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x65, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x20, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x65, 0x78, 0x69, 0x74, 0x73, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x75, 0x70, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x69, 0x74, 0x73, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x6c, 0x65, 0x61, 0x6b, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa +0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x57, 0x49, 0x4e, 0x33, 0x32, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x2e, 0x68, 0x22, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x22, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0xa, 0xa, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x2a, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x2a, 0x20, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x76, 0x38, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x75, 0x70, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x69, 0x63, 0x65, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0xa, 0x20, 0x2a, 0x20, 0x4a, 0x53, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, 0xa, 0x20, 0x2a, 0x20, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0xa, 0x20, 0x2a, 0x2f, 0xa, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x64, 0x75, 0x6d, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x69, 0x74, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x76, 0x38, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x56, 0x38, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x63, 0x70, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x2f, 0x63, 0x2f, 0x69, 0x6f, 0x2f, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x5f, 0x49, 0x4f, 0x4e, 0x42, 0x46, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x76, 0x62, 0x75, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x5f, 0x49, 0x4f, 0x4e, 0x42, 0x46, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x38, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x5f, 0x76, 0x38, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x3a, 0x6b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x6b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x38, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x76, 0x38, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x28, 0x26, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x56, 0x38, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2d, 0x20, 0x62, 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x20, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x65, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x2e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x65, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x20, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x49, 0x43, 0x55, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x68, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x65, 0x78, 0x69, 0x74, 0x73, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x75, 0x70, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x69, 0x74, 0x73, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x6c, 0x65, 0x61, 0x6b, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x76, 0x38, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa }; -unsigned int _binary_main_cc_len = 2542; +unsigned int _binary_main_cc_len = 2557; const char _binary_lo_cc_start[] = { -0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6c, 0x6f, 0x2e, 0x68, 0x22, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x73, 0x61, 0x66, 0x65, 0x74, 0x79, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x3e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x3b, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x3b, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x3b, 0xa, 0xa, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0xa, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x43, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x4d, 0x4f, 0x4e, 0x4f, 0x54, 0x4f, 0x4e, 0x49, 0x43, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x20, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5b, 0x35, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x76, 0x38, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x26, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x69, 0x73, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, 0x6f, 0x6f, 0x6d, 0x3f, 0x20, 0x25, 0x64, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x69, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6f, 0x6f, 0x6d, 0x2c, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x62, 0x69, 0x67, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x62, 0x75, 0x66, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x51, 0x4e, 0x3a, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x62, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0xa, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x69, 0x74, 0x3f, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x3f, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4b, 0x65, 0x70, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3e, 0x28, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x7c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x44, 0x6f, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x46, 0x75, 0x6e, 0x63, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x46, 0x75, 0x6e, 0x63, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3e, 0x28, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x7c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x44, 0x6f, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x26, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3e, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x75, 0x73, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x75, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3e, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x5b, 0x65, 0x76, 0x61, 0x6c, 0x5d, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x5b, 0x65, 0x76, 0x61, 0x6c, 0x5d, 0x20, 0x28, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x29, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x25, 0x73, 0x20, 0x28, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x29, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, 0x7c, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x49, 0x73, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x29, 0x20, 0x26, 0x26, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x22, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3a, 0x20, 0x43, 0x61, 0x73, 0x74, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3a, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x74, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x32, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x5b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5d, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x4f, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x44, 0x61, 0x74, 0x61, 0x3e, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x31, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x6f, 0x6f, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x6a, 0x69, 0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x6a, 0x69, 0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0xa, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x7e, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x30, 0x30, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0xa, 0x2a, 0x2f, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6a, 0x69, 0x74, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x76, 0x38, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x65, 0x67, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0xa, 0x69, 0x6e, 0x74, 0x2a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6c, 0x6f, 0x67, 0x20, 0x25, 0x69, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x73, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x64, 0x6c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x77, 0x61, 0x79, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x52, 0x41, 0x49, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x52, 0x41, 0x49, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x3a, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x31, 0x30, 0x30, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3a, 0x3a, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x6c, 0x6f, 0x3a, 0x3a, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x4f, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x6b, 0x45, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x28, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x46, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x28, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x28, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x28, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x3a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x73, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x5d, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x7b, 0x7d, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x61, 0x62, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x76, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x61, 0x72, 0x67, 0x76, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x63, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x66, 0x64, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x64, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x32, 0x35, 0x36, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x31, 0x30, 0x32, 0x34, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x62, 0x6f, 0x6f, 0x6c, 0x3e, 0x20, 0x6f, 0x6b, 0x32, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x6b, 0x32, 0x2e, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2d, 0x3e, 0x49, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x30, 0x29, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x78, 0x69, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x65, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x65, 0x6e, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x69, 0x66, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3f, 0x3f, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x2a, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x3e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3e, 0x28, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3e, 0x28, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x2e, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x61, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x3e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3f, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x5b, 0x5d, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x7b, 0x7d, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x28, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x26, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x26, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x66, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x5b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5d, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x20, 0x3e, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x62, 0x6f, 0x6f, 0x6c, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x22, 0x5c, 0x6e, 0x43, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x21, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x72, 0x72, 0x69, 0x62, 0x6c, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x6b, 0x20, 0x3d, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6f, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x21, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x61, 0x73, 0x68, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x72, 0x63, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x61, 0x73, 0x68, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x28, 0x29, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x62, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xa, 0x2f, 0x2f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x26, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x3a, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2b, 0x2b, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x26, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3a, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2b, 0x2b, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x3f, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x32, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x53, 0x20, 0x58, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x5f, 0x74, 0x20, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x74, 0x20, 0x6d, 0x74, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x28, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x28, 0x29, 0x2c, 0x20, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, 0x41, 0x52, 0x5f, 0x43, 0x4c, 0x4f, 0x43, 0x4b, 0x2c, 0x20, 0x26, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x26, 0x6d, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x28, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x28, 0x29, 0x2c, 0x20, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x73, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x73, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x33, 0x32, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x2c, 0x20, 0x26, 0x74, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x20, 0x2a, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x20, 0x31, 0x65, 0x39, 0x29, 0x20, 0x2b, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x74, 0x61, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x74, 0x61, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x73, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x62, 0x2d, 0x3e, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x2a, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x3e, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x2a, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x3e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x61, 0x62, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x3e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x61, 0x62, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x74, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x6b, 0x20, 0x3d, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6f, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2d, 0x3e, 0x52, 0x75, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x53, 0x20, 0x58, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x6d, 0x61, 0x63, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0x29, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x77, 0x69, 0x6e, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x41, 0x72, 0x63, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x53, 0x20, 0x58, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0x29, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x45, 0x78, 0x69, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x22, 0x76, 0x38, 0x22, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x2c, 0x20, 0x52, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x22, 0x2c, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x22, 0x2c, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x2c, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x22, 0x2c, 0x20, 0x53, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x55, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x2c, 0x20, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x2c, 0x20, 0x52, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x63, 0x68, 0x22, 0x2c, 0x20, 0x41, 0x72, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6f, 0x73, 0x22, 0x2c, 0x20, 0x4f, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0x2c, 0x20, 0x45, 0x78, 0x69, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x61, 0x72, 0x63, 0x68, 0x2c, 0x20, 0x6f, 0x73, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x43, 0x2f, 0x46, 0x46, 0x49, 0x20, 0x61, 0x70, 0x69, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x29, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x76, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x61, 0x72, 0x67, 0x63, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x61, 0x72, 0x67, 0x63, 0x5d, 0x20, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x66, 0x64, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x63, 0x74, 0x78, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x72, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x66, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x66, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa +0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x6c, 0x6f, 0x2e, 0x68, 0x22, 0xa, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x38, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x73, 0x61, 0x66, 0x65, 0x74, 0x79, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x3e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x3b, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x3b, 0xa, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x70, 0x3c, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x3b, 0xa, 0xa, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0xa, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x43, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x4d, 0x4f, 0x4e, 0x4f, 0x54, 0x4f, 0x4e, 0x49, 0x43, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x20, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5b, 0x35, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0xa, 0x7d, 0x3b, 0xa, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x72, 0x63, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x26, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x26, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x76, 0x38, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4f, 0x4f, 0x4d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x26, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x69, 0x73, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, 0x6f, 0x6f, 0x6d, 0x3f, 0x20, 0x25, 0x64, 0x5c, 0x6e, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x69, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6f, 0x6f, 0x6d, 0x2c, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x62, 0x69, 0x67, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x62, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x62, 0x75, 0x66, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x51, 0x4e, 0x3a, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x62, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0xa, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x69, 0x74, 0x3f, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x3f, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4b, 0x65, 0x70, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3e, 0x28, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x7c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x44, 0x6f, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x46, 0x75, 0x6e, 0x63, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x46, 0x75, 0x6e, 0x63, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3e, 0x28, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x7c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x3a, 0x44, 0x6f, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x26, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3e, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x75, 0x73, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x75, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x3e, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x5b, 0x65, 0x76, 0x61, 0x6c, 0x5d, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x5b, 0x65, 0x76, 0x61, 0x6c, 0x5d, 0x20, 0x28, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x29, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x61, 0x74, 0x20, 0x25, 0x73, 0x20, 0x28, 0x25, 0x73, 0x3a, 0x25, 0x69, 0x3a, 0x25, 0x69, 0x29, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x66, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x2c, 0x20, 0x2a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, 0x7c, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6b, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x49, 0x73, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x29, 0x20, 0x26, 0x26, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x22, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3a, 0x20, 0x43, 0x61, 0x73, 0x74, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3a, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x74, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x32, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x5b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5d, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x4f, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x44, 0x61, 0x74, 0x61, 0x3e, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x31, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x6f, 0x6f, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x6a, 0x69, 0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0xa, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x6a, 0x69, 0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0xa, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x7e, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x30, 0x30, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0xa, 0x2a, 0x2f, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6a, 0x69, 0x74, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x76, 0x38, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x65, 0x67, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0xa, 0x69, 0x6e, 0x74, 0x2a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x6c, 0x6f, 0x67, 0x20, 0x25, 0x69, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x4a, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x73, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x6f, 0x6f, 0x6d, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x64, 0x6c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x77, 0x61, 0x79, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x52, 0x41, 0x49, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x52, 0x41, 0x49, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x3a, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x31, 0x30, 0x30, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x3a, 0x3a, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x6c, 0x6f, 0x3a, 0x3a, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x4f, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x6b, 0x45, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x28, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x46, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x28, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x28, 0x4f, 0x4f, 0x4d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x28, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x3a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x73, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x5d, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x7b, 0x7d, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x61, 0x62, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x76, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x61, 0x72, 0x67, 0x76, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x67, 0x63, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x66, 0x64, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x64, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x32, 0x35, 0x36, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x31, 0x30, 0x32, 0x34, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x62, 0x6f, 0x6f, 0x6c, 0x3e, 0x20, 0x6f, 0x6b, 0x32, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x6b, 0x32, 0x2e, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2d, 0x3e, 0x49, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x30, 0x29, 0x7d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x76, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x45, 0x78, 0x69, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x65, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x65, 0x6e, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x69, 0x66, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3f, 0x3f, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x2a, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x3e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3e, 0x28, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x3e, 0x28, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3e, 0x28, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x2e, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x61, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x4e, 0x75, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2a, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x3e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3f, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x62, 0x2d, 0x3e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x2d, 0x3e, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x5b, 0x5d, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x7b, 0x7d, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x28, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x26, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x74, 0x61, 0x73, 0x6b, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x26, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x66, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x66, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x5b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5d, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x20, 0x3e, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x62, 0x6f, 0x6f, 0x6c, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x49, 0x73, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x22, 0x5c, 0x6e, 0x43, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x21, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x72, 0x72, 0x69, 0x62, 0x6c, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x6b, 0x20, 0x3d, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6f, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x25, 0x73, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x2a, 0x70, 0x61, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x2e, 0x41, 0x73, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x28, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x61, 0x73, 0x68, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x72, 0x63, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x61, 0x73, 0x68, 0x28, 0x29, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x22, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x3e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x28, 0x29, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x62, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xa, 0x2f, 0x2f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x26, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x3a, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2b, 0x2b, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x26, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x3a, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x2b, 0x2b, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x6d, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x3f, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x31, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x28, 0x32, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x28, 0x29, 0x29, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x53, 0x20, 0x58, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x5f, 0x74, 0x20, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x74, 0x20, 0x6d, 0x74, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x28, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x28, 0x29, 0x2c, 0x20, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, 0x41, 0x52, 0x5f, 0x43, 0x4c, 0x4f, 0x43, 0x4b, 0x2c, 0x20, 0x26, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x26, 0x6d, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x28, 0x6d, 0x61, 0x63, 0x68, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x28, 0x29, 0x2c, 0x20, 0x63, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x73, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x73, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x33, 0x32, 0x29, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x2c, 0x20, 0x26, 0x74, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x73, 0x65, 0x63, 0x20, 0x2a, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x20, 0x31, 0x65, 0x39, 0x29, 0x20, 0x2b, 0x20, 0x74, 0x2e, 0x74, 0x76, 0x5f, 0x6e, 0x73, 0x65, 0x63, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x74, 0x61, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x74, 0x61, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2d, 0x3e, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x49, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x22, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x29, 0x29, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x73, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x61, 0x62, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x62, 0x2d, 0x3e, 0x44, 0x65, 0x74, 0x61, 0x63, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x2a, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x3e, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x2a, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x3e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x61, 0x62, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x3c, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x3e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x29, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x20, 0x61, 0x62, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x64, 0x3a, 0x3a, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x61, 0x62, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x20, 0x2d, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x31, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x20, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x49, 0x73, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x26, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x4f, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x7c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x54, 0x46, 0x38, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x74, 0x72, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x22, 0x2c, 0x20, 0x2a, 0x73, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x75, 0x72, 0x6c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x77, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x70, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x6b, 0x20, 0x3d, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x26, 0x62, 0x61, 0x73, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x28, 0x26, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6f, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2d, 0x3e, 0x52, 0x75, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x4f, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x6d, 0x61, 0x63, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0x29, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x77, 0x69, 0x6e, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x41, 0x72, 0x63, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x57, 0x49, 0x4e, 0x36, 0x34, 0x29, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x78, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x22, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x45, 0x78, 0x69, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x22, 0x76, 0x38, 0x22, 0x2c, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x74, 0x66, 0x38, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x56, 0x38, 0x3a, 0x3a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x22, 0x2c, 0x20, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x2c, 0x20, 0x52, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x61, 0x72, 0x63, 0x68, 0x22, 0x2c, 0x20, 0x41, 0x72, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6f, 0x73, 0x22, 0x2c, 0x20, 0x4f, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0x2c, 0x20, 0x45, 0x78, 0x69, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x22, 0x2c, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x22, 0x2c, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x2c, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x22, 0x2c, 0x20, 0x53, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2c, 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x70, 0x46, 0x75, 0x74, 0x66, 0x38, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x6f, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x55, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x20, 0x26, 0x70, 0x46, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x61, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x2c, 0x20, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x2c, 0x20, 0x52, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x43, 0x2f, 0x46, 0x46, 0x49, 0x20, 0x61, 0x70, 0x69, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x29, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x76, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x61, 0x72, 0x67, 0x63, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x61, 0x72, 0x67, 0x63, 0x5d, 0x20, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x6e, 0x6c, 0x65, 0x6e, 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x66, 0x64, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x74, 0x78, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x63, 0x74, 0x78, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x72, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x66, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x2d, 0x3e, 0x6a, 0x73, 0x5f, 0x66, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x2d, 0x3e, 0x43, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4e, 0x75, 0x6c, 0x6c, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x7d, 0xa }; -unsigned int _binary_lo_cc_len = 46922; +unsigned int _binary_lo_cc_len = 46927; const char _binary_lo_h_start[] = { 0x23, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0xa, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x76, 0x38, 0x2e, 0x68, 0x3e, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x68, 0x3e, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x61, 0x70, 0x3e, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x76, 0x38, 0x2d, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x61, 0x70, 0x69, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2e, 0x68, 0x3e, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x5f, 0x5f, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x61, 0x63, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, 0x3e, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x61, 0x63, 0x68, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x2e, 0x68, 0x3e, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x5f, 0x78, 0x70, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x72, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x20, 0x5f, 0x5f, 0x78, 0x70, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6c, 0x6f, 0x20, 0x7b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x79, 0x70, 0x65, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x73, 0x20, 0x26, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x38, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x4a, 0x53, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x4a, 0x53, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x76, 0x38, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0xa, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x56, 0x38, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0xa, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x48, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x49, 0x44, 0x20, 0x3d, 0x20, 0x39, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x2c, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x56, 0x38, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x2a, 0x28, 0x2a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x29, 0x28, 0x29, 0x3b, 0xa, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x28, 0x2a, 0x29, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x38, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0xa, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x38, 0x20, 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x69, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x32, 0x2c, 0x20, 0x69, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x33, 0x2c, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x34, 0x2c, 0x20, 0x75, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x35, 0x2c, 0x20, 0x75, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x36, 0x2c, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x37, 0x2c, 0x20, 0x66, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x38, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x39, 0x2c, 0x20, 0x75, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x69, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x31, 0x34, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x31, 0x35, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x31, 0x37, 0x2c, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x38, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x39, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x76, 0x38, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x65, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x45, 0x53, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x4f, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x67, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x46, 0x75, 0x6e, 0x63, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x47, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x74, 0x65, 0x72, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x41, 0x50, 0x49, 0x20, 0x2d, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x73, 0x6f, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0xa, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x72, 0x61, 0x63, 0x65, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x54, 0x72, 0x79, 0x43, 0x61, 0x74, 0x63, 0x68, 0x26, 0x20, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x46, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x4a, 0x53, 0x20, 0x61, 0x70, 0x69, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x6c, 0x6f, 0x22, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x4a, 0x53, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x52, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x52, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x41, 0x72, 0x63, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x4f, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x45, 0x78, 0x69, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x55, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x3b, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x73, 0x74, 0x48, 0x52, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x72, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x73, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x55, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x47, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x66, 0x61, 0x73, 0x74, 0x53, 0x65, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x65, 0x29, 0x3b, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6a, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6a, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x75, 0x66, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x64, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2c, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x29, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x20, 0x63, 0x74, 0x78, 0x29, 0x3b, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x3c, 0x76, 0x38, 0x3a, 0x3a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x6a, 0x73, 0x5f, 0x66, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x28, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x3b, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0xa }; unsigned int _binary_lo_h_len = 8070; -const char _binary_globals_d_ts_start[] = { -0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x60, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x41, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x60, 0x27, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x27, 0x60, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3f, 0x3a, 0x20, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x60, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x60, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x60, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x5b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x3d, 0x27, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x3f, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x73, 0x72, 0x63, 0x60, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x64, 0x65, 0x73, 0x74, 0x60, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x60, 0x60, 0x60, 0x6a, 0x73, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x27, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x60, 0x60, 0x60, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x73, 0x72, 0x63, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x74, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0xa, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x73, 0x72, 0x63, 0x3f, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x74, 0x3f, 0x3a, 0x20, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x3a, 0x20, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x20, 0x4d, 0x61, 0x70, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x43, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x20, 0x4d, 0x61, 0x70, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x20, 0x4d, 0x61, 0x70, 0x3c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x28, 0x29, 0x3a, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x28, 0x29, 0x3a, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3f, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x73, 0x74, 0x72, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x5b, 0x73, 0x74, 0x72, 0x3d, 0x27, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0xa, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x75, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x28, 0x29, 0x3a, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3a, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28, 0x62, 0x75, 0x66, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x74, 0x6f, 0x41, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x62, 0x75, 0x66, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x3f, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x74, 0x66, 0x38, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x74, 0x72, 0x3a, 0x20, 0x73, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x72, 0x61, 0x70, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x66, 0x6e, 0x3a, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x6e, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x3a, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x28, 0x70, 0x61, 0x74, 0x68, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x20, 0x20, 0x6f, 0x73, 0x28, 0x29, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x63, 0x68, 0x28, 0x29, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3b, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x73, 0x72, 0x63, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3a, 0x20, 0x61, 0x6e, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x64, 0x65, 0x73, 0x74, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3a, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x3f, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x70, 0x74, 0x72, 0x28, 0x75, 0x38, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3a, 0x20, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x70, 0x74, 0x72, 0x3a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x66, 0x6e, 0x3a, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x28, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x6f, 0x3a, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x26, 0x20, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x3b, 0xa, 0xa, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x72, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x28, 0x29, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0x20, 0x26, 0x20, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x3b, 0xa +const char _binary_lib_core_api_js_start[] = { +0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x73, 0x65, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x73, 0x64, 0x6f, 0x63, 0x3a, 0x20, 0x60, 0x2f, 0x2a, 0x2a, 0xa, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x29, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x28, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x29, 0x20, 0xa, 0x2a, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x20, 0xa, 0x2a, 0x20, 0x22, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0xa, 0x2a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x28, 0x33, 0x29, 0x2c, 0x20, 0x64, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x28, 0x33, 0x29, 0x2c, 0x20, 0x64, 0x6c, 0x69, 0x6e, 0x66, 0x6f, 0x28, 0x33, 0x29, 0x2c, 0x20, 0xa, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x6c, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0xa, 0x2a, 0xa, 0x2a, 0x20, 0x5c, 0x60, 0x5c, 0x60, 0x5c, 0x60, 0x6a, 0x73, 0xa, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x27, 0x6c, 0x69, 0x62, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x73, 0x6f, 0x27, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x54, 0x4c, 0x44, 0x5f, 0x4e, 0x4f, 0x57, 0x29, 0x29, 0x3b, 0xa, 0x2a, 0x20, 0x5c, 0x60, 0x5c, 0x60, 0x5c, 0x60, 0xa, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x20, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2e, 0xa, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x20, 0x28, 0x69, 0x33, 0x32, 0x29, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x28, 0x52, 0x54, 0x4c, 0x44, 0x5f, 0x4e, 0x4f, 0x57, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x7a, 0x69, 0x6c, 0x79, 0x20, 0x28, 0x52, 0x54, 0x4c, 0x44, 0x5f, 0x4c, 0x41, 0x5a, 0x59, 0x29, 0xa, 0x2a, 0x2f, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x73, 0x69, 0x78, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6e, 0x3a, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x62, 0x73, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x70, 0x75, 0x62, 0x73, 0x2f, 0x39, 0x36, 0x39, 0x39, 0x39, 0x31, 0x39, 0x37, 0x39, 0x39, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x7b, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x27, 0x2c, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x27, 0x20, 0x7d, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x72, 0x69, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x73, 0x65, 0x65, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x63, 0x6e, 0x74, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0x20, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x64, 0x69, 0x72, 0x65, 0x6e, 0x74, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x63, 0x68, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0x20, 0x20, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x6d, 0x61, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2a, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x66, 0x64, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6e, 0x3a, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6d, 0x61, 0x6e, 0x37, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2f, 0x6d, 0x61, 0x6e, 0x2d, 0x70, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x6d, 0x61, 0x6e, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x66, 0x64, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2e, 0x32, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2a, 0x2f, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x75, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x75, 0x70, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x70, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x61, 0x69, 0x74, 0x70, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x76, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x72, 0x75, 0x73, 0x61, 0x67, 0x65, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x72, 0x75, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x72, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x6d, 0x73, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6a, 0x73, 0x64, 0x6f, 0x63, 0x3a, 0x20, 0x60, 0x60, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0xa, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x33, 0x30, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x6e, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x28, 0x2a, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x3b, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x20, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x42, 0x6f, 0x6f, 0x6c, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x66, 0x6e, 0x29, 0x28, 0x26, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x41, 0x73, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x69, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x72, 0x67, 0x30, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x67, 0x65, 0x74, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x64, 0x75, 0x70, 0x28, 0x2a, 0x61, 0x72, 0x67, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x62, 0x6f, 0x6f, 0x6c, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x69, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x2a, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x30, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x60, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0xa, 0x2f, 0x2f, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x65, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x20, 0x69, 0x66, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x42, 0x4c, 0x4b, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x43, 0x48, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x49, 0x46, 0x4f, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x47, 0x52, 0x50, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x49, 0x4e, 0x3a, 0x20, 0x30, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x3a, 0x20, 0x32, 0x2c, 0x20, 0x4f, 0x5f, 0x43, 0x4c, 0x4f, 0x45, 0x58, 0x45, 0x43, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x52, 0x55, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x45, 0x45, 0x4b, 0x5f, 0x53, 0x45, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x45, 0x45, 0x4b, 0x5f, 0x43, 0x55, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x45, 0x45, 0x4b, 0x5f, 0x45, 0x4e, 0x44, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x4f, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x46, 0x5f, 0x4f, 0x4b, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x4d, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x44, 0x49, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x52, 0x45, 0x47, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x7d, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x66, 0x63, 0x6e, 0x74, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x69, 0x72, 0x65, 0x6e, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x6c, 0x66, 0x63, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x6d, 0x6d, 0x61, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x74, 0x64, 0x69, 0x6f, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x77, 0x61, 0x69, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2e, 0x68, 0x27, 0xa, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0xa, 0x2f, 0x2f, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x64, 0x6c, 0x27, 0x5d, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x2e, 0x65, 0x2e, 0x20, 0x27, 0x2d, 0x6c, 0x64, 0x6c, 0x27, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x6e, 0x75, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0xa, 0x2f, 0x2f, 0x20, 0x77, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6d, 0x61, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x5d, 0xa, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x69, 0x66, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x72, 0x63, 0x68, 0x27, 0x73, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x72, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x20, 0x61, 0x72, 0x63, 0x68, 0xa, 0x7d, 0xa, 0xa }; -unsigned int _binary_globals_d_ts_len = 2839; +unsigned int _binary_lib_core_api_js_len = 15730; -const char _binary_jsconfig_json_start[] = { -0x7b, 0xa, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x73, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x45, 0x53, 0x32, 0x30, 0x32, 0x32, 0x22, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x45, 0x53, 0x32, 0x30, 0x32, 0x32, 0x22, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x22, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x22, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x22, 0x2c, 0x20, 0x22, 0x76, 0x38, 0x22, 0x2c, 0x20, 0x22, 0x2e, 0x76, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x22, 0x5d, 0xa, 0x7d +const char _binary_lib_curl_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x46, 0x49, 0x4c, 0x45, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x28, 0x43, 0x55, 0x52, 0x4c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x28, 0x43, 0x55, 0x52, 0x4c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x5f, 0x33, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x28, 0x43, 0x55, 0x52, 0x4c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x28, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x43, 0x55, 0x52, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x5f, 0x65, 0x61, 0x73, 0x79, 0x5f, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x74, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x4f, 0x46, 0x46, 0x5f, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x55, 0x52, 0x4c, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x53, 0x49, 0x5a, 0x45, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x44, 0x41, 0x54, 0x41, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x43, 0x55, 0x52, 0x4c, 0x4f, 0x50, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x4f, 0x4e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x63, 0x75, 0x72, 0x6c, 0x27, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x7d, 0xa }; -unsigned int _binary_jsconfig_json_len = 160; +unsigned int _binary_lib_curl_api_js_len = 1908; -const char _binary_lib_core_api_js_start[] = { -0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x2f, 0x2f, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x73, 0x79, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x73, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x73, 0x65, 0x65, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x7b, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x27, 0x2c, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x27, 0x20, 0x7d, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x72, 0x69, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x73, 0x74, 0x61, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x64, 0x69, 0x72, 0x65, 0x6e, 0x74, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x69, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x44, 0x49, 0x52, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x63, 0x6e, 0x74, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x61, 0x73, 0x6d, 0xa, 0x20, 0x20, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x6d, 0x61, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x6d, 0x69, 0x73, 0x63, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x75, 0x70, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x42, 0x4c, 0x4b, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x43, 0x48, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x46, 0x49, 0x46, 0x4f, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x55, 0x53, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x55, 0x53, 0x52, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x47, 0x52, 0x50, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x47, 0x52, 0x50, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x57, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x52, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x57, 0x52, 0x4f, 0x4e, 0x4c, 0x59, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x5f, 0x54, 0x52, 0x55, 0x4e, 0x43, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x49, 0x4e, 0x3a, 0x20, 0x30, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x3a, 0x20, 0x32, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x66, 0x63, 0x6e, 0x74, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x69, 0x72, 0x65, 0x6e, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x6c, 0x66, 0x63, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x6d, 0x6d, 0x61, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x74, 0x64, 0x69, 0x6f, 0x2e, 0x68, 0x27, 0xa, 0x5d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x33, 0x30, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x6e, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x28, 0x2a, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x3b, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x20, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x42, 0x6f, 0x6f, 0x6c, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x28, 0x28, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x66, 0x6e, 0x29, 0x28, 0x26, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x41, 0x73, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x69, 0x5d, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x72, 0x67, 0x30, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x2d, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x67, 0x65, 0x74, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x64, 0x75, 0x70, 0x28, 0x2a, 0x61, 0x72, 0x67, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x72, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x6c, 0x6f, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x28, 0x62, 0x6f, 0x6f, 0x6c, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5b, 0x69, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x2a, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x63, 0x61, 0x6c, 0x6c, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x2a, 0x3e, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x30, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x60, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x63, 0x6f, 0x72, 0x65, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x64, 0x6c, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7d, 0xa, 0xa +const char _binary_lib_encode_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x68, 0x65, 0x78, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x68, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x32, 0x35, 0x36, 0x5d, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x7b, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x32, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x32, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x32, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x36, 0x32, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x36, 0x32, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x36, 0x33, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x35, 0x32, 0x2c, 0x20, 0x35, 0x33, 0x2c, 0x20, 0x35, 0x34, 0x2c, 0x20, 0x35, 0x35, 0x2c, 0x20, 0x35, 0x36, 0x2c, 0x20, 0x35, 0x37, 0x2c, 0x20, 0x35, 0x38, 0x2c, 0x20, 0x35, 0x39, 0x2c, 0x20, 0x36, 0x30, 0x2c, 0x20, 0x36, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x31, 0x2c, 0x20, 0x20, 0x32, 0x2c, 0x20, 0x20, 0x33, 0x2c, 0x20, 0x20, 0x34, 0x2c, 0x20, 0x20, 0x35, 0x2c, 0x20, 0x20, 0x36, 0x2c, 0x20, 0x20, 0x37, 0x2c, 0x20, 0x20, 0x38, 0x2c, 0x20, 0x20, 0x39, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x34, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x2c, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x31, 0x37, 0x2c, 0x20, 0x31, 0x38, 0x2c, 0x20, 0x31, 0x39, 0x2c, 0x20, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x31, 0x2c, 0x20, 0x32, 0x32, 0x2c, 0x20, 0x32, 0x33, 0x2c, 0x20, 0x32, 0x34, 0x2c, 0x20, 0x32, 0x35, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x36, 0x33, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x32, 0x36, 0x2c, 0x20, 0x32, 0x37, 0x2c, 0x20, 0x32, 0x38, 0x2c, 0x20, 0x32, 0x39, 0x2c, 0x20, 0x33, 0x30, 0x2c, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x2c, 0x20, 0x33, 0x33, 0x2c, 0x20, 0x33, 0x34, 0x2c, 0x20, 0x33, 0x35, 0x2c, 0x20, 0x33, 0x36, 0x2c, 0x20, 0x33, 0x37, 0x2c, 0x20, 0x33, 0x38, 0x2c, 0x20, 0x33, 0x39, 0x2c, 0x20, 0x34, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x34, 0x31, 0x2c, 0x20, 0x34, 0x32, 0x2c, 0x20, 0x34, 0x33, 0x2c, 0x20, 0x34, 0x34, 0x2c, 0x20, 0x34, 0x35, 0x2c, 0x20, 0x34, 0x36, 0x2c, 0x20, 0x34, 0x37, 0x2c, 0x20, 0x34, 0x38, 0x2c, 0x20, 0x34, 0x39, 0x2c, 0x20, 0x35, 0x30, 0x2c, 0x20, 0x35, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x7d, 0x3b, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x75, 0x6e, 0x68, 0x65, 0x78, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x32, 0x35, 0x36, 0x5d, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x7b, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x20, 0x20, 0x31, 0x2c, 0x20, 0x20, 0x32, 0x2c, 0x20, 0x20, 0x33, 0x2c, 0x20, 0x20, 0x34, 0x2c, 0x20, 0x20, 0x35, 0x2c, 0x20, 0x20, 0x36, 0x2c, 0x20, 0x20, 0x37, 0x2c, 0x20, 0x20, 0x38, 0x2c, 0x20, 0x20, 0x39, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x34, 0x2c, 0x20, 0x31, 0x35, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x34, 0x2c, 0x20, 0x31, 0x35, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0xa, 0x20, 0x20, 0x7d, 0x3b, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x68, 0x65, 0x78, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x68, 0x65, 0x78, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x78, 0x5d, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x68, 0x65, 0x78, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x6c, 0x65, 0x6e, 0x20, 0x2a, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x6b, 0x20, 0x3c, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x3b, 0x20, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x68, 0x65, 0x78, 0x5b, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x22, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x78, 0x5b, 0x76, 0x61, 0x6c, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x78, 0x5b, 0x76, 0x61, 0x6c, 0x20, 0x26, 0x20, 0x31, 0x35, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x68, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x62, 0x75, 0x66, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x72, 0x63, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x69, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x26, 0x26, 0x20, 0x69, 0x20, 0x2a, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x3c, 0x20, 0x73, 0x72, 0x63, 0x4c, 0x65, 0x6e, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x68, 0x65, 0x78, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2a, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x68, 0x65, 0x78, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2a, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x7e, 0x61, 0x20, 0x7c, 0x7c, 0x20, 0x21, 0x7e, 0x62, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x62, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x78, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x78, 0x5d, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x78, 0x70, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x32, 0x20, 0x2d, 0x20, 0x28, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x20, 0x25, 0x20, 0x33, 0x29, 0x29, 0x20, 0x2f, 0x20, 0x33, 0x20, 0x2a, 0x20, 0x34, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x44, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x2e, 0x20, 0x20, 0x43, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x31, 0x2d, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x2e, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x25, 0x20, 0x34, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2f, 0x20, 0x34, 0x29, 0x20, 0x2a, 0x20, 0x33, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x3a, 0x20, 0x31, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x70, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20, 0x32, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x28, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x68, 0x69, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6c, 0x6f, 0x3b, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x56, 0x28, 0x65, 0x78, 0x70, 0x72, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x3b, 0x3b, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x2a, 0x69, 0x5d, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x63, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x6f, 0x20, 0x3c, 0x20, 0x36, 0x34, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x2a, 0x69, 0x20, 0x3e, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x6f, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x70, 0x72, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x2a, 0x69, 0x20, 0x3e, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x2a, 0x6b, 0x20, 0x3e, 0x3d, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0xa, 0x20, 0x20, 0x68, 0x69, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x28, 0x2f, 0x2a, 0x20, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x2a, 0x2f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x28, 0x64, 0x73, 0x74, 0x5b, 0x28, 0x2a, 0x6b, 0x29, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x46, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6c, 0x6f, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x28, 0x64, 0x73, 0x74, 0x5b, 0x28, 0x2a, 0x6b, 0x29, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x46, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6c, 0x6f, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x43, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x56, 0x28, 0x64, 0x73, 0x74, 0x5b, 0x28, 0x2a, 0x6b, 0x29, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6c, 0x6f, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x46, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x30, 0x29, 0x29, 0x3b, 0xa, 0x23, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x56, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3f, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3a, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x20, 0x3d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x2f, 0x20, 0x33, 0x20, 0x2a, 0x20, 0x33, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x20, 0x2f, 0x20, 0x34, 0x20, 0x2a, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x20, 0x26, 0x26, 0x20, 0x6b, 0x20, 0x3c, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x76, 0x20, 0x3d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x20, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x20, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x20, 0x7c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x28, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20, 0x4d, 0x53, 0x42, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x28, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x26, 0x69, 0x2c, 0x20, 0x26, 0x6b, 0x29, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x28, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x69, 0x29, 0x20, 0x2f, 0x20, 0x34, 0x20, 0x2a, 0x20, 0x34, 0x3b, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x2e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x32, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x43, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x30, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x33, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x32, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x30, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x30, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x46, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x20, 0x32, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x43, 0x30, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x20, 0x3e, 0x3e, 0x20, 0x20, 0x30, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x46, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x33, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x20, 0x26, 0x26, 0x20, 0x6b, 0x20, 0x3c, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x6c, 0x6f, 0x77, 0x28, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x26, 0x69, 0x2c, 0x20, 0x26, 0x6b, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6b, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x28, 0x64, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x6c, 0x65, 0x6e, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x64, 0x73, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x57, 0x65, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x77, 0x65, 0x27, 0x6c, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2c, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x27, 0x73, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0xa, 0x20, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x73, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6e, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2b, 0x2f, 0x22, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x6c, 0x65, 0x6e, 0x20, 0x2f, 0x20, 0x33, 0x20, 0x2a, 0x20, 0x33, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x62, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x28, 0x28, 0x62, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x63, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x63, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x5d, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x33, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x73, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x28, 0x61, 0x20, 0x26, 0x20, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x32, 0x3a, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x62, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x28, 0x62, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x5b, 0x6b, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x27, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7d, 0xa }; -unsigned int _binary_lib_core_api_js_len = 10823; +unsigned int _binary_lib_encode_api_js_len = 8957; +const char _binary_lib_epoll_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x31, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x74, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x61, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x64, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x65, 0x70, 0x6f, 0x6c, 0x6c, 0x27, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_epoll_api_js_len = 580; + +const char _binary_lib_inflate_api_js_start[] = { +0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0xa, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x28, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0x2c, 0x20, 0x43, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x41, 0x52, 0x47, 0x53, 0x20, 0x3d, 0x20, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x28, 0x43, 0x41, 0x52, 0x47, 0x53, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x41, 0x52, 0x47, 0x53, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x31, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x4f, 0x33, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x66, 0x6f, 0x6d, 0x69, 0x74, 0x2d, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x27, 0x5d, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x27, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_inflate_api_js_len = 634; + +const char _binary_lib_inflate_em_inflate_c_start[] = { +0x2f, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x20, 0x2d, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x2d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x67, 0x7a, 0x69, 0x70, 0x2f, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x29, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x39, 0x20, 0x45, 0x6d, 0x6d, 0x61, 0x6e, 0x75, 0x65, 0x6c, 0x20, 0x4d, 0x61, 0x72, 0x74, 0x79, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x63, 0x72, 0x63, 0x33, 0x32, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x53, 0x74, 0x65, 0x70, 0x68, 0x65, 0x6e, 0x20, 0x42, 0x72, 0x75, 0x6d, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x2d, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x27, 0x61, 0x73, 0x2d, 0x69, 0x73, 0x27, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x62, 0x65, 0x20, 0x68, 0x65, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x2c, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x66, 0x72, 0x65, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x31, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x3b, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x70, 0x70, 0x72, 0x65, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x33, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x68, 0x22, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x2d, 0x20, 0x4c, 0x53, 0x42, 0x20, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x4d, 0x5f, 0x58, 0x36, 0x34, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x61, 0x61, 0x72, 0x63, 0x68, 0x36, 0x34, 0x5f, 0x5f, 0x29, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x45, 0x4d, 0x5f, 0x4c, 0x53, 0x42, 0x5f, 0x42, 0x49, 0x54, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x36, 0x34, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46, 0x54, 0x45, 0x52, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x4d, 0x5f, 0x58, 0x36, 0x34, 0x29, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x4c, 0x53, 0x42, 0x5f, 0x42, 0x49, 0x54, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x36, 0x34, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46, 0x54, 0x45, 0x52, 0xd, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x42, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xd, 0xa, 0x7d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x20, 0x31, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x33, 0x32, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x33, 0x32, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x4c, 0x53, 0x42, 0x5f, 0x42, 0x49, 0x54, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x36, 0x34, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46, 0x54, 0x45, 0x52, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x33, 0x32, 0x20, 0x26, 0x26, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x20, 0x3c, 0x3d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x4d, 0x5f, 0x58, 0x36, 0x34, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x5f, 0x5f, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x75, 0x6e, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x2a, 0x29, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x33, 0x32, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4d, 0x5f, 0x4c, 0x53, 0x42, 0x5f, 0x42, 0x49, 0x54, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x36, 0x34, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x48, 0x49, 0x46, 0x54, 0x45, 0x52, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x69, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x28, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x2e, 0x31, 0x36, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x26, 0x20, 0x28, 0x28, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3e, 0x3e, 0x3d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2d, 0x3d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x50, 0x65, 0x65, 0x6b, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x31, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x28, 0x6c, 0x6f, 0x6f, 0x6b, 0x61, 0x68, 0x65, 0x61, 0x64, 0x29, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x6b, 0x5f, 0x31, 0x36, 0x62, 0x69, 0x74, 0x73, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x29, 0x28, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x29, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x69, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x6b, 0x5f, 0x31, 0x36, 0x62, 0x69, 0x74, 0x73, 0x28, 0x29, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3e, 0x3e, 0x3d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2d, 0x3d, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x38, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x77, 0x69, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x38, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2d, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x2d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x42, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x44, 0x65, 0x63, 0x53, 0x68, 0x69, 0x66, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x48, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x4c, 0x53, 0x42, 0x20, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x20, 0x32, 0x38, 0x38, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x31, 0x39, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x6b, 0x69, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x65, 0x70, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x20, 0x20, 0x20, 0x31, 0x30, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x48, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x5b, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x31, 0x36, 0x5d, 0x3b, 0x20, 0x2f, 0x2a, 0x20, 0x4f, 0x6e, 0x65, 0x20, 0x70, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x5b, 0x31, 0x36, 0x5d, 0x3b, 0xd, 0xa, 0x7d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x2a, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x5b, 0x31, 0x36, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x5d, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x36, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x5b, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x5d, 0x5d, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x2c, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x5d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x5b, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x5d, 0x5d, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x69, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x2a, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x6e, 0x52, 0x65, 0x76, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x2b, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x28, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x29, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x36, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x5b, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x2d, 0x3e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x20, 0x3e, 0x3d, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3e, 0x3d, 0x20, 0x28, 0x31, 0x55, 0x20, 0x3c, 0x3c, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2b, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x28, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x29, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x3d, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x47, 0x65, 0x74, 0x20, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x28, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x62, 0x79, 0x20, 0x45, 0x72, 0x69, 0x63, 0x20, 0x42, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x29, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x35, 0x35, 0x35, 0x35, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x61, 0x61, 0x61, 0x61, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x33, 0x33, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x63, 0x63, 0x63, 0x63, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x66, 0x30, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x30, 0x66, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x66, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x30, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x31, 0x36, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x5b, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x2d, 0x2d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x6b, 0x5f, 0x31, 0x36, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x41, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x5b, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x26, 0x20, 0x28, 0x28, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x41, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x46, 0x61, 0x73, 0x74, 0x20, 0x70, 0x61, 0x74, 0x68, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x28, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x2d, 0x64, 0x6f, 0x77, 0x6e, 0x29, 0x20, 0x4d, 0x53, 0x42, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x41, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x46, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6d, 0x41, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x4e, 0x46, 0x41, 0x53, 0x54, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x42, 0x49, 0x54, 0x53, 0x2c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x20, 0x42, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x6e, 0x52, 0x65, 0x76, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x2b, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x26, 0x20, 0x31, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x5d, 0x20, 0x2b, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x70, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x52, 0x65, 0x76, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x3e, 0x3e, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x20, 0x62, 0x69, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x61, 0x64, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x31, 0x37, 0x2c, 0x20, 0x31, 0x38, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x38, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x39, 0x2c, 0x20, 0x36, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x31, 0x34, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x31, 0x35, 0x20, 0x7d, 0x3b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x61, 0x64, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x3e, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x33, 0x20, 0x2b, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x37, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x33, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x33, 0x20, 0x2b, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x38, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x37, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x31, 0x20, 0x2b, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x20, 0x26, 0x26, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x52, 0x75, 0x6e, 0x4c, 0x65, 0x6e, 0x2d, 0x2d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x20, 0x3c, 0x20, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x69, 0x2b, 0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x30, 0x5d, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x4e, 0x65, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x30, 0x5d, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x28, 0x28, 0x7e, 0x6e, 0x4e, 0x65, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x6f, 0x6f, 0x6d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2d, 0x3e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2b, 0x3d, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x42, 0x49, 0x54, 0x53, 0x20, 0x33, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x32, 0x38, 0x38, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x45, 0x4f, 0x44, 0x4d, 0x41, 0x52, 0x4b, 0x45, 0x52, 0x53, 0x59, 0x4d, 0x20, 0x32, 0x35, 0x36, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x32, 0x35, 0x37, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x32, 0x39, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x33, 0x32, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x20, 0x33, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x5f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x5f, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x62, 0x69, 0x74, 0x73, 0x29, 0x20, 0x28, 0x28, 0x5f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x5f, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x62, 0x69, 0x74, 0x73, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x29, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x5f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x5f, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x62, 0x69, 0x74, 0x73, 0x29, 0x20, 0x28, 0x28, 0x5f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x5f, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x62, 0x69, 0x74, 0x73, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x29, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6c, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5b, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x33, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x34, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x35, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x36, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x37, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x38, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x34, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x34, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x38, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x33, 0x32, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x34, 0x30, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x34, 0x38, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x35, 0x36, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x36, 0x34, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x38, 0x30, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x39, 0x36, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x31, 0x32, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x32, 0x38, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x36, 0x30, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x31, 0x39, 0x32, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x32, 0x34, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x4d, 0x49, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x2b, 0x20, 0x32, 0x35, 0x35, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0xd, 0xa, 0x7d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5b, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x32, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x33, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x34, 0x2c, 0x20, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x35, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x37, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x39, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x33, 0x2c, 0x20, 0x32, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x37, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x32, 0x35, 0x2c, 0x20, 0x33, 0x29, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x33, 0x33, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x34, 0x39, 0x2c, 0x20, 0x34, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x36, 0x35, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x39, 0x37, 0x2c, 0x20, 0x35, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x32, 0x39, 0x2c, 0x20, 0x36, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x39, 0x33, 0x2c, 0x20, 0x36, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x32, 0x35, 0x37, 0x2c, 0x20, 0x37, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x33, 0x38, 0x35, 0x2c, 0x20, 0x37, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x35, 0x31, 0x33, 0x2c, 0x20, 0x38, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x37, 0x36, 0x39, 0x2c, 0x20, 0x38, 0x29, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x30, 0x32, 0x35, 0x2c, 0x20, 0x39, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x35, 0x33, 0x37, 0x2c, 0x20, 0x39, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x32, 0x30, 0x34, 0x39, 0x2c, 0x20, 0x31, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x33, 0x30, 0x37, 0x33, 0x2c, 0x20, 0x31, 0x30, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x34, 0x30, 0x39, 0x37, 0x2c, 0x20, 0x31, 0x31, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x36, 0x31, 0x34, 0x35, 0x2c, 0x20, 0x31, 0x31, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x38, 0x31, 0x39, 0x33, 0x2c, 0x20, 0x31, 0x32, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x32, 0x32, 0x38, 0x39, 0x2c, 0x20, 0x31, 0x32, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x31, 0x36, 0x33, 0x38, 0x35, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x2c, 0x20, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x28, 0x32, 0x34, 0x35, 0x37, 0x37, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x2c, 0xd, 0xa, 0x7d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x28, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x2b, 0x20, 0x72, 0x6f, 0x6f, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x2a, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2a, 0x20, 0x32, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2a, 0x20, 0x32, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5b, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2b, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2a, 0x20, 0x32, 0x5d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x35, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x35, 0x37, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3e, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x35, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3e, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x3e, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x28, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x42, 0x49, 0x54, 0x53, 0x20, 0x2f, 0x2a, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2f, 0x2a, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x55, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x28, 0x26, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2b, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x20, 0x2f, 0x2a, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2b, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x20, 0x2f, 0x2a, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x2c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x53, 0x79, 0x6d, 0x73, 0x2c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x73, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x5d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x46, 0x69, 0x78, 0x65, 0x64, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x34, 0x34, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x32, 0x35, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x39, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x32, 0x38, 0x30, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x37, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x35, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x2c, 0x20, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x62, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x76, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x3c, 0x20, 0x4e, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5b, 0x6e, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x62, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x61, 0x76, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x20, 0x3e, 0x3d, 0x20, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x26, 0x26, 0x20, 0x6e, 0x20, 0x3c, 0x20, 0x4e, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x6e, 0x20, 0x2d, 0x20, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x4e, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x4c, 0x45, 0x4e, 0x53, 0x59, 0x4d, 0x53, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6c, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x32, 0x38, 0x36, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x32, 0x38, 0x37, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x72, 0x65, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x73, 0x20, 0x2b, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x26, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x69, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x46, 0x61, 0x73, 0x74, 0x45, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x64, 0x20, 0x2d, 0x20, 0x31, 0x35, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x31, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x33, 0x32, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x26, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3c, 0x20, 0x32, 0x35, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x30, 0x2e, 0x2e, 0x32, 0x35, 0x35, 0x3a, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x2e, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3c, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x64, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x20, 0x3d, 0x20, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x45, 0x4f, 0x44, 0x4d, 0x41, 0x52, 0x4b, 0x45, 0x52, 0x53, 0x59, 0x4d, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4f, 0x44, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x32, 0x35, 0x36, 0x2e, 0x2e, 0x32, 0x38, 0x34, 0x3a, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x35, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x6e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x26, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x65, 0x76, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x42, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x28, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x35, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, 0x66, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x53, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x53, 0x72, 0x63, 0x20, 0x3e, 0x3d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x36, 0x20, 0x26, 0x26, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x3c, 0x3d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x46, 0x61, 0x73, 0x74, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x70, 0x53, 0x72, 0x63, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x64, 0x44, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x28, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x72, 0x63, 0x2c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x72, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x73, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x73, 0x74, 0x20, 0x3c, 0x20, 0x70, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x64, 0x44, 0x73, 0x74, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x64, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x6e, 0x2d, 0x2d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x20, 0x3d, 0x20, 0x2a, 0x70, 0x53, 0x72, 0x63, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x28, 0x70, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x28, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x29, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0xd, 0xa, 0x20, 0x20, 0x42, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x2f, 0x7a, 0x6c, 0x69, 0x62, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x2e, 0x63, 0xd, 0xa, 0x20, 0xd, 0xa, 0x20, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x31, 0x39, 0x39, 0x35, 0x2d, 0x32, 0x30, 0x31, 0x37, 0x20, 0x4a, 0x65, 0x61, 0x6e, 0x2d, 0x6c, 0x6f, 0x75, 0x70, 0x20, 0x47, 0x61, 0x69, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0xd, 0xa, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x27, 0x61, 0x73, 0x2d, 0x69, 0x73, 0x27, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x62, 0x65, 0x20, 0x68, 0x65, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0xd, 0xa, 0x20, 0x20, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x74, 0xd, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0xd, 0xa, 0x20, 0x20, 0x31, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x3b, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x70, 0x70, 0x72, 0x65, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x20, 0x20, 0x32, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x20, 0x33, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0xd, 0xa, 0x20, 0x20, 0x4a, 0x65, 0x61, 0x6e, 0x2d, 0x6c, 0x6f, 0x75, 0x70, 0x20, 0x47, 0x61, 0x69, 0x6c, 0x6c, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0xd, 0xa, 0x20, 0x20, 0x6a, 0x6c, 0x6f, 0x75, 0x70, 0x40, 0x67, 0x7a, 0x69, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x40, 0x61, 0x6c, 0x75, 0x6d, 0x6e, 0x69, 0x2e, 0x63, 0x61, 0x6c, 0x74, 0x65, 0x63, 0x68, 0x2e, 0x65, 0x64, 0x75, 0xd, 0xa, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x52, 0x46, 0x43, 0x73, 0x20, 0x28, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x66, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x20, 0x31, 0x39, 0x35, 0x30, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x39, 0x35, 0x32, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2f, 0x72, 0x66, 0x63, 0x31, 0x39, 0x35, 0x30, 0xd, 0xa, 0x20, 0x20, 0x28, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x29, 0x2c, 0x20, 0x72, 0x66, 0x63, 0x31, 0x39, 0x35, 0x31, 0x20, 0x28, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x66, 0x63, 0x31, 0x39, 0x35, 0x32, 0x20, 0x28, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x29, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x42, 0x41, 0x53, 0x45, 0x20, 0x36, 0x35, 0x35, 0x32, 0x31, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x36, 0x35, 0x35, 0x33, 0x36, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x20, 0x35, 0x35, 0x35, 0x32, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x4f, 0x31, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x20, 0x20, 0x7b, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66, 0x29, 0x5b, 0x69, 0x5d, 0x3b, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0x7d, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x4f, 0x32, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x20, 0x20, 0x44, 0x4f, 0x31, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x3b, 0x20, 0x44, 0x4f, 0x31, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x2b, 0x31, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x4f, 0x34, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x20, 0x20, 0x44, 0x4f, 0x32, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x3b, 0x20, 0x44, 0x4f, 0x32, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x2b, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x4f, 0x38, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x20, 0x20, 0x44, 0x4f, 0x34, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x29, 0x3b, 0x20, 0x44, 0x4f, 0x34, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x69, 0x2b, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x4f, 0x31, 0x36, 0x28, 0x62, 0x75, 0x66, 0x29, 0x20, 0x20, 0x20, 0x44, 0x4f, 0x38, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x30, 0x29, 0x3b, 0x20, 0x44, 0x4f, 0x38, 0x28, 0x62, 0x75, 0x66, 0x2c, 0x38, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x28, 0x61, 0x29, 0x20, 0x61, 0x20, 0x25, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0xd, 0xa, 0x23, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x32, 0x38, 0x28, 0x61, 0x29, 0x20, 0x61, 0x20, 0x25, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0xd, 0xa, 0x23, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x36, 0x33, 0x28, 0x61, 0x29, 0x20, 0x61, 0x20, 0x25, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0xd, 0xa, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x5f, 0x7a, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x62, 0x75, 0x66, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6e, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0x2d, 0x33, 0x32, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x6d, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x73, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x69, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x5b, 0x30, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x3e, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2d, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x3e, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x2d, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x7c, 0x20, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x41, 0x64, 0x6c, 0x65, 0x72, 0x2d, 0x33, 0x32, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x28, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x29, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x4c, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x69, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x77, 0x68, 0x61, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x2d, 0x2d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2b, 0x3d, 0x20, 0x2a, 0x62, 0x75, 0x66, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x3e, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2d, 0x3d, 0x20, 0x42, 0x41, 0x53, 0x45, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4f, 0x44, 0x32, 0x38, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x42, 0x41, 0x53, 0x45, 0x27, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x7c, 0x20, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x64, 0x6f, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x3d, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x3d, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x20, 0x2f, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x31, 0x36, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x4f, 0x31, 0x36, 0x28, 0x62, 0x75, 0x66, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x31, 0x36, 0x20, 0x73, 0x75, 0x6d, 0x73, 0x20, 0x75, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x2d, 0x2d, 0x6e, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4f, 0x44, 0x28, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4f, 0x44, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x64, 0x6f, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x4e, 0x4d, 0x41, 0x58, 0x2c, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x29, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x73, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x4f, 0x31, 0x36, 0x28, 0x62, 0x75, 0x66, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x2d, 0x2d, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x2b, 0x3d, 0x20, 0x2a, 0x62, 0x75, 0x66, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x2b, 0x3d, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4f, 0x44, 0x28, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4f, 0x44, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x75, 0x6d, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x20, 0x7c, 0x20, 0x28, 0x73, 0x75, 0x6d, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x63, 0x72, 0x63, 0x33, 0x32, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x42, 0x79, 0x20, 0x53, 0x74, 0x65, 0x70, 0x68, 0x65, 0x6e, 0x20, 0x42, 0x72, 0x75, 0x6d, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x68, 0x61, 0x6e, 0x2d, 0x62, 0x72, 0x75, 0x6d, 0x6d, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x55, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x35, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x68, 0x61, 0x6e, 0x2d, 0x62, 0x72, 0x75, 0x6d, 0x6d, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x75, 0x62, 0x2d, 0x70, 0x61, 0x67, 0x65, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x3a, 0xd, 0xa, 0xd, 0xa, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x27, 0x61, 0x73, 0x2d, 0x69, 0x73, 0x27, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x20, 0x68, 0x65, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x74, 0x20, 0x66, 0x72, 0x65, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0xd, 0xa, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x3b, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, 0x65, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x34, 0x5d, 0x5b, 0x32, 0x35, 0x36, 0x5d, 0x20, 0x3d, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x30, 0x78, 0x37, 0x37, 0x30, 0x37, 0x33, 0x30, 0x39, 0x36, 0x2c, 0x30, 0x78, 0x45, 0x45, 0x30, 0x45, 0x36, 0x31, 0x32, 0x43, 0x2c, 0x30, 0x78, 0x39, 0x39, 0x30, 0x39, 0x35, 0x31, 0x42, 0x41, 0x2c, 0x30, 0x78, 0x30, 0x37, 0x36, 0x44, 0x43, 0x34, 0x31, 0x39, 0x2c, 0x30, 0x78, 0x37, 0x30, 0x36, 0x41, 0x46, 0x34, 0x38, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x39, 0x36, 0x33, 0x41, 0x35, 0x33, 0x35, 0x2c, 0x30, 0x78, 0x39, 0x45, 0x36, 0x34, 0x39, 0x35, 0x41, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x45, 0x44, 0x42, 0x38, 0x38, 0x33, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x39, 0x44, 0x43, 0x42, 0x38, 0x41, 0x34, 0x2c, 0x30, 0x78, 0x45, 0x30, 0x44, 0x35, 0x45, 0x39, 0x31, 0x45, 0x2c, 0x30, 0x78, 0x39, 0x37, 0x44, 0x32, 0x44, 0x39, 0x38, 0x38, 0x2c, 0x30, 0x78, 0x30, 0x39, 0x42, 0x36, 0x34, 0x43, 0x32, 0x42, 0x2c, 0x30, 0x78, 0x37, 0x45, 0x42, 0x31, 0x37, 0x43, 0x42, 0x44, 0x2c, 0x30, 0x78, 0x45, 0x37, 0x42, 0x38, 0x32, 0x44, 0x30, 0x37, 0x2c, 0x30, 0x78, 0x39, 0x30, 0x42, 0x46, 0x31, 0x44, 0x39, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x44, 0x42, 0x37, 0x31, 0x30, 0x36, 0x34, 0x2c, 0x30, 0x78, 0x36, 0x41, 0x42, 0x30, 0x32, 0x30, 0x46, 0x32, 0x2c, 0x30, 0x78, 0x46, 0x33, 0x42, 0x39, 0x37, 0x31, 0x34, 0x38, 0x2c, 0x30, 0x78, 0x38, 0x34, 0x42, 0x45, 0x34, 0x31, 0x44, 0x45, 0x2c, 0x30, 0x78, 0x31, 0x41, 0x44, 0x41, 0x44, 0x34, 0x37, 0x44, 0x2c, 0x30, 0x78, 0x36, 0x44, 0x44, 0x44, 0x45, 0x34, 0x45, 0x42, 0x2c, 0x30, 0x78, 0x46, 0x34, 0x44, 0x34, 0x42, 0x35, 0x35, 0x31, 0x2c, 0x30, 0x78, 0x38, 0x33, 0x44, 0x33, 0x38, 0x35, 0x43, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x33, 0x36, 0x43, 0x39, 0x38, 0x35, 0x36, 0x2c, 0x30, 0x78, 0x36, 0x34, 0x36, 0x42, 0x41, 0x38, 0x43, 0x30, 0x2c, 0x30, 0x78, 0x46, 0x44, 0x36, 0x32, 0x46, 0x39, 0x37, 0x41, 0x2c, 0x30, 0x78, 0x38, 0x41, 0x36, 0x35, 0x43, 0x39, 0x45, 0x43, 0x2c, 0x30, 0x78, 0x31, 0x34, 0x30, 0x31, 0x35, 0x43, 0x34, 0x46, 0x2c, 0x30, 0x78, 0x36, 0x33, 0x30, 0x36, 0x36, 0x43, 0x44, 0x39, 0x2c, 0x30, 0x78, 0x46, 0x41, 0x30, 0x46, 0x33, 0x44, 0x36, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x44, 0x30, 0x38, 0x30, 0x44, 0x46, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x42, 0x36, 0x45, 0x32, 0x30, 0x43, 0x38, 0x2c, 0x30, 0x78, 0x34, 0x43, 0x36, 0x39, 0x31, 0x30, 0x35, 0x45, 0x2c, 0x30, 0x78, 0x44, 0x35, 0x36, 0x30, 0x34, 0x31, 0x45, 0x34, 0x2c, 0x30, 0x78, 0x41, 0x32, 0x36, 0x37, 0x37, 0x31, 0x37, 0x32, 0x2c, 0x30, 0x78, 0x33, 0x43, 0x30, 0x33, 0x45, 0x34, 0x44, 0x31, 0x2c, 0x30, 0x78, 0x34, 0x42, 0x30, 0x34, 0x44, 0x34, 0x34, 0x37, 0x2c, 0x30, 0x78, 0x44, 0x32, 0x30, 0x44, 0x38, 0x35, 0x46, 0x44, 0x2c, 0x30, 0x78, 0x41, 0x35, 0x30, 0x41, 0x42, 0x35, 0x36, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x35, 0x42, 0x35, 0x41, 0x38, 0x46, 0x41, 0x2c, 0x30, 0x78, 0x34, 0x32, 0x42, 0x32, 0x39, 0x38, 0x36, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x42, 0x42, 0x42, 0x43, 0x39, 0x44, 0x36, 0x2c, 0x30, 0x78, 0x41, 0x43, 0x42, 0x43, 0x46, 0x39, 0x34, 0x30, 0x2c, 0x30, 0x78, 0x33, 0x32, 0x44, 0x38, 0x36, 0x43, 0x45, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x35, 0x44, 0x46, 0x35, 0x43, 0x37, 0x35, 0x2c, 0x30, 0x78, 0x44, 0x43, 0x44, 0x36, 0x30, 0x44, 0x43, 0x46, 0x2c, 0x30, 0x78, 0x41, 0x42, 0x44, 0x31, 0x33, 0x44, 0x35, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x36, 0x44, 0x39, 0x33, 0x30, 0x41, 0x43, 0x2c, 0x30, 0x78, 0x35, 0x31, 0x44, 0x45, 0x30, 0x30, 0x33, 0x41, 0x2c, 0x30, 0x78, 0x43, 0x38, 0x44, 0x37, 0x35, 0x31, 0x38, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x46, 0x44, 0x30, 0x36, 0x31, 0x31, 0x36, 0x2c, 0x30, 0x78, 0x32, 0x31, 0x42, 0x34, 0x46, 0x34, 0x42, 0x35, 0x2c, 0x30, 0x78, 0x35, 0x36, 0x42, 0x33, 0x43, 0x34, 0x32, 0x33, 0x2c, 0x30, 0x78, 0x43, 0x46, 0x42, 0x41, 0x39, 0x35, 0x39, 0x39, 0x2c, 0x30, 0x78, 0x42, 0x38, 0x42, 0x44, 0x41, 0x35, 0x30, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x38, 0x30, 0x32, 0x42, 0x38, 0x39, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x46, 0x30, 0x35, 0x38, 0x38, 0x30, 0x38, 0x2c, 0x30, 0x78, 0x43, 0x36, 0x30, 0x43, 0x44, 0x39, 0x42, 0x32, 0x2c, 0x30, 0x78, 0x42, 0x31, 0x30, 0x42, 0x45, 0x39, 0x32, 0x34, 0x2c, 0x30, 0x78, 0x32, 0x46, 0x36, 0x46, 0x37, 0x43, 0x38, 0x37, 0x2c, 0x30, 0x78, 0x35, 0x38, 0x36, 0x38, 0x34, 0x43, 0x31, 0x31, 0x2c, 0x30, 0x78, 0x43, 0x31, 0x36, 0x31, 0x31, 0x44, 0x41, 0x42, 0x2c, 0x30, 0x78, 0x42, 0x36, 0x36, 0x36, 0x32, 0x44, 0x33, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x36, 0x44, 0x43, 0x34, 0x31, 0x39, 0x30, 0x2c, 0x30, 0x78, 0x30, 0x31, 0x44, 0x42, 0x37, 0x31, 0x30, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x38, 0x44, 0x32, 0x32, 0x30, 0x42, 0x43, 0x2c, 0x30, 0x78, 0x45, 0x46, 0x44, 0x35, 0x31, 0x30, 0x32, 0x41, 0x2c, 0x30, 0x78, 0x37, 0x31, 0x42, 0x31, 0x38, 0x35, 0x38, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x36, 0x42, 0x36, 0x42, 0x35, 0x31, 0x46, 0x2c, 0x30, 0x78, 0x39, 0x46, 0x42, 0x46, 0x45, 0x34, 0x41, 0x35, 0x2c, 0x30, 0x78, 0x45, 0x38, 0x42, 0x38, 0x44, 0x34, 0x33, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x37, 0x43, 0x39, 0x41, 0x32, 0x2c, 0x30, 0x78, 0x30, 0x46, 0x30, 0x30, 0x46, 0x39, 0x33, 0x34, 0x2c, 0x30, 0x78, 0x39, 0x36, 0x30, 0x39, 0x41, 0x38, 0x38, 0x45, 0x2c, 0x30, 0x78, 0x45, 0x31, 0x30, 0x45, 0x39, 0x38, 0x31, 0x38, 0x2c, 0x30, 0x78, 0x37, 0x46, 0x36, 0x41, 0x30, 0x44, 0x42, 0x42, 0x2c, 0x30, 0x78, 0x30, 0x38, 0x36, 0x44, 0x33, 0x44, 0x32, 0x44, 0x2c, 0x30, 0x78, 0x39, 0x31, 0x36, 0x34, 0x36, 0x43, 0x39, 0x37, 0x2c, 0x30, 0x78, 0x45, 0x36, 0x36, 0x33, 0x35, 0x43, 0x30, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x42, 0x36, 0x42, 0x35, 0x31, 0x46, 0x34, 0x2c, 0x30, 0x78, 0x31, 0x43, 0x36, 0x43, 0x36, 0x31, 0x36, 0x32, 0x2c, 0x30, 0x78, 0x38, 0x35, 0x36, 0x35, 0x33, 0x30, 0x44, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x32, 0x36, 0x32, 0x30, 0x30, 0x34, 0x45, 0x2c, 0x30, 0x78, 0x36, 0x43, 0x30, 0x36, 0x39, 0x35, 0x45, 0x44, 0x2c, 0x30, 0x78, 0x31, 0x42, 0x30, 0x31, 0x41, 0x35, 0x37, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x32, 0x30, 0x38, 0x46, 0x34, 0x43, 0x31, 0x2c, 0x30, 0x78, 0x46, 0x35, 0x30, 0x46, 0x43, 0x34, 0x35, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x35, 0x42, 0x30, 0x44, 0x39, 0x43, 0x36, 0x2c, 0x30, 0x78, 0x31, 0x32, 0x42, 0x37, 0x45, 0x39, 0x35, 0x30, 0x2c, 0x30, 0x78, 0x38, 0x42, 0x42, 0x45, 0x42, 0x38, 0x45, 0x41, 0x2c, 0x30, 0x78, 0x46, 0x43, 0x42, 0x39, 0x38, 0x38, 0x37, 0x43, 0x2c, 0x30, 0x78, 0x36, 0x32, 0x44, 0x44, 0x31, 0x44, 0x44, 0x46, 0x2c, 0x30, 0x78, 0x31, 0x35, 0x44, 0x41, 0x32, 0x44, 0x34, 0x39, 0x2c, 0x30, 0x78, 0x38, 0x43, 0x44, 0x33, 0x37, 0x43, 0x46, 0x33, 0x2c, 0x30, 0x78, 0x46, 0x42, 0x44, 0x34, 0x34, 0x43, 0x36, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x44, 0x42, 0x32, 0x36, 0x31, 0x35, 0x38, 0x2c, 0x30, 0x78, 0x33, 0x41, 0x42, 0x35, 0x35, 0x31, 0x43, 0x45, 0x2c, 0x30, 0x78, 0x41, 0x33, 0x42, 0x43, 0x30, 0x30, 0x37, 0x34, 0x2c, 0x30, 0x78, 0x44, 0x34, 0x42, 0x42, 0x33, 0x30, 0x45, 0x32, 0x2c, 0x30, 0x78, 0x34, 0x41, 0x44, 0x46, 0x41, 0x35, 0x34, 0x31, 0x2c, 0x30, 0x78, 0x33, 0x44, 0x44, 0x38, 0x39, 0x35, 0x44, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x34, 0x44, 0x31, 0x43, 0x34, 0x36, 0x44, 0x2c, 0x30, 0x78, 0x44, 0x33, 0x44, 0x36, 0x46, 0x34, 0x46, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x33, 0x36, 0x39, 0x45, 0x39, 0x36, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x34, 0x36, 0x45, 0x44, 0x39, 0x46, 0x43, 0x2c, 0x30, 0x78, 0x41, 0x44, 0x36, 0x37, 0x38, 0x38, 0x34, 0x36, 0x2c, 0x30, 0x78, 0x44, 0x41, 0x36, 0x30, 0x42, 0x38, 0x44, 0x30, 0x2c, 0x30, 0x78, 0x34, 0x34, 0x30, 0x34, 0x32, 0x44, 0x37, 0x33, 0x2c, 0x30, 0x78, 0x33, 0x33, 0x30, 0x33, 0x31, 0x44, 0x45, 0x35, 0x2c, 0x30, 0x78, 0x41, 0x41, 0x30, 0x41, 0x34, 0x43, 0x35, 0x46, 0x2c, 0x30, 0x78, 0x44, 0x44, 0x30, 0x44, 0x37, 0x43, 0x43, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x30, 0x30, 0x35, 0x37, 0x31, 0x33, 0x43, 0x2c, 0x30, 0x78, 0x32, 0x37, 0x30, 0x32, 0x34, 0x31, 0x41, 0x41, 0x2c, 0x30, 0x78, 0x42, 0x45, 0x30, 0x42, 0x31, 0x30, 0x31, 0x30, 0x2c, 0x30, 0x78, 0x43, 0x39, 0x30, 0x43, 0x32, 0x30, 0x38, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x37, 0x36, 0x38, 0x42, 0x35, 0x32, 0x35, 0x2c, 0x30, 0x78, 0x32, 0x30, 0x36, 0x46, 0x38, 0x35, 0x42, 0x33, 0x2c, 0x30, 0x78, 0x42, 0x39, 0x36, 0x36, 0x44, 0x34, 0x30, 0x39, 0x2c, 0x30, 0x78, 0x43, 0x45, 0x36, 0x31, 0x45, 0x34, 0x39, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x45, 0x44, 0x45, 0x46, 0x39, 0x30, 0x45, 0x2c, 0x30, 0x78, 0x32, 0x39, 0x44, 0x39, 0x43, 0x39, 0x39, 0x38, 0x2c, 0x30, 0x78, 0x42, 0x30, 0x44, 0x30, 0x39, 0x38, 0x32, 0x32, 0x2c, 0x30, 0x78, 0x43, 0x37, 0x44, 0x37, 0x41, 0x38, 0x42, 0x34, 0x2c, 0x30, 0x78, 0x35, 0x39, 0x42, 0x33, 0x33, 0x44, 0x31, 0x37, 0x2c, 0x30, 0x78, 0x32, 0x45, 0x42, 0x34, 0x30, 0x44, 0x38, 0x31, 0x2c, 0x30, 0x78, 0x42, 0x37, 0x42, 0x44, 0x35, 0x43, 0x33, 0x42, 0x2c, 0x30, 0x78, 0x43, 0x30, 0x42, 0x41, 0x36, 0x43, 0x41, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x44, 0x42, 0x38, 0x38, 0x33, 0x32, 0x30, 0x2c, 0x30, 0x78, 0x39, 0x41, 0x42, 0x46, 0x42, 0x33, 0x42, 0x36, 0x2c, 0x30, 0x78, 0x30, 0x33, 0x42, 0x36, 0x45, 0x32, 0x30, 0x43, 0x2c, 0x30, 0x78, 0x37, 0x34, 0x42, 0x31, 0x44, 0x32, 0x39, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x41, 0x44, 0x35, 0x34, 0x37, 0x33, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x44, 0x44, 0x32, 0x37, 0x37, 0x41, 0x46, 0x2c, 0x30, 0x78, 0x30, 0x34, 0x44, 0x42, 0x32, 0x36, 0x31, 0x35, 0x2c, 0x30, 0x78, 0x37, 0x33, 0x44, 0x43, 0x31, 0x36, 0x38, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x33, 0x36, 0x33, 0x30, 0x42, 0x31, 0x32, 0x2c, 0x30, 0x78, 0x39, 0x34, 0x36, 0x34, 0x33, 0x42, 0x38, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x44, 0x36, 0x44, 0x36, 0x41, 0x33, 0x45, 0x2c, 0x30, 0x78, 0x37, 0x41, 0x36, 0x41, 0x35, 0x41, 0x41, 0x38, 0x2c, 0x30, 0x78, 0x45, 0x34, 0x30, 0x45, 0x43, 0x46, 0x30, 0x42, 0x2c, 0x30, 0x78, 0x39, 0x33, 0x30, 0x39, 0x46, 0x46, 0x39, 0x44, 0x2c, 0x30, 0x78, 0x30, 0x41, 0x30, 0x30, 0x41, 0x45, 0x32, 0x37, 0x2c, 0x30, 0x78, 0x37, 0x44, 0x30, 0x37, 0x39, 0x45, 0x42, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x30, 0x30, 0x46, 0x39, 0x33, 0x34, 0x34, 0x2c, 0x30, 0x78, 0x38, 0x37, 0x30, 0x38, 0x41, 0x33, 0x44, 0x32, 0x2c, 0x30, 0x78, 0x31, 0x45, 0x30, 0x31, 0x46, 0x32, 0x36, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x39, 0x30, 0x36, 0x43, 0x32, 0x46, 0x45, 0x2c, 0x30, 0x78, 0x46, 0x37, 0x36, 0x32, 0x35, 0x37, 0x35, 0x44, 0x2c, 0x30, 0x78, 0x38, 0x30, 0x36, 0x35, 0x36, 0x37, 0x43, 0x42, 0x2c, 0x30, 0x78, 0x31, 0x39, 0x36, 0x43, 0x33, 0x36, 0x37, 0x31, 0x2c, 0x30, 0x78, 0x36, 0x45, 0x36, 0x42, 0x30, 0x36, 0x45, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x45, 0x44, 0x34, 0x31, 0x42, 0x37, 0x36, 0x2c, 0x30, 0x78, 0x38, 0x39, 0x44, 0x33, 0x32, 0x42, 0x45, 0x30, 0x2c, 0x30, 0x78, 0x31, 0x30, 0x44, 0x41, 0x37, 0x41, 0x35, 0x41, 0x2c, 0x30, 0x78, 0x36, 0x37, 0x44, 0x44, 0x34, 0x41, 0x43, 0x43, 0x2c, 0x30, 0x78, 0x46, 0x39, 0x42, 0x39, 0x44, 0x46, 0x36, 0x46, 0x2c, 0x30, 0x78, 0x38, 0x45, 0x42, 0x45, 0x45, 0x46, 0x46, 0x39, 0x2c, 0x30, 0x78, 0x31, 0x37, 0x42, 0x37, 0x42, 0x45, 0x34, 0x33, 0x2c, 0x30, 0x78, 0x36, 0x30, 0x42, 0x30, 0x38, 0x45, 0x44, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x36, 0x44, 0x36, 0x41, 0x33, 0x45, 0x38, 0x2c, 0x30, 0x78, 0x41, 0x31, 0x44, 0x31, 0x39, 0x33, 0x37, 0x45, 0x2c, 0x30, 0x78, 0x33, 0x38, 0x44, 0x38, 0x43, 0x32, 0x43, 0x34, 0x2c, 0x30, 0x78, 0x34, 0x46, 0x44, 0x46, 0x46, 0x32, 0x35, 0x32, 0x2c, 0x30, 0x78, 0x44, 0x31, 0x42, 0x42, 0x36, 0x37, 0x46, 0x31, 0x2c, 0x30, 0x78, 0x41, 0x36, 0x42, 0x43, 0x35, 0x37, 0x36, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x46, 0x42, 0x35, 0x30, 0x36, 0x44, 0x44, 0x2c, 0x30, 0x78, 0x34, 0x38, 0x42, 0x32, 0x33, 0x36, 0x34, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x38, 0x30, 0x44, 0x32, 0x42, 0x44, 0x41, 0x2c, 0x30, 0x78, 0x41, 0x46, 0x30, 0x41, 0x31, 0x42, 0x34, 0x43, 0x2c, 0x30, 0x78, 0x33, 0x36, 0x30, 0x33, 0x34, 0x41, 0x46, 0x36, 0x2c, 0x30, 0x78, 0x34, 0x31, 0x30, 0x34, 0x37, 0x41, 0x36, 0x30, 0x2c, 0x30, 0x78, 0x44, 0x46, 0x36, 0x30, 0x45, 0x46, 0x43, 0x33, 0x2c, 0x30, 0x78, 0x41, 0x38, 0x36, 0x37, 0x44, 0x46, 0x35, 0x35, 0x2c, 0x30, 0x78, 0x33, 0x31, 0x36, 0x45, 0x38, 0x45, 0x45, 0x46, 0x2c, 0x30, 0x78, 0x34, 0x36, 0x36, 0x39, 0x42, 0x45, 0x37, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x42, 0x36, 0x31, 0x42, 0x33, 0x38, 0x43, 0x2c, 0x30, 0x78, 0x42, 0x43, 0x36, 0x36, 0x38, 0x33, 0x31, 0x41, 0x2c, 0x30, 0x78, 0x32, 0x35, 0x36, 0x46, 0x44, 0x32, 0x41, 0x30, 0x2c, 0x30, 0x78, 0x35, 0x32, 0x36, 0x38, 0x45, 0x32, 0x33, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x43, 0x30, 0x43, 0x37, 0x37, 0x39, 0x35, 0x2c, 0x30, 0x78, 0x42, 0x42, 0x30, 0x42, 0x34, 0x37, 0x30, 0x33, 0x2c, 0x30, 0x78, 0x32, 0x32, 0x30, 0x32, 0x31, 0x36, 0x42, 0x39, 0x2c, 0x30, 0x78, 0x35, 0x35, 0x30, 0x35, 0x32, 0x36, 0x32, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x35, 0x42, 0x41, 0x33, 0x42, 0x42, 0x45, 0x2c, 0x30, 0x78, 0x42, 0x32, 0x42, 0x44, 0x30, 0x42, 0x32, 0x38, 0x2c, 0x30, 0x78, 0x32, 0x42, 0x42, 0x34, 0x35, 0x41, 0x39, 0x32, 0x2c, 0x30, 0x78, 0x35, 0x43, 0x42, 0x33, 0x36, 0x41, 0x30, 0x34, 0x2c, 0x30, 0x78, 0x43, 0x32, 0x44, 0x37, 0x46, 0x46, 0x41, 0x37, 0x2c, 0x30, 0x78, 0x42, 0x35, 0x44, 0x30, 0x43, 0x46, 0x33, 0x31, 0x2c, 0x30, 0x78, 0x32, 0x43, 0x44, 0x39, 0x39, 0x45, 0x38, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x42, 0x44, 0x45, 0x41, 0x45, 0x31, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x42, 0x36, 0x34, 0x43, 0x32, 0x42, 0x30, 0x2c, 0x30, 0x78, 0x45, 0x43, 0x36, 0x33, 0x46, 0x32, 0x32, 0x36, 0x2c, 0x30, 0x78, 0x37, 0x35, 0x36, 0x41, 0x41, 0x33, 0x39, 0x43, 0x2c, 0x30, 0x78, 0x30, 0x32, 0x36, 0x44, 0x39, 0x33, 0x30, 0x41, 0x2c, 0x30, 0x78, 0x39, 0x43, 0x30, 0x39, 0x30, 0x36, 0x41, 0x39, 0x2c, 0x30, 0x78, 0x45, 0x42, 0x30, 0x45, 0x33, 0x36, 0x33, 0x46, 0x2c, 0x30, 0x78, 0x37, 0x32, 0x30, 0x37, 0x36, 0x37, 0x38, 0x35, 0x2c, 0x30, 0x78, 0x30, 0x35, 0x30, 0x30, 0x35, 0x37, 0x31, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x35, 0x42, 0x46, 0x34, 0x41, 0x38, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x32, 0x42, 0x38, 0x37, 0x41, 0x31, 0x34, 0x2c, 0x30, 0x78, 0x37, 0x42, 0x42, 0x31, 0x32, 0x42, 0x41, 0x45, 0x2c, 0x30, 0x78, 0x30, 0x43, 0x42, 0x36, 0x31, 0x42, 0x33, 0x38, 0x2c, 0x30, 0x78, 0x39, 0x32, 0x44, 0x32, 0x38, 0x45, 0x39, 0x42, 0x2c, 0x30, 0x78, 0x45, 0x35, 0x44, 0x35, 0x42, 0x45, 0x30, 0x44, 0x2c, 0x30, 0x78, 0x37, 0x43, 0x44, 0x43, 0x45, 0x46, 0x42, 0x37, 0x2c, 0x30, 0x78, 0x30, 0x42, 0x44, 0x42, 0x44, 0x46, 0x32, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x36, 0x44, 0x33, 0x44, 0x32, 0x44, 0x34, 0x2c, 0x30, 0x78, 0x46, 0x31, 0x44, 0x34, 0x45, 0x32, 0x34, 0x32, 0x2c, 0x30, 0x78, 0x36, 0x38, 0x44, 0x44, 0x42, 0x33, 0x46, 0x38, 0x2c, 0x30, 0x78, 0x31, 0x46, 0x44, 0x41, 0x38, 0x33, 0x36, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x31, 0x42, 0x45, 0x31, 0x36, 0x43, 0x44, 0x2c, 0x30, 0x78, 0x46, 0x36, 0x42, 0x39, 0x32, 0x36, 0x35, 0x42, 0x2c, 0x30, 0x78, 0x36, 0x46, 0x42, 0x30, 0x37, 0x37, 0x45, 0x31, 0x2c, 0x30, 0x78, 0x31, 0x38, 0x42, 0x37, 0x34, 0x37, 0x37, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x38, 0x30, 0x38, 0x35, 0x41, 0x45, 0x36, 0x2c, 0x30, 0x78, 0x46, 0x46, 0x30, 0x46, 0x36, 0x41, 0x37, 0x30, 0x2c, 0x30, 0x78, 0x36, 0x36, 0x30, 0x36, 0x33, 0x42, 0x43, 0x41, 0x2c, 0x30, 0x78, 0x31, 0x31, 0x30, 0x31, 0x30, 0x42, 0x35, 0x43, 0x2c, 0x30, 0x78, 0x38, 0x46, 0x36, 0x35, 0x39, 0x45, 0x46, 0x46, 0x2c, 0x30, 0x78, 0x46, 0x38, 0x36, 0x32, 0x41, 0x45, 0x36, 0x39, 0x2c, 0x30, 0x78, 0x36, 0x31, 0x36, 0x42, 0x46, 0x46, 0x44, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x36, 0x36, 0x43, 0x43, 0x46, 0x34, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x30, 0x30, 0x41, 0x45, 0x32, 0x37, 0x38, 0x2c, 0x30, 0x78, 0x44, 0x37, 0x30, 0x44, 0x44, 0x32, 0x45, 0x45, 0x2c, 0x30, 0x78, 0x34, 0x45, 0x30, 0x34, 0x38, 0x33, 0x35, 0x34, 0x2c, 0x30, 0x78, 0x33, 0x39, 0x30, 0x33, 0x42, 0x33, 0x43, 0x32, 0x2c, 0x30, 0x78, 0x41, 0x37, 0x36, 0x37, 0x32, 0x36, 0x36, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x30, 0x36, 0x30, 0x31, 0x36, 0x46, 0x37, 0x2c, 0x30, 0x78, 0x34, 0x39, 0x36, 0x39, 0x34, 0x37, 0x34, 0x44, 0x2c, 0x30, 0x78, 0x33, 0x45, 0x36, 0x45, 0x37, 0x37, 0x44, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x45, 0x44, 0x31, 0x36, 0x41, 0x34, 0x41, 0x2c, 0x30, 0x78, 0x44, 0x39, 0x44, 0x36, 0x35, 0x41, 0x44, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x30, 0x44, 0x46, 0x30, 0x42, 0x36, 0x36, 0x2c, 0x30, 0x78, 0x33, 0x37, 0x44, 0x38, 0x33, 0x42, 0x46, 0x30, 0x2c, 0x30, 0x78, 0x41, 0x39, 0x42, 0x43, 0x41, 0x45, 0x35, 0x33, 0x2c, 0x30, 0x78, 0x44, 0x45, 0x42, 0x42, 0x39, 0x45, 0x43, 0x35, 0x2c, 0x30, 0x78, 0x34, 0x37, 0x42, 0x32, 0x43, 0x46, 0x37, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x30, 0x42, 0x35, 0x46, 0x46, 0x45, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x44, 0x42, 0x44, 0x46, 0x32, 0x31, 0x43, 0x2c, 0x30, 0x78, 0x43, 0x41, 0x42, 0x41, 0x43, 0x32, 0x38, 0x41, 0x2c, 0x30, 0x78, 0x35, 0x33, 0x42, 0x33, 0x39, 0x33, 0x33, 0x30, 0x2c, 0x30, 0x78, 0x32, 0x34, 0x42, 0x34, 0x41, 0x33, 0x41, 0x36, 0x2c, 0x30, 0x78, 0x42, 0x41, 0x44, 0x30, 0x33, 0x36, 0x30, 0x35, 0x2c, 0x30, 0x78, 0x43, 0x44, 0x44, 0x37, 0x30, 0x36, 0x39, 0x33, 0x2c, 0x30, 0x78, 0x35, 0x34, 0x44, 0x45, 0x35, 0x37, 0x32, 0x39, 0x2c, 0x30, 0x78, 0x32, 0x33, 0x44, 0x39, 0x36, 0x37, 0x42, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x33, 0x36, 0x36, 0x37, 0x41, 0x32, 0x45, 0x2c, 0x30, 0x78, 0x43, 0x34, 0x36, 0x31, 0x34, 0x41, 0x42, 0x38, 0x2c, 0x30, 0x78, 0x35, 0x44, 0x36, 0x38, 0x31, 0x42, 0x30, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x41, 0x36, 0x46, 0x32, 0x42, 0x39, 0x34, 0x2c, 0x30, 0x78, 0x42, 0x34, 0x30, 0x42, 0x42, 0x45, 0x33, 0x37, 0x2c, 0x30, 0x78, 0x43, 0x33, 0x30, 0x43, 0x38, 0x45, 0x41, 0x31, 0x2c, 0x30, 0x78, 0x35, 0x41, 0x30, 0x35, 0x44, 0x46, 0x31, 0x42, 0x2c, 0x30, 0x78, 0x32, 0x44, 0x30, 0x32, 0x45, 0x46, 0x38, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x62, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x6c, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x79, 0x2d, 0x34, 0x2c, 0x20, 0x53, 0x6c, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x79, 0x2d, 0x38, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x6c, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x79, 0x2d, 0x31, 0x36, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x30, 0x78, 0x31, 0x39, 0x31, 0x42, 0x33, 0x31, 0x34, 0x31, 0x2c, 0x30, 0x78, 0x33, 0x32, 0x33, 0x36, 0x36, 0x32, 0x38, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x42, 0x32, 0x44, 0x35, 0x33, 0x43, 0x33, 0x2c, 0x30, 0x78, 0x36, 0x34, 0x36, 0x43, 0x43, 0x35, 0x30, 0x34, 0x2c, 0x30, 0x78, 0x37, 0x44, 0x37, 0x37, 0x46, 0x34, 0x34, 0x35, 0x2c, 0x30, 0x78, 0x35, 0x36, 0x35, 0x41, 0x41, 0x37, 0x38, 0x36, 0x2c, 0x30, 0x78, 0x34, 0x46, 0x34, 0x31, 0x39, 0x36, 0x43, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x38, 0x44, 0x39, 0x38, 0x41, 0x30, 0x38, 0x2c, 0x30, 0x78, 0x44, 0x31, 0x43, 0x32, 0x42, 0x42, 0x34, 0x39, 0x2c, 0x30, 0x78, 0x46, 0x41, 0x45, 0x46, 0x45, 0x38, 0x38, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x33, 0x46, 0x34, 0x44, 0x39, 0x43, 0x42, 0x2c, 0x30, 0x78, 0x41, 0x43, 0x42, 0x35, 0x34, 0x46, 0x30, 0x43, 0x2c, 0x30, 0x78, 0x42, 0x35, 0x41, 0x45, 0x37, 0x45, 0x34, 0x44, 0x2c, 0x30, 0x78, 0x39, 0x45, 0x38, 0x33, 0x32, 0x44, 0x38, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x37, 0x39, 0x38, 0x31, 0x43, 0x43, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x41, 0x43, 0x32, 0x31, 0x32, 0x35, 0x31, 0x2c, 0x30, 0x78, 0x35, 0x33, 0x44, 0x39, 0x32, 0x33, 0x31, 0x30, 0x2c, 0x30, 0x78, 0x37, 0x38, 0x46, 0x34, 0x37, 0x30, 0x44, 0x33, 0x2c, 0x30, 0x78, 0x36, 0x31, 0x45, 0x46, 0x34, 0x31, 0x39, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x45, 0x41, 0x45, 0x44, 0x37, 0x35, 0x35, 0x2c, 0x30, 0x78, 0x33, 0x37, 0x42, 0x35, 0x45, 0x36, 0x31, 0x34, 0x2c, 0x30, 0x78, 0x31, 0x43, 0x39, 0x38, 0x42, 0x35, 0x44, 0x37, 0x2c, 0x30, 0x78, 0x30, 0x35, 0x38, 0x33, 0x38, 0x34, 0x39, 0x36, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x32, 0x31, 0x42, 0x39, 0x38, 0x35, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x42, 0x30, 0x30, 0x41, 0x39, 0x31, 0x38, 0x2c, 0x30, 0x78, 0x42, 0x30, 0x32, 0x44, 0x46, 0x41, 0x44, 0x42, 0x2c, 0x30, 0x78, 0x41, 0x39, 0x33, 0x36, 0x43, 0x42, 0x39, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x36, 0x37, 0x37, 0x35, 0x44, 0x35, 0x44, 0x2c, 0x30, 0x78, 0x46, 0x46, 0x36, 0x43, 0x36, 0x43, 0x31, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x34, 0x34, 0x31, 0x33, 0x46, 0x44, 0x46, 0x2c, 0x30, 0x78, 0x43, 0x44, 0x35, 0x41, 0x30, 0x45, 0x39, 0x45, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x35, 0x38, 0x34, 0x32, 0x34, 0x41, 0x32, 0x2c, 0x30, 0x78, 0x38, 0x43, 0x39, 0x46, 0x31, 0x35, 0x45, 0x33, 0x2c, 0x30, 0x78, 0x41, 0x37, 0x42, 0x32, 0x34, 0x36, 0x32, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x45, 0x41, 0x39, 0x37, 0x37, 0x36, 0x31, 0x2c, 0x30, 0x78, 0x46, 0x31, 0x45, 0x38, 0x45, 0x31, 0x41, 0x36, 0x2c, 0x30, 0x78, 0x45, 0x38, 0x46, 0x33, 0x44, 0x30, 0x45, 0x37, 0x2c, 0x30, 0x78, 0x43, 0x33, 0x44, 0x45, 0x38, 0x33, 0x32, 0x34, 0x2c, 0x30, 0x78, 0x44, 0x41, 0x43, 0x35, 0x42, 0x32, 0x36, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x44, 0x35, 0x44, 0x41, 0x45, 0x41, 0x41, 0x2c, 0x30, 0x78, 0x34, 0x34, 0x34, 0x36, 0x39, 0x46, 0x45, 0x42, 0x2c, 0x30, 0x78, 0x36, 0x46, 0x36, 0x42, 0x43, 0x43, 0x32, 0x38, 0x2c, 0x30, 0x78, 0x37, 0x36, 0x37, 0x30, 0x46, 0x44, 0x36, 0x39, 0x2c, 0x30, 0x78, 0x33, 0x39, 0x33, 0x31, 0x36, 0x42, 0x41, 0x45, 0x2c, 0x30, 0x78, 0x32, 0x30, 0x32, 0x41, 0x35, 0x41, 0x45, 0x46, 0x2c, 0x30, 0x78, 0x30, 0x42, 0x30, 0x37, 0x30, 0x39, 0x32, 0x43, 0x2c, 0x30, 0x78, 0x31, 0x32, 0x31, 0x43, 0x33, 0x38, 0x36, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x46, 0x34, 0x36, 0x33, 0x36, 0x46, 0x33, 0x2c, 0x30, 0x78, 0x43, 0x36, 0x35, 0x44, 0x30, 0x37, 0x42, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x44, 0x37, 0x30, 0x35, 0x34, 0x37, 0x31, 0x2c, 0x30, 0x78, 0x46, 0x34, 0x36, 0x42, 0x36, 0x35, 0x33, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x42, 0x32, 0x41, 0x46, 0x33, 0x46, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x32, 0x33, 0x31, 0x43, 0x32, 0x42, 0x36, 0x2c, 0x30, 0x78, 0x38, 0x39, 0x31, 0x43, 0x39, 0x31, 0x37, 0x35, 0x2c, 0x30, 0x78, 0x39, 0x30, 0x30, 0x37, 0x41, 0x30, 0x33, 0x34, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x37, 0x39, 0x46, 0x42, 0x43, 0x46, 0x42, 0x2c, 0x30, 0x78, 0x30, 0x45, 0x38, 0x34, 0x38, 0x44, 0x42, 0x41, 0x2c, 0x30, 0x78, 0x32, 0x35, 0x41, 0x39, 0x44, 0x45, 0x37, 0x39, 0x2c, 0x30, 0x78, 0x33, 0x43, 0x42, 0x32, 0x45, 0x46, 0x33, 0x38, 0x2c, 0x30, 0x78, 0x37, 0x33, 0x46, 0x33, 0x37, 0x39, 0x46, 0x46, 0x2c, 0x30, 0x78, 0x36, 0x41, 0x45, 0x38, 0x34, 0x38, 0x42, 0x45, 0x2c, 0x30, 0x78, 0x34, 0x31, 0x43, 0x35, 0x31, 0x42, 0x37, 0x44, 0x2c, 0x30, 0x78, 0x35, 0x38, 0x44, 0x45, 0x32, 0x41, 0x33, 0x43, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x30, 0x37, 0x39, 0x34, 0x46, 0x30, 0x35, 0x2c, 0x30, 0x78, 0x45, 0x39, 0x36, 0x32, 0x37, 0x45, 0x34, 0x34, 0x2c, 0x30, 0x78, 0x43, 0x32, 0x34, 0x46, 0x32, 0x44, 0x38, 0x37, 0x2c, 0x30, 0x78, 0x44, 0x42, 0x35, 0x34, 0x31, 0x43, 0x43, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x34, 0x31, 0x35, 0x38, 0x41, 0x30, 0x31, 0x2c, 0x30, 0x78, 0x38, 0x44, 0x30, 0x45, 0x42, 0x42, 0x34, 0x30, 0x2c, 0x30, 0x78, 0x41, 0x36, 0x32, 0x33, 0x45, 0x38, 0x38, 0x33, 0x2c, 0x30, 0x78, 0x42, 0x46, 0x33, 0x38, 0x44, 0x39, 0x43, 0x32, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x38, 0x41, 0x30, 0x43, 0x35, 0x30, 0x44, 0x2c, 0x30, 0x78, 0x32, 0x31, 0x42, 0x42, 0x46, 0x34, 0x34, 0x43, 0x2c, 0x30, 0x78, 0x30, 0x41, 0x39, 0x36, 0x41, 0x37, 0x38, 0x46, 0x2c, 0x30, 0x78, 0x31, 0x33, 0x38, 0x44, 0x39, 0x36, 0x43, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x43, 0x43, 0x43, 0x30, 0x30, 0x30, 0x39, 0x2c, 0x30, 0x78, 0x34, 0x35, 0x44, 0x37, 0x33, 0x31, 0x34, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x45, 0x46, 0x41, 0x36, 0x32, 0x38, 0x42, 0x2c, 0x30, 0x78, 0x37, 0x37, 0x45, 0x31, 0x35, 0x33, 0x43, 0x41, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x41, 0x42, 0x42, 0x35, 0x44, 0x35, 0x34, 0x2c, 0x30, 0x78, 0x41, 0x33, 0x41, 0x30, 0x36, 0x43, 0x31, 0x35, 0x2c, 0x30, 0x78, 0x38, 0x38, 0x38, 0x44, 0x33, 0x46, 0x44, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x31, 0x39, 0x36, 0x30, 0x45, 0x39, 0x37, 0x2c, 0x30, 0x78, 0x44, 0x45, 0x44, 0x37, 0x39, 0x38, 0x35, 0x30, 0x2c, 0x30, 0x78, 0x43, 0x37, 0x43, 0x43, 0x41, 0x39, 0x31, 0x31, 0x2c, 0x30, 0x78, 0x45, 0x43, 0x45, 0x31, 0x46, 0x41, 0x44, 0x32, 0x2c, 0x30, 0x78, 0x46, 0x35, 0x46, 0x41, 0x43, 0x42, 0x39, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x32, 0x36, 0x32, 0x44, 0x37, 0x35, 0x43, 0x2c, 0x30, 0x78, 0x36, 0x42, 0x37, 0x39, 0x45, 0x36, 0x31, 0x44, 0x2c, 0x30, 0x78, 0x34, 0x30, 0x35, 0x34, 0x42, 0x35, 0x44, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x39, 0x34, 0x46, 0x38, 0x34, 0x39, 0x46, 0x2c, 0x30, 0x78, 0x31, 0x36, 0x30, 0x45, 0x31, 0x32, 0x35, 0x38, 0x2c, 0x30, 0x78, 0x30, 0x46, 0x31, 0x35, 0x32, 0x33, 0x31, 0x39, 0x2c, 0x30, 0x78, 0x32, 0x34, 0x33, 0x38, 0x37, 0x30, 0x44, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x44, 0x32, 0x33, 0x34, 0x31, 0x39, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x35, 0x46, 0x44, 0x36, 0x42, 0x41, 0x37, 0x2c, 0x30, 0x78, 0x37, 0x43, 0x45, 0x36, 0x35, 0x41, 0x45, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x37, 0x43, 0x42, 0x30, 0x39, 0x32, 0x35, 0x2c, 0x30, 0x78, 0x34, 0x45, 0x44, 0x30, 0x33, 0x38, 0x36, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x31, 0x39, 0x31, 0x41, 0x45, 0x41, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x38, 0x38, 0x41, 0x39, 0x46, 0x45, 0x32, 0x2c, 0x30, 0x78, 0x33, 0x33, 0x41, 0x37, 0x43, 0x43, 0x32, 0x31, 0x2c, 0x30, 0x78, 0x32, 0x41, 0x42, 0x43, 0x46, 0x44, 0x36, 0x30, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x44, 0x32, 0x34, 0x45, 0x31, 0x41, 0x46, 0x2c, 0x30, 0x78, 0x42, 0x34, 0x33, 0x46, 0x44, 0x30, 0x45, 0x45, 0x2c, 0x30, 0x78, 0x39, 0x46, 0x31, 0x32, 0x38, 0x33, 0x32, 0x44, 0x2c, 0x30, 0x78, 0x38, 0x36, 0x30, 0x39, 0x42, 0x32, 0x36, 0x43, 0x2c, 0x30, 0x78, 0x43, 0x39, 0x34, 0x38, 0x32, 0x34, 0x41, 0x42, 0x2c, 0x30, 0x78, 0x44, 0x30, 0x35, 0x33, 0x31, 0x35, 0x45, 0x41, 0x2c, 0x30, 0x78, 0x46, 0x42, 0x37, 0x45, 0x34, 0x36, 0x32, 0x39, 0x2c, 0x30, 0x78, 0x45, 0x32, 0x36, 0x35, 0x37, 0x37, 0x36, 0x38, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x46, 0x33, 0x46, 0x37, 0x39, 0x46, 0x36, 0x2c, 0x30, 0x78, 0x33, 0x36, 0x32, 0x34, 0x34, 0x38, 0x42, 0x37, 0x2c, 0x30, 0x78, 0x31, 0x44, 0x30, 0x39, 0x31, 0x42, 0x37, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x34, 0x31, 0x32, 0x32, 0x41, 0x33, 0x35, 0x2c, 0x30, 0x78, 0x34, 0x42, 0x35, 0x33, 0x42, 0x43, 0x46, 0x32, 0x2c, 0x30, 0x78, 0x35, 0x32, 0x34, 0x38, 0x38, 0x44, 0x42, 0x33, 0x2c, 0x30, 0x78, 0x37, 0x39, 0x36, 0x35, 0x44, 0x45, 0x37, 0x30, 0x2c, 0x30, 0x78, 0x36, 0x30, 0x37, 0x45, 0x45, 0x46, 0x33, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x37, 0x45, 0x36, 0x46, 0x33, 0x46, 0x45, 0x2c, 0x30, 0x78, 0x46, 0x45, 0x46, 0x44, 0x43, 0x32, 0x42, 0x46, 0x2c, 0x30, 0x78, 0x44, 0x35, 0x44, 0x30, 0x39, 0x31, 0x37, 0x43, 0x2c, 0x30, 0x78, 0x43, 0x43, 0x43, 0x42, 0x41, 0x30, 0x33, 0x44, 0x2c, 0x30, 0x78, 0x38, 0x33, 0x38, 0x41, 0x33, 0x36, 0x46, 0x41, 0x2c, 0x30, 0x78, 0x39, 0x41, 0x39, 0x31, 0x30, 0x37, 0x42, 0x42, 0x2c, 0x30, 0x78, 0x42, 0x31, 0x42, 0x43, 0x35, 0x34, 0x37, 0x38, 0x2c, 0x30, 0x78, 0x41, 0x38, 0x41, 0x37, 0x36, 0x35, 0x33, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x42, 0x38, 0x33, 0x39, 0x38, 0x34, 0x42, 0x2c, 0x30, 0x78, 0x32, 0x32, 0x39, 0x38, 0x41, 0x39, 0x30, 0x41, 0x2c, 0x30, 0x78, 0x30, 0x39, 0x42, 0x35, 0x46, 0x41, 0x43, 0x39, 0x2c, 0x30, 0x78, 0x31, 0x30, 0x41, 0x45, 0x43, 0x42, 0x38, 0x38, 0x2c, 0x30, 0x78, 0x35, 0x46, 0x45, 0x46, 0x35, 0x44, 0x34, 0x46, 0x2c, 0x30, 0x78, 0x34, 0x36, 0x46, 0x34, 0x36, 0x43, 0x30, 0x45, 0x2c, 0x30, 0x78, 0x36, 0x44, 0x44, 0x39, 0x33, 0x46, 0x43, 0x44, 0x2c, 0x30, 0x78, 0x37, 0x34, 0x43, 0x32, 0x30, 0x45, 0x38, 0x43, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x33, 0x35, 0x41, 0x31, 0x32, 0x34, 0x33, 0x2c, 0x30, 0x78, 0x45, 0x41, 0x34, 0x31, 0x32, 0x33, 0x30, 0x32, 0x2c, 0x30, 0x78, 0x43, 0x31, 0x36, 0x43, 0x37, 0x30, 0x43, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x38, 0x37, 0x37, 0x34, 0x31, 0x38, 0x30, 0x2c, 0x30, 0x78, 0x39, 0x37, 0x33, 0x36, 0x44, 0x37, 0x34, 0x37, 0x2c, 0x30, 0x78, 0x38, 0x45, 0x32, 0x44, 0x45, 0x36, 0x30, 0x36, 0x2c, 0x30, 0x78, 0x41, 0x35, 0x30, 0x30, 0x42, 0x35, 0x43, 0x35, 0x2c, 0x30, 0x78, 0x42, 0x43, 0x31, 0x42, 0x38, 0x34, 0x38, 0x34, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x31, 0x34, 0x31, 0x38, 0x41, 0x31, 0x41, 0x2c, 0x30, 0x78, 0x36, 0x38, 0x35, 0x41, 0x42, 0x42, 0x35, 0x42, 0x2c, 0x30, 0x78, 0x34, 0x33, 0x37, 0x37, 0x45, 0x38, 0x39, 0x38, 0x2c, 0x30, 0x78, 0x35, 0x41, 0x36, 0x43, 0x44, 0x39, 0x44, 0x39, 0x2c, 0x30, 0x78, 0x31, 0x35, 0x32, 0x44, 0x34, 0x46, 0x31, 0x45, 0x2c, 0x30, 0x78, 0x30, 0x43, 0x33, 0x36, 0x37, 0x45, 0x35, 0x46, 0x2c, 0x30, 0x78, 0x32, 0x37, 0x31, 0x42, 0x32, 0x44, 0x39, 0x43, 0x2c, 0x30, 0x78, 0x33, 0x45, 0x30, 0x30, 0x31, 0x43, 0x44, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x39, 0x39, 0x38, 0x30, 0x30, 0x31, 0x32, 0x2c, 0x30, 0x78, 0x41, 0x30, 0x38, 0x33, 0x33, 0x31, 0x35, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x42, 0x41, 0x45, 0x36, 0x32, 0x39, 0x30, 0x2c, 0x30, 0x78, 0x39, 0x32, 0x42, 0x35, 0x35, 0x33, 0x44, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x44, 0x46, 0x34, 0x43, 0x35, 0x31, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x34, 0x45, 0x46, 0x46, 0x34, 0x35, 0x37, 0x2c, 0x30, 0x78, 0x45, 0x46, 0x43, 0x32, 0x41, 0x37, 0x39, 0x34, 0x2c, 0x30, 0x78, 0x46, 0x36, 0x44, 0x39, 0x39, 0x36, 0x44, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x45, 0x30, 0x37, 0x42, 0x43, 0x45, 0x39, 0x2c, 0x30, 0x78, 0x42, 0x37, 0x31, 0x43, 0x38, 0x44, 0x41, 0x38, 0x2c, 0x30, 0x78, 0x39, 0x43, 0x33, 0x31, 0x44, 0x45, 0x36, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x35, 0x32, 0x41, 0x45, 0x46, 0x32, 0x41, 0x2c, 0x30, 0x78, 0x43, 0x41, 0x36, 0x42, 0x37, 0x39, 0x45, 0x44, 0x2c, 0x30, 0x78, 0x44, 0x33, 0x37, 0x30, 0x34, 0x38, 0x41, 0x43, 0x2c, 0x30, 0x78, 0x46, 0x38, 0x35, 0x44, 0x31, 0x42, 0x36, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x31, 0x34, 0x36, 0x32, 0x41, 0x32, 0x45, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x36, 0x44, 0x45, 0x33, 0x36, 0x45, 0x31, 0x2c, 0x30, 0x78, 0x37, 0x46, 0x43, 0x35, 0x30, 0x37, 0x41, 0x30, 0x2c, 0x30, 0x78, 0x35, 0x34, 0x45, 0x38, 0x35, 0x34, 0x36, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x44, 0x46, 0x33, 0x36, 0x35, 0x32, 0x32, 0x2c, 0x30, 0x78, 0x30, 0x32, 0x42, 0x32, 0x46, 0x33, 0x45, 0x35, 0x2c, 0x30, 0x78, 0x31, 0x42, 0x41, 0x39, 0x43, 0x32, 0x41, 0x34, 0x2c, 0x30, 0x78, 0x33, 0x30, 0x38, 0x34, 0x39, 0x31, 0x36, 0x37, 0x2c, 0x30, 0x78, 0x32, 0x39, 0x39, 0x46, 0x41, 0x30, 0x32, 0x36, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x34, 0x43, 0x35, 0x41, 0x45, 0x42, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x44, 0x44, 0x45, 0x39, 0x46, 0x46, 0x39, 0x2c, 0x30, 0x78, 0x44, 0x36, 0x46, 0x33, 0x43, 0x43, 0x33, 0x41, 0x2c, 0x30, 0x78, 0x43, 0x46, 0x45, 0x38, 0x46, 0x44, 0x37, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x30, 0x41, 0x39, 0x36, 0x42, 0x42, 0x43, 0x2c, 0x30, 0x78, 0x39, 0x39, 0x42, 0x32, 0x35, 0x41, 0x46, 0x44, 0x2c, 0x30, 0x78, 0x42, 0x32, 0x39, 0x46, 0x30, 0x39, 0x33, 0x45, 0x2c, 0x30, 0x78, 0x41, 0x42, 0x38, 0x34, 0x33, 0x38, 0x37, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x43, 0x31, 0x43, 0x32, 0x34, 0x42, 0x30, 0x2c, 0x30, 0x78, 0x33, 0x35, 0x30, 0x37, 0x31, 0x35, 0x46, 0x31, 0x2c, 0x30, 0x78, 0x31, 0x45, 0x32, 0x41, 0x34, 0x36, 0x33, 0x32, 0x2c, 0x30, 0x78, 0x30, 0x37, 0x33, 0x31, 0x37, 0x37, 0x37, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x38, 0x37, 0x30, 0x45, 0x31, 0x42, 0x34, 0x2c, 0x30, 0x78, 0x35, 0x31, 0x36, 0x42, 0x44, 0x30, 0x46, 0x35, 0x2c, 0x30, 0x78, 0x37, 0x41, 0x34, 0x36, 0x38, 0x33, 0x33, 0x36, 0x2c, 0x30, 0x78, 0x36, 0x33, 0x35, 0x44, 0x42, 0x32, 0x37, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x42, 0x46, 0x41, 0x44, 0x37, 0x34, 0x45, 0x2c, 0x30, 0x78, 0x44, 0x32, 0x45, 0x31, 0x45, 0x36, 0x30, 0x46, 0x2c, 0x30, 0x78, 0x46, 0x39, 0x43, 0x43, 0x42, 0x35, 0x43, 0x43, 0x2c, 0x30, 0x78, 0x45, 0x30, 0x44, 0x37, 0x38, 0x34, 0x38, 0x44, 0x2c, 0x30, 0x78, 0x41, 0x46, 0x39, 0x36, 0x31, 0x32, 0x34, 0x41, 0x2c, 0x30, 0x78, 0x42, 0x36, 0x38, 0x44, 0x32, 0x33, 0x30, 0x42, 0x2c, 0x30, 0x78, 0x39, 0x44, 0x41, 0x30, 0x37, 0x30, 0x43, 0x38, 0x2c, 0x30, 0x78, 0x38, 0x34, 0x42, 0x42, 0x34, 0x31, 0x38, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x33, 0x32, 0x33, 0x35, 0x44, 0x34, 0x36, 0x2c, 0x30, 0x78, 0x31, 0x41, 0x33, 0x38, 0x36, 0x43, 0x30, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x31, 0x31, 0x35, 0x33, 0x46, 0x43, 0x34, 0x2c, 0x30, 0x78, 0x32, 0x38, 0x30, 0x45, 0x30, 0x45, 0x38, 0x35, 0x2c, 0x30, 0x78, 0x36, 0x37, 0x34, 0x46, 0x39, 0x38, 0x34, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x45, 0x35, 0x34, 0x41, 0x39, 0x30, 0x33, 0x2c, 0x30, 0x78, 0x35, 0x35, 0x37, 0x39, 0x46, 0x41, 0x43, 0x30, 0x2c, 0x30, 0x78, 0x34, 0x43, 0x36, 0x32, 0x43, 0x42, 0x38, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x31, 0x33, 0x38, 0x43, 0x35, 0x31, 0x46, 0x2c, 0x30, 0x78, 0x39, 0x38, 0x32, 0x33, 0x46, 0x34, 0x35, 0x45, 0x2c, 0x30, 0x78, 0x42, 0x33, 0x30, 0x45, 0x41, 0x37, 0x39, 0x44, 0x2c, 0x30, 0x78, 0x41, 0x41, 0x31, 0x35, 0x39, 0x36, 0x44, 0x43, 0x2c, 0x30, 0x78, 0x45, 0x35, 0x35, 0x34, 0x30, 0x30, 0x31, 0x42, 0x2c, 0x30, 0x78, 0x46, 0x43, 0x34, 0x46, 0x33, 0x31, 0x35, 0x41, 0x2c, 0x30, 0x78, 0x44, 0x37, 0x36, 0x32, 0x36, 0x32, 0x39, 0x39, 0x2c, 0x30, 0x78, 0x43, 0x45, 0x37, 0x39, 0x35, 0x33, 0x44, 0x38, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x39, 0x45, 0x31, 0x34, 0x46, 0x31, 0x37, 0x2c, 0x30, 0x78, 0x35, 0x30, 0x46, 0x41, 0x37, 0x45, 0x35, 0x36, 0x2c, 0x30, 0x78, 0x37, 0x42, 0x44, 0x37, 0x32, 0x44, 0x39, 0x35, 0x2c, 0x30, 0x78, 0x36, 0x32, 0x43, 0x43, 0x31, 0x43, 0x44, 0x34, 0x2c, 0x30, 0x78, 0x32, 0x44, 0x38, 0x44, 0x38, 0x41, 0x31, 0x33, 0x2c, 0x30, 0x78, 0x33, 0x34, 0x39, 0x36, 0x42, 0x42, 0x35, 0x32, 0x2c, 0x30, 0x78, 0x31, 0x46, 0x42, 0x42, 0x45, 0x38, 0x39, 0x31, 0x2c, 0x30, 0x78, 0x30, 0x36, 0x41, 0x30, 0x44, 0x39, 0x44, 0x30, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x45, 0x37, 0x45, 0x46, 0x33, 0x45, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x37, 0x36, 0x35, 0x43, 0x32, 0x41, 0x44, 0x2c, 0x30, 0x78, 0x36, 0x43, 0x34, 0x38, 0x39, 0x31, 0x36, 0x45, 0x2c, 0x30, 0x78, 0x37, 0x35, 0x35, 0x33, 0x41, 0x30, 0x32, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x41, 0x31, 0x32, 0x33, 0x36, 0x45, 0x38, 0x2c, 0x30, 0x78, 0x32, 0x33, 0x30, 0x39, 0x30, 0x37, 0x41, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x38, 0x32, 0x34, 0x35, 0x34, 0x36, 0x41, 0x2c, 0x30, 0x78, 0x31, 0x31, 0x33, 0x46, 0x36, 0x35, 0x32, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x36, 0x41, 0x37, 0x37, 0x39, 0x45, 0x34, 0x2c, 0x30, 0x78, 0x38, 0x46, 0x42, 0x43, 0x34, 0x38, 0x41, 0x35, 0x2c, 0x30, 0x78, 0x41, 0x34, 0x39, 0x31, 0x31, 0x42, 0x36, 0x36, 0x2c, 0x30, 0x78, 0x42, 0x44, 0x38, 0x41, 0x32, 0x41, 0x32, 0x37, 0x2c, 0x30, 0x78, 0x46, 0x32, 0x43, 0x42, 0x42, 0x43, 0x45, 0x30, 0x2c, 0x30, 0x78, 0x45, 0x42, 0x44, 0x30, 0x38, 0x44, 0x41, 0x31, 0x2c, 0x30, 0x78, 0x43, 0x30, 0x46, 0x44, 0x44, 0x45, 0x36, 0x32, 0x2c, 0x30, 0x78, 0x44, 0x39, 0x45, 0x36, 0x45, 0x46, 0x32, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x34, 0x42, 0x43, 0x45, 0x31, 0x42, 0x44, 0x2c, 0x30, 0x78, 0x30, 0x44, 0x41, 0x37, 0x44, 0x30, 0x46, 0x43, 0x2c, 0x30, 0x78, 0x32, 0x36, 0x38, 0x41, 0x38, 0x33, 0x33, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x46, 0x39, 0x31, 0x42, 0x32, 0x37, 0x45, 0x2c, 0x30, 0x78, 0x37, 0x30, 0x44, 0x30, 0x32, 0x34, 0x42, 0x39, 0x2c, 0x30, 0x78, 0x36, 0x39, 0x43, 0x42, 0x31, 0x35, 0x46, 0x38, 0x2c, 0x30, 0x78, 0x34, 0x32, 0x45, 0x36, 0x34, 0x36, 0x33, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x42, 0x46, 0x44, 0x37, 0x37, 0x37, 0x41, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x43, 0x36, 0x35, 0x36, 0x42, 0x42, 0x35, 0x2c, 0x30, 0x78, 0x43, 0x35, 0x37, 0x45, 0x35, 0x41, 0x46, 0x34, 0x2c, 0x30, 0x78, 0x45, 0x45, 0x35, 0x33, 0x30, 0x39, 0x33, 0x37, 0x2c, 0x30, 0x78, 0x46, 0x37, 0x34, 0x38, 0x33, 0x38, 0x37, 0x36, 0x2c, 0x30, 0x78, 0x42, 0x38, 0x30, 0x39, 0x41, 0x45, 0x42, 0x31, 0x2c, 0x30, 0x78, 0x41, 0x31, 0x31, 0x32, 0x39, 0x46, 0x46, 0x30, 0x2c, 0x30, 0x78, 0x38, 0x41, 0x33, 0x46, 0x43, 0x43, 0x33, 0x33, 0x2c, 0x30, 0x78, 0x39, 0x33, 0x32, 0x34, 0x46, 0x44, 0x37, 0x32, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x30, 0x78, 0x30, 0x31, 0x43, 0x32, 0x36, 0x41, 0x33, 0x37, 0x2c, 0x30, 0x78, 0x30, 0x33, 0x38, 0x34, 0x44, 0x34, 0x36, 0x45, 0x2c, 0x30, 0x78, 0x30, 0x32, 0x34, 0x36, 0x42, 0x45, 0x35, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x37, 0x30, 0x39, 0x41, 0x38, 0x44, 0x43, 0x2c, 0x30, 0x78, 0x30, 0x36, 0x43, 0x42, 0x43, 0x32, 0x45, 0x42, 0x2c, 0x30, 0x78, 0x30, 0x34, 0x38, 0x44, 0x37, 0x43, 0x42, 0x32, 0x2c, 0x30, 0x78, 0x30, 0x35, 0x34, 0x46, 0x31, 0x36, 0x38, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x45, 0x31, 0x33, 0x35, 0x31, 0x42, 0x38, 0x2c, 0x30, 0x78, 0x30, 0x46, 0x44, 0x31, 0x33, 0x42, 0x38, 0x46, 0x2c, 0x30, 0x78, 0x30, 0x44, 0x39, 0x37, 0x38, 0x35, 0x44, 0x36, 0x2c, 0x30, 0x78, 0x30, 0x43, 0x35, 0x35, 0x45, 0x46, 0x45, 0x31, 0x2c, 0x30, 0x78, 0x30, 0x39, 0x31, 0x41, 0x46, 0x39, 0x36, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x38, 0x44, 0x38, 0x39, 0x33, 0x35, 0x33, 0x2c, 0x30, 0x78, 0x30, 0x41, 0x39, 0x45, 0x32, 0x44, 0x30, 0x41, 0x2c, 0x30, 0x78, 0x30, 0x42, 0x35, 0x43, 0x34, 0x37, 0x33, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x43, 0x32, 0x36, 0x41, 0x33, 0x37, 0x30, 0x2c, 0x30, 0x78, 0x31, 0x44, 0x45, 0x34, 0x43, 0x39, 0x34, 0x37, 0x2c, 0x30, 0x78, 0x31, 0x46, 0x41, 0x32, 0x37, 0x37, 0x31, 0x45, 0x2c, 0x30, 0x78, 0x31, 0x45, 0x36, 0x30, 0x31, 0x44, 0x32, 0x39, 0x2c, 0x30, 0x78, 0x31, 0x42, 0x32, 0x46, 0x30, 0x42, 0x41, 0x43, 0x2c, 0x30, 0x78, 0x31, 0x41, 0x45, 0x44, 0x36, 0x31, 0x39, 0x42, 0x2c, 0x30, 0x78, 0x31, 0x38, 0x41, 0x42, 0x44, 0x46, 0x43, 0x32, 0x2c, 0x30, 0x78, 0x31, 0x39, 0x36, 0x39, 0x42, 0x35, 0x46, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x32, 0x33, 0x35, 0x46, 0x32, 0x43, 0x38, 0x2c, 0x30, 0x78, 0x31, 0x33, 0x46, 0x37, 0x39, 0x38, 0x46, 0x46, 0x2c, 0x30, 0x78, 0x31, 0x31, 0x42, 0x31, 0x32, 0x36, 0x41, 0x36, 0x2c, 0x30, 0x78, 0x31, 0x30, 0x37, 0x33, 0x34, 0x43, 0x39, 0x31, 0x2c, 0x30, 0x78, 0x31, 0x35, 0x33, 0x43, 0x35, 0x41, 0x31, 0x34, 0x2c, 0x30, 0x78, 0x31, 0x34, 0x46, 0x45, 0x33, 0x30, 0x32, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x36, 0x42, 0x38, 0x38, 0x45, 0x37, 0x41, 0x2c, 0x30, 0x78, 0x31, 0x37, 0x37, 0x41, 0x45, 0x34, 0x34, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x38, 0x34, 0x44, 0x34, 0x36, 0x45, 0x30, 0x2c, 0x30, 0x78, 0x33, 0x39, 0x38, 0x46, 0x32, 0x43, 0x44, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x42, 0x43, 0x39, 0x39, 0x32, 0x38, 0x45, 0x2c, 0x30, 0x78, 0x33, 0x41, 0x30, 0x42, 0x46, 0x38, 0x42, 0x39, 0x2c, 0x30, 0x78, 0x33, 0x46, 0x34, 0x34, 0x45, 0x45, 0x33, 0x43, 0x2c, 0x30, 0x78, 0x33, 0x45, 0x38, 0x36, 0x38, 0x34, 0x30, 0x42, 0x2c, 0x30, 0x78, 0x33, 0x43, 0x43, 0x30, 0x33, 0x41, 0x35, 0x32, 0x2c, 0x30, 0x78, 0x33, 0x44, 0x30, 0x32, 0x35, 0x30, 0x36, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x36, 0x35, 0x45, 0x31, 0x37, 0x35, 0x38, 0x2c, 0x30, 0x78, 0x33, 0x37, 0x39, 0x43, 0x37, 0x44, 0x36, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x35, 0x44, 0x41, 0x43, 0x33, 0x33, 0x36, 0x2c, 0x30, 0x78, 0x33, 0x34, 0x31, 0x38, 0x41, 0x39, 0x30, 0x31, 0x2c, 0x30, 0x78, 0x33, 0x31, 0x35, 0x37, 0x42, 0x46, 0x38, 0x34, 0x2c, 0x30, 0x78, 0x33, 0x30, 0x39, 0x35, 0x44, 0x35, 0x42, 0x33, 0x2c, 0x30, 0x78, 0x33, 0x32, 0x44, 0x33, 0x36, 0x42, 0x45, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x33, 0x31, 0x31, 0x30, 0x31, 0x44, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x34, 0x36, 0x42, 0x45, 0x35, 0x39, 0x30, 0x2c, 0x30, 0x78, 0x32, 0x35, 0x41, 0x39, 0x38, 0x46, 0x41, 0x37, 0x2c, 0x30, 0x78, 0x32, 0x37, 0x45, 0x46, 0x33, 0x31, 0x46, 0x45, 0x2c, 0x30, 0x78, 0x32, 0x36, 0x32, 0x44, 0x35, 0x42, 0x43, 0x39, 0x2c, 0x30, 0x78, 0x32, 0x33, 0x36, 0x32, 0x34, 0x44, 0x34, 0x43, 0x2c, 0x30, 0x78, 0x32, 0x32, 0x41, 0x30, 0x32, 0x37, 0x37, 0x42, 0x2c, 0x30, 0x78, 0x32, 0x30, 0x45, 0x36, 0x39, 0x39, 0x32, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x31, 0x32, 0x34, 0x46, 0x33, 0x31, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x41, 0x37, 0x38, 0x42, 0x34, 0x32, 0x38, 0x2c, 0x30, 0x78, 0x32, 0x42, 0x42, 0x41, 0x44, 0x45, 0x31, 0x46, 0x2c, 0x30, 0x78, 0x32, 0x39, 0x46, 0x43, 0x36, 0x30, 0x34, 0x36, 0x2c, 0x30, 0x78, 0x32, 0x38, 0x33, 0x45, 0x30, 0x41, 0x37, 0x31, 0x2c, 0x30, 0x78, 0x32, 0x44, 0x37, 0x31, 0x31, 0x43, 0x46, 0x34, 0x2c, 0x30, 0x78, 0x32, 0x43, 0x42, 0x33, 0x37, 0x36, 0x43, 0x33, 0x2c, 0x30, 0x78, 0x32, 0x45, 0x46, 0x35, 0x43, 0x38, 0x39, 0x41, 0x2c, 0x30, 0x78, 0x32, 0x46, 0x33, 0x37, 0x41, 0x32, 0x41, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x30, 0x39, 0x41, 0x38, 0x44, 0x43, 0x30, 0x2c, 0x30, 0x78, 0x37, 0x31, 0x35, 0x38, 0x45, 0x37, 0x46, 0x37, 0x2c, 0x30, 0x78, 0x37, 0x33, 0x31, 0x45, 0x35, 0x39, 0x41, 0x45, 0x2c, 0x30, 0x78, 0x37, 0x32, 0x44, 0x43, 0x33, 0x33, 0x39, 0x39, 0x2c, 0x30, 0x78, 0x37, 0x37, 0x39, 0x33, 0x32, 0x35, 0x31, 0x43, 0x2c, 0x30, 0x78, 0x37, 0x36, 0x35, 0x31, 0x34, 0x46, 0x32, 0x42, 0x2c, 0x30, 0x78, 0x37, 0x34, 0x31, 0x37, 0x46, 0x31, 0x37, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x35, 0x44, 0x35, 0x39, 0x42, 0x34, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x45, 0x38, 0x39, 0x44, 0x43, 0x37, 0x38, 0x2c, 0x30, 0x78, 0x37, 0x46, 0x34, 0x42, 0x42, 0x36, 0x34, 0x46, 0x2c, 0x30, 0x78, 0x37, 0x44, 0x30, 0x44, 0x30, 0x38, 0x31, 0x36, 0x2c, 0x30, 0x78, 0x37, 0x43, 0x43, 0x46, 0x36, 0x32, 0x32, 0x31, 0x2c, 0x30, 0x78, 0x37, 0x39, 0x38, 0x30, 0x37, 0x34, 0x41, 0x34, 0x2c, 0x30, 0x78, 0x37, 0x38, 0x34, 0x32, 0x31, 0x45, 0x39, 0x33, 0x2c, 0x30, 0x78, 0x37, 0x41, 0x30, 0x34, 0x41, 0x30, 0x43, 0x41, 0x2c, 0x30, 0x78, 0x37, 0x42, 0x43, 0x36, 0x43, 0x41, 0x46, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x43, 0x42, 0x43, 0x32, 0x45, 0x42, 0x30, 0x2c, 0x30, 0x78, 0x36, 0x44, 0x37, 0x45, 0x34, 0x34, 0x38, 0x37, 0x2c, 0x30, 0x78, 0x36, 0x46, 0x33, 0x38, 0x46, 0x41, 0x44, 0x45, 0x2c, 0x30, 0x78, 0x36, 0x45, 0x46, 0x41, 0x39, 0x30, 0x45, 0x39, 0x2c, 0x30, 0x78, 0x36, 0x42, 0x42, 0x35, 0x38, 0x36, 0x36, 0x43, 0x2c, 0x30, 0x78, 0x36, 0x41, 0x37, 0x37, 0x45, 0x43, 0x35, 0x42, 0x2c, 0x30, 0x78, 0x36, 0x38, 0x33, 0x31, 0x35, 0x32, 0x30, 0x32, 0x2c, 0x30, 0x78, 0x36, 0x39, 0x46, 0x33, 0x33, 0x38, 0x33, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x32, 0x41, 0x46, 0x37, 0x46, 0x30, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x33, 0x36, 0x44, 0x31, 0x35, 0x33, 0x46, 0x2c, 0x30, 0x78, 0x36, 0x31, 0x32, 0x42, 0x41, 0x42, 0x36, 0x36, 0x2c, 0x30, 0x78, 0x36, 0x30, 0x45, 0x39, 0x43, 0x31, 0x35, 0x31, 0x2c, 0x30, 0x78, 0x36, 0x35, 0x41, 0x36, 0x44, 0x37, 0x44, 0x34, 0x2c, 0x30, 0x78, 0x36, 0x34, 0x36, 0x34, 0x42, 0x44, 0x45, 0x33, 0x2c, 0x30, 0x78, 0x36, 0x36, 0x32, 0x32, 0x30, 0x33, 0x42, 0x41, 0x2c, 0x30, 0x78, 0x36, 0x37, 0x45, 0x30, 0x36, 0x39, 0x38, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x38, 0x44, 0x37, 0x43, 0x42, 0x32, 0x30, 0x2c, 0x30, 0x78, 0x34, 0x39, 0x31, 0x35, 0x41, 0x31, 0x31, 0x37, 0x2c, 0x30, 0x78, 0x34, 0x42, 0x35, 0x33, 0x31, 0x46, 0x34, 0x45, 0x2c, 0x30, 0x78, 0x34, 0x41, 0x39, 0x31, 0x37, 0x35, 0x37, 0x39, 0x2c, 0x30, 0x78, 0x34, 0x46, 0x44, 0x45, 0x36, 0x33, 0x46, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x45, 0x31, 0x43, 0x30, 0x39, 0x43, 0x42, 0x2c, 0x30, 0x78, 0x34, 0x43, 0x35, 0x41, 0x42, 0x37, 0x39, 0x32, 0x2c, 0x30, 0x78, 0x34, 0x44, 0x39, 0x38, 0x44, 0x44, 0x41, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x36, 0x43, 0x34, 0x39, 0x41, 0x39, 0x38, 0x2c, 0x30, 0x78, 0x34, 0x37, 0x30, 0x36, 0x46, 0x30, 0x41, 0x46, 0x2c, 0x30, 0x78, 0x34, 0x35, 0x34, 0x30, 0x34, 0x45, 0x46, 0x36, 0x2c, 0x30, 0x78, 0x34, 0x34, 0x38, 0x32, 0x32, 0x34, 0x43, 0x31, 0x2c, 0x30, 0x78, 0x34, 0x31, 0x43, 0x44, 0x33, 0x32, 0x34, 0x34, 0x2c, 0x30, 0x78, 0x34, 0x30, 0x30, 0x46, 0x35, 0x38, 0x37, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x32, 0x34, 0x39, 0x45, 0x36, 0x32, 0x41, 0x2c, 0x30, 0x78, 0x34, 0x33, 0x38, 0x42, 0x38, 0x43, 0x31, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x34, 0x46, 0x31, 0x36, 0x38, 0x35, 0x30, 0x2c, 0x30, 0x78, 0x35, 0x35, 0x33, 0x33, 0x30, 0x32, 0x36, 0x37, 0x2c, 0x30, 0x78, 0x35, 0x37, 0x37, 0x35, 0x42, 0x43, 0x33, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x36, 0x42, 0x37, 0x44, 0x36, 0x30, 0x39, 0x2c, 0x30, 0x78, 0x35, 0x33, 0x46, 0x38, 0x43, 0x30, 0x38, 0x43, 0x2c, 0x30, 0x78, 0x35, 0x32, 0x33, 0x41, 0x41, 0x41, 0x42, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x30, 0x37, 0x43, 0x31, 0x34, 0x45, 0x32, 0x2c, 0x30, 0x78, 0x35, 0x31, 0x42, 0x45, 0x37, 0x45, 0x44, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x41, 0x45, 0x32, 0x33, 0x39, 0x45, 0x38, 0x2c, 0x30, 0x78, 0x35, 0x42, 0x32, 0x30, 0x35, 0x33, 0x44, 0x46, 0x2c, 0x30, 0x78, 0x35, 0x39, 0x36, 0x36, 0x45, 0x44, 0x38, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x38, 0x41, 0x34, 0x38, 0x37, 0x42, 0x31, 0x2c, 0x30, 0x78, 0x35, 0x44, 0x45, 0x42, 0x39, 0x31, 0x33, 0x34, 0x2c, 0x30, 0x78, 0x35, 0x43, 0x32, 0x39, 0x46, 0x42, 0x30, 0x33, 0x2c, 0x30, 0x78, 0x35, 0x45, 0x36, 0x46, 0x34, 0x35, 0x35, 0x41, 0x2c, 0x30, 0x78, 0x35, 0x46, 0x41, 0x44, 0x32, 0x46, 0x36, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x31, 0x33, 0x35, 0x31, 0x42, 0x38, 0x30, 0x2c, 0x30, 0x78, 0x45, 0x30, 0x46, 0x37, 0x37, 0x31, 0x42, 0x37, 0x2c, 0x30, 0x78, 0x45, 0x32, 0x42, 0x31, 0x43, 0x46, 0x45, 0x45, 0x2c, 0x30, 0x78, 0x45, 0x33, 0x37, 0x33, 0x41, 0x35, 0x44, 0x39, 0x2c, 0x30, 0x78, 0x45, 0x36, 0x33, 0x43, 0x42, 0x33, 0x35, 0x43, 0x2c, 0x30, 0x78, 0x45, 0x37, 0x46, 0x45, 0x44, 0x39, 0x36, 0x42, 0x2c, 0x30, 0x78, 0x45, 0x35, 0x42, 0x38, 0x36, 0x37, 0x33, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x34, 0x37, 0x41, 0x30, 0x44, 0x30, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x46, 0x32, 0x36, 0x34, 0x41, 0x33, 0x38, 0x2c, 0x30, 0x78, 0x45, 0x45, 0x45, 0x34, 0x32, 0x30, 0x30, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x43, 0x41, 0x32, 0x39, 0x45, 0x35, 0x36, 0x2c, 0x30, 0x78, 0x45, 0x44, 0x36, 0x30, 0x46, 0x34, 0x36, 0x31, 0x2c, 0x30, 0x78, 0x45, 0x38, 0x32, 0x46, 0x45, 0x32, 0x45, 0x34, 0x2c, 0x30, 0x78, 0x45, 0x39, 0x45, 0x44, 0x38, 0x38, 0x44, 0x33, 0x2c, 0x30, 0x78, 0x45, 0x42, 0x41, 0x42, 0x33, 0x36, 0x38, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x41, 0x36, 0x39, 0x35, 0x43, 0x42, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x44, 0x31, 0x33, 0x42, 0x38, 0x46, 0x30, 0x2c, 0x30, 0x78, 0x46, 0x43, 0x44, 0x31, 0x44, 0x32, 0x43, 0x37, 0x2c, 0x30, 0x78, 0x46, 0x45, 0x39, 0x37, 0x36, 0x43, 0x39, 0x45, 0x2c, 0x30, 0x78, 0x46, 0x46, 0x35, 0x35, 0x30, 0x36, 0x41, 0x39, 0x2c, 0x30, 0x78, 0x46, 0x41, 0x31, 0x41, 0x31, 0x30, 0x32, 0x43, 0x2c, 0x30, 0x78, 0x46, 0x42, 0x44, 0x38, 0x37, 0x41, 0x31, 0x42, 0x2c, 0x30, 0x78, 0x46, 0x39, 0x39, 0x45, 0x43, 0x34, 0x34, 0x32, 0x2c, 0x30, 0x78, 0x46, 0x38, 0x35, 0x43, 0x41, 0x45, 0x37, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x33, 0x30, 0x30, 0x45, 0x39, 0x34, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x32, 0x43, 0x32, 0x38, 0x33, 0x37, 0x46, 0x2c, 0x30, 0x78, 0x46, 0x30, 0x38, 0x34, 0x33, 0x44, 0x32, 0x36, 0x2c, 0x30, 0x78, 0x46, 0x31, 0x34, 0x36, 0x35, 0x37, 0x31, 0x31, 0x2c, 0x30, 0x78, 0x46, 0x34, 0x30, 0x39, 0x34, 0x31, 0x39, 0x34, 0x2c, 0x30, 0x78, 0x46, 0x35, 0x43, 0x42, 0x32, 0x42, 0x41, 0x33, 0x2c, 0x30, 0x78, 0x46, 0x37, 0x38, 0x44, 0x39, 0x35, 0x46, 0x41, 0x2c, 0x30, 0x78, 0x46, 0x36, 0x34, 0x46, 0x46, 0x46, 0x43, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x39, 0x37, 0x38, 0x35, 0x44, 0x36, 0x30, 0x2c, 0x30, 0x78, 0x44, 0x38, 0x42, 0x41, 0x33, 0x37, 0x35, 0x37, 0x2c, 0x30, 0x78, 0x44, 0x41, 0x46, 0x43, 0x38, 0x39, 0x30, 0x45, 0x2c, 0x30, 0x78, 0x44, 0x42, 0x33, 0x45, 0x45, 0x33, 0x33, 0x39, 0x2c, 0x30, 0x78, 0x44, 0x45, 0x37, 0x31, 0x46, 0x35, 0x42, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x46, 0x42, 0x33, 0x39, 0x46, 0x38, 0x42, 0x2c, 0x30, 0x78, 0x44, 0x44, 0x46, 0x35, 0x32, 0x31, 0x44, 0x32, 0x2c, 0x30, 0x78, 0x44, 0x43, 0x33, 0x37, 0x34, 0x42, 0x45, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x37, 0x36, 0x42, 0x30, 0x43, 0x44, 0x38, 0x2c, 0x30, 0x78, 0x44, 0x36, 0x41, 0x39, 0x36, 0x36, 0x45, 0x46, 0x2c, 0x30, 0x78, 0x44, 0x34, 0x45, 0x46, 0x44, 0x38, 0x42, 0x36, 0x2c, 0x30, 0x78, 0x44, 0x35, 0x32, 0x44, 0x42, 0x32, 0x38, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x30, 0x36, 0x32, 0x41, 0x34, 0x30, 0x34, 0x2c, 0x30, 0x78, 0x44, 0x31, 0x41, 0x30, 0x43, 0x45, 0x33, 0x33, 0x2c, 0x30, 0x78, 0x44, 0x33, 0x45, 0x36, 0x37, 0x30, 0x36, 0x41, 0x2c, 0x30, 0x78, 0x44, 0x32, 0x32, 0x34, 0x31, 0x41, 0x35, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x35, 0x35, 0x45, 0x46, 0x45, 0x31, 0x30, 0x2c, 0x30, 0x78, 0x43, 0x34, 0x39, 0x43, 0x39, 0x34, 0x32, 0x37, 0x2c, 0x30, 0x78, 0x43, 0x36, 0x44, 0x41, 0x32, 0x41, 0x37, 0x45, 0x2c, 0x30, 0x78, 0x43, 0x37, 0x31, 0x38, 0x34, 0x30, 0x34, 0x39, 0x2c, 0x30, 0x78, 0x43, 0x32, 0x35, 0x37, 0x35, 0x36, 0x43, 0x43, 0x2c, 0x30, 0x78, 0x43, 0x33, 0x39, 0x35, 0x33, 0x43, 0x46, 0x42, 0x2c, 0x30, 0x78, 0x43, 0x31, 0x44, 0x33, 0x38, 0x32, 0x41, 0x32, 0x2c, 0x30, 0x78, 0x43, 0x30, 0x31, 0x31, 0x45, 0x38, 0x39, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x42, 0x34, 0x44, 0x41, 0x46, 0x41, 0x38, 0x2c, 0x30, 0x78, 0x43, 0x41, 0x38, 0x46, 0x43, 0x35, 0x39, 0x46, 0x2c, 0x30, 0x78, 0x43, 0x38, 0x43, 0x39, 0x37, 0x42, 0x43, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x39, 0x30, 0x42, 0x31, 0x31, 0x46, 0x31, 0x2c, 0x30, 0x78, 0x43, 0x43, 0x34, 0x34, 0x30, 0x37, 0x37, 0x34, 0x2c, 0x30, 0x78, 0x43, 0x44, 0x38, 0x36, 0x36, 0x44, 0x34, 0x33, 0x2c, 0x30, 0x78, 0x43, 0x46, 0x43, 0x30, 0x44, 0x33, 0x31, 0x41, 0x2c, 0x30, 0x78, 0x43, 0x45, 0x30, 0x32, 0x42, 0x39, 0x32, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x31, 0x41, 0x46, 0x39, 0x36, 0x34, 0x30, 0x2c, 0x30, 0x78, 0x39, 0x30, 0x36, 0x44, 0x46, 0x43, 0x37, 0x37, 0x2c, 0x30, 0x78, 0x39, 0x32, 0x32, 0x42, 0x34, 0x32, 0x32, 0x45, 0x2c, 0x30, 0x78, 0x39, 0x33, 0x45, 0x39, 0x32, 0x38, 0x31, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x36, 0x41, 0x36, 0x33, 0x45, 0x39, 0x43, 0x2c, 0x30, 0x78, 0x39, 0x37, 0x36, 0x34, 0x35, 0x34, 0x41, 0x42, 0x2c, 0x30, 0x78, 0x39, 0x35, 0x32, 0x32, 0x45, 0x41, 0x46, 0x32, 0x2c, 0x30, 0x78, 0x39, 0x34, 0x45, 0x30, 0x38, 0x30, 0x43, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x46, 0x42, 0x43, 0x43, 0x37, 0x46, 0x38, 0x2c, 0x30, 0x78, 0x39, 0x45, 0x37, 0x45, 0x41, 0x44, 0x43, 0x46, 0x2c, 0x30, 0x78, 0x39, 0x43, 0x33, 0x38, 0x31, 0x33, 0x39, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x44, 0x46, 0x41, 0x37, 0x39, 0x41, 0x31, 0x2c, 0x30, 0x78, 0x39, 0x38, 0x42, 0x35, 0x36, 0x46, 0x32, 0x34, 0x2c, 0x30, 0x78, 0x39, 0x39, 0x37, 0x37, 0x30, 0x35, 0x31, 0x33, 0x2c, 0x30, 0x78, 0x39, 0x42, 0x33, 0x31, 0x42, 0x42, 0x34, 0x41, 0x2c, 0x30, 0x78, 0x39, 0x41, 0x46, 0x33, 0x44, 0x31, 0x37, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x44, 0x38, 0x39, 0x33, 0x35, 0x33, 0x30, 0x2c, 0x30, 0x78, 0x38, 0x43, 0x34, 0x42, 0x35, 0x46, 0x30, 0x37, 0x2c, 0x30, 0x78, 0x38, 0x45, 0x30, 0x44, 0x45, 0x31, 0x35, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x46, 0x43, 0x46, 0x38, 0x42, 0x36, 0x39, 0x2c, 0x30, 0x78, 0x38, 0x41, 0x38, 0x30, 0x39, 0x44, 0x45, 0x43, 0x2c, 0x30, 0x78, 0x38, 0x42, 0x34, 0x32, 0x46, 0x37, 0x44, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x39, 0x30, 0x34, 0x34, 0x39, 0x38, 0x32, 0x2c, 0x30, 0x78, 0x38, 0x38, 0x43, 0x36, 0x32, 0x33, 0x42, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x33, 0x39, 0x41, 0x36, 0x34, 0x38, 0x38, 0x2c, 0x30, 0x78, 0x38, 0x32, 0x35, 0x38, 0x30, 0x45, 0x42, 0x46, 0x2c, 0x30, 0x78, 0x38, 0x30, 0x31, 0x45, 0x42, 0x30, 0x45, 0x36, 0x2c, 0x30, 0x78, 0x38, 0x31, 0x44, 0x43, 0x44, 0x41, 0x44, 0x31, 0x2c, 0x30, 0x78, 0x38, 0x34, 0x39, 0x33, 0x43, 0x43, 0x35, 0x34, 0x2c, 0x30, 0x78, 0x38, 0x35, 0x35, 0x31, 0x41, 0x36, 0x36, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x37, 0x31, 0x37, 0x31, 0x38, 0x33, 0x41, 0x2c, 0x30, 0x78, 0x38, 0x36, 0x44, 0x35, 0x37, 0x32, 0x30, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x39, 0x45, 0x32, 0x44, 0x30, 0x41, 0x30, 0x2c, 0x30, 0x78, 0x41, 0x38, 0x32, 0x30, 0x42, 0x41, 0x39, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x41, 0x36, 0x36, 0x30, 0x34, 0x43, 0x45, 0x2c, 0x30, 0x78, 0x41, 0x42, 0x41, 0x34, 0x36, 0x45, 0x46, 0x39, 0x2c, 0x30, 0x78, 0x41, 0x45, 0x45, 0x42, 0x37, 0x38, 0x37, 0x43, 0x2c, 0x30, 0x78, 0x41, 0x46, 0x32, 0x39, 0x31, 0x32, 0x34, 0x42, 0x2c, 0x30, 0x78, 0x41, 0x44, 0x36, 0x46, 0x41, 0x43, 0x31, 0x32, 0x2c, 0x30, 0x78, 0x41, 0x43, 0x41, 0x44, 0x43, 0x36, 0x32, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x37, 0x46, 0x31, 0x38, 0x31, 0x31, 0x38, 0x2c, 0x30, 0x78, 0x41, 0x36, 0x33, 0x33, 0x45, 0x42, 0x32, 0x46, 0x2c, 0x30, 0x78, 0x41, 0x34, 0x37, 0x35, 0x35, 0x35, 0x37, 0x36, 0x2c, 0x30, 0x78, 0x41, 0x35, 0x42, 0x37, 0x33, 0x46, 0x34, 0x31, 0x2c, 0x30, 0x78, 0x41, 0x30, 0x46, 0x38, 0x32, 0x39, 0x43, 0x34, 0x2c, 0x30, 0x78, 0x41, 0x31, 0x33, 0x41, 0x34, 0x33, 0x46, 0x33, 0x2c, 0x30, 0x78, 0x41, 0x33, 0x37, 0x43, 0x46, 0x44, 0x41, 0x41, 0x2c, 0x30, 0x78, 0x41, 0x32, 0x42, 0x45, 0x39, 0x37, 0x39, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x35, 0x43, 0x34, 0x37, 0x33, 0x44, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x34, 0x30, 0x36, 0x31, 0x39, 0x45, 0x37, 0x2c, 0x30, 0x78, 0x42, 0x36, 0x34, 0x30, 0x41, 0x37, 0x42, 0x45, 0x2c, 0x30, 0x78, 0x42, 0x37, 0x38, 0x32, 0x43, 0x44, 0x38, 0x39, 0x2c, 0x30, 0x78, 0x42, 0x32, 0x43, 0x44, 0x44, 0x42, 0x30, 0x43, 0x2c, 0x30, 0x78, 0x42, 0x33, 0x30, 0x46, 0x42, 0x31, 0x33, 0x42, 0x2c, 0x30, 0x78, 0x42, 0x31, 0x34, 0x39, 0x30, 0x46, 0x36, 0x32, 0x2c, 0x30, 0x78, 0x42, 0x30, 0x38, 0x42, 0x36, 0x35, 0x35, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x42, 0x44, 0x37, 0x32, 0x32, 0x36, 0x38, 0x2c, 0x30, 0x78, 0x42, 0x41, 0x31, 0x35, 0x34, 0x38, 0x35, 0x46, 0x2c, 0x30, 0x78, 0x42, 0x38, 0x35, 0x33, 0x46, 0x36, 0x30, 0x36, 0x2c, 0x30, 0x78, 0x42, 0x39, 0x39, 0x31, 0x39, 0x43, 0x33, 0x31, 0x2c, 0x30, 0x78, 0x42, 0x43, 0x44, 0x45, 0x38, 0x41, 0x42, 0x34, 0x2c, 0x30, 0x78, 0x42, 0x44, 0x31, 0x43, 0x45, 0x30, 0x38, 0x33, 0x2c, 0x30, 0x78, 0x42, 0x46, 0x35, 0x41, 0x35, 0x45, 0x44, 0x41, 0x2c, 0x30, 0x78, 0x42, 0x45, 0x39, 0x38, 0x33, 0x34, 0x45, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x38, 0x42, 0x43, 0x36, 0x37, 0x36, 0x35, 0x2c, 0x30, 0x78, 0x41, 0x41, 0x30, 0x39, 0x43, 0x38, 0x38, 0x42, 0x2c, 0x30, 0x78, 0x31, 0x32, 0x42, 0x35, 0x41, 0x46, 0x45, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x46, 0x36, 0x32, 0x39, 0x37, 0x35, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x37, 0x44, 0x45, 0x46, 0x30, 0x33, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x35, 0x36, 0x42, 0x35, 0x46, 0x44, 0x43, 0x2c, 0x30, 0x78, 0x39, 0x44, 0x44, 0x37, 0x33, 0x38, 0x42, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x35, 0x42, 0x34, 0x32, 0x38, 0x45, 0x46, 0x2c, 0x30, 0x78, 0x37, 0x44, 0x30, 0x38, 0x34, 0x46, 0x38, 0x41, 0x2c, 0x30, 0x78, 0x36, 0x46, 0x42, 0x44, 0x45, 0x30, 0x36, 0x34, 0x2c, 0x30, 0x78, 0x44, 0x37, 0x30, 0x31, 0x38, 0x37, 0x30, 0x31, 0x2c, 0x30, 0x78, 0x34, 0x41, 0x44, 0x36, 0x42, 0x46, 0x42, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x32, 0x36, 0x41, 0x44, 0x38, 0x44, 0x44, 0x2c, 0x30, 0x78, 0x45, 0x30, 0x44, 0x46, 0x37, 0x37, 0x33, 0x33, 0x2c, 0x30, 0x78, 0x35, 0x38, 0x36, 0x33, 0x31, 0x30, 0x35, 0x36, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x30, 0x31, 0x39, 0x35, 0x37, 0x39, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x38, 0x41, 0x35, 0x33, 0x30, 0x46, 0x41, 0x2c, 0x30, 0x78, 0x46, 0x41, 0x31, 0x30, 0x39, 0x46, 0x31, 0x34, 0x2c, 0x30, 0x78, 0x34, 0x32, 0x41, 0x43, 0x46, 0x38, 0x37, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x46, 0x37, 0x42, 0x43, 0x30, 0x43, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x37, 0x43, 0x37, 0x41, 0x37, 0x41, 0x44, 0x2c, 0x30, 0x78, 0x37, 0x35, 0x37, 0x32, 0x30, 0x38, 0x34, 0x33, 0x2c, 0x30, 0x78, 0x43, 0x44, 0x43, 0x45, 0x36, 0x46, 0x32, 0x36, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x35, 0x41, 0x44, 0x37, 0x46, 0x37, 0x30, 0x2c, 0x30, 0x78, 0x32, 0x44, 0x31, 0x31, 0x31, 0x38, 0x31, 0x35, 0x2c, 0x30, 0x78, 0x33, 0x46, 0x41, 0x34, 0x42, 0x37, 0x46, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x37, 0x31, 0x38, 0x44, 0x30, 0x39, 0x45, 0x2c, 0x30, 0x78, 0x31, 0x41, 0x43, 0x46, 0x45, 0x38, 0x32, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x32, 0x37, 0x33, 0x38, 0x46, 0x34, 0x32, 0x2c, 0x30, 0x78, 0x42, 0x30, 0x43, 0x36, 0x32, 0x30, 0x41, 0x43, 0x2c, 0x30, 0x78, 0x30, 0x38, 0x37, 0x41, 0x34, 0x37, 0x43, 0x39, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x30, 0x33, 0x32, 0x41, 0x46, 0x33, 0x45, 0x2c, 0x30, 0x78, 0x31, 0x38, 0x38, 0x45, 0x43, 0x38, 0x35, 0x42, 0x2c, 0x30, 0x78, 0x30, 0x41, 0x33, 0x42, 0x36, 0x37, 0x42, 0x35, 0x2c, 0x30, 0x78, 0x42, 0x32, 0x38, 0x37, 0x30, 0x30, 0x44, 0x30, 0x2c, 0x30, 0x78, 0x32, 0x46, 0x35, 0x30, 0x33, 0x38, 0x36, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x37, 0x45, 0x43, 0x35, 0x46, 0x30, 0x43, 0x2c, 0x30, 0x78, 0x38, 0x35, 0x35, 0x39, 0x46, 0x30, 0x45, 0x32, 0x2c, 0x30, 0x78, 0x33, 0x44, 0x45, 0x35, 0x39, 0x37, 0x38, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x35, 0x38, 0x36, 0x38, 0x37, 0x44, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x44, 0x33, 0x41, 0x45, 0x30, 0x42, 0x34, 0x2c, 0x30, 0x78, 0x43, 0x46, 0x38, 0x46, 0x34, 0x46, 0x35, 0x41, 0x2c, 0x30, 0x78, 0x37, 0x37, 0x33, 0x33, 0x32, 0x38, 0x33, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x41, 0x45, 0x34, 0x31, 0x30, 0x38, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x32, 0x35, 0x38, 0x37, 0x37, 0x45, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x30, 0x45, 0x44, 0x44, 0x38, 0x30, 0x44, 0x2c, 0x30, 0x78, 0x46, 0x38, 0x35, 0x31, 0x42, 0x46, 0x36, 0x38, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x30, 0x32, 0x42, 0x46, 0x38, 0x41, 0x31, 0x2c, 0x30, 0x78, 0x34, 0x38, 0x39, 0x37, 0x39, 0x46, 0x43, 0x34, 0x2c, 0x30, 0x78, 0x35, 0x41, 0x32, 0x32, 0x33, 0x30, 0x32, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x32, 0x39, 0x45, 0x35, 0x37, 0x34, 0x46, 0x2c, 0x30, 0x78, 0x37, 0x46, 0x34, 0x39, 0x36, 0x46, 0x46, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x37, 0x46, 0x35, 0x30, 0x38, 0x39, 0x33, 0x2c, 0x30, 0x78, 0x44, 0x35, 0x34, 0x30, 0x41, 0x37, 0x37, 0x44, 0x2c, 0x30, 0x78, 0x36, 0x44, 0x46, 0x43, 0x43, 0x30, 0x31, 0x38, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x35, 0x39, 0x46, 0x44, 0x30, 0x34, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x44, 0x32, 0x33, 0x42, 0x37, 0x32, 0x42, 0x2c, 0x30, 0x78, 0x39, 0x46, 0x39, 0x36, 0x31, 0x38, 0x43, 0x35, 0x2c, 0x30, 0x78, 0x32, 0x37, 0x32, 0x41, 0x37, 0x46, 0x41, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x41, 0x46, 0x44, 0x34, 0x37, 0x31, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x32, 0x34, 0x31, 0x32, 0x30, 0x37, 0x43, 0x2c, 0x30, 0x78, 0x31, 0x30, 0x46, 0x34, 0x38, 0x46, 0x39, 0x32, 0x2c, 0x30, 0x78, 0x41, 0x38, 0x34, 0x38, 0x45, 0x38, 0x46, 0x37, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x39, 0x42, 0x31, 0x34, 0x35, 0x38, 0x33, 0x44, 0x2c, 0x30, 0x78, 0x32, 0x33, 0x41, 0x38, 0x33, 0x46, 0x35, 0x38, 0x2c, 0x30, 0x78, 0x33, 0x31, 0x31, 0x44, 0x39, 0x30, 0x42, 0x36, 0x2c, 0x30, 0x78, 0x38, 0x39, 0x41, 0x31, 0x46, 0x37, 0x44, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x34, 0x37, 0x36, 0x43, 0x46, 0x36, 0x41, 0x2c, 0x30, 0x78, 0x41, 0x43, 0x43, 0x41, 0x41, 0x38, 0x30, 0x46, 0x2c, 0x30, 0x78, 0x42, 0x45, 0x37, 0x46, 0x30, 0x37, 0x45, 0x31, 0x2c, 0x30, 0x78, 0x30, 0x36, 0x43, 0x33, 0x36, 0x30, 0x38, 0x34, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x35, 0x45, 0x41, 0x30, 0x37, 0x30, 0x44, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x36, 0x31, 0x43, 0x31, 0x37, 0x42, 0x37, 0x2c, 0x30, 0x78, 0x46, 0x34, 0x41, 0x39, 0x42, 0x38, 0x35, 0x39, 0x2c, 0x30, 0x78, 0x34, 0x43, 0x31, 0x35, 0x44, 0x46, 0x33, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x31, 0x43, 0x32, 0x45, 0x37, 0x38, 0x35, 0x2c, 0x30, 0x78, 0x36, 0x39, 0x37, 0x45, 0x38, 0x30, 0x45, 0x30, 0x2c, 0x30, 0x78, 0x37, 0x42, 0x43, 0x42, 0x32, 0x46, 0x30, 0x45, 0x2c, 0x30, 0x78, 0x43, 0x33, 0x37, 0x37, 0x34, 0x38, 0x36, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x43, 0x42, 0x30, 0x44, 0x30, 0x46, 0x41, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x33, 0x42, 0x31, 0x36, 0x38, 0x43, 0x37, 0x2c, 0x30, 0x78, 0x36, 0x31, 0x30, 0x34, 0x43, 0x37, 0x32, 0x39, 0x2c, 0x30, 0x78, 0x44, 0x39, 0x42, 0x38, 0x41, 0x30, 0x34, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x34, 0x36, 0x46, 0x39, 0x38, 0x46, 0x35, 0x2c, 0x30, 0x78, 0x46, 0x43, 0x44, 0x33, 0x46, 0x46, 0x39, 0x30, 0x2c, 0x30, 0x78, 0x45, 0x45, 0x36, 0x36, 0x35, 0x30, 0x37, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x36, 0x44, 0x41, 0x33, 0x37, 0x31, 0x42, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x30, 0x45, 0x42, 0x39, 0x32, 0x37, 0x34, 0x44, 0x2c, 0x30, 0x78, 0x42, 0x36, 0x30, 0x35, 0x34, 0x30, 0x32, 0x38, 0x2c, 0x30, 0x78, 0x41, 0x34, 0x42, 0x30, 0x45, 0x46, 0x43, 0x36, 0x2c, 0x30, 0x78, 0x31, 0x43, 0x30, 0x43, 0x38, 0x38, 0x41, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x31, 0x44, 0x42, 0x42, 0x30, 0x31, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x39, 0x36, 0x37, 0x44, 0x37, 0x37, 0x46, 0x2c, 0x30, 0x78, 0x32, 0x42, 0x44, 0x32, 0x37, 0x38, 0x39, 0x31, 0x2c, 0x30, 0x78, 0x39, 0x33, 0x36, 0x45, 0x31, 0x46, 0x46, 0x34, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x33, 0x42, 0x32, 0x36, 0x46, 0x37, 0x30, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x33, 0x39, 0x41, 0x39, 0x30, 0x36, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x31, 0x32, 0x46, 0x33, 0x46, 0x38, 0x38, 0x2c, 0x30, 0x78, 0x32, 0x39, 0x39, 0x33, 0x35, 0x38, 0x45, 0x44, 0x2c, 0x30, 0x78, 0x42, 0x34, 0x34, 0x34, 0x36, 0x30, 0x35, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x43, 0x46, 0x38, 0x30, 0x37, 0x33, 0x31, 0x2c, 0x30, 0x78, 0x31, 0x45, 0x34, 0x44, 0x41, 0x38, 0x44, 0x46, 0x2c, 0x30, 0x78, 0x41, 0x36, 0x46, 0x31, 0x43, 0x46, 0x42, 0x41, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x46, 0x45, 0x39, 0x32, 0x44, 0x46, 0x45, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x36, 0x32, 0x45, 0x42, 0x38, 0x38, 0x39, 0x2c, 0x30, 0x78, 0x35, 0x34, 0x39, 0x42, 0x31, 0x37, 0x36, 0x37, 0x2c, 0x30, 0x78, 0x45, 0x43, 0x32, 0x37, 0x37, 0x30, 0x30, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x31, 0x46, 0x30, 0x34, 0x38, 0x42, 0x42, 0x2c, 0x30, 0x78, 0x43, 0x39, 0x34, 0x43, 0x32, 0x46, 0x44, 0x45, 0x2c, 0x30, 0x78, 0x44, 0x42, 0x46, 0x39, 0x38, 0x30, 0x33, 0x30, 0x2c, 0x30, 0x78, 0x36, 0x33, 0x34, 0x35, 0x45, 0x37, 0x35, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x36, 0x42, 0x33, 0x46, 0x41, 0x30, 0x39, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x33, 0x38, 0x33, 0x43, 0x37, 0x46, 0x39, 0x2c, 0x30, 0x78, 0x43, 0x31, 0x33, 0x36, 0x36, 0x38, 0x31, 0x37, 0x2c, 0x30, 0x78, 0x37, 0x39, 0x38, 0x41, 0x30, 0x46, 0x37, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x34, 0x35, 0x44, 0x33, 0x37, 0x43, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x43, 0x45, 0x31, 0x35, 0x30, 0x41, 0x45, 0x2c, 0x30, 0x78, 0x34, 0x45, 0x35, 0x34, 0x46, 0x46, 0x34, 0x30, 0x2c, 0x30, 0x78, 0x46, 0x36, 0x45, 0x38, 0x39, 0x38, 0x32, 0x35, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x41, 0x45, 0x38, 0x42, 0x38, 0x38, 0x37, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x36, 0x33, 0x37, 0x45, 0x46, 0x31, 0x36, 0x2c, 0x30, 0x78, 0x30, 0x34, 0x38, 0x32, 0x34, 0x30, 0x46, 0x38, 0x2c, 0x30, 0x78, 0x42, 0x43, 0x33, 0x45, 0x32, 0x37, 0x39, 0x44, 0x2c, 0x30, 0x78, 0x32, 0x31, 0x45, 0x39, 0x31, 0x46, 0x32, 0x34, 0x2c, 0x30, 0x78, 0x39, 0x39, 0x35, 0x35, 0x37, 0x38, 0x34, 0x31, 0x2c, 0x30, 0x78, 0x38, 0x42, 0x45, 0x30, 0x44, 0x37, 0x41, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x33, 0x35, 0x43, 0x42, 0x30, 0x43, 0x41, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x44, 0x35, 0x39, 0x42, 0x36, 0x33, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x35, 0x45, 0x35, 0x44, 0x31, 0x35, 0x45, 0x2c, 0x30, 0x78, 0x34, 0x37, 0x35, 0x30, 0x37, 0x45, 0x42, 0x30, 0x2c, 0x30, 0x78, 0x46, 0x46, 0x45, 0x43, 0x31, 0x39, 0x44, 0x35, 0x2c, 0x30, 0x78, 0x36, 0x32, 0x33, 0x42, 0x32, 0x31, 0x36, 0x43, 0x2c, 0x30, 0x78, 0x44, 0x41, 0x38, 0x37, 0x34, 0x36, 0x30, 0x39, 0x2c, 0x30, 0x78, 0x43, 0x38, 0x33, 0x32, 0x45, 0x39, 0x45, 0x37, 0x2c, 0x30, 0x78, 0x37, 0x30, 0x38, 0x45, 0x38, 0x45, 0x38, 0x32, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x38, 0x45, 0x44, 0x39, 0x45, 0x44, 0x34, 0x2c, 0x30, 0x78, 0x39, 0x30, 0x35, 0x31, 0x46, 0x39, 0x42, 0x31, 0x2c, 0x30, 0x78, 0x38, 0x32, 0x45, 0x34, 0x35, 0x36, 0x35, 0x46, 0x2c, 0x30, 0x78, 0x33, 0x41, 0x35, 0x38, 0x33, 0x31, 0x33, 0x41, 0x2c, 0x30, 0x78, 0x41, 0x37, 0x38, 0x46, 0x30, 0x39, 0x38, 0x33, 0x2c, 0x30, 0x78, 0x31, 0x46, 0x33, 0x33, 0x36, 0x45, 0x45, 0x36, 0x2c, 0x30, 0x78, 0x30, 0x44, 0x38, 0x36, 0x43, 0x31, 0x30, 0x38, 0x2c, 0x30, 0x78, 0x42, 0x35, 0x33, 0x41, 0x41, 0x36, 0x36, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x44, 0x34, 0x30, 0x45, 0x31, 0x41, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x35, 0x46, 0x43, 0x38, 0x36, 0x43, 0x31, 0x2c, 0x30, 0x78, 0x31, 0x37, 0x34, 0x39, 0x32, 0x39, 0x32, 0x46, 0x2c, 0x30, 0x78, 0x41, 0x46, 0x46, 0x35, 0x34, 0x45, 0x34, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x32, 0x32, 0x32, 0x37, 0x36, 0x46, 0x33, 0x2c, 0x30, 0x78, 0x38, 0x41, 0x39, 0x45, 0x31, 0x31, 0x39, 0x36, 0x2c, 0x30, 0x78, 0x39, 0x38, 0x32, 0x42, 0x42, 0x45, 0x37, 0x38, 0x2c, 0x30, 0x78, 0x32, 0x30, 0x39, 0x37, 0x44, 0x39, 0x31, 0x44, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x38, 0x46, 0x34, 0x43, 0x39, 0x34, 0x42, 0x2c, 0x30, 0x78, 0x43, 0x30, 0x34, 0x38, 0x41, 0x45, 0x32, 0x45, 0x2c, 0x30, 0x78, 0x44, 0x32, 0x46, 0x44, 0x30, 0x31, 0x43, 0x30, 0x2c, 0x30, 0x78, 0x36, 0x41, 0x34, 0x31, 0x36, 0x36, 0x41, 0x35, 0x2c, 0x30, 0x78, 0x46, 0x37, 0x39, 0x36, 0x35, 0x45, 0x31, 0x43, 0x2c, 0x30, 0x78, 0x34, 0x46, 0x32, 0x41, 0x33, 0x39, 0x37, 0x39, 0x2c, 0x30, 0x78, 0x35, 0x44, 0x39, 0x46, 0x39, 0x36, 0x39, 0x37, 0x2c, 0x30, 0x78, 0x45, 0x35, 0x32, 0x33, 0x46, 0x31, 0x46, 0x32, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x44, 0x36, 0x42, 0x31, 0x39, 0x30, 0x35, 0x2c, 0x30, 0x78, 0x46, 0x35, 0x44, 0x37, 0x37, 0x45, 0x36, 0x30, 0x2c, 0x30, 0x78, 0x45, 0x37, 0x36, 0x32, 0x44, 0x31, 0x38, 0x45, 0x2c, 0x30, 0x78, 0x35, 0x46, 0x44, 0x45, 0x42, 0x36, 0x45, 0x42, 0x2c, 0x30, 0x78, 0x43, 0x32, 0x30, 0x39, 0x38, 0x45, 0x35, 0x32, 0x2c, 0x30, 0x78, 0x37, 0x41, 0x42, 0x35, 0x45, 0x39, 0x33, 0x37, 0x2c, 0x30, 0x78, 0x36, 0x38, 0x30, 0x30, 0x34, 0x36, 0x44, 0x39, 0x2c, 0x30, 0x78, 0x44, 0x30, 0x42, 0x43, 0x32, 0x31, 0x42, 0x43, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x38, 0x44, 0x46, 0x33, 0x31, 0x45, 0x41, 0x2c, 0x30, 0x78, 0x33, 0x30, 0x36, 0x33, 0x35, 0x36, 0x38, 0x46, 0x2c, 0x30, 0x78, 0x32, 0x32, 0x44, 0x36, 0x46, 0x39, 0x36, 0x31, 0x2c, 0x30, 0x78, 0x39, 0x41, 0x36, 0x41, 0x39, 0x45, 0x30, 0x34, 0x2c, 0x30, 0x78, 0x30, 0x37, 0x42, 0x44, 0x41, 0x36, 0x42, 0x44, 0x2c, 0x30, 0x78, 0x42, 0x46, 0x30, 0x31, 0x43, 0x31, 0x44, 0x38, 0x2c, 0x30, 0x78, 0x41, 0x44, 0x42, 0x34, 0x36, 0x45, 0x33, 0x36, 0x2c, 0x30, 0x78, 0x31, 0x35, 0x30, 0x38, 0x30, 0x39, 0x35, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x44, 0x37, 0x32, 0x34, 0x45, 0x39, 0x41, 0x2c, 0x30, 0x78, 0x41, 0x35, 0x43, 0x45, 0x32, 0x39, 0x46, 0x46, 0x2c, 0x30, 0x78, 0x42, 0x37, 0x37, 0x42, 0x38, 0x36, 0x31, 0x31, 0x2c, 0x30, 0x78, 0x30, 0x46, 0x43, 0x37, 0x45, 0x31, 0x37, 0x34, 0x2c, 0x30, 0x78, 0x39, 0x32, 0x31, 0x30, 0x44, 0x39, 0x43, 0x44, 0x2c, 0x30, 0x78, 0x32, 0x41, 0x41, 0x43, 0x42, 0x45, 0x41, 0x38, 0x2c, 0x30, 0x78, 0x33, 0x38, 0x31, 0x39, 0x31, 0x31, 0x34, 0x36, 0x2c, 0x30, 0x78, 0x38, 0x30, 0x41, 0x35, 0x37, 0x36, 0x32, 0x33, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x38, 0x43, 0x36, 0x36, 0x36, 0x37, 0x35, 0x2c, 0x30, 0x78, 0x36, 0x30, 0x37, 0x41, 0x30, 0x31, 0x31, 0x30, 0x2c, 0x30, 0x78, 0x37, 0x32, 0x43, 0x46, 0x41, 0x45, 0x46, 0x45, 0x2c, 0x30, 0x78, 0x43, 0x41, 0x37, 0x33, 0x43, 0x39, 0x39, 0x42, 0x2c, 0x30, 0x78, 0x35, 0x37, 0x41, 0x34, 0x46, 0x31, 0x32, 0x32, 0x2c, 0x30, 0x78, 0x45, 0x46, 0x31, 0x38, 0x39, 0x36, 0x34, 0x37, 0x2c, 0x30, 0x78, 0x46, 0x44, 0x41, 0x44, 0x33, 0x39, 0x41, 0x39, 0x2c, 0x30, 0x78, 0x34, 0x35, 0x31, 0x31, 0x35, 0x45, 0x43, 0x43, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x37, 0x36, 0x34, 0x44, 0x45, 0x45, 0x30, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x45, 0x46, 0x31, 0x38, 0x39, 0x36, 0x33, 0x2c, 0x30, 0x78, 0x44, 0x43, 0x34, 0x34, 0x32, 0x36, 0x38, 0x44, 0x2c, 0x30, 0x78, 0x36, 0x34, 0x46, 0x38, 0x34, 0x31, 0x45, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x39, 0x32, 0x46, 0x37, 0x39, 0x35, 0x31, 0x2c, 0x30, 0x78, 0x34, 0x31, 0x39, 0x33, 0x31, 0x45, 0x33, 0x34, 0x2c, 0x30, 0x78, 0x35, 0x33, 0x32, 0x36, 0x42, 0x31, 0x44, 0x41, 0x2c, 0x30, 0x78, 0x45, 0x42, 0x39, 0x41, 0x44, 0x36, 0x42, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x42, 0x33, 0x46, 0x39, 0x43, 0x36, 0x45, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x42, 0x34, 0x35, 0x41, 0x31, 0x38, 0x43, 0x2c, 0x30, 0x78, 0x31, 0x39, 0x46, 0x30, 0x30, 0x45, 0x36, 0x32, 0x2c, 0x30, 0x78, 0x41, 0x31, 0x34, 0x43, 0x36, 0x39, 0x30, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x43, 0x39, 0x42, 0x35, 0x31, 0x42, 0x45, 0x2c, 0x30, 0x78, 0x38, 0x34, 0x32, 0x37, 0x33, 0x36, 0x44, 0x42, 0x2c, 0x30, 0x78, 0x39, 0x36, 0x39, 0x32, 0x39, 0x39, 0x33, 0x35, 0x2c, 0x30, 0x78, 0x32, 0x45, 0x32, 0x45, 0x46, 0x45, 0x35, 0x30, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x32, 0x36, 0x35, 0x34, 0x42, 0x39, 0x39, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x45, 0x45, 0x38, 0x44, 0x45, 0x46, 0x43, 0x2c, 0x30, 0x78, 0x38, 0x43, 0x35, 0x44, 0x37, 0x31, 0x31, 0x32, 0x2c, 0x30, 0x78, 0x33, 0x34, 0x45, 0x31, 0x31, 0x36, 0x37, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x39, 0x33, 0x36, 0x32, 0x45, 0x43, 0x45, 0x2c, 0x30, 0x78, 0x31, 0x31, 0x38, 0x41, 0x34, 0x39, 0x41, 0x42, 0x2c, 0x30, 0x78, 0x30, 0x33, 0x33, 0x46, 0x45, 0x36, 0x34, 0x35, 0x2c, 0x30, 0x78, 0x42, 0x42, 0x38, 0x33, 0x38, 0x31, 0x32, 0x30, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x45, 0x33, 0x45, 0x30, 0x39, 0x31, 0x37, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x42, 0x35, 0x43, 0x46, 0x36, 0x31, 0x33, 0x2c, 0x30, 0x78, 0x34, 0x39, 0x45, 0x39, 0x35, 0x39, 0x46, 0x44, 0x2c, 0x30, 0x78, 0x46, 0x31, 0x35, 0x35, 0x33, 0x45, 0x39, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x43, 0x38, 0x32, 0x30, 0x36, 0x32, 0x31, 0x2c, 0x30, 0x78, 0x44, 0x34, 0x33, 0x45, 0x36, 0x31, 0x34, 0x34, 0x2c, 0x30, 0x78, 0x43, 0x36, 0x38, 0x42, 0x43, 0x45, 0x41, 0x41, 0x2c, 0x30, 0x78, 0x37, 0x45, 0x33, 0x37, 0x41, 0x39, 0x43, 0x46, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x44, 0x36, 0x37, 0x46, 0x34, 0x31, 0x33, 0x38, 0x2c, 0x30, 0x78, 0x36, 0x45, 0x43, 0x33, 0x32, 0x36, 0x35, 0x44, 0x2c, 0x30, 0x78, 0x37, 0x43, 0x37, 0x36, 0x38, 0x39, 0x42, 0x33, 0x2c, 0x30, 0x78, 0x43, 0x34, 0x43, 0x41, 0x45, 0x45, 0x44, 0x36, 0x2c, 0x30, 0x78, 0x35, 0x39, 0x31, 0x44, 0x44, 0x36, 0x36, 0x46, 0x2c, 0x30, 0x78, 0x45, 0x31, 0x41, 0x31, 0x42, 0x31, 0x30, 0x41, 0x2c, 0x30, 0x78, 0x46, 0x33, 0x31, 0x34, 0x31, 0x45, 0x45, 0x34, 0x2c, 0x30, 0x78, 0x34, 0x42, 0x41, 0x38, 0x37, 0x39, 0x38, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x31, 0x33, 0x43, 0x42, 0x36, 0x39, 0x44, 0x37, 0x2c, 0x30, 0x78, 0x41, 0x42, 0x37, 0x37, 0x30, 0x45, 0x42, 0x32, 0x2c, 0x30, 0x78, 0x42, 0x39, 0x43, 0x32, 0x41, 0x31, 0x35, 0x43, 0x2c, 0x30, 0x78, 0x30, 0x31, 0x37, 0x45, 0x43, 0x36, 0x33, 0x39, 0x2c, 0x30, 0x78, 0x39, 0x43, 0x41, 0x39, 0x46, 0x45, 0x38, 0x30, 0x2c, 0x30, 0x78, 0x32, 0x34, 0x31, 0x35, 0x39, 0x39, 0x45, 0x35, 0x2c, 0x30, 0x78, 0x33, 0x36, 0x41, 0x30, 0x33, 0x36, 0x30, 0x42, 0x2c, 0x30, 0x78, 0x38, 0x45, 0x31, 0x43, 0x35, 0x31, 0x36, 0x45, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x38, 0x36, 0x36, 0x36, 0x31, 0x36, 0x41, 0x37, 0x2c, 0x30, 0x78, 0x33, 0x45, 0x44, 0x41, 0x37, 0x31, 0x43, 0x32, 0x2c, 0x30, 0x78, 0x32, 0x43, 0x36, 0x46, 0x44, 0x45, 0x32, 0x43, 0x2c, 0x30, 0x78, 0x39, 0x34, 0x44, 0x33, 0x42, 0x39, 0x34, 0x39, 0x2c, 0x30, 0x78, 0x30, 0x39, 0x30, 0x34, 0x38, 0x31, 0x46, 0x30, 0x2c, 0x30, 0x78, 0x42, 0x31, 0x42, 0x38, 0x45, 0x36, 0x39, 0x35, 0x2c, 0x30, 0x78, 0x41, 0x33, 0x30, 0x44, 0x34, 0x39, 0x37, 0x42, 0x2c, 0x30, 0x78, 0x31, 0x42, 0x42, 0x31, 0x32, 0x45, 0x31, 0x45, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x78, 0x34, 0x33, 0x44, 0x32, 0x33, 0x45, 0x34, 0x38, 0x2c, 0x30, 0x78, 0x46, 0x42, 0x36, 0x45, 0x35, 0x39, 0x32, 0x44, 0x2c, 0x30, 0x78, 0x45, 0x39, 0x44, 0x42, 0x46, 0x36, 0x43, 0x33, 0x2c, 0x30, 0x78, 0x35, 0x31, 0x36, 0x37, 0x39, 0x31, 0x41, 0x36, 0x2c, 0x30, 0x78, 0x43, 0x43, 0x42, 0x30, 0x41, 0x39, 0x31, 0x46, 0x2c, 0x30, 0x78, 0x37, 0x34, 0x30, 0x43, 0x43, 0x45, 0x37, 0x41, 0x2c, 0x30, 0x78, 0x36, 0x36, 0x42, 0x39, 0x36, 0x31, 0x39, 0x34, 0x2c, 0x30, 0x78, 0x44, 0x45, 0x30, 0x35, 0x30, 0x36, 0x46, 0x31, 0x2c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x7d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0xd, 0xa, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x4d, 0x53, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x4d, 0x49, 0x4e, 0x47, 0x57, 0x33, 0x32, 0x5f, 0x5f, 0x29, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x5f, 0x4c, 0x49, 0x54, 0x54, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0x20, 0x31, 0x32, 0x33, 0x34, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x5f, 0x42, 0x49, 0x47, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x34, 0x33, 0x32, 0x31, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x4c, 0x49, 0x54, 0x54, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x45, 0x5f, 0x5f, 0x29, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x79, 0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x44, 0x41, 0x52, 0x57, 0x49, 0x4e, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x5f, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x20, 0x61, 0x73, 0x20, 0x5f, 0x5f, 0x4c, 0x49, 0x54, 0x54, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0x20, 0x6f, 0x72, 0x20, 0x5f, 0x5f, 0x42, 0x49, 0x47, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x79, 0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2f, 0x2f, 0x20, 0x73, 0x77, 0x61, 0x70, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x65, 0x73, 0x73, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x47, 0x4e, 0x55, 0x43, 0x5f, 0x5f, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x5f, 0x5f, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x5f, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x62, 0x73, 0x77, 0x61, 0x70, 0x33, 0x32, 0x28, 0x78, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x34, 0x29, 0x20, 0x7c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x30, 0x30, 0x29, 0x20, 0x7c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x78, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x7c, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x78, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x5f, 0x34, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x43, 0x72, 0x63, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x20, 0x63, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x7e, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x43, 0x72, 0x63, 0x33, 0x32, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x43, 0x72, 0x63, 0x33, 0x32, 0x20, 0x5e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x2a, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x2a, 0x29, 0x64, 0x61, 0x74, 0x61, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x61, 0x74, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x28, 0x53, 0x6c, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x79, 0x2d, 0x34, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x3d, 0x20, 0x34, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7b, 0xd, 0xa, 0x23, 0x69, 0x66, 0x20, 0x5f, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x20, 0x3d, 0x3d, 0x20, 0x5f, 0x5f, 0x42, 0x49, 0x47, 0x5f, 0x45, 0x4e, 0x44, 0x49, 0x41, 0x4e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x2a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x2b, 0x2b, 0x20, 0x5e, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x28, 0x63, 0x72, 0x63, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x30, 0x5d, 0x5b, 0x6f, 0x6e, 0x65, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x31, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x32, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x33, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6c, 0x73, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x2a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x2b, 0x2b, 0x20, 0x5e, 0x20, 0x63, 0x72, 0x63, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x30, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x31, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x32, 0x5d, 0x5b, 0x28, 0x6f, 0x6e, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x20, 0x5e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x33, 0x5d, 0x5b, 0x6f, 0x6e, 0x65, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x5d, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x3d, 0x20, 0x34, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x29, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x33, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, 0x2d, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x72, 0x63, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x5e, 0x20, 0x65, 0x6d, 0x61, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x43, 0x72, 0x63, 0x33, 0x32, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5b, 0x30, 0x5d, 0x5b, 0x28, 0x63, 0x72, 0x63, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x29, 0x20, 0x5e, 0x20, 0x2a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x72, 0x2b, 0x2b, 0x5d, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7e, 0x63, 0x72, 0x63, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x63, 0x72, 0x63, 0x20, 0x5e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xd, 0xa, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2d, 0x2d, 0x20, 0x54, 0x6f, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x20, 0x57, 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x7b, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x47, 0x5a, 0x49, 0x50, 0x2c, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x5a, 0x4c, 0x49, 0x42, 0x20, 0x7d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x74, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x49, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x29, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x20, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x66, 0x20, 0x26, 0x26, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x62, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x38, 0x20, 0x2f, 0x2a, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2f, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6b, 0x69, 0x70, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x2a, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x36, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x32, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x34, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x78, 0x74, 0x72, 0x61, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x77, 0x6f, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x65, 0x6e, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x65, 0x6e, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x38, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3e, 0x3d, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x2d, 0x31, 0x5d, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x30, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3e, 0x3d, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2b, 0x2b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x2d, 0x31, 0x5d, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x32, 0x30, 0x29, 0x20, 0x7b, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x47, 0x5a, 0x49, 0x50, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x66, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x38, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x3f, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x43, 0x4d, 0x46, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x46, 0x4c, 0x47, 0x20, 0x3d, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x31, 0x5d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x46, 0x4c, 0x47, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x29, 0x43, 0x4d, 0x46, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x43, 0x4d, 0x46, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x20, 0x3c, 0x3d, 0x20, 0x37, 0x20, 0x26, 0x26, 0x20, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x25, 0x20, 0x33, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x46, 0x4c, 0x47, 0x20, 0x26, 0x20, 0x30, 0x78, 0x32, 0x30, 0x29, 0x20, 0x7b, 0x20, 0x2f, 0x2a, 0x20, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x5a, 0x4c, 0x49, 0x42, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x5a, 0x4c, 0x49, 0x42, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x5f, 0x7a, 0x28, 0x30, 0x2c, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73, 0x20, 0x62, 0x69, 0x74, 0x2d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x32, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x30, 0x3a, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x3a, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x30, 0x20, 0x2f, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x32, 0x3a, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x31, 0x20, 0x2f, 0x2a, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x2a, 0x2f, 0x2c, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x33, 0x3a, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x47, 0x5a, 0x49, 0x50, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x63, 0x33, 0x32, 0x5f, 0x34, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x5a, 0x4c, 0x49, 0x42, 0x29, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x5f, 0x7a, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x2c, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x3b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x21, 0x6e, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x5f, 0x6c, 0x73, 0x62, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x28, 0x26, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x20, 0x69, 0x74, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x47, 0x5a, 0x49, 0x50, 0x3a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x2d, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x63, 0x72, 0x63, 0x33, 0x32, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x32, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x33, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x21, 0x3d, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x5f, 0x5a, 0x4c, 0x49, 0x42, 0x3a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x67, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x61, 0x64, 0x6c, 0x65, 0x72, 0x33, 0x32, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x20, 0x3e, 0x20, 0x70, 0x45, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x30, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x31, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x32, 0x5d, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x28, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x5b, 0x33, 0x5d, 0x29, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x20, 0x21, 0x3d, 0x20, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x70, 0x43, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x2f, 0x2a, 0x20, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0xd, 0xa, 0x20, 0x20, 0x20, 0x7d, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x55, 0x4d, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0xd, 0xa, 0x7d, 0xd, 0xa +}; +unsigned int _binary_lib_inflate_em_inflate_c_len = 54198; + +const char _binary_lib_inflate_em_inflate_h_start[] = { +0x2f, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x68, 0x20, 0x2d, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x2d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x67, 0x7a, 0x69, 0x70, 0x2f, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x29, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x39, 0x20, 0x45, 0x6d, 0x6d, 0x61, 0x6e, 0x75, 0x65, 0x6c, 0x20, 0x4d, 0x61, 0x72, 0x74, 0x79, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x27, 0x61, 0x73, 0x2d, 0x69, 0x73, 0x27, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x62, 0x65, 0x20, 0x68, 0x65, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x2c, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x66, 0x72, 0x65, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x31, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x3b, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x70, 0x70, 0x72, 0x65, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x33, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x48, 0xd, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x48, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x2e, 0x68, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xd, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0x2f, 0x2a, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x49, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0x20, 0x2a, 0xd, 0xa, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xd, 0xa, 0x20, 0x2a, 0x2f, 0xd, 0xa, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x2a, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x70, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x4d, 0x61, 0x78, 0x4f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xd, 0xa, 0xd, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xd, 0xa, 0x7d, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x20, 0x2f, 0x2a, 0x20, 0x5f, 0x45, 0x4d, 0x5f, 0x49, 0x4e, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x48, 0x20, 0x2a, 0x2f, 0xd, 0xa +}; +unsigned int _binary_lib_inflate_em_inflate_h_len = 1708; + +const char _binary_lib_libffi_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x5f, 0x63, 0x69, 0x66, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x61, 0x62, 0x69, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x62, 0x69, 0x6e, 0x64, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x53, 0x6c, 0x6f, 0x77, 0x41, 0x70, 0x69, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x62, 0x69, 0x6e, 0x64, 0x53, 0x6c, 0x6f, 0x77, 0x41, 0x70, 0x69, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x28, 0x2a, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x28, 0x29, 0x3b, 0xa, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x66, 0x69, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x63, 0x66, 0x75, 0x6e, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x20, 0x63, 0x69, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x20, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x28, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x20, 0x74, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x42, 0x6f, 0x6f, 0x6c, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x53, 0x65, 0x71, 0x4f, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x49, 0x73, 0x54, 0x79, 0x70, 0x65, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x3a, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x76, 0x38, 0x3a, 0x3a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x20, 0x46, 0x46, 0x49, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x33, 0x32, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x38, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x26, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x6f, 0x69, 0x64, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x31, 0x30, 0x20, 0x6e, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0xa, 0x2f, 0x2f, 0x20, 0x34, 0x36, 0x20, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x6e, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x29, 0xa, 0x2f, 0x2f, 0x20, 0x34, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x72, 0x67, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x34, 0x6e, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xa, 0x2f, 0x2f, 0x20, 0x33, 0x30, 0x20, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x66, 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x41, 0x73, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x20, 0x63, 0x69, 0x66, 0x20, 0x3d, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x63, 0x69, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x61, 0x72, 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x36, 0x34, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x38, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x38, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x75, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x70, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x33, 0x32, 0x2d, 0x3e, 0x42, 0x79, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x70, 0x74, 0x72, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x55, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x72, 0x67, 0x30, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x64, 0x75, 0x70, 0x28, 0x2a, 0x61, 0x72, 0x67, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x69, 0x66, 0x2c, 0x20, 0x46, 0x46, 0x49, 0x5f, 0x46, 0x4e, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x66, 0x66, 0x69, 0x29, 0x2c, 0x20, 0x26, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x2a, 0x29, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x2d, 0x3e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x2d, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x29, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x53, 0x6c, 0x6f, 0x77, 0x41, 0x70, 0x69, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x20, 0x63, 0x69, 0x66, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x66, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x63, 0x69, 0x66, 0x20, 0x3d, 0x20, 0x63, 0x69, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x66, 0x66, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x20, 0x66, 0x66, 0x69, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x2a, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x70, 0x74, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x20, 0x3e, 0x20, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x5f, 0x63, 0x69, 0x66, 0x28, 0x63, 0x69, 0x66, 0x2c, 0x20, 0x46, 0x46, 0x49, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x41, 0x42, 0x49, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x5f, 0x4f, 0x4b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x70, 0x69, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x46, 0x61, 0x73, 0x74, 0x41, 0x70, 0x69, 0x53, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3e, 0x20, 0x26, 0x61, 0x72, 0x67, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x3c, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x3e, 0x28, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x31, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x32, 0x5d, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x41, 0x73, 0x3c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3e, 0x28, 0x29, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x74, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x32, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x70, 0x6c, 0x2d, 0x3e, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x20, 0x63, 0x69, 0x66, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x63, 0x69, 0x66, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x66, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x66, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x63, 0x69, 0x66, 0x20, 0x3d, 0x20, 0x63, 0x69, 0x66, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x3e, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x31, 0x2c, 0x20, 0x66, 0x66, 0x6e, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2d, 0x3e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x20, 0x66, 0x66, 0x69, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x2a, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x66, 0x66, 0x69, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x28, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x72, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x56, 0x38, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3e, 0x3a, 0x3a, 0x43, 0x61, 0x73, 0x74, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x29, 0x2d, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x70, 0x74, 0x79, 0x70, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x29, 0x70, 0x74, 0x79, 0x70, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x29, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x6e, 0x61, 0x72, 0x67, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x38, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x31, 0x36, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x69, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6c, 0x6f, 0x3a, 0x3a, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x34, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x38, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x20, 0x3e, 0x20, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x5b, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x2a, 0x43, 0x54, 0x79, 0x70, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x38, 0x28, 0x46, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x66, 0x69, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x5f, 0x63, 0x69, 0x66, 0x28, 0x63, 0x69, 0x66, 0x2c, 0x20, 0x46, 0x46, 0x49, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x41, 0x42, 0x49, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x46, 0x46, 0x49, 0x5f, 0x4f, 0x4b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x66, 0x69, 0x78, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x70, 0x69, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x2a, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x66, 0x6e, 0x2d, 0x3e, 0x63, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x4e, 0x65, 0x77, 0x28, 0xa, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x6c, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3e, 0x28, 0x29, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x3a, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x3a, 0x6b, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x61, 0x73, 0x74, 0x43, 0x46, 0x75, 0x6e, 0x63, 0xa, 0x20, 0x20, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x3a, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x6a, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x2f, 0x34, 0x36, 0x36, 0x31, 0x39, 0xa, 0x20, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x20, 0x3d, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x2e, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x2e, 0x53, 0x65, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x29, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x60, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x66, 0x66, 0x69, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x66, 0x66, 0x69, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x66, 0x66, 0x69, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_libffi_api_js_len = 13834; + +const char _binary_lib_libssl_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x27, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x6b, 0x65, 0x79, 0x67, 0x65, 0x6e, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x6b, 0x65, 0x79, 0x67, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x62, 0x79, 0x6e, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x62, 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x5f, 0x65, 0x78, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x32, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x33, 0x38, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x49, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x73, 0x5f, 0x6d, 0x65, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x42, 0x49, 0x4f, 0x20, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x6d, 0x5f, 0x62, 0x75, 0x66, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x42, 0x49, 0x4f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x50, 0x45, 0x4d, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6f, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x70, 0x65, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x62, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x50, 0x45, 0x4d, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6f, 0x5f, 0x50, 0x55, 0x42, 0x4b, 0x45, 0x59, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x50, 0x45, 0x4d, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6f, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x50, 0x45, 0x4d, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x69, 0x6f, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x65, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x62, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x6f, 0x6e, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x62, 0x79, 0x5f, 0x74, 0x78, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x52, 0x45, 0x51, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x42, 0x4a, 0x5f, 0x74, 0x78, 0x74, 0x32, 0x6e, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x4c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x73, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x4c, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x53, 0x20, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x58, 0x35, 0x30, 0x39, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x6f, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x42, 0x49, 0x4f, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x64, 0x6f, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x54, 0x4c, 0x53, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x54, 0x4c, 0x53, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x53, 0x53, 0x4c, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x52, 0x53, 0x41, 0x5f, 0x70, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x45, 0x56, 0x50, 0x5f, 0x50, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x54, 0x58, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x5f, 0x32, 0x32, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x45, 0x56, 0x50, 0x5f, 0x4d, 0x44, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x41, 0x4c, 0x4c, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x4e, 0x45, 0x47, 0x4f, 0x54, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x53, 0x53, 0x4c, 0x76, 0x33, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x31, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x32, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x32, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x53, 0x53, 0x4c, 0x76, 0x32, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x53, 0x4c, 0x5f, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x73, 0x73, 0x6c, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x76, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x65, 0x72, 0x72, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x64, 0x68, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x73, 0x73, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x68, 0x6d, 0x61, 0x63, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x65, 0x76, 0x70, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x72, 0x73, 0x61, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x73, 0x6c, 0x2f, 0x70, 0x65, 0x6d, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x27, 0xa, 0x5d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x73, 0x6c, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x27, 0x5d, 0xa, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x62, 0x73, 0x73, 0x6c, 0x5f, 0x6f, 0x2e, 0x61, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x61, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_libssl_api_js_len = 11660; + +const char _binary_lib_lz4_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x4c, 0x5a, 0x34, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x68, 0x63, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x4c, 0x5a, 0x34, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x48, 0x43, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x4c, 0x5a, 0x34, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x6c, 0x7a, 0x34, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6c, 0x7a, 0x34, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x7a, 0x34, 0x68, 0x63, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6c, 0x7a, 0x34, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_lz4_api_js_len = 666; + +const char _binary_lib_mbedtls_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x72, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x72, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x35, 0x30, 0x39, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x73, 0x73, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x6e, 0x65, 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x2e, 0x2f, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x6c, 0x69, 0x62, 0x6d, 0x62, 0x65, 0x64, 0x78, 0x35, 0x30, 0x39, 0x2e, 0x61, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x6c, 0x69, 0x62, 0x6d, 0x62, 0x65, 0x64, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x61, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x6c, 0x69, 0x62, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2e, 0x61, 0x27, 0xa, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x72, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x27, 0xa, 0x5d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x61, 0x64, 0x64, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0xa, 0xa, 0x9, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x2d, 0x70, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x76, 0x33, 0x2e, 0x35, 0x2e, 0x31, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x62, 0x65, 0x64, 0x2d, 0x54, 0x4c, 0x53, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x2f, 0x72, 0x65, 0x66, 0x73, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x76, 0x33, 0x2e, 0x35, 0x2e, 0x31, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0xa, 0x9, 0x74, 0x61, 0x72, 0x20, 0x2d, 0x7a, 0x78, 0x76, 0x66, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0x2f, 0x76, 0x33, 0x2e, 0x35, 0x2e, 0x31, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x20, 0x2d, 0x43, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x6d, 0x62, 0x65, 0x64, 0x74, 0x6c, 0x73, 0xa, 0xa, 0xa, 0x2a, 0x2f, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_mbedtls_api_js_len = 1510; + +const char _binary_lib_net_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x73, 0x6f, 0x63, 0x6b, 0x6f, 0x70, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x61, 0x64, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x61, 0x64, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x6f, 0x63, 0x6b, 0x61, 0x64, 0x64, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x65, 0x6e, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x74, 0x6f, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x2c, 0x2c, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x61, 0x64, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x72, 0x65, 0x63, 0x76, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x66, 0x72, 0x6f, 0x6d, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x61, 0x64, 0x64, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x6d, 0x73, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x73, 0x67, 0x68, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x6d, 0x6d, 0x73, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x6d, 0x73, 0x67, 0x68, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x6d, 0x73, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x6d, 0x73, 0x67, 0x68, 0x64, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x6d, 0x6d, 0x73, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x6d, 0x6d, 0x73, 0x67, 0x68, 0x64, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x7b, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x3a, 0x20, 0x31, 0x2c, 0x20, 0x66, 0x61, 0x73, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x27, 0x2c, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x20, 0x27, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x29, 0x27, 0x20, 0x7d, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x72, 0x69, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x69, 0x70, 0x65, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x6e, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x75, 0x70, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6f, 0x63, 0x74, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6f, 0x63, 0x74, 0x6c, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x69, 0x6f, 0x63, 0x74, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x61, 0x72, 0x70, 0x61, 0x2f, 0x69, 0x6e, 0x65, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x75, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x69, 0x6f, 0x63, 0x74, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6e, 0x65, 0x74, 0x2f, 0x69, 0x66, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2f, 0x69, 0x66, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6e, 0x65, 0x74, 0x69, 0x6e, 0x65, 0x74, 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x6e, 0x65, 0x74, 0x69, 0x6e, 0x65, 0x74, 0x2f, 0x69, 0x66, 0x5f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x22, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x64, 0x2e, 0x68, 0x22, 0xa, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x6e, 0x65, 0x74, 0x27, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_net_api_js_len = 2793; + +const char _binary_lib_pico_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x6f, 0x27, 0x5d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x20, 0x31, 0x34, 0xa, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3b, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5b, 0x34, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x5d, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3b, 0xa, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5b, 0x38, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x5d, 0x3b, 0xa, 0x7d, 0x3b, 0xa, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x20, 0x72, 0x65, 0x71, 0x29, 0x3b, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x29, 0x3b, 0xa, 0x2f, 0x2f, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x63, 0x2b, 0x2b, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x70, 0x72, 0x65, 0x2d, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0xa, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0x70, 0x6c, 0x75, 0x73, 0xa, 0x7d, 0xa, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x20, 0x72, 0x65, 0x71, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x70, 0x61, 0x74, 0x68, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x70, 0x68, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x68, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x2a, 0x29, 0x26, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x2a, 0x29, 0x26, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x26, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x6e, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x6e, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x68, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x70, 0x68, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x5d, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x4a, 0x55, 0x53, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x53, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x68, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x26, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x20, 0x2a, 0x2a, 0x29, 0x26, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x20, 0x20, 0x26, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x6e, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x6e, 0x65, 0x78, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2d, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x3b, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x60, 0xa, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x28, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0x2c, 0x20, 0x43, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x61, 0x77, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x75, 0x73, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x32, 0x6f, 0x2f, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x68, 0x27, 0x29, 0xa, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x61, 0x77, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x75, 0x73, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x32, 0x6f, 0x2f, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x63, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x41, 0x52, 0x47, 0x53, 0x20, 0x3d, 0x20, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x28, 0x43, 0x41, 0x52, 0x47, 0x53, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x41, 0x52, 0x47, 0x53, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x31, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x4f, 0x33, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x57, 0x61, 0x6c, 0x6c, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x57, 0x65, 0x78, 0x74, 0x72, 0x61, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6d, 0x73, 0x73, 0x65, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x73, 0x74, 0x64, 0x3d, 0x63, 0x31, 0x31, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x69, 0x63, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x63, 0x27, 0x5d, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_pico_api_js_len = 3845; + +const char _binary_lib_pthread_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x5f, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x63, 0x70, 0x75, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x5f, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x64, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x67, 0x65, 0x74, 0x63, 0x70, 0x75, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x63, 0x68, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x72, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x79, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x28, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x67, 0x65, 0x74, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x70, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x20, 0x28, 0x2a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x29, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x27, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_pthread_api_js_len = 1805; + +const char _binary_lib_seccomp_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x73, 0x63, 0x6d, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x74, 0x78, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x78, 0x61, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x63, 0x6d, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x74, 0x78, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x63, 0x6d, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x74, 0x78, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x63, 0x6d, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x74, 0x78, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x27, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_seccomp_api_js_len = 828; + +const char _binary_lib_sqlite_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x6c, 0x69, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x20, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x20, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x27, 0x2c, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x27, 0x2c, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x33, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x27, 0x2c, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x66, 0x61, 0x73, 0x74, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x27, 0x2c, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x76, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x32, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x20, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x28, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x66, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x28, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x28, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x29, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x66, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x74, 0x6d, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x36, 0x34, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x2a, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x65, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2a, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x7a, 0x65, 0x72, 0x6f, 0x62, 0x6c, 0x6f, 0x62, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x72, 0x72, 0x63, 0x6f, 0x64, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x65, 0x72, 0x72, 0x73, 0x74, 0x72, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x66, 0x72, 0x65, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x36, 0x34, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x64, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x73, 0x71, 0x6c, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0xa, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0xa, 0x2a, 0x2f, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x28, 0x2a, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x2c, 0x69, 0x6e, 0x74, 0x2c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x2c, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x2a, 0x29, 0x3b, 0x5c, 0x6e, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x33, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x57, 0x52, 0x49, 0x54, 0x45, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x43, 0x41, 0x43, 0x48, 0x45, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0xa, 0x20, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x4f, 0x57, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x4e, 0x4f, 0x4d, 0x55, 0x54, 0x45, 0x58, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4b, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x53, 0x51, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_sqlite_api_js_len = 6467; + +const char _binary_lib_system_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x6d, 0x61, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x75, 0x6e, 0x6d, 0x61, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x63, 0x77, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x66, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x75, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x70, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x72, 0x75, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x72, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x66, 0x64, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x66, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x77, 0x61, 0x69, 0x74, 0x70, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x76, 0x70, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x79, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x68, 0x61, 0x72, 0x64, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0xa, 0x20, 0x20, 0x70, 0x69, 0x64, 0x66, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x6d, 0x73, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x79, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x73, 0x79, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x76, 0x70, 0x68, 0x79, 0x73, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x2c, 0x20, 0x27, 0x73, 0x69, 0x67, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x73, 0x69, 0x67, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x74, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x66, 0x64, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x4b, 0x5f, 0x54, 0x43, 0x4b, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x55, 0x46, 0x46, 0x44, 0x5f, 0x41, 0x50, 0x49, 0x3a, 0x20, 0x27, 0x75, 0x36, 0x34, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x5f, 0x55, 0x46, 0x46, 0x44, 0x49, 0x4f, 0x5f, 0x41, 0x50, 0x49, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x66, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x66, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x77, 0x61, 0x69, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x73, 0x79, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x79, 0x73, 0x2f, 0x6d, 0x6d, 0x61, 0x6e, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x66, 0x64, 0x2e, 0x68, 0x27, 0xa, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_system_api_js_len = 3554; + +const char _binary_lib_tcc_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x6e, 0x65, 0x77, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x74, 0x63, 0x63, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x54, 0x43, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x3d, 0x27, 0x30, 0x2e, 0x39, 0x2e, 0x32, 0x37, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x27, 0x73, 0x75, 0x64, 0x6f, 0x20, 0x61, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2d, 0x64, 0x65, 0x76, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x61, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x69, 0x62, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x20, 0xa, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x63, 0x63, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x75, 0x63, 0x6b, 0x73, 0x2e, 0x20, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x74, 0x63, 0x63, 0x2f, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x31, 0x2e, 0x61, 0xa, 0xa, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2e, 0x61, 0x3a, 0x20, 0x23, 0x23, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0xa, 0x9, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x2d, 0x70, 0x20, 0x64, 0x65, 0x70, 0x73, 0xa, 0x9, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x4c, 0x20, 0x2d, 0x6f, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x24, 0x7b, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x62, 0x7a, 0x32, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x73, 0x61, 0x76, 0x61, 0x6e, 0x6e, 0x61, 0x68, 0x2e, 0x67, 0x6e, 0x75, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x74, 0x69, 0x6e, 0x79, 0x63, 0x63, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x24, 0x7b, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x62, 0x7a, 0x32, 0xa, 0x9, 0x74, 0x61, 0x72, 0x20, 0x2d, 0x6a, 0x78, 0x76, 0x66, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x24, 0x7b, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x62, 0x7a, 0x32, 0x9, 0x2d, 0x43, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0xa, 0x9, 0x63, 0x64, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x24, 0x7b, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x20, 0x26, 0x26, 0x20, 0x43, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x3d, 0x27, 0x2d, 0x6d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x20, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x20, 0x2d, 0x66, 0x6c, 0x74, 0x6f, 0x20, 0x2d, 0x4f, 0x33, 0x27, 0x20, 0x2e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x20, 0x26, 0x26, 0x20, 0x63, 0x64, 0x20, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0xa, 0x9, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x2d, 0x43, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x24, 0x7b, 0x54, 0x43, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x7d, 0x2f, 0x20, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2e, 0x61, 0xa, 0x9, 0x63, 0x70, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x30, 0x2e, 0x39, 0x2e, 0x32, 0x37, 0x2f, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2e, 0x61, 0x20, 0x2e, 0x2f, 0xa, 0x9, 0x63, 0x70, 0x20, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x74, 0x63, 0x63, 0x2d, 0x30, 0x2e, 0x39, 0x2e, 0x32, 0x37, 0x2f, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2e, 0x68, 0x20, 0x2e, 0x2f, 0xa, 0xa, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x63, 0x63, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x6c, 0x69, 0x62, 0x74, 0x63, 0x63, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x74, 0x63, 0x63, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_tcc_api_js_len = 2408; + +const char _binary_lib_wireguard_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x73, 0x65, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x33, 0x32, 0x61, 0x72, 0x72, 0x61, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2a, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x61, 0x64, 0x64, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x65, 0x79, 0x74, 0x6f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x6f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x6b, 0x65, 0x79, 0x66, 0x72, 0x6f, 0x6d, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x69, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x6e, 0x70, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x2a, 0x27, 0x2c, 0x20, 0x27, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x69, 0x76, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x74, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x76, 0x6f, 0x69, 0x64, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x77, 0x67, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x77, 0x67, 0x2e, 0x6f, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0xa, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x63, 0x75, 0x72, 0x6c, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x20, 0x7d, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x27, 0x6c, 0x69, 0x62, 0x2f, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x2e, 0x6a, 0x73, 0x27, 0xa, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6e, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x20, 0x6a, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0xa, 0x2f, 0x2f, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6a, 0x73, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x73, 0x20, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x73, 0x3f, 0xa, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x28, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x63, 0x63, 0x27, 0x2c, 0x20, 0x43, 0x43, 0x20, 0x3d, 0x20, 0x27, 0x67, 0x2b, 0x2b, 0x27, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x28, 0x27, 0x64, 0x65, 0x70, 0x73, 0x27, 0x2c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x55, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x57, 0x58, 0x47, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x52, 0x4f, 0x54, 0x48, 0x20, 0x7c, 0x20, 0x53, 0x5f, 0x49, 0x58, 0x4f, 0x54, 0x48, 0x29, 0xa, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x57, 0x69, 0x72, 0x65, 0x47, 0x75, 0x61, 0x72, 0x64, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x27, 0x64, 0x65, 0x70, 0x73, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x61, 0x72, 0x2e, 0x67, 0x7a, 0x27, 0x29, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x28, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x29, 0xa, 0x20, 0x20, 0x63, 0x68, 0x64, 0x69, 0x72, 0x28, 0x27, 0x2e, 0x2e, 0x2f, 0x27, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x32, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x43, 0x41, 0x52, 0x47, 0x53, 0x20, 0x3d, 0x20, 0x43, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x20, 0x27, 0x29, 0xa, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x28, 0x43, 0x41, 0x52, 0x47, 0x53, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, 0x43, 0x41, 0x52, 0x47, 0x53, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x31, 0x29, 0x2c, 0x20, 0x27, 0x2d, 0x63, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x49, 0x2e, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x66, 0x50, 0x49, 0x43, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x4f, 0x33, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x49, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x2f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x77, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x27, 0x2c, 0x20, 0x27, 0x2d, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x77, 0x67, 0x2e, 0x6f, 0x27, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x2f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x77, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, 0x27, 0x5d, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0xa, 0x20, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x64, 0x65, 0x70, 0x73, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2d, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x2f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x77, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x68, 0x27, 0x29, 0xa, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x27, 0x77, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x29, 0xa, 0x7d, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_wireguard_api_js_len = 2987; + +const char _binary_lib_zlib_api_js_start[] = { +0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x61, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x7a, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0x2c, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0x20, 0x27, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x5b, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x27, 0x2c, 0x20, 0x2c, 0x27, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x27, 0x5d, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x27, 0x75, 0x33, 0x32, 0x27, 0x2c, 0xa, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x20, 0x27, 0x7a, 0x6c, 0x69, 0x62, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x27, 0xa, 0x20, 0x20, 0x7d, 0xa, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x7a, 0x6c, 0x69, 0x62, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x74, 0x2e, 0x68, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x2e, 0x68, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x60, 0xa, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5a, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4d, 0x45, 0x4d, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x38, 0xa, 0xa, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x5f, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x64, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x5a, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x32, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x5a, 0x5f, 0x44, 0x45, 0x46, 0x4c, 0x41, 0x54, 0x45, 0x44, 0x2c, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x5a, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4d, 0x45, 0x4d, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x2c, 0x20, 0x5a, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x42, 0x79, 0x74, 0x65, 0x66, 0x2a, 0x29, 0x73, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x42, 0x79, 0x74, 0x65, 0x66, 0x2a, 0x29, 0x64, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x5a, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2c, 0x20, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x64, 0x6f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x70, 0x69, 0x20, 0x69, 0x73, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x61, 0x20, 0x6e, 0x61, 0x73, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x78, 0x20, 0x69, 0x74, 0xa, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x7a, 0x6c, 0x69, 0x62, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x2a, 0x20, 0x64, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x64, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x29, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x7a, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x31, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x32, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2c, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x42, 0x79, 0x74, 0x65, 0x66, 0x2a, 0x29, 0x73, 0x72, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x42, 0x79, 0x74, 0x65, 0x66, 0x2a, 0x29, 0x64, 0x65, 0x73, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x73, 0x69, 0x7a, 0x65, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x5a, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x25, 0x6c, 0x75, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x20, 0x25, 0x75, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x25, 0x6c, 0x75, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x25, 0x75, 0x5c, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2c, 0x20, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x2f, 0x2f, 0x66, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x28, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x25, 0x6c, 0x75, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x20, 0x25, 0x75, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x25, 0x6c, 0x75, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x25, 0x75, 0x2c, 0x20, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x25, 0x69, 0x5c, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x29, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x72, 0x63, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x3e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x72, 0x65, 0x65, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x29, 0x3b, 0xa, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x3b, 0xa, 0x7d, 0x20, 0x20, 0xa, 0x60, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x27, 0x7a, 0x27, 0x5d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x7a, 0x6c, 0x69, 0x62, 0x27, 0xa, 0xa, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7b, 0x20, 0x61, 0x70, 0x69, 0x2c, 0x20, 0x6c, 0x69, 0x62, 0x73, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x20, 0x7d, 0xa +}; +unsigned int _binary_lib_zlib_api_js_len = 2117; diff --git a/builtins_linux.S b/builtins_linux.S index 1a96afc..ef858c4 100644 --- a/builtins_linux.S +++ b/builtins_linux.S @@ -3,36 +3,51 @@ _binary_main_js_start: .incbin "main.js" .global _binary_main_js_end _binary_main_js_end: -.global _binary_lib_asm_js_start -_binary_lib_asm_js_start: - .incbin "lib/asm.js" - .global _binary_lib_asm_js_end -_binary_lib_asm_js_end: -.global _binary_lib_ffi_js_start -_binary_lib_ffi_js_start: - .incbin "lib/ffi.js" - .global _binary_lib_ffi_js_end -_binary_lib_ffi_js_end: +.global _binary_lib_bench_js_start +_binary_lib_bench_js_start: + .incbin "lib/bench.js" + .global _binary_lib_bench_js_end +_binary_lib_bench_js_end: .global _binary_lib_gen_js_start _binary_lib_gen_js_start: .incbin "lib/gen.js" .global _binary_lib_gen_js_end _binary_lib_gen_js_end: -.global _binary_lib_path_js_start -_binary_lib_path_js_start: - .incbin "lib/path.js" - .global _binary_lib_path_js_end -_binary_lib_path_js_end: +.global _binary_lib_fs_js_start +_binary_lib_fs_js_start: + .incbin "lib/fs.js" + .global _binary_lib_fs_js_end +_binary_lib_fs_js_end: +.global _binary_lib_untar_js_start +_binary_lib_untar_js_start: + .incbin "lib/untar.js" + .global _binary_lib_untar_js_end +_binary_lib_untar_js_end: .global _binary_lib_proc_js_start _binary_lib_proc_js_start: .incbin "lib/proc.js" .global _binary_lib_proc_js_end _binary_lib_proc_js_end: -.global _binary_Makefile_start -_binary_Makefile_start: - .incbin "Makefile" - .global _binary_Makefile_end -_binary_Makefile_end: +.global _binary_lib_path_js_start +_binary_lib_path_js_start: + .incbin "lib/path.js" + .global _binary_lib_path_js_end +_binary_lib_path_js_end: +.global _binary_lib_inflate_js_start +_binary_lib_inflate_js_start: + .incbin "lib/inflate.js" + .global _binary_lib_inflate_js_end +_binary_lib_inflate_js_end: +.global _binary_lib_curl_js_start +_binary_lib_curl_js_start: + .incbin "lib/curl.js" + .global _binary_lib_curl_js_end +_binary_lib_curl_js_end: +.global _binary_lib_build_js_start +_binary_lib_build_js_start: + .incbin "lib/build.js" + .global _binary_lib_build_js_end +_binary_lib_build_js_end: .global _binary_main_cc_start _binary_main_cc_start: .incbin "main.cc" @@ -48,19 +63,103 @@ _binary_lo_h_start: .incbin "lo.h" .global _binary_lo_h_end _binary_lo_h_end: -.global _binary_globals_d_ts_start -_binary_globals_d_ts_start: - .incbin "globals.d.ts" - .global _binary_globals_d_ts_end -_binary_globals_d_ts_end: -.global _binary_jsconfig_json_start -_binary_jsconfig_json_start: - .incbin "jsconfig.json" - .global _binary_jsconfig_json_end -_binary_jsconfig_json_end: .global _binary_lib_core_api_js_start _binary_lib_core_api_js_start: .incbin "lib/core/api.js" .global _binary_lib_core_api_js_end _binary_lib_core_api_js_end: - +.global _binary_lib_curl_api_js_start +_binary_lib_curl_api_js_start: + .incbin "lib/curl/api.js" + .global _binary_lib_curl_api_js_end +_binary_lib_curl_api_js_end: +.global _binary_lib_encode_api_js_start +_binary_lib_encode_api_js_start: + .incbin "lib/encode/api.js" + .global _binary_lib_encode_api_js_end +_binary_lib_encode_api_js_end: +.global _binary_lib_epoll_api_js_start +_binary_lib_epoll_api_js_start: + .incbin "lib/epoll/api.js" + .global _binary_lib_epoll_api_js_end +_binary_lib_epoll_api_js_end: +.global _binary_lib_inflate_api_js_start +_binary_lib_inflate_api_js_start: + .incbin "lib/inflate/api.js" + .global _binary_lib_inflate_api_js_end +_binary_lib_inflate_api_js_end: +.global _binary_lib_inflate_em_inflate_c_start +_binary_lib_inflate_em_inflate_c_start: + .incbin "lib/inflate/em_inflate.c" + .global _binary_lib_inflate_em_inflate_c_end +_binary_lib_inflate_em_inflate_c_end: +.global _binary_lib_inflate_em_inflate_h_start +_binary_lib_inflate_em_inflate_h_start: + .incbin "lib/inflate/em_inflate.h" + .global _binary_lib_inflate_em_inflate_h_end +_binary_lib_inflate_em_inflate_h_end: +.global _binary_lib_libffi_api_js_start +_binary_lib_libffi_api_js_start: + .incbin "lib/libffi/api.js" + .global _binary_lib_libffi_api_js_end +_binary_lib_libffi_api_js_end: +.global _binary_lib_libssl_api_js_start +_binary_lib_libssl_api_js_start: + .incbin "lib/libssl/api.js" + .global _binary_lib_libssl_api_js_end +_binary_lib_libssl_api_js_end: +.global _binary_lib_lz4_api_js_start +_binary_lib_lz4_api_js_start: + .incbin "lib/lz4/api.js" + .global _binary_lib_lz4_api_js_end +_binary_lib_lz4_api_js_end: +.global _binary_lib_mbedtls_api_js_start +_binary_lib_mbedtls_api_js_start: + .incbin "lib/mbedtls/api.js" + .global _binary_lib_mbedtls_api_js_end +_binary_lib_mbedtls_api_js_end: +.global _binary_lib_net_api_js_start +_binary_lib_net_api_js_start: + .incbin "lib/net/api.js" + .global _binary_lib_net_api_js_end +_binary_lib_net_api_js_end: +.global _binary_lib_pico_api_js_start +_binary_lib_pico_api_js_start: + .incbin "lib/pico/api.js" + .global _binary_lib_pico_api_js_end +_binary_lib_pico_api_js_end: +.global _binary_lib_pthread_api_js_start +_binary_lib_pthread_api_js_start: + .incbin "lib/pthread/api.js" + .global _binary_lib_pthread_api_js_end +_binary_lib_pthread_api_js_end: +.global _binary_lib_seccomp_api_js_start +_binary_lib_seccomp_api_js_start: + .incbin "lib/seccomp/api.js" + .global _binary_lib_seccomp_api_js_end +_binary_lib_seccomp_api_js_end: +.global _binary_lib_sqlite_api_js_start +_binary_lib_sqlite_api_js_start: + .incbin "lib/sqlite/api.js" + .global _binary_lib_sqlite_api_js_end +_binary_lib_sqlite_api_js_end: +.global _binary_lib_system_api_js_start +_binary_lib_system_api_js_start: + .incbin "lib/system/api.js" + .global _binary_lib_system_api_js_end +_binary_lib_system_api_js_end: +.global _binary_lib_tcc_api_js_start +_binary_lib_tcc_api_js_start: + .incbin "lib/tcc/api.js" + .global _binary_lib_tcc_api_js_end +_binary_lib_tcc_api_js_end: +.global _binary_lib_wireguard_api_js_start +_binary_lib_wireguard_api_js_start: + .incbin "lib/wireguard/api.js" + .global _binary_lib_wireguard_api_js_end +_binary_lib_wireguard_api_js_end: +.global _binary_lib_zlib_api_js_start +_binary_lib_zlib_api_js_start: + .incbin "lib/zlib/api.js" + .global _binary_lib_zlib_api_js_end +_binary_lib_zlib_api_js_end: diff --git a/globals.d.ts b/globals.d.ts index 564e023..383506b 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -31,6 +31,10 @@ interface RuntimeVersion { v8: string } +interface Core { + open(path: string, flags: number); +} + interface Runtime { moduleCache: Map; libCache: Map; @@ -38,7 +42,7 @@ interface Runtime { start: number; errno: number; colors: any; - core: any; + core: Core; libraries(): Array; builtins(): Array; assert(expression: any, message?: string | Function): any; diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000..b376d3a --- /dev/null +++ b/lib/README.md @@ -0,0 +1,14 @@ +## path.js + +## proc.js + +## ffi.js + +## gen.js + +## binary.js + +## bench.js + +## asm.js + diff --git a/lib/asm.js b/lib/asm.js index 233ff6c..c3535ec 100644 --- a/lib/asm.js +++ b/lib/asm.js @@ -21,7 +21,6 @@ const MAP_ANONYMOUS = 0x20 const u32 = new Uint32Array(2) function compile (code) { - // todo: handle errors and ensure we cannot have writable/executable memory const address = mmap(0, code.length, PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, u32) assert(address) diff --git a/lib/bench.js b/lib/bench.js new file mode 100644 index 0000000..8d79b7c --- /dev/null +++ b/lib/bench.js @@ -0,0 +1,44 @@ +const { AY, AD, AG, AM } = lo.colors + +function pad (v, size, precision = 0) { + return v.toFixed(precision).padStart(size, ' ') +} + +function formatNanos (nanos) { + if (nanos >= 1000000000) return `${AY}sec/iter${AD} ${pad((nanos / 1000000000), 10, 2)}` + if (nanos >= 1000000) return `${AY}ms/iter${AD} ${pad((nanos / 1000000), 10, 2)}` + if (nanos >= 1000) return `${AY}μs/iter${AD} ${pad((nanos / 1000), 10, 2)}` + return `${AY}ns/iter${AD} ${pad(nanos, 10, 2)}` +} + +const noop = () => 0 + +class Bench { + #start = 0 + #end = 0 + #name = 'bench' + #display = true + #mem = noop + + constructor (display = true, mem) { + this.#display = display + this.#mem = mem + } + + start (name = 'bench', pad = 32) { + this.#name = name.slice(0, pad).padEnd(pad, ' ') + this.#start = lo.hrtime() + } + + end (count = 0) { + this.#end = lo.hrtime() + const elapsed = this.#end - this.#start + const rate = Math.floor(count / (elapsed / 1e9)) + const nanos = 1000000000 / rate + const rss = this.#mem() + if (this.#display) console.log(`${this.#name} ${AG}rate${AD} ${pad(rate, 10)} ${formatNanos(nanos)} ${AM}rss${AD} ${rss}`) + return { name: this.#name.trim(), count, elapsed, rate, nanos, rss } + } +} + +export { Bench } diff --git a/lib/binary.js b/lib/binary.js new file mode 100644 index 0000000..4641720 --- /dev/null +++ b/lib/binary.js @@ -0,0 +1,38 @@ +const { AD, AG, AC } = lo.colors + +function dump (u8, len = u8.length, off = 0, width = 16, pos = 0, decimal = false) { + const result = [] + const chars = [] + const base = decimal ? 10 : 16 + for (let i = 0; i < len; i++) { + if (i % width === 0) { + if (i === 0) { + result.push('') + } else { + result.push(` ${chars.join('')}\n`) + chars.length = 0 + } + } + const boff = i + off + if (i % 8 === 0) { + result.push(`${AG}${(boff).toString(base).padStart(5, ' ')}${AD}`) + } + result.push(` ${u8[boff].toString(16).padStart(2, '0')}`) + if (u8[boff] >= 32 && u8[boff] <= 126) { + chars.push(`${AC}${String.fromCharCode(u8[boff])}${AD}`) + } else { + chars.push('.') + } + } + const remaining = width - (len % width) + if (remaining === width) { + result.push(` ${chars.join('')}\n`) + } else if (remaining < 8) { + result.push(`${' '.repeat(remaining)} ${chars.join('')}\n`) + } else { + result.push(`${' '.repeat(remaining)} ${chars.join('')}\n`) + } + return result.join('') +} + +export { dump } diff --git a/lib/build.js b/lib/build.js new file mode 100644 index 0000000..6b93043 --- /dev/null +++ b/lib/build.js @@ -0,0 +1,354 @@ +import { isFile, isDir, mkDirAll } from 'lib/fs.js' +import { inflate } from 'lib/inflate.js' +import { fetch } from 'lib/curl.js' +import { untar } from 'lib/untar.js' +import { bindings, linkerScript, headerFile, config, linkArgs } from 'lib/gen.js' +import { exec } from 'lib/proc.js' +import { baseName, extName, join } from 'lib/path.js' + +// todo: ability to generate a config file from scratch or from a js script +// todo: ability to build from a config file +// todo: ability o chain build commands together +// todo: async fetch and process spawn so we can parallelize tasks +// todo: check timestamps on dependencies and only compile if changed +// todo: clean command +// todo: store the build configuration in the binary +const { core, getenv, getcwd, assert, colors } = lo +const { AM, AY, AG, AD, AR } = colors +const { + writeFile, chdir, mkdir, readFile, unlink, S_IXOTH, S_IRWXU, S_IRWXG, S_IROTH +} = core + +function exec2 (args, verbose = false) { + if (verbose) console.log(args.join(' ')) + exec(args[0], args.slice(1), status) + assert(status[0] === 0) +} + +async function create_lo_home (path) { + const cwd = getcwd() + if (!isDir(path)) { + console.log(`${AM}create LO_HOME in ${AD} ${path}`) + assert(mkdir(path, S_IRWXU | S_IRWXG | S_IROTH) === 0) + } + + for (const name of lo.builtins()) { + const file_path = `${path}/${name}` + if (!isDir(baseName(file_path))) { + console.log(`${AY}create dir for HOME${AD} ${baseName(file_path)}`) + assert(mkdir(baseName(file_path), S_IRWXU | S_IRWXG | S_IROTH) === 0) + } + if (!isFile(file_path)) { + console.log(`${AY}create builtin ${AD} ${file_path}`) + writeFile(file_path, encoder.encode(lo.builtin(name))) + } + } + + chdir(path) + + let file_name, size, bytes + + if (!isDir('v8/include')) { + file_name = 'include.tar.gz' + console.log(`${AY}download v8 includes for version ${AD}${v8}`) + size = + fetch(`${v8_url_prefix}/${v8}/include.tar.gz`, + file_name) + console.log(`${AY}downloaded${AD} ${file_name} ${AG}size${AY} ${size}`) + bytes = readFile(file_name) + untar(inflate(bytes)) + unlink(file_name) + } + + if (!isFile('v8/libv8_monolith.a')) { + file_name = `libv8_monolith-${os}-${arch}.a.gz` + console.log(`${AY}download v8 static lib for version ${AD}${v8}`) + size = + fetch(`${v8_url_prefix}/${v8}/libv8_monolith-${os}-${arch}.a.gz`, + file_name) + console.log(`${AY}downloaded${AD} ${file_name} ${AG}size${AY} ${size}`) + bytes = readFile(file_name) + writeFile('v8/libv8_monolith.a', inflate(bytes)) + unlink(file_name) + } + + chdir(cwd) +} + +async function compile_bindings (lib, verbose = false) { + const cwd = getcwd() + const lib_dir = `lib/${lib}` + const binding_path = `${lib_dir}/api.js` + + console.log(`${AM}compile binding${AD} ${lib} ${AY}in${AD} ${lib_dir}`) + if (!isDir(lib_dir) && lo.builtins().includes(binding_path)) { + console.log(`${AM}create dir${AD} ${lib_dir}`) + assert(mkdir(`${lib_dir}`, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) === 0) + console.log(`${AM}create bindings def at ${AD} ${lib_dir}/api.js`) + writeFile(`${lib_dir}/api.js`, encoder.encode(lo.builtin(binding_path))) + } + + const def = await import(binding_path) + const { include_paths = [] } = def + const src = bindings(def) + + console.log(`${AY}create ${AD} ${lib_dir}/${def.name}.cc`) + writeFile(`${lib_dir}/${def.name}.cc`, encoder.encode(src)) + + console.log(`${AY}change dir to ${AD} ${lib_dir}`) + assert(chdir(lib_dir) === 0) + + if (def.build) { + console.log(`${AM}building dependencies${AD} ${lib} ${AY}in${AD} ${lib_dir}`) + await def.build(C, CC) + } + + console.log(`${AY}compile${AD} ${def.name}.cc ${AY}with${AG} ${CC}${AD}`) + exec2([...CC.split(' '), ...CFLAGS, OPT, `-I${LO_HOME}`, `-I${LO_HOME}/v8`, + ...include_paths.map(p => `-I${p}`), '-I.', `-I${LO_HOME}/v8/include`, + `-I${lib_dir}`, ...WARN, '-o', `${def.name}.o`, `${def.name}.cc`], verbose) + + console.log(`${AY}static lib ${AD} ${def.name}.a`) + if (def.obj && def.obj.length) { + exec2(['ar', 'crsT', `${def.name}.a`, `${def.name}.o`, ...def.obj.filter(f => extName(f) === 'o')], verbose) + } else { + exec2(['ar', 'crsT', `${def.name}.a`, `${def.name}.o`], verbose) + } + +// todo: fix this for mac +// https://copyprogramming.com/howto/what-are-the-differences-between-so-and-dylib-on-macos + console.log(`${AY}shared lib ${AD} ${def.name}.so ${AY}with${AG} ${CC}${AD}`) + if (os === 'mac') { + exec2([...LINK.split(' '), ...LARGS, OPT, '-bundle', ...WARN, '-o', + `${def.name}.so`, `${def.name}.o`, ...(def.libs || []).map(l => `-l${l}`)], + verbose) + } else if (os === 'linux') { + exec2([...LINK.split(' '), ...LARGS, OPT, '-shared', ...WARN, '-o', + `${def.name}.so`, `${def.name}.o`, ...(def.libs || []).map(l => `-l${l}`)], + verbose) + } + console.log(`${AY}change dir to ${AD} ${cwd}`) + assert(chdir(cwd) === 0) + + if (!def.obj) return [] + return def.obj.filter(f => extName(f) === 'a').map(f => `${lib_dir}/${f}`) +} + +function create_builtins (libs = [], os) { + config.os = 'win' + writeFile(`${LO_HOME}/builtins.h`, encoder.encode([`main.js`, ...libs].map(linkerScript).join(''))) + config.os = 'linux' + writeFile(`${LO_HOME}/builtins_linux.S`, encoder.encode([`main.js`, ...libs].map(linkerScript).join(''))) + config.os = 'mac' + writeFile(`${LO_HOME}/builtins.S`, encoder.encode([`main.js`, ...libs].map(linkerScript).join(''))) + config.os = os +} + +/* +function create_header (libs = [], bindings = [], opts) { + const main_h = headerFile([...libs, ...bindings.map(n => `lib/${n}/${n}.a`)], opts) + writeFile(`${LO_HOME}/main.h`, encoder.encode(main_h)) +} +*/ + +function create_header (libs = [], bindings = [], opts) { + const os = config.os + config.os = 'win' + writeFile(`${LO_HOME}/main_win.h`, encoder.encode(headerFile([...libs, ...bindings.map(n => `lib/${n}/${n}.a`)], opts))) + config.os = os + writeFile(`${LO_HOME}/main.h`, encoder.encode(headerFile([...libs, ...bindings.map(n => `lib/${n}/${n}.a`)], opts))) +} + +async function build_runtime ({ libs = lo.builtins(), bindings = lo.libraries(), embeds = [] }, verbose = false) { + const cwd = getcwd() + console.log(`${AY}create${AD} builtins`) + create_builtins([...libs, ...embeds], config.os) + console.log(`${AY}create${AD} main header`) + create_header([...libs, ...embeds], bindings, defaultOpts) + + assert(chdir(LO_HOME) === 0) + console.log(`${AY}compile${AD} builtins`) + if (os === 'linux') { + exec2([...C.split(' '), '-c', 'builtins_linux.S', '-o', 'builtins.o'], verbose) + } else if (os !== 'win') { + exec2([...C.split(' '), '-c', 'builtins.S', '-o', 'builtins.o'], verbose) + } + + console.log(`${AY}compile${AD} main.cc`) + exec2([...CC.split(' '), `-DRUNTIME=${RUNTIME}`, `-DVERSION=${VERSION}`, + ...CFLAGS, OPT, `-I${LO_HOME}`, `-I${LO_HOME}/v8`, + '-I.', `-I${LO_HOME}/v8/include`, ...WARN, '-o', 'main.o', 'main.cc'], + verbose) + + console.log(`${AY}compile${AD} lo.cc`) + exec2([...CC.split(' '), `-DRUNTIME=${RUNTIME}`, `-DVERSION=${VERSION}`, + ...CFLAGS, OPT, `-I${LO_HOME}`, `-I${LO_HOME}/v8`, + '-I.', `-I${LO_HOME}/v8/include`, ...WARN, '-o', `${TARGET}.o`, `lo.cc`], + verbose) + + console.log(`${AY}link runtime ${AD}`) + + let static_libs = bindings.map(n => `lib/${n}/${n}.a`) + for (const binding of bindings) { + static_libs = static_libs.concat(await compile_bindings(binding, verbose)) + } + const dynamic_libs = await linkArgs(bindings.map(n => `lib/${n}/api.js`)) + const mbed_tls = [] + exec2([...LINK.split(' '), ...LARGS, OPT, '-rdynamic', ...WARN, '-o', + `${TARGET}`, `${TARGET}.o`, 'main.o', 'builtins.o', 'v8/libv8_monolith.a', + ...static_libs, ...mbed_tls, ...dynamic_libs], verbose) + assert(chdir(cwd) === 0) +} + +function create_binding (name) { + return `const api = { + noop: { + parameters: [], + result: 'void' + } +} + +const preamble = [ + 'void noop () {', + '}' +].join('\\n') + +const name = '${name}' + +const constants = {} + +export { name, api, constants, preamble } +` +} + +const encoder = new TextEncoder() +const status = new Int32Array(2) + +// todo: clean up api so we can pass a config in and run builds through api +const VERSION = getenv('VERSION') || '"0.0.4pre"' +const RUNTIME = getenv('RUNTIME') || '"lo"' +const TARGET = getenv('TARGET') || 'lo' +const C = getenv('C') || 'gcc' +const CC = getenv('CC') || 'g++' +const LINK = getenv('LINK') || 'g++' +const OPT = getenv('OPT') || '-O3' +const CFLAGS = (getenv('CFLAGS') || '-fPIC -std=c++17 -c -DV8_COMPRESS_POINTERS -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=0').split(' ') +const WARN = (getenv('WARN') || + '-Werror -Wpedantic -Wall -Wextra -Wno-unused-parameter').split(' ') +const LARGS = (getenv('LARGS') || '-s').split(' ') +const LO_HOME = getenv('LO_HOME') || `${getcwd()}/.lo` +const v8 = getenv('V8_VERSION') || '1.0.0' +const os = getenv('LO_OS') || lo.os() +const arch = getenv('LO_ARCH') || lo.arch() +//const cwd = getenv('LO_WORKDIR') || getcwd() +const url_prefix = getenv('LO_URL_PREFIX') || 'https://github.com/just-js' +const v8_path = getenv('LO_V8_PATH') || 'v8/releases/download' +const v8_url_prefix = `${url_prefix}/${v8_path}` +// todo: way to override these - usse env? +const defaultOpts = { + v8_cleanup: 0, v8_threads: 2, on_exit: 0, + v8flags: '--stack-trace-limit=10 --use-strict --turbo-fast-api-calls --no-freeze-flags-after-init' +} + +config.os = os + +const so_ext = (os === 'linux' ? 'so' : (os === 'mac' ? 'dylib' : 'dll')) + +const runtimes = { + custom: { + bindings: [], + libs: [] + }, + core: { + bindings: ['core'], + libs: [] + }, + builder: { + bindings: ['core', 'inflate', 'curl'], + libs: [ + 'lib/bench.js', 'lib/gen.js', 'lib/fs.js', 'lib/untar.js', 'lib/proc.js', + 'lib/path.js', 'lib/inflate.js', 'lib/curl.js', 'lib/build.js' + ], + embeds: [ + 'main.cc', + 'lo.cc', + 'lo.h', + 'lib/core/api.js', + 'lib/curl/api.js', + 'lib/encode/api.js', + 'lib/epoll/api.js', + 'lib/inflate/api.js', + 'lib/inflate/em_inflate.c', + 'lib/inflate/em_inflate.h', + 'lib/libffi/api.js', + 'lib/libssl/api.js', + 'lib/lz4/api.js', + 'lib/mbedtls/api.js', + 'lib/net/api.js', + 'lib/pico/api.js', + 'lib/pthread/api.js', + 'lib/seccomp/api.js', + 'lib/sqlite/api.js', + 'lib/system/api.js', + 'lib/tcc/api.js', + 'lib/wireguard/api.js', + 'lib/zlib/api.js' + ] + }, + mbedtls: { + bindings: ['core', 'inflate', 'mbedtls'], + libs: [ + 'lib/bench.js', 'lib/gen.js', 'lib/fs.js', 'lib/untar.js', 'lib/proc.js', + 'lib/path.js', 'lib/inflate.js', 'lib/build.js' + ] + } +} + +async function build (args) { + let verbose = false + if (args.includes('-v')) { + args = args.filter(a => a !== '-v') + verbose = true + } + // ./lo eval "console.log(parseInt(lo.utf8Decode(lo.ptr(lo.core.readFile('/proc/self/stat', 0, 1024)).ptr, -1).match(/(\d+)\s/g)[21], 10) * 4096)" + // it's 11 ms versus 7ms for ```hyperfine "lo eval 1"``` for curl build versus mbedtls + // use ```lo LINK="mold -run g++" CC="ccache g++" build.js``` for fast builds + await create_lo_home(LO_HOME) + const [ action = 'runtime', name = 'builder' ] = args + if (action === 'runtime') { + if (runtimes[name]) { + await build_runtime(runtimes[name], verbose) + } else { + const runtime_config = await import(name) + //console.log(JSON.stringify(runtime_config.default, null, ' ')) + await build_runtime(runtime_config.default, verbose) + } + } else if (action === 'binding') { + // todo: check if name is an existing binding and install that if it doesn't exist + // or maybe this should be a different "add" command? + const dir_path = `lib/${name}` + if (!isDir('./lib')) { + assert(mkdir('./lib', S_IRWXU | S_IRWXG | S_IROTH) === 0) + } + if (!isDir(dir_path)) { + assert(mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH) === 0) + } + const file_path = `${dir_path}/api.js` + if (!isFile(file_path)) { + writeFile(file_path, encoder.encode(create_binding(name))) + } + const so_path = `${dir_path}/${name}.${so_ext}` + if (!isFile(so_path)) { + if (isFile(`${join(LO_HOME, so_path)}`)) { + writeFile(so_path, readFile(join(LO_HOME, so_path))) + } else { + writeFile(so_path, encoder.encode(create_binding(name))) + } + } + await compile_bindings(name, verbose) + } else { + throw new Error('build command not understood') + } +} + +export { build } diff --git a/lib/core/README.md b/lib/core/README.md new file mode 100644 index 0000000..e69de29 diff --git a/lib/core/api.js b/lib/core/api.js index 2c5515c..da6b8d4 100644 --- a/lib/core/api.js +++ b/lib/core/api.js @@ -1,9 +1,25 @@ +// the bindings definitions. see docs for more detail const api = { -// dlopen +// dynamic loader dlopen: { parameters: ['string', 'i32'], pointers: ['const char*'], - result: 'pointer' + jsdoc: `/** +* The function dlopen() loads the dynamic shared object (shared library) +* file named by the null-terminated string filename and returns an opaque +* "handle" for the loaded object. This handle is employed with other +* functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3), +* and dlclose() +* +* \`\`\`js +* const handle = assert(core.dlopen('libcurl.so', core.RTLD_NOW)); +* \`\`\` +* @param file_path {string} the path to the shared library file to open. +* @param flags {number} (i32) resolve symbols now (RTLD_NOW) or lazily (RTLD_LAZY) +*/`, + result: 'pointer', + platform: ['linux', 'mac', 'posix'], + man: 'https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlopen.html' }, dlsym: { parameters: ['pointer', 'string'], @@ -15,37 +31,15 @@ const api = { pointers: ['void*'], result: 'i32' }, -// fs - close: { - parameters: ['i32'], - result: 'i32' - }, - open: { - parameters: ['string', 'i32', 'i32'], - pointers: ['const char*'], - result: 'i32' - }, +// file descriptor operations read: { parameters: ['i32', 'buffer', 'i32'], result: 'i32' }, - pread: { - parameters: ['i32', 'buffer', 'i32', 'u32'], - result: 'i32' - }, - lseek: { - parameters: ['i32', 'u32', 'i32'], - result: 'u32' - }, write: { parameters: ['i32', 'buffer', 'i32'], result: 'i32' }, - getcwd: { - parameters: ['pointer', 'i32'], - pointers: ['char*'], - result: 'pointer' - }, write_string: { parameters: ['i32', 'string', 'i32'], pointers: [, 'const char*'], @@ -53,11 +47,37 @@ const api = { result: 'i32', name: 'write' }, + close: { + parameters: ['i32'], + result: 'i32' + }, + pread: { + parameters: ['i32', 'buffer', 'i32', 'u32'], + result: 'i32' + }, + lseek: { + parameters: ['i32', 'u32', 'i32'], + result: 'u32' + }, fstat: { parameters: ['i32', 'buffer'], pointers: [, 'struct stat *'], result: 'i32' }, + fcntl: { + parameters: ['i32', 'i32', 'i32'], + result: 'i32' + }, +// file system operations + access: { + parameters: ['string', 'i32'], + result: 'i32' + }, + open: { + parameters: ['string', 'i32', 'i32'], + pointers: ['const char*'], + result: 'i32' + }, unlink: { parameters: ['string'], result: 'i32' @@ -68,6 +88,11 @@ const api = { pointers: ['DIR*'], rpointer: 'dirent*' }, + readlink: { + parameters: ['string', 'buffer', 'u32'], + pointers: ['const char*', 'char*'], + result: 'u32' + }, opendir: { parameters: ['string'], result: 'pointer', @@ -78,16 +103,24 @@ const api = { parameters: ['string', 'u32'], result: 'i32', }, + rmdir: { + parameters: ['string'], + result: 'i32', + }, closedir: { parameters: ['pointer'], pointers: ['DIR*'], result: 'i32' }, - fcntl: { - parameters: ['i32', 'i32', 'i32'], - result: 'i32' + chdir: { + parameters: ['string'], + result: 'i32', }, -// asm + fchdir: { + parameters: ['i32'], + result: 'i32', + }, +// memory operations mprotect: { parameters: ['pointer', 'u32', 'i32'], result: 'i32' @@ -104,6 +137,22 @@ const api = { parameters: ['pointer', 'u32', 'i32', 'i32', 'i32', 'u32'], result: 'pointer' }, + calloc: { + parameters: ['u32', 'u32'], + result: 'pointer' + }, + free: { + parameters: ['pointer'], + result: 'void' + }, +/* + memfd_create: { + parameters: ['string', 'u32'], + result: 'i32', + platform: ['linux'], + man: 'https://man7.org/linux/man-pages/man2/memfd_create.2.html' + }, +*/ // fastcalls bind_fastcall: { declare_only: true, @@ -119,37 +168,128 @@ const api = { result: 'void', name: 'lo_fastcall' }, -// misc +// system getenv: { parameters: ['string'], pointers: ['const char*'], rpointer: 'char*', result: 'pointer' }, + setenv: { + parameters: ['string', 'string', 'i32'], + pointers: ['const char*', 'const char*'], + result: 'i32' + }, + unsetenv: { + parameters: ['string'], + pointers: ['const char*'], + result: 'i32' + }, + sleep: { + parameters: ['i32'], + result: 'void' + }, + usleep: { + parameters: ['u32'], + result: 'i32' + }, + dup: { + parameters: ['i32'], + result: 'i32' + }, dup2: { parameters: ['i32', 'i32'], result: 'i32' }, + getcwd: { + parameters: ['pointer', 'i32'], + pointers: ['char*'], + result: 'pointer' + }, + getpid: { + parameters: [], + result: 'i32' + }, + fork: { + parameters: [], + result: 'i32' + }, + kill: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + waitpid: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'int*'], + result: 'i32' + }, + execvp: { + parameters: ['string', 'buffer'], + pointers: ['const char*', 'char* const*'], + result: 'i32', + platform: ['linux'] + }, +// rusage + getrusage: { + parameters: ['i32', 'buffer'], + pointers: [, 'struct rusage*'], + result: 'i32' + }, + times: { + parameters: ['buffer'], + pointers: ['struct tms*'], + result: 'i32' + }, +// isolates + isolate_create: { + parameters: [ + 'i32', 'u32array', 'string', 'u32', 'string', 'u32', 'buffer', + 'i32', 'i32', 'u64', 'string', 'string', 'i32', 'i32', 'pointer' + ], + pointers: [ + , 'char**', 'const char*', , 'const char*', , 'char*', , , + 'const char*', 'const char*' + ], + result: 'i32', + name: 'lo_create_isolate', + jsdoc: ``, + os: [], + arch: [], + nofast: true + }, + isolate_context_create: { + parameters: [ + 'i32', 'pointer', 'string', 'u32', 'string', 'u32', 'pointer', + 'i32', 'i32', 'u64', 'string', 'string', 'i32', 'i32', 'pointer', 'buffer' + ], + pointers: [ + , 'char**', 'const char*', , 'const char*', , 'char*', , , + 'const char*', 'const char*', , , , , 'struct isolate_context*' + ], + result: 'void', + name: 'lo_create_isolate_context' + }, + isolate_context_destroy: { + parameters: ['buffer'], + pointers: ['struct isolate_context*'], + result: 'void', + name: 'lo_destroy_isolate_context' + }, + isolate_context_size: { + parameters: [], + result: 'i32', + name: 'lo_context_size' + }, + isolate_start: { + parameters: ['buffer'], + result: 'void', + name: 'lo_start_isolate', + nofast: true + }, } -const constants = { - S_IFBLK: 'i32', S_IFCHR: 'i32', S_IFIFO: 'i32', - S_IRUSR: 'i32', S_IWUSR: 'i32', S_IRGRP: 'i32', S_IWGRP: 'i32', - S_IROTH: 'i32', S_IWOTH: 'i32', - O_RDONLY: 'i32', - O_WRONLY: 'i32', - O_CREAT: 'i32', - S_IRWXU: 'i32', - S_IRWXG: 'i32', - S_IXOTH: 'i32', - O_TRUNC: 'i32', STDIN: 0, STDOUT: 1, STDERR: 2 -} - -const includes = [ - 'unistd.h', 'sys/stat.h', 'fcntl.h', 'dirent.h', 'dlfcn.h', 'sys/mman.h', - 'stdio.h' -] - +// optional preamble of C/C++ code to embed in the generated source file before +// compilation const preamble = ` struct fastcall { void* wrapper; @@ -264,13 +404,15 @@ void SlowCallback(const FunctionCallbackInfo &args) { case FastTypes::buffer: { Local u8 = args[i].As(); - state->args[r++] = (uint64_t)((uint8_t*)u8->Buffer()->Data() + u8->ByteOffset()); + state->args[r++] = (uint64_t)((uint8_t*)u8->Buffer()->Data() + + u8->ByteOffset()); } break; case FastTypes::u32array: { Local u32 = args[i].As(); - state->args[r++] = (uint64_t)((uint8_t*)u32->Buffer()->Data() + u32->ByteOffset()); + state->args[r++] = (uint64_t)((uint8_t*)u32->Buffer()->Data() + + u32->ByteOffset()); } break; case FastTypes::function: @@ -297,7 +439,8 @@ void SlowCallback(const FunctionCallbackInfo &args) { case FastTypes::u64: case FastTypes::i64: case FastTypes::pointer: - uint64_t* res = (uint64_t*)args[args.Length() - 1].As()->Buffer()->Data(); + uint64_t* res = (uint64_t*)args[args.Length() - 1] + .As()->Buffer()->Data(); *res = state->args[0]; break; } @@ -358,9 +501,39 @@ void bind_slowcallSlow(const FunctionCallbackInfo &args) { ` +// constants that should be defined on the binding +// if we specify a number then that will be used. if a string, then +// it will be checked to see if it represents a variable type. if so, then +// that system constant will be set in the binding at compile time +// todo: we need to define platform for constants too +const constants = { + S_IFBLK: 'i32', S_IFCHR: 'i32', S_IFIFO: 'i32', + S_IRUSR: 'i32', S_IWUSR: 'i32', S_IRGRP: 'i32', S_IWGRP: 'i32', + S_IROTH: 'i32', S_IWOTH: 'i32', O_RDONLY: 'i32', O_WRONLY: 'i32', + O_CREAT: 'i32', S_IRWXU: 'i32', S_IRWXG: 'i32', S_IXOTH: 'i32', + O_TRUNC: 'i32', STDIN: 0, STDOUT: 1, STDERR: 2, O_CLOEXEC: 'i32', + RUSAGE_SELF: 'i32', SEEK_SET: 'i32', SEEK_CUR: 'i32', + SEEK_END: 'i32', S_IRWXO: 'i32', F_OK: 'i32', S_IFMT: 'i32', S_IFDIR: 'i32', + S_IFREG: 'i32' +} +// list of headers to include +const includes = [ + 'unistd.h', 'sys/stat.h', 'fcntl.h', 'dirent.h', 'dlfcn.h', 'sys/mman.h', + 'stdio.h', 'sys/wait.h', 'signal.h', 'sys/resource.h', 'sys/times.h' +] +// binding name const name = 'core' -const libs = ['dl'] +// system available libraries that need to be linked dynamically +const libs = ['dl'] // i.e. '-ldl' flag to gnu linker +// list of object files that should be linked into the library const obj = [] +// list of platforms the library runs on +// we will leave windows until we have something working there +const platform = ['mac', 'linux'] +// list of architectures the library runs on. if empty, all arch's +const arch = [] -export { api, includes, name, libs, obj, constants, preamble } +export { + api, includes, name, libs, obj, constants, preamble, platform, arch +} diff --git a/lib/core/core.cc b/lib/core/core.cc index 2d9e422..bf69fb8 100644 --- a/lib/core/core.cc +++ b/lib/core/core.cc @@ -8,6 +8,10 @@ #include #include #include +#include +#include +#include +#include #include namespace lo { @@ -181,13 +185,15 @@ void SlowCallback(const FunctionCallbackInfo &args) { case FastTypes::buffer: { Local u8 = args[i].As(); - state->args[r++] = (uint64_t)((uint8_t*)u8->Buffer()->Data() + u8->ByteOffset()); + state->args[r++] = (uint64_t)((uint8_t*)u8->Buffer()->Data() + + u8->ByteOffset()); } break; case FastTypes::u32array: { Local u32 = args[i].As(); - state->args[r++] = (uint64_t)((uint8_t*)u32->Buffer()->Data() + u32->ByteOffset()); + state->args[r++] = (uint64_t)((uint8_t*)u32->Buffer()->Data() + + u32->ByteOffset()); } break; case FastTypes::function: @@ -214,7 +220,8 @@ void SlowCallback(const FunctionCallbackInfo &args) { case FastTypes::u64: case FastTypes::i64: case FastTypes::pointer: - uint64_t* res = (uint64_t*)args[args.Length() - 1].As()->Buffer()->Data(); + uint64_t* res = (uint64_t*)args[args.Length() - 1] + .As()->Buffer()->Data(); *res = state->args[0]; break; } @@ -306,36 +313,47 @@ v8::CTypeInfo rcdlclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); v8::CFunctionInfo infodlclose = v8::CFunctionInfo(rcdlclose, 2, cargsdlclose); v8::CFunction pFdlclose = v8::CFunction((const void*)&dlcloseFast, &infodlclose); -int32_t closeFast(void* p, int32_t p0); -v8::CTypeInfo cargsclose[2] = { +int32_t readFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargsread[4] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infoclose = v8::CFunctionInfo(rcclose, 2, cargsclose); -v8::CFunction pFclose = v8::CFunction((const void*)&closeFast, &infoclose); +v8::CTypeInfo rcread = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforead = v8::CFunctionInfo(rcread, 4, cargsread); +v8::CFunction pFread = v8::CFunction((const void*)&readFast, &inforead); -int32_t openFast(void* p, struct FastOneByteString* const p0, int32_t p1, int32_t p2); -v8::CTypeInfo cargsopen[4] = { +int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargswrite[4] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), - v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcopen = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infoopen = v8::CFunctionInfo(rcopen, 4, cargsopen); -v8::CFunction pFopen = v8::CFunction((const void*)&openFast, &infoopen); +v8::CTypeInfo rcwrite = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowrite = v8::CFunctionInfo(rcwrite, 4, cargswrite); +v8::CFunction pFwrite = v8::CFunction((const void*)&writeFast, &infowrite); -int32_t readFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); -v8::CTypeInfo cargsread[4] = { +int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargswrite_string[4] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), - v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcread = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo inforead = v8::CFunctionInfo(rcread, 4, cargsread); -v8::CFunction pFread = v8::CFunction((const void*)&readFast, &inforead); +v8::CTypeInfo rcwrite_string = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowrite_string = v8::CFunctionInfo(rcwrite_string, 4, cargswrite_string); +v8::CFunction pFwrite_string = v8::CFunction((const void*)&write_stringFast, &infowrite_string); + +int32_t closeFast(void* p, int32_t p0); +v8::CTypeInfo cargsclose[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoclose = v8::CFunctionInfo(rcclose, 2, cargsclose); +v8::CFunction pFclose = v8::CFunction((const void*)&closeFast, &infoclose); int32_t preadFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, uint32_t p3); v8::CTypeInfo cargspread[5] = { @@ -360,48 +378,47 @@ v8::CTypeInfo rclseek = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); v8::CFunctionInfo infolseek = v8::CFunctionInfo(rclseek, 4, cargslseek); v8::CFunction pFlseek = v8::CFunction((const void*)&lseekFast, &infolseek); -int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); -v8::CTypeInfo cargswrite[4] = { +int32_t fstatFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsfstat[3] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), - v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcwrite = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infowrite = v8::CFunctionInfo(rcwrite, 4, cargswrite); -v8::CFunction pFwrite = v8::CFunction((const void*)&writeFast, &infowrite); +v8::CTypeInfo rcfstat = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofstat = v8::CFunctionInfo(rcfstat, 3, cargsfstat); +v8::CFunction pFfstat = v8::CFunction((const void*)&fstatFast, &infofstat); -void getcwdFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); -v8::CTypeInfo cargsgetcwd[4] = { +int32_t fcntlFast(void* p, int32_t p0, int32_t p1, int32_t p2); +v8::CTypeInfo cargsfcntl[4] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), - v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), - v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcgetcwd = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); -v8::CFunctionInfo infogetcwd = v8::CFunctionInfo(rcgetcwd, 4, cargsgetcwd); -v8::CFunction pFgetcwd = v8::CFunction((const void*)&getcwdFast, &infogetcwd); +v8::CTypeInfo rcfcntl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofcntl = v8::CFunctionInfo(rcfcntl, 4, cargsfcntl); +v8::CFunction pFfcntl = v8::CFunction((const void*)&fcntlFast, &infofcntl); -int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1); -v8::CTypeInfo cargswrite_string[4] = { +int32_t accessFast(void* p, struct FastOneByteString* const p0, int32_t p1); +v8::CTypeInfo cargsaccess[3] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), - v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcwrite_string = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infowrite_string = v8::CFunctionInfo(rcwrite_string, 4, cargswrite_string); -v8::CFunction pFwrite_string = v8::CFunction((const void*)&write_stringFast, &infowrite_string); +v8::CTypeInfo rcaccess = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoaccess = v8::CFunctionInfo(rcaccess, 3, cargsaccess); +v8::CFunction pFaccess = v8::CFunction((const void*)&accessFast, &infoaccess); -int32_t fstatFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); -v8::CTypeInfo cargsfstat[3] = { +int32_t openFast(void* p, struct FastOneByteString* const p0, int32_t p1, int32_t p2); +v8::CTypeInfo cargsopen[4] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), - v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), }; -v8::CTypeInfo rcfstat = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infofstat = v8::CFunctionInfo(rcfstat, 3, cargsfstat); -v8::CFunction pFfstat = v8::CFunction((const void*)&fstatFast, &infofstat); +v8::CTypeInfo rcopen = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoopen = v8::CFunctionInfo(rcopen, 4, cargsopen); +v8::CFunction pFopen = v8::CFunction((const void*)&openFast, &infoopen); int32_t unlinkFast(void* p, struct FastOneByteString* const p0); v8::CTypeInfo cargsunlink[2] = { @@ -422,6 +439,17 @@ v8::CTypeInfo rcreaddir = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); v8::CFunctionInfo inforeaddir = v8::CFunctionInfo(rcreaddir, 3, cargsreaddir); v8::CFunction pFreaddir = v8::CFunction((const void*)&readdirFast, &inforeaddir); +uint32_t readlinkFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, uint32_t p2); +v8::CTypeInfo cargsreadlink[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcreadlink = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo inforeadlink = v8::CFunctionInfo(rcreadlink, 4, cargsreadlink); +v8::CFunction pFreadlink = v8::CFunction((const void*)&readlinkFast, &inforeadlink); + void opendirFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p_ret); v8::CTypeInfo cargsopendir[3] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), @@ -442,6 +470,15 @@ v8::CTypeInfo rcmkdir = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); v8::CFunctionInfo infomkdir = v8::CFunctionInfo(rcmkdir, 3, cargsmkdir); v8::CFunction pFmkdir = v8::CFunction((const void*)&mkdirFast, &infomkdir); +int32_t rmdirFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargsrmdir[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcrmdir = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo informdir = v8::CFunctionInfo(rcrmdir, 2, cargsrmdir); +v8::CFunction pFrmdir = v8::CFunction((const void*)&rmdirFast, &informdir); + int32_t closedirFast(void* p, void* p0); v8::CTypeInfo cargsclosedir[2] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), @@ -451,16 +488,23 @@ v8::CTypeInfo rcclosedir = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); v8::CFunctionInfo infoclosedir = v8::CFunctionInfo(rcclosedir, 2, cargsclosedir); v8::CFunction pFclosedir = v8::CFunction((const void*)&closedirFast, &infoclosedir); -int32_t fcntlFast(void* p, int32_t p0, int32_t p1, int32_t p2); -v8::CTypeInfo cargsfcntl[4] = { +int32_t chdirFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargschdir[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcchdir = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infochdir = v8::CFunctionInfo(rcchdir, 2, cargschdir); +v8::CFunction pFchdir = v8::CFunction((const void*)&chdirFast, &infochdir); + +int32_t fchdirFast(void* p, int32_t p0); +v8::CTypeInfo cargsfchdir[2] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), - v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), - v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), }; -v8::CTypeInfo rcfcntl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); -v8::CFunctionInfo infofcntl = v8::CFunctionInfo(rcfcntl, 4, cargsfcntl); -v8::CFunction pFfcntl = v8::CFunction((const void*)&fcntlFast, &infofcntl); +v8::CTypeInfo rcfchdir = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofchdir = v8::CFunctionInfo(rcfchdir, 2, cargsfchdir); +v8::CFunction pFfchdir = v8::CFunction((const void*)&fchdirFast, &infofchdir); int32_t mprotectFast(void* p, void* p0, uint32_t p1, int32_t p2); v8::CTypeInfo cargsmprotect[4] = { @@ -512,6 +556,26 @@ v8::CTypeInfo rcmmap = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); v8::CFunctionInfo infommap = v8::CFunctionInfo(rcmmap, 8, cargsmmap); v8::CFunction pFmmap = v8::CFunction((const void*)&mmapFast, &infommap); +void callocFast(void* p, uint32_t p0, uint32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargscalloc[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rccalloc = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infocalloc = v8::CFunctionInfo(rccalloc, 4, cargscalloc); +v8::CFunction pFcalloc = v8::CFunction((const void*)&callocFast, &infocalloc); + +void freeFast(void* p, void* p0); +v8::CTypeInfo cargsfree[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcfree = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infofree = v8::CFunctionInfo(rcfree, 2, cargsfree); +v8::CFunction pFfree = v8::CFunction((const void*)&freeFast, &infofree); + void fastcallFast(void* p, void* p0); v8::CTypeInfo cargsfastcall[2] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), @@ -531,6 +595,53 @@ v8::CTypeInfo rcgetenv = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); v8::CFunctionInfo infogetenv = v8::CFunctionInfo(rcgetenv, 3, cargsgetenv); v8::CFunction pFgetenv = v8::CFunction((const void*)&getenvFast, &infogetenv); +int32_t setenvFast(void* p, struct FastOneByteString* const p0, struct FastOneByteString* const p1, int32_t p2); +v8::CTypeInfo cargssetenv[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsetenv = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosetenv = v8::CFunctionInfo(rcsetenv, 4, cargssetenv); +v8::CFunction pFsetenv = v8::CFunction((const void*)&setenvFast, &infosetenv); + +int32_t unsetenvFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargsunsetenv[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcunsetenv = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infounsetenv = v8::CFunctionInfo(rcunsetenv, 2, cargsunsetenv); +v8::CFunction pFunsetenv = v8::CFunction((const void*)&unsetenvFast, &infounsetenv); + +void sleepFast(void* p, int32_t p0); +v8::CTypeInfo cargssleep[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsleep = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infosleep = v8::CFunctionInfo(rcsleep, 2, cargssleep); +v8::CFunction pFsleep = v8::CFunction((const void*)&sleepFast, &infosleep); + +int32_t usleepFast(void* p, uint32_t p0); +v8::CTypeInfo cargsusleep[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcusleep = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infousleep = v8::CFunctionInfo(rcusleep, 2, cargsusleep); +v8::CFunction pFusleep = v8::CFunction((const void*)&usleepFast, &infousleep); + +int32_t dupFast(void* p, int32_t p0); +v8::CTypeInfo cargsdup[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcdup = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodup = v8::CFunctionInfo(rcdup, 2, cargsdup); +v8::CFunction pFdup = v8::CFunction((const void*)&dupFast, &infodup); + int32_t dup2Fast(void* p, int32_t p0, int32_t p1); v8::CTypeInfo cargsdup2[3] = { v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), @@ -541,6 +652,127 @@ v8::CTypeInfo rcdup2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); v8::CFunctionInfo infodup2 = v8::CFunctionInfo(rcdup2, 3, cargsdup2); v8::CFunction pFdup2 = v8::CFunction((const void*)&dup2Fast, &infodup2); +void getcwdFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsgetcwd[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcgetcwd = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogetcwd = v8::CFunctionInfo(rcgetcwd, 4, cargsgetcwd); +v8::CFunction pFgetcwd = v8::CFunction((const void*)&getcwdFast, &infogetcwd); + +int32_t getpidFast(void* p); +v8::CTypeInfo cargsgetpid[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcgetpid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetpid = v8::CFunctionInfo(rcgetpid, 1, cargsgetpid); +v8::CFunction pFgetpid = v8::CFunction((const void*)&getpidFast, &infogetpid); + +int32_t forkFast(void* p); +v8::CTypeInfo cargsfork[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcfork = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofork = v8::CFunctionInfo(rcfork, 1, cargsfork); +v8::CFunction pFfork = v8::CFunction((const void*)&forkFast, &infofork); + +int32_t killFast(void* p, int32_t p0, int32_t p1); +v8::CTypeInfo cargskill[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rckill = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infokill = v8::CFunctionInfo(rckill, 3, cargskill); +v8::CFunction pFkill = v8::CFunction((const void*)&killFast, &infokill); + +int32_t waitpidFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargswaitpid[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcwaitpid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowaitpid = v8::CFunctionInfo(rcwaitpid, 4, cargswaitpid); +v8::CFunction pFwaitpid = v8::CFunction((const void*)&waitpidFast, &infowaitpid); + +int32_t execvpFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsexecvp[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcexecvp = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoexecvp = v8::CFunctionInfo(rcexecvp, 3, cargsexecvp); +v8::CFunction pFexecvp = v8::CFunction((const void*)&execvpFast, &infoexecvp); + +int32_t getrusageFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsgetrusage[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgetrusage = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetrusage = v8::CFunctionInfo(rcgetrusage, 3, cargsgetrusage); +v8::CFunction pFgetrusage = v8::CFunction((const void*)&getrusageFast, &infogetrusage); + +int32_t timesFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargstimes[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rctimes = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotimes = v8::CFunctionInfo(rctimes, 2, cargstimes); +v8::CFunction pFtimes = v8::CFunction((const void*)×Fast, &infotimes); + +void isolate_context_createFast(void* p, int32_t p0, void* p1, struct FastOneByteString* const p2, uint32_t p3, struct FastOneByteString* const p4, uint32_t p5, void* p6, int32_t p7, int32_t p8, uint64_t p9, struct FastOneByteString* const p10, struct FastOneByteString* const p11, int32_t p12, int32_t p13, void* p14, struct FastApiTypedArray* const p15); +v8::CTypeInfo cargsisolate_context_create[17] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcisolate_context_create = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoisolate_context_create = v8::CFunctionInfo(rcisolate_context_create, 17, cargsisolate_context_create); +v8::CFunction pFisolate_context_create = v8::CFunction((const void*)&isolate_context_createFast, &infoisolate_context_create); + +void isolate_context_destroyFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargsisolate_context_destroy[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcisolate_context_destroy = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoisolate_context_destroy = v8::CFunctionInfo(rcisolate_context_destroy, 2, cargsisolate_context_destroy); +v8::CFunction pFisolate_context_destroy = v8::CFunction((const void*)&isolate_context_destroyFast, &infoisolate_context_destroy); + +int32_t isolate_context_sizeFast(void* p); +v8::CTypeInfo cargsisolate_context_size[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcisolate_context_size = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoisolate_context_size = v8::CFunctionInfo(rcisolate_context_size, 1, cargsisolate_context_size); +v8::CFunction pFisolate_context_size = v8::CFunction((const void*)&isolate_context_sizeFast, &infoisolate_context_size); + void dlopenSlow(const FunctionCallbackInfo &args) { @@ -586,32 +818,6 @@ int32_t dlcloseFast(void* p, void* p0) { void* v0 = reinterpret_cast(p0); return dlclose(v0); } -void closeSlow(const FunctionCallbackInfo &args) { - Isolate *isolate = args.GetIsolate(); - int32_t v0 = Local::Cast(args[0])->Value(); - int32_t rc = close(v0); - args.GetReturnValue().Set(Number::New(isolate, rc)); -} - -int32_t closeFast(void* p, int32_t p0) { - int32_t v0 = p0; - return close(v0); -} -void openSlow(const FunctionCallbackInfo &args) { - Isolate *isolate = args.GetIsolate(); - String::Utf8Value v0(isolate, args[0]); - int32_t v1 = Local::Cast(args[1])->Value(); - int32_t v2 = Local::Cast(args[2])->Value(); - int32_t rc = open(*v0, v1, v2); - args.GetReturnValue().Set(Number::New(isolate, rc)); -} - -int32_t openFast(void* p, struct FastOneByteString* const p0, int32_t p1, int32_t p2) { - struct FastOneByteString* const v0 = p0; - int32_t v1 = p1; - int32_t v2 = p2; - return open(v0->data, v1, v2); -} void readSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); @@ -629,86 +835,82 @@ int32_t readFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_ int32_t v2 = p2; return read(v0, v1, v2); } -void preadSlow(const FunctionCallbackInfo &args) { +void writeSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); Local u81 = args[1].As(); uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); void* v1 = reinterpret_cast(ptr1); int32_t v2 = Local::Cast(args[2])->Value(); - uint32_t v3 = Local::Cast(args[3])->Value(); - int32_t rc = pread(v0, v1, v2, v3); + int32_t rc = write(v0, v1, v2); args.GetReturnValue().Set(Number::New(isolate, rc)); } -int32_t preadFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, uint32_t p3) { +int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { int32_t v0 = p0; void* v1 = reinterpret_cast(p1->data); int32_t v2 = p2; - uint32_t v3 = p3; - return pread(v0, v1, v2, v3); + return write(v0, v1, v2); } -void lseekSlow(const FunctionCallbackInfo &args) { +void write_stringSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); - uint32_t v1 = Local::Cast(args[1])->Value(); - int32_t v2 = Local::Cast(args[2])->Value(); - uint32_t rc = lseek(v0, v1, v2); - args.GetReturnValue().Set(Number::New(isolate, rc)); -} + String::Utf8Value v1(isolate, args[1]); + int32_t v2 = v1.length(); + int32_t rc = write(v0, *v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} -uint32_t lseekFast(void* p, int32_t p0, uint32_t p1, int32_t p2) { +int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1) { int32_t v0 = p0; - uint32_t v1 = p1; - int32_t v2 = p2; - return lseek(v0, v1, v2); + struct FastOneByteString* const v1 = p1; + int32_t v2 = p1->length; + return write(v0, v1->data, v2); } -void writeSlow(const FunctionCallbackInfo &args) { +void closeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = close(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t closeFast(void* p, int32_t p0) { + int32_t v0 = p0; + return close(v0); +} +void preadSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); Local u81 = args[1].As(); uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); void* v1 = reinterpret_cast(ptr1); int32_t v2 = Local::Cast(args[2])->Value(); - int32_t rc = write(v0, v1, v2); + uint32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = pread(v0, v1, v2, v3); args.GetReturnValue().Set(Number::New(isolate, rc)); } -int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { +int32_t preadFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, uint32_t p3) { int32_t v0 = p0; void* v1 = reinterpret_cast(p1->data); int32_t v2 = p2; - return write(v0, v1, v2); -} -void getcwdSlow(const FunctionCallbackInfo &args) { - char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); - int32_t v1 = Local::Cast(args[1])->Value(); - void* rc = getcwd(v0, v1); - Local ab = args[2].As()->Buffer(); - ((void**)ab->Data())[0] = rc; -} - -void getcwdFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { - char* v0 = reinterpret_cast(p0); - int32_t v1 = p1; - void* r = getcwd(v0, v1); - ((void**)p_ret->data)[0] = r; - + uint32_t v3 = p3; + return pread(v0, v1, v2, v3); } -void write_stringSlow(const FunctionCallbackInfo &args) { +void lseekSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); - String::Utf8Value v1(isolate, args[1]); - int32_t v2 = v1.length(); - int32_t rc = write(v0, *v1, v2); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + uint32_t rc = lseek(v0, v1, v2); args.GetReturnValue().Set(Number::New(isolate, rc)); } -int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1) { +uint32_t lseekFast(void* p, int32_t p0, uint32_t p1, int32_t p2) { int32_t v0 = p0; - struct FastOneByteString* const v1 = p1; - int32_t v2 = p1->length; - return write(v0, v1->data, v2); + uint32_t v1 = p1; + int32_t v2 = p2; + return lseek(v0, v1, v2); } void fstatSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); @@ -725,6 +927,49 @@ int32_t fstatFast(void* p, int32_t p0, struct FastApiTypedArray* const p1) { struct stat * v1 = reinterpret_cast(p1->data); return fstat(v0, v1); } +void fcntlSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = fcntl(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t fcntlFast(void* p, int32_t p0, int32_t p1, int32_t p2) { + int32_t v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + return fcntl(v0, v1, v2); +} +void accessSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = access(*v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t accessFast(void* p, struct FastOneByteString* const p0, int32_t p1) { + struct FastOneByteString* const v0 = p0; + int32_t v1 = p1; + return access(v0->data, v1); +} +void openSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = open(*v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t openFast(void* p, struct FastOneByteString* const p0, int32_t p1, int32_t p2) { + struct FastOneByteString* const v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + return open(v0->data, v1, v2); +} void unlinkSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); String::Utf8Value v0(isolate, args[0]); @@ -749,6 +994,23 @@ void readdirFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { ((dirent**)p_ret->data)[0] = r; } +void readlinkSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + char* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + uint32_t rc = readlink(*v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t readlinkFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, uint32_t p2) { + struct FastOneByteString* const v0 = p0; + char* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + return readlink(v0->data, v1, v2); +} void opendirSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); String::Utf8Value v0(isolate, args[0]); @@ -776,6 +1038,17 @@ int32_t mkdirFast(void* p, struct FastOneByteString* const p0, uint32_t p1) { uint32_t v1 = p1; return mkdir(v0->data, v1); } +void rmdirSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = rmdir(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t rmdirFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return rmdir(v0->data); +} void closedirSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); DIR* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); @@ -787,20 +1060,27 @@ int32_t closedirFast(void* p, void* p0) { DIR* v0 = reinterpret_cast(p0); return closedir(v0); } -void fcntlSlow(const FunctionCallbackInfo &args) { +void chdirSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = chdir(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t chdirFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return chdir(v0->data); +} +void fchdirSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); - int32_t v1 = Local::Cast(args[1])->Value(); - int32_t v2 = Local::Cast(args[2])->Value(); - int32_t rc = fcntl(v0, v1, v2); + int32_t rc = fchdir(v0); args.GetReturnValue().Set(Number::New(isolate, rc)); } -int32_t fcntlFast(void* p, int32_t p0, int32_t p1, int32_t p2) { +int32_t fchdirFast(void* p, int32_t p0) { int32_t v0 = p0; - int32_t v1 = p1; - int32_t v2 = p2; - return fcntl(v0, v1, v2); + return fchdir(v0); } void mprotectSlow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); @@ -874,6 +1154,30 @@ void mmapFast(void* p, void* p0, uint32_t p1, int32_t p2, int32_t p3, int32_t p4 ((void**)p_ret->data)[0] = r; } +void callocSlow(const FunctionCallbackInfo &args) { + uint32_t v0 = Local::Cast(args[0])->Value(); + uint32_t v1 = Local::Cast(args[1])->Value(); + void* rc = calloc(v0, v1); + Local ab = args[2].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void callocFast(void* p, uint32_t p0, uint32_t p1, struct FastApiTypedArray* const p_ret) { + uint32_t v0 = p0; + uint32_t v1 = p1; + void* r = calloc(v0, v1); + ((void**)p_ret->data)[0] = r; + +} +void freeSlow(const FunctionCallbackInfo &args) { + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + free(v0); +} + +void freeFast(void* p, void* p0) { + void* v0 = reinterpret_cast(p0); + free(v0); +} void fastcallSlow(const FunctionCallbackInfo &args) { struct fastcall* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); lo_fastcall(v0); @@ -897,6 +1201,63 @@ void getenvFast(void* p, struct FastOneByteString* const p0, struct FastApiTyped ((char**)p_ret->data)[0] = r; } +void setenvSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + String::Utf8Value v1(isolate, args[1]); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = setenv(*v0, *v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setenvFast(void* p, struct FastOneByteString* const p0, struct FastOneByteString* const p1, int32_t p2) { + struct FastOneByteString* const v0 = p0; + struct FastOneByteString* const v1 = p1; + int32_t v2 = p2; + return setenv(v0->data, v1->data, v2); +} +void unsetenvSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = unsetenv(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t unsetenvFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return unsetenv(v0->data); +} +void sleepSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + sleep(v0); +} + +void sleepFast(void* p, int32_t p0) { + int32_t v0 = p0; + sleep(v0); +} +void usleepSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = usleep(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t usleepFast(void* p, uint32_t p0) { + uint32_t v0 = p0; + return usleep(v0); +} +void dupSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = dup(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t dupFast(void* p, int32_t p0) { + int32_t v0 = p0; + return dup(v0); +} void dup2Slow(const FunctionCallbackInfo &args) { Isolate *isolate = args.GetIsolate(); int32_t v0 = Local::Cast(args[0])->Value(); @@ -910,36 +1271,266 @@ int32_t dup2Fast(void* p, int32_t p0, int32_t p1) { int32_t v1 = p1; return dup2(v0, v1); } +void getcwdSlow(const FunctionCallbackInfo &args) { + char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + void* rc = getcwd(v0, v1); + Local ab = args[2].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void getcwdFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + char* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + void* r = getcwd(v0, v1); + ((void**)p_ret->data)[0] = r; + +} +void getpidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + int32_t rc = getpid(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getpidFast(void* p) { + + return getpid(); +} +void forkSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + int32_t rc = fork(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t forkFast(void* p) { + + return fork(); +} +void killSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = kill(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t killFast(void* p, int32_t p0, int32_t p1) { + int32_t v0 = p0; + int32_t v1 = p1; + return kill(v0, v1); +} +void waitpidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + int* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = waitpid(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t waitpidFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + int* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return waitpid(v0, v1, v2); +} +void execvpSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + char* const* v1 = reinterpret_cast(ptr1); + int32_t rc = execvp(*v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t execvpFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1) { + struct FastOneByteString* const v0 = p0; + char* const* v1 = reinterpret_cast(p1->data); + return execvp(v0->data, v1); +} +void getrusageSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + struct rusage* v1 = reinterpret_cast(ptr1); + int32_t rc = getrusage(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getrusageFast(void* p, int32_t p0, struct FastApiTypedArray* const p1) { + int32_t v0 = p0; + struct rusage* v1 = reinterpret_cast(p1->data); + return getrusage(v0, v1); +} +void timesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + struct tms* v0 = reinterpret_cast(ptr0); + int32_t rc = times(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t timesFast(void* p, struct FastApiTypedArray* const p0) { + struct tms* v0 = reinterpret_cast(p0->data); + return times(v0); +} +void isolate_createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + char** v1 = reinterpret_cast(ptr1); + String::Utf8Value v2(isolate, args[2]); + uint32_t v3 = Local::Cast(args[3])->Value(); + String::Utf8Value v4(isolate, args[4]); + uint32_t v5 = Local::Cast(args[5])->Value(); + Local u86 = args[6].As(); + uint8_t* ptr6 = (uint8_t*)u86->Buffer()->Data() + u86->ByteOffset(); + char* v6 = reinterpret_cast(ptr6); + int32_t v7 = Local::Cast(args[7])->Value(); + int32_t v8 = Local::Cast(args[8])->Value(); + uint64_t v9 = Local::Cast(args[9])->Value(); + String::Utf8Value v10(isolate, args[10]); + String::Utf8Value v11(isolate, args[11]); + int32_t v12 = Local::Cast(args[12])->Value(); + int32_t v13 = Local::Cast(args[13])->Value(); + void* v14 = reinterpret_cast((uint64_t)Local::Cast(args[14])->Value()); + int32_t rc = lo_create_isolate(v0, v1, *v2, v3, *v4, v5, v6, v7, v8, v9, *v10, *v11, v12, v13, v14); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +void isolate_context_createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + char** v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + String::Utf8Value v2(isolate, args[2]); + uint32_t v3 = Local::Cast(args[3])->Value(); + String::Utf8Value v4(isolate, args[4]); + uint32_t v5 = Local::Cast(args[5])->Value(); + char* v6 = reinterpret_cast((uint64_t)Local::Cast(args[6])->Value()); + int32_t v7 = Local::Cast(args[7])->Value(); + int32_t v8 = Local::Cast(args[8])->Value(); + uint64_t v9 = Local::Cast(args[9])->Value(); + String::Utf8Value v10(isolate, args[10]); + String::Utf8Value v11(isolate, args[11]); + int32_t v12 = Local::Cast(args[12])->Value(); + int32_t v13 = Local::Cast(args[13])->Value(); + void* v14 = reinterpret_cast((uint64_t)Local::Cast(args[14])->Value()); + Local u815 = args[15].As(); + uint8_t* ptr15 = (uint8_t*)u815->Buffer()->Data() + u815->ByteOffset(); + struct isolate_context* v15 = reinterpret_cast(ptr15); + lo_create_isolate_context(v0, v1, *v2, v3, *v4, v5, v6, v7, v8, v9, *v10, *v11, v12, v13, v14, v15); +} + +void isolate_context_createFast(void* p, int32_t p0, void* p1, struct FastOneByteString* const p2, uint32_t p3, struct FastOneByteString* const p4, uint32_t p5, void* p6, int32_t p7, int32_t p8, uint64_t p9, struct FastOneByteString* const p10, struct FastOneByteString* const p11, int32_t p12, int32_t p13, void* p14, struct FastApiTypedArray* const p15) { + int32_t v0 = p0; + char** v1 = reinterpret_cast(p1); + struct FastOneByteString* const v2 = p2; + uint32_t v3 = p3; + struct FastOneByteString* const v4 = p4; + uint32_t v5 = p5; + char* v6 = reinterpret_cast(p6); + int32_t v7 = p7; + int32_t v8 = p8; + uint64_t v9 = p9; + struct FastOneByteString* const v10 = p10; + struct FastOneByteString* const v11 = p11; + int32_t v12 = p12; + int32_t v13 = p13; + void* v14 = reinterpret_cast(p14); + struct isolate_context* v15 = reinterpret_cast(p15->data); + lo_create_isolate_context(v0, v1, v2->data, v3, v4->data, v5, v6, v7, v8, v9, v10->data, v11->data, v12, v13, v14, v15); +} +void isolate_context_destroySlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + struct isolate_context* v0 = reinterpret_cast(ptr0); + lo_destroy_isolate_context(v0); +} + +void isolate_context_destroyFast(void* p, struct FastApiTypedArray* const p0) { + struct isolate_context* v0 = reinterpret_cast(p0->data); + lo_destroy_isolate_context(v0); +} +void isolate_context_sizeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + int32_t rc = lo_context_size(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t isolate_context_sizeFast(void* p) { + + return lo_context_size(); +} +void isolate_startSlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + void* v0 = reinterpret_cast(ptr0); + lo_start_isolate(v0); +} + void Init(Isolate* isolate, Local target) { Local module = ObjectTemplate::New(isolate); SET_FAST_METHOD(isolate, module, "dlopen", &pFdlopen, dlopenSlow); SET_FAST_METHOD(isolate, module, "dlsym", &pFdlsym, dlsymSlow); SET_FAST_METHOD(isolate, module, "dlclose", &pFdlclose, dlcloseSlow); - SET_FAST_METHOD(isolate, module, "close", &pFclose, closeSlow); - SET_FAST_METHOD(isolate, module, "open", &pFopen, openSlow); SET_FAST_METHOD(isolate, module, "read", &pFread, readSlow); - SET_FAST_METHOD(isolate, module, "pread", &pFpread, preadSlow); - SET_FAST_METHOD(isolate, module, "lseek", &pFlseek, lseekSlow); SET_FAST_METHOD(isolate, module, "write", &pFwrite, writeSlow); - SET_FAST_METHOD(isolate, module, "getcwd", &pFgetcwd, getcwdSlow); SET_FAST_METHOD(isolate, module, "write_string", &pFwrite_string, write_stringSlow); + SET_FAST_METHOD(isolate, module, "close", &pFclose, closeSlow); + SET_FAST_METHOD(isolate, module, "pread", &pFpread, preadSlow); + SET_FAST_METHOD(isolate, module, "lseek", &pFlseek, lseekSlow); SET_FAST_METHOD(isolate, module, "fstat", &pFfstat, fstatSlow); + SET_FAST_METHOD(isolate, module, "fcntl", &pFfcntl, fcntlSlow); + SET_FAST_METHOD(isolate, module, "access", &pFaccess, accessSlow); + SET_FAST_METHOD(isolate, module, "open", &pFopen, openSlow); SET_FAST_METHOD(isolate, module, "unlink", &pFunlink, unlinkSlow); SET_FAST_METHOD(isolate, module, "readdir", &pFreaddir, readdirSlow); + SET_FAST_METHOD(isolate, module, "readlink", &pFreadlink, readlinkSlow); SET_FAST_METHOD(isolate, module, "opendir", &pFopendir, opendirSlow); SET_FAST_METHOD(isolate, module, "mkdir", &pFmkdir, mkdirSlow); + SET_FAST_METHOD(isolate, module, "rmdir", &pFrmdir, rmdirSlow); SET_FAST_METHOD(isolate, module, "closedir", &pFclosedir, closedirSlow); - SET_FAST_METHOD(isolate, module, "fcntl", &pFfcntl, fcntlSlow); + SET_FAST_METHOD(isolate, module, "chdir", &pFchdir, chdirSlow); + SET_FAST_METHOD(isolate, module, "fchdir", &pFfchdir, fchdirSlow); SET_FAST_METHOD(isolate, module, "mprotect", &pFmprotect, mprotectSlow); SET_FAST_METHOD(isolate, module, "memcpy", &pFmemcpy, memcpySlow); SET_FAST_METHOD(isolate, module, "memmove", &pFmemmove, memmoveSlow); SET_FAST_METHOD(isolate, module, "mmap", &pFmmap, mmapSlow); + SET_FAST_METHOD(isolate, module, "calloc", &pFcalloc, callocSlow); + SET_FAST_METHOD(isolate, module, "free", &pFfree, freeSlow); SET_METHOD(isolate, module, "bind_fastcall", bind_fastcallSlow); SET_METHOD(isolate, module, "bind_slowcall", bind_slowcallSlow); SET_FAST_METHOD(isolate, module, "fastcall", &pFfastcall, fastcallSlow); SET_FAST_METHOD(isolate, module, "getenv", &pFgetenv, getenvSlow); + SET_FAST_METHOD(isolate, module, "setenv", &pFsetenv, setenvSlow); + SET_FAST_METHOD(isolate, module, "unsetenv", &pFunsetenv, unsetenvSlow); + SET_FAST_METHOD(isolate, module, "sleep", &pFsleep, sleepSlow); + SET_FAST_METHOD(isolate, module, "usleep", &pFusleep, usleepSlow); + SET_FAST_METHOD(isolate, module, "dup", &pFdup, dupSlow); SET_FAST_METHOD(isolate, module, "dup2", &pFdup2, dup2Slow); + SET_FAST_METHOD(isolate, module, "getcwd", &pFgetcwd, getcwdSlow); + SET_FAST_METHOD(isolate, module, "getpid", &pFgetpid, getpidSlow); + SET_FAST_METHOD(isolate, module, "fork", &pFfork, forkSlow); + SET_FAST_METHOD(isolate, module, "kill", &pFkill, killSlow); + SET_FAST_METHOD(isolate, module, "waitpid", &pFwaitpid, waitpidSlow); + SET_FAST_METHOD(isolate, module, "execvp", &pFexecvp, execvpSlow); + SET_FAST_METHOD(isolate, module, "getrusage", &pFgetrusage, getrusageSlow); + SET_FAST_METHOD(isolate, module, "times", &pFtimes, timesSlow); + SET_METHOD(isolate, module, "isolate_create", isolate_createSlow); + SET_FAST_METHOD(isolate, module, "isolate_context_create", &pFisolate_context_create, isolate_context_createSlow); + SET_FAST_METHOD(isolate, module, "isolate_context_destroy", &pFisolate_context_destroy, isolate_context_destroySlow); + SET_FAST_METHOD(isolate, module, "isolate_context_size", &pFisolate_context_size, isolate_context_sizeSlow); + SET_METHOD(isolate, module, "isolate_start", isolate_startSlow); SET_VALUE(isolate, module, "S_IFBLK", Integer::New(isolate, S_IFBLK)); SET_VALUE(isolate, module, "S_IFCHR", Integer::New(isolate, S_IFCHR)); @@ -960,6 +1551,17 @@ void Init(Isolate* isolate, Local target) { SET_VALUE(isolate, module, "STDIN", Integer::New(isolate, 0)); SET_VALUE(isolate, module, "STDOUT", Integer::New(isolate, 1)); SET_VALUE(isolate, module, "STDERR", Integer::New(isolate, 2)); + SET_VALUE(isolate, module, "O_CLOEXEC", Integer::New(isolate, O_CLOEXEC)); + SET_VALUE(isolate, module, "RUSAGE_SELF", Integer::New(isolate, RUSAGE_SELF)); + SET_VALUE(isolate, module, "SEEK_SET", Integer::New(isolate, SEEK_SET)); + SET_VALUE(isolate, module, "SEEK_CUR", Integer::New(isolate, SEEK_CUR)); + SET_VALUE(isolate, module, "SEEK_END", Integer::New(isolate, SEEK_END)); + SET_VALUE(isolate, module, "S_IRWXO", Integer::New(isolate, S_IRWXO)); + SET_VALUE(isolate, module, "F_OK", Integer::New(isolate, F_OK)); + SET_VALUE(isolate, module, "S_IFMT", Integer::New(isolate, S_IFMT)); + SET_VALUE(isolate, module, "S_IFDIR", Integer::New(isolate, S_IFDIR)); + SET_VALUE(isolate, module, "S_IFREG", Integer::New(isolate, S_IFREG)); + SET_MODULE(isolate, target, "core", module); } diff --git a/lib/core/doc.js b/lib/core/doc.js new file mode 100644 index 0000000..853ba85 --- /dev/null +++ b/lib/core/doc.js @@ -0,0 +1,256 @@ +const api = { +// dynamic loader + dlopen: { + parameters: ['string', 'i32'], + pointers: ['const char*'], + jsdoc: `/** +* The function dlopen() loads the dynamic shared object (shared library) +* file named by the null-terminated string filename and returns an opaque +* "handle" for the loaded object. This handle is employed with other +* functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3), +* and dlclose() +* +* \`\`\`js +* const handle = assert(core.dlopen('libcurl.so', core.RTLD_NOW)); +* \`\`\` +* @param file_path {string} the path to the shared library file to open. +* @param flags {number} (i32) resolve symbols now (RTLD_NOW) or lazily (RTLD_LAZY) +*/`, + result: 'pointer', + platform: ['linux', 'mac', 'posix'], + man: 'https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlopen.html' + }, + dlsym: { + parameters: ['pointer', 'string'], + pointers: ['void*', 'const char*'], + result: 'pointer' + }, + dlclose: { + parameters: ['pointer'], + pointers: ['void*'], + result: 'i32' + }, +// file descriptor operations + read: { + parameters: ['i32', 'buffer', 'i32'], + result: 'i32' + }, + write: { + parameters: ['i32', 'buffer', 'i32'], + result: 'i32' + }, + write_string: { + parameters: ['i32', 'string', 'i32'], + pointers: [, 'const char*'], + override: [, , { param: 1, fastfield: '->length', slowfield: '.length()' }], + result: 'i32', + name: 'write' + }, + close: { + parameters: ['i32'], + result: 'i32' + }, + pread: { + parameters: ['i32', 'buffer', 'i32', 'u32'], + result: 'i32' + }, + lseek: { + parameters: ['i32', 'u32', 'i32'], + result: 'u32' + }, + fstat: { + parameters: ['i32', 'buffer'], + pointers: [, 'struct stat *'], + result: 'i32' + }, + fcntl: { + parameters: ['i32', 'i32', 'i32'], + result: 'i32' + }, +// file system operations + open: { + parameters: ['string', 'i32', 'i32'], + pointers: ['const char*'], + result: 'i32' + }, + unlink: { + parameters: ['string'], + result: 'i32' + }, + readdir: { + parameters: ['pointer'], + result: 'pointer', + pointers: ['DIR*'], + rpointer: 'dirent*' + }, + readlink: { + parameters: ['string', 'buffer', 'u32'], + pointers: ['const char*', 'char*'], + result: 'u32' + }, + opendir: { + parameters: ['string'], + result: 'pointer', + pointers: ['const char*'], + rpointer: 'DIR*' + }, + mkdir: { + parameters: ['string', 'u32'], + result: 'i32', + }, + closedir: { + parameters: ['pointer'], + pointers: ['DIR*'], + result: 'i32' + }, +// memory operations + mprotect: { + parameters: ['pointer', 'u32', 'i32'], + result: 'i32' + }, + memcpy: { + parameters: ['pointer', 'pointer', 'u32'], + result: 'pointer' + }, + memmove: { + parameters: ['pointer', 'pointer', 'u32'], + result: 'pointer' + }, + mmap: { + parameters: ['pointer', 'u32', 'i32', 'i32', 'i32', 'u32'], + result: 'pointer' + }, + calloc: { + parameters: ['u32', 'u32'], + result: 'pointer' + }, + free: { + parameters: ['pointer'], + result: 'void' + }, + memfd_create: { + parameters: ['string', 'u32'], + result: 'i32', + platform: ['linux'], + man: 'https://man7.org/linux/man-pages/man2/memfd_create.2.html' + }, +// fastcalls + bind_fastcall: { + declare_only: true, + nofast: true + }, + bind_slowcall: { + declare_only: true, + nofast: true + }, + fastcall: { + parameters: ['pointer'], + pointers: ['struct fastcall*'], + result: 'void', + name: 'lo_fastcall' + }, +// system + getenv: { + parameters: ['string'], + pointers: ['const char*'], + rpointer: 'char*', + result: 'pointer' + }, + setenv: { + parameters: ['string', 'string', 'i32'], + pointers: ['const char*', 'const char*'], + result: 'i32' + }, + unsetenv: { + parameters: ['string'], + pointers: ['const char*'], + result: 'i32' + }, + sleep: { + parameters: ['i32'], + result: 'void' + }, + usleep: { + parameters: ['u32'], + result: 'i32' + }, + dup2: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + getcwd: { + parameters: ['pointer', 'i32'], + pointers: ['char*'], + result: 'pointer' + }, + getpid: { + parameters: [], + result: 'i32' + }, + fork: { + parameters: [], + result: 'i32' + }, + kill: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + waitpid: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'int*'], + result: 'i32' + }, + execvp: { + parameters: ['string', 'buffer'], + pointers: ['const char*', 'char* const*'], + result: 'i32' + }, +// isolates + isolate_create: { + parameters: [ + 'i32', 'u32array', 'string', 'u32', 'string', 'u32', 'buffer', + 'i32', 'i32', 'u64', 'string', 'string', 'i32', 'i32', 'pointer' + ], + pointers: [ + , 'char**', 'const char*', , 'const char*', , 'char*', , , + 'const char*', 'const char*' + ], + result: 'i32', + name: 'lo_create_isolate', + jsdoc: ``, + os: [], + arch: [], + nofast: true + }, + isolate_context_create: { + parameters: [ + 'i32', 'pointer', 'string', 'u32', 'string', 'u32', 'pointer', + 'i32', 'i32', 'u64', 'string', 'string', 'i32', 'i32', 'pointer', 'buffer' + ], + pointers: [ + , 'char**', 'const char*', , 'const char*', , 'char*', , , + 'const char*', 'const char*', , , , , 'struct isolate_context*' + ], + result: 'void', + name: 'lo_create_isolate_context' + }, + isolate_context_destroy: { + parameters: ['buffer'], + pointers: ['struct isolate_context*'], + result: 'void', + name: 'lo_destroy_isolate_context' + }, + isolate_context_size: { + parameters: [], + result: 'i32', + name: 'lo_context_size' + }, + isolate_start: { + parameters: ['buffer'], + result: 'void', + name: 'lo_start_isolate', + nofast: true + }, +} + +export { api } diff --git a/lib/curl.js b/lib/curl.js new file mode 100644 index 0000000..879aafa --- /dev/null +++ b/lib/curl.js @@ -0,0 +1,47 @@ +const { curl } = lo.load('curl') + +const { core, assert, wrap } = lo + +const { + global_init, easy_setopt, easy_setopt_2, easy_perform, easy_cleanup, + global_cleanup, easy_getinfo, easy_setopt_3, fclose, + CURL_GLOBAL_DEFAULT, CURLOPT_URL, CURLOPT_BUFFERSIZE, + CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1, CURLOPT_FOLLOWLOCATION, + CURLINFO_SIZE_DOWNLOAD_T, CURLOPT_WRITEFUNCTION, CURLOPT_WRITEDATA, + CURLINFO_RESPONSE_CODE, CURLOPT_FAILONERROR +} = curl + +const handle = new Uint32Array(2) +const easy_init = wrap(handle, curl.easy_init, 0) +const fopen = wrap(handle, curl.fopen, 2) + +let initialized = false + +function fetch (url, file_name = '') { + if (!initialized) { + assert(global_init(CURL_GLOBAL_DEFAULT) === 0) + } + assert(file_name) + const file_handle = fopen(file_name, 'w+') + assert(file_handle) + const curl = assert(easy_init()) + assert(easy_setopt_2(curl, CURLOPT_BUFFERSIZE, 65536) === 0) + assert(easy_setopt_2(curl, CURLOPT_FOLLOWLOCATION, 1) === 0) + assert(easy_setopt_2(curl, CURLOPT_FAILONERROR, 1) === 0) + assert(easy_setopt_2(curl, CURLOPT_WRITEFUNCTION, 0) === 0) + assert(easy_setopt_3(curl, CURLOPT_WRITEDATA, file_handle) === 0) + assert(easy_setopt_2(curl, CURLOPT_HTTP_VERSION, + CURL_HTTP_VERSION_1_1) === 0) + assert(easy_setopt(curl, CURLOPT_URL, url) === 0) + assert(easy_perform(curl) === 0) + assert(easy_getinfo(curl, CURLINFO_RESPONSE_CODE, handle) === 0) + const status = assert(lo.addr(handle)) + assert(easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, handle) === 0) + const size = assert(lo.addr(handle)) + fclose(file_handle) + easy_cleanup(curl) +// global_cleanup() + return size +} + +export { fetch } diff --git a/lib/curl/api.js b/lib/curl/api.js new file mode 100644 index 0000000..80b1b70 --- /dev/null +++ b/lib/curl/api.js @@ -0,0 +1,78 @@ +const api = { + fopen: { + parameters: ['string', 'string'], + result: 'pointer' + }, + fclose: { + parameters: ['pointer'], + pointers: ['FILE*'], + result: 'i32' + }, + global_init: { + parameters: ['u32'], + result: 'i32', + name: 'curl_global_init' + }, + easy_init: { + parameters: [], + result: 'pointer', + name: 'curl_easy_init' + }, + easy_setopt: { + parameters: ['pointer', 'u32', 'string'], + pointers: ['CURL*'], + casts: [, '(CURLoption)'], + result: 'i32', + name: 'curl_easy_setopt' + }, + easy_setopt_2: { + parameters: ['pointer', 'u32', 'u32'], + result: 'i32', + pointers: ['CURL*'], + casts: [, '(CURLoption)'], + name: 'curl_easy_setopt' + }, + easy_setopt_3: { + parameters: ['pointer', 'u32', 'u64'], + result: 'i32', + pointers: ['CURL*'], + casts: [, '(CURLoption)'], + name: 'curl_easy_setopt' + }, + easy_perform: { + parameters: ['pointer'], + result: 'i32', + pointers: ['CURL*'], + name: 'curl_easy_perform' + }, + easy_cleanup: { + parameters: ['pointer'], + result: 'void', + pointers: ['CURL*'], + name: 'curl_easy_cleanup' + }, + global_cleanup: { + parameters: [], + result: 'void', + name: 'curl_global_cleanup' + }, + easy_getinfo: { + parameters: ['pointer', 'u32', 'u32array'], + result: 'i32', + casts: [, '(CURLINFO)'], + pointers: ['CURL*'], + name: 'curl_easy_getinfo' + }, +} +const includes = ['curl/curl.h', 'stdint.h'] +const constants = { + CURLINFO_OFF_T: 'i32', CURL_GLOBAL_DEFAULT: 'i32', CURLOPT_URL: 'i32', + CURLOPT_BUFFERSIZE: 'i32', CURLOPT_HTTP_VERSION: 'i32', + CURL_HTTP_VERSION_1_1: 'i32', CURLOPT_FOLLOWLOCATION: 'i32', + CURLINFO_SIZE_DOWNLOAD_T: 'i32', CURLOPT_WRITEFUNCTION: 'i32', + CURLOPT_WRITEDATA: 'i32', CURLINFO_RESPONSE_CODE: 'i32', CURLOPT_FAILONERROR: 'i32' +} +const libs = ['curl'] +const name = 'curl' + +export { name, api, libs, constants, includes } diff --git a/lib/curl/curl.cc b/lib/curl/curl.cc new file mode 100644 index 0000000..93442f7 --- /dev/null +++ b/lib/curl/curl.cc @@ -0,0 +1,359 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include + +namespace lo { +namespace curl { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void fopenFast(void* p, struct FastOneByteString* const p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsfopen[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcfopen = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infofopen = v8::CFunctionInfo(rcfopen, 4, cargsfopen); +v8::CFunction pFfopen = v8::CFunction((const void*)&fopenFast, &infofopen); + +int32_t fcloseFast(void* p, void* p0); +v8::CTypeInfo cargsfclose[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcfclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofclose = v8::CFunctionInfo(rcfclose, 2, cargsfclose); +v8::CFunction pFfclose = v8::CFunction((const void*)&fcloseFast, &infofclose); + +int32_t global_initFast(void* p, uint32_t p0); +v8::CTypeInfo cargsglobal_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcglobal_init = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoglobal_init = v8::CFunctionInfo(rcglobal_init, 2, cargsglobal_init); +v8::CFunction pFglobal_init = v8::CFunction((const void*)&global_initFast, &infoglobal_init); + +void easy_initFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargseasy_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rceasy_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoeasy_init = v8::CFunctionInfo(rceasy_init, 2, cargseasy_init); +v8::CFunction pFeasy_init = v8::CFunction((const void*)&easy_initFast, &infoeasy_init); + +int32_t easy_setoptFast(void* p, void* p0, uint32_t p1, struct FastOneByteString* const p2); +v8::CTypeInfo cargseasy_setopt[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rceasy_setopt = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeasy_setopt = v8::CFunctionInfo(rceasy_setopt, 4, cargseasy_setopt); +v8::CFunction pFeasy_setopt = v8::CFunction((const void*)&easy_setoptFast, &infoeasy_setopt); + +int32_t easy_setopt_2Fast(void* p, void* p0, uint32_t p1, uint32_t p2); +v8::CTypeInfo cargseasy_setopt_2[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rceasy_setopt_2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeasy_setopt_2 = v8::CFunctionInfo(rceasy_setopt_2, 4, cargseasy_setopt_2); +v8::CFunction pFeasy_setopt_2 = v8::CFunction((const void*)&easy_setopt_2Fast, &infoeasy_setopt_2); + +int32_t easy_setopt_3Fast(void* p, void* p0, uint32_t p1, uint64_t p2); +v8::CTypeInfo cargseasy_setopt_3[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rceasy_setopt_3 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeasy_setopt_3 = v8::CFunctionInfo(rceasy_setopt_3, 4, cargseasy_setopt_3); +v8::CFunction pFeasy_setopt_3 = v8::CFunction((const void*)&easy_setopt_3Fast, &infoeasy_setopt_3); + +int32_t easy_performFast(void* p, void* p0); +v8::CTypeInfo cargseasy_perform[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rceasy_perform = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeasy_perform = v8::CFunctionInfo(rceasy_perform, 2, cargseasy_perform); +v8::CFunction pFeasy_perform = v8::CFunction((const void*)&easy_performFast, &infoeasy_perform); + +void easy_cleanupFast(void* p, void* p0); +v8::CTypeInfo cargseasy_cleanup[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rceasy_cleanup = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoeasy_cleanup = v8::CFunctionInfo(rceasy_cleanup, 2, cargseasy_cleanup); +v8::CFunction pFeasy_cleanup = v8::CFunction((const void*)&easy_cleanupFast, &infoeasy_cleanup); + +void global_cleanupFast(void* p); +v8::CTypeInfo cargsglobal_cleanup[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcglobal_cleanup = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoglobal_cleanup = v8::CFunctionInfo(rcglobal_cleanup, 1, cargsglobal_cleanup); +v8::CFunction pFglobal_cleanup = v8::CFunction((const void*)&global_cleanupFast, &infoglobal_cleanup); + +int32_t easy_getinfoFast(void* p, void* p0, uint32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargseasy_getinfo[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rceasy_getinfo = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeasy_getinfo = v8::CFunctionInfo(rceasy_getinfo, 4, cargseasy_getinfo); +v8::CFunction pFeasy_getinfo = v8::CFunction((const void*)&easy_getinfoFast, &infoeasy_getinfo); + + + +void fopenSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + String::Utf8Value v1(isolate, args[1]); + void* rc = fopen(*v0, *v1); + Local ab = args[2].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void fopenFast(void* p, struct FastOneByteString* const p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p_ret) { + struct FastOneByteString* const v0 = p0; + struct FastOneByteString* const v1 = p1; + void* r = fopen(v0->data, v1->data); + ((void**)p_ret->data)[0] = r; + +} +void fcloseSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + FILE* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = fclose(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t fcloseFast(void* p, void* p0) { + FILE* v0 = reinterpret_cast(p0); + return fclose(v0); +} +void global_initSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = curl_global_init(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t global_initFast(void* p, uint32_t p0) { + uint32_t v0 = p0; + return curl_global_init(v0); +} +void easy_initSlow(const FunctionCallbackInfo &args) { + + void* rc = curl_easy_init(); + Local ab = args[0].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void easy_initFast(void* p, struct FastApiTypedArray* const p_ret) { + + void* r = curl_easy_init(); + ((void**)p_ret->data)[0] = r; + +} +void easy_setoptSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + String::Utf8Value v2(isolate, args[2]); + int32_t rc = curl_easy_setopt(v0, (CURLoption)v1, *v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t easy_setoptFast(void* p, void* p0, uint32_t p1, struct FastOneByteString* const p2) { + CURL* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + struct FastOneByteString* const v2 = p2; + return curl_easy_setopt(v0, (CURLoption)v1, v2->data); +} +void easy_setopt_2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = curl_easy_setopt(v0, (CURLoption)v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t easy_setopt_2Fast(void* p, void* p0, uint32_t p1, uint32_t p2) { + CURL* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + uint32_t v2 = p2; + return curl_easy_setopt(v0, (CURLoption)v1, v2); +} +void easy_setopt_3Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + uint64_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = curl_easy_setopt(v0, (CURLoption)v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t easy_setopt_3Fast(void* p, void* p0, uint32_t p1, uint64_t p2) { + CURL* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + uint64_t v2 = p2; + return curl_easy_setopt(v0, (CURLoption)v1, v2); +} +void easy_performSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = curl_easy_perform(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t easy_performFast(void* p, void* p0) { + CURL* v0 = reinterpret_cast(p0); + return curl_easy_perform(v0); +} +void easy_cleanupSlow(const FunctionCallbackInfo &args) { + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + curl_easy_cleanup(v0); +} + +void easy_cleanupFast(void* p, void* p0) { + CURL* v0 = reinterpret_cast(p0); + curl_easy_cleanup(v0); +} +void global_cleanupSlow(const FunctionCallbackInfo &args) { + + curl_global_cleanup(); +} + +void global_cleanupFast(void* p) { + + curl_global_cleanup(); +} +void easy_getinfoSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + CURL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u322 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u322->Buffer()->Data() + u322->ByteOffset(); + void* v2 = reinterpret_cast(ptr2); + int32_t rc = curl_easy_getinfo(v0, (CURLINFO)v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t easy_getinfoFast(void* p, void* p0, uint32_t p1, struct FastApiTypedArray* const p2) { + CURL* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + void* v2 = reinterpret_cast(p2->data); + return curl_easy_getinfo(v0, (CURLINFO)v1, v2); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "fopen", &pFfopen, fopenSlow); + SET_FAST_METHOD(isolate, module, "fclose", &pFfclose, fcloseSlow); + SET_FAST_METHOD(isolate, module, "global_init", &pFglobal_init, global_initSlow); + SET_FAST_METHOD(isolate, module, "easy_init", &pFeasy_init, easy_initSlow); + SET_FAST_METHOD(isolate, module, "easy_setopt", &pFeasy_setopt, easy_setoptSlow); + SET_FAST_METHOD(isolate, module, "easy_setopt_2", &pFeasy_setopt_2, easy_setopt_2Slow); + SET_FAST_METHOD(isolate, module, "easy_setopt_3", &pFeasy_setopt_3, easy_setopt_3Slow); + SET_FAST_METHOD(isolate, module, "easy_perform", &pFeasy_perform, easy_performSlow); + SET_FAST_METHOD(isolate, module, "easy_cleanup", &pFeasy_cleanup, easy_cleanupSlow); + SET_FAST_METHOD(isolate, module, "global_cleanup", &pFglobal_cleanup, global_cleanupSlow); + SET_FAST_METHOD(isolate, module, "easy_getinfo", &pFeasy_getinfo, easy_getinfoSlow); + + SET_VALUE(isolate, module, "CURLINFO_OFF_T", Integer::New(isolate, CURLINFO_OFF_T)); + SET_VALUE(isolate, module, "CURL_GLOBAL_DEFAULT", Integer::New(isolate, CURL_GLOBAL_DEFAULT)); + SET_VALUE(isolate, module, "CURLOPT_URL", Integer::New(isolate, CURLOPT_URL)); + SET_VALUE(isolate, module, "CURLOPT_BUFFERSIZE", Integer::New(isolate, CURLOPT_BUFFERSIZE)); + SET_VALUE(isolate, module, "CURLOPT_HTTP_VERSION", Integer::New(isolate, CURLOPT_HTTP_VERSION)); + SET_VALUE(isolate, module, "CURL_HTTP_VERSION_1_1", Integer::New(isolate, CURL_HTTP_VERSION_1_1)); + SET_VALUE(isolate, module, "CURLOPT_FOLLOWLOCATION", Integer::New(isolate, CURLOPT_FOLLOWLOCATION)); + SET_VALUE(isolate, module, "CURLINFO_SIZE_DOWNLOAD_T", Integer::New(isolate, CURLINFO_SIZE_DOWNLOAD_T)); + SET_VALUE(isolate, module, "CURLOPT_WRITEFUNCTION", Integer::New(isolate, CURLOPT_WRITEFUNCTION)); + SET_VALUE(isolate, module, "CURLOPT_WRITEDATA", Integer::New(isolate, CURLOPT_WRITEDATA)); + SET_VALUE(isolate, module, "CURLINFO_RESPONSE_CODE", Integer::New(isolate, CURLINFO_RESPONSE_CODE)); + SET_VALUE(isolate, module, "CURLOPT_FAILONERROR", Integer::New(isolate, CURLOPT_FAILONERROR)); + + + SET_MODULE(isolate, target, "curl", module); +} +} // namespace curl +} // namespace lo + +extern "C" { + void* _register_curl() { + return (void*)lo::curl::Init; + } +} diff --git a/lib/encode/api.js b/lib/encode/api.js new file mode 100644 index 0000000..0da405b --- /dev/null +++ b/lib/encode/api.js @@ -0,0 +1,263 @@ +const api = { + hex_encode: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['const char*', , 'char*'], + result: 'u32' + }, + hex_decode: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['char*', , 'const char*'], + result: 'u32' + }, + base64_encode: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['const char*', , 'char*'], + result: 'u32' + }, + base64_decode: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['char*', , 'const char*'], + result: 'u32' + }, +} + +const preamble = ` +const int8_t unbase64_table[256] = + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -2, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + +const int8_t unhex_table[256] = + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + +inline unsigned unhex(uint8_t x) { + return unhex_table[x]; +} + +size_t hex_encode (const char* src, size_t slen, char* dst, size_t dlen) { + dlen = slen * 2; + for (uint32_t i = 0, k = 0; k < dlen; i += 1, k += 2) { + static const char hex[] = "0123456789abcdef"; + uint8_t val = (uint8_t)(src[i]); + dst[k + 0] = hex[val >> 4]; + dst[k + 1] = hex[val & 15]; + } + return dlen; +} + +size_t hex_decode(char* buf, + size_t len, + const char* src, + const size_t srcLen) { + size_t i; + for (i = 0; i < len && i * 2 + 1 < srcLen; ++i) { + unsigned a = unhex(src[i * 2 + 0]); + unsigned b = unhex(src[i * 2 + 1]); + if (!~a || !~b) + return i; + buf[i] = (a << 4) | b; + } + + return i; +} + +inline int8_t unbase64(uint8_t x) { + return unbase64_table[x]; +} + +inline constexpr size_t base64_encoded_size(size_t size) { + return ((size + 2 - ((size + 2) % 3)) / 3 * 4); +} + +// Doesn't check for padding at the end. Can be 1-2 bytes over. +inline size_t base64_decoded_size_fast(size_t size) { + size_t remainder = size % 4; + + size = (size / 4) * 3; + if (remainder) { + if (size == 0 && remainder == 1) { + // special case: 1-byte input cannot be decoded + size = 0; + } else { + // non-padded input, add 1 or 2 extra bytes + size += 1 + (remainder == 3); + } + } + + return size; +} + +size_t base64_decoded_size(const char* src, size_t size) { + if (size == 0) + return 0; + + if (src[size - 1] == '=') + size--; + if (size > 0 && src[size - 1] == '=') + size--; + + return base64_decoded_size_fast(size); +} + +bool base64_decode_group_slow(char* dst, const size_t dstlen, + const char* src, const size_t srclen, + size_t* const i, size_t* const k) { + uint8_t hi; + uint8_t lo; +#define V(expr) \ + for (;;) { \ + const uint8_t c = src[*i]; \ + lo = unbase64(c); \ + *i += 1; \ + if (lo < 64) \ + break; /* Legal character. */ \ + if (c == '=' || *i >= srclen) \ + return false; /* Stop decoding. */ \ + } \ + expr; \ + if (*i >= srclen) \ + return false; \ + if (*k >= dstlen) \ + return false; \ + hi = lo; + V(/* Nothing. */); + V(dst[(*k)++] = ((hi & 0x3F) << 2) | ((lo & 0x30) >> 4)); + V(dst[(*k)++] = ((hi & 0x0F) << 4) | ((lo & 0x3C) >> 2)); + V(dst[(*k)++] = ((hi & 0x03) << 6) | ((lo & 0x3F) >> 0)); +#undef V + return true; // Continue decoding. +} + +size_t base64_decode_fast(char* dst, const size_t dstlen, + const char* src, const size_t srclen, + const size_t decoded_size) { + const size_t available = dstlen < decoded_size ? dstlen : decoded_size; + const size_t max_k = available / 3 * 3; + size_t max_i = srclen / 4 * 4; + size_t i = 0; + size_t k = 0; + while (i < max_i && k < max_k) { + const uint32_t v = + unbase64(src[i + 0]) << 24 | + unbase64(src[i + 1]) << 16 | + unbase64(src[i + 2]) << 8 | + unbase64(src[i + 3]); + // If MSB is set, input contains whitespace or is not valid base64. + if (v & 0x80808080) { + if (!base64_decode_group_slow(dst, dstlen, src, srclen, &i, &k)) + return k; + max_i = i + (srclen - i) / 4 * 4; // Align max_i again. + } else { + dst[k + 0] = ((v >> 22) & 0xFC) | ((v >> 20) & 0x03); + dst[k + 1] = ((v >> 12) & 0xF0) | ((v >> 10) & 0x0F); + dst[k + 2] = ((v >> 2) & 0xC0) | ((v >> 0) & 0x3F); + i += 4; + k += 3; + } + } + if (i < srclen && k < dstlen) { + base64_decode_group_slow(dst, dstlen, src, srclen, &i, &k); + } + return k; +} + +size_t base64_decode(char* dst, const size_t dstlen, + const char* src, const size_t srclen) { + const size_t decoded_size = base64_decoded_size(src, srclen); + return base64_decode_fast(dst, dstlen, src, srclen, decoded_size); +} + +size_t base64_encode(const char* src, + size_t slen, + char* dst, + size_t dlen) { + // We know how much we'll write, just make sure that there's space. + dlen = base64_encoded_size(slen); + + unsigned a; + unsigned b; + unsigned c; + unsigned i; + unsigned k; + unsigned n; + + static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + i = 0; + k = 0; + n = slen / 3 * 3; + + while (i < n) { + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + c = src[i + 2] & 0xff; + + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)]; + dst[k + 3] = table[c & 0x3f]; + + i += 3; + k += 4; + } + + if (n != slen) { + switch (slen - n) { + case 1: + a = src[i + 0] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[(a & 3) << 4]; + dst[k + 2] = '='; + dst[k + 3] = '='; + break; + + case 2: + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[(b & 0x0f) << 2]; + dst[k + 3] = '='; + break; + } + } + + return dlen; +} + +` +const name = 'encode' + +export { name, api, preamble } diff --git a/lib/encode/encode.cc b/lib/encode/encode.cc new file mode 100644 index 0000000..c45b43a --- /dev/null +++ b/lib/encode/encode.cc @@ -0,0 +1,440 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile + +#include + +namespace lo { +namespace encode { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + +const int8_t unbase64_table[256] = + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -2, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + +const int8_t unhex_table[256] = + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + +inline unsigned unhex(uint8_t x) { + return unhex_table[x]; +} + +size_t hex_encode (const char* src, size_t slen, char* dst, size_t dlen) { + dlen = slen * 2; + for (uint32_t i = 0, k = 0; k < dlen; i += 1, k += 2) { + static const char hex[] = "0123456789abcdef"; + uint8_t val = (uint8_t)(src[i]); + dst[k + 0] = hex[val >> 4]; + dst[k + 1] = hex[val & 15]; + } + return dlen; +} + +size_t hex_decode(char* buf, + size_t len, + const char* src, + const size_t srcLen) { + size_t i; + for (i = 0; i < len && i * 2 + 1 < srcLen; ++i) { + unsigned a = unhex(src[i * 2 + 0]); + unsigned b = unhex(src[i * 2 + 1]); + if (!~a || !~b) + return i; + buf[i] = (a << 4) | b; + } + + return i; +} + +inline int8_t unbase64(uint8_t x) { + return unbase64_table[x]; +} + +inline constexpr size_t base64_encoded_size(size_t size) { + return ((size + 2 - ((size + 2) % 3)) / 3 * 4); +} + +// Doesn't check for padding at the end. Can be 1-2 bytes over. +inline size_t base64_decoded_size_fast(size_t size) { + size_t remainder = size % 4; + + size = (size / 4) * 3; + if (remainder) { + if (size == 0 && remainder == 1) { + // special case: 1-byte input cannot be decoded + size = 0; + } else { + // non-padded input, add 1 or 2 extra bytes + size += 1 + (remainder == 3); + } + } + + return size; +} + +size_t base64_decoded_size(const char* src, size_t size) { + if (size == 0) + return 0; + + if (src[size - 1] == '=') + size--; + if (size > 0 && src[size - 1] == '=') + size--; + + return base64_decoded_size_fast(size); +} + +bool base64_decode_group_slow(char* dst, const size_t dstlen, + const char* src, const size_t srclen, + size_t* const i, size_t* const k) { + uint8_t hi; + uint8_t lo; +#define V(expr) for (;;) { const uint8_t c = src[*i]; lo = unbase64(c); *i += 1; if (lo < 64) break; /* Legal character. */ if (c == '=' || *i >= srclen) return false; /* Stop decoding. */ } expr; if (*i >= srclen) return false; if (*k >= dstlen) return false; hi = lo; + V(/* Nothing. */); + V(dst[(*k)++] = ((hi & 0x3F) << 2) | ((lo & 0x30) >> 4)); + V(dst[(*k)++] = ((hi & 0x0F) << 4) | ((lo & 0x3C) >> 2)); + V(dst[(*k)++] = ((hi & 0x03) << 6) | ((lo & 0x3F) >> 0)); +#undef V + return true; // Continue decoding. +} + +size_t base64_decode_fast(char* dst, const size_t dstlen, + const char* src, const size_t srclen, + const size_t decoded_size) { + const size_t available = dstlen < decoded_size ? dstlen : decoded_size; + const size_t max_k = available / 3 * 3; + size_t max_i = srclen / 4 * 4; + size_t i = 0; + size_t k = 0; + while (i < max_i && k < max_k) { + const uint32_t v = + unbase64(src[i + 0]) << 24 | + unbase64(src[i + 1]) << 16 | + unbase64(src[i + 2]) << 8 | + unbase64(src[i + 3]); + // If MSB is set, input contains whitespace or is not valid base64. + if (v & 0x80808080) { + if (!base64_decode_group_slow(dst, dstlen, src, srclen, &i, &k)) + return k; + max_i = i + (srclen - i) / 4 * 4; // Align max_i again. + } else { + dst[k + 0] = ((v >> 22) & 0xFC) | ((v >> 20) & 0x03); + dst[k + 1] = ((v >> 12) & 0xF0) | ((v >> 10) & 0x0F); + dst[k + 2] = ((v >> 2) & 0xC0) | ((v >> 0) & 0x3F); + i += 4; + k += 3; + } + } + if (i < srclen && k < dstlen) { + base64_decode_group_slow(dst, dstlen, src, srclen, &i, &k); + } + return k; +} + +size_t base64_decode(char* dst, const size_t dstlen, + const char* src, const size_t srclen) { + const size_t decoded_size = base64_decoded_size(src, srclen); + return base64_decode_fast(dst, dstlen, src, srclen, decoded_size); +} + +size_t base64_encode(const char* src, + size_t slen, + char* dst, + size_t dlen) { + // We know how much we'll write, just make sure that there's space. + dlen = base64_encoded_size(slen); + + unsigned a; + unsigned b; + unsigned c; + unsigned i; + unsigned k; + unsigned n; + + static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + i = 0; + k = 0; + n = slen / 3 * 3; + + while (i < n) { + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + c = src[i + 2] & 0xff; + + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)]; + dst[k + 3] = table[c & 0x3f]; + + i += 3; + k += 4; + } + + if (n != slen) { + switch (slen - n) { + case 1: + a = src[i + 0] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[(a & 3) << 4]; + dst[k + 2] = '='; + dst[k + 3] = '='; + break; + + case 2: + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[(b & 0x0f) << 2]; + dst[k + 3] = '='; + break; + } + } + + return dlen; +} + + + +uint32_t hex_encodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargshex_encode[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rchex_encode = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infohex_encode = v8::CFunctionInfo(rchex_encode, 5, cargshex_encode); +v8::CFunction pFhex_encode = v8::CFunction((const void*)&hex_encodeFast, &infohex_encode); + +uint32_t hex_decodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargshex_decode[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rchex_decode = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infohex_decode = v8::CFunctionInfo(rchex_decode, 5, cargshex_decode); +v8::CFunction pFhex_decode = v8::CFunction((const void*)&hex_decodeFast, &infohex_decode); + +uint32_t base64_encodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargsbase64_encode[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcbase64_encode = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infobase64_encode = v8::CFunctionInfo(rcbase64_encode, 5, cargsbase64_encode); +v8::CFunction pFbase64_encode = v8::CFunction((const void*)&base64_encodeFast, &infobase64_encode); + +uint32_t base64_decodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargsbase64_decode[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcbase64_decode = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infobase64_decode = v8::CFunctionInfo(rcbase64_decode, 5, cargsbase64_decode); +v8::CFunction pFbase64_decode = v8::CFunction((const void*)&base64_decodeFast, &infobase64_decode); + + + +void hex_encodeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + const char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = hex_encode(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t hex_encodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + const char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return hex_encode(v0, v1, v2, v3); +} +void hex_decodeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + const char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = hex_decode(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t hex_decodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + const char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return hex_decode(v0, v1, v2, v3); +} +void base64_encodeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + const char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = base64_encode(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t base64_encodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + const char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return base64_encode(v0, v1, v2, v3); +} +void base64_decodeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + const char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = base64_decode(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t base64_decodeFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + const char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return base64_decode(v0, v1, v2, v3); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "hex_encode", &pFhex_encode, hex_encodeSlow); + SET_FAST_METHOD(isolate, module, "hex_decode", &pFhex_decode, hex_decodeSlow); + SET_FAST_METHOD(isolate, module, "base64_encode", &pFbase64_encode, base64_encodeSlow); + SET_FAST_METHOD(isolate, module, "base64_decode", &pFbase64_decode, base64_decodeSlow); + + + + SET_MODULE(isolate, target, "encode", module); +} +} // namespace encode +} // namespace lo + +extern "C" { + void* _register_encode() { + return (void*)lo::encode::Init; + } +} diff --git a/lib/epoll/api.js b/lib/epoll/api.js new file mode 100644 index 0000000..526c72a --- /dev/null +++ b/lib/epoll/api.js @@ -0,0 +1,29 @@ +const api = { + create: { + parameters: ['i32'], + result: 'i32', + name: 'epoll_create1' + }, + modify: { + parameters: ['i32', 'i32', 'i32', 'buffer'], + pointers: [, , , 'struct epoll_event *'], + result: 'i32', + name: 'epoll_ctl' + }, + wait: { + parameters: ['i32', 'buffer', 'i32', 'i32'], + pointers: [, 'struct epoll_event *'], + result: 'i32', + name: 'epoll_wait' + }, + close: { + parameters: ['i32'], + result: 'i32', + name: 'close' + } +} + +const includes = ['sys/epoll.h', 'unistd.h'] +const name = 'epoll' + +export { api, includes, name } diff --git a/lib/epoll/epoll.cc b/lib/epoll/epoll.cc new file mode 100644 index 0000000..15a1772 --- /dev/null +++ b/lib/epoll/epoll.cc @@ -0,0 +1,190 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include + +namespace lo { +namespace epoll { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +int32_t createFast(void* p, int32_t p0); +v8::CTypeInfo cargscreate[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccreate = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocreate = v8::CFunctionInfo(rccreate, 2, cargscreate); +v8::CFunction pFcreate = v8::CFunction((const void*)&createFast, &infocreate); + +int32_t modifyFast(void* p, int32_t p0, int32_t p1, int32_t p2, struct FastApiTypedArray* const p3); +v8::CTypeInfo cargsmodify[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcmodify = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infomodify = v8::CFunctionInfo(rcmodify, 5, cargsmodify); +v8::CFunction pFmodify = v8::CFunction((const void*)&modifyFast, &infomodify); + +int32_t waitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargswait[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcwait = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowait = v8::CFunctionInfo(rcwait, 5, cargswait); +v8::CFunction pFwait = v8::CFunction((const void*)&waitFast, &infowait); + +int32_t closeFast(void* p, int32_t p0); +v8::CTypeInfo cargsclose[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoclose = v8::CFunctionInfo(rcclose, 2, cargsclose); +v8::CFunction pFclose = v8::CFunction((const void*)&closeFast, &infoclose); + + + +void createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = epoll_create1(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t createFast(void* p, int32_t p0) { + int32_t v0 = p0; + return epoll_create1(v0); +} +void modifySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + struct epoll_event * v3 = reinterpret_cast(ptr3); + int32_t rc = epoll_ctl(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t modifyFast(void* p, int32_t p0, int32_t p1, int32_t p2, struct FastApiTypedArray* const p3) { + int32_t v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + struct epoll_event * v3 = reinterpret_cast(p3->data); + return epoll_ctl(v0, v1, v2, v3); +} +void waitSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + struct epoll_event * v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = epoll_wait(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t waitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3) { + int32_t v0 = p0; + struct epoll_event * v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + int32_t v3 = p3; + return epoll_wait(v0, v1, v2, v3); +} +void closeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = close(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t closeFast(void* p, int32_t p0) { + int32_t v0 = p0; + return close(v0); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "create", &pFcreate, createSlow); + SET_FAST_METHOD(isolate, module, "modify", &pFmodify, modifySlow); + SET_FAST_METHOD(isolate, module, "wait", &pFwait, waitSlow); + SET_FAST_METHOD(isolate, module, "close", &pFclose, closeSlow); + + + + SET_MODULE(isolate, target, "epoll", module); +} +} // namespace epoll +} // namespace lo + +extern "C" { + void* _register_epoll() { + return (void*)lo::epoll::Init; + } +} diff --git a/lib/fs.js b/lib/fs.js new file mode 100644 index 0000000..d894df2 --- /dev/null +++ b/lib/fs.js @@ -0,0 +1,98 @@ +const { assert, readMemory, utf8Decode, wrap } = lo +const { + closedir, unlink, rmdir, open, fstat, close, access, mkdir, + F_OK, O_RDONLY, S_IFMT, S_IFDIR, S_IFREG, + S_IRWXU, S_IRWXG, S_IROTH +} = lo.core + +const handle = new Uint32Array(2) +const opendir = wrap(handle, lo.core.opendir, 1) +const readdir = wrap(handle, lo.core.readdir, 1) +const u8 = new Uint8Array(19) +const dir_view = new DataView(u8.buffer) +const stat = new Uint8Array(160) +const stat32 = new Uint32Array(stat.buffer) + +function checkMode (val, mode) { + return (val & S_IFMT) === mode +} + +function readEntry (handle) { + readMemory(u8, handle, 19) + const d_ino = dir_view.getUint32(0, true) + const d_off = dir_view.getUint32(8, true) + const d_reclen = dir_view.getUint16(16, true) + const d_type = u8[18] + const name = utf8Decode(handle + 19, -1) + return { d_ino, d_off, d_reclen, d_type, name } +} + +function isFile (path) { + const fd = open(path) + if (fd <= 2) return false + if (fstat(fd, stat) !== 0) return false + close(fd) + return checkMode(stat32[6], S_IFREG) +} + +function isDir (path) { + if (access(path, F_OK) !== 0) return false + const fd = open(path, O_RDONLY) + if (fd < 1) return false + const r = fstat(fd, stat) + if (r < 0) return false + close(fd) + return checkMode(stat32[6], S_IFDIR) +} + +function mkDirAll (full_path, fileMode = S_IRWXU | S_IRWXG | S_IROTH) { + const subdirs = full_path.split('/').filter(dir => dir) + let path = '' + for (const dir of subdirs) { + path = `${path}${dir}/` + if (isDir(path)) rmDirAll(path) + if (mkdir(path, fileMode) !== 0) { + throw new Error(`could not make directory ${path}: errno ${lo.errno}`) + } + } +} + +// todo: check all paths before deletion or removal - must be relative +// and no traversal above current allowed +function rmDir (path) { + const dir = opendir(path) + assert(dir) + let next = readdir(dir) + assert(next) + let directories = [] + while (next) { + const entry = readEntry(next) + if (!(entry.name === '..' || entry.name === '.')) { + const entry_path = `${path}/${entry.name}` + if (entry.d_type === 4) { + directories.push(entry_path) + directories = directories.concat(rmDir(entry_path)) + } else if (entry.d_type === 8) { + assert(unlink(entry_path) === 0) + } + } + next = readdir(dir) + } + assert(closedir(dir) === 0) + return directories +} + +function str_compare(a, b) { + return a < b ? 1 : (a === b ? 0 : -1) +} + +function rmDirAll (path) { + if (!isDir(path)) return + const dirs = rmDir(path).sort(str_compare) + for (const dir_path of dirs) { + assert(rmdir(dir_path) === 0) + } + assert(rmdir(path) === 0) +} + +export { mkDirAll, rmDirAll, isFile, isDir } diff --git a/lib/gen.js b/lib/gen.js index db55b8f..393fec1 100644 --- a/lib/gen.js +++ b/lib/gen.js @@ -117,13 +117,15 @@ function getParameterInit(p, i, name) { return ` v8::CTypeInfo(v8::CTypeInfo::Type::${getFastType(p)}),` } -async function bindings (importPath) { - const { api, includes = [], name, preamble, constants } = await import(importPath) - const fNames = Object.keys(api) - for (const name of fNames) { +function bindings ({ api, includes = [], name, preamble, constants, structs = [] }) { + const fNames = [] + for (const name of Object.keys(api)) { const fn = api[name] - fn.pointers = fn.pointers || [] - fn.name = fn.name || name + if (!fn.platform || fn.platform.includes(config.os)) { + fn.pointers = fn.pointers || [] + fn.name = fn.name || name + fNames.push(name) + } } function initConstant(n) { @@ -142,6 +144,10 @@ async function bindings (importPath) { throw new Error('TODO') } + function initStruct(n) { + return ` SET_VALUE(isolate, module, "struct_${n}_size", Integer::New(isolate, sizeof(${n})));\n` + } + function initFunction (n) { const definition = api[n] if (definition.nofast) { @@ -302,6 +308,7 @@ void Init(Isolate* isolate, Local target) { Local module = ObjectTemplate::New(isolate); ${fNames.map(initFunction).join('')} ${Object.keys(constants || {}).map(initConstant).join('')} +${structs.map(initStruct).join('')} SET_MODULE(isolate, target, "${name}", module); } } // namespace ${name} @@ -311,7 +318,8 @@ extern "C" { void* _register_${name}() { return (void*)${config.runtime}::${name}::Init; } -}` +} +` } const rx = /[./-]/g @@ -326,9 +334,8 @@ if (globalThis.Deno) { readFile = lo.core.readFile } -async function wrapper (importPath) { - const { api, includes, name, libs = [], make, obj = [], deps = [] } = - await import(importPath) +function wrapper ({ api, includes, name, libs = [], make, obj = [], deps = [] }) { + return ` ` @@ -363,6 +370,10 @@ unsigned int ${name}_len = ${bytes.length}; return src } +function fileName (path) { + return path.slice(path.lastIndexOf('/') + 1) +} + function baseName (path) { return path.slice(path.lastIndexOf('/') + 1, path.lastIndexOf('.')) } @@ -373,11 +384,11 @@ function extName (path) { return path.slice(pos + 1) } -const defaultOpts = { - v8_cleanup: 0, - v8_threads: 2, - v8flags: '--stack-trace-limit=10 --use-strict --turbo-fast-api-calls --no-freeze-flags-after-init', - on_exit: 0 +async function linkArgs (deps = [], opts = defaultOpts) { + const bindings = deps.filter(dep => fileName(dep) === 'api.js') + const imports = await Promise.all(bindings.map(path => import(path))) + const link_args = Array.from(new Set(imports.map(b => b.libs || []).flat())) + return link_args.map(l => `-l${l}`) } function headerFile (deps = [], opts = defaultOpts) { @@ -448,9 +459,7 @@ static unsigned int _on_exit = ${opts.on_exit}; return source } -async function makeFile (importPath) { - const { api, includes, name, libs = [], make, obj = [], deps = [] } = - await import(importPath) +function makeFile ({ api, includes, name, libs = [], make, obj = [], deps = [] }) { const HOME = `${config.runtime.toUpperCase()}_HOME` return `# [do not edit,] # This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile @@ -492,17 +501,21 @@ all: ## make all ` } -const { S_IRWXU, S_IRWXG, S_IROTH, S_IXOTH } = lo.core - function init_application (dir_path) { const rc = lo.core.mkdir(`${dir_path}\0`, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) - console.log(rc) + //console.log(rc) } -const encoder = new TextEncoder() -const decoder = new TextDecoder() +const defaultOpts = { + v8_cleanup: 0, + v8_threads: 2, + v8flags: '--stack-trace-limit=10 --use-strict --turbo-fast-api-calls --no-freeze-flags-after-init', + on_exit: 0 +} +const { S_IRWXU, S_IRWXG, S_IROTH, S_IXOTH } = lo.core -const config = { +const config = { + os: 'linux', runtime: 'lo', C: 'gcc', CC: 'g++' @@ -510,7 +523,7 @@ const config = { async function gen (args) { let source = '' - if (args[0] === '--link') { + if (args[0] === '--builtins') { let next = 1 if (args[1] === '--win') { config.os = 'win' @@ -530,16 +543,23 @@ async function gen (args) { next = 2 } source = await headerFile(args.slice(next)) + } else if (args[0] === '--link') { + let next = 1 + if (args[1] === '--win') { + config.os = 'win' + next = 2 + } + source = (await linkArgs(args.slice(next))).join(' ') } else if (args[0] === '--make') { - source = await makeFile(args[1]) + source = makeFile(await import(args[1])) } else if (args[0] === '--init') { source = await init_application(args[1]) } else if (args[0] === '--wrap') { - source = await wrapper(args[1]) + source = wrapper(await import(args[1])) } else { - source = await bindings(args[0]) + source = bindings(await import(args[0])) } console.log(source) } -export { bindings, linkerScript, headerFile, wrapper, makeFile, config, gen } +export { bindings, linkerScript, headerFile, wrapper, makeFile, linkArgs, config, gen } diff --git a/lib/inflate.js b/lib/inflate.js new file mode 100644 index 0000000..723b37a --- /dev/null +++ b/lib/inflate.js @@ -0,0 +1,32 @@ +const inflate_lib = lo.load('inflate') + +const { assert } = lo + +const DEFLATE = 8 +const OS_UNIX = 3 + +function header (buf) { + const [ id1, id2, cm, flg, , , , , xfl, os ] = buf.subarray(0, 10) + assert(id1 === 0x1f && id2 === 0x8b, 'gzip magic incorrect') + const FTEXT = (flg >> 7) & 0x01 + const FHCRC = (flg >> 6) & 0x01 + const FEXTRA = (flg >> 5) & 0x01 + const FNAME = (flg >> 4) & 0x01 + const FCOMMENT = (flg >> 3) & 0x01 + return { id1, id2, cm, flg, xfl, os, FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT } +} + +function inflate (buf) { + const [ id1, id2, cm, , , , , , , os ] = buf.subarray(0, 10) + assert(id1 === 0x1f && id2 === 0x8b, 'gzip magic incorrect') + assert(cm === DEFLATE, 'not a gzip deflate archive') + assert(os === OS_UNIX, 'not a unix os archive') + const header_view = new DataView(buf.buffer, buf.length - 8, 8) + const original_size = header_view.getUint32(4, true) + const dest = new Uint8Array(original_size) + const bytes = inflate_lib.inflate.inflate(buf, buf.length, dest, dest.length) + assert(bytes === original_size, 'extracted size does not match') + return dest +} + +export { inflate, header } diff --git a/lib/inflate/LICENSE b/lib/inflate/LICENSE new file mode 100644 index 0000000..e1296a1 --- /dev/null +++ b/lib/inflate/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2019 Emmanuel Marty + +This software is provided 'as-is', without any express or implied warranty. In +no event will the authors be held liable for any damages arising from the use of +this software. + +Permission is granted to anyone to use this software for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim + that you wrote the original software. If you use this software in a product, + an acknowledgment in the product documentation would be appreciated but is + not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/lib/inflate/api.js b/lib/inflate/api.js new file mode 100644 index 0000000..2efa2fc --- /dev/null +++ b/lib/inflate/api.js @@ -0,0 +1,26 @@ +import { exec } from 'lib/proc.js' + +const { assert } = lo + +const api = { + inflate: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['unsigned char*', , 'unsigned char*'], + result: 'i32', + name: 'em_inflate' + } +} + +const name = 'inflate' +const includes = ['em_inflate.h'] + +function build (C = 'gcc', CC = 'g++') { + const status = new Int32Array(2) + const CARGS = C.split(' ') + exec(CARGS[0], [...CARGS.slice(1), '-I.', '-c', '-o', 'em_inflate.o', '-O3', '-fomit-frame-pointer', 'em_inflate.c'], status) + assert(status[0] === 0) +} + +const obj = ['em_inflate.o'] + +export { name, api, build, includes, obj } diff --git a/lib/inflate/em_inflate.c b/lib/inflate/em_inflate.c new file mode 100644 index 0000000..14eb830 --- /dev/null +++ b/lib/inflate/em_inflate.c @@ -0,0 +1,1185 @@ +/* + * em_inflate.c - fast in-memory inflate (gzip/zlib decompressor) implementation + * + * Copyright (C) 2019 Emmanuel Marty + * + * gzip crc32 computation by Stephen Brumme - zlib-like license included below + * adler checksum computation by Mark Adler - zlib license included below + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include +#include +#include +#include "em_inflate.h" + +/* Comment out this define to disable checksum verification */ +#define EM_INFLATE_VERIFY_CHECKSUM + +/*--- LSB bitreader ---*/ + +#if defined(_M_X64) || defined(__x86_64__) || defined(__aarch64__) +#define EM_LSB_BITREADER_64BIT_SHIFTER +#endif /* defined(_M_X64) */ + +#ifdef EM_LSB_BITREADER_64BIT_SHIFTER +typedef unsigned long long em_lsb_bitreader_shifter_t; +#else +typedef unsigned int em_lsb_bitreader_shifter_t; +#endif + +/** Bit reader context */ +typedef struct { + int nDecShifterBitCount; + em_lsb_bitreader_shifter_t nDecShifterData; + const unsigned char *pInBlock; + const unsigned char *pInBlockEnd; + const unsigned char *pInBlockStart; +} em_lsb_bitreader_t; + +/** + * Initialize bit reader + * + * @param pBitReader bit reader context + * @param pInBlock pointer to start of compressed block + * @param InBlockEnd pointer to end of compressed block + 1 + */ +static inline void em_lsb_bitreader_init(em_lsb_bitreader_t *pBitReader, const unsigned char *pInBlock, const unsigned char *pInBlockEnd) { + pBitReader->nDecShifterBitCount = 0; + pBitReader->nDecShifterData = 0; + pBitReader->pInBlock = pInBlock; + pBitReader->pInBlockEnd = pInBlockEnd; + pBitReader->pInBlockStart = pInBlock; +} + +/** + * Refill 32 bits at a time if the architecture allows it, otherwise do nothing. + * + * @param pBitReader bit reader context + */ +static inline void em_lsb_bitreader_refill_32(em_lsb_bitreader_t *pBitReader) { +#ifdef EM_LSB_BITREADER_64BIT_SHIFTER + if (pBitReader->nDecShifterBitCount <= 32 && (pBitReader->pInBlock + 4) <= pBitReader->pInBlockEnd) { +#if defined(_M_X64) || defined(__x86_64__) + /* Read unaligned word */ + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*((unsigned int*)pBitReader->pInBlock))) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 32; + pBitReader->pInBlock += 4; +#else + /* Read bytes */ + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; +#endif + } +#endif /* EM_LSB_BITREADER_64BIT_SHIFTER */ +} + +/** + * Read variable bit-length value + * + * @param pBitReader bit reader context + * @param nBits size of value in bits (number of bits to read), 0..16 + * + * @return value, or -1 for failure + */ +static inline unsigned int em_lsb_bitreader_get_bits(em_lsb_bitreader_t *pBitReader, const int nBits) { + if (pBitReader->nDecShifterBitCount < nBits) { + if (pBitReader->pInBlock < pBitReader->pInBlockEnd) { + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; + + if (pBitReader->pInBlock < pBitReader->pInBlockEnd) { + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + pBitReader->nDecShifterBitCount += 8; + } + } + else + return -1; + } + + unsigned int nValue = pBitReader->nDecShifterData & ((1 << nBits) - 1); + pBitReader->nDecShifterData >>= nBits; + pBitReader->nDecShifterBitCount -= nBits; + return nValue; +} + +/** + * Peek at a 16-bit value in the bitstream (lookahead) + * + * @param pBitReader bit reader context + * + * @return value + */ +static inline unsigned int em_lsb_bitreader_peek_16bits(em_lsb_bitreader_t *pBitReader) { + if (pBitReader->nDecShifterBitCount < 16) { + if (pBitReader->pInBlock < pBitReader->pInBlockEnd) { + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << pBitReader->nDecShifterBitCount); + if (pBitReader->pInBlock < pBitReader->pInBlockEnd) + pBitReader->nDecShifterData |= (((em_lsb_bitreader_shifter_t)(*pBitReader->pInBlock++)) << (pBitReader->nDecShifterBitCount + 8)); + pBitReader->nDecShifterBitCount += 16; + } + } + + return pBitReader->nDecShifterData & 0xffff; +} + +/** + * Consume variable bit-length value, after reading it with em_lsb_bitreader_peek_16bits() + * + * @param pBitReader bit reader context + * @param nBits size of value to consume, in bits + */ +static inline void em_lsb_bitreader_consume_bits(em_lsb_bitreader_t *pBitReader, const int nBits) { + pBitReader->nDecShifterData >>= nBits; + pBitReader->nDecShifterBitCount -= nBits; +} + +/** + * Re-align bitstream on a byte + * + * @param pBitReader bit reader context + */ +static int em_lsb_bitreader_byte_align(em_lsb_bitreader_t *pBitReader) { + /* Align on byte */ + while (pBitReader->nDecShifterBitCount >= 8) { + /* Rewind - the bit reader can load more than 8 bits at a time */ + pBitReader->nDecShifterBitCount -= 8; + pBitReader->pInBlock--; + if (pBitReader->pInBlock < pBitReader->pInBlockStart) return -1; + } + + pBitReader->nDecShifterBitCount = 0; + pBitReader->nDecShifterData = 0; + return 0; +} + +/*-- Huffman decoder for a LSB bitstream --*/ + +/** Maximum number of symbols that can be read by the huffman decoder */ +#define MAX_SYMBOLS 288 + +/** Number of symbols used to decode variable code lengths */ +#define NCODELENSYMS 19 + +/** Number of most significant huffman codeword bits that are used to skip the initial code length finding steps */ +#define NFASTSYMBOLBITS 10 + +/** Huffman decoding context */ +typedef struct { + unsigned int nFastSymbol[1 << NFASTSYMBOLBITS]; + unsigned int nStartIndex[16]; /* One per code bit length */ + unsigned int nSymbols; + int nNumSorted; + int nStartingPos[16]; +} em_lsb_huffman_decoder_t; + +/** + * Prepare huffman tables + * + * @param pDecoder decoding context + * @param pRevSymbolTable array of 2 * nSymbols entries for storing the reverse lookup table + * @param pCodeLength codeword lengths table + * + * @return 0 for success, -1 for failure + */ +static int em_lsb_huffman_decoder_prepare_table(em_lsb_huffman_decoder_t *pDecoder, unsigned int *pRevSymbolTable, const int nReadSymbols, const int nSymbols, const unsigned char *pCodeLength) { + int nNumSymbolsPerLen[16]; + int i; + + if (nReadSymbols < 0 || nReadSymbols > MAX_SYMBOLS || nSymbols < 0 || nSymbols > MAX_SYMBOLS || nReadSymbols > nSymbols) + return -1; + pDecoder->nSymbols = nSymbols; + + /* Calculate starting positions of symbols for each code length, so we don't have to sort them */ + + for (i = 0; i < 16; i++) + nNumSymbolsPerLen[i] = 0; + for (i = 0; i < nReadSymbols; i++) { + if (pCodeLength[i] >= 16) return -1; + nNumSymbolsPerLen[pCodeLength[i]]++; + } + + pDecoder->nStartingPos[0] = 0; + pDecoder->nNumSorted = 0; + for (i = 1; i < 16; i++) { + pDecoder->nStartingPos[i] = pDecoder->nNumSorted; + pDecoder->nNumSorted += nNumSymbolsPerLen[i]; + } + + /* Assign symbols for any non-zero lengths, auto sorted by increasing code length */ + + for (i = 0; i < nSymbols; i++) + pRevSymbolTable[i] = -1; + + for (i = 0; i < nReadSymbols; i++) { + if (pCodeLength[i]) { + pRevSymbolTable[pDecoder->nStartingPos[pCodeLength[i]]++] = i; + } + } + + return 0; +} + +/** + * Finalize huffman codewords for decoding + * + * @param pDecoder decoding context + * @param pRevSymbolTable array of 2 * nSymbols entries that contains the reverse lookup table + * + * @return 0 for success, -1 for failure + */ +static int em_lsb_huffman_decoder_finalize_table(em_lsb_huffman_decoder_t *pDecoder, unsigned int *pRevSymbolTable) { + const int nSymbols = pDecoder->nSymbols; + unsigned int nCanonicalCodeWord = 0; + unsigned int *nRevCodeLengthTable = pRevSymbolTable + nSymbols; + int nCanonicalLength = 1; + int i; + + /* Re-create canonical huffman codewords and create left-justified words for em_lsb_huffman_decoder_read_value() */ + + for (i = 0; i < (1 << NFASTSYMBOLBITS); i++) + pDecoder->nFastSymbol[i] = 0; + for (i = 0; i < 16; i++) + pDecoder->nStartIndex[i] = 0; + + i = 0; + while (i < pDecoder->nNumSorted) { + if (nCanonicalLength >= 16) return -1; + pDecoder->nStartIndex[nCanonicalLength] = i - nCanonicalCodeWord; + + while (i < pDecoder->nStartingPos[nCanonicalLength]) { + /* Write canonical order -> codeword mapping */ + if (i >= nSymbols) return -1; + nRevCodeLengthTable[i] = nCanonicalLength; + + /* Check for malformed table */ + if (nCanonicalCodeWord >= (1U << nCanonicalLength)) return -1; + + /* Write accelerated symbol value + codeword len for the (upside down) top NFASTSYMBOLBITS bits of the codeword, at all bit positions */ + if (nCanonicalLength <= NFASTSYMBOLBITS) { + unsigned int nRevWord; + + /* Get upside down codeword (branchless method by Eric Biggers) */ + nRevWord = ((nCanonicalCodeWord & 0x5555) << 1) | ((nCanonicalCodeWord & 0xaaaa) >> 1); + nRevWord = ((nRevWord & 0x3333) << 2) | ((nRevWord & 0xcccc) >> 2); + nRevWord = ((nRevWord & 0x0f0f) << 4) | ((nRevWord & 0xf0f0) >> 4); + nRevWord = ((nRevWord & 0x00ff) << 8) | ((nRevWord & 0xff00) >> 8); + nRevWord = nRevWord >> (16 - nCanonicalLength); + + int nSlots = 1 << (NFASTSYMBOLBITS - nCanonicalLength); + while (nSlots) { + pDecoder->nFastSymbol[nRevWord] = (pRevSymbolTable[i] & 0xffffff) | (nCanonicalLength << 24); + nRevWord += (1 << nCanonicalLength); + nSlots--; + } + } + + i++; + nCanonicalCodeWord++; + } + nCanonicalLength++; + nCanonicalCodeWord <<= 1; + } + + while (i < nSymbols) { + pRevSymbolTable[i] = -1; + nRevCodeLengthTable[i++] = 0; + } + + return 0; +} + +/** + * Decode next symbol + * + * @param pDecoder decoding context + * @param pRevSymbolTable reverse lookup table + * @param pBitReader bit reader context + * + * @return symbol, or -1 for error + */ +static inline unsigned int em_lsb_huffman_decoder_read_value(em_lsb_huffman_decoder_t *pDecoder, const unsigned int *pRevSymbolTable, em_lsb_bitreader_t *pBitReader) { + unsigned int nStream = em_lsb_bitreader_peek_16bits(pBitReader); + unsigned int nFastSymAndBits = pDecoder->nFastSymbol[nStream & ((1 << NFASTSYMBOLBITS) - 1)]; + if (nFastSymAndBits) { + /* Fast path: the symbol len is <= NFASTSYMBOLBITS, we have a symbol and bit length for the (upside-down) MSB bits */ + em_lsb_bitreader_consume_bits(pBitReader, nFastSymAndBits >> 24); + return nFastSymAndBits & 0xffffff; + } + + /* The symbol len is larger than NFASTSYMBOLBITS, decode using the slower path. By definition, the more frequent symbols are shorter and in the fast path. */ + + const unsigned int *nRevCodeLengthTable = pRevSymbolTable + pDecoder->nSymbols; + unsigned int nCodeWord = 0; + int nBits = 1; + + do { + nCodeWord |= (nStream & 1); + + unsigned int nTableIndex = pDecoder->nStartIndex[nBits] + nCodeWord; + if (nTableIndex < pDecoder->nSymbols) { + if (nBits == nRevCodeLengthTable[nTableIndex]) { + em_lsb_bitreader_consume_bits(pBitReader, nBits); + return pRevSymbolTable[nTableIndex]; + } + } + + nCodeWord <<= 1; + nStream >>= 1; + nBits++; + } while (nBits < 16); + return -1; +} + +/** + * Read fixed bit size code lengths + * + * @param nLenBits number of bits per code length + * @param nReadSymbols number of symbols actually read + * @param nSymbols number of symbols to build codes for + * @param pCodeLength output code lengths table + * @param pBitReader bit reader context + * + * @return 0 for success, -1 for failure + */ +static int em_lsb_huffman_decoder_read_raw_lengths(const int nLenBits, const int nReadSymbols, const int nSymbols, unsigned char *pCodeLength, em_lsb_bitreader_t *pBitReader) { + static const unsigned char nCodeLenSymIndex[NCODELENSYMS] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; /* Order in which code lengths are stored, as per the zlib specification */ + int i; + + if (nReadSymbols < 0 || nReadSymbols > MAX_SYMBOLS || nSymbols < 0 || nSymbols > MAX_SYMBOLS || nReadSymbols > nSymbols) + return -1; + + i = 0; + while (i < nReadSymbols) { + unsigned int nLength = em_lsb_bitreader_get_bits(pBitReader, nLenBits); + if (nLength == -1) return -1; + + pCodeLength[nCodeLenSymIndex[i++]] = nLength; + } + + while (i < nSymbols) { + pCodeLength[nCodeLenSymIndex[i++]] = 0; + } + + return 0; +} + +/** + * Read huffman-encoded code lengths + * + * @param pTablesDecoder decoding context for code lengths + * @param pTablesRevSymbolTable reverse lookup table for code lengths + * @param nReadSymbols number of symbols actually read + * @param nSymbols number of symbols to build codes for + * @param pCodeLength output code lengths table + * @param pBitReader bit reader context + * + * @return 0 for success, -1 for failure + */ +static int em_lsb_huffman_decoder_read_var_lengths(em_lsb_huffman_decoder_t *pTablesDecoder, const unsigned int *pTablesRevSymbolTable, + const int nReadSymbols, const int nSymbols, unsigned char *pCodeLength, em_lsb_bitreader_t *pBitReader) { + int i; + + if (nReadSymbols < 0 || nSymbols < 0 || nReadSymbols > nSymbols) + return -1; + + i = 0; + unsigned int nPrevLength = 0; + + while (i < nReadSymbols) { + unsigned int nLength = em_lsb_huffman_decoder_read_value(pTablesDecoder, pTablesRevSymbolTable, pBitReader); + if (nLength == -1) return -1; + + if (nLength < 16) { + nPrevLength = nLength; + pCodeLength[i++] = nPrevLength; + } + else { + unsigned int nRunLen = 0; + + if (nLength == 16) { + int nExtraRunLen = em_lsb_bitreader_get_bits(pBitReader, 2); + if (nExtraRunLen == -1) return -1; + nRunLen = 3 + nExtraRunLen; + } + else if (nLength == 17) { + int nExtraRunLen = em_lsb_bitreader_get_bits(pBitReader, 3); + if (nExtraRunLen == -1) return -1; + nPrevLength = 0; + nRunLen = 3 + nExtraRunLen; + } + else if (nLength == 18) { + int nExtraRunLen = em_lsb_bitreader_get_bits(pBitReader, 7); + if (nExtraRunLen == -1) return -1; + nPrevLength = 0; + nRunLen = 11 + nExtraRunLen; + } + + while (nRunLen && i < nReadSymbols) { + pCodeLength[i++] = nPrevLength; + nRunLen--; + } + } + } + + while (i < nSymbols) + pCodeLength[i++] = 0; + return 0; +} + +/*-- zlib stored blocks copier --*/ + +static size_t em_inflate_copy_stored(em_lsb_bitreader_t *pBitReader, unsigned char *pOutData, size_t nOutDataOffset, size_t nBlockMaxSize) { + /* Align on byte */ + if (em_lsb_bitreader_byte_align(pBitReader) < 0) + return -1; + + if ((pBitReader->pInBlock + 4) > pBitReader->pInBlockEnd) return -1; + + /* Read block length, and its two's complement verification value */ + unsigned short nStoredLen = ((unsigned short)pBitReader->pInBlock[0]) | (((unsigned short)pBitReader->pInBlock[1]) << 8); + pBitReader->pInBlock += 2; + + unsigned short nNegStoredLen = ((unsigned short)pBitReader->pInBlock[0]) | (((unsigned short)pBitReader->pInBlock[1]) << 8); + pBitReader->pInBlock += 2; + + /* Make sure that the len and the two's complement match */ + if (nStoredLen != ((~nNegStoredLen) & 0xffff)) return -1; + + /* Make sure there is room */ + if (nStoredLen > nBlockMaxSize) return -1; + + /* Copy stored data */ + memcpy(pOutData + nOutDataOffset, pBitReader->pInBlock, nStoredLen); + pBitReader->pInBlock += nStoredLen; + + return (size_t)nStoredLen; +} + +/*-- zlib static and dynamic blocks inflater --*/ + +#define NCODELENBITS 3 +#define NLITERALSYMS 288 +#define NEODMARKERSYM 256 +#define NMATCHLENSYMSTART 257 +#define NMATCHLENSYMS 29 +#define NOFFSETSYMS 32 +#define MIN_MATCH_SIZE 3 +#define MATCHLEN_PAIR(__base,__dispbits) ((__base) | ((__dispbits) << 16) | 0x8000) +#define OFFSET_PAIR(__base,__dispbits) ((__base) | ((__dispbits) << 16)) + +/** Base value and number of extra displacement bits for each match length codeword */ +static const unsigned int em_inflate_matchlen_code[NMATCHLENSYMS] = { + MATCHLEN_PAIR(MIN_MATCH_SIZE + 0, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 1, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 2, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 3, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 4, 0), + MATCHLEN_PAIR(MIN_MATCH_SIZE + 5, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 6, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 7, 0), MATCHLEN_PAIR(MIN_MATCH_SIZE + 8, 1), MATCHLEN_PAIR(MIN_MATCH_SIZE + 10, 1), + MATCHLEN_PAIR(MIN_MATCH_SIZE + 12, 1), MATCHLEN_PAIR(MIN_MATCH_SIZE + 14, 1), MATCHLEN_PAIR(MIN_MATCH_SIZE + 16, 2), MATCHLEN_PAIR(MIN_MATCH_SIZE + 20, 2), MATCHLEN_PAIR(MIN_MATCH_SIZE + 24, 2), + MATCHLEN_PAIR(MIN_MATCH_SIZE + 28, 2), MATCHLEN_PAIR(MIN_MATCH_SIZE + 32, 3), MATCHLEN_PAIR(MIN_MATCH_SIZE + 40, 3), MATCHLEN_PAIR(MIN_MATCH_SIZE + 48, 3), MATCHLEN_PAIR(MIN_MATCH_SIZE + 56, 3), + MATCHLEN_PAIR(MIN_MATCH_SIZE + 64, 4), MATCHLEN_PAIR(MIN_MATCH_SIZE + 80, 4), MATCHLEN_PAIR(MIN_MATCH_SIZE + 96, 4), MATCHLEN_PAIR(MIN_MATCH_SIZE + 112, 4), MATCHLEN_PAIR(MIN_MATCH_SIZE + 128, 5), + MATCHLEN_PAIR(MIN_MATCH_SIZE + 160, 5), MATCHLEN_PAIR(MIN_MATCH_SIZE + 192, 5), MATCHLEN_PAIR(MIN_MATCH_SIZE + 224, 5), MATCHLEN_PAIR(MIN_MATCH_SIZE + 255, 0), +}; + +/** Base value and number of extra displacement bits for each offset codeword */ +static const unsigned int em_inflate_offset_code[NOFFSETSYMS] = { + OFFSET_PAIR(1, 0), OFFSET_PAIR(2, 0), OFFSET_PAIR(3, 0), OFFSET_PAIR(4, 0), OFFSET_PAIR(5, 1), OFFSET_PAIR(7, 1), OFFSET_PAIR(9, 2), OFFSET_PAIR(13, 2), OFFSET_PAIR(17, 3), OFFSET_PAIR(25, 3), + OFFSET_PAIR(33, 4), OFFSET_PAIR(49, 4), OFFSET_PAIR(65, 5), OFFSET_PAIR(97, 5), OFFSET_PAIR(129, 6), OFFSET_PAIR(193, 6), OFFSET_PAIR(257, 7), OFFSET_PAIR(385, 7), OFFSET_PAIR(513, 8), OFFSET_PAIR(769, 8), + OFFSET_PAIR(1025, 9), OFFSET_PAIR(1537, 9), OFFSET_PAIR(2049, 10), OFFSET_PAIR(3073, 10), OFFSET_PAIR(4097, 11), OFFSET_PAIR(6145, 11), OFFSET_PAIR(8193, 12), OFFSET_PAIR(12289, 12), OFFSET_PAIR(16385, 13), OFFSET_PAIR(24577, 13), +}; + +/** + * Decompress one data block + * + * @param pInBlock pointer to compressed data + * @param nDynamicBlock non-zero for a dynamic huffman tables block, zero for a static huffman tables block + * @param nInBlockSize size of compressed data, in bytes + * @param pOutData pointer to output decompression buffer (previously decompressed bytes + room for decompressing this block) + * @param nOutDataOffset starting index of where to store decompressed bytes in output buffer (and size of previously decompressed bytes) + * @param nBlockMaxSize total size of output decompression buffer, in bytes + * + * @return size of decompressed data in bytes, or -1 for error + */ +static size_t em_inflate_decompress_block(em_lsb_bitreader_t *pBitReader, int nDynamicBlock, unsigned char *pOutData, size_t nOutDataOffset, size_t nBlockMaxSize) { + em_lsb_huffman_decoder_t literalsDecoder; + em_lsb_huffman_decoder_t offsetDecoder; + unsigned int nLiteralsRevSymbolTable[NLITERALSYMS * 2]; + unsigned int nOffsetRevSymbolTable[NOFFSETSYMS * 2]; + int i; + + if (nDynamicBlock) { + em_lsb_huffman_decoder_t tablesDecoder; + unsigned char nCodeLength[NLITERALSYMS + NOFFSETSYMS]; + unsigned int nTablesRevSymbolTable[NCODELENSYMS * 2]; + + /* Read the encoded number of literals/match len symbols, offset symbols, and code length symbols */ + unsigned int nLiteralSyms = em_lsb_bitreader_get_bits(pBitReader, 5); + if (nLiteralSyms == -1) return -1; + nLiteralSyms += 257; + if (nLiteralSyms > NLITERALSYMS) return -1; + + unsigned int nOffsetSyms = em_lsb_bitreader_get_bits(pBitReader, 5); + if (nOffsetSyms == -1) return -1; + nOffsetSyms += 1; + if (nOffsetSyms > NOFFSETSYMS) return -1; + + unsigned int nCodeLenSyms = em_lsb_bitreader_get_bits(pBitReader, 4); + if (nCodeLenSyms == -1) return -1; + nCodeLenSyms += 4; + if (nCodeLenSyms > NCODELENSYMS) return -1; + + /* Read code lengths table */ + if (em_lsb_huffman_decoder_read_raw_lengths(NCODELENBITS /* code length bits */, nCodeLenSyms /* symbols */, NCODELENSYMS, nCodeLength, pBitReader) < 0) + return -1; + if (em_lsb_huffman_decoder_prepare_table(&tablesDecoder, nTablesRevSymbolTable, NCODELENSYMS, NCODELENSYMS, nCodeLength) < 0) + return -1; + if (em_lsb_huffman_decoder_finalize_table(&tablesDecoder, nTablesRevSymbolTable) < 0) + return -1; + + /* Use code lengths table to read literals/match len and offset tables */ + if (em_lsb_huffman_decoder_read_var_lengths(&tablesDecoder, nTablesRevSymbolTable, nLiteralSyms + nOffsetSyms /* read symbols */, NLITERALSYMS + NOFFSETSYMS /* total symbols */, nCodeLength, pBitReader) < 0) + return -1; + if (em_lsb_huffman_decoder_prepare_table(&literalsDecoder, nLiteralsRevSymbolTable, nLiteralSyms, NLITERALSYMS, nCodeLength) < 0) + return -1; + if (em_lsb_huffman_decoder_prepare_table(&offsetDecoder, nOffsetRevSymbolTable, nOffsetSyms, NOFFSETSYMS, nCodeLength + nLiteralSyms) < 0) + return -1; + } + else { + unsigned char nFixedLiteralCodeLen[NLITERALSYMS]; + unsigned char nFixedOffsetCodeLen[NOFFSETSYMS]; + + /* Fixed huffman codes for this block. Build fixed code lengths for literals/match lens and offsets, as per the zlib specification */ + + for (i = 0; i < 144; i++) + nFixedLiteralCodeLen[i] = 8; + for (; i < 256; i++) + nFixedLiteralCodeLen[i] = 9; + for (; i < 280; i++) + nFixedLiteralCodeLen[i] = 7; + for (; i < NLITERALSYMS; i++) + nFixedLiteralCodeLen[i] = 8; + + for (i = 0; i < NOFFSETSYMS; i++) + nFixedOffsetCodeLen[i] = 5; + + if (em_lsb_huffman_decoder_prepare_table(&literalsDecoder, nLiteralsRevSymbolTable, NLITERALSYMS, NLITERALSYMS, nFixedLiteralCodeLen) < 0) + return -1; + if (em_lsb_huffman_decoder_prepare_table(&offsetDecoder, nOffsetRevSymbolTable, NOFFSETSYMS, NOFFSETSYMS, nFixedOffsetCodeLen) < 0) + return -1; + } + + /* Replace codewords in the offsets table by the base + extra bit count, save table lookups when decoding */ + for (i = 0; i < NOFFSETSYMS; i++) { + unsigned int n = nOffsetRevSymbolTable[i]; + if (n < NOFFSETSYMS) { + nOffsetRevSymbolTable[i] = em_inflate_offset_code[n]; + } + } + + /* Replace match codewords in the literals/match len table by the base + extra bit count, save table lookups when decoding */ + for (i = 0; i < NLITERALSYMS; i++) { + unsigned int n = nLiteralsRevSymbolTable[i]; + if (n >= NMATCHLENSYMSTART && n < NLITERALSYMS) { + int index = n - NMATCHLENSYMSTART; + if (index >= 0 && index < NMATCHLENSYMS) { + nLiteralsRevSymbolTable[i] = em_inflate_matchlen_code[index]; + } + else { + /* Handle 286 and 287 codes, used for constructing a complete canonical tree, present in static huffman tables but not used */ + nLiteralsRevSymbolTable[i] = 0; + } + } + } + + /* Finalize huffman tables for decoding, after setting up the bases + extra bits as the symbols */ + if (em_lsb_huffman_decoder_finalize_table(&literalsDecoder, nLiteralsRevSymbolTable) < 0) + return -1; + if (em_lsb_huffman_decoder_finalize_table(&offsetDecoder, nOffsetRevSymbolTable) < 0) + return -1; + + /* Finally, loop to read all the literals/match len codewords in the block to decompress it */ + + unsigned char *pCurOutData = pOutData + nOutDataOffset; + const unsigned char *pOutDataEnd = pCurOutData + nBlockMaxSize; + const unsigned char *pOutDataFastEnd = pOutDataEnd - 15; + + while (1) { + em_lsb_bitreader_refill_32(pBitReader); + + unsigned int nLiteralsCodeword = em_lsb_huffman_decoder_read_value(&literalsDecoder, nLiteralsRevSymbolTable, pBitReader); + if (nLiteralsCodeword < 256) { + /* 0..255: literal. copy. */ + if (pCurOutData < pOutDataEnd) + *pCurOutData++ = nLiteralsCodeword; + else + return -1; + } + else { + if (nLiteralsCodeword == NEODMARKERSYM) break; /* EOD marker, all done */ + if (nLiteralsCodeword == -1) return -1; + + /* 256..284: match. decode match length. */ + + unsigned int nMatchLen = em_lsb_bitreader_get_bits(pBitReader, (nLiteralsCodeword >> 16) & 15); + if (nMatchLen == -1) return -1; + + nMatchLen += (nLiteralsCodeword & 0x7fff); + + /* Read match offset */ + + unsigned int nOffsetCodeword = em_lsb_huffman_decoder_read_value(&offsetDecoder, nOffsetRevSymbolTable, pBitReader); + if (nOffsetCodeword == -1) return -1; + + unsigned int nMatchOffset = em_lsb_bitreader_get_bits(pBitReader, (nOffsetCodeword >> 16) & 15); + if (nMatchOffset == -1) return -1; + + nMatchOffset += (nOffsetCodeword & 0x7fff); + + /* Copy match */ + + const unsigned char *pSrc = pCurOutData - nMatchOffset; + if (pSrc >= pOutData) { + if (nMatchOffset >= 16 && (pCurOutData + nMatchLen) <= pOutDataFastEnd) { + const unsigned char *pCopySrc = pSrc; + unsigned char *pCopyDst = pCurOutData; + const unsigned char *pCopyEndDst = pCurOutData + nMatchLen; + + do { + memcpy(pCopyDst, pCopySrc, 16); + pCopySrc += 16; + pCopyDst += 16; + } while (pCopyDst < pCopyEndDst); + + pCurOutData += nMatchLen; + } + else { + if ((pCurOutData + nMatchLen) > pOutDataEnd) return -1; + + while (nMatchLen--) { + *pCurOutData++ = *pSrc++; + } + } + } + else + return -1; + } + } + + return (size_t)(pCurOutData - (pOutData + nOutDataOffset)); +} + +/*-- zlib adler32 calculation --*/ + +#ifdef EM_INFLATE_VERIFY_CHECKSUM + +/* + By Mark Adler - https://github.com/madler/zlib/blob/master/adler32.c + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). + */ + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); +# define MOD(a) a %= BASE +# define MOD28(a) a %= BASE +# define MOD63(a) a %= BASE + +static unsigned int em_inflate_adler32_z(unsigned int adler, const unsigned char *buf, size_t len) { + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/*-- gzip crc32 calculation --*/ + +/** +By Stephen Brumme - https://create.stephan-brumme.com/crc32/ + +Unless otherwise noted in a file's first 5 lines, all source code published on http://create.stephan-brumme.com and its sub-pages is licensed similar to the zlib license: + +This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: +The origin of this software must not be misrepresented; you must not claim that you wrote the original software. +If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + */ + +static const unsigned int ema_inflate_Crc32Lookup[4][256] = { + { + 0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3, + 0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91, + 0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7, + 0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5, + 0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B, + 0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59, + 0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F, + 0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D, + 0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433, + 0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01, + 0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457, + 0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65, + 0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB, + 0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9, + 0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F, + 0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD, + 0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683, + 0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1, + 0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7, + 0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5, + 0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B, + 0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79, + 0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F, + 0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D, + 0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713, + 0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21, + 0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777, + 0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45, + 0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB, + 0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9, + 0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF, + 0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D, + } + + // beyond this point only relevant for Slicing-by-4, Slicing-by-8 and Slicing-by-16 + ,{ + 0x00000000,0x191B3141,0x32366282,0x2B2D53C3,0x646CC504,0x7D77F445,0x565AA786,0x4F4196C7, + 0xC8D98A08,0xD1C2BB49,0xFAEFE88A,0xE3F4D9CB,0xACB54F0C,0xB5AE7E4D,0x9E832D8E,0x87981CCF, + 0x4AC21251,0x53D92310,0x78F470D3,0x61EF4192,0x2EAED755,0x37B5E614,0x1C98B5D7,0x05838496, + 0x821B9859,0x9B00A918,0xB02DFADB,0xA936CB9A,0xE6775D5D,0xFF6C6C1C,0xD4413FDF,0xCD5A0E9E, + 0x958424A2,0x8C9F15E3,0xA7B24620,0xBEA97761,0xF1E8E1A6,0xE8F3D0E7,0xC3DE8324,0xDAC5B265, + 0x5D5DAEAA,0x44469FEB,0x6F6BCC28,0x7670FD69,0x39316BAE,0x202A5AEF,0x0B07092C,0x121C386D, + 0xDF4636F3,0xC65D07B2,0xED705471,0xF46B6530,0xBB2AF3F7,0xA231C2B6,0x891C9175,0x9007A034, + 0x179FBCFB,0x0E848DBA,0x25A9DE79,0x3CB2EF38,0x73F379FF,0x6AE848BE,0x41C51B7D,0x58DE2A3C, + 0xF0794F05,0xE9627E44,0xC24F2D87,0xDB541CC6,0x94158A01,0x8D0EBB40,0xA623E883,0xBF38D9C2, + 0x38A0C50D,0x21BBF44C,0x0A96A78F,0x138D96CE,0x5CCC0009,0x45D73148,0x6EFA628B,0x77E153CA, + 0xBABB5D54,0xA3A06C15,0x888D3FD6,0x91960E97,0xDED79850,0xC7CCA911,0xECE1FAD2,0xF5FACB93, + 0x7262D75C,0x6B79E61D,0x4054B5DE,0x594F849F,0x160E1258,0x0F152319,0x243870DA,0x3D23419B, + 0x65FD6BA7,0x7CE65AE6,0x57CB0925,0x4ED03864,0x0191AEA3,0x188A9FE2,0x33A7CC21,0x2ABCFD60, + 0xAD24E1AF,0xB43FD0EE,0x9F12832D,0x8609B26C,0xC94824AB,0xD05315EA,0xFB7E4629,0xE2657768, + 0x2F3F79F6,0x362448B7,0x1D091B74,0x04122A35,0x4B53BCF2,0x52488DB3,0x7965DE70,0x607EEF31, + 0xE7E6F3FE,0xFEFDC2BF,0xD5D0917C,0xCCCBA03D,0x838A36FA,0x9A9107BB,0xB1BC5478,0xA8A76539, + 0x3B83984B,0x2298A90A,0x09B5FAC9,0x10AECB88,0x5FEF5D4F,0x46F46C0E,0x6DD93FCD,0x74C20E8C, + 0xF35A1243,0xEA412302,0xC16C70C1,0xD8774180,0x9736D747,0x8E2DE606,0xA500B5C5,0xBC1B8484, + 0x71418A1A,0x685ABB5B,0x4377E898,0x5A6CD9D9,0x152D4F1E,0x0C367E5F,0x271B2D9C,0x3E001CDD, + 0xB9980012,0xA0833153,0x8BAE6290,0x92B553D1,0xDDF4C516,0xC4EFF457,0xEFC2A794,0xF6D996D5, + 0xAE07BCE9,0xB71C8DA8,0x9C31DE6B,0x852AEF2A,0xCA6B79ED,0xD37048AC,0xF85D1B6F,0xE1462A2E, + 0x66DE36E1,0x7FC507A0,0x54E85463,0x4DF36522,0x02B2F3E5,0x1BA9C2A4,0x30849167,0x299FA026, + 0xE4C5AEB8,0xFDDE9FF9,0xD6F3CC3A,0xCFE8FD7B,0x80A96BBC,0x99B25AFD,0xB29F093E,0xAB84387F, + 0x2C1C24B0,0x350715F1,0x1E2A4632,0x07317773,0x4870E1B4,0x516BD0F5,0x7A468336,0x635DB277, + 0xCBFAD74E,0xD2E1E60F,0xF9CCB5CC,0xE0D7848D,0xAF96124A,0xB68D230B,0x9DA070C8,0x84BB4189, + 0x03235D46,0x1A386C07,0x31153FC4,0x280E0E85,0x674F9842,0x7E54A903,0x5579FAC0,0x4C62CB81, + 0x8138C51F,0x9823F45E,0xB30EA79D,0xAA1596DC,0xE554001B,0xFC4F315A,0xD7626299,0xCE7953D8, + 0x49E14F17,0x50FA7E56,0x7BD72D95,0x62CC1CD4,0x2D8D8A13,0x3496BB52,0x1FBBE891,0x06A0D9D0, + 0x5E7EF3EC,0x4765C2AD,0x6C48916E,0x7553A02F,0x3A1236E8,0x230907A9,0x0824546A,0x113F652B, + 0x96A779E4,0x8FBC48A5,0xA4911B66,0xBD8A2A27,0xF2CBBCE0,0xEBD08DA1,0xC0FDDE62,0xD9E6EF23, + 0x14BCE1BD,0x0DA7D0FC,0x268A833F,0x3F91B27E,0x70D024B9,0x69CB15F8,0x42E6463B,0x5BFD777A, + 0xDC656BB5,0xC57E5AF4,0xEE530937,0xF7483876,0xB809AEB1,0xA1129FF0,0x8A3FCC33,0x9324FD72, + }, + + { + 0x00000000,0x01C26A37,0x0384D46E,0x0246BE59,0x0709A8DC,0x06CBC2EB,0x048D7CB2,0x054F1685, + 0x0E1351B8,0x0FD13B8F,0x0D9785D6,0x0C55EFE1,0x091AF964,0x08D89353,0x0A9E2D0A,0x0B5C473D, + 0x1C26A370,0x1DE4C947,0x1FA2771E,0x1E601D29,0x1B2F0BAC,0x1AED619B,0x18ABDFC2,0x1969B5F5, + 0x1235F2C8,0x13F798FF,0x11B126A6,0x10734C91,0x153C5A14,0x14FE3023,0x16B88E7A,0x177AE44D, + 0x384D46E0,0x398F2CD7,0x3BC9928E,0x3A0BF8B9,0x3F44EE3C,0x3E86840B,0x3CC03A52,0x3D025065, + 0x365E1758,0x379C7D6F,0x35DAC336,0x3418A901,0x3157BF84,0x3095D5B3,0x32D36BEA,0x331101DD, + 0x246BE590,0x25A98FA7,0x27EF31FE,0x262D5BC9,0x23624D4C,0x22A0277B,0x20E69922,0x2124F315, + 0x2A78B428,0x2BBADE1F,0x29FC6046,0x283E0A71,0x2D711CF4,0x2CB376C3,0x2EF5C89A,0x2F37A2AD, + 0x709A8DC0,0x7158E7F7,0x731E59AE,0x72DC3399,0x7793251C,0x76514F2B,0x7417F172,0x75D59B45, + 0x7E89DC78,0x7F4BB64F,0x7D0D0816,0x7CCF6221,0x798074A4,0x78421E93,0x7A04A0CA,0x7BC6CAFD, + 0x6CBC2EB0,0x6D7E4487,0x6F38FADE,0x6EFA90E9,0x6BB5866C,0x6A77EC5B,0x68315202,0x69F33835, + 0x62AF7F08,0x636D153F,0x612BAB66,0x60E9C151,0x65A6D7D4,0x6464BDE3,0x662203BA,0x67E0698D, + 0x48D7CB20,0x4915A117,0x4B531F4E,0x4A917579,0x4FDE63FC,0x4E1C09CB,0x4C5AB792,0x4D98DDA5, + 0x46C49A98,0x4706F0AF,0x45404EF6,0x448224C1,0x41CD3244,0x400F5873,0x4249E62A,0x438B8C1D, + 0x54F16850,0x55330267,0x5775BC3E,0x56B7D609,0x53F8C08C,0x523AAABB,0x507C14E2,0x51BE7ED5, + 0x5AE239E8,0x5B2053DF,0x5966ED86,0x58A487B1,0x5DEB9134,0x5C29FB03,0x5E6F455A,0x5FAD2F6D, + 0xE1351B80,0xE0F771B7,0xE2B1CFEE,0xE373A5D9,0xE63CB35C,0xE7FED96B,0xE5B86732,0xE47A0D05, + 0xEF264A38,0xEEE4200F,0xECA29E56,0xED60F461,0xE82FE2E4,0xE9ED88D3,0xEBAB368A,0xEA695CBD, + 0xFD13B8F0,0xFCD1D2C7,0xFE976C9E,0xFF5506A9,0xFA1A102C,0xFBD87A1B,0xF99EC442,0xF85CAE75, + 0xF300E948,0xF2C2837F,0xF0843D26,0xF1465711,0xF4094194,0xF5CB2BA3,0xF78D95FA,0xF64FFFCD, + 0xD9785D60,0xD8BA3757,0xDAFC890E,0xDB3EE339,0xDE71F5BC,0xDFB39F8B,0xDDF521D2,0xDC374BE5, + 0xD76B0CD8,0xD6A966EF,0xD4EFD8B6,0xD52DB281,0xD062A404,0xD1A0CE33,0xD3E6706A,0xD2241A5D, + 0xC55EFE10,0xC49C9427,0xC6DA2A7E,0xC7184049,0xC25756CC,0xC3953CFB,0xC1D382A2,0xC011E895, + 0xCB4DAFA8,0xCA8FC59F,0xC8C97BC6,0xC90B11F1,0xCC440774,0xCD866D43,0xCFC0D31A,0xCE02B92D, + 0x91AF9640,0x906DFC77,0x922B422E,0x93E92819,0x96A63E9C,0x976454AB,0x9522EAF2,0x94E080C5, + 0x9FBCC7F8,0x9E7EADCF,0x9C381396,0x9DFA79A1,0x98B56F24,0x99770513,0x9B31BB4A,0x9AF3D17D, + 0x8D893530,0x8C4B5F07,0x8E0DE15E,0x8FCF8B69,0x8A809DEC,0x8B42F7DB,0x89044982,0x88C623B5, + 0x839A6488,0x82580EBF,0x801EB0E6,0x81DCDAD1,0x8493CC54,0x8551A663,0x8717183A,0x86D5720D, + 0xA9E2D0A0,0xA820BA97,0xAA6604CE,0xABA46EF9,0xAEEB787C,0xAF29124B,0xAD6FAC12,0xACADC625, + 0xA7F18118,0xA633EB2F,0xA4755576,0xA5B73F41,0xA0F829C4,0xA13A43F3,0xA37CFDAA,0xA2BE979D, + 0xB5C473D0,0xB40619E7,0xB640A7BE,0xB782CD89,0xB2CDDB0C,0xB30FB13B,0xB1490F62,0xB08B6555, + 0xBBD72268,0xBA15485F,0xB853F606,0xB9919C31,0xBCDE8AB4,0xBD1CE083,0xBF5A5EDA,0xBE9834ED, + }, + + { + 0x00000000,0xB8BC6765,0xAA09C88B,0x12B5AFEE,0x8F629757,0x37DEF032,0x256B5FDC,0x9DD738B9, + 0xC5B428EF,0x7D084F8A,0x6FBDE064,0xD7018701,0x4AD6BFB8,0xF26AD8DD,0xE0DF7733,0x58631056, + 0x5019579F,0xE8A530FA,0xFA109F14,0x42ACF871,0xDF7BC0C8,0x67C7A7AD,0x75720843,0xCDCE6F26, + 0x95AD7F70,0x2D111815,0x3FA4B7FB,0x8718D09E,0x1ACFE827,0xA2738F42,0xB0C620AC,0x087A47C9, + 0xA032AF3E,0x188EC85B,0x0A3B67B5,0xB28700D0,0x2F503869,0x97EC5F0C,0x8559F0E2,0x3DE59787, + 0x658687D1,0xDD3AE0B4,0xCF8F4F5A,0x7733283F,0xEAE41086,0x525877E3,0x40EDD80D,0xF851BF68, + 0xF02BF8A1,0x48979FC4,0x5A22302A,0xE29E574F,0x7F496FF6,0xC7F50893,0xD540A77D,0x6DFCC018, + 0x359FD04E,0x8D23B72B,0x9F9618C5,0x272A7FA0,0xBAFD4719,0x0241207C,0x10F48F92,0xA848E8F7, + 0x9B14583D,0x23A83F58,0x311D90B6,0x89A1F7D3,0x1476CF6A,0xACCAA80F,0xBE7F07E1,0x06C36084, + 0x5EA070D2,0xE61C17B7,0xF4A9B859,0x4C15DF3C,0xD1C2E785,0x697E80E0,0x7BCB2F0E,0xC377486B, + 0xCB0D0FA2,0x73B168C7,0x6104C729,0xD9B8A04C,0x446F98F5,0xFCD3FF90,0xEE66507E,0x56DA371B, + 0x0EB9274D,0xB6054028,0xA4B0EFC6,0x1C0C88A3,0x81DBB01A,0x3967D77F,0x2BD27891,0x936E1FF4, + 0x3B26F703,0x839A9066,0x912F3F88,0x299358ED,0xB4446054,0x0CF80731,0x1E4DA8DF,0xA6F1CFBA, + 0xFE92DFEC,0x462EB889,0x549B1767,0xEC277002,0x71F048BB,0xC94C2FDE,0xDBF98030,0x6345E755, + 0x6B3FA09C,0xD383C7F9,0xC1366817,0x798A0F72,0xE45D37CB,0x5CE150AE,0x4E54FF40,0xF6E89825, + 0xAE8B8873,0x1637EF16,0x048240F8,0xBC3E279D,0x21E91F24,0x99557841,0x8BE0D7AF,0x335CB0CA, + 0xED59B63B,0x55E5D15E,0x47507EB0,0xFFEC19D5,0x623B216C,0xDA874609,0xC832E9E7,0x708E8E82, + 0x28ED9ED4,0x9051F9B1,0x82E4565F,0x3A58313A,0xA78F0983,0x1F336EE6,0x0D86C108,0xB53AA66D, + 0xBD40E1A4,0x05FC86C1,0x1749292F,0xAFF54E4A,0x322276F3,0x8A9E1196,0x982BBE78,0x2097D91D, + 0x78F4C94B,0xC048AE2E,0xD2FD01C0,0x6A4166A5,0xF7965E1C,0x4F2A3979,0x5D9F9697,0xE523F1F2, + 0x4D6B1905,0xF5D77E60,0xE762D18E,0x5FDEB6EB,0xC2098E52,0x7AB5E937,0x680046D9,0xD0BC21BC, + 0x88DF31EA,0x3063568F,0x22D6F961,0x9A6A9E04,0x07BDA6BD,0xBF01C1D8,0xADB46E36,0x15080953, + 0x1D724E9A,0xA5CE29FF,0xB77B8611,0x0FC7E174,0x9210D9CD,0x2AACBEA8,0x38191146,0x80A57623, + 0xD8C66675,0x607A0110,0x72CFAEFE,0xCA73C99B,0x57A4F122,0xEF189647,0xFDAD39A9,0x45115ECC, + 0x764DEE06,0xCEF18963,0xDC44268D,0x64F841E8,0xF92F7951,0x41931E34,0x5326B1DA,0xEB9AD6BF, + 0xB3F9C6E9,0x0B45A18C,0x19F00E62,0xA14C6907,0x3C9B51BE,0x842736DB,0x96929935,0x2E2EFE50, + 0x2654B999,0x9EE8DEFC,0x8C5D7112,0x34E11677,0xA9362ECE,0x118A49AB,0x033FE645,0xBB838120, + 0xE3E09176,0x5B5CF613,0x49E959FD,0xF1553E98,0x6C820621,0xD43E6144,0xC68BCEAA,0x7E37A9CF, + 0xD67F4138,0x6EC3265D,0x7C7689B3,0xC4CAEED6,0x591DD66F,0xE1A1B10A,0xF3141EE4,0x4BA87981, + 0x13CB69D7,0xAB770EB2,0xB9C2A15C,0x017EC639,0x9CA9FE80,0x241599E5,0x36A0360B,0x8E1C516E, + 0x866616A7,0x3EDA71C2,0x2C6FDE2C,0x94D3B949,0x090481F0,0xB1B8E695,0xA30D497B,0x1BB12E1E, + 0x43D23E48,0xFB6E592D,0xE9DBF6C3,0x516791A6,0xCCB0A91F,0x740CCE7A,0x66B96194,0xDE0506F1, + } +}; + +// define endianess and some integer data types +#if defined(_MSC_VER) || defined(__MINGW32__) +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __BYTE_ORDER __LITTLE_ENDIAN +#elif defined(__APPLE__) +#include +#define __BYTE_ORDER __DARWIN_BYTE_ORDER +#else + // defines __BYTE_ORDER as __LITTLE_ENDIAN or __BIG_ENDIAN +#include +#endif + +/// swap endianess +static inline unsigned int em_inflate_crc32_swap(unsigned int x) { +#if defined(__GNUC__) || defined(__clang__) + return __builtin_bswap32(x); +#else + return (x >> 24) | + ((x >> 8) & 0x0000FF00) | + ((x << 8) & 0x00FF0000) | + (x << 24); +#endif +} + +static unsigned int em_inflate_crc32_4bytes(const void* data, size_t length, unsigned int previousCrc32) { + unsigned int crc = ~previousCrc32; // same as previousCrc32 ^ 0xFFFFFFFF + const unsigned int* current = (const unsigned int*)data; + + // process four bytes at once (Slicing-by-4) + while (length >= 4) + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int one = *current++ ^ em_inflate_crc32_swap(crc); + crc = ema_inflate_Crc32Lookup[0][one & 0xFF] ^ + ema_inflate_Crc32Lookup[1][(one >> 8) & 0xFF] ^ + ema_inflate_Crc32Lookup[2][(one >> 16) & 0xFF] ^ + ema_inflate_Crc32Lookup[3][(one >> 24) & 0xFF]; +#else + unsigned int one = *current++ ^ crc; + crc = ema_inflate_Crc32Lookup[0][(one >> 24) & 0xFF] ^ + ema_inflate_Crc32Lookup[1][(one >> 16) & 0xFF] ^ + ema_inflate_Crc32Lookup[2][(one >> 8) & 0xFF] ^ + ema_inflate_Crc32Lookup[3][one & 0xFF]; +#endif + + length -= 4; + } + + const unsigned char* currentChar = (const unsigned char*)current; + // remaining 1 to 3 bytes (standard algorithm) + while (length-- != 0) + crc = (crc >> 8) ^ ema_inflate_Crc32Lookup[0][(crc & 0xFF) ^ *currentChar++]; + + return ~crc; // same as crc ^ 0xFFFFFFFF +} + +#endif /* EM_INFLATE_VERIFY_CHECKSUM */ + +/*-- Top level zlib stream inflater --*/ + +/* What type of checksum to verify, depending on the stream */ +typedef enum { EM_INFLATE_CHECKSUM_NONE = 0, EM_INFLATE_CHECKSUM_GZIP, EM_INFLATE_CHECKSUM_ZLIB } em_inflate_checksum_type_t; + +/** + * Inflate gzip or zlib data + * + * @param pCompressedData pointer to start of zlib data + * @param nCompressedDataSize size of zlib data, in bytes + * @param pOutData pointer to start of decompression buffer + * @param nMaxOutDataSize maximum size of decompression buffer, in bytes + * + * @return number of bytes decompressed, or -1 in case of an error + */ +size_t em_inflate(const void *pCompressedData, size_t nCompressedDataSize, unsigned char *pOutData, size_t nMaxOutDataSize) { + const unsigned char *pCurCompressedData = (const unsigned char *)pCompressedData; + const unsigned char *pEndCompressedData = pCurCompressedData + nCompressedDataSize; + em_lsb_bitreader_t bitReader; + unsigned int nIsFinalBlock; + size_t nCurOutOffset; + em_inflate_checksum_type_t nCheckSumType = EM_INFLATE_CHECKSUM_NONE; + unsigned long nCheckSum = 0; + + if ((pCurCompressedData + 2) > pEndCompressedData) return -1; + + /* Check header */ + if (pCurCompressedData[0] == 0x1f && pCurCompressedData[1] == 0x8b) { + /* gzip wrapper */ + pCurCompressedData += 2; + if ((pCurCompressedData + 8) > pEndCompressedData || pCurCompressedData[0] != 0x08 /* deflate */) + return -1; + pCurCompressedData++; + + /* Read flags and skip over the rest of the header */ + unsigned char flags = *pCurCompressedData++; + pCurCompressedData += 6; + + if (flags & 0x02) { /* Part number present */ + if ((pCurCompressedData + 2) > pEndCompressedData) return -1; + pCurCompressedData += 2; + } + + if (flags & 0x04) { /* Extra field present, starts with two-byte length */ + if ((pCurCompressedData + 2) > pEndCompressedData) return -1; + unsigned short nExtraFieldLen = ((unsigned short)pCurCompressedData[0]) | (((unsigned short)pCurCompressedData[1]) << 8); + pCurCompressedData += 2; + + if ((pCurCompressedData + nExtraFieldLen) > pEndCompressedData) return -1; + pCurCompressedData += nExtraFieldLen; + } + + if (flags & 0x08) { /* Original filename present, zero terminated */ + do { + if (pCurCompressedData >= pEndCompressedData) return -1; + pCurCompressedData++; + } while (pCurCompressedData[-1]); + } + + if (flags & 0x10) { /* File comment present, zero terminated */ + do { + if (pCurCompressedData >= pEndCompressedData) return -1; + pCurCompressedData++; + } while (pCurCompressedData[-1]); + } + + if (flags & 0x20) { /* Encryption header present */ + return -1; + } + + nCheckSumType = EM_INFLATE_CHECKSUM_GZIP; + } + else if ((pCurCompressedData[0] & 0x0f) == 0x08) { + /* zlib wrapper? */ + unsigned char CMF = pCurCompressedData[0]; + unsigned char FLG = pCurCompressedData[1]; + unsigned short nCheck = FLG | (((unsigned short)CMF) << 8); + + if ((CMF >> 4) <= 7 && (nCheck % 31) == 0) { + /* Looks like a valid zlib wrapper */ + pCurCompressedData += 2; + if (FLG & 0x20) { /* Preset dictionary present */ + if ((pCurCompressedData + 4) > pEndCompressedData) return -1; + pCurCompressedData += 4; + } + } + + nCheckSumType = EM_INFLATE_CHECKSUM_ZLIB; + } + +#ifdef EM_INFLATE_VERIFY_CHECKSUM + /* Initialize checksum */ + if (nCheckSumType == EM_INFLATE_CHECKSUM_ZLIB) + nCheckSum = em_inflate_adler32_z(0, NULL, 0); +#endif /* EM_INFLATE_VERIFY_CHECKSUM */ + + /* The rest of the data is bit-packed. Initialize bit reader */ + em_lsb_bitreader_init(&bitReader, pCurCompressedData, pEndCompressedData); + + /* Process all the blocks */ + nCurOutOffset = 0; + + do { + unsigned int nBlockType; + size_t nBlockResult; + + nIsFinalBlock = em_lsb_bitreader_get_bits(&bitReader, 1); + nBlockType = em_lsb_bitreader_get_bits(&bitReader, 2); + + switch (nBlockType) { + case 0: /* Stored */ + nBlockResult = em_inflate_copy_stored(&bitReader, pOutData, nCurOutOffset, nMaxOutDataSize - nCurOutOffset); + break; + + case 1: /* Static huffman */ + nBlockResult = em_inflate_decompress_block(&bitReader, 0 /* static */, pOutData, nCurOutOffset, nMaxOutDataSize - nCurOutOffset); + break; + + case 2: /* Dynamic huffman */ + nBlockResult = em_inflate_decompress_block(&bitReader, 1 /* dynamic */, pOutData, nCurOutOffset, nMaxOutDataSize - nCurOutOffset); + break; + + case 3: /* Invalid */ + return -1; + } + + if (nBlockResult == -1) return -1; + +#ifdef EM_INFLATE_VERIFY_CHECKSUM + /* Update checksum with the decompressed block's contents */ + if (nCheckSumType == EM_INFLATE_CHECKSUM_GZIP) + nCheckSum = em_inflate_crc32_4bytes(pOutData + nCurOutOffset, nBlockResult, nCheckSum); + else if (nCheckSumType == EM_INFLATE_CHECKSUM_ZLIB) + nCheckSum = em_inflate_adler32_z(nCheckSum, pOutData + nCurOutOffset, nBlockResult); +#endif /* EM_INFLATE_VERIFY_CHECKSUM */ + + nCurOutOffset += nBlockResult; + } while (!nIsFinalBlock); + + /* Align on a byte again */ + em_lsb_bitreader_byte_align(&bitReader); + pCurCompressedData = bitReader.pInBlock; + +#ifdef EM_INFLATE_VERIFY_CHECKSUM + /* Read stored checksum and verify it */ + + unsigned int nStoredCheckSum; + switch (nCheckSumType) { + case EM_INFLATE_CHECKSUM_GZIP: /* gzip - little endian crc32 */ + if ((pCurCompressedData + 4) > pEndCompressedData) return -1; + nStoredCheckSum = ((unsigned int)pCurCompressedData[0]); + nStoredCheckSum |= ((unsigned int)pCurCompressedData[1]) << 8; + nStoredCheckSum |= ((unsigned int)pCurCompressedData[2]) << 16; + nStoredCheckSum |= ((unsigned int)pCurCompressedData[3]) << 24; + if (nStoredCheckSum != nCheckSum) return -1; + /* pCurCompressedData += 4; */ + break; + + case EM_INFLATE_CHECKSUM_ZLIB: /* zlib - big endian adler32 */ + if ((pCurCompressedData + 4) > pEndCompressedData) return -1; + nStoredCheckSum = ((unsigned int)pCurCompressedData[0]) << 24; + nStoredCheckSum |= ((unsigned int)pCurCompressedData[1]) << 16; + nStoredCheckSum |= ((unsigned int)pCurCompressedData[2]) << 8; + nStoredCheckSum |= ((unsigned int)pCurCompressedData[3]); + if (nStoredCheckSum != nCheckSum) return -1; + /* pCurCompressedData += 4; */ + break; + + default: /* None */ + break; + } +#endif /* EM_INFLATE_VERIFY_CHECKSUM */ + + /* Success, return decompressed size */ + return nCurOutOffset; +} diff --git a/lib/inflate/em_inflate.h b/lib/inflate/em_inflate.h new file mode 100644 index 0000000..e717df7 --- /dev/null +++ b/lib/inflate/em_inflate.h @@ -0,0 +1,49 @@ +/* + * em_inflate.h - fast in-memory inflate (gzip/zlib decompressor) definitions + * + * Copyright (C) 2019 Emmanuel Marty + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef _EM_INFLATE_H +#define _EM_INFLATE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Inflate gzip or zlib data + * + * @param pCompressedData pointer to start of zlib data + * @param nCompressedDataSize size of zlib data, in bytes + * @param pOutData pointer to start of decompression buffer + * @param nMaxOutDataSize maximum size of decompression buffer, in bytes + * + * @return number of bytes decompressed, or -1 in case of an error + */ +size_t em_inflate(const void *pCompressedData, size_t nCompressedDataSize, unsigned char *pOutData, size_t nMaxOutDataSize); + +#ifdef __cplusplus +} +#endif + +#endif /* _EM_INFLATE_H */ diff --git a/lib/inflate/inflate.cc b/lib/inflate/inflate.cc new file mode 100644 index 0000000..c257ba6 --- /dev/null +++ b/lib/inflate/inflate.cc @@ -0,0 +1,117 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace inflate { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +int32_t inflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargsinflate[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcinflate = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoinflate = v8::CFunctionInfo(rcinflate, 5, cargsinflate); +v8::CFunction pFinflate = v8::CFunction((const void*)&inflateFast, &infoinflate); + + + +void inflateSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + unsigned char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + unsigned char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = em_inflate(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t inflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + unsigned char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + unsigned char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return em_inflate(v0, v1, v2, v3); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "inflate", &pFinflate, inflateSlow); + + + + SET_MODULE(isolate, target, "inflate", module); +} +} // namespace inflate +} // namespace lo + +extern "C" { + void* _register_inflate() { + return (void*)lo::inflate::Init; + } +} diff --git a/lib/libffi/api.js b/lib/libffi/api.js new file mode 100644 index 0000000..54e4164 --- /dev/null +++ b/lib/libffi/api.js @@ -0,0 +1,433 @@ +const api = { + ffi_prep_cif: { + parameters: ['buffer', 'u32', 'u32', 'buffer', 'buffer'], + pointers: ['ffi_cif*', , , 'ffi_type*', 'ffi_type**'], + casts: [, '(ffi_abi)'], + result: 'i32' + }, + ffi_call: { + parameters: ['buffer', 'pointer', 'u32array', 'buffer'], + pointers: ['ffi_cif*', 'callback', , 'void**'], + result: 'void' + }, + bindFastApi: { + declare_only: true, + nofast: true, + name: 'bindFastApi' + }, + bindSlowApi: { + declare_only: true, + nofast: true, + name: 'bindSlowApi' + } +} + +const preamble = ` +typedef void (*callback)(); + +struct foreignFunction { + void* fast; + void* ffi; + void** values; + void* start; + v8::CFunction* cfunc; + ffi_cif* cif; + FastTypes rc; + FastTypes* params; + int nargs; +}; + +inline uint8_t needsunwrap (lo::FastTypes t) { + if (t == lo::FastTypes::buffer) return 1; + if (t == lo::FastTypes::u32array) return 1; + if (t == lo::FastTypes::pointer) return 1; + if (t == lo::FastTypes::u64) return 1; + if (t == lo::FastTypes::i64) return 1; + return 0; +} + +v8::CTypeInfo* CTypeFromV8 (uint8_t v8Type) { + if (v8Type == lo::FastTypes::boolean) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kBool); + if (v8Type == lo::FastTypes::i8) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::i16) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::i32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::u8) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::u16) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::u32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::f32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kFloat32); + if (v8Type == lo::FastTypes::f64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kFloat64); + if (v8Type == lo::FastTypes::i64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt64); + if (v8Type == lo::FastTypes::u64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::iSize) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt64); + if (v8Type == lo::FastTypes::uSize) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::pointer) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::function) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::string) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString); + if (v8Type == lo::FastTypes::buffer) { + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, + v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone); + } + if (v8Type == lo::FastTypes::u32array) { + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, + v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone); + } + return new v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +} + +ffi_type* FFITypeFromV8 (uint8_t v8Type) { + if (v8Type == lo::FastTypes::boolean) + return &ffi_type_uint8; + if (v8Type == lo::FastTypes::i8) + return &ffi_type_sint8; + if (v8Type == lo::FastTypes::i16) + return &ffi_type_sint16; + if (v8Type == lo::FastTypes::i32) + return &ffi_type_sint32; + if (v8Type == lo::FastTypes::u8) + return &ffi_type_uint8; + if (v8Type == lo::FastTypes::u16) + return &ffi_type_uint16; + if (v8Type == lo::FastTypes::u32) + return &ffi_type_uint32; + if (v8Type == lo::FastTypes::f32) + return &ffi_type_float; + if (v8Type == lo::FastTypes::f64) + return &ffi_type_double; + if (v8Type == lo::FastTypes::i64) + return &ffi_type_sint64; + if (v8Type == lo::FastTypes::u64) + return &ffi_type_uint64; + if (v8Type == lo::FastTypes::iSize) + return &ffi_type_sint64; + if (v8Type == lo::FastTypes::uSize) + return &ffi_type_uint64; + if (v8Type == lo::FastTypes::pointer) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::function) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::string) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::buffer) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::u32array) + return &ffi_type_pointer; + return &ffi_type_void; +} + +// 10 ns if this fn does nothing +// 46 ns for int fn (int) +// 4ns for looping through and allocating args +// 4ns return +// 30 ns for the ffi call + +void SlowCallback(const FunctionCallbackInfo &args) { + Isolate* isolate = args.GetIsolate(); + foreignFunction* ffn = (foreignFunction*)args.Data() + .As()->GetAlignedPointerFromInternalField(1); + ffi_cif* cif = ffn->cif; + ffi_arg result; + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::i32) { + *(int32_t*)start = (int32_t)Local::Cast(args[i])->Value(); + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + *(uint32_t*)start = (uint32_t)Local::Cast(args[i])->Value(); + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + *(uint16_t*)start = (uint16_t)Local::Cast(args[i])->Value(); + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::u8) { + *(uint8_t*)start = (uint8_t)Local::Cast(args[i])->Value(); + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u64) { + *(uint64_t*)start = (uint64_t)Local::Cast(args[i])->Value(); + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::pointer) { + *(uint64_t*)start = (uint64_t)Local::Cast(args[i])->Value(); + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::buffer) { + Local u8 = args[i].As(); + uint8_t* ptr = (uint8_t*)u8->Buffer()->Data() + u8->ByteOffset(); + *(uint64_t*)start = (uint64_t)ptr; + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32array) { + Local u32 = args[i].As(); + uint8_t* ptr = (uint8_t*)u32->Buffer()->Data() + u32->ByteOffset(); + *(uint64_t*)start = (uint64_t)ptr; + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::string) { + String::Utf8Value arg0(isolate, args[i]); + *(uint64_t*)start = (uint64_t)strdup(*arg0); + start += 8; + continue; + } + } + ffi_call(cif, FFI_FN(ffn->ffi), &result, ffn->values); + if (args.Length() > ffn->nargs) { + uint64_t* res = (uint64_t*)args[ffn->nargs].As()->Buffer()->Data(); + *res = (uint64_t)result; + return; + } + if (ffn->rc == lo::FastTypes::i32) { + args.GetReturnValue().Set(Integer::New(isolate, (int32_t)result)); + return; + } + if (ffn->rc == lo::FastTypes::u32) { + args.GetReturnValue().Set(Integer::New(isolate, (uint32_t)result)); + return; + } +} + +void bindSlowApiSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + void* fn = reinterpret_cast(Local::Cast(args[0])->Value()); + void* wrapped = reinterpret_cast(Local::Cast(args[1])->Value()); + int rtype = Local::Cast(args[2])->Value(); + Local params = args[3].As(); + Local tpl = ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(2); + Local data = tpl->NewInstance(context).ToLocalChecked(); + ffi_cif* cif = (ffi_cif*)calloc(1, sizeof(ffi_cif)); + foreignFunction* ffn = new foreignFunction(); + ffn->fast = wrapped; + ffn->ffi = fn; + ffn->cif = cif; + data->SetAlignedPointerInInternalField(1, ffn); + int len = params->Length(); + ffi_type* ffirc = FFITypeFromV8(rtype); + ffn->rc = (FastTypes)rtype; + ffi_type** ffiargs = (ffi_type**)calloc(len, sizeof(ffi_type*)); + ffn->params = (FastTypes*)calloc(len, sizeof(FastTypes)); + ffn->nargs = len; + ffn->values = (void**)calloc(ffn->nargs, sizeof(void*)); + int fastlen = len + 1 + needsunwrap((FastTypes)rtype); + CTypeInfo* cargs = (CTypeInfo*)calloc(fastlen, sizeof(CTypeInfo)); + cargs[0] = CTypeInfo(CTypeInfo::Type::kV8Value); + int size = 0; + for (int i = 0; i < len; i++) { + uint8_t ptype = Local::Cast( + params->Get(context, i).ToLocalChecked())->Value(); + cargs[i + 1] = *CTypeFromV8(ptype); + ffiargs[i] = FFITypeFromV8(ptype); + ffn->params[i] = (FastTypes)ptype; + if (ffn->params[i] == lo::FastTypes::u8) { + size += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + size += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + size += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + size += 4; + continue; + } + size += 8; + } + ffn->start = calloc(1, size); + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::u8) { + ffn->values[i] = start; + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + ffn->values[i] = start; + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + ffn->values[i] = start; + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + ffn->values[i] = start; + start += 4; + continue; + } + ffn->values[i] = start; + start += 8; + } + if (fastlen - 1 > len) { + cargs[fastlen - 1] = *CTypeFromV8(FastTypes::u32array); + } + ffi_status status = ffi_prep_cif(cif, FFI_DEFAULT_ABI, len, ffirc, ffiargs); + if (status != FFI_OK) { + // TODO: fix this api + return; + } + Local funcTemplate = FunctionTemplate::New( + isolate, + SlowCallback, + data, + Local(), + 0, + ConstructorBehavior::kThrow, + SideEffectType::kHasNoSideEffect, + NULL + ); + Local fun = + funcTemplate->GetFunction(context).ToLocalChecked(); + args.GetReturnValue().Set(fun); +} + +void bindFastApiSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + void* fn = reinterpret_cast(Local::Cast(args[0])->Value()); + void* wrapped = reinterpret_cast(Local::Cast(args[1])->Value()); + int rtype = Local::Cast(args[2])->Value(); + Local params = args[3].As(); + + Local tpl = ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(2); + Local data = tpl->NewInstance(context).ToLocalChecked(); + ffi_cif* cif = (ffi_cif*)calloc(1, sizeof(ffi_cif)); + foreignFunction* ffn = new foreignFunction(); + ffn->fast = wrapped; + ffn->ffi = fn; + ffn->cif = cif; + data->SetAlignedPointerInInternalField(1, ffn); + int len = params->Length(); + ffi_type* ffirc = FFITypeFromV8(rtype); + CTypeInfo* rc; + if (needsunwrap((FastTypes)rtype)) { + rc = CTypeFromV8(FastTypes::empty); + } else { + rc = CTypeFromV8((FastTypes)rtype); + } + ffn->rc = (FastTypes)rtype; + ffi_type** ffiargs = (ffi_type**)calloc(len, sizeof(ffi_type*)); + ffn->params = (FastTypes*)calloc(len, sizeof(FastTypes)); + ffn->nargs = len; + ffn->values = (void**)calloc(ffn->nargs, sizeof(void*)); + int fastlen = len + 1 + needsunwrap((FastTypes)rtype); + CTypeInfo* cargs = (CTypeInfo*)calloc(fastlen, sizeof(CTypeInfo)); + cargs[0] = CTypeInfo(CTypeInfo::Type::kV8Value); + int size = 0; + for (int i = 0; i < len; i++) { + uint8_t ptype = Local::Cast( + params->Get(context, i).ToLocalChecked())->Value(); + cargs[i + 1] = *CTypeFromV8(ptype); + ffiargs[i] = FFITypeFromV8(ptype); + ffn->params[i] = (FastTypes)ptype; + if (ffn->params[i] == lo::FastTypes::u8) { + size += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + size += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + size += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + size += 4; + continue; + } + size += 8; + } + ffn->start = calloc(1, size); + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::u8) { + ffn->values[i] = start; + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + ffn->values[i] = start; + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + ffn->values[i] = start; + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + ffn->values[i] = start; + start += 4; + continue; + } + ffn->values[i] = start; + start += 8; + } + if (fastlen - 1 > len) { + cargs[fastlen - 1] = *CTypeFromV8(FastTypes::u32array); + } + ffi_status status = ffi_prep_cif(cif, FFI_DEFAULT_ABI, len, ffirc, ffiargs); + if (status != FFI_OK) { + // TODO: fix this api + return; + } + CFunctionInfo* info = new CFunctionInfo(*rc, fastlen, cargs); + CFunction* fastCFunc = new CFunction(wrapped, info); + ffn->cfunc = fastCFunc; + Local funcTemplate = FunctionTemplate::New( + isolate, + SlowCallback, + data, + Local(), + 0, + ConstructorBehavior::kThrow, + SideEffectType::kHasNoSideEffect, + fastCFunc + ); + // TODO: figure out how to handle side-effect flag: + // https://github.com/nodejs/node/pull/46619 + Local fun = + funcTemplate->GetFunction(context).ToLocalChecked(); + args.GetReturnValue().Set(fun); +} + +` + +const libs = ['ffi'] +const includes = ['ffi.h'] +const name = 'libffi' +const obj = [] + +export { api, includes, name, preamble, libs, obj } diff --git a/lib/libffi/libffi.cc b/lib/libffi/libffi.cc new file mode 100644 index 0000000..86f16f1 --- /dev/null +++ b/lib/libffi/libffi.cc @@ -0,0 +1,559 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace libffi { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + +typedef void (*callback)(); + +struct foreignFunction { + void* fast; + void* ffi; + void** values; + void* start; + v8::CFunction* cfunc; + ffi_cif* cif; + FastTypes rc; + FastTypes* params; + int nargs; +}; + +inline uint8_t needsunwrap (lo::FastTypes t) { + if (t == lo::FastTypes::buffer) return 1; + if (t == lo::FastTypes::u32array) return 1; + if (t == lo::FastTypes::pointer) return 1; + if (t == lo::FastTypes::u64) return 1; + if (t == lo::FastTypes::i64) return 1; + return 0; +} + +v8::CTypeInfo* CTypeFromV8 (uint8_t v8Type) { + if (v8Type == lo::FastTypes::boolean) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kBool); + if (v8Type == lo::FastTypes::i8) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::i16) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::i32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); + if (v8Type == lo::FastTypes::u8) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::u16) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::u32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); + if (v8Type == lo::FastTypes::f32) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kFloat32); + if (v8Type == lo::FastTypes::f64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kFloat64); + if (v8Type == lo::FastTypes::i64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt64); + if (v8Type == lo::FastTypes::u64) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::iSize) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kInt64); + if (v8Type == lo::FastTypes::uSize) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::pointer) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::function) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint64); + if (v8Type == lo::FastTypes::string) + return new v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString); + if (v8Type == lo::FastTypes::buffer) { + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, + v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone); + } + if (v8Type == lo::FastTypes::u32array) { + return new v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, + v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone); + } + return new v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +} + +ffi_type* FFITypeFromV8 (uint8_t v8Type) { + if (v8Type == lo::FastTypes::boolean) + return &ffi_type_uint8; + if (v8Type == lo::FastTypes::i8) + return &ffi_type_sint8; + if (v8Type == lo::FastTypes::i16) + return &ffi_type_sint16; + if (v8Type == lo::FastTypes::i32) + return &ffi_type_sint32; + if (v8Type == lo::FastTypes::u8) + return &ffi_type_uint8; + if (v8Type == lo::FastTypes::u16) + return &ffi_type_uint16; + if (v8Type == lo::FastTypes::u32) + return &ffi_type_uint32; + if (v8Type == lo::FastTypes::f32) + return &ffi_type_float; + if (v8Type == lo::FastTypes::f64) + return &ffi_type_double; + if (v8Type == lo::FastTypes::i64) + return &ffi_type_sint64; + if (v8Type == lo::FastTypes::u64) + return &ffi_type_uint64; + if (v8Type == lo::FastTypes::iSize) + return &ffi_type_sint64; + if (v8Type == lo::FastTypes::uSize) + return &ffi_type_uint64; + if (v8Type == lo::FastTypes::pointer) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::function) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::string) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::buffer) + return &ffi_type_pointer; + if (v8Type == lo::FastTypes::u32array) + return &ffi_type_pointer; + return &ffi_type_void; +} + +// 10 ns if this fn does nothing +// 46 ns for int fn (int) +// 4ns for looping through and allocating args +// 4ns return +// 30 ns for the ffi call + +void SlowCallback(const FunctionCallbackInfo &args) { + Isolate* isolate = args.GetIsolate(); + foreignFunction* ffn = (foreignFunction*)args.Data() + .As()->GetAlignedPointerFromInternalField(1); + ffi_cif* cif = ffn->cif; + ffi_arg result; + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::i32) { + *(int32_t*)start = (int32_t)Local::Cast(args[i])->Value(); + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + *(uint32_t*)start = (uint32_t)Local::Cast(args[i])->Value(); + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + *(uint16_t*)start = (uint16_t)Local::Cast(args[i])->Value(); + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::u8) { + *(uint8_t*)start = (uint8_t)Local::Cast(args[i])->Value(); + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u64) { + *(uint64_t*)start = (uint64_t)Local::Cast(args[i])->Value(); + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::pointer) { + *(uint64_t*)start = (uint64_t)Local::Cast(args[i])->Value(); + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::buffer) { + Local u8 = args[i].As(); + uint8_t* ptr = (uint8_t*)u8->Buffer()->Data() + u8->ByteOffset(); + *(uint64_t*)start = (uint64_t)ptr; + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32array) { + Local u32 = args[i].As(); + uint8_t* ptr = (uint8_t*)u32->Buffer()->Data() + u32->ByteOffset(); + *(uint64_t*)start = (uint64_t)ptr; + start += 8; + continue; + } + if (ffn->params[i] == lo::FastTypes::string) { + String::Utf8Value arg0(isolate, args[i]); + *(uint64_t*)start = (uint64_t)strdup(*arg0); + start += 8; + continue; + } + } + ffi_call(cif, FFI_FN(ffn->ffi), &result, ffn->values); + if (args.Length() > ffn->nargs) { + uint64_t* res = (uint64_t*)args[ffn->nargs].As()->Buffer()->Data(); + *res = (uint64_t)result; + return; + } + if (ffn->rc == lo::FastTypes::i32) { + args.GetReturnValue().Set(Integer::New(isolate, (int32_t)result)); + return; + } + if (ffn->rc == lo::FastTypes::u32) { + args.GetReturnValue().Set(Integer::New(isolate, (uint32_t)result)); + return; + } +} + +void bindSlowApiSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + void* fn = reinterpret_cast(Local::Cast(args[0])->Value()); + void* wrapped = reinterpret_cast(Local::Cast(args[1])->Value()); + int rtype = Local::Cast(args[2])->Value(); + Local params = args[3].As(); + Local tpl = ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(2); + Local data = tpl->NewInstance(context).ToLocalChecked(); + ffi_cif* cif = (ffi_cif*)calloc(1, sizeof(ffi_cif)); + foreignFunction* ffn = new foreignFunction(); + ffn->fast = wrapped; + ffn->ffi = fn; + ffn->cif = cif; + data->SetAlignedPointerInInternalField(1, ffn); + int len = params->Length(); + ffi_type* ffirc = FFITypeFromV8(rtype); + ffn->rc = (FastTypes)rtype; + ffi_type** ffiargs = (ffi_type**)calloc(len, sizeof(ffi_type*)); + ffn->params = (FastTypes*)calloc(len, sizeof(FastTypes)); + ffn->nargs = len; + ffn->values = (void**)calloc(ffn->nargs, sizeof(void*)); + int fastlen = len + 1 + needsunwrap((FastTypes)rtype); + CTypeInfo* cargs = (CTypeInfo*)calloc(fastlen, sizeof(CTypeInfo)); + cargs[0] = CTypeInfo(CTypeInfo::Type::kV8Value); + int size = 0; + for (int i = 0; i < len; i++) { + uint8_t ptype = Local::Cast( + params->Get(context, i).ToLocalChecked())->Value(); + cargs[i + 1] = *CTypeFromV8(ptype); + ffiargs[i] = FFITypeFromV8(ptype); + ffn->params[i] = (FastTypes)ptype; + if (ffn->params[i] == lo::FastTypes::u8) { + size += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + size += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + size += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + size += 4; + continue; + } + size += 8; + } + ffn->start = calloc(1, size); + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::u8) { + ffn->values[i] = start; + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + ffn->values[i] = start; + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + ffn->values[i] = start; + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + ffn->values[i] = start; + start += 4; + continue; + } + ffn->values[i] = start; + start += 8; + } + if (fastlen - 1 > len) { + cargs[fastlen - 1] = *CTypeFromV8(FastTypes::u32array); + } + ffi_status status = ffi_prep_cif(cif, FFI_DEFAULT_ABI, len, ffirc, ffiargs); + if (status != FFI_OK) { + // TODO: fix this api + return; + } + Local funcTemplate = FunctionTemplate::New( + isolate, + SlowCallback, + data, + Local(), + 0, + ConstructorBehavior::kThrow, + SideEffectType::kHasNoSideEffect, + NULL + ); + Local fun = + funcTemplate->GetFunction(context).ToLocalChecked(); + args.GetReturnValue().Set(fun); +} + +void bindFastApiSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + void* fn = reinterpret_cast(Local::Cast(args[0])->Value()); + void* wrapped = reinterpret_cast(Local::Cast(args[1])->Value()); + int rtype = Local::Cast(args[2])->Value(); + Local params = args[3].As(); + + Local tpl = ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(2); + Local data = tpl->NewInstance(context).ToLocalChecked(); + ffi_cif* cif = (ffi_cif*)calloc(1, sizeof(ffi_cif)); + foreignFunction* ffn = new foreignFunction(); + ffn->fast = wrapped; + ffn->ffi = fn; + ffn->cif = cif; + data->SetAlignedPointerInInternalField(1, ffn); + int len = params->Length(); + ffi_type* ffirc = FFITypeFromV8(rtype); + CTypeInfo* rc; + if (needsunwrap((FastTypes)rtype)) { + rc = CTypeFromV8(FastTypes::empty); + } else { + rc = CTypeFromV8((FastTypes)rtype); + } + ffn->rc = (FastTypes)rtype; + ffi_type** ffiargs = (ffi_type**)calloc(len, sizeof(ffi_type*)); + ffn->params = (FastTypes*)calloc(len, sizeof(FastTypes)); + ffn->nargs = len; + ffn->values = (void**)calloc(ffn->nargs, sizeof(void*)); + int fastlen = len + 1 + needsunwrap((FastTypes)rtype); + CTypeInfo* cargs = (CTypeInfo*)calloc(fastlen, sizeof(CTypeInfo)); + cargs[0] = CTypeInfo(CTypeInfo::Type::kV8Value); + int size = 0; + for (int i = 0; i < len; i++) { + uint8_t ptype = Local::Cast( + params->Get(context, i).ToLocalChecked())->Value(); + cargs[i + 1] = *CTypeFromV8(ptype); + ffiargs[i] = FFITypeFromV8(ptype); + ffn->params[i] = (FastTypes)ptype; + if (ffn->params[i] == lo::FastTypes::u8) { + size += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + size += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + size += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + size += 4; + continue; + } + size += 8; + } + ffn->start = calloc(1, size); + uint8_t* start = (uint8_t*)ffn->start; + for (int i = 0; i < ffn->nargs; i++) { + if (ffn->params[i] == lo::FastTypes::u8) { + ffn->values[i] = start; + start += 1; + continue; + } + if (ffn->params[i] == lo::FastTypes::u16) { + ffn->values[i] = start; + start += 2; + continue; + } + if (ffn->params[i] == lo::FastTypes::i32) { + ffn->values[i] = start; + start += 4; + continue; + } + if (ffn->params[i] == lo::FastTypes::u32) { + ffn->values[i] = start; + start += 4; + continue; + } + ffn->values[i] = start; + start += 8; + } + if (fastlen - 1 > len) { + cargs[fastlen - 1] = *CTypeFromV8(FastTypes::u32array); + } + ffi_status status = ffi_prep_cif(cif, FFI_DEFAULT_ABI, len, ffirc, ffiargs); + if (status != FFI_OK) { + // TODO: fix this api + return; + } + CFunctionInfo* info = new CFunctionInfo(*rc, fastlen, cargs); + CFunction* fastCFunc = new CFunction(wrapped, info); + ffn->cfunc = fastCFunc; + Local funcTemplate = FunctionTemplate::New( + isolate, + SlowCallback, + data, + Local(), + 0, + ConstructorBehavior::kThrow, + SideEffectType::kHasNoSideEffect, + fastCFunc + ); + // TODO: figure out how to handle side-effect flag: + // https://github.com/nodejs/node/pull/46619 + Local fun = + funcTemplate->GetFunction(context).ToLocalChecked(); + args.GetReturnValue().Set(fun); +} + + + +int32_t ffi_prep_cifFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, uint32_t p2, struct FastApiTypedArray* const p3, struct FastApiTypedArray* const p4); +v8::CTypeInfo cargsffi_prep_cif[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcffi_prep_cif = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoffi_prep_cif = v8::CFunctionInfo(rcffi_prep_cif, 6, cargsffi_prep_cif); +v8::CFunction pFffi_prep_cif = v8::CFunction((const void*)&ffi_prep_cifFast, &infoffi_prep_cif); + +void ffi_callFast(void* p, struct FastApiTypedArray* const p0, void* p1, struct FastApiTypedArray* const p2, struct FastApiTypedArray* const p3); +v8::CTypeInfo cargsffi_call[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcffi_call = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoffi_call = v8::CFunctionInfo(rcffi_call, 5, cargsffi_call); +v8::CFunction pFffi_call = v8::CFunction((const void*)&ffi_callFast, &infoffi_call); + + + +void ffi_prep_cifSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + ffi_cif* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + uint32_t v2 = Local::Cast(args[2])->Value(); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + ffi_type* v3 = reinterpret_cast(ptr3); + Local u84 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u84->Buffer()->Data() + u84->ByteOffset(); + ffi_type** v4 = reinterpret_cast(ptr4); + int32_t rc = ffi_prep_cif(v0, (ffi_abi)v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t ffi_prep_cifFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, uint32_t p2, struct FastApiTypedArray* const p3, struct FastApiTypedArray* const p4) { + ffi_cif* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + uint32_t v2 = p2; + ffi_type* v3 = reinterpret_cast(p3->data); + ffi_type** v4 = reinterpret_cast(p4->data); + return ffi_prep_cif(v0, (ffi_abi)v1, v2, v3, v4); +} +void ffi_callSlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + ffi_cif* v0 = reinterpret_cast(ptr0); + callback v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + Local u322 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u322->Buffer()->Data() + u322->ByteOffset(); + void* v2 = reinterpret_cast(ptr2); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + void** v3 = reinterpret_cast(ptr3); + ffi_call(v0, v1, v2, v3); +} + +void ffi_callFast(void* p, struct FastApiTypedArray* const p0, void* p1, struct FastApiTypedArray* const p2, struct FastApiTypedArray* const p3) { + ffi_cif* v0 = reinterpret_cast(p0->data); + callback v1 = reinterpret_cast(p1); + void* v2 = reinterpret_cast(p2->data); + void** v3 = reinterpret_cast(p3->data); + ffi_call(v0, v1, v2, v3); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "ffi_prep_cif", &pFffi_prep_cif, ffi_prep_cifSlow); + SET_FAST_METHOD(isolate, module, "ffi_call", &pFffi_call, ffi_callSlow); + SET_METHOD(isolate, module, "bindFastApi", bindFastApiSlow); + SET_METHOD(isolate, module, "bindSlowApi", bindSlowApiSlow); + + + + SET_MODULE(isolate, target, "libffi", module); +} +} // namespace libffi +} // namespace lo + +extern "C" { + void* _register_libffi() { + return (void*)lo::libffi::Init; + } +} diff --git a/lib/libssl.js b/lib/libssl.js new file mode 100644 index 0000000..4069abb --- /dev/null +++ b/lib/libssl.js @@ -0,0 +1,3 @@ +const { libssl } = lo.load('libssl') + +export { libssl } diff --git a/lib/libssl/Makefile b/lib/libssl/Makefile new file mode 100644 index 0000000..224f99a --- /dev/null +++ b/lib/libssl/Makefile @@ -0,0 +1,38 @@ +# [do not edit,] +# This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile + +C=gcc +CC=g++ +BINDING=libssl + +.PHONY: help clean + + +$(BINDING).a: ## compile static library and dependencies + $(CC) -fPIC $(CCARGS) $(OPT) -I$(LO_HOME) -I$(LO_HOME)/v8 -I$(LO_HOME)/v8/include $(WARN) -o $(BINDING).o $(BINDING).cc + ar crsT $(BINDING).a $(BINDING).o + +$(BINDING).so: $(BINDING).a ## compile shared library +ifeq ($(os),mac) + $(CC) -fPIC $(LARGS) $(OPT) -dynamiclib $(WARN) -o $(BINDING).dylib $(BINDING).o -lssl -lcrypto $(LO_HOME)/v8/libv8_monolith.a $(LO_HOME)/lo.o +else + $(CC) $(LARGS) $(OPT) -shared $(WARN) -o $(BINDING).so $(BINDING).o -lssl -lcrypto +endif + +clean: ## tidy up +ifeq ($(os),win) + @del /q $(BINDING).dll > NUL 2>&1 + @del /q $(BINDING).obj > NUL 2>&1 + @del /q $(BINDING).lib > NUL 2>&1 +else + rm -f $(BINDING).so + rm -f $(BINDING).a + rm -f $(BINDING).o +endif + +all: ## make all + make clean + make $(BINDING).so + +.DEFAULT_GOAL := help + diff --git a/lib/libssl/api.js b/lib/libssl/api.js new file mode 100644 index 0000000..cb47953 --- /dev/null +++ b/lib/libssl/api.js @@ -0,0 +1,489 @@ +const api = { + OpenSSL_version: { + parameters: ['i32'], + result: 'pointer', + rpointer: 'const char*' + }, + EVP_PKEY_CTX_new_id: { + parameters: ['i32', 'pointer'], + pointers: [,'ENGINE*'], + result: 'pointer', + rpointer: 'EVP_PKEY_CTX*' + }, + EVP_PKEY_keygen_init: { + parameters: ['pointer'], pointers: ['EVP_PKEY_CTX*'], + result: 'i32' + }, + EVP_PKEY_keygen: { + parameters: ['pointer', 'pointer'], + pointers: ['EVP_PKEY_CTX*', 'EVP_PKEY**'], + result: 'i32' + }, + EVP_PKEY_new: { + parameters: [], + result: 'pointer', + rpointer: 'EVP_PKEY*' + }, + EVP_PKEY_id: { + parameters: ['pointer'], + pointers: ['EVP_PKEY*'], + result: 'i32' + }, + EVP_PKEY_type: { + parameters: ['i32'], + result: 'i32' + }, + EVP_PKEY_free: { + parameters: ['pointer'], pointers: ['EVP_PKEY*'], result: 'void' + }, + EVP_PKEY_CTX_free: { + parameters: ['pointer'], pointers: ['EVP_PKEY_CTX*'], result: 'void' + }, + EVP_MD_CTX_new: { + parameters: [], + result: 'pointer', + rpointer: 'EVP_MD_CTX*' + }, + EVP_MD_CTX_reset: { + parameters: ['pointer'], + pointers: ['EVP_MD_CTX*'], + result: 'i32' + }, + EVP_MD_CTX_free: { + parameters: ['pointer'], + pointers: ['EVP_MD_CTX*'], + result: 'void' + }, + EVP_get_digestbynid: { + parameters: ['i32'], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_get_digestbyname: { + parameters: ['string'], + pointers: ['const char*'], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_Digest: { + parameters: ['buffer', 'u32', 'buffer', 'buffer', 'pointer', 'pointer'], + result: 'i32', + pointers: [,, 'unsigned char*', 'unsigned int*', 'const EVP_MD*', 'ENGINE*'] + }, + EVP_DigestInit_ex: { + parameters: ['pointer', 'pointer', 'pointer'], + pointers: ['EVP_MD_CTX*', 'EVP_MD*', 'ENGINE*'], + result: 'i32' + }, + EVP_DigestUpdate: { + parameters: ['pointer', 'pointer', 'u32'], + pointers: ['EVP_MD_CTX*'], + result: 'i32', + name: 'EVP_DigestUpdate' + }, + EVP_DigestUpdateBuffer: { + parameters: ['pointer', 'buffer', 'u32'], + pointers: ['EVP_MD_CTX*'], + result: 'i32', + name: 'EVP_DigestUpdate' + }, + EVP_DigestUpdateString: { + parameters: ['pointer', 'string', 'u32'], + pointers: ['EVP_MD_CTX*'], + result: 'i32', + name: 'EVP_DigestUpdate' + }, + EVP_DigestVerifyFinal: { + parameters: ['pointer', 'pointer', 'u32'], + pointers: ['EVP_MD_CTX*', 'const unsigned char*'], + result: 'i32' + }, + EVP_DigestSignFinal: { + parameters: ['pointer', 'pointer', 'pointer'], + pointers: ['EVP_MD_CTX*', 'unsigned char*', 'size_t*'], + result: 'i32' + }, + EVP_DigestFinal: { + parameters: ['pointer', 'buffer', 'u32array'], + pointers: ['EVP_MD_CTX*', 'unsigned char*', 'unsigned int*'], + result: 'i32' + }, + EVP_sha1: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_sha224: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_sha256: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_sha384: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_sha512: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_sha512_256: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + }, + EVP_DigestVerifyInit: { + parameters: ['pointer', 'pointer', 'pointer', 'pointer', 'pointer'], + pointers: ['EVP_MD_CTX*', 'EVP_PKEY_CTX**', 'EVP_MD*', 'ENGINE*', 'EVP_PKEY*'], + result: 'i32' + }, + EVP_DigestSignInit: { + parameters: ['pointer', 'pointer', 'pointer', 'pointer', 'pointer'], + pointers: ['EVP_MD_CTX*', 'EVP_PKEY_CTX**', 'EVP_MD*', 'ENGINE*', 'EVP_PKEY*'], + result: 'i32' + }, + BIO_s_mem: { + parameters: [], + result: 'pointer', + rpointer: 'const BIO_METHOD*' + }, + BIO_new: { + parameters: ['pointer'], + pointers: ['BIO_METHOD*'], + rpointer: 'BIO *', + result: 'pointer' + }, + BIO_new_mem_buf: { + parameters: ['pointer', 'i32'], + result: 'pointer', + rpointer: 'BIO*', + pointers: ['const void*'] + }, + BIO_ctrl: { + parameters: ['pointer', 'i32', 'u64', 'pointer'], + pointers: ['BIO*'], + result: 'i32' + }, + BIO_read: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['BIO*'], + result: 'i32' + }, + PEM_write_bio_PrivateKey: { + parameters: [ + 'pointer', 'pointer', 'pointer', 'pointer', 'i32', 'pointer', 'pointer' + ], + pointers: ['BIO*', 'EVP_PKEY*', 'EVP_CIPHER*', 'unsigned char*', , 'pem_password_cb*'], + result: 'i32' + }, + PEM_write_bio_PUBKEY: { + parameters: ['pointer', 'pointer'], + pointers: ['BIO*', 'EVP_PKEY*'], + result: 'i32' + }, + PEM_write_bio_X509_REQ: { + parameters: ['pointer', 'pointer'], + pointers: ['BIO*', 'X509_REQ*'], + result: 'i32' + }, + PEM_read_bio_X509: { + parameters: ['pointer', 'pointer', 'pointer', 'pointer'], + result: 'pointer', + rpointer: 'X509*', + pointers: ['BIO*', 'X509**', 'pem_password_cb*'] + }, + X509_get_subject_name: { + parameters: ['pointer'], + pointers: ['const X509*'], + result: 'pointer', + rpointer: 'X509_NAME*' + }, + X509_NAME_oneline: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['const X509_NAME*', 'char*'], + result: 'pointer', + rpointer: 'char*' + }, + X509_get_issuer_name: { + parameters: ['pointer'], + pointers: ['const X509*'], + result: 'pointer', + rpointer: 'X509_NAME*' + }, + X509_free: { + parameters: ['pointer'], + pointers: ['X509*'], + result: 'void' + }, + X509_get_pubkey: { + parameters: ['pointer'], + pointers: ['X509*'], + result: 'pointer', + rpointer: 'EVP_PKEY*' + }, + X509_REQ_new: { + parameters: [], + result: 'pointer', + rpointer: 'X509_REQ*' + }, + X509_REQ_set_version: { + parameters: ['pointer', 'u32'], + pointers: ['X509_REQ*'], + result: 'i32' + }, + X509_REQ_get_subject_name: { + parameters: ['pointer'], + pointers: ['X509_REQ*'], + result: 'pointer', + rpointer: 'X509_NAME*' + }, + X509_NAME_add_entry_by_txt: { + parameters: ['pointer', 'pointer', 'i32', 'pointer', 'i32', 'i32', 'i32'], + pointers: ['X509_NAME*', 'const char*', , 'const unsigned char*'], + result: 'i32' + }, + X509_REQ_set_pubkey: { + parameters: ['pointer', 'pointer'], + pointers: ['X509_REQ*', 'EVP_PKEY*'], + result: 'i32' + }, + X509_REQ_sign: { + parameters: ['pointer', 'pointer', 'pointer'], + pointers: ['X509_REQ*', 'EVP_PKEY*', 'const EVP_MD*'], + result: 'i32' + }, + OBJ_txt2nid: { + parameters: ['pointer'], + pointers: ['const char*'], + result: 'i32' + }, + SSL_get_error: { + parameters: ['pointer', 'i32'], + pointers: ['const SSL*'], + result: 'i32' + }, + OPENSSL_init_ssl: { + parameters: ['u64', 'pointer'], + pointers: [, 'const OPENSSL_INIT_SETTINGS *'], + result: 'i32' + }, + SSL_is_init_finished: { + parameters: ['pointer'], + pointers: ['const SSL*'], + result: 'i32' + }, + SSL_shutdown: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_get_servername: { + parameters: ['pointer', 'i32'], + pointers: ['const SSL*'], + rpointer: 'const char*', + result: 'pointer' + }, + SSL_get_servername_type: { + parameters: ['pointer'], + pointers: ['const SSL*'], + result: 'i32' + }, + SSL_free: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'void' + }, + SSL_read: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_write: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_get_version: { + parameters: ['pointer'], + pointers: ['const SSL*'], + result: 'pointer', + rpointer: 'const char*' + }, + SSL_CIPHER_get_name: { + parameters: ['pointer'], + pointers: ['const SSL_CIPHER*'], + result: 'pointer', + rpointer: 'const char*' + }, + SSL_get_current_cipher: { + parameters: ['pointer'], + pointers: ['const SSL*'], + result: 'pointer', + rpointer: 'const SSL_CIPHER*' + }, + SSL_get_peer_certificate: { + parameters: ['pointer'], + pointers: ['const SSL*'], + result: 'pointer', + rpointer: 'X509*' + }, + SSL_set_SSL_CTX: { + parameters: ['pointer', 'pointer'], + result: 'pointer', + rpointer: 'SSL_CTX*', + pointers: ['SSL*', 'SSL_CTX*'] + }, + SSL_new: { + parameters: ['pointer'], + result: 'pointer', + rpointer: 'SSL*', + pointers: ['SSL_CTX*'] + }, + SSL_set_fd: { + parameters: ['pointer', 'i32'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_set_bio: { + parameters: ['pointer', 'pointer', 'pointer'], + pointers: ['SSL*', 'BIO*', 'BIO*'], + result: 'void' + }, + SSL_set_accept_state: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'void' + }, + SSL_connect: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_accept: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_set_connect_state: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'void' + }, + SSL_do_handshake: { + parameters: ['pointer'], + pointers: ['SSL*'], + result: 'i32' + }, + SSL_CTX_new: { + parameters: ['pointer'], + result: 'pointer', + rpointer: 'SSL_CTX*', + pointers: ['SSL_METHOD*'] + }, + SSL_CTX_use_certificate_file: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['SSL_CTX*', 'const char*'], + result: 'i32' + }, + SSL_CTX_use_certificate_chain_file: { + parameters: ['pointer', 'pointer'], + pointers: ['SSL_CTX*', 'const char*'], + result: 'i32' + }, + SSL_CTX_use_PrivateKey_file: { + parameters: ['pointer', 'pointer', 'i32'], + pointers: ['SSL_CTX*', 'const char*'], + result: 'i32' + }, + SSL_CTX_set_options: { + parameters: ['pointer', 'u64'], + pointers: ['SSL_CTX*'], + result: 'u64' + }, + SSL_CTX_set_cipher_list: { + parameters: ['pointer', 'string'], + pointers: ['SSL_CTX*', 'const char*'], + result: 'i32' + }, + SSL_set_cipher_list: { + parameters: ['pointer', 'string'], + pointers: ['SSL*', 'const char*'], + result: 'i32' + }, + SSL_CTX_free: { + parameters: ['pointer'], + pointers: ['SSL_CTX*'], + result: 'void' + }, + TLS_server_method: { + parameters: [], + result: 'pointer', + rpointer: 'const SSL_METHOD*' + }, + TLS_client_method: { + parameters: [], + result: 'pointer', + rpointer: 'const SSL_METHOD*' + }, + SSL_CTX_set_ciphersuites: { + parameters: ['pointer', 'string'], + pointers: ['SSL_CTX*', 'const char*'], + result: 'i32' + }, + SSL_ctrl: { + parameters: ['pointer', 'i32', 'u64', 'pointer'], + pointers: ['SSL*'], + result: 'u64' + }, + RSA_pkey_ctx_ctrl: { + parameters: ['pointer', 'i32', 'i32', 'i32', 'pointer'], + pointers: ['EVP_PKEY_CTX*'], + result: 'i32' + }, + EVP_sha512_224: { + parameters: [], + result: 'pointer', + rpointer: 'const EVP_MD*' + } +} + +const constants = { + SSL_OP_ALL: 'u64', + SSL_OP_NO_RENEGOTIATION: 'u64', + SSL_OP_NO_SSLv3: 'u64', + SSL_OP_NO_TLSv1: 'u64', + SSL_OP_NO_TLSv1_1: 'u64', + SSL_OP_NO_DTLSv1: 'u64', + SSL_OP_NO_DTLSv1_2: 'u64', + SSL_OP_NO_TLSv1_2: 'u64', + SSL_OP_NO_SSLv2: 'u64', + SSL_OP_NO_COMPRESSION: 'u64' +} + +const name = 'libssl' + +const includes = [ + 'openssl/opensslv.h', + 'openssl/err.h', + 'openssl/dh.h', + 'openssl/ssl.h', + 'openssl/conf.h', + 'openssl/engine.h', + 'openssl/hmac.h', + 'openssl/evp.h', + 'openssl/rsa.h', + 'openssl/pem.h', + 'atomic' +] + +const libs = ['ssl', 'crypto'] +//const obj = ['libssl_o.a', 'libcrypto.a'] +const obj = [] + +export { api, name, includes, libs, obj, constants } diff --git a/lib/libssl/libssl.cc b/lib/libssl/libssl.cc new file mode 100644 index 0000000..608beff --- /dev/null +++ b/lib/libssl/libssl.cc @@ -0,0 +1,2285 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace lo { +namespace libssl { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void OpenSSL_versionFast(void* p, int32_t p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsOpenSSL_version[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcOpenSSL_version = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoOpenSSL_version = v8::CFunctionInfo(rcOpenSSL_version, 3, cargsOpenSSL_version); +v8::CFunction pFOpenSSL_version = v8::CFunction((const void*)&OpenSSL_versionFast, &infoOpenSSL_version); + +void EVP_PKEY_CTX_new_idFast(void* p, int32_t p0, void* p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_PKEY_CTX_new_id[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_PKEY_CTX_new_id = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_PKEY_CTX_new_id = v8::CFunctionInfo(rcEVP_PKEY_CTX_new_id, 4, cargsEVP_PKEY_CTX_new_id); +v8::CFunction pFEVP_PKEY_CTX_new_id = v8::CFunction((const void*)&EVP_PKEY_CTX_new_idFast, &infoEVP_PKEY_CTX_new_id); + +int32_t EVP_PKEY_keygen_initFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_PKEY_keygen_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_PKEY_keygen_init = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_PKEY_keygen_init = v8::CFunctionInfo(rcEVP_PKEY_keygen_init, 2, cargsEVP_PKEY_keygen_init); +v8::CFunction pFEVP_PKEY_keygen_init = v8::CFunction((const void*)&EVP_PKEY_keygen_initFast, &infoEVP_PKEY_keygen_init); + +int32_t EVP_PKEY_keygenFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargsEVP_PKEY_keygen[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_PKEY_keygen = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_PKEY_keygen = v8::CFunctionInfo(rcEVP_PKEY_keygen, 3, cargsEVP_PKEY_keygen); +v8::CFunction pFEVP_PKEY_keygen = v8::CFunction((const void*)&EVP_PKEY_keygenFast, &infoEVP_PKEY_keygen); + +void EVP_PKEY_newFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_PKEY_new[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_PKEY_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_PKEY_new = v8::CFunctionInfo(rcEVP_PKEY_new, 2, cargsEVP_PKEY_new); +v8::CFunction pFEVP_PKEY_new = v8::CFunction((const void*)&EVP_PKEY_newFast, &infoEVP_PKEY_new); + +int32_t EVP_PKEY_idFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_PKEY_id[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_PKEY_id = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_PKEY_id = v8::CFunctionInfo(rcEVP_PKEY_id, 2, cargsEVP_PKEY_id); +v8::CFunction pFEVP_PKEY_id = v8::CFunction((const void*)&EVP_PKEY_idFast, &infoEVP_PKEY_id); + +int32_t EVP_PKEY_typeFast(void* p, int32_t p0); +v8::CTypeInfo cargsEVP_PKEY_type[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcEVP_PKEY_type = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_PKEY_type = v8::CFunctionInfo(rcEVP_PKEY_type, 2, cargsEVP_PKEY_type); +v8::CFunction pFEVP_PKEY_type = v8::CFunction((const void*)&EVP_PKEY_typeFast, &infoEVP_PKEY_type); + +void EVP_PKEY_freeFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_PKEY_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_PKEY_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_PKEY_free = v8::CFunctionInfo(rcEVP_PKEY_free, 2, cargsEVP_PKEY_free); +v8::CFunction pFEVP_PKEY_free = v8::CFunction((const void*)&EVP_PKEY_freeFast, &infoEVP_PKEY_free); + +void EVP_PKEY_CTX_freeFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_PKEY_CTX_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_PKEY_CTX_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_PKEY_CTX_free = v8::CFunctionInfo(rcEVP_PKEY_CTX_free, 2, cargsEVP_PKEY_CTX_free); +v8::CFunction pFEVP_PKEY_CTX_free = v8::CFunction((const void*)&EVP_PKEY_CTX_freeFast, &infoEVP_PKEY_CTX_free); + +void EVP_MD_CTX_newFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_MD_CTX_new[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_MD_CTX_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_MD_CTX_new = v8::CFunctionInfo(rcEVP_MD_CTX_new, 2, cargsEVP_MD_CTX_new); +v8::CFunction pFEVP_MD_CTX_new = v8::CFunction((const void*)&EVP_MD_CTX_newFast, &infoEVP_MD_CTX_new); + +int32_t EVP_MD_CTX_resetFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_MD_CTX_reset[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_MD_CTX_reset = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_MD_CTX_reset = v8::CFunctionInfo(rcEVP_MD_CTX_reset, 2, cargsEVP_MD_CTX_reset); +v8::CFunction pFEVP_MD_CTX_reset = v8::CFunction((const void*)&EVP_MD_CTX_resetFast, &infoEVP_MD_CTX_reset); + +void EVP_MD_CTX_freeFast(void* p, void* p0); +v8::CTypeInfo cargsEVP_MD_CTX_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_MD_CTX_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_MD_CTX_free = v8::CFunctionInfo(rcEVP_MD_CTX_free, 2, cargsEVP_MD_CTX_free); +v8::CFunction pFEVP_MD_CTX_free = v8::CFunction((const void*)&EVP_MD_CTX_freeFast, &infoEVP_MD_CTX_free); + +void EVP_get_digestbynidFast(void* p, int32_t p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_get_digestbynid[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_get_digestbynid = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_get_digestbynid = v8::CFunctionInfo(rcEVP_get_digestbynid, 3, cargsEVP_get_digestbynid); +v8::CFunction pFEVP_get_digestbynid = v8::CFunction((const void*)&EVP_get_digestbynidFast, &infoEVP_get_digestbynid); + +void EVP_get_digestbynameFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_get_digestbyname[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_get_digestbyname = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_get_digestbyname = v8::CFunctionInfo(rcEVP_get_digestbyname, 3, cargsEVP_get_digestbyname); +v8::CFunction pFEVP_get_digestbyname = v8::CFunction((const void*)&EVP_get_digestbynameFast, &infoEVP_get_digestbyname); + +int32_t EVP_DigestFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, struct FastApiTypedArray* const p3, void* p4, void* p5); +v8::CTypeInfo cargsEVP_Digest[7] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_Digest = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_Digest = v8::CFunctionInfo(rcEVP_Digest, 7, cargsEVP_Digest); +v8::CFunction pFEVP_Digest = v8::CFunction((const void*)&EVP_DigestFast, &infoEVP_Digest); + +int32_t EVP_DigestInit_exFast(void* p, void* p0, void* p1, void* p2); +v8::CTypeInfo cargsEVP_DigestInit_ex[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_DigestInit_ex = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestInit_ex = v8::CFunctionInfo(rcEVP_DigestInit_ex, 4, cargsEVP_DigestInit_ex); +v8::CFunction pFEVP_DigestInit_ex = v8::CFunction((const void*)&EVP_DigestInit_exFast, &infoEVP_DigestInit_ex); + +int32_t EVP_DigestUpdateFast(void* p, void* p0, void* p1, uint32_t p2); +v8::CTypeInfo cargsEVP_DigestUpdate[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcEVP_DigestUpdate = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestUpdate = v8::CFunctionInfo(rcEVP_DigestUpdate, 4, cargsEVP_DigestUpdate); +v8::CFunction pFEVP_DigestUpdate = v8::CFunction((const void*)&EVP_DigestUpdateFast, &infoEVP_DigestUpdate); + +int32_t EVP_DigestUpdateBufferFast(void* p, void* p0, struct FastApiTypedArray* const p1, uint32_t p2); +v8::CTypeInfo cargsEVP_DigestUpdateBuffer[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcEVP_DigestUpdateBuffer = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestUpdateBuffer = v8::CFunctionInfo(rcEVP_DigestUpdateBuffer, 4, cargsEVP_DigestUpdateBuffer); +v8::CFunction pFEVP_DigestUpdateBuffer = v8::CFunction((const void*)&EVP_DigestUpdateBufferFast, &infoEVP_DigestUpdateBuffer); + +int32_t EVP_DigestUpdateStringFast(void* p, void* p0, struct FastOneByteString* const p1, uint32_t p2); +v8::CTypeInfo cargsEVP_DigestUpdateString[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcEVP_DigestUpdateString = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestUpdateString = v8::CFunctionInfo(rcEVP_DigestUpdateString, 4, cargsEVP_DigestUpdateString); +v8::CFunction pFEVP_DigestUpdateString = v8::CFunction((const void*)&EVP_DigestUpdateStringFast, &infoEVP_DigestUpdateString); + +int32_t EVP_DigestVerifyFinalFast(void* p, void* p0, void* p1, uint32_t p2); +v8::CTypeInfo cargsEVP_DigestVerifyFinal[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcEVP_DigestVerifyFinal = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestVerifyFinal = v8::CFunctionInfo(rcEVP_DigestVerifyFinal, 4, cargsEVP_DigestVerifyFinal); +v8::CFunction pFEVP_DigestVerifyFinal = v8::CFunction((const void*)&EVP_DigestVerifyFinalFast, &infoEVP_DigestVerifyFinal); + +int32_t EVP_DigestSignFinalFast(void* p, void* p0, void* p1, void* p2); +v8::CTypeInfo cargsEVP_DigestSignFinal[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_DigestSignFinal = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestSignFinal = v8::CFunctionInfo(rcEVP_DigestSignFinal, 4, cargsEVP_DigestSignFinal); +v8::CFunction pFEVP_DigestSignFinal = v8::CFunction((const void*)&EVP_DigestSignFinalFast, &infoEVP_DigestSignFinal); + +int32_t EVP_DigestFinalFast(void* p, void* p0, struct FastApiTypedArray* const p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargsEVP_DigestFinal[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcEVP_DigestFinal = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestFinal = v8::CFunctionInfo(rcEVP_DigestFinal, 4, cargsEVP_DigestFinal); +v8::CFunction pFEVP_DigestFinal = v8::CFunction((const void*)&EVP_DigestFinalFast, &infoEVP_DigestFinal); + +void EVP_sha1Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha1[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha1 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha1 = v8::CFunctionInfo(rcEVP_sha1, 2, cargsEVP_sha1); +v8::CFunction pFEVP_sha1 = v8::CFunction((const void*)&EVP_sha1Fast, &infoEVP_sha1); + +void EVP_sha224Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha224[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha224 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha224 = v8::CFunctionInfo(rcEVP_sha224, 2, cargsEVP_sha224); +v8::CFunction pFEVP_sha224 = v8::CFunction((const void*)&EVP_sha224Fast, &infoEVP_sha224); + +void EVP_sha256Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha256[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha256 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha256 = v8::CFunctionInfo(rcEVP_sha256, 2, cargsEVP_sha256); +v8::CFunction pFEVP_sha256 = v8::CFunction((const void*)&EVP_sha256Fast, &infoEVP_sha256); + +void EVP_sha384Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha384[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha384 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha384 = v8::CFunctionInfo(rcEVP_sha384, 2, cargsEVP_sha384); +v8::CFunction pFEVP_sha384 = v8::CFunction((const void*)&EVP_sha384Fast, &infoEVP_sha384); + +void EVP_sha512Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha512[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha512 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha512 = v8::CFunctionInfo(rcEVP_sha512, 2, cargsEVP_sha512); +v8::CFunction pFEVP_sha512 = v8::CFunction((const void*)&EVP_sha512Fast, &infoEVP_sha512); + +void EVP_sha512_256Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha512_256[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha512_256 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha512_256 = v8::CFunctionInfo(rcEVP_sha512_256, 2, cargsEVP_sha512_256); +v8::CFunction pFEVP_sha512_256 = v8::CFunction((const void*)&EVP_sha512_256Fast, &infoEVP_sha512_256); + +int32_t EVP_DigestVerifyInitFast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4); +v8::CTypeInfo cargsEVP_DigestVerifyInit[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_DigestVerifyInit = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestVerifyInit = v8::CFunctionInfo(rcEVP_DigestVerifyInit, 6, cargsEVP_DigestVerifyInit); +v8::CFunction pFEVP_DigestVerifyInit = v8::CFunction((const void*)&EVP_DigestVerifyInitFast, &infoEVP_DigestVerifyInit); + +int32_t EVP_DigestSignInitFast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4); +v8::CTypeInfo cargsEVP_DigestSignInit[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcEVP_DigestSignInit = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoEVP_DigestSignInit = v8::CFunctionInfo(rcEVP_DigestSignInit, 6, cargsEVP_DigestSignInit); +v8::CFunction pFEVP_DigestSignInit = v8::CFunction((const void*)&EVP_DigestSignInitFast, &infoEVP_DigestSignInit); + +void BIO_s_memFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsBIO_s_mem[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcBIO_s_mem = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoBIO_s_mem = v8::CFunctionInfo(rcBIO_s_mem, 2, cargsBIO_s_mem); +v8::CFunction pFBIO_s_mem = v8::CFunction((const void*)&BIO_s_memFast, &infoBIO_s_mem); + +void BIO_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsBIO_new[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcBIO_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoBIO_new = v8::CFunctionInfo(rcBIO_new, 3, cargsBIO_new); +v8::CFunction pFBIO_new = v8::CFunction((const void*)&BIO_newFast, &infoBIO_new); + +void BIO_new_mem_bufFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsBIO_new_mem_buf[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcBIO_new_mem_buf = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoBIO_new_mem_buf = v8::CFunctionInfo(rcBIO_new_mem_buf, 4, cargsBIO_new_mem_buf); +v8::CFunction pFBIO_new_mem_buf = v8::CFunction((const void*)&BIO_new_mem_bufFast, &infoBIO_new_mem_buf); + +int32_t BIO_ctrlFast(void* p, void* p0, int32_t p1, uint64_t p2, void* p3); +v8::CTypeInfo cargsBIO_ctrl[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcBIO_ctrl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoBIO_ctrl = v8::CFunctionInfo(rcBIO_ctrl, 5, cargsBIO_ctrl); +v8::CFunction pFBIO_ctrl = v8::CFunction((const void*)&BIO_ctrlFast, &infoBIO_ctrl); + +int32_t BIO_readFast(void* p, void* p0, void* p1, int32_t p2); +v8::CTypeInfo cargsBIO_read[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcBIO_read = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoBIO_read = v8::CFunctionInfo(rcBIO_read, 4, cargsBIO_read); +v8::CFunction pFBIO_read = v8::CFunction((const void*)&BIO_readFast, &infoBIO_read); + +int32_t PEM_write_bio_PrivateKeyFast(void* p, void* p0, void* p1, void* p2, void* p3, int32_t p4, void* p5, void* p6); +v8::CTypeInfo cargsPEM_write_bio_PrivateKey[8] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcPEM_write_bio_PrivateKey = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoPEM_write_bio_PrivateKey = v8::CFunctionInfo(rcPEM_write_bio_PrivateKey, 8, cargsPEM_write_bio_PrivateKey); +v8::CFunction pFPEM_write_bio_PrivateKey = v8::CFunction((const void*)&PEM_write_bio_PrivateKeyFast, &infoPEM_write_bio_PrivateKey); + +int32_t PEM_write_bio_PUBKEYFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargsPEM_write_bio_PUBKEY[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcPEM_write_bio_PUBKEY = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoPEM_write_bio_PUBKEY = v8::CFunctionInfo(rcPEM_write_bio_PUBKEY, 3, cargsPEM_write_bio_PUBKEY); +v8::CFunction pFPEM_write_bio_PUBKEY = v8::CFunction((const void*)&PEM_write_bio_PUBKEYFast, &infoPEM_write_bio_PUBKEY); + +int32_t PEM_write_bio_X509_REQFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargsPEM_write_bio_X509_REQ[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcPEM_write_bio_X509_REQ = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoPEM_write_bio_X509_REQ = v8::CFunctionInfo(rcPEM_write_bio_X509_REQ, 3, cargsPEM_write_bio_X509_REQ); +v8::CFunction pFPEM_write_bio_X509_REQ = v8::CFunction((const void*)&PEM_write_bio_X509_REQFast, &infoPEM_write_bio_X509_REQ); + +void PEM_read_bio_X509Fast(void* p, void* p0, void* p1, void* p2, void* p3, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsPEM_read_bio_X509[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcPEM_read_bio_X509 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoPEM_read_bio_X509 = v8::CFunctionInfo(rcPEM_read_bio_X509, 6, cargsPEM_read_bio_X509); +v8::CFunction pFPEM_read_bio_X509 = v8::CFunction((const void*)&PEM_read_bio_X509Fast, &infoPEM_read_bio_X509); + +void X509_get_subject_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_get_subject_name[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_get_subject_name = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_get_subject_name = v8::CFunctionInfo(rcX509_get_subject_name, 3, cargsX509_get_subject_name); +v8::CFunction pFX509_get_subject_name = v8::CFunction((const void*)&X509_get_subject_nameFast, &infoX509_get_subject_name); + +void X509_NAME_onelineFast(void* p, void* p0, void* p1, int32_t p2, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_NAME_oneline[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_NAME_oneline = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_NAME_oneline = v8::CFunctionInfo(rcX509_NAME_oneline, 5, cargsX509_NAME_oneline); +v8::CFunction pFX509_NAME_oneline = v8::CFunction((const void*)&X509_NAME_onelineFast, &infoX509_NAME_oneline); + +void X509_get_issuer_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_get_issuer_name[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_get_issuer_name = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_get_issuer_name = v8::CFunctionInfo(rcX509_get_issuer_name, 3, cargsX509_get_issuer_name); +v8::CFunction pFX509_get_issuer_name = v8::CFunction((const void*)&X509_get_issuer_nameFast, &infoX509_get_issuer_name); + +void X509_freeFast(void* p, void* p0); +v8::CTypeInfo cargsX509_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcX509_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_free = v8::CFunctionInfo(rcX509_free, 2, cargsX509_free); +v8::CFunction pFX509_free = v8::CFunction((const void*)&X509_freeFast, &infoX509_free); + +void X509_get_pubkeyFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_get_pubkey[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_get_pubkey = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_get_pubkey = v8::CFunctionInfo(rcX509_get_pubkey, 3, cargsX509_get_pubkey); +v8::CFunction pFX509_get_pubkey = v8::CFunction((const void*)&X509_get_pubkeyFast, &infoX509_get_pubkey); + +void X509_REQ_newFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_REQ_new[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_REQ_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_REQ_new = v8::CFunctionInfo(rcX509_REQ_new, 2, cargsX509_REQ_new); +v8::CFunction pFX509_REQ_new = v8::CFunction((const void*)&X509_REQ_newFast, &infoX509_REQ_new); + +int32_t X509_REQ_set_versionFast(void* p, void* p0, uint32_t p1); +v8::CTypeInfo cargsX509_REQ_set_version[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcX509_REQ_set_version = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoX509_REQ_set_version = v8::CFunctionInfo(rcX509_REQ_set_version, 3, cargsX509_REQ_set_version); +v8::CFunction pFX509_REQ_set_version = v8::CFunction((const void*)&X509_REQ_set_versionFast, &infoX509_REQ_set_version); + +void X509_REQ_get_subject_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsX509_REQ_get_subject_name[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcX509_REQ_get_subject_name = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoX509_REQ_get_subject_name = v8::CFunctionInfo(rcX509_REQ_get_subject_name, 3, cargsX509_REQ_get_subject_name); +v8::CFunction pFX509_REQ_get_subject_name = v8::CFunction((const void*)&X509_REQ_get_subject_nameFast, &infoX509_REQ_get_subject_name); + +int32_t X509_NAME_add_entry_by_txtFast(void* p, void* p0, void* p1, int32_t p2, void* p3, int32_t p4, int32_t p5, int32_t p6); +v8::CTypeInfo cargsX509_NAME_add_entry_by_txt[8] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcX509_NAME_add_entry_by_txt = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoX509_NAME_add_entry_by_txt = v8::CFunctionInfo(rcX509_NAME_add_entry_by_txt, 8, cargsX509_NAME_add_entry_by_txt); +v8::CFunction pFX509_NAME_add_entry_by_txt = v8::CFunction((const void*)&X509_NAME_add_entry_by_txtFast, &infoX509_NAME_add_entry_by_txt); + +int32_t X509_REQ_set_pubkeyFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargsX509_REQ_set_pubkey[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcX509_REQ_set_pubkey = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoX509_REQ_set_pubkey = v8::CFunctionInfo(rcX509_REQ_set_pubkey, 3, cargsX509_REQ_set_pubkey); +v8::CFunction pFX509_REQ_set_pubkey = v8::CFunction((const void*)&X509_REQ_set_pubkeyFast, &infoX509_REQ_set_pubkey); + +int32_t X509_REQ_signFast(void* p, void* p0, void* p1, void* p2); +v8::CTypeInfo cargsX509_REQ_sign[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcX509_REQ_sign = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoX509_REQ_sign = v8::CFunctionInfo(rcX509_REQ_sign, 4, cargsX509_REQ_sign); +v8::CFunction pFX509_REQ_sign = v8::CFunction((const void*)&X509_REQ_signFast, &infoX509_REQ_sign); + +int32_t OBJ_txt2nidFast(void* p, void* p0); +v8::CTypeInfo cargsOBJ_txt2nid[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcOBJ_txt2nid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoOBJ_txt2nid = v8::CFunctionInfo(rcOBJ_txt2nid, 2, cargsOBJ_txt2nid); +v8::CFunction pFOBJ_txt2nid = v8::CFunction((const void*)&OBJ_txt2nidFast, &infoOBJ_txt2nid); + +int32_t SSL_get_errorFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargsSSL_get_error[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_get_error = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_get_error = v8::CFunctionInfo(rcSSL_get_error, 3, cargsSSL_get_error); +v8::CFunction pFSSL_get_error = v8::CFunction((const void*)&SSL_get_errorFast, &infoSSL_get_error); + +int32_t OPENSSL_init_sslFast(void* p, uint64_t p0, void* p1); +v8::CTypeInfo cargsOPENSSL_init_ssl[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcOPENSSL_init_ssl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoOPENSSL_init_ssl = v8::CFunctionInfo(rcOPENSSL_init_ssl, 3, cargsOPENSSL_init_ssl); +v8::CFunction pFOPENSSL_init_ssl = v8::CFunction((const void*)&OPENSSL_init_sslFast, &infoOPENSSL_init_ssl); + +int32_t SSL_is_init_finishedFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_is_init_finished[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_is_init_finished = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_is_init_finished = v8::CFunctionInfo(rcSSL_is_init_finished, 2, cargsSSL_is_init_finished); +v8::CFunction pFSSL_is_init_finished = v8::CFunction((const void*)&SSL_is_init_finishedFast, &infoSSL_is_init_finished); + +int32_t SSL_shutdownFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_shutdown[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_shutdown = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_shutdown = v8::CFunctionInfo(rcSSL_shutdown, 2, cargsSSL_shutdown); +v8::CFunction pFSSL_shutdown = v8::CFunction((const void*)&SSL_shutdownFast, &infoSSL_shutdown); + +void SSL_get_servernameFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_get_servername[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_get_servername = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_get_servername = v8::CFunctionInfo(rcSSL_get_servername, 4, cargsSSL_get_servername); +v8::CFunction pFSSL_get_servername = v8::CFunction((const void*)&SSL_get_servernameFast, &infoSSL_get_servername); + +int32_t SSL_get_servername_typeFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_get_servername_type[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_get_servername_type = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_get_servername_type = v8::CFunctionInfo(rcSSL_get_servername_type, 2, cargsSSL_get_servername_type); +v8::CFunction pFSSL_get_servername_type = v8::CFunction((const void*)&SSL_get_servername_typeFast, &infoSSL_get_servername_type); + +void SSL_freeFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_free = v8::CFunctionInfo(rcSSL_free, 2, cargsSSL_free); +v8::CFunction pFSSL_free = v8::CFunction((const void*)&SSL_freeFast, &infoSSL_free); + +int32_t SSL_readFast(void* p, void* p0, void* p1, int32_t p2); +v8::CTypeInfo cargsSSL_read[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_read = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_read = v8::CFunctionInfo(rcSSL_read, 4, cargsSSL_read); +v8::CFunction pFSSL_read = v8::CFunction((const void*)&SSL_readFast, &infoSSL_read); + +int32_t SSL_writeFast(void* p, void* p0, void* p1, int32_t p2); +v8::CTypeInfo cargsSSL_write[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_write = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_write = v8::CFunctionInfo(rcSSL_write, 4, cargsSSL_write); +v8::CFunction pFSSL_write = v8::CFunction((const void*)&SSL_writeFast, &infoSSL_write); + +void SSL_get_versionFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_get_version[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_get_version = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_get_version = v8::CFunctionInfo(rcSSL_get_version, 3, cargsSSL_get_version); +v8::CFunction pFSSL_get_version = v8::CFunction((const void*)&SSL_get_versionFast, &infoSSL_get_version); + +void SSL_CIPHER_get_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_CIPHER_get_name[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_CIPHER_get_name = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_CIPHER_get_name = v8::CFunctionInfo(rcSSL_CIPHER_get_name, 3, cargsSSL_CIPHER_get_name); +v8::CFunction pFSSL_CIPHER_get_name = v8::CFunction((const void*)&SSL_CIPHER_get_nameFast, &infoSSL_CIPHER_get_name); + +void SSL_get_current_cipherFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_get_current_cipher[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_get_current_cipher = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_get_current_cipher = v8::CFunctionInfo(rcSSL_get_current_cipher, 3, cargsSSL_get_current_cipher); +v8::CFunction pFSSL_get_current_cipher = v8::CFunction((const void*)&SSL_get_current_cipherFast, &infoSSL_get_current_cipher); + +void SSL_get_peer_certificateFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_get_peer_certificate[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_get_peer_certificate = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_get_peer_certificate = v8::CFunctionInfo(rcSSL_get_peer_certificate, 3, cargsSSL_get_peer_certificate); +v8::CFunction pFSSL_get_peer_certificate = v8::CFunction((const void*)&SSL_get_peer_certificateFast, &infoSSL_get_peer_certificate); + +void SSL_set_SSL_CTXFast(void* p, void* p0, void* p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_set_SSL_CTX[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_set_SSL_CTX = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_set_SSL_CTX = v8::CFunctionInfo(rcSSL_set_SSL_CTX, 4, cargsSSL_set_SSL_CTX); +v8::CFunction pFSSL_set_SSL_CTX = v8::CFunction((const void*)&SSL_set_SSL_CTXFast, &infoSSL_set_SSL_CTX); + +void SSL_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_new[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_new = v8::CFunctionInfo(rcSSL_new, 3, cargsSSL_new); +v8::CFunction pFSSL_new = v8::CFunction((const void*)&SSL_newFast, &infoSSL_new); + +int32_t SSL_set_fdFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargsSSL_set_fd[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_set_fd = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_set_fd = v8::CFunctionInfo(rcSSL_set_fd, 3, cargsSSL_set_fd); +v8::CFunction pFSSL_set_fd = v8::CFunction((const void*)&SSL_set_fdFast, &infoSSL_set_fd); + +void SSL_set_bioFast(void* p, void* p0, void* p1, void* p2); +v8::CTypeInfo cargsSSL_set_bio[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_set_bio = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_set_bio = v8::CFunctionInfo(rcSSL_set_bio, 4, cargsSSL_set_bio); +v8::CFunction pFSSL_set_bio = v8::CFunction((const void*)&SSL_set_bioFast, &infoSSL_set_bio); + +void SSL_set_accept_stateFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_set_accept_state[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_set_accept_state = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_set_accept_state = v8::CFunctionInfo(rcSSL_set_accept_state, 2, cargsSSL_set_accept_state); +v8::CFunction pFSSL_set_accept_state = v8::CFunction((const void*)&SSL_set_accept_stateFast, &infoSSL_set_accept_state); + +int32_t SSL_connectFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_connect[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_connect = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_connect = v8::CFunctionInfo(rcSSL_connect, 2, cargsSSL_connect); +v8::CFunction pFSSL_connect = v8::CFunction((const void*)&SSL_connectFast, &infoSSL_connect); + +int32_t SSL_acceptFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_accept[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_accept = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_accept = v8::CFunctionInfo(rcSSL_accept, 2, cargsSSL_accept); +v8::CFunction pFSSL_accept = v8::CFunction((const void*)&SSL_acceptFast, &infoSSL_accept); + +void SSL_set_connect_stateFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_set_connect_state[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_set_connect_state = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_set_connect_state = v8::CFunctionInfo(rcSSL_set_connect_state, 2, cargsSSL_set_connect_state); +v8::CFunction pFSSL_set_connect_state = v8::CFunction((const void*)&SSL_set_connect_stateFast, &infoSSL_set_connect_state); + +int32_t SSL_do_handshakeFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_do_handshake[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_do_handshake = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_do_handshake = v8::CFunctionInfo(rcSSL_do_handshake, 2, cargsSSL_do_handshake); +v8::CFunction pFSSL_do_handshake = v8::CFunction((const void*)&SSL_do_handshakeFast, &infoSSL_do_handshake); + +void SSL_CTX_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_CTX_new[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_CTX_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_CTX_new = v8::CFunctionInfo(rcSSL_CTX_new, 3, cargsSSL_CTX_new); +v8::CFunction pFSSL_CTX_new = v8::CFunction((const void*)&SSL_CTX_newFast, &infoSSL_CTX_new); + +int32_t SSL_CTX_use_certificate_fileFast(void* p, void* p0, void* p1, int32_t p2); +v8::CTypeInfo cargsSSL_CTX_use_certificate_file[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_CTX_use_certificate_file = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_CTX_use_certificate_file = v8::CFunctionInfo(rcSSL_CTX_use_certificate_file, 4, cargsSSL_CTX_use_certificate_file); +v8::CFunction pFSSL_CTX_use_certificate_file = v8::CFunction((const void*)&SSL_CTX_use_certificate_fileFast, &infoSSL_CTX_use_certificate_file); + +int32_t SSL_CTX_use_certificate_chain_fileFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargsSSL_CTX_use_certificate_chain_file[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_CTX_use_certificate_chain_file = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_CTX_use_certificate_chain_file = v8::CFunctionInfo(rcSSL_CTX_use_certificate_chain_file, 3, cargsSSL_CTX_use_certificate_chain_file); +v8::CFunction pFSSL_CTX_use_certificate_chain_file = v8::CFunction((const void*)&SSL_CTX_use_certificate_chain_fileFast, &infoSSL_CTX_use_certificate_chain_file); + +int32_t SSL_CTX_use_PrivateKey_fileFast(void* p, void* p0, void* p1, int32_t p2); +v8::CTypeInfo cargsSSL_CTX_use_PrivateKey_file[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcSSL_CTX_use_PrivateKey_file = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_CTX_use_PrivateKey_file = v8::CFunctionInfo(rcSSL_CTX_use_PrivateKey_file, 4, cargsSSL_CTX_use_PrivateKey_file); +v8::CFunction pFSSL_CTX_use_PrivateKey_file = v8::CFunction((const void*)&SSL_CTX_use_PrivateKey_fileFast, &infoSSL_CTX_use_PrivateKey_file); + +void SSL_CTX_set_optionsFast(void* p, void* p0, uint64_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_CTX_set_options[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_CTX_set_options = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_CTX_set_options = v8::CFunctionInfo(rcSSL_CTX_set_options, 4, cargsSSL_CTX_set_options); +v8::CFunction pFSSL_CTX_set_options = v8::CFunction((const void*)&SSL_CTX_set_optionsFast, &infoSSL_CTX_set_options); + +int32_t SSL_CTX_set_cipher_listFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargsSSL_CTX_set_cipher_list[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcSSL_CTX_set_cipher_list = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_CTX_set_cipher_list = v8::CFunctionInfo(rcSSL_CTX_set_cipher_list, 3, cargsSSL_CTX_set_cipher_list); +v8::CFunction pFSSL_CTX_set_cipher_list = v8::CFunction((const void*)&SSL_CTX_set_cipher_listFast, &infoSSL_CTX_set_cipher_list); + +int32_t SSL_set_cipher_listFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargsSSL_set_cipher_list[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcSSL_set_cipher_list = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_set_cipher_list = v8::CFunctionInfo(rcSSL_set_cipher_list, 3, cargsSSL_set_cipher_list); +v8::CFunction pFSSL_set_cipher_list = v8::CFunction((const void*)&SSL_set_cipher_listFast, &infoSSL_set_cipher_list); + +void SSL_CTX_freeFast(void* p, void* p0); +v8::CTypeInfo cargsSSL_CTX_free[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcSSL_CTX_free = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_CTX_free = v8::CFunctionInfo(rcSSL_CTX_free, 2, cargsSSL_CTX_free); +v8::CFunction pFSSL_CTX_free = v8::CFunction((const void*)&SSL_CTX_freeFast, &infoSSL_CTX_free); + +void TLS_server_methodFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsTLS_server_method[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcTLS_server_method = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoTLS_server_method = v8::CFunctionInfo(rcTLS_server_method, 2, cargsTLS_server_method); +v8::CFunction pFTLS_server_method = v8::CFunction((const void*)&TLS_server_methodFast, &infoTLS_server_method); + +void TLS_client_methodFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsTLS_client_method[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcTLS_client_method = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoTLS_client_method = v8::CFunctionInfo(rcTLS_client_method, 2, cargsTLS_client_method); +v8::CFunction pFTLS_client_method = v8::CFunction((const void*)&TLS_client_methodFast, &infoTLS_client_method); + +int32_t SSL_CTX_set_ciphersuitesFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargsSSL_CTX_set_ciphersuites[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcSSL_CTX_set_ciphersuites = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoSSL_CTX_set_ciphersuites = v8::CFunctionInfo(rcSSL_CTX_set_ciphersuites, 3, cargsSSL_CTX_set_ciphersuites); +v8::CFunction pFSSL_CTX_set_ciphersuites = v8::CFunction((const void*)&SSL_CTX_set_ciphersuitesFast, &infoSSL_CTX_set_ciphersuites); + +void SSL_ctrlFast(void* p, void* p0, int32_t p1, uint64_t p2, void* p3, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsSSL_ctrl[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcSSL_ctrl = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoSSL_ctrl = v8::CFunctionInfo(rcSSL_ctrl, 6, cargsSSL_ctrl); +v8::CFunction pFSSL_ctrl = v8::CFunction((const void*)&SSL_ctrlFast, &infoSSL_ctrl); + +int32_t RSA_pkey_ctx_ctrlFast(void* p, void* p0, int32_t p1, int32_t p2, int32_t p3, void* p4); +v8::CTypeInfo cargsRSA_pkey_ctx_ctrl[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcRSA_pkey_ctx_ctrl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoRSA_pkey_ctx_ctrl = v8::CFunctionInfo(rcRSA_pkey_ctx_ctrl, 6, cargsRSA_pkey_ctx_ctrl); +v8::CFunction pFRSA_pkey_ctx_ctrl = v8::CFunction((const void*)&RSA_pkey_ctx_ctrlFast, &infoRSA_pkey_ctx_ctrl); + +void EVP_sha512_224Fast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsEVP_sha512_224[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcEVP_sha512_224 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoEVP_sha512_224 = v8::CFunctionInfo(rcEVP_sha512_224, 2, cargsEVP_sha512_224); +v8::CFunction pFEVP_sha512_224 = v8::CFunction((const void*)&EVP_sha512_224Fast, &infoEVP_sha512_224); + + + +void OpenSSL_versionSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + const char* rc = OpenSSL_version(v0); + Local ab = args[1].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void OpenSSL_versionFast(void* p, int32_t p0, struct FastApiTypedArray* const p_ret) { + int32_t v0 = p0; + const char* r = OpenSSL_version(v0); + ((const char**)p_ret->data)[0] = r; + +} +void EVP_PKEY_CTX_new_idSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + ENGINE* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + EVP_PKEY_CTX* rc = EVP_PKEY_CTX_new_id(v0, v1); + Local ab = args[2].As()->Buffer(); + ((EVP_PKEY_CTX**)ab->Data())[0] = rc; +} + +void EVP_PKEY_CTX_new_idFast(void* p, int32_t p0, void* p1, struct FastApiTypedArray* const p_ret) { + int32_t v0 = p0; + ENGINE* v1 = reinterpret_cast(p1); + EVP_PKEY_CTX* r = EVP_PKEY_CTX_new_id(v0, v1); + ((EVP_PKEY_CTX**)p_ret->data)[0] = r; + +} +void EVP_PKEY_keygen_initSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_PKEY_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = EVP_PKEY_keygen_init(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_PKEY_keygen_initFast(void* p, void* p0) { + EVP_PKEY_CTX* v0 = reinterpret_cast(p0); + return EVP_PKEY_keygen_init(v0); +} +void EVP_PKEY_keygenSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_PKEY_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY** v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = EVP_PKEY_keygen(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_PKEY_keygenFast(void* p, void* p0, void* p1) { + EVP_PKEY_CTX* v0 = reinterpret_cast(p0); + EVP_PKEY** v1 = reinterpret_cast(p1); + return EVP_PKEY_keygen(v0, v1); +} +void EVP_PKEY_newSlow(const FunctionCallbackInfo &args) { + + EVP_PKEY* rc = EVP_PKEY_new(); + Local ab = args[0].As()->Buffer(); + ((EVP_PKEY**)ab->Data())[0] = rc; +} + +void EVP_PKEY_newFast(void* p, struct FastApiTypedArray* const p_ret) { + + EVP_PKEY* r = EVP_PKEY_new(); + ((EVP_PKEY**)p_ret->data)[0] = r; + +} +void EVP_PKEY_idSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_PKEY* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = EVP_PKEY_id(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_PKEY_idFast(void* p, void* p0) { + EVP_PKEY* v0 = reinterpret_cast(p0); + return EVP_PKEY_id(v0); +} +void EVP_PKEY_typeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = EVP_PKEY_type(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_PKEY_typeFast(void* p, int32_t p0) { + int32_t v0 = p0; + return EVP_PKEY_type(v0); +} +void EVP_PKEY_freeSlow(const FunctionCallbackInfo &args) { + EVP_PKEY* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY_free(v0); +} + +void EVP_PKEY_freeFast(void* p, void* p0) { + EVP_PKEY* v0 = reinterpret_cast(p0); + EVP_PKEY_free(v0); +} +void EVP_PKEY_CTX_freeSlow(const FunctionCallbackInfo &args) { + EVP_PKEY_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY_CTX_free(v0); +} + +void EVP_PKEY_CTX_freeFast(void* p, void* p0) { + EVP_PKEY_CTX* v0 = reinterpret_cast(p0); + EVP_PKEY_CTX_free(v0); +} +void EVP_MD_CTX_newSlow(const FunctionCallbackInfo &args) { + + EVP_MD_CTX* rc = EVP_MD_CTX_new(); + Local ab = args[0].As()->Buffer(); + ((EVP_MD_CTX**)ab->Data())[0] = rc; +} + +void EVP_MD_CTX_newFast(void* p, struct FastApiTypedArray* const p_ret) { + + EVP_MD_CTX* r = EVP_MD_CTX_new(); + ((EVP_MD_CTX**)p_ret->data)[0] = r; + +} +void EVP_MD_CTX_resetSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = EVP_MD_CTX_reset(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_MD_CTX_resetFast(void* p, void* p0) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + return EVP_MD_CTX_reset(v0); +} +void EVP_MD_CTX_freeSlow(const FunctionCallbackInfo &args) { + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_MD_CTX_free(v0); +} + +void EVP_MD_CTX_freeFast(void* p, void* p0) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + EVP_MD_CTX_free(v0); +} +void EVP_get_digestbynidSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + const EVP_MD* rc = EVP_get_digestbynid(v0); + Local ab = args[1].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_get_digestbynidFast(void* p, int32_t p0, struct FastApiTypedArray* const p_ret) { + int32_t v0 = p0; + const EVP_MD* r = EVP_get_digestbynid(v0); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_get_digestbynameSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + const EVP_MD* rc = EVP_get_digestbyname(*v0); + Local ab = args[1].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_get_digestbynameFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p_ret) { + struct FastOneByteString* const v0 = p0; + const EVP_MD* r = EVP_get_digestbyname(v0->data); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_DigestSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + void* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + unsigned char* v2 = reinterpret_cast(ptr2); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + unsigned int* v3 = reinterpret_cast(ptr3); + const EVP_MD* v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + ENGINE* v5 = reinterpret_cast((uint64_t)Local::Cast(args[5])->Value()); + int32_t rc = EVP_Digest(v0, v1, v2, v3, v4, v5); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, struct FastApiTypedArray* const p3, void* p4, void* p5) { + void* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + unsigned char* v2 = reinterpret_cast(p2->data); + unsigned int* v3 = reinterpret_cast(p3->data); + const EVP_MD* v4 = reinterpret_cast(p4); + ENGINE* v5 = reinterpret_cast(p5); + return EVP_Digest(v0, v1, v2, v3, v4, v5); +} +void EVP_DigestInit_exSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_MD* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + ENGINE* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = EVP_DigestInit_ex(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestInit_exFast(void* p, void* p0, void* p1, void* p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + EVP_MD* v1 = reinterpret_cast(p1); + ENGINE* v2 = reinterpret_cast(p2); + return EVP_DigestInit_ex(v0, v1, v2); +} +void EVP_DigestUpdateSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = EVP_DigestUpdate(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestUpdateFast(void* p, void* p0, void* p1, uint32_t p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + return EVP_DigestUpdate(v0, v1, v2); +} +void EVP_DigestUpdateBufferSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = EVP_DigestUpdate(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestUpdateBufferFast(void* p, void* p0, struct FastApiTypedArray* const p1, uint32_t p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + return EVP_DigestUpdate(v0, v1, v2); +} +void EVP_DigestUpdateStringSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = EVP_DigestUpdate(v0, *v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestUpdateStringFast(void* p, void* p0, struct FastOneByteString* const p1, uint32_t p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + uint32_t v2 = p2; + return EVP_DigestUpdate(v0, v1->data, v2); +} +void EVP_DigestVerifyFinalSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const unsigned char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = EVP_DigestVerifyFinal(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestVerifyFinalFast(void* p, void* p0, void* p1, uint32_t p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + const unsigned char* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + return EVP_DigestVerifyFinal(v0, v1, v2); +} +void EVP_DigestSignFinalSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + unsigned char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + size_t* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = EVP_DigestSignFinal(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestSignFinalFast(void* p, void* p0, void* p1, void* p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + unsigned char* v1 = reinterpret_cast(p1); + size_t* v2 = reinterpret_cast(p2); + return EVP_DigestSignFinal(v0, v1, v2); +} +void EVP_DigestFinalSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + unsigned char* v1 = reinterpret_cast(ptr1); + Local u322 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u322->Buffer()->Data() + u322->ByteOffset(); + unsigned int* v2 = reinterpret_cast(ptr2); + int32_t rc = EVP_DigestFinal(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestFinalFast(void* p, void* p0, struct FastApiTypedArray* const p1, struct FastApiTypedArray* const p2) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + unsigned char* v1 = reinterpret_cast(p1->data); + unsigned int* v2 = reinterpret_cast(p2->data); + return EVP_DigestFinal(v0, v1, v2); +} +void EVP_sha1Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha1(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha1Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha1(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_sha224Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha224(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha224Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha224(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_sha256Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha256(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha256Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha256(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_sha384Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha384(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha384Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha384(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_sha512Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha512(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha512Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha512(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_sha512_256Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha512_256(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha512_256Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha512_256(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} +void EVP_DigestVerifyInitSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY_CTX** v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + EVP_MD* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + ENGINE* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + EVP_PKEY* v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = EVP_DigestVerifyInit(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestVerifyInitFast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + EVP_PKEY_CTX** v1 = reinterpret_cast(p1); + EVP_MD* v2 = reinterpret_cast(p2); + ENGINE* v3 = reinterpret_cast(p3); + EVP_PKEY* v4 = reinterpret_cast(p4); + return EVP_DigestVerifyInit(v0, v1, v2, v3, v4); +} +void EVP_DigestSignInitSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_MD_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY_CTX** v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + EVP_MD* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + ENGINE* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + EVP_PKEY* v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = EVP_DigestSignInit(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t EVP_DigestSignInitFast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4) { + EVP_MD_CTX* v0 = reinterpret_cast(p0); + EVP_PKEY_CTX** v1 = reinterpret_cast(p1); + EVP_MD* v2 = reinterpret_cast(p2); + ENGINE* v3 = reinterpret_cast(p3); + EVP_PKEY* v4 = reinterpret_cast(p4); + return EVP_DigestSignInit(v0, v1, v2, v3, v4); +} +void BIO_s_memSlow(const FunctionCallbackInfo &args) { + + const BIO_METHOD* rc = BIO_s_mem(); + Local ab = args[0].As()->Buffer(); + ((const BIO_METHOD**)ab->Data())[0] = rc; +} + +void BIO_s_memFast(void* p, struct FastApiTypedArray* const p_ret) { + + const BIO_METHOD* r = BIO_s_mem(); + ((const BIO_METHOD**)p_ret->data)[0] = r; + +} +void BIO_newSlow(const FunctionCallbackInfo &args) { + BIO_METHOD* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + BIO * rc = BIO_new(v0); + Local ab = args[1].As()->Buffer(); + ((BIO **)ab->Data())[0] = rc; +} + +void BIO_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + BIO_METHOD* v0 = reinterpret_cast(p0); + BIO * r = BIO_new(v0); + ((BIO **)p_ret->data)[0] = r; + +} +void BIO_new_mem_bufSlow(const FunctionCallbackInfo &args) { + const void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + BIO* rc = BIO_new_mem_buf(v0, v1); + Local ab = args[2].As()->Buffer(); + ((BIO**)ab->Data())[0] = rc; +} + +void BIO_new_mem_bufFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + const void* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + BIO* r = BIO_new_mem_buf(v0, v1); + ((BIO**)p_ret->data)[0] = r; + +} +void BIO_ctrlSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + uint64_t v2 = Local::Cast(args[2])->Value(); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + int32_t rc = BIO_ctrl(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t BIO_ctrlFast(void* p, void* p0, int32_t p1, uint64_t p2, void* p3) { + BIO* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + uint64_t v2 = p2; + void* v3 = reinterpret_cast(p3); + return BIO_ctrl(v0, v1, v2, v3); +} +void BIO_readSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = BIO_read(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t BIO_readFast(void* p, void* p0, void* p1, int32_t p2) { + BIO* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + return BIO_read(v0, v1, v2); +} +void PEM_write_bio_PrivateKeySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + EVP_CIPHER* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + unsigned char* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + int32_t v4 = Local::Cast(args[4])->Value(); + pem_password_cb* v5 = reinterpret_cast((uint64_t)Local::Cast(args[5])->Value()); + void* v6 = reinterpret_cast((uint64_t)Local::Cast(args[6])->Value()); + int32_t rc = PEM_write_bio_PrivateKey(v0, v1, v2, v3, v4, v5, v6); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t PEM_write_bio_PrivateKeyFast(void* p, void* p0, void* p1, void* p2, void* p3, int32_t p4, void* p5, void* p6) { + BIO* v0 = reinterpret_cast(p0); + EVP_PKEY* v1 = reinterpret_cast(p1); + EVP_CIPHER* v2 = reinterpret_cast(p2); + unsigned char* v3 = reinterpret_cast(p3); + int32_t v4 = p4; + pem_password_cb* v5 = reinterpret_cast(p5); + void* v6 = reinterpret_cast(p6); + return PEM_write_bio_PrivateKey(v0, v1, v2, v3, v4, v5, v6); +} +void PEM_write_bio_PUBKEYSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = PEM_write_bio_PUBKEY(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t PEM_write_bio_PUBKEYFast(void* p, void* p0, void* p1) { + BIO* v0 = reinterpret_cast(p0); + EVP_PKEY* v1 = reinterpret_cast(p1); + return PEM_write_bio_PUBKEY(v0, v1); +} +void PEM_write_bio_X509_REQSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509_REQ* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = PEM_write_bio_X509_REQ(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t PEM_write_bio_X509_REQFast(void* p, void* p0, void* p1) { + BIO* v0 = reinterpret_cast(p0); + X509_REQ* v1 = reinterpret_cast(p1); + return PEM_write_bio_X509_REQ(v0, v1); +} +void PEM_read_bio_X509Slow(const FunctionCallbackInfo &args) { + BIO* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509** v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + pem_password_cb* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + X509* rc = PEM_read_bio_X509(v0, v1, v2, v3); + Local ab = args[4].As()->Buffer(); + ((X509**)ab->Data())[0] = rc; +} + +void PEM_read_bio_X509Fast(void* p, void* p0, void* p1, void* p2, void* p3, struct FastApiTypedArray* const p_ret) { + BIO* v0 = reinterpret_cast(p0); + X509** v1 = reinterpret_cast(p1); + pem_password_cb* v2 = reinterpret_cast(p2); + void* v3 = reinterpret_cast(p3); + X509* r = PEM_read_bio_X509(v0, v1, v2, v3); + ((X509**)p_ret->data)[0] = r; + +} +void X509_get_subject_nameSlow(const FunctionCallbackInfo &args) { + const X509* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509_NAME* rc = X509_get_subject_name(v0); + Local ab = args[1].As()->Buffer(); + ((X509_NAME**)ab->Data())[0] = rc; +} + +void X509_get_subject_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const X509* v0 = reinterpret_cast(p0); + X509_NAME* r = X509_get_subject_name(v0); + ((X509_NAME**)p_ret->data)[0] = r; + +} +void X509_NAME_onelineSlow(const FunctionCallbackInfo &args) { + const X509_NAME* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + char* rc = X509_NAME_oneline(v0, v1, v2); + Local ab = args[3].As()->Buffer(); + ((char**)ab->Data())[0] = rc; +} + +void X509_NAME_onelineFast(void* p, void* p0, void* p1, int32_t p2, struct FastApiTypedArray* const p_ret) { + const X509_NAME* v0 = reinterpret_cast(p0); + char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + char* r = X509_NAME_oneline(v0, v1, v2); + ((char**)p_ret->data)[0] = r; + +} +void X509_get_issuer_nameSlow(const FunctionCallbackInfo &args) { + const X509* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509_NAME* rc = X509_get_issuer_name(v0); + Local ab = args[1].As()->Buffer(); + ((X509_NAME**)ab->Data())[0] = rc; +} + +void X509_get_issuer_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const X509* v0 = reinterpret_cast(p0); + X509_NAME* r = X509_get_issuer_name(v0); + ((X509_NAME**)p_ret->data)[0] = r; + +} +void X509_freeSlow(const FunctionCallbackInfo &args) { + X509* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509_free(v0); +} + +void X509_freeFast(void* p, void* p0) { + X509* v0 = reinterpret_cast(p0); + X509_free(v0); +} +void X509_get_pubkeySlow(const FunctionCallbackInfo &args) { + X509* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY* rc = X509_get_pubkey(v0); + Local ab = args[1].As()->Buffer(); + ((EVP_PKEY**)ab->Data())[0] = rc; +} + +void X509_get_pubkeyFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + X509* v0 = reinterpret_cast(p0); + EVP_PKEY* r = X509_get_pubkey(v0); + ((EVP_PKEY**)p_ret->data)[0] = r; + +} +void X509_REQ_newSlow(const FunctionCallbackInfo &args) { + + X509_REQ* rc = X509_REQ_new(); + Local ab = args[0].As()->Buffer(); + ((X509_REQ**)ab->Data())[0] = rc; +} + +void X509_REQ_newFast(void* p, struct FastApiTypedArray* const p_ret) { + + X509_REQ* r = X509_REQ_new(); + ((X509_REQ**)p_ret->data)[0] = r; + +} +void X509_REQ_set_versionSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + X509_REQ* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = X509_REQ_set_version(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t X509_REQ_set_versionFast(void* p, void* p0, uint32_t p1) { + X509_REQ* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + return X509_REQ_set_version(v0, v1); +} +void X509_REQ_get_subject_nameSlow(const FunctionCallbackInfo &args) { + X509_REQ* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509_NAME* rc = X509_REQ_get_subject_name(v0); + Local ab = args[1].As()->Buffer(); + ((X509_NAME**)ab->Data())[0] = rc; +} + +void X509_REQ_get_subject_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + X509_REQ* v0 = reinterpret_cast(p0); + X509_NAME* r = X509_REQ_get_subject_name(v0); + ((X509_NAME**)p_ret->data)[0] = r; + +} +void X509_NAME_add_entry_by_txtSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + X509_NAME* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + const unsigned char* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + int32_t v4 = Local::Cast(args[4])->Value(); + int32_t v5 = Local::Cast(args[5])->Value(); + int32_t v6 = Local::Cast(args[6])->Value(); + int32_t rc = X509_NAME_add_entry_by_txt(v0, v1, v2, v3, v4, v5, v6); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t X509_NAME_add_entry_by_txtFast(void* p, void* p0, void* p1, int32_t p2, void* p3, int32_t p4, int32_t p5, int32_t p6) { + X509_NAME* v0 = reinterpret_cast(p0); + const char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + const unsigned char* v3 = reinterpret_cast(p3); + int32_t v4 = p4; + int32_t v5 = p5; + int32_t v6 = p6; + return X509_NAME_add_entry_by_txt(v0, v1, v2, v3, v4, v5, v6); +} +void X509_REQ_set_pubkeySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + X509_REQ* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = X509_REQ_set_pubkey(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t X509_REQ_set_pubkeyFast(void* p, void* p0, void* p1) { + X509_REQ* v0 = reinterpret_cast(p0); + EVP_PKEY* v1 = reinterpret_cast(p1); + return X509_REQ_set_pubkey(v0, v1); +} +void X509_REQ_signSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + X509_REQ* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + EVP_PKEY* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + const EVP_MD* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = X509_REQ_sign(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t X509_REQ_signFast(void* p, void* p0, void* p1, void* p2) { + X509_REQ* v0 = reinterpret_cast(p0); + EVP_PKEY* v1 = reinterpret_cast(p1); + const EVP_MD* v2 = reinterpret_cast(p2); + return X509_REQ_sign(v0, v1, v2); +} +void OBJ_txt2nidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = OBJ_txt2nid(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t OBJ_txt2nidFast(void* p, void* p0) { + const char* v0 = reinterpret_cast(p0); + return OBJ_txt2nid(v0); +} +void SSL_get_errorSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = SSL_get_error(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_get_errorFast(void* p, void* p0, int32_t p1) { + const SSL* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return SSL_get_error(v0, v1); +} +void OPENSSL_init_sslSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + const OPENSSL_INIT_SETTINGS * v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = OPENSSL_init_ssl(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t OPENSSL_init_sslFast(void* p, uint64_t p0, void* p1) { + uint64_t v0 = p0; + const OPENSSL_INIT_SETTINGS * v1 = reinterpret_cast(p1); + return OPENSSL_init_ssl(v0, v1); +} +void SSL_is_init_finishedSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_is_init_finished(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_is_init_finishedFast(void* p, void* p0) { + const SSL* v0 = reinterpret_cast(p0); + return SSL_is_init_finished(v0); +} +void SSL_shutdownSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_shutdown(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_shutdownFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + return SSL_shutdown(v0); +} +void SSL_get_servernameSlow(const FunctionCallbackInfo &args) { + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + const char* rc = SSL_get_servername(v0, v1); + Local ab = args[2].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void SSL_get_servernameFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + const SSL* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + const char* r = SSL_get_servername(v0, v1); + ((const char**)p_ret->data)[0] = r; + +} +void SSL_get_servername_typeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_get_servername_type(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_get_servername_typeFast(void* p, void* p0) { + const SSL* v0 = reinterpret_cast(p0); + return SSL_get_servername_type(v0); +} +void SSL_freeSlow(const FunctionCallbackInfo &args) { + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_free(v0); +} + +void SSL_freeFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + SSL_free(v0); +} +void SSL_readSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = SSL_read(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_readFast(void* p, void* p0, void* p1, int32_t p2) { + SSL* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + return SSL_read(v0, v1, v2); +} +void SSL_writeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = SSL_write(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_writeFast(void* p, void* p0, void* p1, int32_t p2) { + SSL* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + return SSL_write(v0, v1, v2); +} +void SSL_get_versionSlow(const FunctionCallbackInfo &args) { + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* rc = SSL_get_version(v0); + Local ab = args[1].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void SSL_get_versionFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const SSL* v0 = reinterpret_cast(p0); + const char* r = SSL_get_version(v0); + ((const char**)p_ret->data)[0] = r; + +} +void SSL_CIPHER_get_nameSlow(const FunctionCallbackInfo &args) { + const SSL_CIPHER* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* rc = SSL_CIPHER_get_name(v0); + Local ab = args[1].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void SSL_CIPHER_get_nameFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const SSL_CIPHER* v0 = reinterpret_cast(p0); + const char* r = SSL_CIPHER_get_name(v0); + ((const char**)p_ret->data)[0] = r; + +} +void SSL_get_current_cipherSlow(const FunctionCallbackInfo &args) { + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const SSL_CIPHER* rc = SSL_get_current_cipher(v0); + Local ab = args[1].As()->Buffer(); + ((const SSL_CIPHER**)ab->Data())[0] = rc; +} + +void SSL_get_current_cipherFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const SSL* v0 = reinterpret_cast(p0); + const SSL_CIPHER* r = SSL_get_current_cipher(v0); + ((const SSL_CIPHER**)p_ret->data)[0] = r; + +} +void SSL_get_peer_certificateSlow(const FunctionCallbackInfo &args) { + const SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + X509* rc = SSL_get_peer_certificate(v0); + Local ab = args[1].As()->Buffer(); + ((X509**)ab->Data())[0] = rc; +} + +void SSL_get_peer_certificateFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + const SSL* v0 = reinterpret_cast(p0); + X509* r = SSL_get_peer_certificate(v0); + ((X509**)p_ret->data)[0] = r; + +} +void SSL_set_SSL_CTXSlow(const FunctionCallbackInfo &args) { + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_CTX* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + SSL_CTX* rc = SSL_set_SSL_CTX(v0, v1); + Local ab = args[2].As()->Buffer(); + ((SSL_CTX**)ab->Data())[0] = rc; +} + +void SSL_set_SSL_CTXFast(void* p, void* p0, void* p1, struct FastApiTypedArray* const p_ret) { + SSL* v0 = reinterpret_cast(p0); + SSL_CTX* v1 = reinterpret_cast(p1); + SSL_CTX* r = SSL_set_SSL_CTX(v0, v1); + ((SSL_CTX**)p_ret->data)[0] = r; + +} +void SSL_newSlow(const FunctionCallbackInfo &args) { + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL* rc = SSL_new(v0); + Local ab = args[1].As()->Buffer(); + ((SSL**)ab->Data())[0] = rc; +} + +void SSL_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + SSL_CTX* v0 = reinterpret_cast(p0); + SSL* r = SSL_new(v0); + ((SSL**)p_ret->data)[0] = r; + +} +void SSL_set_fdSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = SSL_set_fd(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_set_fdFast(void* p, void* p0, int32_t p1) { + SSL* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return SSL_set_fd(v0, v1); +} +void SSL_set_bioSlow(const FunctionCallbackInfo &args) { + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + BIO* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + BIO* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + SSL_set_bio(v0, v1, v2); +} + +void SSL_set_bioFast(void* p, void* p0, void* p1, void* p2) { + SSL* v0 = reinterpret_cast(p0); + BIO* v1 = reinterpret_cast(p1); + BIO* v2 = reinterpret_cast(p2); + SSL_set_bio(v0, v1, v2); +} +void SSL_set_accept_stateSlow(const FunctionCallbackInfo &args) { + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_set_accept_state(v0); +} + +void SSL_set_accept_stateFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + SSL_set_accept_state(v0); +} +void SSL_connectSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_connect(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_connectFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + return SSL_connect(v0); +} +void SSL_acceptSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_accept(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_acceptFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + return SSL_accept(v0); +} +void SSL_set_connect_stateSlow(const FunctionCallbackInfo &args) { + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_set_connect_state(v0); +} + +void SSL_set_connect_stateFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + SSL_set_connect_state(v0); +} +void SSL_do_handshakeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = SSL_do_handshake(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_do_handshakeFast(void* p, void* p0) { + SSL* v0 = reinterpret_cast(p0); + return SSL_do_handshake(v0); +} +void SSL_CTX_newSlow(const FunctionCallbackInfo &args) { + SSL_METHOD* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_CTX* rc = SSL_CTX_new(v0); + Local ab = args[1].As()->Buffer(); + ((SSL_CTX**)ab->Data())[0] = rc; +} + +void SSL_CTX_newFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + SSL_METHOD* v0 = reinterpret_cast(p0); + SSL_CTX* r = SSL_CTX_new(v0); + ((SSL_CTX**)p_ret->data)[0] = r; + +} +void SSL_CTX_use_certificate_fileSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = SSL_CTX_use_certificate_file(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_CTX_use_certificate_fileFast(void* p, void* p0, void* p1, int32_t p2) { + SSL_CTX* v0 = reinterpret_cast(p0); + const char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + return SSL_CTX_use_certificate_file(v0, v1, v2); +} +void SSL_CTX_use_certificate_chain_fileSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = SSL_CTX_use_certificate_chain_file(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_CTX_use_certificate_chain_fileFast(void* p, void* p0, void* p1) { + SSL_CTX* v0 = reinterpret_cast(p0); + const char* v1 = reinterpret_cast(p1); + return SSL_CTX_use_certificate_chain_file(v0, v1); +} +void SSL_CTX_use_PrivateKey_fileSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = SSL_CTX_use_PrivateKey_file(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_CTX_use_PrivateKey_fileFast(void* p, void* p0, void* p1, int32_t p2) { + SSL_CTX* v0 = reinterpret_cast(p0); + const char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + return SSL_CTX_use_PrivateKey_file(v0, v1, v2); +} +void SSL_CTX_set_optionsSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint64_t v1 = Local::Cast(args[1])->Value(); + uint64_t rc = SSL_CTX_set_options(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, static_cast(rc))); +} + +void SSL_CTX_set_optionsFast(void* p, void* p0, uint64_t p1, struct FastApiTypedArray* const p_ret) { + SSL_CTX* v0 = reinterpret_cast(p0); + uint64_t v1 = p1; + uint64_t r = SSL_CTX_set_options(v0, v1); + ((uint64_t*)p_ret->data)[0] = r; + +} +void SSL_CTX_set_cipher_listSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = SSL_CTX_set_cipher_list(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_CTX_set_cipher_listFast(void* p, void* p0, struct FastOneByteString* const p1) { + SSL_CTX* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return SSL_CTX_set_cipher_list(v0, v1->data); +} +void SSL_set_cipher_listSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = SSL_set_cipher_list(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_set_cipher_listFast(void* p, void* p0, struct FastOneByteString* const p1) { + SSL* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return SSL_set_cipher_list(v0, v1->data); +} +void SSL_CTX_freeSlow(const FunctionCallbackInfo &args) { + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + SSL_CTX_free(v0); +} + +void SSL_CTX_freeFast(void* p, void* p0) { + SSL_CTX* v0 = reinterpret_cast(p0); + SSL_CTX_free(v0); +} +void TLS_server_methodSlow(const FunctionCallbackInfo &args) { + + const SSL_METHOD* rc = TLS_server_method(); + Local ab = args[0].As()->Buffer(); + ((const SSL_METHOD**)ab->Data())[0] = rc; +} + +void TLS_server_methodFast(void* p, struct FastApiTypedArray* const p_ret) { + + const SSL_METHOD* r = TLS_server_method(); + ((const SSL_METHOD**)p_ret->data)[0] = r; + +} +void TLS_client_methodSlow(const FunctionCallbackInfo &args) { + + const SSL_METHOD* rc = TLS_client_method(); + Local ab = args[0].As()->Buffer(); + ((const SSL_METHOD**)ab->Data())[0] = rc; +} + +void TLS_client_methodFast(void* p, struct FastApiTypedArray* const p_ret) { + + const SSL_METHOD* r = TLS_client_method(); + ((const SSL_METHOD**)p_ret->data)[0] = r; + +} +void SSL_CTX_set_ciphersuitesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = SSL_CTX_set_ciphersuites(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t SSL_CTX_set_ciphersuitesFast(void* p, void* p0, struct FastOneByteString* const p1) { + SSL_CTX* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return SSL_CTX_set_ciphersuites(v0, v1->data); +} +void SSL_ctrlSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + SSL* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + uint64_t v2 = Local::Cast(args[2])->Value(); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + uint64_t rc = SSL_ctrl(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, static_cast(rc))); +} + +void SSL_ctrlFast(void* p, void* p0, int32_t p1, uint64_t p2, void* p3, struct FastApiTypedArray* const p_ret) { + SSL* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + uint64_t v2 = p2; + void* v3 = reinterpret_cast(p3); + uint64_t r = SSL_ctrl(v0, v1, v2, v3); + ((uint64_t*)p_ret->data)[0] = r; + +} +void RSA_pkey_ctx_ctrlSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + EVP_PKEY_CTX* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + void* v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = RSA_pkey_ctx_ctrl(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t RSA_pkey_ctx_ctrlFast(void* p, void* p0, int32_t p1, int32_t p2, int32_t p3, void* p4) { + EVP_PKEY_CTX* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + int32_t v2 = p2; + int32_t v3 = p3; + void* v4 = reinterpret_cast(p4); + return RSA_pkey_ctx_ctrl(v0, v1, v2, v3, v4); +} +void EVP_sha512_224Slow(const FunctionCallbackInfo &args) { + + const EVP_MD* rc = EVP_sha512_224(); + Local ab = args[0].As()->Buffer(); + ((const EVP_MD**)ab->Data())[0] = rc; +} + +void EVP_sha512_224Fast(void* p, struct FastApiTypedArray* const p_ret) { + + const EVP_MD* r = EVP_sha512_224(); + ((const EVP_MD**)p_ret->data)[0] = r; + +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "OpenSSL_version", &pFOpenSSL_version, OpenSSL_versionSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_CTX_new_id", &pFEVP_PKEY_CTX_new_id, EVP_PKEY_CTX_new_idSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_keygen_init", &pFEVP_PKEY_keygen_init, EVP_PKEY_keygen_initSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_keygen", &pFEVP_PKEY_keygen, EVP_PKEY_keygenSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_new", &pFEVP_PKEY_new, EVP_PKEY_newSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_id", &pFEVP_PKEY_id, EVP_PKEY_idSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_type", &pFEVP_PKEY_type, EVP_PKEY_typeSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_free", &pFEVP_PKEY_free, EVP_PKEY_freeSlow); + SET_FAST_METHOD(isolate, module, "EVP_PKEY_CTX_free", &pFEVP_PKEY_CTX_free, EVP_PKEY_CTX_freeSlow); + SET_FAST_METHOD(isolate, module, "EVP_MD_CTX_new", &pFEVP_MD_CTX_new, EVP_MD_CTX_newSlow); + SET_FAST_METHOD(isolate, module, "EVP_MD_CTX_reset", &pFEVP_MD_CTX_reset, EVP_MD_CTX_resetSlow); + SET_FAST_METHOD(isolate, module, "EVP_MD_CTX_free", &pFEVP_MD_CTX_free, EVP_MD_CTX_freeSlow); + SET_FAST_METHOD(isolate, module, "EVP_get_digestbynid", &pFEVP_get_digestbynid, EVP_get_digestbynidSlow); + SET_FAST_METHOD(isolate, module, "EVP_get_digestbyname", &pFEVP_get_digestbyname, EVP_get_digestbynameSlow); + SET_FAST_METHOD(isolate, module, "EVP_Digest", &pFEVP_Digest, EVP_DigestSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestInit_ex", &pFEVP_DigestInit_ex, EVP_DigestInit_exSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestUpdate", &pFEVP_DigestUpdate, EVP_DigestUpdateSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestUpdateBuffer", &pFEVP_DigestUpdateBuffer, EVP_DigestUpdateBufferSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestUpdateString", &pFEVP_DigestUpdateString, EVP_DigestUpdateStringSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestVerifyFinal", &pFEVP_DigestVerifyFinal, EVP_DigestVerifyFinalSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestSignFinal", &pFEVP_DigestSignFinal, EVP_DigestSignFinalSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestFinal", &pFEVP_DigestFinal, EVP_DigestFinalSlow); + SET_FAST_METHOD(isolate, module, "EVP_sha1", &pFEVP_sha1, EVP_sha1Slow); + SET_FAST_METHOD(isolate, module, "EVP_sha224", &pFEVP_sha224, EVP_sha224Slow); + SET_FAST_METHOD(isolate, module, "EVP_sha256", &pFEVP_sha256, EVP_sha256Slow); + SET_FAST_METHOD(isolate, module, "EVP_sha384", &pFEVP_sha384, EVP_sha384Slow); + SET_FAST_METHOD(isolate, module, "EVP_sha512", &pFEVP_sha512, EVP_sha512Slow); + SET_FAST_METHOD(isolate, module, "EVP_sha512_256", &pFEVP_sha512_256, EVP_sha512_256Slow); + SET_FAST_METHOD(isolate, module, "EVP_DigestVerifyInit", &pFEVP_DigestVerifyInit, EVP_DigestVerifyInitSlow); + SET_FAST_METHOD(isolate, module, "EVP_DigestSignInit", &pFEVP_DigestSignInit, EVP_DigestSignInitSlow); + SET_FAST_METHOD(isolate, module, "BIO_s_mem", &pFBIO_s_mem, BIO_s_memSlow); + SET_FAST_METHOD(isolate, module, "BIO_new", &pFBIO_new, BIO_newSlow); + SET_FAST_METHOD(isolate, module, "BIO_new_mem_buf", &pFBIO_new_mem_buf, BIO_new_mem_bufSlow); + SET_FAST_METHOD(isolate, module, "BIO_ctrl", &pFBIO_ctrl, BIO_ctrlSlow); + SET_FAST_METHOD(isolate, module, "BIO_read", &pFBIO_read, BIO_readSlow); + SET_FAST_METHOD(isolate, module, "PEM_write_bio_PrivateKey", &pFPEM_write_bio_PrivateKey, PEM_write_bio_PrivateKeySlow); + SET_FAST_METHOD(isolate, module, "PEM_write_bio_PUBKEY", &pFPEM_write_bio_PUBKEY, PEM_write_bio_PUBKEYSlow); + SET_FAST_METHOD(isolate, module, "PEM_write_bio_X509_REQ", &pFPEM_write_bio_X509_REQ, PEM_write_bio_X509_REQSlow); + SET_FAST_METHOD(isolate, module, "PEM_read_bio_X509", &pFPEM_read_bio_X509, PEM_read_bio_X509Slow); + SET_FAST_METHOD(isolate, module, "X509_get_subject_name", &pFX509_get_subject_name, X509_get_subject_nameSlow); + SET_FAST_METHOD(isolate, module, "X509_NAME_oneline", &pFX509_NAME_oneline, X509_NAME_onelineSlow); + SET_FAST_METHOD(isolate, module, "X509_get_issuer_name", &pFX509_get_issuer_name, X509_get_issuer_nameSlow); + SET_FAST_METHOD(isolate, module, "X509_free", &pFX509_free, X509_freeSlow); + SET_FAST_METHOD(isolate, module, "X509_get_pubkey", &pFX509_get_pubkey, X509_get_pubkeySlow); + SET_FAST_METHOD(isolate, module, "X509_REQ_new", &pFX509_REQ_new, X509_REQ_newSlow); + SET_FAST_METHOD(isolate, module, "X509_REQ_set_version", &pFX509_REQ_set_version, X509_REQ_set_versionSlow); + SET_FAST_METHOD(isolate, module, "X509_REQ_get_subject_name", &pFX509_REQ_get_subject_name, X509_REQ_get_subject_nameSlow); + SET_FAST_METHOD(isolate, module, "X509_NAME_add_entry_by_txt", &pFX509_NAME_add_entry_by_txt, X509_NAME_add_entry_by_txtSlow); + SET_FAST_METHOD(isolate, module, "X509_REQ_set_pubkey", &pFX509_REQ_set_pubkey, X509_REQ_set_pubkeySlow); + SET_FAST_METHOD(isolate, module, "X509_REQ_sign", &pFX509_REQ_sign, X509_REQ_signSlow); + SET_FAST_METHOD(isolate, module, "OBJ_txt2nid", &pFOBJ_txt2nid, OBJ_txt2nidSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_error", &pFSSL_get_error, SSL_get_errorSlow); + SET_FAST_METHOD(isolate, module, "OPENSSL_init_ssl", &pFOPENSSL_init_ssl, OPENSSL_init_sslSlow); + SET_FAST_METHOD(isolate, module, "SSL_is_init_finished", &pFSSL_is_init_finished, SSL_is_init_finishedSlow); + SET_FAST_METHOD(isolate, module, "SSL_shutdown", &pFSSL_shutdown, SSL_shutdownSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_servername", &pFSSL_get_servername, SSL_get_servernameSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_servername_type", &pFSSL_get_servername_type, SSL_get_servername_typeSlow); + SET_FAST_METHOD(isolate, module, "SSL_free", &pFSSL_free, SSL_freeSlow); + SET_FAST_METHOD(isolate, module, "SSL_read", &pFSSL_read, SSL_readSlow); + SET_FAST_METHOD(isolate, module, "SSL_write", &pFSSL_write, SSL_writeSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_version", &pFSSL_get_version, SSL_get_versionSlow); + SET_FAST_METHOD(isolate, module, "SSL_CIPHER_get_name", &pFSSL_CIPHER_get_name, SSL_CIPHER_get_nameSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_current_cipher", &pFSSL_get_current_cipher, SSL_get_current_cipherSlow); + SET_FAST_METHOD(isolate, module, "SSL_get_peer_certificate", &pFSSL_get_peer_certificate, SSL_get_peer_certificateSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_SSL_CTX", &pFSSL_set_SSL_CTX, SSL_set_SSL_CTXSlow); + SET_FAST_METHOD(isolate, module, "SSL_new", &pFSSL_new, SSL_newSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_fd", &pFSSL_set_fd, SSL_set_fdSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_bio", &pFSSL_set_bio, SSL_set_bioSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_accept_state", &pFSSL_set_accept_state, SSL_set_accept_stateSlow); + SET_FAST_METHOD(isolate, module, "SSL_connect", &pFSSL_connect, SSL_connectSlow); + SET_FAST_METHOD(isolate, module, "SSL_accept", &pFSSL_accept, SSL_acceptSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_connect_state", &pFSSL_set_connect_state, SSL_set_connect_stateSlow); + SET_FAST_METHOD(isolate, module, "SSL_do_handshake", &pFSSL_do_handshake, SSL_do_handshakeSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_new", &pFSSL_CTX_new, SSL_CTX_newSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_use_certificate_file", &pFSSL_CTX_use_certificate_file, SSL_CTX_use_certificate_fileSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_use_certificate_chain_file", &pFSSL_CTX_use_certificate_chain_file, SSL_CTX_use_certificate_chain_fileSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_use_PrivateKey_file", &pFSSL_CTX_use_PrivateKey_file, SSL_CTX_use_PrivateKey_fileSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_set_options", &pFSSL_CTX_set_options, SSL_CTX_set_optionsSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_set_cipher_list", &pFSSL_CTX_set_cipher_list, SSL_CTX_set_cipher_listSlow); + SET_FAST_METHOD(isolate, module, "SSL_set_cipher_list", &pFSSL_set_cipher_list, SSL_set_cipher_listSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_free", &pFSSL_CTX_free, SSL_CTX_freeSlow); + SET_FAST_METHOD(isolate, module, "TLS_server_method", &pFTLS_server_method, TLS_server_methodSlow); + SET_FAST_METHOD(isolate, module, "TLS_client_method", &pFTLS_client_method, TLS_client_methodSlow); + SET_FAST_METHOD(isolate, module, "SSL_CTX_set_ciphersuites", &pFSSL_CTX_set_ciphersuites, SSL_CTX_set_ciphersuitesSlow); + SET_FAST_METHOD(isolate, module, "SSL_ctrl", &pFSSL_ctrl, SSL_ctrlSlow); + SET_FAST_METHOD(isolate, module, "RSA_pkey_ctx_ctrl", &pFRSA_pkey_ctx_ctrl, RSA_pkey_ctx_ctrlSlow); + SET_FAST_METHOD(isolate, module, "EVP_sha512_224", &pFEVP_sha512_224, EVP_sha512_224Slow); + + SET_VALUE(isolate, module, "SSL_OP_ALL", BigInt::New(isolate, SSL_OP_ALL)); + SET_VALUE(isolate, module, "SSL_OP_NO_RENEGOTIATION", BigInt::New(isolate, SSL_OP_NO_RENEGOTIATION)); + SET_VALUE(isolate, module, "SSL_OP_NO_SSLv3", BigInt::New(isolate, SSL_OP_NO_SSLv3)); + SET_VALUE(isolate, module, "SSL_OP_NO_TLSv1", BigInt::New(isolate, SSL_OP_NO_TLSv1)); + SET_VALUE(isolate, module, "SSL_OP_NO_TLSv1_1", BigInt::New(isolate, SSL_OP_NO_TLSv1_1)); + SET_VALUE(isolate, module, "SSL_OP_NO_DTLSv1", BigInt::New(isolate, SSL_OP_NO_DTLSv1)); + SET_VALUE(isolate, module, "SSL_OP_NO_DTLSv1_2", BigInt::New(isolate, SSL_OP_NO_DTLSv1_2)); + SET_VALUE(isolate, module, "SSL_OP_NO_TLSv1_2", BigInt::New(isolate, SSL_OP_NO_TLSv1_2)); + SET_VALUE(isolate, module, "SSL_OP_NO_SSLv2", BigInt::New(isolate, SSL_OP_NO_SSLv2)); + SET_VALUE(isolate, module, "SSL_OP_NO_COMPRESSION", BigInt::New(isolate, SSL_OP_NO_COMPRESSION)); + + + SET_MODULE(isolate, target, "libssl", module); +} +} // namespace libssl +} // namespace lo + +extern "C" { + void* _register_libssl() { + return (void*)lo::libssl::Init; + } +} diff --git a/lib/lz4/api.js b/lib/lz4/api.js new file mode 100644 index 0000000..5663a79 --- /dev/null +++ b/lib/lz4/api.js @@ -0,0 +1,27 @@ +const api = { + compress_default: { + parameters: ['pointer', 'pointer', 'i32', 'i32'], + pointers: ['const char*', 'char*'], + result: 'i32', + name: 'LZ4_compress_default' + }, + compress_hc: { + parameters: ['pointer', 'pointer', 'i32', 'i32', 'i32'], + pointers: ['const char*', 'char*'], + result: 'i32', + name: 'LZ4_compress_HC' + }, + decompress_safe: { + parameters: ['pointer', 'pointer', 'i32', 'i32'], + pointers: ['const char*', 'char*'], + result: 'i32', + name: 'LZ4_decompress_safe' + } +} + +const name = 'lz4' +const includes = ['lz4.h', 'lz4hc.h'] +const libs = ['lz4'] +const obj = [] + +export { api, includes, name, libs, obj } diff --git a/lib/lz4/lz4.cc b/lib/lz4/lz4.cc new file mode 100644 index 0000000..c1d8203 --- /dev/null +++ b/lib/lz4/lz4.cc @@ -0,0 +1,177 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include + +namespace lo { +namespace lz4 { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +int32_t compress_defaultFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargscompress_default[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccompress_default = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocompress_default = v8::CFunctionInfo(rccompress_default, 5, cargscompress_default); +v8::CFunction pFcompress_default = v8::CFunction((const void*)&compress_defaultFast, &infocompress_default); + +int32_t compress_hcFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3, int32_t p4); +v8::CTypeInfo cargscompress_hc[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccompress_hc = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocompress_hc = v8::CFunctionInfo(rccompress_hc, 6, cargscompress_hc); +v8::CFunction pFcompress_hc = v8::CFunction((const void*)&compress_hcFast, &infocompress_hc); + +int32_t decompress_safeFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargsdecompress_safe[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcdecompress_safe = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodecompress_safe = v8::CFunctionInfo(rcdecompress_safe, 5, cargsdecompress_safe); +v8::CFunction pFdecompress_safe = v8::CFunction((const void*)&decompress_safeFast, &infodecompress_safe); + + + +void compress_defaultSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = LZ4_compress_default(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t compress_defaultFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3) { + const char* v0 = reinterpret_cast(p0); + char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + int32_t v3 = p3; + return LZ4_compress_default(v0, v1, v2, v3); +} +void compress_hcSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t v4 = Local::Cast(args[4])->Value(); + int32_t rc = LZ4_compress_HC(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t compress_hcFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3, int32_t p4) { + const char* v0 = reinterpret_cast(p0); + char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + int32_t v3 = p3; + int32_t v4 = p4; + return LZ4_compress_HC(v0, v1, v2, v3, v4); +} +void decompress_safeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = LZ4_decompress_safe(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t decompress_safeFast(void* p, void* p0, void* p1, int32_t p2, int32_t p3) { + const char* v0 = reinterpret_cast(p0); + char* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + int32_t v3 = p3; + return LZ4_decompress_safe(v0, v1, v2, v3); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "compress_default", &pFcompress_default, compress_defaultSlow); + SET_FAST_METHOD(isolate, module, "compress_hc", &pFcompress_hc, compress_hcSlow); + SET_FAST_METHOD(isolate, module, "decompress_safe", &pFdecompress_safe, decompress_safeSlow); + + + + SET_MODULE(isolate, target, "lz4", module); +} +} // namespace lz4 +} // namespace lo + +extern "C" { + void* _register_lz4() { + return (void*)lo::lz4::Init; + } +} diff --git a/lib/mbedtls/api.js b/lib/mbedtls/api.js new file mode 100644 index 0000000..947ccfc --- /dev/null +++ b/lib/mbedtls/api.js @@ -0,0 +1,54 @@ +const api = { + mbedtls_x509_crt_init: { + parameters: ['pointer'], + pointers: ['mbedtls_x509_crt*'], + result: 'void' + }, + mbedtls_net_init: { + parameters: ['pointer'], + pointers: ['mbedtls_net_context*'], + result: 'void' + }, + mbedtls_ssl_init: { + parameters: ['pointer'], + pointers: ['mbedtls_ssl_context*'], + result: 'void' + }, + mbedtls_ssl_config_init: { + parameters: ['pointer'], + pointers: ['mbedtls_ssl_config*'], + result: 'void' + }, + mbedtls_entropy_init: { + parameters: ['pointer'], + pointers: ['mbedtls_entropy_context*'], + result: 'void' + }, + mbedtls_x509_crt_parse_der: { + parameters: ['pointer', 'pointer', 'u32'], + pointers: ['mbedtls_x509_crt*', 'const unsigned char*'], + result: 'i32' + } +} + +const includes = ['mbedtls/x509.h', 'mbedtls/entropy.h', 'mbedtls/ssl.h', 'mbedtls/net_sockets.h'] +const include_paths = ['./deps/mbedtls/include'] +const name = 'mbedtls' +const libs = [] +const obj = [ + 'deps/mbedtls/library/libmbedx509.a', 'deps/mbedtls/library/libmbedcrypto.a', 'deps/mbedtls/library/libmbedtls.a' +] +const structs = [ + 'mbedtls_net_context', 'mbedtls_x509_crt', 'mbedtls_entropy_context', 'mbedtls_ssl_context', 'mbedtls_ssl_config' +] + +/* +todo: add build function + + mkdir -p deps/mbedtls + curl -L -o deps/mbedtls/v3.5.1.tar.gz https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v3.5.1.tar.gz + tar -zxvf deps/mbedtls/v3.5.1.tar.gz -C deps/mbedtls + + +*/ +export { name, api, libs, obj, includes, include_paths, structs } diff --git a/lib/mbedtls/mbedtls.cc b/lib/mbedtls/mbedtls.cc new file mode 100644 index 0000000..40fc70a --- /dev/null +++ b/lib/mbedtls/mbedtls.cc @@ -0,0 +1,213 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include +#include +#include + +namespace lo { +namespace mbedtls { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void mbedtls_x509_crt_initFast(void* p, void* p0); +v8::CTypeInfo cargsmbedtls_x509_crt_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcmbedtls_x509_crt_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infombedtls_x509_crt_init = v8::CFunctionInfo(rcmbedtls_x509_crt_init, 2, cargsmbedtls_x509_crt_init); +v8::CFunction pFmbedtls_x509_crt_init = v8::CFunction((const void*)&mbedtls_x509_crt_initFast, &infombedtls_x509_crt_init); + +void mbedtls_net_initFast(void* p, void* p0); +v8::CTypeInfo cargsmbedtls_net_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcmbedtls_net_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infombedtls_net_init = v8::CFunctionInfo(rcmbedtls_net_init, 2, cargsmbedtls_net_init); +v8::CFunction pFmbedtls_net_init = v8::CFunction((const void*)&mbedtls_net_initFast, &infombedtls_net_init); + +void mbedtls_ssl_initFast(void* p, void* p0); +v8::CTypeInfo cargsmbedtls_ssl_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcmbedtls_ssl_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infombedtls_ssl_init = v8::CFunctionInfo(rcmbedtls_ssl_init, 2, cargsmbedtls_ssl_init); +v8::CFunction pFmbedtls_ssl_init = v8::CFunction((const void*)&mbedtls_ssl_initFast, &infombedtls_ssl_init); + +void mbedtls_ssl_config_initFast(void* p, void* p0); +v8::CTypeInfo cargsmbedtls_ssl_config_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcmbedtls_ssl_config_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infombedtls_ssl_config_init = v8::CFunctionInfo(rcmbedtls_ssl_config_init, 2, cargsmbedtls_ssl_config_init); +v8::CFunction pFmbedtls_ssl_config_init = v8::CFunction((const void*)&mbedtls_ssl_config_initFast, &infombedtls_ssl_config_init); + +void mbedtls_entropy_initFast(void* p, void* p0); +v8::CTypeInfo cargsmbedtls_entropy_init[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcmbedtls_entropy_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infombedtls_entropy_init = v8::CFunctionInfo(rcmbedtls_entropy_init, 2, cargsmbedtls_entropy_init); +v8::CFunction pFmbedtls_entropy_init = v8::CFunction((const void*)&mbedtls_entropy_initFast, &infombedtls_entropy_init); + +int32_t mbedtls_x509_crt_parse_derFast(void* p, void* p0, void* p1, uint32_t p2); +v8::CTypeInfo cargsmbedtls_x509_crt_parse_der[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcmbedtls_x509_crt_parse_der = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infombedtls_x509_crt_parse_der = v8::CFunctionInfo(rcmbedtls_x509_crt_parse_der, 4, cargsmbedtls_x509_crt_parse_der); +v8::CFunction pFmbedtls_x509_crt_parse_der = v8::CFunction((const void*)&mbedtls_x509_crt_parse_derFast, &infombedtls_x509_crt_parse_der); + + + +void mbedtls_x509_crt_initSlow(const FunctionCallbackInfo &args) { + mbedtls_x509_crt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + mbedtls_x509_crt_init(v0); +} + +void mbedtls_x509_crt_initFast(void* p, void* p0) { + mbedtls_x509_crt* v0 = reinterpret_cast(p0); + mbedtls_x509_crt_init(v0); +} +void mbedtls_net_initSlow(const FunctionCallbackInfo &args) { + mbedtls_net_context* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + mbedtls_net_init(v0); +} + +void mbedtls_net_initFast(void* p, void* p0) { + mbedtls_net_context* v0 = reinterpret_cast(p0); + mbedtls_net_init(v0); +} +void mbedtls_ssl_initSlow(const FunctionCallbackInfo &args) { + mbedtls_ssl_context* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + mbedtls_ssl_init(v0); +} + +void mbedtls_ssl_initFast(void* p, void* p0) { + mbedtls_ssl_context* v0 = reinterpret_cast(p0); + mbedtls_ssl_init(v0); +} +void mbedtls_ssl_config_initSlow(const FunctionCallbackInfo &args) { + mbedtls_ssl_config* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + mbedtls_ssl_config_init(v0); +} + +void mbedtls_ssl_config_initFast(void* p, void* p0) { + mbedtls_ssl_config* v0 = reinterpret_cast(p0); + mbedtls_ssl_config_init(v0); +} +void mbedtls_entropy_initSlow(const FunctionCallbackInfo &args) { + mbedtls_entropy_context* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + mbedtls_entropy_init(v0); +} + +void mbedtls_entropy_initFast(void* p, void* p0) { + mbedtls_entropy_context* v0 = reinterpret_cast(p0); + mbedtls_entropy_init(v0); +} +void mbedtls_x509_crt_parse_derSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + mbedtls_x509_crt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const unsigned char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = mbedtls_x509_crt_parse_der(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t mbedtls_x509_crt_parse_derFast(void* p, void* p0, void* p1, uint32_t p2) { + mbedtls_x509_crt* v0 = reinterpret_cast(p0); + const unsigned char* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + return mbedtls_x509_crt_parse_der(v0, v1, v2); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "mbedtls_x509_crt_init", &pFmbedtls_x509_crt_init, mbedtls_x509_crt_initSlow); + SET_FAST_METHOD(isolate, module, "mbedtls_net_init", &pFmbedtls_net_init, mbedtls_net_initSlow); + SET_FAST_METHOD(isolate, module, "mbedtls_ssl_init", &pFmbedtls_ssl_init, mbedtls_ssl_initSlow); + SET_FAST_METHOD(isolate, module, "mbedtls_ssl_config_init", &pFmbedtls_ssl_config_init, mbedtls_ssl_config_initSlow); + SET_FAST_METHOD(isolate, module, "mbedtls_entropy_init", &pFmbedtls_entropy_init, mbedtls_entropy_initSlow); + SET_FAST_METHOD(isolate, module, "mbedtls_x509_crt_parse_der", &pFmbedtls_x509_crt_parse_der, mbedtls_x509_crt_parse_derSlow); + + + SET_VALUE(isolate, module, "struct_mbedtls_net_context_size", Integer::New(isolate, sizeof(mbedtls_net_context))); + SET_VALUE(isolate, module, "struct_mbedtls_x509_crt_size", Integer::New(isolate, sizeof(mbedtls_x509_crt))); + SET_VALUE(isolate, module, "struct_mbedtls_entropy_context_size", Integer::New(isolate, sizeof(mbedtls_entropy_context))); + SET_VALUE(isolate, module, "struct_mbedtls_ssl_context_size", Integer::New(isolate, sizeof(mbedtls_ssl_context))); + SET_VALUE(isolate, module, "struct_mbedtls_ssl_config_size", Integer::New(isolate, sizeof(mbedtls_ssl_config))); + + SET_MODULE(isolate, target, "mbedtls", module); +} +} // namespace mbedtls +} // namespace lo + +extern "C" { + void* _register_mbedtls() { + return (void*)lo::mbedtls::Init; + } +} diff --git a/lib/net/api.js b/lib/net/api.js new file mode 100644 index 0000000..885b756 --- /dev/null +++ b/lib/net/api.js @@ -0,0 +1,130 @@ +const api = { + socket: { + parameters: ['i32', 'i32', 'i32'], + result: 'i32' + }, + setsockopt: { + parameters: ['i32', 'i32', 'i32', 'buffer', 'i32'], + result: 'i32' + }, + bind: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'const struct sockaddr*'], + result: 'i32' + }, + connect: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'const sockaddr*'], + result: 'i32' + }, + listen: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + close: { + parameters: ['i32'], + result: 'i32' + }, + accept4: { + parameters: ['i32', 'pointer', 'pointer', 'i32'], + pointers: [, 'sockaddr*', 'socklen_t*'], + result: 'i32' + }, + send: { + parameters: ['i32', 'buffer', 'u32', 'i32'], + result: 'i32' + }, + send2: { + parameters: ['i32', 'pointer', 'i32', 'u32'], + result: 'i32', + name: 'send' + }, + sendto: { + parameters: ['i32', 'buffer', 'u32', 'i32', 'buffer', 'u32'], + pointers: [,,,, 'const struct sockaddr*'], + result: 'i32' + }, + recv: { + parameters: ['i32', 'buffer', 'u32', 'i32'], + result: 'i32' + }, + recv2: { + parameters: ['i32', 'pointer', 'u32', 'i32'], + result: 'i32', + name: 'recv' + }, + recvfrom: { + parameters: ['i32', 'buffer', 'u32', 'i32', 'buffer', 'buffer'], + pointers: [, , , , 'struct sockaddr*', 'socklen_t*'], + result: 'i32' + }, + sendmsg: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'const msghdr*'], + result: 'i32' + }, + sendmmsg: { + parameters: ['i32', 'buffer', 'i32', 'i32'], + pointers: [, 'struct mmsghdr*'], + result: 'i32' + }, + recvmsg: { + parameters: ['i32', 'buffer', 'u32'], + pointers: [, 'msghdr*'], + result: 'i32' + }, + recvmmsg: { + parameters: ['i32', 'buffer', 'i32', 'i32', 'buffer'], + pointers: [, 'struct mmsghdr*', , , 'struct timespec*'], + result: 'i32' + }, + read: { + parameters: ['i32', 'buffer', 'i32'], + result: 'i32' + }, + write_string: { + parameters: ['i32', 'string', 'i32'], +// override: [, , { param: 1, fastfield: '->length', slowfield: '.length()' }], + result: 'i32', + name: 'write' + }, + write: { + parameters: ['i32', 'buffer', 'i32'], + result: 'i32' + }, + pipe2: { + parameters: ['u32array', 'i32'], + pointers: ['int*'], + result: 'i32' + }, + dup2: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + ioctl: { + parameters: ['i32', 'i32', 'buffer'], + result: 'i32' + }, + ioctl2: { + parameters: ['i32', 'i32', 'i32'], + result: 'i32', + name: 'ioctl' + } +} + +const includes = [ + 'sys/socket.h', + 'arpa/inet.h', + 'sys/un.h', + 'sys/ioctl.h', + 'net/if.h', + 'linux/if_packet.h', + 'netinet/tcp.h', + 'netinet/if_ether.h', + 'sys/types.h', + 'sys/sendfile.h', + "unistd.h" +] +const name = 'net' + +export { api, includes, name } diff --git a/lib/net/net.cc b/lib/net/net.cc new file mode 100644 index 0000000..d420218 --- /dev/null +++ b/lib/net/net.cc @@ -0,0 +1,812 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace lo { +namespace net { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +int32_t socketFast(void* p, int32_t p0, int32_t p1, int32_t p2); +v8::CTypeInfo cargssocket[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsocket = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosocket = v8::CFunctionInfo(rcsocket, 4, cargssocket); +v8::CFunction pFsocket = v8::CFunction((const void*)&socketFast, &infosocket); + +int32_t setsockoptFast(void* p, int32_t p0, int32_t p1, int32_t p2, struct FastApiTypedArray* const p3, int32_t p4); +v8::CTypeInfo cargssetsockopt[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsetsockopt = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosetsockopt = v8::CFunctionInfo(rcsetsockopt, 6, cargssetsockopt); +v8::CFunction pFsetsockopt = v8::CFunction((const void*)&setsockoptFast, &infosetsockopt); + +int32_t bindFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargsbind[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcbind = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind = v8::CFunctionInfo(rcbind, 4, cargsbind); +v8::CFunction pFbind = v8::CFunction((const void*)&bindFast, &infobind); + +int32_t connectFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargsconnect[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcconnect = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoconnect = v8::CFunctionInfo(rcconnect, 4, cargsconnect); +v8::CFunction pFconnect = v8::CFunction((const void*)&connectFast, &infoconnect); + +int32_t listenFast(void* p, int32_t p0, int32_t p1); +v8::CTypeInfo cargslisten[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rclisten = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infolisten = v8::CFunctionInfo(rclisten, 3, cargslisten); +v8::CFunction pFlisten = v8::CFunction((const void*)&listenFast, &infolisten); + +int32_t closeFast(void* p, int32_t p0); +v8::CTypeInfo cargsclose[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcclose = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoclose = v8::CFunctionInfo(rcclose, 2, cargsclose); +v8::CFunction pFclose = v8::CFunction((const void*)&closeFast, &infoclose); + +int32_t accept4Fast(void* p, int32_t p0, void* p1, void* p2, int32_t p3); +v8::CTypeInfo cargsaccept4[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcaccept4 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoaccept4 = v8::CFunctionInfo(rcaccept4, 5, cargsaccept4); +v8::CFunction pFaccept4 = v8::CFunction((const void*)&accept4Fast, &infoaccept4); + +int32_t sendFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3); +v8::CTypeInfo cargssend[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsend = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosend = v8::CFunctionInfo(rcsend, 5, cargssend); +v8::CFunction pFsend = v8::CFunction((const void*)&sendFast, &infosend); + +int32_t send2Fast(void* p, int32_t p0, void* p1, int32_t p2, uint32_t p3); +v8::CTypeInfo cargssend2[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcsend2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosend2 = v8::CFunctionInfo(rcsend2, 5, cargssend2); +v8::CFunction pFsend2 = v8::CFunction((const void*)&send2Fast, &infosend2); + +int32_t sendtoFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3, struct FastApiTypedArray* const p4, uint32_t p5); +v8::CTypeInfo cargssendto[7] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcsendto = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosendto = v8::CFunctionInfo(rcsendto, 7, cargssendto); +v8::CFunction pFsendto = v8::CFunction((const void*)&sendtoFast, &infosendto); + +int32_t recvFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3); +v8::CTypeInfo cargsrecv[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcrecv = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforecv = v8::CFunctionInfo(rcrecv, 5, cargsrecv); +v8::CFunction pFrecv = v8::CFunction((const void*)&recvFast, &inforecv); + +int32_t recv2Fast(void* p, int32_t p0, void* p1, uint32_t p2, int32_t p3); +v8::CTypeInfo cargsrecv2[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcrecv2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforecv2 = v8::CFunctionInfo(rcrecv2, 5, cargsrecv2); +v8::CFunction pFrecv2 = v8::CFunction((const void*)&recv2Fast, &inforecv2); + +int32_t recvfromFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3, struct FastApiTypedArray* const p4, struct FastApiTypedArray* const p5); +v8::CTypeInfo cargsrecvfrom[7] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcrecvfrom = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforecvfrom = v8::CFunctionInfo(rcrecvfrom, 7, cargsrecvfrom); +v8::CFunction pFrecvfrom = v8::CFunction((const void*)&recvfromFast, &inforecvfrom); + +int32_t sendmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargssendmsg[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsendmsg = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosendmsg = v8::CFunctionInfo(rcsendmsg, 4, cargssendmsg); +v8::CFunction pFsendmsg = v8::CFunction((const void*)&sendmsgFast, &infosendmsg); + +int32_t sendmmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargssendmmsg[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsendmmsg = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosendmmsg = v8::CFunctionInfo(rcsendmmsg, 5, cargssendmmsg); +v8::CFunction pFsendmmsg = v8::CFunction((const void*)&sendmmsgFast, &infosendmmsg); + +int32_t recvmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2); +v8::CTypeInfo cargsrecvmsg[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcrecvmsg = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforecvmsg = v8::CFunctionInfo(rcrecvmsg, 4, cargsrecvmsg); +v8::CFunction pFrecvmsg = v8::CFunction((const void*)&recvmsgFast, &inforecvmsg); + +int32_t recvmmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3, struct FastApiTypedArray* const p4); +v8::CTypeInfo cargsrecvmmsg[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcrecvmmsg = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforecvmmsg = v8::CFunctionInfo(rcrecvmmsg, 6, cargsrecvmmsg); +v8::CFunction pFrecvmmsg = v8::CFunction((const void*)&recvmmsgFast, &inforecvmmsg); + +int32_t readFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargsread[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcread = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforead = v8::CFunctionInfo(rcread, 4, cargsread); +v8::CFunction pFread = v8::CFunction((const void*)&readFast, &inforead); + +int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1, int32_t p2); +v8::CTypeInfo cargswrite_string[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcwrite_string = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowrite_string = v8::CFunctionInfo(rcwrite_string, 4, cargswrite_string); +v8::CFunction pFwrite_string = v8::CFunction((const void*)&write_stringFast, &infowrite_string); + +int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargswrite[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcwrite = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowrite = v8::CFunctionInfo(rcwrite, 4, cargswrite); +v8::CFunction pFwrite = v8::CFunction((const void*)&writeFast, &infowrite); + +int32_t pipe2Fast(void* p, struct FastApiTypedArray* const p0, int32_t p1); +v8::CTypeInfo cargspipe2[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcpipe2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infopipe2 = v8::CFunctionInfo(rcpipe2, 3, cargspipe2); +v8::CFunction pFpipe2 = v8::CFunction((const void*)&pipe2Fast, &infopipe2); + +int32_t dup2Fast(void* p, int32_t p0, int32_t p1); +v8::CTypeInfo cargsdup2[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcdup2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodup2 = v8::CFunctionInfo(rcdup2, 3, cargsdup2); +v8::CFunction pFdup2 = v8::CFunction((const void*)&dup2Fast, &infodup2); + +int32_t ioctlFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargsioctl[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcioctl = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoioctl = v8::CFunctionInfo(rcioctl, 4, cargsioctl); +v8::CFunction pFioctl = v8::CFunction((const void*)&ioctlFast, &infoioctl); + +int32_t ioctl2Fast(void* p, int32_t p0, int32_t p1, int32_t p2); +v8::CTypeInfo cargsioctl2[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcioctl2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoioctl2 = v8::CFunctionInfo(rcioctl2, 4, cargsioctl2); +v8::CFunction pFioctl2 = v8::CFunction((const void*)&ioctl2Fast, &infoioctl2); + + + +void socketSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = socket(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t socketFast(void* p, int32_t p0, int32_t p1, int32_t p2) { + int32_t v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + return socket(v0, v1, v2); +} +void setsockoptSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + void* v3 = reinterpret_cast(ptr3); + int32_t v4 = Local::Cast(args[4])->Value(); + int32_t rc = setsockopt(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setsockoptFast(void* p, int32_t p0, int32_t p1, int32_t p2, struct FastApiTypedArray* const p3, int32_t p4) { + int32_t v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + void* v3 = reinterpret_cast(p3->data); + int32_t v4 = p4; + return setsockopt(v0, v1, v2, v3, v4); +} +void bindSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const struct sockaddr* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = bind(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bindFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + const struct sockaddr* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return bind(v0, v1, v2); +} +void connectSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const sockaddr* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = connect(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t connectFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + const sockaddr* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return connect(v0, v1, v2); +} +void listenSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = listen(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t listenFast(void* p, int32_t p0, int32_t p1) { + int32_t v0 = p0; + int32_t v1 = p1; + return listen(v0, v1); +} +void closeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = close(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t closeFast(void* p, int32_t p0) { + int32_t v0 = p0; + return close(v0); +} +void accept4Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + sockaddr* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + socklen_t* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = accept4(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t accept4Fast(void* p, int32_t p0, void* p1, void* p2, int32_t p3) { + int32_t v0 = p0; + sockaddr* v1 = reinterpret_cast(p1); + socklen_t* v2 = reinterpret_cast(p2); + int32_t v3 = p3; + return accept4(v0, v1, v2, v3); +} +void sendSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = send(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t sendFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + int32_t v3 = p3; + return send(v0, v1, v2, v3); +} +void send2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t v2 = Local::Cast(args[2])->Value(); + uint32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = send(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t send2Fast(void* p, int32_t p0, void* p1, int32_t p2, uint32_t p3) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1); + int32_t v2 = p2; + uint32_t v3 = p3; + return send(v0, v1, v2, v3); +} +void sendtoSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + Local u84 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u84->Buffer()->Data() + u84->ByteOffset(); + const struct sockaddr* v4 = reinterpret_cast(ptr4); + uint32_t v5 = Local::Cast(args[5])->Value(); + int32_t rc = sendto(v0, v1, v2, v3, v4, v5); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t sendtoFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3, struct FastApiTypedArray* const p4, uint32_t p5) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + int32_t v3 = p3; + const struct sockaddr* v4 = reinterpret_cast(p4->data); + uint32_t v5 = p5; + return sendto(v0, v1, v2, v3, v4, v5); +} +void recvSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = recv(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t recvFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + int32_t v3 = p3; + return recv(v0, v1, v2, v3); +} +void recv2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = recv(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t recv2Fast(void* p, int32_t p0, void* p1, uint32_t p2, int32_t p3) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + int32_t v3 = p3; + return recv(v0, v1, v2, v3); +} +void recvfromSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + Local u84 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u84->Buffer()->Data() + u84->ByteOffset(); + struct sockaddr* v4 = reinterpret_cast(ptr4); + Local u85 = args[5].As(); + uint8_t* ptr5 = (uint8_t*)u85->Buffer()->Data() + u85->ByteOffset(); + socklen_t* v5 = reinterpret_cast(ptr5); + int32_t rc = recvfrom(v0, v1, v2, v3, v4, v5); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t recvfromFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2, int32_t p3, struct FastApiTypedArray* const p4, struct FastApiTypedArray* const p5) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + int32_t v3 = p3; + struct sockaddr* v4 = reinterpret_cast(p4->data); + socklen_t* v5 = reinterpret_cast(p5->data); + return recvfrom(v0, v1, v2, v3, v4, v5); +} +void sendmsgSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const msghdr* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = sendmsg(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t sendmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + const msghdr* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return sendmsg(v0, v1, v2); +} +void sendmmsgSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + struct mmsghdr* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = sendmmsg(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t sendmmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3) { + int32_t v0 = p0; + struct mmsghdr* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + int32_t v3 = p3; + return sendmmsg(v0, v1, v2, v3); +} +void recvmsgSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + msghdr* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = recvmsg(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t recvmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2) { + int32_t v0 = p0; + msghdr* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + return recvmsg(v0, v1, v2); +} +void recvmmsgSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + struct mmsghdr* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + Local u84 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u84->Buffer()->Data() + u84->ByteOffset(); + struct timespec* v4 = reinterpret_cast(ptr4); + int32_t rc = recvmmsg(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t recvmmsgFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3, struct FastApiTypedArray* const p4) { + int32_t v0 = p0; + struct mmsghdr* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + int32_t v3 = p3; + struct timespec* v4 = reinterpret_cast(p4->data); + return recvmmsg(v0, v1, v2, v3, v4); +} +void readSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = read(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t readFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return read(v0, v1, v2); +} +void write_stringSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + String::Utf8Value v1(isolate, args[1]); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = write(v0, *v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t write_stringFast(void* p, int32_t p0, struct FastOneByteString* const p1, int32_t p2) { + int32_t v0 = p0; + struct FastOneByteString* const v1 = p1; + int32_t v2 = p2; + return write(v0, v1->data, v2); +} +void writeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = write(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t writeFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + void* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return write(v0, v1, v2); +} +void pipe2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u320 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u320->Buffer()->Data() + u320->ByteOffset(); + int* v0 = reinterpret_cast(ptr0); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = pipe2(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t pipe2Fast(void* p, struct FastApiTypedArray* const p0, int32_t p1) { + int* v0 = reinterpret_cast(p0->data); + int32_t v1 = p1; + return pipe2(v0, v1); +} +void dup2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = dup2(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t dup2Fast(void* p, int32_t p0, int32_t p1) { + int32_t v0 = p0; + int32_t v1 = p1; + return dup2(v0, v1); +} +void ioctlSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + void* v2 = reinterpret_cast(ptr2); + int32_t rc = ioctl(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t ioctlFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p2) { + int32_t v0 = p0; + int32_t v1 = p1; + void* v2 = reinterpret_cast(p2->data); + return ioctl(v0, v1, v2); +} +void ioctl2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = ioctl(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t ioctl2Fast(void* p, int32_t p0, int32_t p1, int32_t p2) { + int32_t v0 = p0; + int32_t v1 = p1; + int32_t v2 = p2; + return ioctl(v0, v1, v2); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "socket", &pFsocket, socketSlow); + SET_FAST_METHOD(isolate, module, "setsockopt", &pFsetsockopt, setsockoptSlow); + SET_FAST_METHOD(isolate, module, "bind", &pFbind, bindSlow); + SET_FAST_METHOD(isolate, module, "connect", &pFconnect, connectSlow); + SET_FAST_METHOD(isolate, module, "listen", &pFlisten, listenSlow); + SET_FAST_METHOD(isolate, module, "close", &pFclose, closeSlow); + SET_FAST_METHOD(isolate, module, "accept4", &pFaccept4, accept4Slow); + SET_FAST_METHOD(isolate, module, "send", &pFsend, sendSlow); + SET_FAST_METHOD(isolate, module, "send2", &pFsend2, send2Slow); + SET_FAST_METHOD(isolate, module, "sendto", &pFsendto, sendtoSlow); + SET_FAST_METHOD(isolate, module, "recv", &pFrecv, recvSlow); + SET_FAST_METHOD(isolate, module, "recv2", &pFrecv2, recv2Slow); + SET_FAST_METHOD(isolate, module, "recvfrom", &pFrecvfrom, recvfromSlow); + SET_FAST_METHOD(isolate, module, "sendmsg", &pFsendmsg, sendmsgSlow); + SET_FAST_METHOD(isolate, module, "sendmmsg", &pFsendmmsg, sendmmsgSlow); + SET_FAST_METHOD(isolate, module, "recvmsg", &pFrecvmsg, recvmsgSlow); + SET_FAST_METHOD(isolate, module, "recvmmsg", &pFrecvmmsg, recvmmsgSlow); + SET_FAST_METHOD(isolate, module, "read", &pFread, readSlow); + SET_FAST_METHOD(isolate, module, "write_string", &pFwrite_string, write_stringSlow); + SET_FAST_METHOD(isolate, module, "write", &pFwrite, writeSlow); + SET_FAST_METHOD(isolate, module, "pipe2", &pFpipe2, pipe2Slow); + SET_FAST_METHOD(isolate, module, "dup2", &pFdup2, dup2Slow); + SET_FAST_METHOD(isolate, module, "ioctl", &pFioctl, ioctlSlow); + SET_FAST_METHOD(isolate, module, "ioctl2", &pFioctl2, ioctl2Slow); + + + + SET_MODULE(isolate, target, "net", module); +} +} // namespace net +} // namespace lo + +extern "C" { + void* _register_net() { + return (void*)lo::net::Init; + } +} diff --git a/lib/pico/api.js b/lib/pico/api.js new file mode 100644 index 0000000..6c1e5dc --- /dev/null +++ b/lib/pico/api.js @@ -0,0 +1,127 @@ +const api = { + parseRequest: { + parameters: ['buffer', 'u32', 'buffer'], + pointers: ['char*', ,'httpRequest*'], + result: 'i32', + name: 'parse_request' + }, + parseRequest2: { + parameters: ['pointer', 'u32', 'pointer'], + pointers: ['char*', ,'httpRequest*'], + result: 'i32', + name: 'parse_request' + }, + parseResponse: { + parameters: ['buffer', 'u32', 'buffer'], + pointers: ['char*', ,'httpResponse*'], + result: 'i32', + name: 'parse_response' + }, + parseResponse2: { + parameters: ['pointer', 'u32', 'pointer'], + pointers: ['char*', ,'httpResponse*'], + result: 'i32', + name: 'parse_response' + } +} + +const name = 'pico' +const includes = ['picohttpparser.h'] +const obj = ['picohttpparser.o'] + +const preamble = ` +#define JUST_MAX_HEADERS 14 + +typedef struct httpHeader httpHeader; +struct httpHeader { + uint32_t name_start; + uint32_t name_len; + uint32_t value_start; + uint32_t value_len; +}; + +typedef struct httpRequest httpRequest; +struct httpRequest { + size_t path_len; + size_t method_len; + size_t num_headers; + int32_t minor_version; + uint8_t padding[4]; + struct httpHeader headers[JUST_MAX_HEADERS]; +}; + +typedef struct httpResponse httpResponse; +struct httpResponse { + int32_t minor_version; + int32_t status_code; + size_t num_headers; + size_t status_message_len; + uint8_t padding[8]; + struct httpHeader headers[JUST_MAX_HEADERS]; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +int parse_request(char* next, ssize_t bytes, httpRequest* req); +int parse_response(char* next, ssize_t bytes, httpResponse* res); +// we can do the routing inside c++ if we pre-define the routes +#ifdef __cplusplus +} +#endif + +// todo: read multiple headers in a single call - for pipelined +// todo: spec compliance checks +// todo: chunked parsing +int parse_request(char* next, ssize_t bytes, httpRequest* req) { + const char* method; + const char* path; + struct phr_header headers[JUST_MAX_HEADERS]; + req->num_headers = JUST_MAX_HEADERS; + int nread = phr_parse_request(next, bytes, + (const char **)&method, + &req->method_len, (const char **)&path, + &req->path_len, &req->minor_version, headers, + &req->num_headers, 0); + for (uint32_t i = 0; i < req->num_headers; i++) { + req->headers[i].name_start = (uint64_t)headers[i].name - (uint64_t)next; + req->headers[i].name_len = headers[i].name_len; + req->headers[i].value_start = (uint64_t)headers[i].value - (uint64_t)next; + req->headers[i].value_len = headers[i].value_len; + } + return nread; +} + +int parse_response(char* next, ssize_t bytes, httpResponse* res) { + const char* status_message; + struct phr_header headers[JUST_MAX_HEADERS]; + res->num_headers = JUST_MAX_HEADERS; + int nread = phr_parse_response(next, bytes, + &res->minor_version, &res->status_code, + (const char **)&status_message, + &res->status_message_len, headers, + &res->num_headers, 0); + for (uint32_t i = 0; i < res->num_headers; i++) { + res->headers[i].name_start = (uint64_t)headers[i].name - (uint64_t)next; + res->headers[i].name_len = headers[i].name_len; + res->headers[i].value_start = (uint64_t)headers[i].value - (uint64_t)next; + res->headers[i].value_len = headers[i].value_len; + } + return nread; +} + +` + +import { fetch } from 'lib/curl.js' +import { exec } from 'lib/proc.js' + +async function build (C = 'gcc', CC = 'g++') { + fetch('https://raw.githubusercontent.com/h2o/picohttpparser/master/picohttpparser.h', 'picohttpparser.h') + fetch('https://raw.githubusercontent.com/h2o/picohttpparser/master/picohttpparser.c', 'picohttpparser.c') + const status = new Int32Array(2) + const CARGS = C.split(' ') + exec(CARGS[0], [...CARGS.slice(1), '-c', '-I.', '-fPIC', '-O3', '-Wall', '-Wextra', '-msse4', '-std=c11', '-o', 'picohttpparser.o', 'picohttpparser.c'], status) +} + +export { name, api, includes, obj, preamble, build } diff --git a/lib/pico/pico.cc b/lib/pico/pico.cc new file mode 100644 index 0000000..3f22424 --- /dev/null +++ b/lib/pico/pico.cc @@ -0,0 +1,281 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace pico { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + +#define JUST_MAX_HEADERS 14 + +typedef struct httpHeader httpHeader; +struct httpHeader { + uint32_t name_start; + uint32_t name_len; + uint32_t value_start; + uint32_t value_len; +}; + +typedef struct httpRequest httpRequest; +struct httpRequest { + size_t path_len; + size_t method_len; + size_t num_headers; + int32_t minor_version; + uint8_t padding[4]; + struct httpHeader headers[JUST_MAX_HEADERS]; +}; + +typedef struct httpResponse httpResponse; +struct httpResponse { + int32_t minor_version; + int32_t status_code; + size_t num_headers; + size_t status_message_len; + uint8_t padding[8]; + struct httpHeader headers[JUST_MAX_HEADERS]; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +int parse_request(char* next, ssize_t bytes, httpRequest* req); +int parse_response(char* next, ssize_t bytes, httpResponse* res); +// we can do the routing inside c++ if we pre-define the routes +#ifdef __cplusplus +} +#endif + +// todo: read multiple headers in a single call - for pipelined +// todo: spec compliance checks +// todo: chunked parsing +int parse_request(char* next, ssize_t bytes, httpRequest* req) { + const char* method; + const char* path; + struct phr_header headers[JUST_MAX_HEADERS]; + req->num_headers = JUST_MAX_HEADERS; + int nread = phr_parse_request(next, bytes, + (const char **)&method, + &req->method_len, (const char **)&path, + &req->path_len, &req->minor_version, headers, + &req->num_headers, 0); + for (uint32_t i = 0; i < req->num_headers; i++) { + req->headers[i].name_start = (uint64_t)headers[i].name - (uint64_t)next; + req->headers[i].name_len = headers[i].name_len; + req->headers[i].value_start = (uint64_t)headers[i].value - (uint64_t)next; + req->headers[i].value_len = headers[i].value_len; + } + return nread; +} + +int parse_response(char* next, ssize_t bytes, httpResponse* res) { + const char* status_message; + struct phr_header headers[JUST_MAX_HEADERS]; + res->num_headers = JUST_MAX_HEADERS; + int nread = phr_parse_response(next, bytes, + &res->minor_version, &res->status_code, + (const char **)&status_message, + &res->status_message_len, headers, + &res->num_headers, 0); + for (uint32_t i = 0; i < res->num_headers; i++) { + res->headers[i].name_start = (uint64_t)headers[i].name - (uint64_t)next; + res->headers[i].name_len = headers[i].name_len; + res->headers[i].value_start = (uint64_t)headers[i].value - (uint64_t)next; + res->headers[i].value_len = headers[i].value_len; + } + return nread; +} + + + +int32_t parseRequestFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargsparseRequest[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcparseRequest = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoparseRequest = v8::CFunctionInfo(rcparseRequest, 4, cargsparseRequest); +v8::CFunction pFparseRequest = v8::CFunction((const void*)&parseRequestFast, &infoparseRequest); + +int32_t parseRequest2Fast(void* p, void* p0, uint32_t p1, void* p2); +v8::CTypeInfo cargsparseRequest2[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcparseRequest2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoparseRequest2 = v8::CFunctionInfo(rcparseRequest2, 4, cargsparseRequest2); +v8::CFunction pFparseRequest2 = v8::CFunction((const void*)&parseRequest2Fast, &infoparseRequest2); + +int32_t parseResponseFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargsparseResponse[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcparseResponse = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoparseResponse = v8::CFunctionInfo(rcparseResponse, 4, cargsparseResponse); +v8::CFunction pFparseResponse = v8::CFunction((const void*)&parseResponseFast, &infoparseResponse); + +int32_t parseResponse2Fast(void* p, void* p0, uint32_t p1, void* p2); +v8::CTypeInfo cargsparseResponse2[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcparseResponse2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoparseResponse2 = v8::CFunctionInfo(rcparseResponse2, 4, cargsparseResponse2); +v8::CFunction pFparseResponse2 = v8::CFunction((const void*)&parseResponse2Fast, &infoparseResponse2); + + + +void parseRequestSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + httpRequest* v2 = reinterpret_cast(ptr2); + int32_t rc = parse_request(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t parseRequestFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2) { + char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + httpRequest* v2 = reinterpret_cast(p2->data); + return parse_request(v0, v1, v2); +} +void parseRequest2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + httpRequest* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = parse_request(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t parseRequest2Fast(void* p, void* p0, uint32_t p1, void* p2) { + char* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + httpRequest* v2 = reinterpret_cast(p2); + return parse_request(v0, v1, v2); +} +void parseResponseSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + char* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + httpResponse* v2 = reinterpret_cast(ptr2); + int32_t rc = parse_response(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t parseResponseFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2) { + char* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + httpResponse* v2 = reinterpret_cast(p2->data); + return parse_response(v0, v1, v2); +} +void parseResponse2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + httpResponse* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = parse_response(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t parseResponse2Fast(void* p, void* p0, uint32_t p1, void* p2) { + char* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + httpResponse* v2 = reinterpret_cast(p2); + return parse_response(v0, v1, v2); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "parseRequest", &pFparseRequest, parseRequestSlow); + SET_FAST_METHOD(isolate, module, "parseRequest2", &pFparseRequest2, parseRequest2Slow); + SET_FAST_METHOD(isolate, module, "parseResponse", &pFparseResponse, parseResponseSlow); + SET_FAST_METHOD(isolate, module, "parseResponse2", &pFparseResponse2, parseResponse2Slow); + + + + SET_MODULE(isolate, target, "pico", module); +} +} // namespace pico +} // namespace lo + +extern "C" { + void* _register_pico() { + return (void*)lo::pico::Init; + } +} diff --git a/lib/pico/picohttpparser.c b/lib/pico/picohttpparser.c new file mode 100644 index 0000000..5e5783a --- /dev/null +++ b/lib/pico/picohttpparser.c @@ -0,0 +1,665 @@ +/* + * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, + * Shigeo Mitsunari + * + * The software is licensed under either the MIT License (below) or the Perl + * license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include +#include +#include +#ifdef __SSE4_2__ +#ifdef _MSC_VER +#include +#else +#include +#endif +#endif +#include "picohttpparser.h" + +#if __GNUC__ >= 3 +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#else +#define likely(x) (x) +#define unlikely(x) (x) +#endif + +#ifdef _MSC_VER +#define ALIGNED(n) _declspec(align(n)) +#else +#define ALIGNED(n) __attribute__((aligned(n))) +#endif + +#define IS_PRINTABLE_ASCII(c) ((unsigned char)(c)-040u < 0137u) + +#define CHECK_EOF() \ + if (buf == buf_end) { \ + *ret = -2; \ + return NULL; \ + } + +#define EXPECT_CHAR_NO_CHECK(ch) \ + if (*buf++ != ch) { \ + *ret = -1; \ + return NULL; \ + } + +#define EXPECT_CHAR(ch) \ + CHECK_EOF(); \ + EXPECT_CHAR_NO_CHECK(ch); + +#define ADVANCE_TOKEN(tok, toklen) \ + do { \ + const char *tok_start = buf; \ + static const char ALIGNED(16) ranges2[16] = "\000\040\177\177"; \ + int found2; \ + buf = findchar_fast(buf, buf_end, ranges2, 4, &found2); \ + if (!found2) { \ + CHECK_EOF(); \ + } \ + while (1) { \ + if (*buf == ' ') { \ + break; \ + } else if (unlikely(!IS_PRINTABLE_ASCII(*buf))) { \ + if ((unsigned char)*buf < '\040' || *buf == '\177') { \ + *ret = -1; \ + return NULL; \ + } \ + } \ + ++buf; \ + CHECK_EOF(); \ + } \ + tok = tok_start; \ + toklen = buf - tok_start; \ + } while (0) + +static const char *token_char_map = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\1\0\1\1\1\1\1\0\0\1\1\0\1\1\0\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0" + "\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\1\1" + "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\1\0\1\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + +static const char *findchar_fast(const char *buf, const char *buf_end, const char *ranges, size_t ranges_size, int *found) +{ + *found = 0; +#if __SSE4_2__ + if (likely(buf_end - buf >= 16)) { + __m128i ranges16 = _mm_loadu_si128((const __m128i *)ranges); + + size_t left = (buf_end - buf) & ~15; + do { + __m128i b16 = _mm_loadu_si128((const __m128i *)buf); + int r = _mm_cmpestri(ranges16, ranges_size, b16, 16, _SIDD_LEAST_SIGNIFICANT | _SIDD_CMP_RANGES | _SIDD_UBYTE_OPS); + if (unlikely(r != 16)) { + buf += r; + *found = 1; + break; + } + buf += 16; + left -= 16; + } while (likely(left != 0)); + } +#else + /* suppress unused parameter warning */ + (void)buf_end; + (void)ranges; + (void)ranges_size; +#endif + return buf; +} + +static const char *get_token_to_eol(const char *buf, const char *buf_end, const char **token, size_t *token_len, int *ret) +{ + const char *token_start = buf; + +#ifdef __SSE4_2__ + static const char ALIGNED(16) ranges1[16] = "\0\010" /* allow HT */ + "\012\037" /* allow SP and up to but not including DEL */ + "\177\177"; /* allow chars w. MSB set */ + int found; + buf = findchar_fast(buf, buf_end, ranges1, 6, &found); + if (found) + goto FOUND_CTL; +#else + /* find non-printable char within the next 8 bytes, this is the hottest code; manually inlined */ + while (likely(buf_end - buf >= 8)) { +#define DOIT() \ + do { \ + if (unlikely(!IS_PRINTABLE_ASCII(*buf))) \ + goto NonPrintable; \ + ++buf; \ + } while (0) + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); +#undef DOIT + continue; + NonPrintable: + if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { + goto FOUND_CTL; + } + ++buf; + } +#endif + for (;; ++buf) { + CHECK_EOF(); + if (unlikely(!IS_PRINTABLE_ASCII(*buf))) { + if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { + goto FOUND_CTL; + } + } + } +FOUND_CTL: + if (likely(*buf == '\015')) { + ++buf; + EXPECT_CHAR('\012'); + *token_len = buf - 2 - token_start; + } else if (*buf == '\012') { + *token_len = buf - token_start; + ++buf; + } else { + *ret = -1; + return NULL; + } + *token = token_start; + + return buf; +} + +static const char *is_complete(const char *buf, const char *buf_end, size_t last_len, int *ret) +{ + int ret_cnt = 0; + buf = last_len < 3 ? buf : buf + last_len - 3; + + while (1) { + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + CHECK_EOF(); + EXPECT_CHAR('\012'); + ++ret_cnt; + } else if (*buf == '\012') { + ++buf; + ++ret_cnt; + } else { + ++buf; + ret_cnt = 0; + } + if (ret_cnt == 2) { + return buf; + } + } + + *ret = -2; + return NULL; +} + +#define PARSE_INT(valp_, mul_) \ + if (*buf < '0' || '9' < *buf) { \ + buf++; \ + *ret = -1; \ + return NULL; \ + } \ + *(valp_) = (mul_) * (*buf++ - '0'); + +#define PARSE_INT_3(valp_) \ + do { \ + int res_ = 0; \ + PARSE_INT(&res_, 100) \ + *valp_ = res_; \ + PARSE_INT(&res_, 10) \ + *valp_ += res_; \ + PARSE_INT(&res_, 1) \ + *valp_ += res_; \ + } while (0) + +/* returned pointer is always within [buf, buf_end), or null */ +static const char *parse_token(const char *buf, const char *buf_end, const char **token, size_t *token_len, char next_char, + int *ret) +{ + /* We use pcmpestri to detect non-token characters. This instruction can take no more than eight character ranges (8*2*8=128 + * bits that is the size of a SSE register). Due to this restriction, characters `|` and `~` are handled in the slow loop. */ + static const char ALIGNED(16) ranges[] = "\x00 " /* control chars and up to SP */ + "\"\"" /* 0x22 */ + "()" /* 0x28,0x29 */ + ",," /* 0x2c */ + "//" /* 0x2f */ + ":@" /* 0x3a-0x40 */ + "[]" /* 0x5b-0x5d */ + "{\xff"; /* 0x7b-0xff */ + const char *buf_start = buf; + int found; + buf = findchar_fast(buf, buf_end, ranges, sizeof(ranges) - 1, &found); + if (!found) { + CHECK_EOF(); + } + while (1) { + if (*buf == next_char) { + break; + } else if (!token_char_map[(unsigned char)*buf]) { + *ret = -1; + return NULL; + } + ++buf; + CHECK_EOF(); + } + *token = buf_start; + *token_len = buf - buf_start; + return buf; +} + +/* returned pointer is always within [buf, buf_end), or null */ +static const char *parse_http_version(const char *buf, const char *buf_end, int *minor_version, int *ret) +{ + /* we want at least [HTTP/1.] to try to parse */ + if (buf_end - buf < 9) { + *ret = -2; + return NULL; + } + EXPECT_CHAR_NO_CHECK('H'); + EXPECT_CHAR_NO_CHECK('T'); + EXPECT_CHAR_NO_CHECK('T'); + EXPECT_CHAR_NO_CHECK('P'); + EXPECT_CHAR_NO_CHECK('/'); + EXPECT_CHAR_NO_CHECK('1'); + EXPECT_CHAR_NO_CHECK('.'); + PARSE_INT(minor_version, 1); + return buf; +} + +static const char *parse_headers(const char *buf, const char *buf_end, struct phr_header *headers, size_t *num_headers, + size_t max_headers, int *ret) +{ + for (;; ++*num_headers) { + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + break; + } else if (*buf == '\012') { + ++buf; + break; + } + if (*num_headers == max_headers) { + *ret = -1; + return NULL; + } + if (!(*num_headers != 0 && (*buf == ' ' || *buf == '\t'))) { + /* parsing name, but do not discard SP before colon, see + * http://www.mozilla.org/security/announce/2006/mfsa2006-33.html */ + if ((buf = parse_token(buf, buf_end, &headers[*num_headers].name, &headers[*num_headers].name_len, ':', ret)) == NULL) { + return NULL; + } + if (headers[*num_headers].name_len == 0) { + *ret = -1; + return NULL; + } + ++buf; + for (;; ++buf) { + CHECK_EOF(); + if (!(*buf == ' ' || *buf == '\t')) { + break; + } + } + } else { + headers[*num_headers].name = NULL; + headers[*num_headers].name_len = 0; + } + const char *value; + size_t value_len; + if ((buf = get_token_to_eol(buf, buf_end, &value, &value_len, ret)) == NULL) { + return NULL; + } + /* remove trailing SPs and HTABs */ + const char *value_end = value + value_len; + for (; value_end != value; --value_end) { + const char c = *(value_end - 1); + if (!(c == ' ' || c == '\t')) { + break; + } + } + headers[*num_headers].value = value; + headers[*num_headers].value_len = value_end - value; + } + return buf; +} + +static const char *parse_request(const char *buf, const char *buf_end, const char **method, size_t *method_len, const char **path, + size_t *path_len, int *minor_version, struct phr_header *headers, size_t *num_headers, + size_t max_headers, int *ret) +{ + /* skip first empty line (some clients add CRLF after POST content) */ + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + } else if (*buf == '\012') { + ++buf; + } + + /* parse request line */ + if ((buf = parse_token(buf, buf_end, method, method_len, ' ', ret)) == NULL) { + return NULL; + } + do { + ++buf; + CHECK_EOF(); + } while (*buf == ' '); + ADVANCE_TOKEN(*path, *path_len); + do { + ++buf; + CHECK_EOF(); + } while (*buf == ' '); + if (*method_len == 0 || *path_len == 0) { + *ret = -1; + return NULL; + } + if ((buf = parse_http_version(buf, buf_end, minor_version, ret)) == NULL) { + return NULL; + } + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + } else if (*buf == '\012') { + ++buf; + } else { + *ret = -1; + return NULL; + } + + return parse_headers(buf, buf_end, headers, num_headers, max_headers, ret); +} + +int phr_parse_request(const char *buf_start, size_t len, const char **method, size_t *method_len, const char **path, + size_t *path_len, int *minor_version, struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf_start + len; + size_t max_headers = *num_headers; + int r; + + *method = NULL; + *method_len = 0; + *path = NULL; + *path_len = 0; + *minor_version = -1; + *num_headers = 0; + + /* if last_len != 0, check if the request is complete (a fast countermeasure + againt slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_request(buf, buf_end, method, method_len, path, path_len, minor_version, headers, num_headers, max_headers, + &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +static const char *parse_response(const char *buf, const char *buf_end, int *minor_version, int *status, const char **msg, + size_t *msg_len, struct phr_header *headers, size_t *num_headers, size_t max_headers, int *ret) +{ + /* parse "HTTP/1.x" */ + if ((buf = parse_http_version(buf, buf_end, minor_version, ret)) == NULL) { + return NULL; + } + /* skip space */ + if (*buf != ' ') { + *ret = -1; + return NULL; + } + do { + ++buf; + CHECK_EOF(); + } while (*buf == ' '); + /* parse status code, we want at least [:digit:][:digit:][:digit:] to try to parse */ + if (buf_end - buf < 4) { + *ret = -2; + return NULL; + } + PARSE_INT_3(status); + + /* get message including preceding space */ + if ((buf = get_token_to_eol(buf, buf_end, msg, msg_len, ret)) == NULL) { + return NULL; + } + if (*msg_len == 0) { + /* ok */ + } else if (**msg == ' ') { + /* Remove preceding space. Successful return from `get_token_to_eol` guarantees that we would hit something other than SP + * before running past the end of the given buffer. */ + do { + ++*msg; + --*msg_len; + } while (**msg == ' '); + } else { + /* garbage found after status code */ + *ret = -1; + return NULL; + } + + return parse_headers(buf, buf_end, headers, num_headers, max_headers, ret); +} + +int phr_parse_response(const char *buf_start, size_t len, int *minor_version, int *status, const char **msg, size_t *msg_len, + struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf + len; + size_t max_headers = *num_headers; + int r; + + *minor_version = -1; + *status = 0; + *msg = NULL; + *msg_len = 0; + *num_headers = 0; + + /* if last_len != 0, check if the response is complete (a fast countermeasure + against slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_response(buf, buf_end, minor_version, status, msg, msg_len, headers, num_headers, max_headers, &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +int phr_parse_headers(const char *buf_start, size_t len, struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf + len; + size_t max_headers = *num_headers; + int r; + + *num_headers = 0; + + /* if last_len != 0, check if the response is complete (a fast countermeasure + against slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_headers(buf, buf_end, headers, num_headers, max_headers, &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +enum { + CHUNKED_IN_CHUNK_SIZE, + CHUNKED_IN_CHUNK_EXT, + CHUNKED_IN_CHUNK_DATA, + CHUNKED_IN_CHUNK_CRLF, + CHUNKED_IN_TRAILERS_LINE_HEAD, + CHUNKED_IN_TRAILERS_LINE_MIDDLE +}; + +static int decode_hex(int ch) +{ + if ('0' <= ch && ch <= '9') { + return ch - '0'; + } else if ('A' <= ch && ch <= 'F') { + return ch - 'A' + 0xa; + } else if ('a' <= ch && ch <= 'f') { + return ch - 'a' + 0xa; + } else { + return -1; + } +} + +ssize_t phr_decode_chunked(struct phr_chunked_decoder *decoder, char *buf, size_t *_bufsz) +{ + size_t dst = 0, src = 0, bufsz = *_bufsz; + ssize_t ret = -2; /* incomplete */ + + while (1) { + switch (decoder->_state) { + case CHUNKED_IN_CHUNK_SIZE: + for (;; ++src) { + int v; + if (src == bufsz) + goto Exit; + if ((v = decode_hex(buf[src])) == -1) { + if (decoder->_hex_count == 0) { + ret = -1; + goto Exit; + } + break; + } + if (decoder->_hex_count == sizeof(size_t) * 2) { + ret = -1; + goto Exit; + } + decoder->bytes_left_in_chunk = decoder->bytes_left_in_chunk * 16 + v; + ++decoder->_hex_count; + } + decoder->_hex_count = 0; + decoder->_state = CHUNKED_IN_CHUNK_EXT; + /* fallthru */ + case CHUNKED_IN_CHUNK_EXT: + /* RFC 7230 A.2 "Line folding in chunk extensions is disallowed" */ + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] == '\012') + break; + } + ++src; + if (decoder->bytes_left_in_chunk == 0) { + if (decoder->consume_trailer) { + decoder->_state = CHUNKED_IN_TRAILERS_LINE_HEAD; + break; + } else { + goto Complete; + } + } + decoder->_state = CHUNKED_IN_CHUNK_DATA; + /* fallthru */ + case CHUNKED_IN_CHUNK_DATA: { + size_t avail = bufsz - src; + if (avail < decoder->bytes_left_in_chunk) { + if (dst != src) + memmove(buf + dst, buf + src, avail); + src += avail; + dst += avail; + decoder->bytes_left_in_chunk -= avail; + goto Exit; + } + if (dst != src) + memmove(buf + dst, buf + src, decoder->bytes_left_in_chunk); + src += decoder->bytes_left_in_chunk; + dst += decoder->bytes_left_in_chunk; + decoder->bytes_left_in_chunk = 0; + decoder->_state = CHUNKED_IN_CHUNK_CRLF; + } + /* fallthru */ + case CHUNKED_IN_CHUNK_CRLF: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] != '\015') + break; + } + if (buf[src] != '\012') { + ret = -1; + goto Exit; + } + ++src; + decoder->_state = CHUNKED_IN_CHUNK_SIZE; + break; + case CHUNKED_IN_TRAILERS_LINE_HEAD: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] != '\015') + break; + } + if (buf[src++] == '\012') + goto Complete; + decoder->_state = CHUNKED_IN_TRAILERS_LINE_MIDDLE; + /* fallthru */ + case CHUNKED_IN_TRAILERS_LINE_MIDDLE: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] == '\012') + break; + } + ++src; + decoder->_state = CHUNKED_IN_TRAILERS_LINE_HEAD; + break; + default: + assert(!"decoder is corrupt"); + } + } + +Complete: + ret = bufsz - src; +Exit: + if (dst != src) + memmove(buf + dst, buf + src, bufsz - src); + *_bufsz = dst; + return ret; +} + +int phr_decode_chunked_is_in_data(struct phr_chunked_decoder *decoder) +{ + return decoder->_state == CHUNKED_IN_CHUNK_DATA; +} + +#undef CHECK_EOF +#undef EXPECT_CHAR +#undef ADVANCE_TOKEN diff --git a/lib/pico/picohttpparser.h b/lib/pico/picohttpparser.h new file mode 100644 index 0000000..07537cf --- /dev/null +++ b/lib/pico/picohttpparser.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, + * Shigeo Mitsunari + * + * The software is licensed under either the MIT License (below) or the Perl + * license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef picohttpparser_h +#define picohttpparser_h + +#include + +#ifdef _MSC_VER +#define ssize_t intptr_t +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* contains name and value of a header (name == NULL if is a continuing line + * of a multiline header */ +struct phr_header { + const char *name; + size_t name_len; + const char *value; + size_t value_len; +}; + +/* returns number of bytes consumed if successful, -2 if request is partial, + * -1 if failed */ +int phr_parse_request(const char *buf, size_t len, const char **method, size_t *method_len, const char **path, size_t *path_len, + int *minor_version, struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* ditto */ +int phr_parse_response(const char *_buf, size_t len, int *minor_version, int *status, const char **msg, size_t *msg_len, + struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* ditto */ +int phr_parse_headers(const char *buf, size_t len, struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* should be zero-filled before start */ +struct phr_chunked_decoder { + size_t bytes_left_in_chunk; /* number of bytes left in current chunk */ + char consume_trailer; /* if trailing headers should be consumed */ + char _hex_count; + char _state; +}; + +/* the function rewrites the buffer given as (buf, bufsz) removing the chunked- + * encoding headers. When the function returns without an error, bufsz is + * updated to the length of the decoded data available. Applications should + * repeatedly call the function while it returns -2 (incomplete) every time + * supplying newly arrived data. If the end of the chunked-encoded data is + * found, the function returns a non-negative number indicating the number of + * octets left undecoded, that starts from the offset returned by `*bufsz`. + * Returns -1 on error. + */ +ssize_t phr_decode_chunked(struct phr_chunked_decoder *decoder, char *buf, size_t *bufsz); + +/* returns if the chunked decoder is in middle of chunked data */ +int phr_decode_chunked_is_in_data(struct phr_chunked_decoder *decoder); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/proc.js b/lib/proc.js index 693a2cf..6351707 100644 --- a/lib/proc.js +++ b/lib/proc.js @@ -1,6 +1,11 @@ -const { ptr, core } = lo +const { ptr, core, assert } = lo -let mem = () => 0 +const noop = () => { + +} + +let mem = noop +let exec = noop if (core.os === 'linux') { const { pread, open, O_RDONLY } = core @@ -29,4 +34,41 @@ if (core.os === 'linux') { } } -export { mem } +if (core.os === 'linux' || core.os === 'mac') { + + const { fork, execvp, waitpid, exit } = lo.core + const { cstr } = lo + + function makeArgs (args) { + const argb = new Array(args.length) + if (!args.length) return { args: new Uint8Array(0) } + const b64 = new BigUint64Array(args.length + 1) + for (let i = 0; i < args.length; i++) { + const str = argb[i] = cstr(args[i]) + // @ts-ignore + b64[i] = BigInt(str.ptr) + } + return { + args: new Uint8Array(b64.buffer), + cstrings: argb + } + } + + exec = (name, vargs, status) => { + const { args } = makeArgs([name, ...vargs]) + const pid = fork() + if (pid === 0) { + const rc = execvp(name, args) + lo.exit(1) + } else if (pid > 0) { + status[1] = waitpid(pid, status, 0) + if (status[0] === 0) assert(status[1] === pid) + } else { + status[0] = lo.errno + status[1] = pid + } + } + +} + +export { mem, exec } diff --git a/lib/pthread/Makefile b/lib/pthread/Makefile new file mode 100644 index 0000000..a97e163 --- /dev/null +++ b/lib/pthread/Makefile @@ -0,0 +1,38 @@ +# [do not edit,] +# This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile + +C=gcc +CC=g++ +BINDING=pthread + +.PHONY: help clean + + +$(BINDING).a: ## compile static library and dependencies + $(CC) -fPIC $(CCARGS) $(OPT) -I$(LO_HOME) -I$(LO_HOME)/v8 -I$(LO_HOME)/v8/include $(WARN) -o $(BINDING).o $(BINDING).cc + ar crsT $(BINDING).a $(BINDING).o + +$(BINDING).so: $(BINDING).a ## compile shared library +ifeq ($(os),mac) + $(CC) -fPIC $(LARGS) $(OPT) -dynamiclib $(WARN) -o $(BINDING).dylib $(BINDING).o $(LO_HOME)/v8/libv8_monolith.a $(LO_HOME)/lo.o +else + $(CC) $(LARGS) $(OPT) -shared $(WARN) -o $(BINDING).so $(BINDING).o +endif + +clean: ## tidy up +ifeq ($(os),win) + @del /q $(BINDING).dll > NUL 2>&1 + @del /q $(BINDING).obj > NUL 2>&1 + @del /q $(BINDING).lib > NUL 2>&1 +else + rm -f $(BINDING).so + rm -f $(BINDING).a + rm -f $(BINDING).o +endif + +all: ## make all + make clean + make $(BINDING).so + +.DEFAULT_GOAL := help + diff --git a/lib/pthread/api.js b/lib/pthread/api.js new file mode 100644 index 0000000..732dc1c --- /dev/null +++ b/lib/pthread/api.js @@ -0,0 +1,79 @@ +const api = { + create: { + parameters: ['u32array', 'pointer', 'pointer', 'buffer'], + pointers: ['pthread_t*', 'const pthread_attr_t*', 'start_routine'], + result: 'i32', + name: 'pthread_create' + }, + getcpuclockid: { + parameters: ['u64', 'u32array'], + pointers: [, '__clockid_t*'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_getcpuclockid' + }, + cancel: { + parameters: ['u64'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_cancel' + }, + self: { + parameters: [], + result: 'u64', + name: 'pthread_self' + }, + detach: { + parameters: ['u64'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_detach' + }, + join: { + parameters: ['u64', 'u32array'], + pointers: [, 'void**'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_join' + }, + exit: { + parameters: ['u32array'], + pointers: [], + result: 'void', + name: 'pthread_exit' + }, + tryJoin: { + parameters: ['u64', 'u32array'], + pointers: [, 'void**'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_tryjoin_np' + }, + setName: { + parameters: ['u64', 'string'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_setname_np' + }, + setAffinity: { + parameters: ['u64', 'u32', 'buffer'], + pointers: [, , 'cpu_set_t*'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_setaffinity_np' + }, + getAffinity: { + parameters: ['u64', 'u32', 'buffer'], + pointers: [, , 'cpu_set_t*'], + casts: ['(pthread_t)'], + result: 'i32', + name: 'pthread_getaffinity_np' + } +} + +const name = 'pthread' +const includes = ['pthread.h'] +const preamble = `typedef void* (*start_routine)(void*);\n` +const platform = ['linux'] + +export { name, api, includes, preamble, platform } diff --git a/lib/pthread/pthread.cc b/lib/pthread/pthread.cc new file mode 100644 index 0000000..3a33d6c --- /dev/null +++ b/lib/pthread/pthread.cc @@ -0,0 +1,365 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace pthread { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + +typedef void* (*start_routine)(void*); + + +int32_t createFast(void* p, struct FastApiTypedArray* const p0, void* p1, void* p2, struct FastApiTypedArray* const p3); +v8::CTypeInfo cargscreate[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rccreate = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocreate = v8::CFunctionInfo(rccreate, 5, cargscreate); +v8::CFunction pFcreate = v8::CFunction((const void*)&createFast, &infocreate); + +int32_t getcpuclockidFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsgetcpuclockid[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgetcpuclockid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetcpuclockid = v8::CFunctionInfo(rcgetcpuclockid, 3, cargsgetcpuclockid); +v8::CFunction pFgetcpuclockid = v8::CFunction((const void*)&getcpuclockidFast, &infogetcpuclockid); + +int32_t cancelFast(void* p, uint64_t p0); +v8::CTypeInfo cargscancel[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rccancel = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocancel = v8::CFunctionInfo(rccancel, 2, cargscancel); +v8::CFunction pFcancel = v8::CFunction((const void*)&cancelFast, &infocancel); + +void selfFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsself[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcself = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoself = v8::CFunctionInfo(rcself, 2, cargsself); +v8::CFunction pFself = v8::CFunction((const void*)&selfFast, &infoself); + +int32_t detachFast(void* p, uint64_t p0); +v8::CTypeInfo cargsdetach[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcdetach = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodetach = v8::CFunctionInfo(rcdetach, 2, cargsdetach); +v8::CFunction pFdetach = v8::CFunction((const void*)&detachFast, &infodetach); + +int32_t joinFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsjoin[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcjoin = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infojoin = v8::CFunctionInfo(rcjoin, 3, cargsjoin); +v8::CFunction pFjoin = v8::CFunction((const void*)&joinFast, &infojoin); + +void exitFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargsexit[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcexit = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoexit = v8::CFunctionInfo(rcexit, 2, cargsexit); +v8::CFunction pFexit = v8::CFunction((const void*)&exitFast, &infoexit); + +int32_t tryJoinFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargstryJoin[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rctryJoin = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotryJoin = v8::CFunctionInfo(rctryJoin, 3, cargstryJoin); +v8::CFunction pFtryJoin = v8::CFunction((const void*)&tryJoinFast, &infotryJoin); + +int32_t setNameFast(void* p, uint64_t p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargssetName[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcsetName = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosetName = v8::CFunctionInfo(rcsetName, 3, cargssetName); +v8::CFunction pFsetName = v8::CFunction((const void*)&setNameFast, &infosetName); + +int32_t setAffinityFast(void* p, uint64_t p0, uint32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargssetAffinity[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcsetAffinity = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosetAffinity = v8::CFunctionInfo(rcsetAffinity, 4, cargssetAffinity); +v8::CFunction pFsetAffinity = v8::CFunction((const void*)&setAffinityFast, &infosetAffinity); + +int32_t getAffinityFast(void* p, uint64_t p0, uint32_t p1, struct FastApiTypedArray* const p2); +v8::CTypeInfo cargsgetAffinity[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgetAffinity = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetAffinity = v8::CFunctionInfo(rcgetAffinity, 4, cargsgetAffinity); +v8::CFunction pFgetAffinity = v8::CFunction((const void*)&getAffinityFast, &infogetAffinity); + + + +void createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u320 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u320->Buffer()->Data() + u320->ByteOffset(); + pthread_t* v0 = reinterpret_cast(ptr0); + const pthread_attr_t* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + start_routine v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + Local u83 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u83->Buffer()->Data() + u83->ByteOffset(); + void* v3 = reinterpret_cast(ptr3); + int32_t rc = pthread_create(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t createFast(void* p, struct FastApiTypedArray* const p0, void* p1, void* p2, struct FastApiTypedArray* const p3) { + pthread_t* v0 = reinterpret_cast(p0->data); + const pthread_attr_t* v1 = reinterpret_cast(p1); + start_routine v2 = reinterpret_cast(p2); + void* v3 = reinterpret_cast(p3->data); + return pthread_create(v0, v1, v2, v3); +} +void getcpuclockidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + __clockid_t* v1 = reinterpret_cast<__clockid_t*>(ptr1); + int32_t rc = pthread_getcpuclockid((pthread_t)v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getcpuclockidFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1) { + uint64_t v0 = p0; + __clockid_t* v1 = reinterpret_cast<__clockid_t*>(p1->data); + return pthread_getcpuclockid((pthread_t)v0, v1); +} +void cancelSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = pthread_cancel((pthread_t)v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t cancelFast(void* p, uint64_t p0) { + uint64_t v0 = p0; + return pthread_cancel((pthread_t)v0); +} +void selfSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + uint64_t rc = pthread_self(); + args.GetReturnValue().Set(Number::New(isolate, static_cast(rc))); +} + +void selfFast(void* p, struct FastApiTypedArray* const p_ret) { + + uint64_t r = pthread_self(); + ((uint64_t*)p_ret->data)[0] = r; + +} +void detachSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = pthread_detach((pthread_t)v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t detachFast(void* p, uint64_t p0) { + uint64_t v0 = p0; + return pthread_detach((pthread_t)v0); +} +void joinSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + void** v1 = reinterpret_cast(ptr1); + int32_t rc = pthread_join((pthread_t)v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t joinFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1) { + uint64_t v0 = p0; + void** v1 = reinterpret_cast(p1->data); + return pthread_join((pthread_t)v0, v1); +} +void exitSlow(const FunctionCallbackInfo &args) { + Local u320 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u320->Buffer()->Data() + u320->ByteOffset(); + void* v0 = reinterpret_cast(ptr0); + pthread_exit(v0); +} + +void exitFast(void* p, struct FastApiTypedArray* const p0) { + void* v0 = reinterpret_cast(p0->data); + pthread_exit(v0); +} +void tryJoinSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + void** v1 = reinterpret_cast(ptr1); + int32_t rc = pthread_tryjoin_np((pthread_t)v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tryJoinFast(void* p, uint64_t p0, struct FastApiTypedArray* const p1) { + uint64_t v0 = p0; + void** v1 = reinterpret_cast(p1->data); + return pthread_tryjoin_np((pthread_t)v0, v1); +} +void setNameSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = pthread_setname_np((pthread_t)v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setNameFast(void* p, uint64_t p0, struct FastOneByteString* const p1) { + uint64_t v0 = p0; + struct FastOneByteString* const v1 = p1; + return pthread_setname_np((pthread_t)v0, v1->data); +} +void setAffinitySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + cpu_set_t* v2 = reinterpret_cast(ptr2); + int32_t rc = pthread_setaffinity_np((pthread_t)v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setAffinityFast(void* p, uint64_t p0, uint32_t p1, struct FastApiTypedArray* const p2) { + uint64_t v0 = p0; + uint32_t v1 = p1; + cpu_set_t* v2 = reinterpret_cast(p2->data); + return pthread_setaffinity_np((pthread_t)v0, v1, v2); +} +void getAffinitySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint64_t v0 = Local::Cast(args[0])->Value(); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + cpu_set_t* v2 = reinterpret_cast(ptr2); + int32_t rc = pthread_getaffinity_np((pthread_t)v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getAffinityFast(void* p, uint64_t p0, uint32_t p1, struct FastApiTypedArray* const p2) { + uint64_t v0 = p0; + uint32_t v1 = p1; + cpu_set_t* v2 = reinterpret_cast(p2->data); + return pthread_getaffinity_np((pthread_t)v0, v1, v2); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "create", &pFcreate, createSlow); + SET_FAST_METHOD(isolate, module, "getcpuclockid", &pFgetcpuclockid, getcpuclockidSlow); + SET_FAST_METHOD(isolate, module, "cancel", &pFcancel, cancelSlow); + SET_FAST_METHOD(isolate, module, "self", &pFself, selfSlow); + SET_FAST_METHOD(isolate, module, "detach", &pFdetach, detachSlow); + SET_FAST_METHOD(isolate, module, "join", &pFjoin, joinSlow); + SET_FAST_METHOD(isolate, module, "exit", &pFexit, exitSlow); + SET_FAST_METHOD(isolate, module, "tryJoin", &pFtryJoin, tryJoinSlow); + SET_FAST_METHOD(isolate, module, "setName", &pFsetName, setNameSlow); + SET_FAST_METHOD(isolate, module, "setAffinity", &pFsetAffinity, setAffinitySlow); + SET_FAST_METHOD(isolate, module, "getAffinity", &pFgetAffinity, getAffinitySlow); + + + + SET_MODULE(isolate, target, "pthread", module); +} +} // namespace pthread +} // namespace lo + +extern "C" { + void* _register_pthread() { + return (void*)lo::pthread::Init; + } +} diff --git a/lib/repl.js b/lib/repl.js new file mode 100644 index 0000000..175af8b --- /dev/null +++ b/lib/repl.js @@ -0,0 +1,8 @@ +/* +this is a REPL +it only allows scripts to be executed, not async code to be awaited +we we will leave the duty of an async REPL to the hi project or the wider +community +*/ + + diff --git a/lib/seccomp/api.js b/lib/seccomp/api.js new file mode 100644 index 0000000..decca4a --- /dev/null +++ b/lib/seccomp/api.js @@ -0,0 +1,38 @@ +const api = { + seccomp_syscall_resolve_num_arch: { + parameters: ['i32', 'i32'], + result: 'pointer', + rpointer: 'const char*' + }, + seccomp_init: { + parameters: ['u32'], + result: 'pointer', + rpointer: 'scmp_filter_ctx' + }, + seccomp_rule_add_exact: { + parameters: ['pointer', 'u32', 'i32', 'u32'], + pointers: ['scmp_filter_ctx'], + result: 'i32' + }, + seccomp_load: { + parameters: ['pointer'], + pointers: ['scmp_filter_ctx'], + result: 'i32' + }, + seccomp_release: { + parameters: ['pointer'], + pointers: ['scmp_filter_ctx'], + result: 'void' + }, + seccomp_syscall_resolve_name: { + parameters: ['string'], + pointers: ['const char*'], + result: 'i32' + } +} + +const name = 'seccomp' +const includes = ['seccomp.h'] +const libs = ['seccomp'] + +export { api, name, includes, libs } diff --git a/lib/seccomp/seccomp.cc b/lib/seccomp/seccomp.cc new file mode 100644 index 0000000..9e7454e --- /dev/null +++ b/lib/seccomp/seccomp.cc @@ -0,0 +1,225 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace seccomp { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void seccomp_syscall_resolve_num_archFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsseccomp_syscall_resolve_num_arch[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcseccomp_syscall_resolve_num_arch = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoseccomp_syscall_resolve_num_arch = v8::CFunctionInfo(rcseccomp_syscall_resolve_num_arch, 4, cargsseccomp_syscall_resolve_num_arch); +v8::CFunction pFseccomp_syscall_resolve_num_arch = v8::CFunction((const void*)&seccomp_syscall_resolve_num_archFast, &infoseccomp_syscall_resolve_num_arch); + +void seccomp_initFast(void* p, uint32_t p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsseccomp_init[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcseccomp_init = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoseccomp_init = v8::CFunctionInfo(rcseccomp_init, 3, cargsseccomp_init); +v8::CFunction pFseccomp_init = v8::CFunction((const void*)&seccomp_initFast, &infoseccomp_init); + +int32_t seccomp_rule_add_exactFast(void* p, void* p0, uint32_t p1, int32_t p2, uint32_t p3); +v8::CTypeInfo cargsseccomp_rule_add_exact[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcseccomp_rule_add_exact = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoseccomp_rule_add_exact = v8::CFunctionInfo(rcseccomp_rule_add_exact, 5, cargsseccomp_rule_add_exact); +v8::CFunction pFseccomp_rule_add_exact = v8::CFunction((const void*)&seccomp_rule_add_exactFast, &infoseccomp_rule_add_exact); + +int32_t seccomp_loadFast(void* p, void* p0); +v8::CTypeInfo cargsseccomp_load[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcseccomp_load = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoseccomp_load = v8::CFunctionInfo(rcseccomp_load, 2, cargsseccomp_load); +v8::CFunction pFseccomp_load = v8::CFunction((const void*)&seccomp_loadFast, &infoseccomp_load); + +void seccomp_releaseFast(void* p, void* p0); +v8::CTypeInfo cargsseccomp_release[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcseccomp_release = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoseccomp_release = v8::CFunctionInfo(rcseccomp_release, 2, cargsseccomp_release); +v8::CFunction pFseccomp_release = v8::CFunction((const void*)&seccomp_releaseFast, &infoseccomp_release); + +int32_t seccomp_syscall_resolve_nameFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargsseccomp_syscall_resolve_name[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcseccomp_syscall_resolve_name = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoseccomp_syscall_resolve_name = v8::CFunctionInfo(rcseccomp_syscall_resolve_name, 2, cargsseccomp_syscall_resolve_name); +v8::CFunction pFseccomp_syscall_resolve_name = v8::CFunction((const void*)&seccomp_syscall_resolve_nameFast, &infoseccomp_syscall_resolve_name); + + + +void seccomp_syscall_resolve_num_archSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + const char* rc = seccomp_syscall_resolve_num_arch(v0, v1); + Local ab = args[2].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void seccomp_syscall_resolve_num_archFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + int32_t v0 = p0; + int32_t v1 = p1; + const char* r = seccomp_syscall_resolve_num_arch(v0, v1); + ((const char**)p_ret->data)[0] = r; + +} +void seccomp_initSlow(const FunctionCallbackInfo &args) { + uint32_t v0 = Local::Cast(args[0])->Value(); + scmp_filter_ctx rc = seccomp_init(v0); + Local ab = args[1].As()->Buffer(); + ((scmp_filter_ctx*)ab->Data())[0] = rc; +} + +void seccomp_initFast(void* p, uint32_t p0, struct FastApiTypedArray* const p_ret) { + uint32_t v0 = p0; + scmp_filter_ctx r = seccomp_init(v0); + ((scmp_filter_ctx*)p_ret->data)[0] = r; + +} +void seccomp_rule_add_exactSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + scmp_filter_ctx v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + uint32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = seccomp_rule_add_exact(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t seccomp_rule_add_exactFast(void* p, void* p0, uint32_t p1, int32_t p2, uint32_t p3) { + scmp_filter_ctx v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + int32_t v2 = p2; + uint32_t v3 = p3; + return seccomp_rule_add_exact(v0, v1, v2, v3); +} +void seccomp_loadSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + scmp_filter_ctx v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = seccomp_load(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t seccomp_loadFast(void* p, void* p0) { + scmp_filter_ctx v0 = reinterpret_cast(p0); + return seccomp_load(v0); +} +void seccomp_releaseSlow(const FunctionCallbackInfo &args) { + scmp_filter_ctx v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + seccomp_release(v0); +} + +void seccomp_releaseFast(void* p, void* p0) { + scmp_filter_ctx v0 = reinterpret_cast(p0); + seccomp_release(v0); +} +void seccomp_syscall_resolve_nameSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = seccomp_syscall_resolve_name(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t seccomp_syscall_resolve_nameFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return seccomp_syscall_resolve_name(v0->data); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "seccomp_syscall_resolve_num_arch", &pFseccomp_syscall_resolve_num_arch, seccomp_syscall_resolve_num_archSlow); + SET_FAST_METHOD(isolate, module, "seccomp_init", &pFseccomp_init, seccomp_initSlow); + SET_FAST_METHOD(isolate, module, "seccomp_rule_add_exact", &pFseccomp_rule_add_exact, seccomp_rule_add_exactSlow); + SET_FAST_METHOD(isolate, module, "seccomp_load", &pFseccomp_load, seccomp_loadSlow); + SET_FAST_METHOD(isolate, module, "seccomp_release", &pFseccomp_release, seccomp_releaseSlow); + SET_FAST_METHOD(isolate, module, "seccomp_syscall_resolve_name", &pFseccomp_syscall_resolve_name, seccomp_syscall_resolve_nameSlow); + + + + SET_MODULE(isolate, target, "seccomp", module); +} +} // namespace seccomp +} // namespace lo + +extern "C" { + void* _register_seccomp() { + return (void*)lo::seccomp::Init; + } +} diff --git a/lib/sqlite.js b/lib/sqlite.js new file mode 100644 index 0000000..2f62b15 --- /dev/null +++ b/lib/sqlite.js @@ -0,0 +1,378 @@ +//import { Library } from 'lib/ffi.js' +//import * as sqlite3 from 'bindings/sqlite/sqlite.js' + +//const sqlite = (new Library()).open('./libsqlite3.so').bind(sqlite3.api) + +// question - throw exceptions or not? + +const { sqlite } = lo.load('sqlite') + +const { + step, column_int, column_double, reset, finalize, + open2, exec, close2, prepare2, column_count, + column_type, column_bytes, bind_int, bind_int64, + bind_double, bind_text, bind_blob +} = sqlite + +const { assert, utf8Decode, utf8Length, readMemory, wrap, colors, addr, wrapMemory } = lo +const { AY, AD } = colors + +const u32 = new Uint32Array(2) +const errmsg = wrap(u32, sqlite.errmsg, 1) +const column_name = wrap(u32, sqlite.column_name, 2) +const column_text = wrap(u32, sqlite.column_text, 2) +const column_blob = wrap(u32, sqlite.column_blob, 2) + +const _serialize = wrap(u32, sqlite.serialize, 4) + +function sqlite_error (db) { + return `${AY}SQLite${AD} ${utf8Decode(errmsg(db), -1)}` +} + +const BLOB_WRITABLE = 1 +const BLOB_READONLY = 0 +const OK = 0 +const ROW = 100 +const DONE = 101 +const OPEN_CREATE = 0x00000004 +const OPEN_READWRITE = 0x00000002 +const OPEN_NOMUTEX = 0x00008000 + +class Database { + open (path, flags = OPEN_CREATE | OPEN_READWRITE | OPEN_NOMUTEX) { + assert(open2(path, u32, flags, 0) === OK) + this.db = u32[0] + ((2 ** 32) * u32[1]) + return this + } + + error () { + return sqlite_error(this.db) + } + + exec (sql) { + assert(exec(this.db, sql, 0, 0, u32) === OK) + return this + } + + prepare (sql) { + return (new Statement(this.db)).prepare(sql) + } + + readableBlob (table, col, row, database = 'main') { + return new Blob(this.db).open(table, col, row, BLOB_READONLY, database) + } + + writableBlob (table, col, row, database = 'main') { + return new Blob(this.db).open(table, col, row, BLOB_WRITABLE, database) + } + + close () { + assert(close2(this.db) === OK) + } + + serialize (name = 'main') { + const sz = new Uint32Array(2) + const address = _serialize(this.db, name, sz, 0) + return new Uint8Array(wrapMemory(address, addr(sz), 1)) + } +} + +class Blob { + #handle = 0 + #db = 0 + + constructor (db) { + this.#db = db + } + + open (table, col, row, flags = BLOB_WRITABLE, database = 'main') { + const bh = new Uint32Array(2) + assert(sqlite.blob_open(this.#db, database, table, col, row, flags, bh) === 0) + this.#handle = addr(bh) + return this + } + + read (u8, size = u8.length) { + assert(sqlite.blob_read(this.#handle, u8, size, 0) === 0) + } + + write (u8, size = u8.length) { + assert(sqlite.blob_write(this.#handle, u8, size, 0) === 0) + } + + bytes () { + return sqlite.blob_bytes(this.#handle) + } + + close () { + assert(sqlite.blob_close(this.#handle) === 0) + this.#handle = 0 + } +} + +class Statement { + types = [] + names = [] + columns = 0 + maxRows = 65536 + count = 0 + + constructor (db) { + this.db = db + } + + error () { + return sqlite_error(this.db) + } + + prepare (sql) { + assert(prepare2(this.db, sql, utf8Length(sql), u32, 0) === OK, () => this.error()) + this.stmt = u32[0] + ((2 ** 32) * u32[1]) + return this + } + + step () { + if (this.columns === 0) { + const { stmt } = this + const rc = step(stmt) + if (rc === ROW) { + this.columns = column_count(stmt) + for (let i = 0; i < this.columns; i++) { + this.names.push(utf8Decode(column_name(stmt, i), -1)) + this.types.push(column_type(stmt, i)) + } + } + return rc + } + return step(this.stmt) + } + + bindInt (index = 0, i) { + return bind_int(this.stmt, index, i) + } + + bindInt64 (index = 0, i) { + return bind_int64(this.stmt, index, i) + } + + bindDouble (index = 0, i) { + return bind_double(this.stmt, index, i) + } + + bindText (index = 0, str) { + return bind_text(this.stmt, index, str, utf8Length(str), -1) + } + + bindBlob (index = 0, u8) { + return bind_blob(this.stmt, index, u8, u8.length, 0) + } + + columnInt (index = 0) { + return column_int(this.stmt, index) + } + + columnBytes (index = 0) { + return column_bytes(this.stmt, index) + } + + columnDouble (index = 0) { + return column_double(this.stmt, index) + } + + columnText (index = 0) { + const ptr = column_text(this.stmt, index) + if (!ptr) return '' + return utf8Decode(ptr, -1) + } + + columnBlobInto (index = 0, u8) { + const ptr = column_blob(this.stmt, index) + if (!ptr) return 0 + const size = column_bytes(this.stmt, index) + if (size === 0) return size + readMemory(u8, ptr, size) + return size + } + + columnBlob (index = 0) { + const ptr = column_blob(this.stmt, index) + if (!ptr) return null + const size = column_bytes(this.stmt, index) + const u8 = new Uint8Array(size) + readMemory(u8, ptr, size) + return u8 + } + + reset () { + return reset(this.stmt) + } + + finalize () { + return finalize(this.stmt) + } + + get () { + const { types, names, stmt } = this + if(this.step() === ROW) { + const { columns } = this + const row = {} + for (let i = 0; i < columns; i++) { + if (types[i] === 1) { + row[names[i]] = column_int(stmt, i) + } else if (types[i] === 2) { + row[names[i]] = column_double(stmt, i) + } else if (types[i] === 3) { + row[names[i]] = this.columnText(i) + } else if (types[i] === 4) { + row[names[i]] = this.columnBlob(i) + } + } + this.reset() + return row + } + } + + all () { + const rows = [] + const { stmt } = this + let rc = step(stmt) + //let rc = this.step() + let count = 0 + if (!this.types.length) { + this.columns = column_count(stmt) + for (let i = 0; i < this.columns; i++) { + this.names.push(utf8Decode(column_name(stmt, i), -1)) + this.types.push(column_type(stmt, i)) + } + } + const { columns, names, types } = this + while (rc === ROW) { + const row = {} + for (let i = 0; i < columns; i++) { + // todo: these could be indexes into a function table + if (types[i] === 1) { + row[names[i]] = column_int(stmt, i) + } else if (types[i] === 2) { + row[names[i]] = column_double(stmt, i) + } else if (types[i] === 3) { + row[names[i]] = this.columnText(i) + } else if (types[i] === 4) { + row[names[i]] = this.columnBlob(i) + } + } + rows.push(row) + count++ + rc = step(stmt) + } + assert(rc === OK || rc === DONE) + this.count = count + this.reset() + return rows + } + +// todo - bindings + compile (className = 'Row', fixed = false) { + const { types, names, stmt } = this + + const rc = step(stmt) + if (rc === ROW) { + this.columns = column_count(stmt) + for (let i = 0; i < this.columns; i++) { + this.names.push(utf8Decode(column_name(stmt, i), -1)) + this.types.push(column_type(stmt, i)) + } + } + this.reset() + + const source = [] + let name + let i = 0 + source.push(`class ${className} {`) + for (const type of types) { + name = names[i] + if (type === 1) { + source.push(` ${name} = 0`) + } else if (type === 2) { + source.push(` ${name} = 0.0`) + } else if (type === 3) { + source.push(` ${name} = ''`) + } + i++ + } + source.push('}') + source.push(`return ${className}`) + this.Row = (new Function(source.join('\n')))() + this.rows = new Array(this.maxRows).fill(0).map(v => (new this.Row())) + source.length = 0 + source.push(` +const { types, names, cols, rows, stmt } = this +let rc = sqlite.step(stmt) +let i = 0 +while (rc === ${ROW}) { +`) + if (fixed) { + source.push(' const row = rows[i]') + } else { + source.push(` const row = rows[i] = new ${className}()`) + } + i = 0 + for (const type of types) { + if (type === 1) { + source.push(` row['${names[i]}'] = sqlite.column_int(stmt, ${i})`) + } else if (types[i] === 2) { + source.push(` row['${names[i]}'] = sqlite.column_double(stmt, ${i})`) + } else if (types[i] === 3) { + source.push(` row['${names[i]}'] = this.columnText(${i})`) + } else if (types[i] === 4) { + source.push(` row['${names[i]}'] = this.columnBlob(${i})`) + } + i++ + } + source.push(` + rc = sqlite.step(stmt) + i++ +} +this.count = i +sqlite.reset(stmt) +return rows.slice(0, i) +`) + const allsrc = source.join('\n').split('\n').filter(l => l).join('\n') + this.all = (new Function('sqlite', className, `return function () {\n${allsrc}\n}`))(sqlite, this.Row) + source.length = 0 + source.push(`const { types, names, rows, stmt } = this + `) + if (fixed) { + source.push('const row = rows[0]') + } else { + source.push(`const row = rows[0] = new ${className}()`) + } + source.push(`if (sqlite.step(stmt) === ${ROW}) {`) + i = 0 + for (const type of types) { + if (type === 1) { + source.push(` row['${names[i]}'] = sqlite.column_int(stmt, ${i})`) + } else if (types[i] === 2) { + source.push(` row['${names[i]}'] = sqlite.column_double(stmt, ${i})`) + } else if (types[i] === 3) { + source.push(` row['${names[i]}'] = this.columnText(${i})`) + } else if (types[i] === 4) { + source.push(` row['${names[i]}'] = this.columnBlob(${i})`) + } + i++ + } + source.push(`} +sqlite.reset(stmt) +return row +`) + const getsrc = source.join('\n').split('\n').filter(l => l).join('\n') + this.get = (new Function('sqlite', className, `return function () {\n${getsrc}\n}`))(sqlite, this.Row) + return this + } + +} + +sqlite.constants = { DONE, OK, ROW } + +export { Database, Statement, sqlite } + +// todo - check for errors on step and column functions diff --git a/lib/sqlite/api.js b/lib/sqlite/api.js new file mode 100644 index 0000000..454a0b9 --- /dev/null +++ b/lib/sqlite/api.js @@ -0,0 +1,251 @@ +const api = { + version: { + parameters: [], + pointers: [], + rpointer: 'const char*', + result: 'pointer', + name: 'sqlite3_libversion' + }, + open: { + name: 'sqlite3_open', + parameters: ['pointer', 'u32array'], + pointers: ['const char*', 'sqlite3 **'], + result: 'i32' + }, + open2: { + name: 'sqlite3_open_v2', + parameters: ['string', 'u32array', 'i32', 'pointer'], + pointers: ['const char*', 'sqlite3 **', , 'const char*'], + result: 'i32' + }, + exec: { + name: 'sqlite3_exec', + parameters: ['pointer', 'string', 'pointer', 'pointer', 'u32array'], + pointers: ['sqlite3*', 'const char*', 'callback',, 'char**'], + result: 'i32' + }, + exec2: { + name: 'sqlite3_exec', + parameters: ['pointer', 'string', 'pointer', 'pointer', 'u32array'], + pointers: ['sqlite3*', 'const char*', 'callback',, 'char**'], + result: 'i32', + nofast: true + }, + exec3: { + name: 'sqlite3_exec', + parameters: ['pointer', 'pointer', 'pointer', 'pointer', 'pointer'], + pointers: ['sqlite3*', 'const char*', 'callback',, 'char**'], + result: 'i32', + nofast: true + }, + exec4: { + name: 'sqlite3_exec', + parameters: ['pointer', 'pointer', 'pointer', 'pointer', 'pointer'], + pointers: ['sqlite3*', 'const char*', 'callback',, 'char**'], + result: 'i32' + }, + errmsg: { + name: 'sqlite3_errmsg', + parameters: ['pointer'], + pointers: ['sqlite3*'], + rpointer: 'const char*', + result: 'pointer' + }, + close2: { + name: 'sqlite3_close_v2', + parameters: ['pointer'], + pointers: ['sqlite3*'], + result: 'i32' + }, + prepare2: { + name: 'sqlite3_prepare_v2', + parameters: ['pointer', 'string', 'i32', 'u32array', 'pointer'], + pointers: ['sqlite3*', 'const char*', ,'sqlite3_stmt **', 'const char**'], + result: 'i32' + }, + finalize: { + name: 'sqlite3_finalize', + parameters: ['pointer'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + column_count: { + name: 'sqlite3_column_count', + parameters: ['pointer'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + column_type: { + name: 'sqlite3_column_type', + parameters: ['pointer', 'i32'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + column_name: { + name: 'sqlite3_column_name', + parameters: ['pointer', 'i32'], + pointers: ['sqlite3_stmt*'], + rpointer: 'const char*', + result: 'pointer' + }, + step: { + name: 'sqlite3_step', + parameters: ['pointer'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + reset: { + name: 'sqlite3_reset', + parameters: ['pointer'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + bind_int: { + name: 'sqlite3_bind_int', + parameters: ['pointer', 'i32', 'i32'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + bind_int64: { + name: 'sqlite3_bind_int64', + parameters: ['pointer', 'i32', 'u64'], + casts: [, , '(sqlite3_int64)'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + bind_double: { + name: 'sqlite3_bind_double', + parameters: ['pointer', 'i32', 'f64'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + bind_text: { + name: 'sqlite3_bind_text', + parameters: ['pointer', 'i32', 'string', 'i32', 'u64'], + casts: [, , , , '(sqlite3_destructor_type)'], + pointers: ['sqlite3_stmt*', , 'const char*'], + result: 'i32' + }, + bind_blob: { + name: 'sqlite3_bind_blob', + parameters: ['pointer', 'i32', 'buffer', 'i32', 'u64'], + casts: [, , , , '(sqlite3_destructor_type)'], + pointers: ['sqlite3_stmt*', , 'const void*'], + result: 'i32' + }, + column_int: { + name: 'sqlite3_column_int', + parameters: ['pointer', 'i32'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + column_double: { + name: 'sqlite3_column_double', + parameters: ['pointer', 'i32'], + pointers: ['sqlite3_stmt*'], + result: 'f32' + }, + column_text: { + name: 'sqlite3_column_text', + parameters: ['pointer', 'i32'], + rpointer: 'const unsigned char*', + pointers: ['sqlite3_stmt*'], + result: 'pointer' + }, + column_blob: { + name: 'sqlite3_column_blob', + parameters: ['pointer', 'i32'], + rpointer: 'const void*', + pointers: ['sqlite3_stmt*'], + result: 'pointer' + }, + column_bytes: { + name: 'sqlite3_column_bytes', + parameters: ['pointer', 'i32'], + pointers: ['sqlite3_stmt*'], + result: 'i32' + }, + blob_open: { + name: 'sqlite3_blob_open', + parameters: ['pointer', 'string', 'string', 'string', 'i64', 'i32', 'u32array'], + pointers: ['sqlite3*', , , , , , 'sqlite3_blob**'], + result: 'i32' + }, + blob_bytes: { + name: 'sqlite3_blob_bytes', + parameters: ['pointer'], + pointers: ['sqlite3_blob*'], + result: 'i32' + }, + blob_read: { + name: 'sqlite3_blob_read', + parameters: ['pointer', 'buffer', 'i32', 'i32'], + pointers: ['sqlite3_blob*'], + result: 'i32' + }, + blob_close: { + name: 'sqlite3_blob_close', + parameters: ['pointer'], + pointers: ['sqlite3_blob*'], + result: 'i32' + }, + blob_write: { + name: 'sqlite3_blob_write', + parameters: ['pointer', 'buffer', 'i32', 'i32'], + pointers: ['sqlite3_blob*'], + result: 'i32' + }, + serialize: { + name: 'sqlite3_serialize', + parameters: ['pointer', 'string', 'u32array', 'u32'], + pointers: ['sqlite3*', , 'sqlite3_int64*'], + result: 'pointer', + rpointer: 'unsigned char*' + }, + deserialize: { + name: 'sqlite3_deserialize', + parameters: ['pointer', 'string', 'buffer', 'u32', 'u32', 'u32'], + pointers: ['sqlite3*', , 'unsigned char*'], + result: 'i32' + } +} + +/* +sqlite3_bind_null +sqlite3_bind_parameter_count +sqlite3_bind_parameter_index +sqlite3_bind_parameter_name +sqlite3_bind_zeroblob +sqlite3_changes +sqlite3_clear_bindings +sqlite3_create_function_v2 +sqlite3_data_count +sqlite3_deserialize +sqlite3_errcode +sqlite3_errmsg +sqlite3_errstr +sqlite3_file_control +sqlite3_free +sqlite3_malloc64 +sqlite3_initialize +sqlite3_interrupt +sqlite3_memory_used +sqlite3_serialize +sqlite3_shutdown +sqlite3_sql +sqlite3_wal_checkpoint_v2 +sqlite3_wal_hook +*/ + +const includes = ['sqlite3.h'] +const name = 'sqlite' +const preamble = `typedef int (*callback)(void*,int,char**,char**);\n` +const obj = [] +const libs = ['sqlite3'] +const constants = { + SQLITE_OPEN_READWRITE: 'i32', SQLITE_OPEN_PRIVATECACHE: 'i32', + SQLITE_ROW: 'i32', SQLITE_OPEN_NOMUTEX: 'i32', SQLITE_OPEN_CREATE: 'i32', + SQLITE_OK: 'i32', SQLITE_OPEN_READONLY: 'i32' +} + +export { api, includes, name, preamble, obj, libs, constants } diff --git a/lib/sqlite/sqlite.cc b/lib/sqlite/sqlite.cc new file mode 100644 index 0000000..9127bfd --- /dev/null +++ b/lib/sqlite/sqlite.cc @@ -0,0 +1,978 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace sqlite { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + +typedef int (*callback)(void*,int,char**,char**); + + +void versionFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsversion[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcversion = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoversion = v8::CFunctionInfo(rcversion, 2, cargsversion); +v8::CFunction pFversion = v8::CFunction((const void*)&versionFast, &infoversion); + +int32_t openFast(void* p, void* p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsopen[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcopen = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoopen = v8::CFunctionInfo(rcopen, 3, cargsopen); +v8::CFunction pFopen = v8::CFunction((const void*)&openFast, &infoopen); + +int32_t open2Fast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, int32_t p2, void* p3); +v8::CTypeInfo cargsopen2[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcopen2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoopen2 = v8::CFunctionInfo(rcopen2, 5, cargsopen2); +v8::CFunction pFopen2 = v8::CFunction((const void*)&open2Fast, &infoopen2); + +int32_t execFast(void* p, void* p0, struct FastOneByteString* const p1, void* p2, void* p3, struct FastApiTypedArray* const p4); +v8::CTypeInfo cargsexec[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcexec = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoexec = v8::CFunctionInfo(rcexec, 6, cargsexec); +v8::CFunction pFexec = v8::CFunction((const void*)&execFast, &infoexec); + +int32_t exec4Fast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4); +v8::CTypeInfo cargsexec4[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcexec4 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoexec4 = v8::CFunctionInfo(rcexec4, 6, cargsexec4); +v8::CFunction pFexec4 = v8::CFunction((const void*)&exec4Fast, &infoexec4); + +void errmsgFast(void* p, void* p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargserrmsg[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcerrmsg = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoerrmsg = v8::CFunctionInfo(rcerrmsg, 3, cargserrmsg); +v8::CFunction pFerrmsg = v8::CFunction((const void*)&errmsgFast, &infoerrmsg); + +int32_t close2Fast(void* p, void* p0); +v8::CTypeInfo cargsclose2[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcclose2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoclose2 = v8::CFunctionInfo(rcclose2, 2, cargsclose2); +v8::CFunction pFclose2 = v8::CFunction((const void*)&close2Fast, &infoclose2); + +int32_t prepare2Fast(void* p, void* p0, struct FastOneByteString* const p1, int32_t p2, struct FastApiTypedArray* const p3, void* p4); +v8::CTypeInfo cargsprepare2[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcprepare2 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoprepare2 = v8::CFunctionInfo(rcprepare2, 6, cargsprepare2); +v8::CFunction pFprepare2 = v8::CFunction((const void*)&prepare2Fast, &infoprepare2); + +int32_t finalizeFast(void* p, void* p0); +v8::CTypeInfo cargsfinalize[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcfinalize = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofinalize = v8::CFunctionInfo(rcfinalize, 2, cargsfinalize); +v8::CFunction pFfinalize = v8::CFunction((const void*)&finalizeFast, &infofinalize); + +int32_t column_countFast(void* p, void* p0); +v8::CTypeInfo cargscolumn_count[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rccolumn_count = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocolumn_count = v8::CFunctionInfo(rccolumn_count, 2, cargscolumn_count); +v8::CFunction pFcolumn_count = v8::CFunction((const void*)&column_countFast, &infocolumn_count); + +int32_t column_typeFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargscolumn_type[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccolumn_type = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocolumn_type = v8::CFunctionInfo(rccolumn_type, 3, cargscolumn_type); +v8::CFunction pFcolumn_type = v8::CFunction((const void*)&column_typeFast, &infocolumn_type); + +void column_nameFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargscolumn_name[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rccolumn_name = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infocolumn_name = v8::CFunctionInfo(rccolumn_name, 4, cargscolumn_name); +v8::CFunction pFcolumn_name = v8::CFunction((const void*)&column_nameFast, &infocolumn_name); + +int32_t stepFast(void* p, void* p0); +v8::CTypeInfo cargsstep[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcstep = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infostep = v8::CFunctionInfo(rcstep, 2, cargsstep); +v8::CFunction pFstep = v8::CFunction((const void*)&stepFast, &infostep); + +int32_t resetFast(void* p, void* p0); +v8::CTypeInfo cargsreset[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcreset = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo inforeset = v8::CFunctionInfo(rcreset, 2, cargsreset); +v8::CFunction pFreset = v8::CFunction((const void*)&resetFast, &inforeset); + +int32_t bind_intFast(void* p, void* p0, int32_t p1, int32_t p2); +v8::CTypeInfo cargsbind_int[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcbind_int = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind_int = v8::CFunctionInfo(rcbind_int, 4, cargsbind_int); +v8::CFunction pFbind_int = v8::CFunction((const void*)&bind_intFast, &infobind_int); + +int32_t bind_int64Fast(void* p, void* p0, int32_t p1, uint64_t p2); +v8::CTypeInfo cargsbind_int64[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcbind_int64 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind_int64 = v8::CFunctionInfo(rcbind_int64, 4, cargsbind_int64); +v8::CFunction pFbind_int64 = v8::CFunction((const void*)&bind_int64Fast, &infobind_int64); + +int32_t bind_doubleFast(void* p, void* p0, int32_t p1, double p2); +v8::CTypeInfo cargsbind_double[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kFloat64), +}; +v8::CTypeInfo rcbind_double = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind_double = v8::CFunctionInfo(rcbind_double, 4, cargsbind_double); +v8::CFunction pFbind_double = v8::CFunction((const void*)&bind_doubleFast, &infobind_double); + +int32_t bind_textFast(void* p, void* p0, int32_t p1, struct FastOneByteString* const p2, int32_t p3, uint64_t p4); +v8::CTypeInfo cargsbind_text[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcbind_text = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind_text = v8::CFunctionInfo(rcbind_text, 6, cargsbind_text); +v8::CFunction pFbind_text = v8::CFunction((const void*)&bind_textFast, &infobind_text); + +int32_t bind_blobFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p2, int32_t p3, uint64_t p4); +v8::CTypeInfo cargsbind_blob[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcbind_blob = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infobind_blob = v8::CFunctionInfo(rcbind_blob, 6, cargsbind_blob); +v8::CFunction pFbind_blob = v8::CFunction((const void*)&bind_blobFast, &infobind_blob); + +int32_t column_intFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargscolumn_int[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccolumn_int = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocolumn_int = v8::CFunctionInfo(rccolumn_int, 3, cargscolumn_int); +v8::CFunction pFcolumn_int = v8::CFunction((const void*)&column_intFast, &infocolumn_int); + +float column_doubleFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargscolumn_double[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccolumn_double = v8::CTypeInfo(v8::CTypeInfo::Type::kFloat32); +v8::CFunctionInfo infocolumn_double = v8::CFunctionInfo(rccolumn_double, 3, cargscolumn_double); +v8::CFunction pFcolumn_double = v8::CFunction((const void*)&column_doubleFast, &infocolumn_double); + +void column_textFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargscolumn_text[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rccolumn_text = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infocolumn_text = v8::CFunctionInfo(rccolumn_text, 4, cargscolumn_text); +v8::CFunction pFcolumn_text = v8::CFunction((const void*)&column_textFast, &infocolumn_text); + +void column_blobFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargscolumn_blob[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rccolumn_blob = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infocolumn_blob = v8::CFunctionInfo(rccolumn_blob, 4, cargscolumn_blob); +v8::CFunction pFcolumn_blob = v8::CFunction((const void*)&column_blobFast, &infocolumn_blob); + +int32_t column_bytesFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargscolumn_bytes[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rccolumn_bytes = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infocolumn_bytes = v8::CFunctionInfo(rccolumn_bytes, 3, cargscolumn_bytes); +v8::CFunction pFcolumn_bytes = v8::CFunction((const void*)&column_bytesFast, &infocolumn_bytes); + +int32_t blob_openFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastOneByteString* const p2, struct FastOneByteString* const p3, int64_t p4, int32_t p5, struct FastApiTypedArray* const p6); +v8::CTypeInfo cargsblob_open[8] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcblob_open = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoblob_open = v8::CFunctionInfo(rcblob_open, 8, cargsblob_open); +v8::CFunction pFblob_open = v8::CFunction((const void*)&blob_openFast, &infoblob_open); + +int32_t blob_bytesFast(void* p, void* p0); +v8::CTypeInfo cargsblob_bytes[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcblob_bytes = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoblob_bytes = v8::CFunctionInfo(rcblob_bytes, 2, cargsblob_bytes); +v8::CFunction pFblob_bytes = v8::CFunction((const void*)&blob_bytesFast, &infoblob_bytes); + +int32_t blob_readFast(void* p, void* p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargsblob_read[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcblob_read = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoblob_read = v8::CFunctionInfo(rcblob_read, 5, cargsblob_read); +v8::CFunction pFblob_read = v8::CFunction((const void*)&blob_readFast, &infoblob_read); + +int32_t blob_closeFast(void* p, void* p0); +v8::CTypeInfo cargsblob_close[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcblob_close = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoblob_close = v8::CFunctionInfo(rcblob_close, 2, cargsblob_close); +v8::CFunction pFblob_close = v8::CFunction((const void*)&blob_closeFast, &infoblob_close); + +int32_t blob_writeFast(void* p, void* p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3); +v8::CTypeInfo cargsblob_write[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcblob_write = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoblob_write = v8::CFunctionInfo(rcblob_write, 5, cargsblob_write); +v8::CFunction pFblob_write = v8::CFunction((const void*)&blob_writeFast, &infoblob_write); + +void serializeFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p2, uint32_t p3, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsserialize[6] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcserialize = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoserialize = v8::CFunctionInfo(rcserialize, 6, cargsserialize); +v8::CFunction pFserialize = v8::CFunction((const void*)&serializeFast, &infoserialize); + +int32_t deserializeFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p2, uint32_t p3, uint32_t p4, uint32_t p5); +v8::CTypeInfo cargsdeserialize[7] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcdeserialize = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodeserialize = v8::CFunctionInfo(rcdeserialize, 7, cargsdeserialize); +v8::CFunction pFdeserialize = v8::CFunction((const void*)&deserializeFast, &infodeserialize); + + + +void versionSlow(const FunctionCallbackInfo &args) { + + const char* rc = sqlite3_libversion(); + Local ab = args[0].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void versionFast(void* p, struct FastApiTypedArray* const p_ret) { + + const char* r = sqlite3_libversion(); + ((const char**)p_ret->data)[0] = r; + +} +void openSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + const char* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + sqlite3 ** v1 = reinterpret_cast(ptr1); + int32_t rc = sqlite3_open(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t openFast(void* p, void* p0, struct FastApiTypedArray* const p1) { + const char* v0 = reinterpret_cast(p0); + sqlite3 ** v1 = reinterpret_cast(p1->data); + return sqlite3_open(v0, v1); +} +void open2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + sqlite3 ** v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + const char* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + int32_t rc = sqlite3_open_v2(*v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t open2Fast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, int32_t p2, void* p3) { + struct FastOneByteString* const v0 = p0; + sqlite3 ** v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + const char* v3 = reinterpret_cast(p3); + return sqlite3_open_v2(v0->data, v1, v2, v3); +} +void execSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + callback v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + Local u324 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u324->Buffer()->Data() + u324->ByteOffset(); + char** v4 = reinterpret_cast(ptr4); + int32_t rc = sqlite3_exec(v0, *v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t execFast(void* p, void* p0, struct FastOneByteString* const p1, void* p2, void* p3, struct FastApiTypedArray* const p4) { + sqlite3* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + callback v2 = reinterpret_cast(p2); + void* v3 = reinterpret_cast(p3); + char** v4 = reinterpret_cast(p4->data); + return sqlite3_exec(v0, v1->data, v2, v3, v4); +} +void exec2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + callback v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + Local u324 = args[4].As(); + uint8_t* ptr4 = (uint8_t*)u324->Buffer()->Data() + u324->ByteOffset(); + char** v4 = reinterpret_cast(ptr4); + int32_t rc = sqlite3_exec(v0, *v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +void exec3Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + callback v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + char** v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = sqlite3_exec(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +void exec4Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + callback v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + void* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + char** v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = sqlite3_exec(v0, v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t exec4Fast(void* p, void* p0, void* p1, void* p2, void* p3, void* p4) { + sqlite3* v0 = reinterpret_cast(p0); + const char* v1 = reinterpret_cast(p1); + callback v2 = reinterpret_cast(p2); + void* v3 = reinterpret_cast(p3); + char** v4 = reinterpret_cast(p4); + return sqlite3_exec(v0, v1, v2, v3, v4); +} +void errmsgSlow(const FunctionCallbackInfo &args) { + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + const char* rc = sqlite3_errmsg(v0); + Local ab = args[1].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void errmsgFast(void* p, void* p0, struct FastApiTypedArray* const p_ret) { + sqlite3* v0 = reinterpret_cast(p0); + const char* r = sqlite3_errmsg(v0); + ((const char**)p_ret->data)[0] = r; + +} +void close2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_close_v2(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t close2Fast(void* p, void* p0) { + sqlite3* v0 = reinterpret_cast(p0); + return sqlite3_close_v2(v0); +} +void prepare2Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t v2 = Local::Cast(args[2])->Value(); + Local u323 = args[3].As(); + uint8_t* ptr3 = (uint8_t*)u323->Buffer()->Data() + u323->ByteOffset(); + sqlite3_stmt ** v3 = reinterpret_cast(ptr3); + const char** v4 = reinterpret_cast((uint64_t)Local::Cast(args[4])->Value()); + int32_t rc = sqlite3_prepare_v2(v0, *v1, v2, v3, v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t prepare2Fast(void* p, void* p0, struct FastOneByteString* const p1, int32_t p2, struct FastApiTypedArray* const p3, void* p4) { + sqlite3* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + int32_t v2 = p2; + sqlite3_stmt ** v3 = reinterpret_cast(p3->data); + const char** v4 = reinterpret_cast(p4); + return sqlite3_prepare_v2(v0, v1->data, v2, v3, v4); +} +void finalizeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_finalize(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t finalizeFast(void* p, void* p0) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + return sqlite3_finalize(v0); +} +void column_countSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_column_count(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t column_countFast(void* p, void* p0) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + return sqlite3_column_count(v0); +} +void column_typeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = sqlite3_column_type(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t column_typeFast(void* p, void* p0, int32_t p1) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return sqlite3_column_type(v0, v1); +} +void column_nameSlow(const FunctionCallbackInfo &args) { + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + const char* rc = sqlite3_column_name(v0, v1); + Local ab = args[2].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void column_nameFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + const char* r = sqlite3_column_name(v0, v1); + ((const char**)p_ret->data)[0] = r; + +} +void stepSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_step(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t stepFast(void* p, void* p0) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + return sqlite3_step(v0); +} +void resetSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_reset(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t resetFast(void* p, void* p0) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + return sqlite3_reset(v0); +} +void bind_intSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = sqlite3_bind_int(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bind_intFast(void* p, void* p0, int32_t p1, int32_t p2) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + int32_t v2 = p2; + return sqlite3_bind_int(v0, v1, v2); +} +void bind_int64Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + uint64_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = sqlite3_bind_int64(v0, v1, (sqlite3_int64)v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bind_int64Fast(void* p, void* p0, int32_t p1, uint64_t p2) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + uint64_t v2 = p2; + return sqlite3_bind_int64(v0, v1, (sqlite3_int64)v2); +} +void bind_doubleSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + double v2 = Local::Cast(args[2])->Value(); + int32_t rc = sqlite3_bind_double(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bind_doubleFast(void* p, void* p0, int32_t p1, double p2) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + double v2 = p2; + return sqlite3_bind_double(v0, v1, v2); +} +void bind_textSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + String::Utf8Value v2(isolate, args[2]); + int32_t v3 = Local::Cast(args[3])->Value(); + uint64_t v4 = Local::Cast(args[4])->Value(); + int32_t rc = sqlite3_bind_text(v0, v1, *v2, v3, (sqlite3_destructor_type)v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bind_textFast(void* p, void* p0, int32_t p1, struct FastOneByteString* const p2, int32_t p3, uint64_t p4) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + struct FastOneByteString* const v2 = p2; + int32_t v3 = p3; + uint64_t v4 = p4; + return sqlite3_bind_text(v0, v1, v2->data, v3, (sqlite3_destructor_type)v4); +} +void bind_blobSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + const void* v2 = reinterpret_cast(ptr2); + int32_t v3 = Local::Cast(args[3])->Value(); + uint64_t v4 = Local::Cast(args[4])->Value(); + int32_t rc = sqlite3_bind_blob(v0, v1, v2, v3, (sqlite3_destructor_type)v4); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t bind_blobFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p2, int32_t p3, uint64_t p4) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + const void* v2 = reinterpret_cast(p2->data); + int32_t v3 = p3; + uint64_t v4 = p4; + return sqlite3_bind_blob(v0, v1, v2, v3, (sqlite3_destructor_type)v4); +} +void column_intSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = sqlite3_column_int(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t column_intFast(void* p, void* p0, int32_t p1) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return sqlite3_column_int(v0, v1); +} +void column_doubleSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + float rc = sqlite3_column_double(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +float column_doubleFast(void* p, void* p0, int32_t p1) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return sqlite3_column_double(v0, v1); +} +void column_textSlow(const FunctionCallbackInfo &args) { + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + const unsigned char* rc = sqlite3_column_text(v0, v1); + Local ab = args[2].As()->Buffer(); + ((const unsigned char**)ab->Data())[0] = rc; +} + +void column_textFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + const unsigned char* r = sqlite3_column_text(v0, v1); + ((const unsigned char**)p_ret->data)[0] = r; + +} +void column_blobSlow(const FunctionCallbackInfo &args) { + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + const void* rc = sqlite3_column_blob(v0, v1); + Local ab = args[2].As()->Buffer(); + ((const void**)ab->Data())[0] = rc; +} + +void column_blobFast(void* p, void* p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + const void* r = sqlite3_column_blob(v0, v1); + ((const void**)p_ret->data)[0] = r; + +} +void column_bytesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_stmt* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = sqlite3_column_bytes(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t column_bytesFast(void* p, void* p0, int32_t p1) { + sqlite3_stmt* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return sqlite3_column_bytes(v0, v1); +} +void blob_openSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + String::Utf8Value v2(isolate, args[2]); + String::Utf8Value v3(isolate, args[3]); + int64_t v4 = Local::Cast(args[4])->Value(); + int32_t v5 = Local::Cast(args[5])->Value(); + Local u326 = args[6].As(); + uint8_t* ptr6 = (uint8_t*)u326->Buffer()->Data() + u326->ByteOffset(); + sqlite3_blob** v6 = reinterpret_cast(ptr6); + int32_t rc = sqlite3_blob_open(v0, *v1, *v2, *v3, v4, v5, v6); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t blob_openFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastOneByteString* const p2, struct FastOneByteString* const p3, int64_t p4, int32_t p5, struct FastApiTypedArray* const p6) { + sqlite3* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + struct FastOneByteString* const v2 = p2; + struct FastOneByteString* const v3 = p3; + int64_t v4 = p4; + int32_t v5 = p5; + sqlite3_blob** v6 = reinterpret_cast(p6->data); + return sqlite3_blob_open(v0, v1->data, v2->data, v3->data, v4, v5, v6); +} +void blob_bytesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_blob* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_blob_bytes(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t blob_bytesFast(void* p, void* p0) { + sqlite3_blob* v0 = reinterpret_cast(p0); + return sqlite3_blob_bytes(v0); +} +void blob_readSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_blob* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = sqlite3_blob_read(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t blob_readFast(void* p, void* p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3) { + sqlite3_blob* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + int32_t v3 = p3; + return sqlite3_blob_read(v0, v1, v2, v3); +} +void blob_closeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_blob* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = sqlite3_blob_close(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t blob_closeFast(void* p, void* p0) { + sqlite3_blob* v0 = reinterpret_cast(p0); + return sqlite3_blob_close(v0); +} +void blob_writeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3_blob* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + void* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t rc = sqlite3_blob_write(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t blob_writeFast(void* p, void* p0, struct FastApiTypedArray* const p1, int32_t p2, int32_t p3) { + sqlite3_blob* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + int32_t v3 = p3; + return sqlite3_blob_write(v0, v1, v2, v3); +} +void serializeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + Local u322 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u322->Buffer()->Data() + u322->ByteOffset(); + sqlite3_int64* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + unsigned char* rc = sqlite3_serialize(v0, *v1, v2, v3); + Local ab = args[4].As()->Buffer(); + ((unsigned char**)ab->Data())[0] = rc; +} + +void serializeFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p2, uint32_t p3, struct FastApiTypedArray* const p_ret) { + sqlite3* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + sqlite3_int64* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + unsigned char* r = sqlite3_serialize(v0, v1->data, v2, v3); + ((unsigned char**)p_ret->data)[0] = r; + +} +void deserializeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + sqlite3* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + unsigned char* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t v4 = Local::Cast(args[4])->Value(); + uint32_t v5 = Local::Cast(args[5])->Value(); + int32_t rc = sqlite3_deserialize(v0, *v1, v2, v3, v4, v5); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t deserializeFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p2, uint32_t p3, uint32_t p4, uint32_t p5) { + sqlite3* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + unsigned char* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + uint32_t v4 = p4; + uint32_t v5 = p5; + return sqlite3_deserialize(v0, v1->data, v2, v3, v4, v5); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "version", &pFversion, versionSlow); + SET_FAST_METHOD(isolate, module, "open", &pFopen, openSlow); + SET_FAST_METHOD(isolate, module, "open2", &pFopen2, open2Slow); + SET_FAST_METHOD(isolate, module, "exec", &pFexec, execSlow); + SET_METHOD(isolate, module, "exec2", exec2Slow); + SET_METHOD(isolate, module, "exec3", exec3Slow); + SET_FAST_METHOD(isolate, module, "exec4", &pFexec4, exec4Slow); + SET_FAST_METHOD(isolate, module, "errmsg", &pFerrmsg, errmsgSlow); + SET_FAST_METHOD(isolate, module, "close2", &pFclose2, close2Slow); + SET_FAST_METHOD(isolate, module, "prepare2", &pFprepare2, prepare2Slow); + SET_FAST_METHOD(isolate, module, "finalize", &pFfinalize, finalizeSlow); + SET_FAST_METHOD(isolate, module, "column_count", &pFcolumn_count, column_countSlow); + SET_FAST_METHOD(isolate, module, "column_type", &pFcolumn_type, column_typeSlow); + SET_FAST_METHOD(isolate, module, "column_name", &pFcolumn_name, column_nameSlow); + SET_FAST_METHOD(isolate, module, "step", &pFstep, stepSlow); + SET_FAST_METHOD(isolate, module, "reset", &pFreset, resetSlow); + SET_FAST_METHOD(isolate, module, "bind_int", &pFbind_int, bind_intSlow); + SET_FAST_METHOD(isolate, module, "bind_int64", &pFbind_int64, bind_int64Slow); + SET_FAST_METHOD(isolate, module, "bind_double", &pFbind_double, bind_doubleSlow); + SET_FAST_METHOD(isolate, module, "bind_text", &pFbind_text, bind_textSlow); + SET_FAST_METHOD(isolate, module, "bind_blob", &pFbind_blob, bind_blobSlow); + SET_FAST_METHOD(isolate, module, "column_int", &pFcolumn_int, column_intSlow); + SET_FAST_METHOD(isolate, module, "column_double", &pFcolumn_double, column_doubleSlow); + SET_FAST_METHOD(isolate, module, "column_text", &pFcolumn_text, column_textSlow); + SET_FAST_METHOD(isolate, module, "column_blob", &pFcolumn_blob, column_blobSlow); + SET_FAST_METHOD(isolate, module, "column_bytes", &pFcolumn_bytes, column_bytesSlow); + SET_FAST_METHOD(isolate, module, "blob_open", &pFblob_open, blob_openSlow); + SET_FAST_METHOD(isolate, module, "blob_bytes", &pFblob_bytes, blob_bytesSlow); + SET_FAST_METHOD(isolate, module, "blob_read", &pFblob_read, blob_readSlow); + SET_FAST_METHOD(isolate, module, "blob_close", &pFblob_close, blob_closeSlow); + SET_FAST_METHOD(isolate, module, "blob_write", &pFblob_write, blob_writeSlow); + SET_FAST_METHOD(isolate, module, "serialize", &pFserialize, serializeSlow); + SET_FAST_METHOD(isolate, module, "deserialize", &pFdeserialize, deserializeSlow); + + SET_VALUE(isolate, module, "SQLITE_OPEN_READWRITE", Integer::New(isolate, SQLITE_OPEN_READWRITE)); + SET_VALUE(isolate, module, "SQLITE_OPEN_PRIVATECACHE", Integer::New(isolate, SQLITE_OPEN_PRIVATECACHE)); + SET_VALUE(isolate, module, "SQLITE_ROW", Integer::New(isolate, SQLITE_ROW)); + SET_VALUE(isolate, module, "SQLITE_OPEN_NOMUTEX", Integer::New(isolate, SQLITE_OPEN_NOMUTEX)); + SET_VALUE(isolate, module, "SQLITE_OPEN_CREATE", Integer::New(isolate, SQLITE_OPEN_CREATE)); + SET_VALUE(isolate, module, "SQLITE_OK", Integer::New(isolate, SQLITE_OK)); + SET_VALUE(isolate, module, "SQLITE_OPEN_READONLY", Integer::New(isolate, SQLITE_OPEN_READONLY)); + + + SET_MODULE(isolate, target, "sqlite", module); +} +} // namespace sqlite +} // namespace lo + +extern "C" { + void* _register_sqlite() { + return (void*)lo::sqlite::Init; + } +} diff --git a/lib/system/api.js b/lib/system/api.js new file mode 100644 index 0000000..b98510d --- /dev/null +++ b/lib/system/api.js @@ -0,0 +1,176 @@ +const api = { + mmap: { + parameters: ['pointer', 'u32', 'i32', 'i32', 'i32', 'u32'], + result: 'pointer' + }, + munmap: { + parameters: ['pointer', 'u32'], + result: 'i32' + }, + getcwd: { + parameters: ['buffer', 'i32'], + pointers: ['char*'], + result: 'pointer', + rpointer: ['char*'] + }, + eventfd: { + parameters: ['u32', 'i32'], + result: 'i32' + }, + clock_gettime: { + parameters: ['i32', 'pointer'], + pointers: [, 'timespec*'], + result: 'i32' + }, + mprotect: { + parameters: ['pointer', 'u32', 'i32'], + result: 'i32' + }, + memcpy: { + parameters: ['pointer', 'pointer', 'u32'], + result: 'pointer' + }, + memmove: { + parameters: ['pointer', 'pointer', 'u32'], + result: 'pointer' + }, + exit: { + parameters: ['i32'], + result: 'void' + }, + usleep: { + parameters: ['u32'], + result: 'i32' + }, + getpid: { + parameters: [], + result: 'i32' + }, + getrusage: { + parameters: ['i32', 'buffer'], + pointers: [, 'struct rusage*'], + result: 'i32' + }, + timerfd_create: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + sleep: { + parameters: ['u32'], + result: 'u32' + }, + timerfd_settime: { + parameters: ['i32', 'i32', 'buffer', 'pointer'], + pointers: [, , 'const struct itimerspec*', 'struct itimerspec*'], + result: 'i32' + }, + fork: { + parameters: [], + result: 'i32' + }, + kill: { + parameters: ['i32', 'i32'], + result: 'i32' + }, + waitpid: { + parameters: ['i32', 'buffer', 'i32'], + pointers: [, 'int*'], + result: 'i32' + }, + execvp: { + parameters: ['string', 'buffer'], + pointers: ['const char*', 'char* const*'], + result: 'i32' + }, + readlink: { + parameters: ['string', 'buffer', 'u32'], + pointers: ['const char*', 'char*'], + result: 'u32' + }, + sysconf: { + parameters: ['i32'], + result: 'u32' + }, + // TODO: allow hardcoding a value as params here + pidfd_open: { + parameters: ['i32', 'i32', 'u32'], + values: [], + result: 'i32', + name: 'syscall' + }, + gettid: { + parameters: ['i32'], + result: 'i32', + name: 'syscall' + }, + getrlimit: { + parameters: ['i32', 'u32array'], + pointers: [, 'struct rlimit*'], + result: 'i32' + }, + setrlimit: { + parameters: ['i32', 'u32array'], + pointers: [, 'const struct rlimit*'], + result: 'i32' + }, + strerror_r: { + parameters: ['i32', 'buffer', 'u32'], + pointers: [, 'char*'], + result: 'i32' + }, + times: { + parameters: ['buffer'], + pointers: ['struct tms*'], + result: 'i32' + }, + sysinfo: { + parameters: ['buffer'], + pointers: ['struct sysinfo*'], + result: 'u32' + }, + get_avphys_pages: { + parameters: [], + pointers: [], + result: 'u32' + }, + signal: { + parameters: ['i32', 'pointer'], + pointers: [, 'sighandler_t'], + rpointer: 'sighandler_t', + result: 'pointer' + }, + getenv: { + parameters: ['string'], + pointers: ['const char*'], + rpointer: 'char*', + result: 'pointer' + }, + calloc: { + parameters: ['u32', 'u32'], + result: 'pointer' + }, + free: { + parameters: ['pointer'], + result: 'void' + }, + memfd_create: { + parameters: ['string', 'u32'], + result: 'i32' + } +} + +const constants = { + _SC_CLK_TCK: 'u32', + UFFD_API: 'u64', + _UFFDIO_API: 'u32' +} + +const includes = [ + 'sys/eventfd.h', 'sys/times.h', 'sys/resource.h', 'unistd.h', 'sys/timerfd.h', + 'sys/wait.h', 'sys/sysinfo.h', 'signal.h', 'sys/mman.h', 'linux/userfaultfd.h' +] +const name = 'system' +const libs = [] +const obj = [] + +export { api, includes, name, libs, obj, constants } diff --git a/lib/system/system.cc b/lib/system/system.cc new file mode 100644 index 0000000..f09c8f9 --- /dev/null +++ b/lib/system/system.cc @@ -0,0 +1,954 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace lo { +namespace system { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void mmapFast(void* p, void* p0, uint32_t p1, int32_t p2, int32_t p3, int32_t p4, uint32_t p5, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsmmap[8] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcmmap = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infommap = v8::CFunctionInfo(rcmmap, 8, cargsmmap); +v8::CFunction pFmmap = v8::CFunction((const void*)&mmapFast, &infommap); + +int32_t munmapFast(void* p, void* p0, uint32_t p1); +v8::CTypeInfo cargsmunmap[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcmunmap = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infomunmap = v8::CFunctionInfo(rcmunmap, 3, cargsmunmap); +v8::CFunction pFmunmap = v8::CFunction((const void*)&munmapFast, &infomunmap); + +void getcwdFast(void* p, struct FastApiTypedArray* const p0, int32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsgetcwd[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcgetcwd = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogetcwd = v8::CFunctionInfo(rcgetcwd, 4, cargsgetcwd); +v8::CFunction pFgetcwd = v8::CFunction((const void*)&getcwdFast, &infogetcwd); + +int32_t eventfdFast(void* p, uint32_t p0, int32_t p1); +v8::CTypeInfo cargseventfd[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rceventfd = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoeventfd = v8::CFunctionInfo(rceventfd, 3, cargseventfd); +v8::CFunction pFeventfd = v8::CFunction((const void*)&eventfdFast, &infoeventfd); + +int32_t clock_gettimeFast(void* p, int32_t p0, void* p1); +v8::CTypeInfo cargsclock_gettime[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcclock_gettime = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoclock_gettime = v8::CFunctionInfo(rcclock_gettime, 3, cargsclock_gettime); +v8::CFunction pFclock_gettime = v8::CFunction((const void*)&clock_gettimeFast, &infoclock_gettime); + +int32_t mprotectFast(void* p, void* p0, uint32_t p1, int32_t p2); +v8::CTypeInfo cargsmprotect[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcmprotect = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infomprotect = v8::CFunctionInfo(rcmprotect, 4, cargsmprotect); +v8::CFunction pFmprotect = v8::CFunction((const void*)&mprotectFast, &infomprotect); + +void memcpyFast(void* p, void* p0, void* p1, uint32_t p2, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsmemcpy[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcmemcpy = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infomemcpy = v8::CFunctionInfo(rcmemcpy, 5, cargsmemcpy); +v8::CFunction pFmemcpy = v8::CFunction((const void*)&memcpyFast, &infomemcpy); + +void memmoveFast(void* p, void* p0, void* p1, uint32_t p2, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsmemmove[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcmemmove = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infomemmove = v8::CFunctionInfo(rcmemmove, 5, cargsmemmove); +v8::CFunction pFmemmove = v8::CFunction((const void*)&memmoveFast, &infomemmove); + +void exitFast(void* p, int32_t p0); +v8::CTypeInfo cargsexit[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcexit = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infoexit = v8::CFunctionInfo(rcexit, 2, cargsexit); +v8::CFunction pFexit = v8::CFunction((const void*)&exitFast, &infoexit); + +int32_t usleepFast(void* p, uint32_t p0); +v8::CTypeInfo cargsusleep[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcusleep = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infousleep = v8::CFunctionInfo(rcusleep, 2, cargsusleep); +v8::CFunction pFusleep = v8::CFunction((const void*)&usleepFast, &infousleep); + +int32_t getpidFast(void* p); +v8::CTypeInfo cargsgetpid[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcgetpid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetpid = v8::CFunctionInfo(rcgetpid, 1, cargsgetpid); +v8::CFunction pFgetpid = v8::CFunction((const void*)&getpidFast, &infogetpid); + +int32_t getrusageFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsgetrusage[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgetrusage = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetrusage = v8::CFunctionInfo(rcgetrusage, 3, cargsgetrusage); +v8::CFunction pFgetrusage = v8::CFunction((const void*)&getrusageFast, &infogetrusage); + +int32_t timerfd_createFast(void* p, int32_t p0, int32_t p1); +v8::CTypeInfo cargstimerfd_create[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rctimerfd_create = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotimerfd_create = v8::CFunctionInfo(rctimerfd_create, 3, cargstimerfd_create); +v8::CFunction pFtimerfd_create = v8::CFunction((const void*)&timerfd_createFast, &infotimerfd_create); + +uint32_t sleepFast(void* p, uint32_t p0); +v8::CTypeInfo cargssleep[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcsleep = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infosleep = v8::CFunctionInfo(rcsleep, 2, cargssleep); +v8::CFunction pFsleep = v8::CFunction((const void*)&sleepFast, &infosleep); + +int32_t timerfd_settimeFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p2, void* p3); +v8::CTypeInfo cargstimerfd_settime[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rctimerfd_settime = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotimerfd_settime = v8::CFunctionInfo(rctimerfd_settime, 5, cargstimerfd_settime); +v8::CFunction pFtimerfd_settime = v8::CFunction((const void*)&timerfd_settimeFast, &infotimerfd_settime); + +int32_t forkFast(void* p); +v8::CTypeInfo cargsfork[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcfork = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infofork = v8::CFunctionInfo(rcfork, 1, cargsfork); +v8::CFunction pFfork = v8::CFunction((const void*)&forkFast, &infofork); + +int32_t killFast(void* p, int32_t p0, int32_t p1); +v8::CTypeInfo cargskill[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rckill = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infokill = v8::CFunctionInfo(rckill, 3, cargskill); +v8::CFunction pFkill = v8::CFunction((const void*)&killFast, &infokill); + +int32_t waitpidFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2); +v8::CTypeInfo cargswaitpid[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcwaitpid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infowaitpid = v8::CFunctionInfo(rcwaitpid, 4, cargswaitpid); +v8::CFunction pFwaitpid = v8::CFunction((const void*)&waitpidFast, &infowaitpid); + +int32_t execvpFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsexecvp[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcexecvp = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoexecvp = v8::CFunctionInfo(rcexecvp, 3, cargsexecvp); +v8::CFunction pFexecvp = v8::CFunction((const void*)&execvpFast, &infoexecvp); + +uint32_t readlinkFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, uint32_t p2); +v8::CTypeInfo cargsreadlink[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcreadlink = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo inforeadlink = v8::CFunctionInfo(rcreadlink, 4, cargsreadlink); +v8::CFunction pFreadlink = v8::CFunction((const void*)&readlinkFast, &inforeadlink); + +uint32_t sysconfFast(void* p, int32_t p0); +v8::CTypeInfo cargssysconf[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcsysconf = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infosysconf = v8::CFunctionInfo(rcsysconf, 2, cargssysconf); +v8::CFunction pFsysconf = v8::CFunction((const void*)&sysconfFast, &infosysconf); + +int32_t pidfd_openFast(void* p, int32_t p0, int32_t p1, uint32_t p2); +v8::CTypeInfo cargspidfd_open[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcpidfd_open = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infopidfd_open = v8::CFunctionInfo(rcpidfd_open, 4, cargspidfd_open); +v8::CFunction pFpidfd_open = v8::CFunction((const void*)&pidfd_openFast, &infopidfd_open); + +int32_t gettidFast(void* p, int32_t p0); +v8::CTypeInfo cargsgettid[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rcgettid = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogettid = v8::CFunctionInfo(rcgettid, 2, cargsgettid); +v8::CFunction pFgettid = v8::CFunction((const void*)&gettidFast, &infogettid); + +int32_t getrlimitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsgetrlimit[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgetrlimit = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infogetrlimit = v8::CFunctionInfo(rcgetrlimit, 3, cargsgetrlimit); +v8::CFunction pFgetrlimit = v8::CFunction((const void*)&getrlimitFast, &infogetrlimit); + +int32_t setrlimitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargssetrlimit[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcsetrlimit = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infosetrlimit = v8::CFunctionInfo(rcsetrlimit, 3, cargssetrlimit); +v8::CFunction pFsetrlimit = v8::CFunction((const void*)&setrlimitFast, &infosetrlimit); + +int32_t strerror_rFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2); +v8::CTypeInfo cargsstrerror_r[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcstrerror_r = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infostrerror_r = v8::CFunctionInfo(rcstrerror_r, 4, cargsstrerror_r); +v8::CFunction pFstrerror_r = v8::CFunction((const void*)&strerror_rFast, &infostrerror_r); + +int32_t timesFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargstimes[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rctimes = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotimes = v8::CFunctionInfo(rctimes, 2, cargstimes); +v8::CFunction pFtimes = v8::CFunction((const void*)×Fast, &infotimes); + +uint32_t sysinfoFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargssysinfo[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcsysinfo = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infosysinfo = v8::CFunctionInfo(rcsysinfo, 2, cargssysinfo); +v8::CFunction pFsysinfo = v8::CFunction((const void*)&sysinfoFast, &infosysinfo); + +uint32_t get_avphys_pagesFast(void* p); +v8::CTypeInfo cargsget_avphys_pages[1] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + +}; +v8::CTypeInfo rcget_avphys_pages = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infoget_avphys_pages = v8::CFunctionInfo(rcget_avphys_pages, 1, cargsget_avphys_pages); +v8::CFunction pFget_avphys_pages = v8::CFunction((const void*)&get_avphys_pagesFast, &infoget_avphys_pages); + +void signalFast(void* p, int32_t p0, void* p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargssignal[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcsignal = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infosignal = v8::CFunctionInfo(rcsignal, 4, cargssignal); +v8::CFunction pFsignal = v8::CFunction((const void*)&signalFast, &infosignal); + +void getenvFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargsgetenv[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rcgetenv = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogetenv = v8::CFunctionInfo(rcgetenv, 3, cargsgetenv); +v8::CFunction pFgetenv = v8::CFunction((const void*)&getenvFast, &infogetenv); + +void callocFast(void* p, uint32_t p0, uint32_t p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargscalloc[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rccalloc = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infocalloc = v8::CFunctionInfo(rccalloc, 4, cargscalloc); +v8::CFunction pFcalloc = v8::CFunction((const void*)&callocFast, &infocalloc); + +void freeFast(void* p, void* p0); +v8::CTypeInfo cargsfree[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcfree = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infofree = v8::CFunctionInfo(rcfree, 2, cargsfree); +v8::CFunction pFfree = v8::CFunction((const void*)&freeFast, &infofree); + +int32_t memfd_createFast(void* p, struct FastOneByteString* const p0, uint32_t p1); +v8::CTypeInfo cargsmemfd_create[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcmemfd_create = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infomemfd_create = v8::CFunctionInfo(rcmemfd_create, 3, cargsmemfd_create); +v8::CFunction pFmemfd_create = v8::CFunction((const void*)&memfd_createFast, &infomemfd_create); + + + +void mmapSlow(const FunctionCallbackInfo &args) { + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t v3 = Local::Cast(args[3])->Value(); + int32_t v4 = Local::Cast(args[4])->Value(); + uint32_t v5 = Local::Cast(args[5])->Value(); + void* rc = mmap(v0, v1, v2, v3, v4, v5); + Local ab = args[6].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void mmapFast(void* p, void* p0, uint32_t p1, int32_t p2, int32_t p3, int32_t p4, uint32_t p5, struct FastApiTypedArray* const p_ret) { + void* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + int32_t v2 = p2; + int32_t v3 = p3; + int32_t v4 = p4; + uint32_t v5 = p5; + void* r = mmap(v0, v1, v2, v3, v4, v5); + ((void**)p_ret->data)[0] = r; + +} +void munmapSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = munmap(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t munmapFast(void* p, void* p0, uint32_t p1) { + void* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + return munmap(v0, v1); +} +void getcwdSlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + char* v0 = reinterpret_cast(ptr0); + int32_t v1 = Local::Cast(args[1])->Value(); + char* rc = getcwd(v0, v1); + Local ab = args[2].As()->Buffer(); + ((char**)ab->Data())[0] = rc; +} + +void getcwdFast(void* p, struct FastApiTypedArray* const p0, int32_t p1, struct FastApiTypedArray* const p_ret) { + char* v0 = reinterpret_cast(p0->data); + int32_t v1 = p1; + char* r = getcwd(v0, v1); + ((char**)p_ret->data)[0] = r; + +} +void eventfdSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = eventfd(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t eventfdFast(void* p, uint32_t p0, int32_t p1) { + uint32_t v0 = p0; + int32_t v1 = p1; + return eventfd(v0, v1); +} +void clock_gettimeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + timespec* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = clock_gettime(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t clock_gettimeFast(void* p, int32_t p0, void* p1) { + int32_t v0 = p0; + timespec* v1 = reinterpret_cast(p1); + return clock_gettime(v0, v1); +} +void mprotectSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = mprotect(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t mprotectFast(void* p, void* p0, uint32_t p1, int32_t p2) { + void* v0 = reinterpret_cast(p0); + uint32_t v1 = p1; + int32_t v2 = p2; + return mprotect(v0, v1, v2); +} +void memcpySlow(const FunctionCallbackInfo &args) { + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + void* rc = memcpy(v0, v1, v2); + Local ab = args[3].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void memcpyFast(void* p, void* p0, void* p1, uint32_t p2, struct FastApiTypedArray* const p_ret) { + void* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + void* r = memcpy(v0, v1, v2); + ((void**)p_ret->data)[0] = r; + +} +void memmoveSlow(const FunctionCallbackInfo &args) { + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + uint32_t v2 = Local::Cast(args[2])->Value(); + void* rc = memmove(v0, v1, v2); + Local ab = args[3].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void memmoveFast(void* p, void* p0, void* p1, uint32_t p2, struct FastApiTypedArray* const p_ret) { + void* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + uint32_t v2 = p2; + void* r = memmove(v0, v1, v2); + ((void**)p_ret->data)[0] = r; + +} +void exitSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + exit(v0); +} + +void exitFast(void* p, int32_t p0) { + int32_t v0 = p0; + exit(v0); +} +void usleepSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = usleep(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t usleepFast(void* p, uint32_t p0) { + uint32_t v0 = p0; + return usleep(v0); +} +void getpidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + int32_t rc = getpid(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getpidFast(void* p) { + + return getpid(); +} +void getrusageSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + struct rusage* v1 = reinterpret_cast(ptr1); + int32_t rc = getrusage(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getrusageFast(void* p, int32_t p0, struct FastApiTypedArray* const p1) { + int32_t v0 = p0; + struct rusage* v1 = reinterpret_cast(p1->data); + return getrusage(v0, v1); +} +void timerfd_createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = timerfd_create(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t timerfd_createFast(void* p, int32_t p0, int32_t p1) { + int32_t v0 = p0; + int32_t v1 = p1; + return timerfd_create(v0, v1); +} +void sleepSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + uint32_t v0 = Local::Cast(args[0])->Value(); + uint32_t rc = sleep(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t sleepFast(void* p, uint32_t p0) { + uint32_t v0 = p0; + return sleep(v0); +} +void timerfd_settimeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + const struct itimerspec* v2 = reinterpret_cast(ptr2); + struct itimerspec* v3 = reinterpret_cast((uint64_t)Local::Cast(args[3])->Value()); + int32_t rc = timerfd_settime(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t timerfd_settimeFast(void* p, int32_t p0, int32_t p1, struct FastApiTypedArray* const p2, void* p3) { + int32_t v0 = p0; + int32_t v1 = p1; + const struct itimerspec* v2 = reinterpret_cast(p2->data); + struct itimerspec* v3 = reinterpret_cast(p3); + return timerfd_settime(v0, v1, v2, v3); +} +void forkSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + int32_t rc = fork(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t forkFast(void* p) { + + return fork(); +} +void killSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = kill(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t killFast(void* p, int32_t p0, int32_t p1) { + int32_t v0 = p0; + int32_t v1 = p1; + return kill(v0, v1); +} +void waitpidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + int* v1 = reinterpret_cast(ptr1); + int32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = waitpid(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t waitpidFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, int32_t p2) { + int32_t v0 = p0; + int* v1 = reinterpret_cast(p1->data); + int32_t v2 = p2; + return waitpid(v0, v1, v2); +} +void execvpSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + char* const* v1 = reinterpret_cast(ptr1); + int32_t rc = execvp(*v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t execvpFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1) { + struct FastOneByteString* const v0 = p0; + char* const* v1 = reinterpret_cast(p1->data); + return execvp(v0->data, v1); +} +void readlinkSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + char* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + uint32_t rc = readlink(*v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t readlinkFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p1, uint32_t p2) { + struct FastOneByteString* const v0 = p0; + char* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + return readlink(v0->data, v1, v2); +} +void sysconfSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + uint32_t rc = sysconf(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t sysconfFast(void* p, int32_t p0) { + int32_t v0 = p0; + return sysconf(v0); +} +void pidfd_openSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t v1 = Local::Cast(args[1])->Value(); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = syscall(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t pidfd_openFast(void* p, int32_t p0, int32_t p1, uint32_t p2) { + int32_t v0 = p0; + int32_t v1 = p1; + uint32_t v2 = p2; + return syscall(v0, v1, v2); +} +void gettidSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + int32_t rc = syscall(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t gettidFast(void* p, int32_t p0) { + int32_t v0 = p0; + return syscall(v0); +} +void getrlimitSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + struct rlimit* v1 = reinterpret_cast(ptr1); + int32_t rc = getrlimit(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getrlimitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1) { + int32_t v0 = p0; + struct rlimit* v1 = reinterpret_cast(p1->data); + return getrlimit(v0, v1); +} +void setrlimitSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u321 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u321->Buffer()->Data() + u321->ByteOffset(); + const struct rlimit* v1 = reinterpret_cast(ptr1); + int32_t rc = setrlimit(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setrlimitFast(void* p, int32_t p0, struct FastApiTypedArray* const p1) { + int32_t v0 = p0; + const struct rlimit* v1 = reinterpret_cast(p1->data); + return setrlimit(v0, v1); +} +void strerror_rSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + int32_t v0 = Local::Cast(args[0])->Value(); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + char* v1 = reinterpret_cast(ptr1); + uint32_t v2 = Local::Cast(args[2])->Value(); + int32_t rc = strerror_r(v0, v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t strerror_rFast(void* p, int32_t p0, struct FastApiTypedArray* const p1, uint32_t p2) { + int32_t v0 = p0; + char* v1 = reinterpret_cast(p1->data); + uint32_t v2 = p2; + return strerror_r(v0, v1, v2); +} +void timesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + struct tms* v0 = reinterpret_cast(ptr0); + int32_t rc = times(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t timesFast(void* p, struct FastApiTypedArray* const p0) { + struct tms* v0 = reinterpret_cast(p0->data); + return times(v0); +} +void sysinfoSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + struct sysinfo* v0 = reinterpret_cast(ptr0); + uint32_t rc = sysinfo(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t sysinfoFast(void* p, struct FastApiTypedArray* const p0) { + struct sysinfo* v0 = reinterpret_cast(p0->data); + return sysinfo(v0); +} +void get_avphys_pagesSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + + uint32_t rc = get_avphys_pages(); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t get_avphys_pagesFast(void* p) { + + return get_avphys_pages(); +} +void signalSlow(const FunctionCallbackInfo &args) { + int32_t v0 = Local::Cast(args[0])->Value(); + sighandler_t v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + sighandler_t rc = signal(v0, v1); + Local ab = args[2].As()->Buffer(); + ((sighandler_t*)ab->Data())[0] = rc; +} + +void signalFast(void* p, int32_t p0, void* p1, struct FastApiTypedArray* const p_ret) { + int32_t v0 = p0; + sighandler_t v1 = reinterpret_cast(p1); + sighandler_t r = signal(v0, v1); + ((sighandler_t*)p_ret->data)[0] = r; + +} +void getenvSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + char* rc = getenv(*v0); + Local ab = args[1].As()->Buffer(); + ((char**)ab->Data())[0] = rc; +} + +void getenvFast(void* p, struct FastOneByteString* const p0, struct FastApiTypedArray* const p_ret) { + struct FastOneByteString* const v0 = p0; + char* r = getenv(v0->data); + ((char**)p_ret->data)[0] = r; + +} +void callocSlow(const FunctionCallbackInfo &args) { + uint32_t v0 = Local::Cast(args[0])->Value(); + uint32_t v1 = Local::Cast(args[1])->Value(); + void* rc = calloc(v0, v1); + Local ab = args[2].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void callocFast(void* p, uint32_t p0, uint32_t p1, struct FastApiTypedArray* const p_ret) { + uint32_t v0 = p0; + uint32_t v1 = p1; + void* r = calloc(v0, v1); + ((void**)p_ret->data)[0] = r; + +} +void freeSlow(const FunctionCallbackInfo &args) { + void* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + free(v0); +} + +void freeFast(void* p, void* p0) { + void* v0 = reinterpret_cast(p0); + free(v0); +} +void memfd_createSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + uint32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = memfd_create(*v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t memfd_createFast(void* p, struct FastOneByteString* const p0, uint32_t p1) { + struct FastOneByteString* const v0 = p0; + uint32_t v1 = p1; + return memfd_create(v0->data, v1); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "mmap", &pFmmap, mmapSlow); + SET_FAST_METHOD(isolate, module, "munmap", &pFmunmap, munmapSlow); + SET_FAST_METHOD(isolate, module, "getcwd", &pFgetcwd, getcwdSlow); + SET_FAST_METHOD(isolate, module, "eventfd", &pFeventfd, eventfdSlow); + SET_FAST_METHOD(isolate, module, "clock_gettime", &pFclock_gettime, clock_gettimeSlow); + SET_FAST_METHOD(isolate, module, "mprotect", &pFmprotect, mprotectSlow); + SET_FAST_METHOD(isolate, module, "memcpy", &pFmemcpy, memcpySlow); + SET_FAST_METHOD(isolate, module, "memmove", &pFmemmove, memmoveSlow); + SET_FAST_METHOD(isolate, module, "exit", &pFexit, exitSlow); + SET_FAST_METHOD(isolate, module, "usleep", &pFusleep, usleepSlow); + SET_FAST_METHOD(isolate, module, "getpid", &pFgetpid, getpidSlow); + SET_FAST_METHOD(isolate, module, "getrusage", &pFgetrusage, getrusageSlow); + SET_FAST_METHOD(isolate, module, "timerfd_create", &pFtimerfd_create, timerfd_createSlow); + SET_FAST_METHOD(isolate, module, "sleep", &pFsleep, sleepSlow); + SET_FAST_METHOD(isolate, module, "timerfd_settime", &pFtimerfd_settime, timerfd_settimeSlow); + SET_FAST_METHOD(isolate, module, "fork", &pFfork, forkSlow); + SET_FAST_METHOD(isolate, module, "kill", &pFkill, killSlow); + SET_FAST_METHOD(isolate, module, "waitpid", &pFwaitpid, waitpidSlow); + SET_FAST_METHOD(isolate, module, "execvp", &pFexecvp, execvpSlow); + SET_FAST_METHOD(isolate, module, "readlink", &pFreadlink, readlinkSlow); + SET_FAST_METHOD(isolate, module, "sysconf", &pFsysconf, sysconfSlow); + SET_FAST_METHOD(isolate, module, "pidfd_open", &pFpidfd_open, pidfd_openSlow); + SET_FAST_METHOD(isolate, module, "gettid", &pFgettid, gettidSlow); + SET_FAST_METHOD(isolate, module, "getrlimit", &pFgetrlimit, getrlimitSlow); + SET_FAST_METHOD(isolate, module, "setrlimit", &pFsetrlimit, setrlimitSlow); + SET_FAST_METHOD(isolate, module, "strerror_r", &pFstrerror_r, strerror_rSlow); + SET_FAST_METHOD(isolate, module, "times", &pFtimes, timesSlow); + SET_FAST_METHOD(isolate, module, "sysinfo", &pFsysinfo, sysinfoSlow); + SET_FAST_METHOD(isolate, module, "get_avphys_pages", &pFget_avphys_pages, get_avphys_pagesSlow); + SET_FAST_METHOD(isolate, module, "signal", &pFsignal, signalSlow); + SET_FAST_METHOD(isolate, module, "getenv", &pFgetenv, getenvSlow); + SET_FAST_METHOD(isolate, module, "calloc", &pFcalloc, callocSlow); + SET_FAST_METHOD(isolate, module, "free", &pFfree, freeSlow); + SET_FAST_METHOD(isolate, module, "memfd_create", &pFmemfd_create, memfd_createSlow); + + SET_VALUE(isolate, module, "_SC_CLK_TCK", Integer::New(isolate, _SC_CLK_TCK)); + SET_VALUE(isolate, module, "UFFD_API", BigInt::New(isolate, UFFD_API)); + SET_VALUE(isolate, module, "_UFFDIO_API", Integer::New(isolate, _UFFDIO_API)); + + + SET_MODULE(isolate, target, "system", module); +} +} // namespace system +} // namespace lo + +extern "C" { + void* _register_system() { + return (void*)lo::system::Init; + } +} diff --git a/lib/tcc/api.js b/lib/tcc/api.js new file mode 100644 index 0000000..028e24e --- /dev/null +++ b/lib/tcc/api.js @@ -0,0 +1,89 @@ +const api = { + tcc_new: { + parameters: [], + result: 'pointer' + }, + tcc_delete: { + parameters: ['pointer'], + pointers: ['TCCState*'], + result: 'void' + }, + tcc_set_output_type: { + parameters: ['pointer', 'i32'], + pointers: ['TCCState*'], + result: 'i32' + }, + tcc_set_options: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'void' + }, + tcc_add_library_path: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + }, + tcc_add_library: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + }, + tcc_add_include_path: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + }, + tcc_add_file: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + }, + tcc_compile_string: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + }, + tcc_relocate: { + parameters: ['pointer', 'pointer'], + pointers: ['TCCState*', 'void*'], + result: 'i32' + }, + tcc_get_symbol: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'pointer' + }, + tcc_add_symbol: { + parameters: ['pointer', 'string', 'pointer'], + pointers: ['TCCState*', 'const char*', 'const void*'], + result: 'i32' + }, + tcc_output_file: { + parameters: ['pointer', 'string'], + pointers: ['TCCState*', 'const char*'], + result: 'i32' + } +} + +const TCC_VERSION='0.9.27' + +const make = ` +# TODO: you need to do 'sudo apt install libtcc-dev' to get this to work as it needs a system lib to link against +# TODO: you also seem to need to have the tcc system library here. this sucks. /usr/local/lib/tcc/libtcc1.a + +libtcc.a: ## dependencies + mkdir -p deps + curl -L -o deps/tcc-${TCC_VERSION}.tar.bz2 http://download.savannah.gnu.org/releases/tinycc/tcc-${TCC_VERSION}.tar.bz2 + tar -jxvf deps/tcc-${TCC_VERSION}.tar.bz2 -C deps/ + cd deps/tcc-${TCC_VERSION} && CFLAGS='-mstackrealign -fPIC -flto -O3' ./configure && cd ../../ + make -C deps/tcc-${TCC_VERSION}/ libtcc.a + cp deps/tcc-0.9.27/libtcc.a ./ + cp deps/tcc-0.9.27/libtcc.h ./ + +` +const name = 'tcc' +const includes = ['libtcc.h'] +const libs = ['tcc'] +const obj = [] + +export { api, includes, name, libs, obj, make } diff --git a/lib/tcc/tcc.cc b/lib/tcc/tcc.cc new file mode 100644 index 0000000..0a35103 --- /dev/null +++ b/lib/tcc/tcc.cc @@ -0,0 +1,396 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace tcc { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +void tcc_newFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargstcc_new[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rctcc_new = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infotcc_new = v8::CFunctionInfo(rctcc_new, 2, cargstcc_new); +v8::CFunction pFtcc_new = v8::CFunction((const void*)&tcc_newFast, &infotcc_new); + +void tcc_deleteFast(void* p, void* p0); +v8::CTypeInfo cargstcc_delete[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rctcc_delete = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infotcc_delete = v8::CFunctionInfo(rctcc_delete, 2, cargstcc_delete); +v8::CFunction pFtcc_delete = v8::CFunction((const void*)&tcc_deleteFast, &infotcc_delete); + +int32_t tcc_set_output_typeFast(void* p, void* p0, int32_t p1); +v8::CTypeInfo cargstcc_set_output_type[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kInt32), +}; +v8::CTypeInfo rctcc_set_output_type = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_set_output_type = v8::CFunctionInfo(rctcc_set_output_type, 3, cargstcc_set_output_type); +v8::CFunction pFtcc_set_output_type = v8::CFunction((const void*)&tcc_set_output_typeFast, &infotcc_set_output_type); + +void tcc_set_optionsFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_set_options[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_set_options = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infotcc_set_options = v8::CFunctionInfo(rctcc_set_options, 3, cargstcc_set_options); +v8::CFunction pFtcc_set_options = v8::CFunction((const void*)&tcc_set_optionsFast, &infotcc_set_options); + +int32_t tcc_add_library_pathFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_add_library_path[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_add_library_path = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_add_library_path = v8::CFunctionInfo(rctcc_add_library_path, 3, cargstcc_add_library_path); +v8::CFunction pFtcc_add_library_path = v8::CFunction((const void*)&tcc_add_library_pathFast, &infotcc_add_library_path); + +int32_t tcc_add_libraryFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_add_library[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_add_library = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_add_library = v8::CFunctionInfo(rctcc_add_library, 3, cargstcc_add_library); +v8::CFunction pFtcc_add_library = v8::CFunction((const void*)&tcc_add_libraryFast, &infotcc_add_library); + +int32_t tcc_add_include_pathFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_add_include_path[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_add_include_path = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_add_include_path = v8::CFunctionInfo(rctcc_add_include_path, 3, cargstcc_add_include_path); +v8::CFunction pFtcc_add_include_path = v8::CFunction((const void*)&tcc_add_include_pathFast, &infotcc_add_include_path); + +int32_t tcc_add_fileFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_add_file[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_add_file = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_add_file = v8::CFunctionInfo(rctcc_add_file, 3, cargstcc_add_file); +v8::CFunction pFtcc_add_file = v8::CFunction((const void*)&tcc_add_fileFast, &infotcc_add_file); + +int32_t tcc_compile_stringFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_compile_string[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_compile_string = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_compile_string = v8::CFunctionInfo(rctcc_compile_string, 3, cargstcc_compile_string); +v8::CFunction pFtcc_compile_string = v8::CFunction((const void*)&tcc_compile_stringFast, &infotcc_compile_string); + +int32_t tcc_relocateFast(void* p, void* p0, void* p1); +v8::CTypeInfo cargstcc_relocate[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rctcc_relocate = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_relocate = v8::CFunctionInfo(rctcc_relocate, 3, cargstcc_relocate); +v8::CFunction pFtcc_relocate = v8::CFunction((const void*)&tcc_relocateFast, &infotcc_relocate); + +void tcc_get_symbolFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargstcc_get_symbol[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rctcc_get_symbol = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infotcc_get_symbol = v8::CFunctionInfo(rctcc_get_symbol, 4, cargstcc_get_symbol); +v8::CFunction pFtcc_get_symbol = v8::CFunction((const void*)&tcc_get_symbolFast, &infotcc_get_symbol); + +int32_t tcc_add_symbolFast(void* p, void* p0, struct FastOneByteString* const p1, void* p2); +v8::CTypeInfo cargstcc_add_symbol[4] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rctcc_add_symbol = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_add_symbol = v8::CFunctionInfo(rctcc_add_symbol, 4, cargstcc_add_symbol); +v8::CFunction pFtcc_add_symbol = v8::CFunction((const void*)&tcc_add_symbolFast, &infotcc_add_symbol); + +int32_t tcc_output_fileFast(void* p, void* p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargstcc_output_file[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rctcc_output_file = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infotcc_output_file = v8::CFunctionInfo(rctcc_output_file, 3, cargstcc_output_file); +v8::CFunction pFtcc_output_file = v8::CFunction((const void*)&tcc_output_fileFast, &infotcc_output_file); + + + +void tcc_newSlow(const FunctionCallbackInfo &args) { + + void* rc = tcc_new(); + Local ab = args[0].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void tcc_newFast(void* p, struct FastApiTypedArray* const p_ret) { + + void* r = tcc_new(); + ((void**)p_ret->data)[0] = r; + +} +void tcc_deleteSlow(const FunctionCallbackInfo &args) { + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + tcc_delete(v0); +} + +void tcc_deleteFast(void* p, void* p0) { + TCCState* v0 = reinterpret_cast(p0); + tcc_delete(v0); +} +void tcc_set_output_typeSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t v1 = Local::Cast(args[1])->Value(); + int32_t rc = tcc_set_output_type(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_set_output_typeFast(void* p, void* p0, int32_t p1) { + TCCState* v0 = reinterpret_cast(p0); + int32_t v1 = p1; + return tcc_set_output_type(v0, v1); +} +void tcc_set_optionsSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + tcc_set_options(v0, *v1); +} + +void tcc_set_optionsFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + tcc_set_options(v0, v1->data); +} +void tcc_add_library_pathSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_add_library_path(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_add_library_pathFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_add_library_path(v0, v1->data); +} +void tcc_add_librarySlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_add_library(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_add_libraryFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_add_library(v0, v1->data); +} +void tcc_add_include_pathSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_add_include_path(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_add_include_pathFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_add_include_path(v0, v1->data); +} +void tcc_add_fileSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_add_file(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_add_fileFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_add_file(v0, v1->data); +} +void tcc_compile_stringSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_compile_string(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_compile_stringFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_compile_string(v0, v1->data); +} +void tcc_relocateSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + void* v1 = reinterpret_cast((uint64_t)Local::Cast(args[1])->Value()); + int32_t rc = tcc_relocate(v0, v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_relocateFast(void* p, void* p0, void* p1) { + TCCState* v0 = reinterpret_cast(p0); + void* v1 = reinterpret_cast(p1); + return tcc_relocate(v0, v1); +} +void tcc_get_symbolSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + void* rc = tcc_get_symbol(v0, *v1); + Local ab = args[2].As()->Buffer(); + ((void**)ab->Data())[0] = rc; +} + +void tcc_get_symbolFast(void* p, void* p0, struct FastOneByteString* const p1, struct FastApiTypedArray* const p_ret) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + void* r = tcc_get_symbol(v0, v1->data); + ((void**)p_ret->data)[0] = r; + +} +void tcc_add_symbolSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + const void* v2 = reinterpret_cast((uint64_t)Local::Cast(args[2])->Value()); + int32_t rc = tcc_add_symbol(v0, *v1, v2); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_add_symbolFast(void* p, void* p0, struct FastOneByteString* const p1, void* p2) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + const void* v2 = reinterpret_cast(p2); + return tcc_add_symbol(v0, v1->data, v2); +} +void tcc_output_fileSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + TCCState* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = tcc_output_file(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t tcc_output_fileFast(void* p, void* p0, struct FastOneByteString* const p1) { + TCCState* v0 = reinterpret_cast(p0); + struct FastOneByteString* const v1 = p1; + return tcc_output_file(v0, v1->data); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "tcc_new", &pFtcc_new, tcc_newSlow); + SET_FAST_METHOD(isolate, module, "tcc_delete", &pFtcc_delete, tcc_deleteSlow); + SET_FAST_METHOD(isolate, module, "tcc_set_output_type", &pFtcc_set_output_type, tcc_set_output_typeSlow); + SET_FAST_METHOD(isolate, module, "tcc_set_options", &pFtcc_set_options, tcc_set_optionsSlow); + SET_FAST_METHOD(isolate, module, "tcc_add_library_path", &pFtcc_add_library_path, tcc_add_library_pathSlow); + SET_FAST_METHOD(isolate, module, "tcc_add_library", &pFtcc_add_library, tcc_add_librarySlow); + SET_FAST_METHOD(isolate, module, "tcc_add_include_path", &pFtcc_add_include_path, tcc_add_include_pathSlow); + SET_FAST_METHOD(isolate, module, "tcc_add_file", &pFtcc_add_file, tcc_add_fileSlow); + SET_FAST_METHOD(isolate, module, "tcc_compile_string", &pFtcc_compile_string, tcc_compile_stringSlow); + SET_FAST_METHOD(isolate, module, "tcc_relocate", &pFtcc_relocate, tcc_relocateSlow); + SET_FAST_METHOD(isolate, module, "tcc_get_symbol", &pFtcc_get_symbol, tcc_get_symbolSlow); + SET_FAST_METHOD(isolate, module, "tcc_add_symbol", &pFtcc_add_symbol, tcc_add_symbolSlow); + SET_FAST_METHOD(isolate, module, "tcc_output_file", &pFtcc_output_file, tcc_output_fileSlow); + + + + SET_MODULE(isolate, target, "tcc", module); +} +} // namespace tcc +} // namespace lo + +extern "C" { + void* _register_tcc() { + return (void*)lo::tcc::Init; + } +} diff --git a/lib/untar.js b/lib/untar.js new file mode 100644 index 0000000..e30dba1 --- /dev/null +++ b/lib/untar.js @@ -0,0 +1,111 @@ +import { mkDirAll, rmDirAll } from 'lib/fs.js' + +const { utf8Decode, ptr, assert } = lo +const { write, close, mkdir, open, O_TRUNC, O_CREAT, O_WRONLY } = lo.core + +// todo: refactor this +function getOctal (u8, off, len) { + let i = 0 + while ((u8[off] < 48 || u8[off] > 55) && len > 0) { + len-- + off++ + } + while (u8[off] >= 48 && u8[off] <= 55 && len > 0) { + i *= 8 + i += (u8[off] - 48) + len-- + off++ + } + return i +} + +// there has to be a quicker way of doing this +function isLastBlock (u8, off) { + for (let n = off + 511; n >= off; --n) if (u8[n] !== 0) return false + return true +} + +function verifyChecksum (u8, off) { + // todo +/* +static int +verify_checksum(const char *p) +{ + int n, u = 0; + for (n = 0; n < 512; ++n) { + if (n < 148 || n > 155) + u += ((unsigned char *)p)[n]; + else + u += 0x20; + + } + return (u == parseoct(p + 148, 8)); +} +*/ + return true +} + +// https://www.gnu.org/software/tar/manual/html_node/Dealing-with-Old-Files.html +function untar (u8, buf_size = u8.length) { + let size = buf_size + if (!u8.ptr) ptr(u8) + let off = 0 + let topDir + while (size) { + if (size < 512) throw new Error(`Bad Size ${size}`) + if (isLastBlock(u8, off)) { + off += 512 + size -= 512 + continue + } + if (!verifyChecksum(u8, off)) throw new Error('Checksum failed') + // todo - support filenames of 101-255 size + let fileName = utf8Decode(u8.ptr + off, -1) + const prefix = utf8Decode(u8.ptr + off + 345, -1) + let fileSize = getOctal(u8, off + 124, 12) + const fileType = u8[off + 156] - 48 + const fileMode = getOctal(u8, off + 100, 8) + let fd = 0 + if (fileType === 5) { + if (prefix.length) fileName = `${prefix}/${fileName}` + if (!topDir) { + topDir = fileName + mkDirAll(fileName, fileMode) + } else { + const r = mkdir(fileName, fileMode) + if (r !== 0) throw new Error(`could not make directory ${fileName}: errno ${lo.errno}`) + } + } else if ((fileType < 1 || fileType > 6) && fileType !== 55) { + if (prefix.length) fileName = `${prefix}/${fileName}` + if (topDir && fileName.indexOf(topDir) !== 0) throw new Error('Attempt to create file outside of top level Directory') + // todo: fix this + fd = open(fileName, O_TRUNC | O_CREAT | O_WRONLY, fileMode) + if (fd <= 2) throw new Error(`could not create file ${fileName} with mode ${fileMode}: errno ${lo.errno}`) + } + let todo = fileSize + let file_start = off + 512 + let file_size = 0 + while (todo > 0) { + off += 512 + size -= 512 + if (size <= 0) throw new Error(`Bad Size: ${size} for ${fileName}`) + let bytes = 512 + if (todo < 512) bytes = todo + if (fd) { + file_size += bytes + } + todo -= bytes + if (fd && todo === 0) { + const written = write(fd, u8.subarray(file_start, file_start + file_size), file_size) + if (written !== file_size) throw new Error(`Write Failed: errno ${lo.errno}, written ${written} bytes ${file_size}`) + close(fd) + fd = 0 + } + } + size -= 512 + off += 512 + } + assert(off === buf_size) +} + +export { untar } diff --git a/lib/wireguard/api.js b/lib/wireguard/api.js new file mode 100644 index 0000000..99875eb --- /dev/null +++ b/lib/wireguard/api.js @@ -0,0 +1,105 @@ +const api = { + set: { + parameters: ['pointer'], + pointers: ['wg_device*'], + result: 'i32', + name: 'wg_set_device' + }, + get: { + parameters: ['u32array', 'string'], + pointers: ['wg_device**', 'const char*'], + result: 'i32', + name: 'wg_get_device' + }, + add: { + parameters: ['string'], + pointers: ['const char*'], + result: 'i32', + name: 'wg_add_device' + }, + delete: { + parameters: ['string'], + pointers: ['const char*'], + result: 'i32', + name: 'wg_del_device' + }, + free: { + parameters: ['pointer'], + pointers: ['wg_device*'], + result: 'void', + name: 'wg_free_device' + }, + list: { + parameters: [], + rpointer: 'const char*', + result: 'pointer', + name: 'wg_list_device_names' + }, + keytobase64: { + parameters: ['buffer', 'buffer'], + pointers: ['wg_key_b64_string*', 'const wg_key*'], + casts: ['*', '*'], + result: 'void', + name: 'wg_key_to_base64' + }, + keyfrombase64: { + parameters: ['buffer', 'buffer'], + pointers: ['wg_key*', 'const wg_key_b64_string*'], + casts: ['*', '*'], + result: 'i32', + name: 'wg_key_from_base64' + }, + genpubKey: { + parameters: ['buffer', 'buffer'], + pointers: ['wg_key*', 'const wg_key*'], + casts: ['*', '*'], + result: 'void', + name: 'wg_generate_public_key' + }, + genprivKey: { + parameters: ['buffer'], + pointers: ['wg_key*'], + casts: ['*'], + result: 'void', + name: 'wg_generate_private_key' + }, + genpresharedKey: { + parameters: ['buffer'], + pointers: ['wg_key*'], + casts: ['*'], + result: 'void', + name: 'wg_generate_preshared_key' + } +} + +const includes = ['wireguard.h'] +const name = 'wireguard' +const obj = ['wg.o'] +const libs = [] + +import { fetch } from 'lib/curl.js' +import { exec } from 'lib/proc.js' +import { inflate } from 'lib/inflate.js' +import { untar } from 'lib/untar.js' + +const { assert } = lo +const { chdir, mkdir, S_IRWXU, S_IRWXG, S_IROTH, S_IXOTH, readFile, writeFile } = lo.core + +// todo: we should pass everything above in so it can be driven from non lo js runtimes +// or we could have a separate build.js script in the same directory as api.js? +async function build (C = 'gcc', CC = 'g++') { + mkdir('deps', S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) + fetch('https://codeload.github.com/WireGuard/wireguard-tools/tar.gz/master', 'deps/wireguard-tools.tar.gz') + chdir('deps') + const bytes = readFile('wireguard-tools.tar.gz') + untar(inflate(bytes)) + chdir('../') + const status = new Int32Array(2) + const CARGS = C.split(' ') + exec(CARGS[0], [...CARGS.slice(1), '-c', '-I.', '-mstackrealign', '-fPIC', '-O3', '-Ideps/wireguard-tools-master/contrib/embeddable-wg-library', '-o', 'wg.o', 'deps/wireguard-tools-master/contrib/embeddable-wg-library/wireguard.c'], status) + assert(status[0] === 0) + const header = readFile('deps/wireguard-tools-master/contrib/embeddable-wg-library/wireguard.h') + writeFile('wireguard.h', header) +} + +export { api, includes, name, obj, libs, build } diff --git a/lib/wireguard/wireguard.cc b/lib/wireguard/wireguard.cc new file mode 100644 index 0000000..ebe6d65 --- /dev/null +++ b/lib/wireguard/wireguard.cc @@ -0,0 +1,337 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include + +namespace lo { +namespace wireguard { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + + +int32_t setFast(void* p, void* p0); +v8::CTypeInfo cargsset[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcset = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoset = v8::CFunctionInfo(rcset, 2, cargsset); +v8::CFunction pFset = v8::CFunction((const void*)&setFast, &infoset); + +int32_t getFast(void* p, struct FastApiTypedArray* const p0, struct FastOneByteString* const p1); +v8::CTypeInfo cargsget[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcget = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoget = v8::CFunctionInfo(rcget, 3, cargsget); +v8::CFunction pFget = v8::CFunction((const void*)&getFast, &infoget); + +int32_t addFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargsadd[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcadd = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infoadd = v8::CFunctionInfo(rcadd, 2, cargsadd); +v8::CFunction pFadd = v8::CFunction((const void*)&addFast, &infoadd); + +int32_t deleteFast(void* p, struct FastOneByteString* const p0); +v8::CTypeInfo cargsdelete[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kSeqOneByteString), +}; +v8::CTypeInfo rcdelete = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infodelete = v8::CFunctionInfo(rcdelete, 2, cargsdelete); +v8::CFunction pFdelete = v8::CFunction((const void*)&deleteFast, &infodelete); + +void freeFast(void* p, void* p0); +v8::CTypeInfo cargsfree[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint64), +}; +v8::CTypeInfo rcfree = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infofree = v8::CFunctionInfo(rcfree, 2, cargsfree); +v8::CFunction pFfree = v8::CFunction((const void*)&freeFast, &infofree); + +void listFast(void* p, struct FastApiTypedArray* const p_ret); +v8::CTypeInfo cargslist[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32, v8::CTypeInfo::SequenceType::kIsTypedArray, v8::CTypeInfo::Flags::kNone) +}; +v8::CTypeInfo rclist = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infolist = v8::CFunctionInfo(rclist, 2, cargslist); +v8::CFunction pFlist = v8::CFunction((const void*)&listFast, &infolist); + +void keytobase64Fast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargskeytobase64[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rckeytobase64 = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infokeytobase64 = v8::CFunctionInfo(rckeytobase64, 3, cargskeytobase64); +v8::CFunction pFkeytobase64 = v8::CFunction((const void*)&keytobase64Fast, &infokeytobase64); + +int32_t keyfrombase64Fast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargskeyfrombase64[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rckeyfrombase64 = v8::CTypeInfo(v8::CTypeInfo::Type::kInt32); +v8::CFunctionInfo infokeyfrombase64 = v8::CFunctionInfo(rckeyfrombase64, 3, cargskeyfrombase64); +v8::CFunction pFkeyfrombase64 = v8::CFunction((const void*)&keyfrombase64Fast, &infokeyfrombase64); + +void genpubKeyFast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1); +v8::CTypeInfo cargsgenpubKey[3] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgenpubKey = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogenpubKey = v8::CFunctionInfo(rcgenpubKey, 3, cargsgenpubKey); +v8::CFunction pFgenpubKey = v8::CFunction((const void*)&genpubKeyFast, &infogenpubKey); + +void genprivKeyFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargsgenprivKey[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgenprivKey = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogenprivKey = v8::CFunctionInfo(rcgenprivKey, 2, cargsgenprivKey); +v8::CFunction pFgenprivKey = v8::CFunction((const void*)&genprivKeyFast, &infogenprivKey); + +void genpresharedKeyFast(void* p, struct FastApiTypedArray* const p0); +v8::CTypeInfo cargsgenpresharedKey[2] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), +}; +v8::CTypeInfo rcgenpresharedKey = v8::CTypeInfo(v8::CTypeInfo::Type::kVoid); +v8::CFunctionInfo infogenpresharedKey = v8::CFunctionInfo(rcgenpresharedKey, 2, cargsgenpresharedKey); +v8::CFunction pFgenpresharedKey = v8::CFunction((const void*)&genpresharedKeyFast, &infogenpresharedKey); + + + +void setSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + wg_device* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + int32_t rc = wg_set_device(v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t setFast(void* p, void* p0) { + wg_device* v0 = reinterpret_cast(p0); + return wg_set_device(v0); +} +void getSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u320 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u320->Buffer()->Data() + u320->ByteOffset(); + wg_device** v0 = reinterpret_cast(ptr0); + String::Utf8Value v1(isolate, args[1]); + int32_t rc = wg_get_device(v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t getFast(void* p, struct FastApiTypedArray* const p0, struct FastOneByteString* const p1) { + wg_device** v0 = reinterpret_cast(p0->data); + struct FastOneByteString* const v1 = p1; + return wg_get_device(v0, v1->data); +} +void addSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = wg_add_device(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t addFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return wg_add_device(v0->data); +} +void deleteSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + String::Utf8Value v0(isolate, args[0]); + int32_t rc = wg_del_device(*v0); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t deleteFast(void* p, struct FastOneByteString* const p0) { + struct FastOneByteString* const v0 = p0; + return wg_del_device(v0->data); +} +void freeSlow(const FunctionCallbackInfo &args) { + wg_device* v0 = reinterpret_cast((uint64_t)Local::Cast(args[0])->Value()); + wg_free_device(v0); +} + +void freeFast(void* p, void* p0) { + wg_device* v0 = reinterpret_cast(p0); + wg_free_device(v0); +} +void listSlow(const FunctionCallbackInfo &args) { + + const char* rc = wg_list_device_names(); + Local ab = args[0].As()->Buffer(); + ((const char**)ab->Data())[0] = rc; +} + +void listFast(void* p, struct FastApiTypedArray* const p_ret) { + + const char* r = wg_list_device_names(); + ((const char**)p_ret->data)[0] = r; + +} +void keytobase64Slow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + wg_key_b64_string* v0 = reinterpret_cast(ptr0); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const wg_key* v1 = reinterpret_cast(ptr1); + wg_key_to_base64(*v0, *v1); +} + +void keytobase64Fast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1) { + wg_key_b64_string* v0 = reinterpret_cast(p0->data); + const wg_key* v1 = reinterpret_cast(p1->data); + wg_key_to_base64(*v0, *v1); +} +void keyfrombase64Slow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + wg_key* v0 = reinterpret_cast(ptr0); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const wg_key_b64_string* v1 = reinterpret_cast(ptr1); + int32_t rc = wg_key_from_base64(*v0, *v1); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +int32_t keyfrombase64Fast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1) { + wg_key* v0 = reinterpret_cast(p0->data); + const wg_key_b64_string* v1 = reinterpret_cast(p1->data); + return wg_key_from_base64(*v0, *v1); +} +void genpubKeySlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + wg_key* v0 = reinterpret_cast(ptr0); + Local u81 = args[1].As(); + uint8_t* ptr1 = (uint8_t*)u81->Buffer()->Data() + u81->ByteOffset(); + const wg_key* v1 = reinterpret_cast(ptr1); + wg_generate_public_key(*v0, *v1); +} + +void genpubKeyFast(void* p, struct FastApiTypedArray* const p0, struct FastApiTypedArray* const p1) { + wg_key* v0 = reinterpret_cast(p0->data); + const wg_key* v1 = reinterpret_cast(p1->data); + wg_generate_public_key(*v0, *v1); +} +void genprivKeySlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + wg_key* v0 = reinterpret_cast(ptr0); + wg_generate_private_key(*v0); +} + +void genprivKeyFast(void* p, struct FastApiTypedArray* const p0) { + wg_key* v0 = reinterpret_cast(p0->data); + wg_generate_private_key(*v0); +} +void genpresharedKeySlow(const FunctionCallbackInfo &args) { + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + wg_key* v0 = reinterpret_cast(ptr0); + wg_generate_preshared_key(*v0); +} + +void genpresharedKeyFast(void* p, struct FastApiTypedArray* const p0) { + wg_key* v0 = reinterpret_cast(p0->data); + wg_generate_preshared_key(*v0); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "set", &pFset, setSlow); + SET_FAST_METHOD(isolate, module, "get", &pFget, getSlow); + SET_FAST_METHOD(isolate, module, "add", &pFadd, addSlow); + SET_FAST_METHOD(isolate, module, "delete", &pFdelete, deleteSlow); + SET_FAST_METHOD(isolate, module, "free", &pFfree, freeSlow); + SET_FAST_METHOD(isolate, module, "list", &pFlist, listSlow); + SET_FAST_METHOD(isolate, module, "keytobase64", &pFkeytobase64, keytobase64Slow); + SET_FAST_METHOD(isolate, module, "keyfrombase64", &pFkeyfrombase64, keyfrombase64Slow); + SET_FAST_METHOD(isolate, module, "genpubKey", &pFgenpubKey, genpubKeySlow); + SET_FAST_METHOD(isolate, module, "genprivKey", &pFgenprivKey, genprivKeySlow); + SET_FAST_METHOD(isolate, module, "genpresharedKey", &pFgenpresharedKey, genpresharedKeySlow); + + + + SET_MODULE(isolate, target, "wireguard", module); +} +} // namespace wireguard +} // namespace lo + +extern "C" { + void* _register_wireguard() { + return (void*)lo::wireguard::Init; + } +} diff --git a/lib/wireguard/wireguard.h b/lib/wireguard/wireguard.h new file mode 100644 index 0000000..328fcb4 --- /dev/null +++ b/lib/wireguard/wireguard.h @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2015-2020 Jason A. Donenfeld . All Rights Reserved. + */ + +#ifndef WIREGUARD_H +#define WIREGUARD_H + +#include +#include +#include +#include +#include +#include + +typedef uint8_t wg_key[32]; +typedef char wg_key_b64_string[((sizeof(wg_key) + 2) / 3) * 4 + 1]; + +/* Cross platform __kernel_timespec */ +struct timespec64 { + int64_t tv_sec; + int64_t tv_nsec; +}; + +typedef struct wg_allowedip { + uint16_t family; + union { + struct in_addr ip4; + struct in6_addr ip6; + }; + uint8_t cidr; + struct wg_allowedip *next_allowedip; +} wg_allowedip; + +enum wg_peer_flags { + WGPEER_REMOVE_ME = 1U << 0, + WGPEER_REPLACE_ALLOWEDIPS = 1U << 1, + WGPEER_HAS_PUBLIC_KEY = 1U << 2, + WGPEER_HAS_PRESHARED_KEY = 1U << 3, + WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL = 1U << 4 +}; + +typedef union wg_endpoint { + struct sockaddr addr; + struct sockaddr_in addr4; + struct sockaddr_in6 addr6; +} wg_endpoint; + +typedef struct wg_peer { + enum wg_peer_flags flags; + + wg_key public_key; + wg_key preshared_key; + + wg_endpoint endpoint; + + struct timespec64 last_handshake_time; + uint64_t rx_bytes, tx_bytes; + uint16_t persistent_keepalive_interval; + + struct wg_allowedip *first_allowedip, *last_allowedip; + struct wg_peer *next_peer; +} wg_peer; + +enum wg_device_flags { + WGDEVICE_REPLACE_PEERS = 1U << 0, + WGDEVICE_HAS_PRIVATE_KEY = 1U << 1, + WGDEVICE_HAS_PUBLIC_KEY = 1U << 2, + WGDEVICE_HAS_LISTEN_PORT = 1U << 3, + WGDEVICE_HAS_FWMARK = 1U << 4 +}; + +typedef struct wg_device { + char name[IFNAMSIZ]; + uint32_t ifindex; + + enum wg_device_flags flags; + + wg_key public_key; + wg_key private_key; + + uint32_t fwmark; + uint16_t listen_port; + + struct wg_peer *first_peer, *last_peer; +} wg_device; + +#define wg_for_each_device_name(__names, __name, __len) for ((__name) = (__names), (__len) = 0; ((__len) = strlen(__name)); (__name) += (__len) + 1) +#define wg_for_each_peer(__dev, __peer) for ((__peer) = (__dev)->first_peer; (__peer); (__peer) = (__peer)->next_peer) +#define wg_for_each_allowedip(__peer, __allowedip) for ((__allowedip) = (__peer)->first_allowedip; (__allowedip); (__allowedip) = (__allowedip)->next_allowedip) + +int wg_set_device(wg_device *dev); +int wg_get_device(wg_device **dev, const char *device_name); +int wg_add_device(const char *device_name); +int wg_del_device(const char *device_name); +void wg_free_device(wg_device *dev); +char *wg_list_device_names(void); /* first\0second\0third\0forth\0last\0\0 */ +void wg_key_to_base64(wg_key_b64_string base64, const wg_key key); +int wg_key_from_base64(wg_key key, const wg_key_b64_string base64); +bool wg_key_is_zero(const wg_key key); +void wg_generate_public_key(wg_key public_key, const wg_key private_key); +void wg_generate_private_key(wg_key private_key); +void wg_generate_preshared_key(wg_key preshared_key); + +#endif diff --git a/lib/zlib.js b/lib/zlib.js new file mode 100644 index 0000000..0f04806 --- /dev/null +++ b/lib/zlib.js @@ -0,0 +1,32 @@ +const { zlib } = lo.load('zlib') + +const { assert } = lo + +const DEFLATE = 8 +const OS_UNIX = 3 + +function header (buf) { + const [ id1, id2, cm, flg, , , , , xfl, os ] = buf.subarray(0, 10) + assert(id1 === 0x1f && id2 === 0x8b, 'gzip magic incorrect') + const FTEXT = (flg >> 7) & 0x01 + const FHCRC = (flg >> 6) & 0x01 + const FEXTRA = (flg >> 5) & 0x01 + const FNAME = (flg >> 4) & 0x01 + const FCOMMENT = (flg >> 3) & 0x01 + return { id1, id2, cm, flg, xfl, os, FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT } +} + +function inflate (buf) { + const [ id1, id2, cm, , , , , , , os ] = buf.subarray(0, 10) + assert(id1 === 0x1f && id2 === 0x8b, 'gzip magic incorrect') + assert(cm === DEFLATE, 'not a gzip deflate archive') + assert(os === OS_UNIX, 'not a unix os archive') + const header_view = new DataView(buf.buffer, buf.length - 8, 8) + const original_size = header_view.getUint32(4, true) + const dest = new Uint8Array(original_size) + const bytes = zlib.inflate(buf, buf.length, dest, dest.length) + assert(bytes === original_size, 'extracted size does not match') + return dest +} + +export { inflate, header } diff --git a/lib/zlib/api.js b/lib/zlib/api.js new file mode 100644 index 0000000..5f4a1a7 --- /dev/null +++ b/lib/zlib/api.js @@ -0,0 +1,60 @@ +const api = { + deflate: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['uint8_t*', ,'uint8_t*'], + result: 'u32', + name: 'zlib_deflate' + }, + inflate: { + parameters: ['buffer', 'u32', 'buffer', 'u32'], + pointers: ['uint8_t*', ,'uint8_t*'], + result: 'u32', + name: 'zlib_inflate' + } +} +const includes = ['zlib.h', 'stdint.h', 'stdlib.h'] +const preamble = ` +#define Z_DEFAULT_MEMLEVEL 8 + +uint32_t zlib_deflate (uint8_t* src, uint32_t ssize, uint8_t* dest, uint32_t dsize) { + z_stream* stream = (z_stream*)calloc(1, sizeof(z_stream)); + unsigned int compression = Z_DEFAULT_COMPRESSION; + int windowbits = 31; + deflateInit2(stream, compression, Z_DEFLATED, windowbits, Z_DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY); + stream->next_in = (Bytef*)src; + stream->avail_in = ssize; + stream->next_out = (Bytef*)dest; + stream->avail_out = dsize; + uint32_t avail_out = stream->avail_out; + uint32_t flush = Z_FINISH; + deflate(stream, flush); + uint32_t written = avail_out - stream->avail_out; + deflateEnd(stream); + free(stream); + return written; +} + +// todo: this api is kinda nasty - fix it +uint32_t zlib_inflate (uint8_t* src, uint32_t ssize, uint8_t* dest, uint32_t dsize) { + z_stream* stream = (z_stream*)calloc(1, sizeof(z_stream)); + int windowbits = 31; + inflateInit2(stream, windowbits); + stream->next_in = (Bytef*)src; + stream->avail_in = ssize; + stream->next_out = (Bytef*)dest; + stream->avail_out = dsize; + uint32_t avail_out = stream->avail_out; + uint32_t flush = Z_FINISH; + //fprintf(stderr, "before next_in %lu avail_in %u next_out %lu avail_out %u\\n", (uint64_t)stream->next_in, stream->avail_in, (uint64_t)stream->next_out, stream->avail_out); + inflate(stream, flush); + //fprintf(stderr, "after next_in %lu avail_in %u next_out %lu avail_out %u, rc = %i\\n", (uint64_t)stream->next_in, stream->avail_in, (uint64_t)stream->next_out, stream->avail_out, rc); + uint32_t written = avail_out - stream->avail_out; + inflateEnd(stream); + free(stream); + return written; +} +` +const libs = ['z'] +const name = 'zlib' + +export { api, libs, name, includes, preamble } diff --git a/lib/zlib/zlib.cc b/lib/zlib/zlib.cc new file mode 100644 index 0000000..3e768cd --- /dev/null +++ b/lib/zlib/zlib.cc @@ -0,0 +1,193 @@ + +// [do not edit,] +// This file has been automatically generated, please do not change unless you disable auto-generation in the Makefile +#include +#include +#include +#include + +namespace lo { +namespace zlib { + +using v8::String; +using v8::FunctionCallbackInfo; +using v8::Array; +using v8::Local; +using v8::ObjectTemplate; +using v8::Isolate; +using v8::Value; +using v8::Uint32Array; +using v8::ArrayBuffer; +using v8::Context; +using v8::Integer; +using v8::Function; +using v8::NewStringType; +using v8::Object; +using v8::BackingStore; +using v8::TryCatch; +using v8::ScriptCompiler; +using v8::Module; +using v8::FixedArray; +using v8::ScriptOrigin; +using v8::SharedArrayBuffer; +using v8::MaybeLocal; +using v8::HandleScope; +using v8::Promise; +using v8::Number; +using v8::StackTrace; +using v8::Message; +using v8::StackFrame; +using v8::Maybe; +using v8::FunctionTemplate; +using v8::FunctionCallback; +using v8::PromiseRejectMessage; +using v8::CFunction; +using v8::Global; +using v8::Exception; +using v8::CTypeInfo; +using v8::PropertyAttribute; +using v8::Signature; +using v8::ConstructorBehavior; +using v8::SideEffectType; +using v8::kPromiseRejectAfterResolved; +using v8::kPromiseResolveAfterResolved; +using v8::kPromiseHandlerAddedAfterReject; +using v8::Data; +using v8::PrimitiveArray; +using v8::TypedArray; +using v8::Uint8Array; +using v8::Boolean; +using v8::ModuleRequest; +using v8::CFunctionInfo; +using v8::OOMDetails; +using v8::V8; +using v8::BigInt; + + +#define Z_DEFAULT_MEMLEVEL 8 + +uint32_t zlib_deflate (uint8_t* src, uint32_t ssize, uint8_t* dest, uint32_t dsize) { + z_stream* stream = (z_stream*)calloc(1, sizeof(z_stream)); + unsigned int compression = Z_DEFAULT_COMPRESSION; + int windowbits = 31; + deflateInit2(stream, compression, Z_DEFLATED, windowbits, Z_DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY); + stream->next_in = (Bytef*)src; + stream->avail_in = ssize; + stream->next_out = (Bytef*)dest; + stream->avail_out = dsize; + uint32_t avail_out = stream->avail_out; + uint32_t flush = Z_FINISH; + deflate(stream, flush); + uint32_t written = avail_out - stream->avail_out; + deflateEnd(stream); + free(stream); + return written; +} + +// todo: this api is kinda nasty - fix it +uint32_t zlib_inflate (uint8_t* src, uint32_t ssize, uint8_t* dest, uint32_t dsize) { + z_stream* stream = (z_stream*)calloc(1, sizeof(z_stream)); + int windowbits = 31; + inflateInit2(stream, windowbits); + stream->next_in = (Bytef*)src; + stream->avail_in = ssize; + stream->next_out = (Bytef*)dest; + stream->avail_out = dsize; + uint32_t avail_out = stream->avail_out; + uint32_t flush = Z_FINISH; + //fprintf(stderr, "before next_in %lu avail_in %u next_out %lu avail_out %u\n", (uint64_t)stream->next_in, stream->avail_in, (uint64_t)stream->next_out, stream->avail_out); + inflate(stream, flush); + //fprintf(stderr, "after next_in %lu avail_in %u next_out %lu avail_out %u, rc = %i\n", (uint64_t)stream->next_in, stream->avail_in, (uint64_t)stream->next_out, stream->avail_out, rc); + uint32_t written = avail_out - stream->avail_out; + inflateEnd(stream); + free(stream); + return written; +} + + +uint32_t deflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargsdeflate[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcdeflate = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infodeflate = v8::CFunctionInfo(rcdeflate, 5, cargsdeflate); +v8::CFunction pFdeflate = v8::CFunction((const void*)&deflateFast, &infodeflate); + +uint32_t inflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3); +v8::CTypeInfo cargsinflate[5] = { + v8::CTypeInfo(v8::CTypeInfo::Type::kV8Value), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint8, CTypeInfo::SequenceType::kIsTypedArray, CTypeInfo::Flags::kNone), + v8::CTypeInfo(v8::CTypeInfo::Type::kUint32), +}; +v8::CTypeInfo rcinflate = v8::CTypeInfo(v8::CTypeInfo::Type::kUint32); +v8::CFunctionInfo infoinflate = v8::CFunctionInfo(rcinflate, 5, cargsinflate); +v8::CFunction pFinflate = v8::CFunction((const void*)&inflateFast, &infoinflate); + + + +void deflateSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + uint8_t* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + uint8_t* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = zlib_deflate(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t deflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + uint8_t* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + uint8_t* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return zlib_deflate(v0, v1, v2, v3); +} +void inflateSlow(const FunctionCallbackInfo &args) { + Isolate *isolate = args.GetIsolate(); + Local u80 = args[0].As(); + uint8_t* ptr0 = (uint8_t*)u80->Buffer()->Data() + u80->ByteOffset(); + uint8_t* v0 = reinterpret_cast(ptr0); + uint32_t v1 = Local::Cast(args[1])->Value(); + Local u82 = args[2].As(); + uint8_t* ptr2 = (uint8_t*)u82->Buffer()->Data() + u82->ByteOffset(); + uint8_t* v2 = reinterpret_cast(ptr2); + uint32_t v3 = Local::Cast(args[3])->Value(); + uint32_t rc = zlib_inflate(v0, v1, v2, v3); + args.GetReturnValue().Set(Number::New(isolate, rc)); +} + +uint32_t inflateFast(void* p, struct FastApiTypedArray* const p0, uint32_t p1, struct FastApiTypedArray* const p2, uint32_t p3) { + uint8_t* v0 = reinterpret_cast(p0->data); + uint32_t v1 = p1; + uint8_t* v2 = reinterpret_cast(p2->data); + uint32_t v3 = p3; + return zlib_inflate(v0, v1, v2, v3); +} + +void Init(Isolate* isolate, Local target) { + Local module = ObjectTemplate::New(isolate); + SET_FAST_METHOD(isolate, module, "deflate", &pFdeflate, deflateSlow); + SET_FAST_METHOD(isolate, module, "inflate", &pFinflate, inflateSlow); + + + + SET_MODULE(isolate, target, "zlib", module); +} +} // namespace zlib +} // namespace lo + +extern "C" { + void* _register_zlib() { + return (void*)lo::zlib::Init; + } +} diff --git a/lo.cc b/lo.cc index 9149a0a..4928afb 100644 --- a/lo.cc +++ b/lo.cc @@ -730,7 +730,8 @@ void lo::LoadModule(const FunctionCallbackInfo &args) { Local module; bool ok = ScriptCompiler::CompileModule(isolate, &base).ToLocal(&module); if (!ok) { - printf("Error compiling module!\n"); + String::Utf8Value path(args.GetIsolate(), args[1]); + fprintf(stderr, "Error compiling %s\n", *path); if (try_catch.HasCaught() && !try_catch.HasTerminated()) { try_catch.ReThrow(); } @@ -883,9 +884,12 @@ void lo::GetMeta(const FunctionCallbackInfo &args) { isExternal = buf->IsExternal(); isDetachable = buf->IsDetachable(); } - meta->Set(context, String::NewFromUtf8Literal(isolate, "isExternal", NewStringType::kInternalized), v8::Boolean::New(isolate, isExternal)).Check(); - meta->Set(context, String::NewFromUtf8Literal(isolate, "isDetachable", NewStringType::kInternalized), v8::Boolean::New(isolate, isDetachable)).Check(); - meta->Set(context, String::NewFromUtf8Literal(isolate, "isShared", NewStringType::kInternalized), v8::Boolean::New(isolate, isShared)).Check(); + meta->Set(context, String::NewFromUtf8Literal(isolate, "isExternal", + NewStringType::kInternalized), v8::Boolean::New(isolate, isExternal)).Check(); + meta->Set(context, String::NewFromUtf8Literal(isolate, "isDetachable", + NewStringType::kInternalized), v8::Boolean::New(isolate, isDetachable)).Check(); + meta->Set(context, String::NewFromUtf8Literal(isolate, "isShared", + NewStringType::kInternalized), v8::Boolean::New(isolate, isShared)).Check(); } void lo::ReadMemory(const FunctionCallbackInfo &args) { @@ -975,6 +979,7 @@ void lo::Utf8Encode(const FunctionCallbackInfo &args) { args.GetReturnValue().Set(Uint8Array::New(ab, 0, size)); } +// todo - we should have latin1 methods void lo::Utf8Decode(const FunctionCallbackInfo &args) { int size = -1; if (args.Length() > 1) { @@ -1086,7 +1091,7 @@ void lo::RunScript(const FunctionCallbackInfo &args) { } void lo::Os(const FunctionCallbackInfo &args) { -#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time +#ifdef __MACH__ args.GetReturnValue().Set(String::NewFromOneByte(args.GetIsolate(), (uint8_t*)"mac", NewStringType::kInternalized).ToLocalChecked()); #elif defined(_WIN64) @@ -1099,7 +1104,7 @@ void lo::Os(const FunctionCallbackInfo &args) { } void lo::Arch(const FunctionCallbackInfo &args) { -#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time +#ifdef __MACH__ #ifdef __x86_64__ args.GetReturnValue().Set(String::NewFromOneByte(args.GetIsolate(), (uint8_t*)"x64", NewStringType::kInternalized).ToLocalChecked()); @@ -1133,42 +1138,43 @@ void lo::Init(Isolate* isolate, Local target) { SET_VALUE(isolate, version, "v8", String::NewFromUtf8(isolate, V8::GetVersion()).ToLocalChecked()); SET_MODULE(isolate, target, "version", version); - SET_METHOD(isolate, target, "nextTick", NextTick); SET_METHOD(isolate, target, "print", Print); - SET_METHOD(isolate, target, "registerCallback", RegisterCallback); + SET_FAST_METHOD(isolate, target, "hrtime", &pFhrtime, HRTime); + SET_METHOD(isolate, target, "nextTick", NextTick); SET_METHOD(isolate, target, "runMicroTasks", RunMicroTasks); - SET_METHOD(isolate, target, "builtin", Builtin); - SET_METHOD(isolate, target, "library", Library); + SET_METHOD(isolate, target, "arch", Arch); + SET_METHOD(isolate, target, "os", Os); + SET_METHOD(isolate, target, "exit", Exit); + SET_FAST_PROP(isolate, target, "errno", &pFerrnoget, GetErrno, &pFerrnoset, + SetErrno); + SET_METHOD(isolate, target, "builtins", Builtins); + SET_METHOD(isolate, target, "builtin", Builtin); SET_METHOD(isolate, target, "libraries", Libraries); + SET_METHOD(isolate, target, "library", Library); SET_METHOD(isolate, target, "setModuleCallbacks", SetModuleCallbacks); SET_METHOD(isolate, target, "loadModule", LoadModule); SET_METHOD(isolate, target, "evaluateModule", EvaluateModule); + SET_METHOD(isolate, target, "utf8Decode", Utf8Decode); SET_METHOD(isolate, target, "utf8Encode", Utf8Encode); + SET_FAST_METHOD(isolate, target, "utf8Length", &pFutf8length, Utf8Length); + SET_FAST_METHOD(isolate, target, "utf8EncodeInto", &pFutf8encodeinto, + Utf8EncodeInto); + SET_FAST_METHOD(isolate, target, "utf8EncodeIntoAtOffset", + &pFutf8encodeintoatoffset, Utf8EncodeIntoAtOffset); + SET_METHOD(isolate, target, "wrapMemory", WrapMemory); SET_METHOD(isolate, target, "unwrapMemory", UnWrapMemory); + SET_FAST_METHOD(isolate, target, "getAddress", &pFgetaddress, GetAddress); + SET_FAST_METHOD(isolate, target, "readMemory", &pFreadmemory, ReadMemory); + SET_FAST_METHOD(isolate, target, "readMemoryAtOffset", &pFreadmemoryatoffset, + ReadMemoryAtOffset); + SET_METHOD(isolate, target, "setFlags", SetFlags); SET_METHOD(isolate, target, "getMeta", GetMeta); SET_METHOD(isolate, target, "runScript", RunScript); - - SET_METHOD(isolate, target, "arch", Arch); - SET_METHOD(isolate, target, "os", Os); - SET_METHOD(isolate, target, "exit", Exit); - -// arch, os - - SET_FAST_PROP(isolate, target, "errno", &pFerrnoget, GetErrno, &pFerrnoset, - SetErrno); - SET_FAST_METHOD(isolate, target, "hrtime", &pFhrtime, HRTime); - SET_FAST_METHOD(isolate, target, "getAddress", &pFgetaddress, GetAddress); - SET_FAST_METHOD(isolate, target, "utf8Length", &pFutf8length, Utf8Length); - SET_FAST_METHOD(isolate, target, "utf8EncodeInto", &pFutf8encodeinto, - Utf8EncodeInto); - SET_FAST_METHOD(isolate, target, "utf8EncodeIntoAtOffset", &pFutf8encodeintoatoffset, - Utf8EncodeIntoAtOffset); - SET_FAST_METHOD(isolate, target, "readMemory", &pFreadmemory, ReadMemory); - SET_FAST_METHOD(isolate, target, "readMemoryAtOffset", &pFreadmemoryatoffset, ReadMemoryAtOffset); + SET_METHOD(isolate, target, "registerCallback", RegisterCallback); } // C/FFI api for managing isolates diff --git a/main.cc b/main.cc index 2d0779f..83b989b 100644 --- a/main.cc +++ b/main.cc @@ -52,6 +52,7 @@ int main(int argc, char** argv) { // find a more efficient way of providing entropy at startup V8::SetEntropySource(EntropySource); V8::Initialize(); + V8::InitializeICU(); // register any builtins and modules that have been generated in main.h register_builtins(); // create a new isolate on the main thread. this will block until the diff --git a/main.h b/main.h index d9b6c6e..359f3a7 100644 --- a/main.h +++ b/main.h @@ -7,50 +7,114 @@ extern char _binary_main_js_start[]; extern char _binary_main_js_end[]; static unsigned int main_js_len = _binary_main_js_end - _binary_main_js_start; -extern char _binary_lib_asm_js_start[]; -extern char _binary_lib_asm_js_end[]; -extern char _binary_lib_ffi_js_start[]; -extern char _binary_lib_ffi_js_end[]; +extern char _binary_lib_bench_js_start[]; +extern char _binary_lib_bench_js_end[]; extern char _binary_lib_gen_js_start[]; extern char _binary_lib_gen_js_end[]; -extern char _binary_lib_path_js_start[]; -extern char _binary_lib_path_js_end[]; +extern char _binary_lib_fs_js_start[]; +extern char _binary_lib_fs_js_end[]; +extern char _binary_lib_untar_js_start[]; +extern char _binary_lib_untar_js_end[]; extern char _binary_lib_proc_js_start[]; extern char _binary_lib_proc_js_end[]; -extern char _binary_Makefile_start[]; -extern char _binary_Makefile_end[]; +extern char _binary_lib_path_js_start[]; +extern char _binary_lib_path_js_end[]; +extern char _binary_lib_inflate_js_start[]; +extern char _binary_lib_inflate_js_end[]; +extern char _binary_lib_curl_js_start[]; +extern char _binary_lib_curl_js_end[]; +extern char _binary_lib_build_js_start[]; +extern char _binary_lib_build_js_end[]; extern char _binary_main_cc_start[]; extern char _binary_main_cc_end[]; extern char _binary_lo_cc_start[]; extern char _binary_lo_cc_end[]; extern char _binary_lo_h_start[]; extern char _binary_lo_h_end[]; -extern char _binary_globals_d_ts_start[]; -extern char _binary_globals_d_ts_end[]; -extern char _binary_jsconfig_json_start[]; -extern char _binary_jsconfig_json_end[]; extern char _binary_lib_core_api_js_start[]; extern char _binary_lib_core_api_js_end[]; +extern char _binary_lib_curl_api_js_start[]; +extern char _binary_lib_curl_api_js_end[]; +extern char _binary_lib_encode_api_js_start[]; +extern char _binary_lib_encode_api_js_end[]; +extern char _binary_lib_epoll_api_js_start[]; +extern char _binary_lib_epoll_api_js_end[]; +extern char _binary_lib_inflate_api_js_start[]; +extern char _binary_lib_inflate_api_js_end[]; +extern char _binary_lib_inflate_em_inflate_c_start[]; +extern char _binary_lib_inflate_em_inflate_c_end[]; +extern char _binary_lib_inflate_em_inflate_h_start[]; +extern char _binary_lib_inflate_em_inflate_h_end[]; +extern char _binary_lib_libffi_api_js_start[]; +extern char _binary_lib_libffi_api_js_end[]; +extern char _binary_lib_libssl_api_js_start[]; +extern char _binary_lib_libssl_api_js_end[]; +extern char _binary_lib_lz4_api_js_start[]; +extern char _binary_lib_lz4_api_js_end[]; +extern char _binary_lib_mbedtls_api_js_start[]; +extern char _binary_lib_mbedtls_api_js_end[]; +extern char _binary_lib_net_api_js_start[]; +extern char _binary_lib_net_api_js_end[]; +extern char _binary_lib_pico_api_js_start[]; +extern char _binary_lib_pico_api_js_end[]; +extern char _binary_lib_pthread_api_js_start[]; +extern char _binary_lib_pthread_api_js_end[]; +extern char _binary_lib_seccomp_api_js_start[]; +extern char _binary_lib_seccomp_api_js_end[]; +extern char _binary_lib_sqlite_api_js_start[]; +extern char _binary_lib_sqlite_api_js_end[]; +extern char _binary_lib_system_api_js_start[]; +extern char _binary_lib_system_api_js_end[]; +extern char _binary_lib_tcc_api_js_start[]; +extern char _binary_lib_tcc_api_js_end[]; +extern char _binary_lib_wireguard_api_js_start[]; +extern char _binary_lib_wireguard_api_js_end[]; +extern char _binary_lib_zlib_api_js_start[]; +extern char _binary_lib_zlib_api_js_end[]; extern "C" { extern void* _register_core(); + extern void* _register_inflate(); + extern void* _register_curl(); } void register_builtins() { lo::builtins_add("main.js", _binary_main_js_start, _binary_main_js_end - _binary_main_js_start); - lo::builtins_add("lib/asm.js", _binary_lib_asm_js_start, _binary_lib_asm_js_end - _binary_lib_asm_js_start); - lo::builtins_add("lib/ffi.js", _binary_lib_ffi_js_start, _binary_lib_ffi_js_end - _binary_lib_ffi_js_start); + lo::builtins_add("lib/bench.js", _binary_lib_bench_js_start, _binary_lib_bench_js_end - _binary_lib_bench_js_start); lo::builtins_add("lib/gen.js", _binary_lib_gen_js_start, _binary_lib_gen_js_end - _binary_lib_gen_js_start); - lo::builtins_add("lib/path.js", _binary_lib_path_js_start, _binary_lib_path_js_end - _binary_lib_path_js_start); + lo::builtins_add("lib/fs.js", _binary_lib_fs_js_start, _binary_lib_fs_js_end - _binary_lib_fs_js_start); + lo::builtins_add("lib/untar.js", _binary_lib_untar_js_start, _binary_lib_untar_js_end - _binary_lib_untar_js_start); lo::builtins_add("lib/proc.js", _binary_lib_proc_js_start, _binary_lib_proc_js_end - _binary_lib_proc_js_start); - lo::builtins_add("Makefile", _binary_Makefile_start, _binary_Makefile_end - _binary_Makefile_start); + lo::builtins_add("lib/path.js", _binary_lib_path_js_start, _binary_lib_path_js_end - _binary_lib_path_js_start); + lo::builtins_add("lib/inflate.js", _binary_lib_inflate_js_start, _binary_lib_inflate_js_end - _binary_lib_inflate_js_start); + lo::builtins_add("lib/curl.js", _binary_lib_curl_js_start, _binary_lib_curl_js_end - _binary_lib_curl_js_start); + lo::builtins_add("lib/build.js", _binary_lib_build_js_start, _binary_lib_build_js_end - _binary_lib_build_js_start); lo::builtins_add("main.cc", _binary_main_cc_start, _binary_main_cc_end - _binary_main_cc_start); lo::builtins_add("lo.cc", _binary_lo_cc_start, _binary_lo_cc_end - _binary_lo_cc_start); lo::builtins_add("lo.h", _binary_lo_h_start, _binary_lo_h_end - _binary_lo_h_start); - lo::builtins_add("globals.d.ts", _binary_globals_d_ts_start, _binary_globals_d_ts_end - _binary_globals_d_ts_start); - lo::builtins_add("jsconfig.json", _binary_jsconfig_json_start, _binary_jsconfig_json_end - _binary_jsconfig_json_start); lo::builtins_add("lib/core/api.js", _binary_lib_core_api_js_start, _binary_lib_core_api_js_end - _binary_lib_core_api_js_start); + lo::builtins_add("lib/curl/api.js", _binary_lib_curl_api_js_start, _binary_lib_curl_api_js_end - _binary_lib_curl_api_js_start); + lo::builtins_add("lib/encode/api.js", _binary_lib_encode_api_js_start, _binary_lib_encode_api_js_end - _binary_lib_encode_api_js_start); + lo::builtins_add("lib/epoll/api.js", _binary_lib_epoll_api_js_start, _binary_lib_epoll_api_js_end - _binary_lib_epoll_api_js_start); + lo::builtins_add("lib/inflate/api.js", _binary_lib_inflate_api_js_start, _binary_lib_inflate_api_js_end - _binary_lib_inflate_api_js_start); + lo::builtins_add("lib/inflate/em_inflate.c", _binary_lib_inflate_em_inflate_c_start, _binary_lib_inflate_em_inflate_c_end - _binary_lib_inflate_em_inflate_c_start); + lo::builtins_add("lib/inflate/em_inflate.h", _binary_lib_inflate_em_inflate_h_start, _binary_lib_inflate_em_inflate_h_end - _binary_lib_inflate_em_inflate_h_start); + lo::builtins_add("lib/libffi/api.js", _binary_lib_libffi_api_js_start, _binary_lib_libffi_api_js_end - _binary_lib_libffi_api_js_start); + lo::builtins_add("lib/libssl/api.js", _binary_lib_libssl_api_js_start, _binary_lib_libssl_api_js_end - _binary_lib_libssl_api_js_start); + lo::builtins_add("lib/lz4/api.js", _binary_lib_lz4_api_js_start, _binary_lib_lz4_api_js_end - _binary_lib_lz4_api_js_start); + lo::builtins_add("lib/mbedtls/api.js", _binary_lib_mbedtls_api_js_start, _binary_lib_mbedtls_api_js_end - _binary_lib_mbedtls_api_js_start); + lo::builtins_add("lib/net/api.js", _binary_lib_net_api_js_start, _binary_lib_net_api_js_end - _binary_lib_net_api_js_start); + lo::builtins_add("lib/pico/api.js", _binary_lib_pico_api_js_start, _binary_lib_pico_api_js_end - _binary_lib_pico_api_js_start); + lo::builtins_add("lib/pthread/api.js", _binary_lib_pthread_api_js_start, _binary_lib_pthread_api_js_end - _binary_lib_pthread_api_js_start); + lo::builtins_add("lib/seccomp/api.js", _binary_lib_seccomp_api_js_start, _binary_lib_seccomp_api_js_end - _binary_lib_seccomp_api_js_start); + lo::builtins_add("lib/sqlite/api.js", _binary_lib_sqlite_api_js_start, _binary_lib_sqlite_api_js_end - _binary_lib_sqlite_api_js_start); + lo::builtins_add("lib/system/api.js", _binary_lib_system_api_js_start, _binary_lib_system_api_js_end - _binary_lib_system_api_js_start); + lo::builtins_add("lib/tcc/api.js", _binary_lib_tcc_api_js_start, _binary_lib_tcc_api_js_end - _binary_lib_tcc_api_js_start); + lo::builtins_add("lib/wireguard/api.js", _binary_lib_wireguard_api_js_start, _binary_lib_wireguard_api_js_end - _binary_lib_wireguard_api_js_start); + lo::builtins_add("lib/zlib/api.js", _binary_lib_zlib_api_js_start, _binary_lib_zlib_api_js_end - _binary_lib_zlib_api_js_start); lo::modules_add("core", &_register_core); + lo::modules_add("inflate", &_register_inflate); + lo::modules_add("curl", &_register_curl); } static const char* main_js = _binary_main_js_start; @@ -59,4 +123,3 @@ static unsigned int _v8flags_from_commandline = 1; static unsigned int _v8_threads = 2; static unsigned int _v8_cleanup = 0; static unsigned int _on_exit = 0; - diff --git a/main.js b/main.js index 67736ed..0f6b35d 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,4 @@ -const { - utf8EncodeInto, utf8Encode, utf8Decode, getAddress, args, exit, builtin, - library, workerSource, loadModule, evaluateModule, hrtime, wrapMemory -} = lo -const { core } = library('core') - // global classes class TextEncoder { @@ -37,24 +31,25 @@ class TextDecoder { function assert (condition, message, ErrorType = Error) { if (!condition) { if (message && message.constructor.name === 'Function') { - throw new ErrorType(message()) + throw new ErrorType(message(condition)) } throw new ErrorType(message || "Assertion failed") } return condition } -function wrap (h, fn, plen = 0) { +function wrap (handle, fn, plen = 0) { const call = fn const params = (new Array(plen)).fill(0).map((_, i) => `p${i}`).join(', ') + // TODO: Number.IsSafeInteger check - return BigInt if not safe const f = new Function( - 'h', + 'handle', 'call', `return function ${fn.name} (${params}) { - call(${params}${plen > 0 ? ', ' : ''}h); - return h[0] + ((2 ** 32) * h[1]); + call(${params}${plen > 0 ? ', ' : ''}handle); + return handle[0] + ((2 ** 32) * handle[1]); }`,) - const fun = f(h, call) + const fun = f(handle, call) if (fn.state) fun.state = fn.state return fun } @@ -75,30 +70,38 @@ function addr (u32) { return u32[0] + ((2 ** 32) * u32[1]) } -function read_file (path, flags = O_RDONLY) { +function read_file_bytes (path, size = 0) { + let off = 0 + let len = 0 + const fd = open(path, O_RDONLY) + assert(fd > 0, `failed to open ${path} with flags ${flags}`) + if (size === 0) { + fstat(fd, stat) + size = stat32[12] || 64 * 1024 + } + const u8 = new Uint8Array(size) + while ((len = read(fd, u8, size - off)) > 0) off += len + assert(close(fd) === 0) + return u8 +} + + +function read_file (path, flags = O_RDONLY, size = 0) { const fd = open(path, flags) assert(fd > 0, `failed to open ${path} with flags ${flags}`) - let r = fstat(fd, stat) - assert(r === 0) - let size = 0 - if (core.os === 'mac') { - size = Number(st[12]) - } else { - size = Number(st[6]) + if (size === 0) { + assert(fstat(fd, stat) === 0) + if (core.os === 'mac') { + size = Number(st[12]) + } else { + size = Number(st[6]) + } } - const buf = new Uint8Array(size) let off = 0 - let len = read(fd, buf, size) - while (len > 0) { - off += len - if (off === size) break - len = read(fd, buf, size) - } - off += len - r = close(fd) - assert(r === 0) - assert(off >= size) - return buf + let len = 0 + const u8 = new Uint8Array(size) + while ((len = read(fd, u8, size - off)) > 0) off += len + return u8 } function write_file (path, u8, flags = defaultWriteFlags, @@ -123,7 +126,13 @@ function write_file (path, u8, flags = defaultWriteFlags, function load (name) { if (libCache.has(name)) return libCache.get(name) - let lib = library(name) + let lib + if (core.binding_loader) { + lib = core.binding_loader(name) + if (!lib) lib = library(name) + } else { + lib = library(name) + } if (lib) { lib.internal = true libCache.set(name, lib) @@ -143,11 +152,38 @@ function load (name) { // internal functions -function load_source (specifier) { - // todo: we don't need to go into c to check if it exists - let src = lo.builtin(specifier) - if (!src) { - src = decoder.decode(read_file(specifier)) +function load_source_sync (specifier) { + let src = '' + if (core.sync_loader) { + src = core.sync_loader(specifier) + if (src) return src + } + src = lo.builtin(specifier) + if (!src || (LO_CACHE === 1)) { + // todo: path.join + try { + src = decoder.decode(read_file(specifier)) + } catch (err) { + src = decoder.decode(read_file(`${LO_HOME}${specifier}`)) + } + } + return src +} + +async function load_source (specifier) { + let src = '' + if (core.loader) { + src = await core.loader(specifier) + if (src) return src + } + src = lo.builtin(specifier) + if (!src || (LO_CACHE === 1)) { + // todo: path.join + try { + src = decoder.decode(read_file(specifier)) + } catch (err) { + src = decoder.decode(read_file(`${LO_HOME}${specifier}`)) + } } return src } @@ -163,13 +199,14 @@ async function on_module_load (specifier, resource) { return mod.namespace } // todo: allow overriding loadSource - return a promise - const src = load_source(specifier) + // todo: this should be async + const src = await load_source(specifier) const mod = loadModule(src, specifier) mod.resource = resource moduleCache.set(specifier, mod) const { requests } = mod for (const request of requests) { - const src = load_source(request) + const src = await load_source(request) const mod = loadModule(src, request) moduleCache.set(request, mod) } @@ -181,40 +218,53 @@ async function on_module_load (specifier, resource) { } function on_module_instantiate (specifier) { + //lo.print(`on_module_instantiate: ${specifier}\n`) if (moduleCache.has(specifier)) { return moduleCache.get(specifier).identity } - const src = load_source(specifier) + const src = load_source_sync(specifier) const mod = loadModule(src, specifier) moduleCache.set(specifier, mod) return mod.identity } -function require (fileName) { - if (requireCache.has(fileName)) { - return requireCache.get(fileName).exports +/** +* an approximation of node.js synchronous require. not sure if this should +* be here at all but it's useful for compatibility testing +* ``` +* @param file_path {string} path to the file to be required +*/ +function require (file_path) { + if (requireCache.has(file_path)) { + return requireCache.get(file_path).exports } - const src = load_source(fileName) + // todo: this is now async + const src = load_source_sync(file_path) const f = new Function('exports', 'module', 'require', src) const mod = { exports: {} } f.call(globalThis, mod.exports, mod, require) - moduleCache.set(fileName, mod) + moduleCache.set(file_path, mod) return mod.exports } +/** +* handle any exceptions in async code that did not have a handler +* the best thing to do is die gracefully and log as much as possible +* we should make what happens here configurable +* @param err { Error } a javascript Error object +*/ function on_unhandled_rejection (err) { console.error(`${AR}Unhandled Rejection${AD}`) - console.error(err.stack) - exit(1) + die(err, true) } function on_load_builtin (identifier) { - if (identifier === '@thread') return workerSource + if (identifier === '@workerSource') return workerSource return builtin(identifier) } function wrap_getenv () { - const getenv = wrap(new Uint32Array(2), core.getenv, 1) + const getenv = wrap(handle, core.getenv, 1) return str => { const ptr = getenv(str) if (!ptr) return '' @@ -222,34 +272,29 @@ function wrap_getenv () { } } -async function global_main () { - if (args[1] === 'gen') { - (await import('lib/gen.js')).gen(lo.args.slice(2)) - } else { - if (workerSource) { - import('@thread') - .catch(err => console.error(err.stack)) - } else { - if (args[1] === 'eval') return (new Function(`return (${args[2]})`))() - let filePath = args[1] - if (workerSource) filePath = 'thread.js' - const { main, serve, test, bench } = await import(filePath) - if (test) { - await test(...args.slice(2)) - } - if (bench) { - await bench(...args.slice(2)) - } - if (main) { - await main(...args.slice(2)) - } - if (serve) { - await serve(...args.slice(2)) - } - } +function wrap_getcwd () { + const getcwd = wrap(handle, core.getcwd, 2) + const cwdbuf = new Uint8Array(1024) + + return () => { + const ptr = getcwd(cwdbuf, cwdbuf.length) + if (!ptr) return '' + return utf8Decode(ptr, -1) } } +function die (err, hide_fatal = false) { + if (!hide_fatal) console.error(`${AR}Fatal Exception${AD}`) + console.error(err.stack) + console.error(`${AY}process will exit${AD}`) + exit(1) +} + +const { + utf8EncodeInto, utf8Encode, utf8Decode, getAddress, args, exit, builtin, + library, workerSource, loadModule, evaluateModule, hrtime, wrapMemory +} = lo +const { core } = library('core') const { O_WRONLY, O_CREAT, O_TRUNC, O_RDONLY, S_IWUSR, S_IRUSR, S_IRGRP, S_IROTH, STDIN, STDOUT, STDERR @@ -257,6 +302,7 @@ const { const { write_string, open, fstat, read, write, close } = core +const noop = () => {} const AD = '\u001b[0m' // ANSI Default const A0 = '\u001b[30m' // ANSI Black const AR = '\u001b[31m' // ANSI Red @@ -303,17 +349,42 @@ lo.ptr = ptr lo.addr = addr lo.core = core lo.getenv = wrap_getenv() -//const module_caching = parseInt(lo.getenv('LO_CACHE') || '0', 10) +lo.getcwd = wrap_getcwd() +const LO_HOME = lo.getenv('LO_HOME') +const LO_CACHE = parseInt(lo.getenv('LO_CACHE') || '0', 10) core.dlopen = wrap(handle, core.dlopen, 2) core.dlsym = wrap(handle, core.dlsym, 2) core.mmap = wrap(handle, core.mmap, 6) core.readFile = read_file core.writeFile = write_file -// todo: move os() and arch() to a binding // todo: optimize this - return numbers and make a single call to get both core.os = lo.os() core.arch = lo.arch() +core.loader = core.sync_loader = noop lo.setModuleCallbacks(on_module_load, on_module_instantiate) -global_main().catch(err => console.error(err.stack)) + +async function global_main () { + // todo: upgrade, install etc. maybe install these as command scripts, but that would not be very secure + const command = args[1] + if (command === 'gen') { + (await import('lib/gen.js')).gen(args.slice(2)) + } else if (command === 'build') { + (await import('lib/build.js')).build(args.slice(2)) + } else if (command === 'eval') { + (new Function(`return (${args[2]})`))() + } else if (workerSource) { + import('@workerSource').catch(die) + } else { + let filePath = command + const { main, serve, test, bench } = await import(filePath) + const pargs = args.slice(2) + if (test) await test(...pargs) + if (bench) await bench(...pargs) + if (main) await main(...pargs) + if (serve) await serve(...pargs) + } +} + +global_main().catch(die) export {} diff --git a/main_win.h b/main_win.h index 0730dd6..8b0fbe7 100644 --- a/main_win.h +++ b/main_win.h @@ -7,20 +7,49 @@ #include "builtins.h" static unsigned int main_js_len = _binary_main_js_len; +extern "C" { + extern void* _register_core(); + extern void* _register_inflate(); + extern void* _register_curl(); +} + void register_builtins() { lo::builtins_add("main.js", _binary_main_js_start, _binary_main_js_len); - lo::builtins_add("lib/asm.js", _binary_lib_asm_js_start, _binary_lib_asm_js_len); - lo::builtins_add("lib/ffi.js", _binary_lib_ffi_js_start, _binary_lib_ffi_js_len); + lo::builtins_add("lib/bench.js", _binary_lib_bench_js_start, _binary_lib_bench_js_len); lo::builtins_add("lib/gen.js", _binary_lib_gen_js_start, _binary_lib_gen_js_len); - lo::builtins_add("lib/path.js", _binary_lib_path_js_start, _binary_lib_path_js_len); + lo::builtins_add("lib/fs.js", _binary_lib_fs_js_start, _binary_lib_fs_js_len); + lo::builtins_add("lib/untar.js", _binary_lib_untar_js_start, _binary_lib_untar_js_len); lo::builtins_add("lib/proc.js", _binary_lib_proc_js_start, _binary_lib_proc_js_len); - lo::builtins_add("Makefile", _binary_Makefile_start, _binary_Makefile_len); + lo::builtins_add("lib/path.js", _binary_lib_path_js_start, _binary_lib_path_js_len); + lo::builtins_add("lib/inflate.js", _binary_lib_inflate_js_start, _binary_lib_inflate_js_len); + lo::builtins_add("lib/curl.js", _binary_lib_curl_js_start, _binary_lib_curl_js_len); + lo::builtins_add("lib/build.js", _binary_lib_build_js_start, _binary_lib_build_js_len); lo::builtins_add("main.cc", _binary_main_cc_start, _binary_main_cc_len); lo::builtins_add("lo.cc", _binary_lo_cc_start, _binary_lo_cc_len); lo::builtins_add("lo.h", _binary_lo_h_start, _binary_lo_h_len); - lo::builtins_add("globals.d.ts", _binary_globals_d_ts_start, _binary_globals_d_ts_len); - lo::builtins_add("jsconfig.json", _binary_jsconfig_json_start, _binary_jsconfig_json_len); lo::builtins_add("lib/core/api.js", _binary_lib_core_api_js_start, _binary_lib_core_api_js_len); + lo::builtins_add("lib/curl/api.js", _binary_lib_curl_api_js_start, _binary_lib_curl_api_js_len); + lo::builtins_add("lib/encode/api.js", _binary_lib_encode_api_js_start, _binary_lib_encode_api_js_len); + lo::builtins_add("lib/epoll/api.js", _binary_lib_epoll_api_js_start, _binary_lib_epoll_api_js_len); + lo::builtins_add("lib/inflate/api.js", _binary_lib_inflate_api_js_start, _binary_lib_inflate_api_js_len); + lo::builtins_add("lib/inflate/em_inflate.c", _binary_lib_inflate_em_inflate_c_start, _binary_lib_inflate_em_inflate_c_len); + lo::builtins_add("lib/inflate/em_inflate.h", _binary_lib_inflate_em_inflate_h_start, _binary_lib_inflate_em_inflate_h_len); + lo::builtins_add("lib/libffi/api.js", _binary_lib_libffi_api_js_start, _binary_lib_libffi_api_js_len); + lo::builtins_add("lib/libssl/api.js", _binary_lib_libssl_api_js_start, _binary_lib_libssl_api_js_len); + lo::builtins_add("lib/lz4/api.js", _binary_lib_lz4_api_js_start, _binary_lib_lz4_api_js_len); + lo::builtins_add("lib/mbedtls/api.js", _binary_lib_mbedtls_api_js_start, _binary_lib_mbedtls_api_js_len); + lo::builtins_add("lib/net/api.js", _binary_lib_net_api_js_start, _binary_lib_net_api_js_len); + lo::builtins_add("lib/pico/api.js", _binary_lib_pico_api_js_start, _binary_lib_pico_api_js_len); + lo::builtins_add("lib/pthread/api.js", _binary_lib_pthread_api_js_start, _binary_lib_pthread_api_js_len); + lo::builtins_add("lib/seccomp/api.js", _binary_lib_seccomp_api_js_start, _binary_lib_seccomp_api_js_len); + lo::builtins_add("lib/sqlite/api.js", _binary_lib_sqlite_api_js_start, _binary_lib_sqlite_api_js_len); + lo::builtins_add("lib/system/api.js", _binary_lib_system_api_js_start, _binary_lib_system_api_js_len); + lo::builtins_add("lib/tcc/api.js", _binary_lib_tcc_api_js_start, _binary_lib_tcc_api_js_len); + lo::builtins_add("lib/wireguard/api.js", _binary_lib_wireguard_api_js_start, _binary_lib_wireguard_api_js_len); + lo::builtins_add("lib/zlib/api.js", _binary_lib_zlib_api_js_start, _binary_lib_zlib_api_js_len); + lo::modules_add("core", &_register_core); + lo::modules_add("inflate", &_register_inflate); + lo::modules_add("curl", &_register_curl); } static const char* main_js = _binary_main_js_start; @@ -29,4 +58,3 @@ static unsigned int _v8flags_from_commandline = 1; static unsigned int _v8_threads = 2; static unsigned int _v8_cleanup = 0; static unsigned int _on_exit = 0; - diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..52c5633 --- /dev/null +++ b/test/README.md @@ -0,0 +1,10 @@ +this folder contains tests and benchmarks for the lo runtime + +## runtime.js + +this does a basic sanity check on the runtime and dumps some diagnostic info +on the console + +``` +lo test/runtime.js +``` diff --git a/test/api.js b/test/api.js new file mode 100644 index 0000000..e69de29 diff --git a/test/dump.js b/test/dump.js new file mode 100644 index 0000000..5d3a8ac --- /dev/null +++ b/test/dump.js @@ -0,0 +1,59 @@ +import { mem } from 'lib/proc.js' +import { extName } from 'lib/path.js' + +const { args, start, colors } = lo +const { AD, AY, AG, AM, AC } = colors + + +async function test () { + const os = lo.os() + const arch = lo.arch() + const elapsed = lo.hrtime() - start + console.log(`------------------------ + ${AY}lo.js${AD} +------------------------`) + console.log(`${AG}args${AD} ${args}`) + console.log(`${AG}tests${AD} ok`) + console.log(`${AG}os${AD} ${os} +${AG}arch${AD} ${arch} +${AG}boot${AD} ${(elapsed / 1000000).toFixed(2)} ms +${AG}version${AD} ${lo.version.lo} +${AG}rss${AD} ${mem()} +${AG}v8${AD} ${lo.version.v8}`) + console.log(`${AG}builtins${AD}`) + const builtins = lo.builtins() + for (const builtin of builtins) { + console.log(` ${AM}${builtin.padEnd(32, ' ')}${AD}: ${lo.builtin(builtin).length} bytes`) + if (extName(builtin) === 'js' && builtin !== 'main.js') { + const lib = await import(builtin) + const entries = Object.entries(lib) + entries.sort((a, b) => a < b ? -1 : (a === b ? 0 : 1)) + for (const [key, value] of entries) { + if (['AsyncFunction', 'Function', 'Object'].includes(value.constructor.name)) { + console.log(` ${AC}${key}${AD}: ${value.constructor.name}`) + } else if (['String'].includes(value.constructor.name)) { + console.log(` ${AC}${key}${AD}: ${value.constructor.name}`) + } else { + console.log(` ${AY}${key}${AD}: ${value.constructor.name} = ${value}`) + } + } + } + } + console.log(`${AG}bindings${AD}`) + for (const lib_name of lo.libraries().sort()) { + console.log(` ${AM}${lib_name}${AD}`) + const lib = lo.library(lib_name) + const binding = lib[lib_name] + const entries = Object.entries(binding) + entries.sort((a, b) => a < b ? -1 : (a === b ? 0 : 1)) + for (const [key, value] of entries) { + if (['AsyncFunction', 'Function', 'Object'].includes(value.constructor.name)) { + console.log(` ${AC}${key}${AD}: ${value.constructor.name}`) + } else { + console.log(` ${AY}${key}${AD}: ${value.constructor.name} = ${value}`) + } + } + } +} + +export { test } diff --git a/test/runtime.js b/test/runtime.js index d66c417..200996b 100644 --- a/test/runtime.js +++ b/test/runtime.js @@ -1,34 +1,9 @@ -import { mem } from 'lib/proc.js' +import { extName } from 'lib/path.js' -const os = lo.os() -const arch = lo.arch() - -const { assert, args, start, colors } = lo +const { assert, colors } = lo const { AD, AY, AG, AM, AC } = colors async function test () { - const elapsed = lo.hrtime() - start - console.log(`------------------------ - ${AY}lo.js${AD} -------------------------`) - console.log(`${AG}args${AD} ${args}`) - if (os === 'win') { - //assert(args[0] === './lo.exe' || args[0] === 'lo.exe' || args[0] === 'lo' - // || args[0] === './lo') - } else { - //assert(args[0] === './lo' || args[0] === 'lo') - assert(start > 0) - assert(lo.hrtime() > start) - } - assert(lo.hasOwnProperty('version')) - assert(lo.version.constructor.name === 'Object') - assert(lo.version.hasOwnProperty('lo')) - assert(lo.version.hasOwnProperty('v8')) - assert(lo.version.lo.constructor.name === 'String') - assert(lo.version.v8.constructor.name === 'String') - assert(lo.hasOwnProperty('errno')) - lo.errno = 0 - assert(lo.errno === 0) const names = [ 'nextTick', 'print', 'registerCallback', 'runMicroTasks', 'builtin', 'library', 'builtins', 'libraries', 'setModuleCallbacks', 'loadModule', @@ -36,39 +11,53 @@ async function test () { 'setFlags', 'getMeta', 'runScript', 'arch', 'os', 'hrtime', 'getAddress', 'utf8Length', 'utf8EncodeInto', 'utf8EncodeIntoAtOffset', 'readMemory', 'readMemoryAtOffset' - ] + ].sort() + assert(lo.colors) + assert(lo.start) + assert(lo.args.length === 2) for (const name of names) { assert(lo.hasOwnProperty(name)) assert(lo[name].constructor.name === 'Function') } - console.log(`${AG}tests${AD} ok`) - console.log(`${AG}os${AD} ${os} -${AG}arch${AD} ${arch} -${AG}boot${AD} ${(elapsed / 1000000).toFixed(2)} ms -${AG}version${AD} ${lo.version.lo} -${AG}rss${AD} ${mem()} -${AG}v8${AD} ${lo.version.v8}`) - console.log(`${AG}builtins${AD}`) - const builtins = lo.builtins().map(n => ({ name: n, src: lo.builtin(n)})).sort((a, b) => b.src.length - a.src.length) - for (const builtin of builtins) { - console.log(` ${AM}${builtin.name.padEnd(32, ' ')}${AD}: ${builtin.src.length} bytes`) - } - console.log(`${AG}bindings${AD}`) - for (const lib_name of lo.libraries()) { - console.log(` ${AY}${lib_name}${AD}`) - const lib = lo.library(lib_name) - assert(lib) - assert(lib.hasOwnProperty(lib_name)) - const bindings = await import(`lib/${lib_name}/api.js`) - const binding = lib[lib_name] - for (const fn_name of Object.keys(bindings.api)) { - const api = bindings.api[fn_name] - const descriptor = Object.getOwnPropertyDescriptor(binding, fn_name) - const prop = binding[fn_name] - console.log(` ${AC}${fn_name}${AD} (${prop.constructor.name})`) - //console.log(JSON.stringify({ descriptor, api }, null, ' ')) + const os = lo.os() + assert(['win', 'mac', 'linux'].includes(os)) + const arch = lo.arch() + assert(['x64', 'arm64'].includes(arch)) + assert(lo.hasOwnProperty('version')) + assert(lo.version.constructor.name === 'Object') + assert(lo.version.hasOwnProperty('lo')) + assert(lo.version.hasOwnProperty('v8')) + assert(lo.version.lo.constructor.name === 'String') + assert(lo.version.v8.constructor.name === 'String') + assert(lo.hasOwnProperty('errno')) + lo.errno = 0 + assert(lo.errno === 0) + const builtins = lo.builtins() + for (const name of builtins) { + if (extName(name) === 'js' && name !== 'main.js') { + const builtin = await import(name) + assert(builtin) + const entries = Object.entries(builtin) + assert(entries.length) } } + const bindings = lo.libraries() + for (const name of bindings) { + const binding = lo.library(name) + assert(binding) + assert(binding.hasOwnProperty(name)) + assert(binding[name]) + const entries = Object.entries(binding[name]) + assert(entries.length) + } + + // test nextTick + let test_val = 0 + lo.nextTick(() => { + assert(test_val === 0) + test_val = 1 + }) + lo.nextTick(() => assert(test_val === 1)) } export { test }