From faa02ad708cb9aab1e0835b1f24f4e69125c3bfb Mon Sep 17 00:00:00 2001 From: Hassan DRAGA Date: Mon, 8 Jul 2024 16:37:54 -0400 Subject: [PATCH] Bridge - Auto-reconnect --- bridge/webui_bridge.h | 3467 ++++++++++++++++++++-------------------- bridge/webui_bridge.ts | 557 ++++--- src/webui.c | 27 +- 3 files changed, 2070 insertions(+), 1981 deletions(-) diff --git a/bridge/webui_bridge.h b/bridge/webui_bridge.h index 2b2623e2..c2a0987a 100644 --- a/bridge/webui_bridge.h +++ b/bridge/webui_bridge.h @@ -104,223 +104,227 @@ unsigned char webui_javascript_bridge[] = { 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x0a, 0x20, 0x20, 0x23, 0x77, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x77, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x3d, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x77, + 0x73, 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, + 0x35, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x77, 0x73, + 0x57, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x3d, + 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x68, 0x61, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x61, + 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, + 0x44, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, + 0x6e, 0x74, 0x31, 0x36, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, + 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x61, 0x6c, + 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x5b, 0x5d, + 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, + 0x20, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, - 0x20, 0x20, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4f, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x6c, - 0x6f, 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, - 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x6c, - 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, - 0x20, 0x20, 0x23, 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, - 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, 0x44, 0x20, 0x3d, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x31, - 0x36, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, - 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, - 0x20, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x73, - 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x20, 0x3d, - 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x69, 0x73, - 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x43, 0x6f, - 0x6e, 0x73, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x57, 0x45, 0x42, - 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x20, 0x3d, 0x20, 0x32, 0x32, 0x31, 0x3b, 0x0a, - 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x20, - 0x3d, 0x20, 0x32, 0x35, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x23, - 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5f, 0x51, 0x55, 0x49, - 0x43, 0x4b, 0x20, 0x3d, 0x20, 0x32, 0x35, 0x33, 0x3b, 0x0a, - 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x49, - 0x43, 0x4b, 0x20, 0x3d, 0x20, 0x32, 0x35, 0x32, 0x3b, 0x0a, - 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, - 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, - 0x32, 0x35, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, - 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x20, 0x3d, 0x20, - 0x32, 0x35, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, - 0x44, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x5f, 0x46, 0x55, 0x4e, - 0x43, 0x20, 0x3d, 0x20, 0x32, 0x34, 0x39, 0x3b, 0x0a, 0x20, - 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, 0x4e, 0x44, - 0x5f, 0x52, 0x41, 0x57, 0x20, 0x3d, 0x20, 0x32, 0x34, 0x38, - 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, - 0x45, 0x57, 0x5f, 0x49, 0x44, 0x20, 0x3d, 0x20, 0x32, 0x34, - 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, - 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x20, 0x3d, 0x20, 0x32, 0x34, - 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, - 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x4b, 0x20, 0x3d, - 0x20, 0x32, 0x34, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x4d, - 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, - 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x3d, 0x20, 0x36, 0x35, - 0x35, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, 0x5a, - 0x45, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x73, 0x69, - 0x7a, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x3d, - 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x62, 0x79, - 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x3a, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x20, 0x28, 0x31, 0x20, 0x42, 0x79, 0x74, 0x65, - 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x20, - 0x3d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x62, - 0x79, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, - 0x28, 0x34, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, - 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x49, 0x44, 0x20, 0x3d, 0x20, 0x35, 0x3b, 0x0a, + 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x57, 0x65, 0x62, 0x55, 0x49, + 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x0a, 0x20, 0x20, 0x23, + 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, + 0x41, 0x54, 0x55, 0x52, 0x45, 0x20, 0x3d, 0x20, 0x32, 0x32, + 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x4a, 0x53, 0x20, 0x3d, 0x20, 0x32, 0x35, 0x34, 0x3b, 0x0a, + 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5f, + 0x51, 0x55, 0x49, 0x43, 0x4b, 0x20, 0x3d, 0x20, 0x32, 0x35, + 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x20, 0x3d, 0x20, 0x32, 0x35, + 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, + 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x20, 0x3d, 0x20, 0x32, 0x35, 0x31, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, + 0x20, 0x3d, 0x20, 0x32, 0x35, 0x30, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x5f, + 0x46, 0x55, 0x4e, 0x43, 0x20, 0x3d, 0x20, 0x32, 0x34, 0x39, + 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, + 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x41, 0x57, 0x20, 0x3d, 0x20, + 0x32, 0x34, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x49, 0x44, 0x20, 0x3d, + 0x20, 0x32, 0x34, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x20, 0x3d, + 0x20, 0x32, 0x34, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, + 0x4b, 0x20, 0x3d, 0x20, 0x32, 0x34, 0x35, 0x3b, 0x0a, 0x20, + 0x20, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, + 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x3d, + 0x20, 0x36, 0x35, 0x35, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x53, 0x49, 0x5a, 0x45, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x49, - 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x20, 0x3d, 0x20, - 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, + 0x63, 0x6f, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x2f, + 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x28, 0x31, 0x20, 0x42, + 0x79, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, + 0x45, 0x4e, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, + 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x28, 0x34, 0x20, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x44, 0x20, 0x3d, 0x20, + 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, - 0x28, 0x31, 0x20, 0x42, 0x79, 0x74, 0x65, 0x29, 0x0a, 0x20, - 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x20, 0x3d, 0x20, 0x38, 0x3b, - 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, - 0x44, 0x61, 0x74, 0x61, 0x20, 0x28, 0x6e, 0x20, 0x42, 0x79, - 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x69, - 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x0a, 0x20, 0x20, 0x23, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, - 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, - 0x44, 0x4f, 0x3a, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x20, 0x60, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x60, 0x20, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x45, 0x53, - 0x42, 0x55, 0x49, 0x4c, 0x44, 0x20, 0x60, 0x5f, 0x57, 0x65, - 0x62, 0x75, 0x69, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x60, - 0x20, 0x69, 0x73, 0x73, 0x75, 0x65, 0x2e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, - 0x44, 0x3a, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, - 0x45, 0x44, 0x3a, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x7d, 0x3b, - 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x0a, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, - 0x72, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x3d, - 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x77, 0x69, 0x6e, 0x58, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x77, 0x69, 0x6e, 0x59, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x77, 0x69, 0x6e, 0x57, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x77, 0x69, 0x6e, 0x48, 0x0a, 0x20, 0x20, 0x7d, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, - 0x20, 0x3d, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x70, 0x6f, 0x72, 0x74, - 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, - 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, - 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x67, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x77, 0x69, 0x6e, 0x58, 0x20, 0x3d, 0x20, 0x77, 0x69, - 0x6e, 0x58, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x59, 0x20, 0x3d, - 0x20, 0x77, 0x69, 0x6e, 0x59, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x3a, 0x20, 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, + 0x20, 0x3d, 0x20, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, + 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, + 0x62, 0x79, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x20, 0x28, 0x31, 0x20, 0x42, 0x79, 0x74, 0x65, + 0x29, 0x0a, 0x20, 0x20, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x20, 0x3d, + 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x62, 0x79, + 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x3a, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x28, 0x6e, + 0x20, 0x42, 0x79, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x23, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x72, + 0x72, 0x61, 0x79, 0x28, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x50, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x20, 0x20, 0x23, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, + 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, + 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x4d, 0x61, 0x6b, + 0x65, 0x20, 0x60, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x60, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x45, 0x53, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x20, 0x60, + 0x5f, 0x57, 0x65, 0x62, 0x75, 0x69, 0x42, 0x72, 0x69, 0x64, + 0x67, 0x65, 0x60, 0x20, 0x69, 0x73, 0x73, 0x75, 0x65, 0x2e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x45, 0x44, 0x3a, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x45, 0x44, 0x3a, 0x20, 0x31, 0x0a, 0x20, + 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, + 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x6f, 0x72, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, + 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x6e, 0x58, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x6e, 0x59, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x6e, 0x57, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x6e, 0x48, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, + 0x3d, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x70, + 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x72, 0x74, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x20, 0x3d, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x6c, + 0x6f, 0x67, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x58, 0x20, 0x3d, + 0x20, 0x77, 0x69, 0x6e, 0x58, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, - 0x57, 0x20, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x57, 0x3b, 0x0a, + 0x59, 0x20, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x59, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x77, 0x69, 0x6e, 0x48, 0x20, 0x3d, 0x20, 0x77, 0x69, 0x6e, - 0x48, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x5b, 0x30, - 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x22, 0x77, 0x65, 0x62, 0x75, - 0x69, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, - 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x28, 0x22, 0x53, 0x6f, 0x72, 0x72, 0x79, 0x2e, 0x20, - 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, - 0x69, 0x6e, 0x58, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x76, 0x6f, - 0x69, 0x64, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x59, 0x20, 0x21, - 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x57, 0x20, 0x21, 0x3d, - 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, - 0x6e, 0x48, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, - 0x64, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x21, 0x28, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, - 0x28, 0x22, 0x53, 0x6f, 0x72, 0x72, 0x79, 0x2e, 0x20, 0x57, - 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x79, - 0x6f, 0x75, 0x72, 0x20, 0x77, 0x65, 0x62, 0x20, 0x62, 0x72, - 0x6f, 0x77, 0x73, 0x65, 0x72, 0x2e, 0x22, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, - 0x29, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, - 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, + 0x77, 0x69, 0x6e, 0x57, 0x20, 0x3d, 0x20, 0x77, 0x69, 0x6e, + 0x57, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x48, 0x20, 0x3d, 0x20, + 0x77, 0x69, 0x6e, 0x48, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x22, 0x77, + 0x65, 0x62, 0x75, 0x69, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x53, 0x6f, 0x72, 0x72, + 0x79, 0x2e, 0x20, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x69, + 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x20, 0x6f, + 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x22, 0x6e, 0x61, 0x76, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x6e, - 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, - 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, - 0x73, 0x2e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, - 0x22, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x65, 0x22, - 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, - 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, - 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x58, 0x20, 0x21, 0x3d, 0x3d, + 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x20, 0x26, 0x26, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, + 0x59, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, + 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x69, 0x6e, 0x57, + 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, + 0x30, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x69, 0x6e, 0x48, 0x20, 0x21, 0x3d, 0x3d, 0x20, + 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x21, 0x28, 0x22, 0x57, 0x65, 0x62, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x20, 0x69, 0x6e, + 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x29, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6c, + 0x65, 0x72, 0x74, 0x28, 0x22, 0x53, 0x6f, 0x72, 0x72, 0x79, + 0x2e, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, + 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x77, 0x65, 0x62, + 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x2e, 0x22, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x22, 0x6e, + 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x20, 0x69, 0x6e, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x54, 0x68, 0x69, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6e, 0x61, 0x76, 0x69, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x64, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x28, 0x22, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, + 0x74, 0x65, 0x22, 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x68, 0x61, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, @@ -364,228 +368,244 @@ unsigned char webui_javascript_bridge[] = { 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, 0x29, 0x3b, + 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x20, 0x7d, 0x20, 0x3d, 0x20, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x7b, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x20, 0x7d, 0x20, 0x3d, 0x20, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x44, 0x4f, 0x4d, 0x20, 0x2d, 0x3e, 0x20, 0x4e, 0x61, 0x76, + 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x5b, 0x24, 0x7b, 0x68, 0x72, 0x65, 0x66, 0x7d, 0x5d, 0x60, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x68, 0x72, 0x65, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, 0x6b, 0x65, 0x79, + 0x64, 0x6f, 0x77, 0x6e, 0x22, 0x2c, 0x20, 0x28, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, - 0x2d, 0x3e, 0x20, 0x44, 0x4f, 0x4d, 0x20, 0x2d, 0x3e, 0x20, - 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x20, 0x5b, 0x24, 0x7b, 0x68, 0x72, 0x65, 0x66, - 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x68, 0x72, 0x65, 0x66, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, - 0x6b, 0x65, 0x79, 0x64, 0x6f, 0x77, 0x6e, 0x22, 0x2c, 0x20, - 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, - 0x6f, 0x67, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, - 0x79, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x22, 0x46, 0x35, 0x22, - 0x29, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6e, - 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x75, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x20, 0x3d, + 0x3d, 0x3d, 0x20, 0x22, 0x46, 0x35, 0x22, 0x29, 0x20, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6e, 0x62, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, + 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x28, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x57, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28, + 0x22, 0x53, 0x6f, 0x72, 0x72, 0x79, 0x2e, 0x20, 0x57, 0x65, + 0x62, 0x55, 0x49, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, + 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, 0x72, 0x79, + 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x2e, 0x22, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x31, 0x35, 0x30, 0x30, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, + 0x2f, 0x20, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x0a, + 0x20, 0x20, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x2c, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x22, + 0x22, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x28, 0x29, 0x20, 0x3d, - 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, - 0x6e, 0x63, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28, 0x22, 0x53, 0x6f, - 0x72, 0x72, 0x79, 0x2e, 0x20, 0x57, 0x65, 0x62, 0x55, 0x49, - 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x50, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61, 0x67, - 0x61, 0x69, 0x6e, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, - 0x29, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, - 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x31, 0x35, 0x30, - 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x2f, 0x2f, 0x20, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, - 0x0a, 0x20, 0x20, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, - 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, - 0x22, 0x22, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, 0x20, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, - 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, - 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, - 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, - 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, - 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x2d, 0x3e, 0x20, 0x4e, - 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x20, 0x5b, 0x24, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, - 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x2e, 0x60, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x23, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, - 0x79, 0x2e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x22, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, 0x31, 0x25, 0x29, - 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, - 0x69, 0x73, 0x54, 0x65, 0x78, 0x74, 0x42, 0x61, 0x73, 0x65, - 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, - 0x6d, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x63, 0x6d, 0x64, 0x20, 0x21, 0x3d, - 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, - 0x44, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x41, 0x57, - 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, - 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, - 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, - 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3b, 0x20, 0x69, 0x20, - 0x3c, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x2b, 0x2b, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x5d, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, - 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x64, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, - 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x66, 0x72, 0x65, + 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x20, 0x3d, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x73, 0x74, 0x28, 0x31, 0x25, 0x29, 0x22, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x75, 0x6e, 0x66, 0x72, + 0x65, 0x65, 0x7a, 0x65, 0x55, 0x49, 0x28, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x20, 0x3d, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x73, 0x74, 0x28, 0x31, 0x30, 0x30, 0x25, 0x29, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x69, + 0x73, 0x54, 0x65, 0x78, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, 0x6d, + 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x63, 0x6d, 0x64, 0x20, 0x21, 0x3d, 0x3d, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, + 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x41, 0x57, 0x29, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x67, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, + 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x67, 0x65, 0x74, 0x49, 0x44, - 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, + 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, + 0x20, 0x69, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3b, 0x20, 0x69, 0x20, 0x3c, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, + 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, + 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x64, 0x65, 0x63, + 0x6f, 0x64, 0x65, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, + 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x54, 0x65, 0x78, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x23, 0x67, 0x65, 0x74, 0x49, 0x44, 0x28, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x20, 0x3e, 0x3d, 0x20, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, + 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, + 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, + 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x42, 0x79, 0x74, + 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, 0x79, 0x74, 0x65, 0x20, + 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, + 0x3d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, 0x79, + 0x74, 0x65, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x20, 0x7c, 0x20, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x61, + 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x30, 0x20, + 0x7c, 0x7c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, + 0x20, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, + 0x35, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, + 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x34, + 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x72, 0x65, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x30, 0x20, + 0x7c, 0x7c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x34, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x28, 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, + 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, + 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x22, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x20, 0x26, 0x20, 0x32, 0x35, 0x35, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x31, + 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x3e, 0x3e, 0x3e, 0x20, 0x38, 0x20, 0x26, 0x20, 0x32, 0x35, + 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, + 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x20, + 0x26, 0x20, 0x32, 0x35, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, 0x3d, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x3e, 0x3e, + 0x20, 0x32, 0x34, 0x20, 0x26, 0x20, 0x32, 0x35, 0x35, 0x3b, + 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x61, 0x64, + 0x64, 0x49, 0x44, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, 0x3d, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x28, 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x42, 0x79, - 0x74, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, 0x79, 0x74, 0x65, - 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x31, 0x5d, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x3d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, - 0x79, 0x74, 0x65, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x20, 0x7c, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, - 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, - 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x30, - 0x20, 0x7c, 0x7c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x3e, 0x20, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, - 0x39, 0x35, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x20, 0x36, 0x35, 0x35, + 0x33, 0x35, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x34, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x72, 0x65, + 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x34, 0x29, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x32, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x49, 0x6e, 0x64, 0x65, @@ -602,1093 +622,390 @@ unsigned char webui_javascript_bridge[] = { 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x38, 0x20, 0x26, 0x20, 0x32, - 0x35, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x20, 0x2b, 0x20, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x31, 0x36, - 0x20, 0x26, 0x20, 0x32, 0x35, 0x35, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, - 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x3e, - 0x3e, 0x20, 0x32, 0x34, 0x20, 0x26, 0x20, 0x32, 0x35, 0x35, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x61, - 0x64, 0x64, 0x49, 0x44, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x20, 0x36, 0x35, - 0x35, 0x33, 0x35, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, - 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x72, - 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, - 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x20, 0x3e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x32, + 0x35, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x28, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x61, 0x6c, 0x6c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, + 0x69, 0x76, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, + 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, 0x44, + 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, + 0x28, 0x22, 0x22, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x23, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, + 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, + 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x74, 0x72, + 0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, + 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, + 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x70, + 0x69, 0x6e, 0x67, 0x22, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x69, 0x6e, + 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, + 0x65, 0x28, 0x28, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x2c, 0x20, 0x32, 0x65, 0x34, 0x29, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x29, 0x2e, 0x66, + 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x28, 0x28, 0x6b, 0x65, + 0x79, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x2f, 0x5e, + 0x6f, 0x6e, 0x28, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x29, 0x2f, + 0x2e, 0x74, 0x65, 0x73, 0x74, 0x28, 0x6b, 0x65, 0x79, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x22, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5b, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x20, 0x3d, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x26, 0x20, 0x32, 0x35, 0x35, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, - 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x38, 0x20, 0x26, 0x20, - 0x32, 0x35, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x28, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6b, 0x65, 0x65, 0x70, 0x41, - 0x6c, 0x69, 0x76, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, - 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x49, - 0x44, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x73, 0x28, 0x22, 0x22, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x77, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x65, 0x20, 0x3f, 0x20, 0x22, 0x77, 0x73, 0x73, - 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x2b, 0x20, 0x68, 0x6f, 0x73, - 0x74, 0x20, 0x3a, 0x20, 0x22, 0x77, 0x73, 0x3a, 0x2f, 0x2f, - 0x22, 0x20, 0x2b, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x77, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x57, - 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x60, - 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x7d, 0x3a, 0x24, 0x7b, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x70, 0x6f, 0x72, 0x74, 0x7d, - 0x2f, 0x5f, 0x77, 0x65, 0x62, 0x75, 0x69, 0x5f, 0x77, 0x73, - 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x60, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x6f, 0x70, - 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4f, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, - 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, - 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, - 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x20, 0x3d, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, - 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, - 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, - 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, - 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, - 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, - 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x64, 0x20, 0x64, 0x75, 0x20, 0x74, 0x6f, 0x20, 0x4e, 0x61, - 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x5b, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, + 0x69, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, + 0x6b, 0x65, 0x79, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, + 0x32, 0x29, 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, + 0x20, 0x5f, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, + 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x6f, 0x66, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x29, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x68, 0x61, 0x73, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x7c, 0x7c, 0x20, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x3d, 0x20, + 0x22, 0x22, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, + 0x28, 0x5f, 0x61, 0x20, 0x3d, 0x20, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, + 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3f, 0x20, + 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x20, 0x3a, 0x20, 0x5f, + 0x61, 0x2e, 0x69, 0x64, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, + 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2e, + 0x69, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x23, 0x73, 0x65, + 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x69, 0x6e, + 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, + 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, + 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, - 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6c, 0x6f, 0x73, 0x74, 0x20, 0x28, 0x24, 0x7b, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x7d, 0x29, - 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, - 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, - 0x6f, 0x6e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, - 0x20, 0x5f, 0x61, 0x2c, 0x20, 0x5f, 0x62, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x20, 0x3d, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, - 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2e, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x29, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, - 0x47, 0x4e, 0x5d, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, - 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x29, + 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, 0x54, 0x65, 0x78, - 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, - 0x5d, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, + 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, + 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x20, 0x3d, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x49, 0x44, - 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x44, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, - 0x4d, 0x44, 0x5d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, - 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, - 0x44, 0x5f, 0x4a, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x43, 0x4b, - 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x3a, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x2e, 0x73, 0x68, 0x69, 0x66, 0x74, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, 0x55, 0x4e, + 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x73, 0x65, 0x6e, + 0x64, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x5f, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x55, 0x69, 0x6e, + 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, + 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, + 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, + 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, - 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, + 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, 0x34, 0x20, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x44, 0x20, 0x28, 0x32, + 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x6e, 0x65, + 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x28, 0x29, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x73, 0x65, 0x6e, + 0x64, 0x28, 0x70, 0x72, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, - 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x28, 0x2f, 0x28, 0x3f, 0x3a, 0x5c, 0x72, - 0x5c, 0x6e, 0x7c, 0x5c, 0x72, 0x7c, 0x5c, 0x6e, 0x29, 0x2f, - 0x67, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, - 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, - 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4a, 0x53, - 0x20, 0x5b, 0x24, 0x7b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x7d, 0x5d, - 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, - 0x74, 0x20, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3d, 0x20, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x6c, 0x65, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, + 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, + 0x73, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x20, + 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x29, + 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3c, 0x20, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, - 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, - 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x41, 0x73, 0x79, - 0x6e, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, - 0x69, 0x74, 0x69, 0x7a, 0x65, 0x29, 0x28, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x63, 0x61, 0x74, 0x63, - 0x68, 0x20, 0x28, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x65, - 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, - 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5f, 0x51, - 0x55, 0x49, 0x43, 0x4b, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3d, 0x20, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, - 0x20, 0x26, 0x26, 0x20, 0x21, 0x46, 0x75, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, - 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, - 0x20, 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, 0x20, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x20, 0x5b, 0x24, 0x7b, 0x46, 0x75, - 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x7d, 0x5d, 0x60, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, - 0x20, 0x26, 0x26, 0x20, 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, - 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, - 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x20, 0x5b, 0x24, 0x7b, 0x46, 0x75, 0x6e, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, - 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, - 0x79, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x20, 0x3d, 0x20, 0x28, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, - 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x64, - 0x61, 0x74, 0x61, 0x2c, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x20, 0x3d, 0x20, - 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x3d, 0x3e, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, - 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x32, 0x34, - 0x20, 0x2a, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 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, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, - 0x65, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, - 0x69, 0x20, 0x3c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x20, 0x2b, - 0x3d, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, - 0x65, 0x29, 0x20, 0x7b, 0x0a, 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, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x28, 0x69, 0x2c, 0x20, 0x4d, 0x61, 0x74, - 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x69, 0x20, 0x2b, 0x20, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x2c, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, + 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, + 0x6e, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, + 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, - 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x75, + 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x20, 0x2b, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, + 0x69, 0x7a, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x73, 0x65, 0x6e, + 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, + 0x3d, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, - 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, - 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, - 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, - 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, - 0x5d, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, - 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, - 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, 0x2c, 0x20, 0x30, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x5d, 0x29, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, + 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x28, 0x65, 0x6c, 0x65, 0x6d, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, + 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6c, 0x65, 0x6d, + 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x3f, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x5b, 0x30, 0x2c, 0x20, 0x30, 0x5d, 0x29, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, - 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, - 0x44, 0x5f, 0x4a, 0x53, 0x5d, 0x29, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, - 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, - 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x46, - 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3f, 0x20, - 0x5b, 0x31, 0x5d, 0x20, 0x3a, 0x20, 0x5b, 0x30, 0x5d, 0x29, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, - 0x28, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, - 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x28, 0x5b, 0x30, 0x5d, 0x29, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x2e, 0x6f, 0x66, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, + 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, + 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, 0x34, 0x20, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, + 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, + 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x6e, + 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x28, 0x65, 0x6c, 0x65, 0x6d, 0x29, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x3a, + 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, + 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, + 0x2f, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, 0x34, + 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, + 0x20, 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x49, 0x44, 0x28, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x49, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, - 0x49, 0x44, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, - 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, - 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x5f, 0x46, 0x55, 0x4e, 0x43, - 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, - 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, - 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, - 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x20, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x5b, - 0x24, 0x7b, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5b, 0x63, - 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, - 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x20, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x23, - 0x24, 0x7b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x7d, 0x2e, - 0x2e, 0x2e, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x28, 0x5f, 0x62, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x61, 0x20, - 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, - 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x29, 0x5b, 0x63, 0x61, - 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x29, 0x20, 0x3d, 0x3d, 0x20, - 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3f, 0x20, 0x76, 0x6f, 0x69, - 0x64, 0x20, 0x30, 0x20, 0x3a, 0x20, 0x5f, 0x62, 0x2e, 0x63, - 0x61, 0x6c, 0x6c, 0x28, 0x5f, 0x61, 0x2c, 0x20, 0x63, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, - 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, - 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x72, 0x6c, 0x32, - 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, - 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, - 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, - 0x3e, 0x20, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x5b, 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x32, - 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, - 0x4e, 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x2c, 0x20, 0x75, 0x72, 0x6c, 0x32, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, - 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, - 0x4d, 0x44, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x49, 0x44, 0x3a, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, - 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, - 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, - 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, - 0x20, 0x4e, 0x65, 0x77, 0x20, 0x42, 0x69, 0x6e, 0x64, 0x20, - 0x49, 0x44, 0x20, 0x5b, 0x24, 0x7b, 0x6e, 0x65, 0x77, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x7d, 0x5d, 0x60, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, - 0x69, 0x73, 0x74, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x73, 0x28, 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x29, 0x29, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, - 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, - 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x3a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, - 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, - 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x60, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, - 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x48, - 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x4b, 0x3a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x3f, - 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x3a, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, - 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, - 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x65, 0x64, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, - 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, - 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, - 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x53, 0x65, 0x6e, 0x64, + 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x5b, 0x24, 0x7b, + 0x65, 0x6c, 0x65, 0x6d, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x23, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, - 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, - 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x65, 0x64, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x5d, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, - 0x4e, 0x44, 0x5f, 0x52, 0x41, 0x57, 0x3a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, - 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x61, 0x77, - 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x20, 0x2b, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x61, 0x77, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, - 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2e, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x72, 0x61, - 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, - 0x77, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x38, 0x2e, 0x73, 0x75, 0x62, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x28, 0x72, 0x61, 0x77, 0x44, 0x61, - 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x72, - 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x2b, 0x20, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, - 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, - 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x64, 0x20, 0x52, 0x61, 0x77, 0x20, 0x24, 0x7b, 0x72, - 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, - 0x7d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x29, - 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, - 0x3d, 0x3d, 0x20, 0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x29, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x5d, 0x28, 0x75, 0x73, 0x65, 0x72, - 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x61, 0x77, 0x61, - 0x69, 0x74, 0x20, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, - 0x2b, 0x20, 0x22, 0x28, 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, - 0x77, 0x44, 0x61, 0x74, 0x61, 0x29, 0x22, 0x29, 0x28, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x23, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, - 0x76, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, - 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, - 0x74, 0x72, 0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x50, 0x69, 0x6e, 0x67, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, - 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, - 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, - 0x22, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x29, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, - 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x77, 0x61, 0x69, - 0x74, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, - 0x69, 0x73, 0x65, 0x28, 0x28, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x73, 0x65, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x2c, 0x20, 0x32, 0x65, 0x34, - 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x29, - 0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x28, 0x28, - 0x6b, 0x65, 0x79, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x2f, 0x5e, 0x6f, 0x6e, 0x28, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x29, 0x2f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x28, 0x6b, 0x65, - 0x79, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x54, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x28, 0x6b, 0x65, 0x79, 0x2e, 0x73, 0x6c, 0x69, 0x63, - 0x65, 0x28, 0x32, 0x29, 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, - 0x61, 0x72, 0x20, 0x5f, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x21, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x20, 0x48, 0x54, 0x4d, - 0x4c, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x29, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x68, - 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x7c, - 0x7c, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, - 0x3d, 0x20, 0x22, 0x22, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x73, 0x28, 0x28, 0x5f, 0x61, 0x20, 0x3d, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, - 0x3f, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x20, 0x3a, - 0x20, 0x5f, 0x61, 0x2e, 0x69, 0x64, 0x29, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, - 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x2e, 0x69, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x23, - 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x7c, 0x7c, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x3d, 0x3d, - 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x29, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, - 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, - 0x65, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, - 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x30, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, - 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x73, 0x68, 0x69, - 0x66, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, - 0x5f, 0x43, 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, - 0x45, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, - 0x73, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, - 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, - 0x72, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, + 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, - 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x20, 0x28, 0x34, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, - 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, - 0x4d, 0x44, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2e, 0x2e, 0x2e, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, - 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, - 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2e, 0x74, - 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x29, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, - 0x73, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x70, 0x72, 0x65, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, - 0x6e, 0x63, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x20, 0x3c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, - 0x48, 0x55, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x2c, - 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x20, 0x2d, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x2e, 0x73, 0x75, 0x62, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x63, - 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, - 0x73, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x6e, 0x64, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x28, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x73, 0x65, 0x6e, 0x64, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x28, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x73, - 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x65, - 0x6c, 0x65, 0x6d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x20, 0x3d, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x20, 0x21, - 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x3f, 0x20, 0x55, 0x69, - 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6f, - 0x66, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, 0x42, - 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, 0x34, 0x20, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x44, - 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, - 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x6e, 0x65, 0x77, - 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x72, 0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x28, 0x65, 0x6c, 0x65, 0x6d, 0x29, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x3a, 0x20, 0x55, - 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, - 0x6f, 0x66, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, 0x45, - 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, - 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, 0x34, 0x20, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, - 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, - 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, - 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, - 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, - 0x20, 0x2d, 0x3e, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x20, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x5b, 0x24, 0x7b, 0x65, 0x6c, - 0x65, 0x6d, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x23, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x20, 0x3d, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, - 0x72, 0x61, 0x79, 0x2e, 0x6f, 0x66, 0x28, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, - 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, - 0x28, 0x34, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, + 0x2f, 0x2f, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x28, + 0x34, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2f, 0x2f, 0x20, 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, - 0x54, 0x4b, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, - 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, + 0x2f, 0x20, 0x49, 0x44, 0x20, 0x28, 0x32, 0x20, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, + 0x4b, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, + 0x4f, 0x4b, 0x45, 0x4e, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x73, + 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x53, 0x65, 0x6e, 0x64, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x5b, 0x24, 0x7b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x28, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x6c, 0x6f, + 0x61, 0x64, 0x28, 0x29, 0x2c, 0x20, 0x31, 0x65, 0x33, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x23, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x6c, 0x6f, 0x61, + 0x64, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, - 0x20, 0x53, 0x65, 0x6e, 0x64, 0x20, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x5b, 0x24, - 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x23, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x75, 0x72, 0x6c, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x72, 0x6c, 0x20, - 0x21, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x5b, 0x24, 0x7b, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x7d, 0x5d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x52, 0x65, + 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, + 0x2e, 0x2e, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x79, + 0x41, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x68, 0x69, + 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x75, 0x72, 0x6c, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, + 0x72, 0x6c, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, @@ -1987,259 +1304,991 @@ unsigned char webui_javascript_bridge[] = { 0x5f, 0x22, 0x2c, 0x20, 0x66, 0x6e, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d, 0x20, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x41, 0x50, 0x49, - 0x73, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x20, - 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, - 0x43, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x20, 0x66, 0x6e, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, - 0x65, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x2d, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x2d, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, - 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x77, 0x65, 0x62, - 0x75, 0x69, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x22, 0x6d, - 0x79, 0x49, 0x44, 0x22, 0x2c, 0x20, 0x31, 0x32, 0x33, 0x2c, - 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x22, 0x48, 0x69, - 0x22, 0x2c, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, - 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, - 0x78, 0x34, 0x32, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x2c, - 0x20, 0x30, 0x78, 0x34, 0x34, 0x5d, 0x29, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, - 0x6e, 0x63, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x66, 0x6e, - 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x21, 0x66, 0x6e, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, - 0x2e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6e, 0x65, - 0x77, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x28, 0x22, 0x4e, 0x6f, 0x20, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x64, 0x22, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x50, - 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x28, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x22, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x20, 0x26, 0x26, 0x20, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x2e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x60, - 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x60, 0x29, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, - 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6e, 0x65, 0x77, - 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x4e, 0x6f, 0x20, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x22, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x22, 0x60, - 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, - 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, - 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x28, - 0x2e, 0x2e, 0x2e, 0x29, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x3d, 0x20, - 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, - 0x69, 0x73, 0x65, 0x28, 0x66, 0x6e, 0x2c, 0x20, 0x2e, 0x2e, - 0x2e, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, - 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x22, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x22, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, - 0x20, 0x2a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x6f, 0x72, 0x20, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x20, 0x77, 0x65, 0x62, 0x75, 0x69, 0x20, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x67, - 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x2d, 0x20, - 0x6c, 0x6f, 0x67, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x74, 0x0a, 0x20, 0x20, - 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x28, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x20, + 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x57, 0x65, 0x62, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4f, 0x50, 0x45, + 0x4e, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x23, + 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x68, 0x6f, 0x73, + 0x74, 0x20, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, + 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x3f, + 0x20, 0x22, 0x77, 0x73, 0x73, 0x3a, 0x2f, 0x2f, 0x22, 0x20, + 0x2b, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3a, 0x20, 0x22, + 0x77, 0x73, 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x2b, 0x20, 0x68, + 0x6f, 0x73, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x28, 0x60, 0x24, 0x7b, 0x75, 0x72, 0x6c, + 0x7d, 0x3a, 0x24, 0x7b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x70, 0x6f, 0x72, 0x74, 0x7d, 0x2f, 0x5f, 0x77, 0x65, 0x62, + 0x75, 0x69, 0x5f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x20, 0x3d, 0x20, 0x22, 0x61, 0x72, 0x72, 0x61, 0x79, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x2e, 0x6f, 0x6e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x4f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, + 0x6f, 0x6e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x4f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x77, 0x73, 0x2e, 0x6f, 0x6e, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x20, + 0x3d, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, + 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x57, 0x61, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, + 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x75, 0x6e, + 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x55, 0x49, 0x28, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, - 0x2d, 0x3e, 0x20, 0x4c, 0x6f, 0x67, 0x20, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x23, 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, - 0x20, 0x2d, 0x3e, 0x20, 0x4c, 0x6f, 0x67, 0x20, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, + 0x2d, 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x23, 0x77, 0x73, 0x4f, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x2e, + 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, + 0x20, 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, + 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x66, + 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x5b, 0x24, 0x7b, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x61, + 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, + 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, + 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x6f, 0x73, 0x74, 0x20, 0x28, 0x24, 0x7b, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x7d, 0x29, + 0x2e, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0x60, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x66, 0x72, 0x65, 0x65, 0x7a, + 0x65, 0x55, 0x69, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x28, 0x29, 0x20, 0x3d, + 0x3e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x29, 0x2c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x53, + 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, + 0x6f, 0x73, 0x74, 0x20, 0x28, 0x24, 0x7b, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x7d, 0x29, 0x60, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x66, 0x72, 0x65, + 0x65, 0x7a, 0x65, 0x55, 0x69, 0x28, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, + 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x54, + 0x69, 0x6d, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x45, 0x44, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, + 0x23, 0x77, 0x73, 0x4f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, + 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, + 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, + 0x72, 0x20, 0x5f, 0x61, 0x2c, 0x20, 0x5f, 0x62, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x49, + 0x5a, 0x45, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5d, 0x20, 0x21, + 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x57, + 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x69, 0x73, + 0x54, 0x65, 0x78, 0x74, 0x42, 0x61, 0x73, 0x65, 0x64, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x43, 0x4d, 0x44, 0x5d, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x20, 0x3d, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x49, + 0x44, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x44, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, + 0x44, 0x5d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, + 0x53, 0x5f, 0x51, 0x55, 0x49, 0x43, 0x4b, 0x3a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, + 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, + 0x44, 0x5f, 0x4a, 0x53, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, + 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, + 0x69, 0x74, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x28, 0x2f, 0x28, 0x3f, 0x3a, 0x5c, 0x72, 0x5c, + 0x6e, 0x7c, 0x5c, 0x72, 0x7c, 0x5c, 0x6e, 0x29, 0x2f, 0x67, + 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x22, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, + 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x5b, 0x24, + 0x7b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, + 0x69, 0x74, 0x69, 0x7a, 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x46, 0x75, 0x6e, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x22, + 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x46, 0x75, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, - 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, - 0x6e, 0x74, 0x6f, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, - 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x2d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, - 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x74, - 0x6f, 0x61, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, - 0x20, 0x20, 0x20, 0x2a, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x20, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x2a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, + 0x79, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, + 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, 0x20, + 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x41, 0x73, 0x79, 0x6e, + 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x61, 0x6e, 0x69, + 0x74, 0x69, 0x7a, 0x65, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x20, 0x28, + 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, + 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x3d, 0x20, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, + 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, 0x5d, + 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5f, 0x51, 0x55, + 0x49, 0x43, 0x4b, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x46, + 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, + 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x75, 0x6e, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x22, + 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, + 0x67, 0x20, 0x26, 0x26, 0x20, 0x21, 0x46, 0x75, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, + 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, + 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, + 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x5b, 0x24, 0x7b, 0x46, + 0x75, 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x7d, 0x5d, + 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x20, + 0x26, 0x26, 0x20, 0x46, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, + 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, + 0x3e, 0x20, 0x4a, 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x20, 0x5b, 0x24, 0x7b, 0x46, 0x75, 0x6e, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x6c, 0x65, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, + 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, + 0x68, 0x20, 0x3d, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, + 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2b, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x77, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, + 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x65, 0x74, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x2c, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, + 0x20, 0x3d, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, + 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x32, + 0x34, 0x20, 0x2a, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x63, + 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 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, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x20, + 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x3b, 0x20, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x20, 0x7b, 0x0a, + 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, 0x75, 0x6e, 0x6b, 0x20, + 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x69, 0x2c, 0x20, + 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x69, + 0x20, 0x2b, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, + 0x7a, 0x65, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, + 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, + 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x28, 0x29, + 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x57, 0x45, 0x42, 0x55, 0x49, 0x5f, 0x53, 0x49, + 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5d, 0x29, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, + 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, + 0x5b, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, + 0x30, 0x5d, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, + 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, + 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, 0x2c, 0x20, 0x30, 0x5d, + 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, + 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x28, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x4a, 0x53, 0x5d, 0x29, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, + 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x46, 0x75, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3f, 0x20, 0x5b, + 0x31, 0x5d, 0x20, 0x3a, 0x20, 0x5b, 0x30, 0x5d, 0x29, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x28, 0x46, 0x75, + 0x6e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, + 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x30, + 0x5d, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x4f, + 0x4b, 0x45, 0x4e, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x61, 0x64, 0x64, 0x49, 0x44, 0x28, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x20, 0x63, 0x61, + 0x6c, 0x6c, 0x49, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x49, 0x44, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x5f, 0x46, + 0x55, 0x4e, 0x43, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x3d, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x20, 0x5b, 0x24, 0x7b, 0x63, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x7d, + 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5b, + 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x23, 0x24, 0x7b, 0x63, + 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x7d, 0x2e, 0x2e, 0x2e, 0x60, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x28, 0x5f, 0x62, 0x20, 0x3d, 0x20, 0x28, + 0x5f, 0x61, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x29, + 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x5d, 0x29, 0x20, + 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3f, 0x20, + 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x20, 0x3a, 0x20, 0x5f, + 0x62, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x5f, 0x61, 0x2c, + 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, 0x61, 0x6c, 0x6c, + 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x5b, 0x63, 0x61, 0x6c, 0x6c, 0x49, + 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, + 0x41, 0x56, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x72, 0x6c, + 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, + 0x72, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, + 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x5b, 0x24, 0x7b, 0x75, 0x72, 0x6c, 0x7d, 0x5d, 0x60, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x56, 0x49, 0x47, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x75, 0x72, 0x6c, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x49, 0x44, 0x3a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6e, 0x65, 0x77, + 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, + 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x4e, 0x65, 0x77, + 0x20, 0x42, 0x69, 0x6e, 0x64, 0x20, 0x49, 0x44, 0x20, 0x5b, + 0x24, 0x7b, 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, + 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x6e, 0x65, 0x77, + 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x29, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x62, 0x69, 0x6e, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, + 0x6e, 0x65, 0x77, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x43, + 0x4d, 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x3a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, + 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, + 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x28, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, + 0x53, 0x74, 0x61, 0x79, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x20, + 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, + 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x54, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x43, 0x48, + 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x4b, 0x3a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, + 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, + 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, + 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, 0x20, + 0x2d, 0x3e, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x60, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x4f, 0x4e, + 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, + 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, + 0x20, 0x43, 0x4d, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x60, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x38, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4d, 0x44, + 0x5d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x45, + 0x4e, 0x44, 0x5f, 0x52, 0x41, 0x57, 0x3a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x23, 0x67, 0x65, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x74, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x28, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x20, 0x2b, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, + 0x2b, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x20, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, + 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x38, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, + 0x2d, 0x20, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x38, 0x2e, 0x73, 0x75, + 0x62, 0x61, 0x72, 0x72, 0x61, 0x79, 0x28, 0x72, 0x61, 0x77, + 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2c, + 0x20, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x72, 0x61, 0x77, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, + 0x62, 0x55, 0x49, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x4d, 0x44, + 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x20, 0x52, 0x61, 0x77, 0x20, 0x24, 0x7b, 0x72, + 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, + 0x7d, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x28, 0x29, + 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, + 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, + 0x20, 0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x29, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5b, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x5d, 0x28, 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, + 0x77, 0x44, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x41, + 0x73, 0x79, 0x6e, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x28, + 0x75, 0x73, 0x65, 0x72, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, + 0x61, 0x29, 0x22, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, + 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, + 0x2d, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x41, + 0x50, 0x49, 0x73, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x2a, + 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x20, 0x66, 0x6e, 0x20, 0x2d, 0x20, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2d, 0x20, - 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x20, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, - 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x74, - 0x6f, 0x62, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, - 0x20, 0x20, 0x20, 0x2a, 0x20, 0x53, 0x65, 0x74, 0x20, 0x61, - 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, - 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6c, 0x69, - 0x6b, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, - 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x63, - 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x2d, 0x20, - 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x60, 0x6d, - 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, - 0x65, 0x29, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x2d, 0x20, - 0x77, 0x65, 0x62, 0x75, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x28, 0x28, 0x65, 0x29, 0x20, 0x3d, 0x3e, 0x20, - 0x7b, 0x69, 0x66, 0x28, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x77, - 0x65, 0x62, 0x75, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x2e, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, - 0x29, 0x7b, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x7d, 0x7d, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, - 0x73, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x61, 0x6c, - 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, - 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, - 0x55, 0x49, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x65, 0x6e, - 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x2a, 0x20, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x6e, 0x65, - 0x20, 0x62, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x60, 0x77, 0x65, 0x62, 0x75, 0x69, - 0x2e, 0x6a, 0x73, 0x60, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x2e, - 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, - 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, - 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x60, - 0x74, 0x72, 0x75, 0x65, 0x60, 0x20, 0x69, 0x66, 0x20, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x20, - 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x69, 0x73, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, - 0x77, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, - 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, - 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x47, 0x65, - 0x74, 0x20, 0x4f, 0x53, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x20, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, - 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, - 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, - 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x60, - 0x54, 0x72, 0x75, 0x65, 0x60, 0x20, 0x69, 0x66, 0x20, 0x4f, - 0x53, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, + 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x2d, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x20, 0x63, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, + 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x2d, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, + 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x77, + 0x65, 0x62, 0x75, 0x69, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, + 0x22, 0x6d, 0x79, 0x49, 0x44, 0x22, 0x2c, 0x20, 0x31, 0x32, + 0x33, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x22, + 0x48, 0x69, 0x22, 0x2c, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, + 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, + 0x5b, 0x30, 0x78, 0x34, 0x32, 0x2c, 0x20, 0x30, 0x78, 0x34, + 0x33, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x34, 0x5d, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x61, - 0x73, 0x79, 0x6e, 0x63, 0x20, 0x69, 0x73, 0x48, 0x69, 0x67, - 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x61, 0x6c, 0x6c, - 0x43, 0x6f, 0x72, 0x65, 0x28, 0x22, 0x68, 0x69, 0x67, 0x68, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x22, + 0x73, 0x79, 0x6e, 0x63, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x28, + 0x66, 0x6e, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x61, 0x72, 0x67, + 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x21, 0x66, 0x6e, 0x29, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, + 0x73, 0x65, 0x2e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x28, + 0x6e, 0x65, 0x77, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x4e, 0x6f, 0x20, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x64, 0x22, 0x29, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x77, 0x73, 0x49, 0x73, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x29, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x50, 0x72, + 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x72, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x28, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x22, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x68, 0x61, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x26, 0x26, 0x20, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x62, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x60, 0x24, + 0x7b, 0x66, 0x6e, 0x7d, 0x60, 0x29, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x2e, 0x72, + 0x65, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6e, 0x65, 0x77, 0x20, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x28, 0x60, 0x4e, 0x6f, 0x20, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x61, 0x73, + 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x22, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x22, 0x60, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x43, 0x6f, 0x72, 0x65, 0x20, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, - 0x5b, 0x24, 0x7b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x7d, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x0a, 0x7d, 0x3b, 0x0a, 0x61, 0x64, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x28, 0x22, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2c, 0x20, - 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, - 0x6f, 0x64, 0x79, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x6d, - 0x65, 0x6e, 0x75, 0x22, 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, 0x29, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x64, 0x64, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x22, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x2c, - 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, - 0x3e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x29, - 0x3b, 0x0a, + 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x57, 0x65, 0x62, 0x55, 0x49, + 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x69, 0x6e, + 0x67, 0x20, 0x5b, 0x24, 0x7b, 0x66, 0x6e, 0x7d, 0x28, 0x2e, + 0x2e, 0x2e, 0x29, 0x5d, 0x60, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x23, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x69, + 0x73, 0x65, 0x28, 0x66, 0x6e, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, + 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, + 0x66, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x22, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x22, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6f, + 0x72, 0x20, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x20, 0x77, 0x65, 0x62, 0x75, 0x69, 0x20, 0x64, + 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x67, 0x69, + 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, + 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x2d, 0x20, 0x6c, + 0x6f, 0x67, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x73, 0x65, 0x74, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x28, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, 0x2d, + 0x3e, 0x20, 0x4c, 0x6f, 0x67, 0x20, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, + 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x22, 0x57, 0x65, 0x62, 0x55, 0x49, 0x20, + 0x2d, 0x3e, 0x20, 0x4c, 0x6f, 0x67, 0x20, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x22, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, + 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, 0x6e, + 0x74, 0x6f, 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x20, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2d, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, + 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x74, 0x6f, + 0x61, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, + 0x20, 0x20, 0x2a, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x20, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, + 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x62, + 0x61, 0x73, 0x65, 0x36, 0x34, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, + 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x74, 0x6f, + 0x62, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, + 0x20, 0x20, 0x2a, 0x20, 0x53, 0x65, 0x74, 0x20, 0x61, 0x20, + 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, + 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6c, 0x69, 0x6b, + 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, + 0x20, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x2d, 0x20, 0x63, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x60, 0x6d, 0x79, + 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x65, + 0x29, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x2d, 0x20, 0x77, + 0x65, 0x62, 0x75, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, + 0x6b, 0x28, 0x28, 0x65, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, + 0x69, 0x66, 0x28, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x77, 0x65, + 0x62, 0x75, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x29, + 0x7b, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x7d, 0x7d, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x73, + 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x63, 0x61, 0x6c, 0x6c, + 0x62, 0x61, 0x63, 0x6b, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, + 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x55, + 0x49, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x65, 0x6e, 0x64, + 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x20, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x20, + 0x62, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x60, 0x77, 0x65, 0x62, 0x75, 0x69, 0x2e, + 0x6a, 0x73, 0x60, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x2e, 0x0a, + 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, + 0x40, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x20, + 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x60, 0x74, + 0x72, 0x75, 0x65, 0x60, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x20, + 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x69, 0x73, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x23, 0x77, + 0x73, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x23, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x0a, 0x20, + 0x20, 0x20, 0x2a, 0x20, 0x47, 0x65, 0x74, 0x20, 0x4f, 0x53, + 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x40, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x20, 0x42, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x60, 0x54, 0x72, 0x75, 0x65, + 0x60, 0x20, 0x69, 0x66, 0x20, 0x4f, 0x53, 0x20, 0x69, 0x73, + 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, + 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, + 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x20, + 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, + 0x20, 0x69, 0x73, 0x48, 0x69, 0x67, 0x68, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x3d, + 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x65, + 0x28, 0x22, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x73, 0x74, 0x22, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x23, 0x6c, 0x6f, 0x67, 0x29, 0x20, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x60, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, 0x5b, 0x24, 0x7b, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x7d, 0x5d, 0x60, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x3b, + 0x0a, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x2c, 0x20, 0x28, 0x29, 0x20, 0x3d, + 0x3e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, + 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x6d, 0x65, 0x6e, 0x75, 0x22, + 0x2c, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, + 0x3d, 0x3e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, + 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x28, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x61, 0x64, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, + 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x64, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, + 0x79, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x22, + 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x2c, 0x20, 0x28, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x00 }; diff --git a/bridge/webui_bridge.ts b/bridge/webui_bridge.ts index 3cc3c8a7..4a46c3ca 100644 --- a/bridge/webui_bridge.ts +++ b/bridge/webui_bridge.ts @@ -32,37 +32,38 @@ class WebuiBridge { #winH: number; // Internals #ws: WebSocket; - #wsStatus = false; - #TokenAccepted = false; - #wsStatusOnce = false; - #closeReason = 0; + #wsStayAlive: boolean = true; + #wsStayAliveTimeout: number = 500; + #wsWasConnected: boolean = false; + #TokenAccepted: boolean = false; + #closeReason: number = 0; #closeValue: string; - #hasEvents = false; - #callPromiseID = new Uint16Array(1); + #hasEvents: boolean = false; + #callPromiseID: Uint16Array = new Uint16Array(1); #callPromiseResolve: (((data: string) => unknown) | undefined)[] = []; - #allowNavigation = true; + #allowNavigation: boolean = true; #sendQueue: Uint8Array[] = []; - #isSending = false; + #isSending: boolean = false; // WebUI Const - #WEBUI_SIGNATURE = 221; - #CMD_JS = 254; - #CMD_JS_QUICK = 253; - #CMD_CLICK = 252; - #CMD_NAVIGATION = 251; - #CMD_CLOSE = 250; - #CMD_CALL_FUNC = 249; - #CMD_SEND_RAW = 248; - #CMD_NEW_ID = 247; - #CMD_MULTI = 246; - #CMD_CHECK_TK = 245; - #MULTI_CHUNK_SIZE = 65500; - #PROTOCOL_SIZE = 8; // Protocol header size in bytes - #PROTOCOL_SIGN = 0; // Protocol byte position: Signature (1 Byte) - #PROTOCOL_TOKEN = 1; // Protocol byte position: Token (4 Bytes) - #PROTOCOL_ID = 5; // Protocol byte position: ID (2 Bytes) - #PROTOCOL_CMD = 7; // Protocol byte position: Command (1 Byte) - #PROTOCOL_DATA = 8; // Protocol byte position: Data (n Byte) - #Token = new Uint32Array(1); + #WEBUI_SIGNATURE: number = 221; + #CMD_JS: number = 254; + #CMD_JS_QUICK: number = 253; + #CMD_CLICK: number = 252; + #CMD_NAVIGATION: number = 251; + #CMD_CLOSE: number = 250; + #CMD_CALL_FUNC: number = 249; + #CMD_SEND_RAW: number = 248; + #CMD_NEW_ID: number = 247; + #CMD_MULTI: number = 246; + #CMD_CHECK_TK: number = 245; + #MULTI_CHUNK_SIZE: number = 65500; + #PROTOCOL_SIZE: number = 8; // Protocol header size in bytes + #PROTOCOL_SIGN: number = 0; // Protocol byte position: Signature (1 Byte) + #PROTOCOL_TOKEN: number = 1; // Protocol byte position: Token (4 Bytes) + #PROTOCOL_ID: number = 5; // Protocol byte position: ID (2 Bytes) + #PROTOCOL_CMD: number = 7; // Protocol byte position: Command (1 Byte) + #PROTOCOL_DATA: number = 8; // Protocol byte position: Data (n Byte) + #Token: Uint32Array = new Uint32Array(1); #Ping: Boolean = true; // Events #eventsCallback: ((event: number) => void) | null = null; @@ -128,7 +129,7 @@ class WebuiBridge { if ('navigation' in globalThis) { globalThis.navigation.addEventListener('navigate', (event) => { if (!this.#allowNavigation) { - if (this.#hasEvents && this.#wsStatus) { + if (this.#hasEvents && (this.#wsIsConnected())) { event.preventDefault(); const url = new URL(event.destination.url); if (this.#log) console.log(`WebUI -> DOM -> Navigation Event [${url.href}]`); @@ -140,7 +141,7 @@ class WebuiBridge { // Click navigation event listener addRefreshableEventListener(document.body, 'a', 'click', (event) => { if (!this.#allowNavigation) { - if (this.#hasEvents && this.#wsStatus) { + if (this.#hasEvents && (this.#wsIsConnected())) { event.preventDefault(); const { href } = event.target as HTMLAnchorElement; if (this.#log) console.log(`WebUI -> DOM -> Navigation Click Event [${href}]`); @@ -158,10 +159,8 @@ class WebuiBridge { this.#close(); }; setTimeout(() => { - if (!this.#wsStatusOnce) { - this.#freezeUi(); + if (!this.#wsWasConnected) { alert('Sorry. WebUI failed to connect to the backend application. Please try again.'); - if (!this.#log) globalThis.close(); } }, 1500); } @@ -169,24 +168,16 @@ class WebuiBridge { #close(reason = 0, value = '') { this.#closeReason = reason; this.#closeValue = value; - if (this.#wsStatus) { + if (this.#wsIsConnected()) { this.#ws.close(); } - if (reason === this.#CMD_NAVIGATION) { - if (this.#log) { - console.log(`WebUI -> Close -> Navigation to [${value}]`); - } - this.#allowNavigation = true; - globalThis.location.replace(this.#closeValue); - } else { - if (this.#log) { - console.log(`WebUI -> Close.`); - } - } } #freezeUi() { document.body.style.filter = 'contrast(1%)'; } + #unfreezeUI() { + document.body.style.filter = 'contrast(100%)'; + } #isTextBasedCommand(cmd: number): Boolean { if (cmd !== this.#CMD_SEND_RAW) return true; return false; @@ -245,220 +236,8 @@ class WebuiBridge { this.#hasEvents = true; this.#allowNavigation = false; } - const host = window.location.hostname; - const url = this.#secure ? ('wss://' + host) : ('ws://' + host); - this.#ws = new WebSocket(`${url}:${this.#port}/_webui_ws_connect`); - this.#ws.binaryType = 'arraybuffer'; - this.#ws.onopen = () => { - this.#wsStatus = true; - this.#wsStatusOnce = true; - if (this.#log) console.log('WebUI -> Connected'); - this.#checkToken(); - this.#clicksListener(); - }; - this.#ws.onerror = () => { - if (this.#log) console.log('WebUI -> Connection Failed'); - this.#freezeUi(); - }; - this.#ws.onclose = (event) => { - this.#wsStatus = false; - this.#TokenAccepted = false; - if (this.#closeReason === this.#CMD_NAVIGATION) { - if (this.#log) { - console.log(`WebUI -> Connection closed du to Navigation to [${this.#closeValue}]`); - } - } else { - if (this.#log) { - console.log(`WebUI -> Connection lost (${event.code})`); - this.#freezeUi(); - } else { - this.#closeWindowTimer(); - } - } - if (this.#eventsCallback) { - this.#eventsCallback(this.event.DISCONNECTED); - } - }; - this.#ws.onmessage = async (event) => { - const buffer8 = new Uint8Array(event.data); - if (buffer8.length < this.#PROTOCOL_SIZE) return; - if (buffer8[this.#PROTOCOL_SIGN] !== this.#WEBUI_SIGNATURE) return; - if (this.#isTextBasedCommand(buffer8[this.#PROTOCOL_CMD])) { - // UTF8 Text based commands - const callId = this.#getID(buffer8, this.#PROTOCOL_ID); - // Process Command - switch (buffer8[this.#PROTOCOL_CMD]) { - case this.#CMD_JS_QUICK: - case this.#CMD_JS: - { - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [Script] - const script = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); - const scriptSanitize = script.replace(/(?:\r\n|\r|\n)/g, '\n'); - if (this.#log) console.log(`WebUI -> CMD -> JS [${scriptSanitize}]`); - // Get callback result - let FunReturn = 'undefined'; - let FunError = false; - try { - FunReturn = await AsyncFunction(scriptSanitize)(); - } catch (e) { - FunError = true; - FunReturn = e.message; - } - // Stop if this is a quick call - if (buffer8[this.#PROTOCOL_CMD] === this.#CMD_JS_QUICK) return; - // Get the call return - if (FunReturn === undefined) { - FunReturn = 'undefined'; - } - // Logging - if (this.#log && !FunError) console.log(`WebUI -> CMD -> JS -> Return Success [${FunReturn}]`); - if (this.#log && FunError) console.log(`WebUI -> CMD -> JS -> Return Error [${FunReturn}]`); - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [Error, Script Response] - let packet = new Uint8Array(0); - const packetPush = (data: Uint8Array) => { - const newPacket = new Uint8Array(packet.length + data.length); - newPacket.set(packet); - newPacket.set(data, packet.length); - packet = newPacket; - }; - const packetPushStr = (data: string) => { - const chunkSize = 1024 * 8; - if (data.length > chunkSize) { - const encoder = new TextEncoder(); - for (let i = 0; i < data.length; i += chunkSize) { - const chunk = data.substring(i, Math.min(i + chunkSize, data.length)); - const encodedChunk = encoder.encode(chunk); - packetPush(encodedChunk); - } - } else { - packetPush(new TextEncoder().encode(data)); - } - }; - packetPush(new Uint8Array([this.#WEBUI_SIGNATURE])); - packetPush(new Uint8Array([0, 0, 0, 0])); // Token (4 Bytes) - packetPush(new Uint8Array([0, 0])); // ID (2 Bytes) - packetPush(new Uint8Array([this.#CMD_JS])); - packetPush(new Uint8Array(FunError ? [1] : [0])); - packetPushStr(FunReturn); - packetPush(new Uint8Array([0])); - this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); - this.#addID(packet, callId, this.#PROTOCOL_ID); - this.#sendData(packet); - } - break; - case this.#CMD_CALL_FUNC: - { - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [Call Response] - const callResponse = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); - if (this.#log) { - console.log(`WebUI -> CMD -> Call Response [${callResponse}]`); - } - if (this.#callPromiseResolve[callId]) { - if (this.#log) { - console.log(`WebUI -> CMD -> Resolving Response #${callId}...`); - } - this.#callPromiseResolve[callId]?.(callResponse); - this.#callPromiseResolve[callId] = undefined; - } - } - break; - case this.#CMD_NAVIGATION: - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [URL] - const url = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); - console.log(`WebUI -> CMD -> Navigation [${url}]`); - this.#close(this.#CMD_NAVIGATION, url); - break; - case this.#CMD_NEW_ID: - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [New Element] - const newElement = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); - console.log(`WebUI -> CMD -> New Bind ID [${newElement}]`); - if (!this.#bindList.includes(newElement)) this.#bindList.push(newElement); - break; - case this.#CMD_CLOSE: - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - if (!this.#log) globalThis.close(); - else { - console.log(`WebUI -> CMD -> Close`); - if (this.#wsStatus) { - this.#wsStatus = false; - this.#TokenAccepted = false; - this.#ws.close(); - } - } - break; - case this.#CMD_CHECK_TK: - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [Status] - const status = (buffer8[this.#PROTOCOL_DATA] == 0 ? false : true); - if (status) { - if (this.#log) console.log(`WebUI -> CMD -> Token Accepted`); - this.#TokenAccepted = true; - if (this.#eventsCallback) { - this.#eventsCallback(this.event.CONNECTED); - } - } - else { - if (this.#log) console.log(`WebUI -> CMD -> Token Not Accepted`); - } - break; - } - } else { - // Raw-binary based commands - switch (buffer8[this.#PROTOCOL_CMD]) { - case this.#CMD_SEND_RAW: - // Protocol - // 0: [SIGNATURE] - // 1: [TOKEN] - // 2: [ID] - // 3: [CMD] - // 4: [Function,Null,Raw Data] - // Get function name - const functionName: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); - // Get the raw data - const rawDataIndex: number = this.#PROTOCOL_DATA + functionName.length + 1; - const rawDataSize: number = (buffer8.length - rawDataIndex) - 1; - const userRawData = buffer8.subarray(rawDataIndex, (rawDataIndex + rawDataSize)); - if (this.#log) console.log(`WebUI -> CMD -> Received Raw ${rawDataSize} bytes for [${functionName}()]`); - // Call the user function, and pass the raw data - if (typeof window[functionName] === 'function') window[functionName](userRawData); - else await AsyncFunction(functionName + '(userRawData)')(); - break; - } - } - }; + // Connect to the backend application + this.#wsConnect(); } #keepAlive = async () => { while (true) { @@ -490,7 +269,7 @@ class WebuiBridge { } async #sendData(packet: Uint8Array) { this.#Ping = false; - if (!this.#wsStatus || packet === undefined) return; + if ((!this.#wsIsConnected()) || packet === undefined) return; // Enqueue the packet this.#sendQueue.push(packet); if (this.#isSending) return; @@ -531,7 +310,7 @@ class WebuiBridge { this.#isSending = false; } #sendClick(elem: string) { - if (this.#wsStatus) { + if (this.#wsIsConnected()) { // Protocol // 0: [SIGNATURE] // 1: [TOKEN] @@ -570,7 +349,7 @@ class WebuiBridge { } } #checkToken() { - if (this.#wsStatus) { + if (this.#wsIsConnected()) { // Protocol // 0: [SIGNATURE] // 1: [TOKEN] @@ -592,11 +371,21 @@ class WebuiBridge { // this.#addID(packet, 0, this.#PROTOCOL_ID) this.#sendData(packet); if (this.#log) console.log(`WebUI -> Send Check Token [${this.#token}]`); + // Refresh the page if token not accepted + setTimeout(() => this.#checkTokenReload(), 1000); + } + } + #checkTokenReload() { + if (!this.#TokenAccepted) { + if (this.#log) console.log(`WebUI -> Token [${this.#token}] not accepted. Reload page...`); + this.#allowNavigation = true; + this.#wsStayAlive = false; + globalThis.location.reload(); } } #sendEventNavigation(url: string) { if (url !== '') { - if (this.#wsStatus) { + if (this.#wsIsConnected()) { if (this.#log) console.log(`WebUI -> Send Navigation Event [${url}]`); const packet = Uint8Array.of( // Protocol @@ -707,6 +496,246 @@ class WebuiBridge { async callCore(fn: string, ...args: DataTypes[]): Promise { return this.call('__webui_core_api__', fn, ...args); } + // -- WebSocket ---------------------------- + #wsIsConnected(): boolean { + return ((this.#ws) && (this.#ws.readyState === WebSocket.OPEN)); + } + #wsConnect(): void { + if (this.#ws) { + this.#ws.close(); + } + this.#TokenAccepted = false; + const host = window.location.hostname; + const url = this.#secure ? ('wss://' + host) : ('ws://' + host); + this.#ws = new WebSocket(`${url}:${this.#port}/_webui_ws_connect`); + this.#ws.binaryType = 'arraybuffer'; + this.#ws.onopen = this.#wsOnOpen.bind(this); + this.#ws.onmessage = this.#wsOnMessage.bind(this); + this.#ws.onclose = this.#wsOnClose.bind(this); + this.#ws.onerror = this.#wsOnError.bind(this); + } + #wsOnOpen = (event: Event) => { + this.#wsWasConnected = true; + this.#unfreezeUI(); + if (this.#log) console.log('WebUI -> Connected'); + this.#checkToken(); + this.#clicksListener(); + }; + #wsOnError = (event: Event) => { + if (this.#log) console.log(`WebUI -> Connection failed.`); + }; + #wsOnClose = (event: CloseEvent) => { + if (this.#closeReason === this.#CMD_NAVIGATION) { + this.#closeReason = 0; + if (this.#log) { + console.log(`WebUI -> Connection lost. Navigation to [${this.#closeValue}]`); + this.#allowNavigation = true; + globalThis.location.replace(this.#closeValue); + } + } else { + if (this.#wsStayAlive) { + // Re-connect + if (this.#log) console.log(`WebUI -> Connection lost (${event.code}). Reconnecting...`); + this.#freezeUi(); + setTimeout(() => this.#wsConnect(), this.#wsStayAliveTimeout); + } + else if (this.#log) { + // Debug close + console.log(`WebUI -> Connection lost (${event.code})`); + this.#freezeUi(); + } else { + // Release close + this.#closeWindowTimer(); + } + } + // Event Callback + if (this.#eventsCallback) { + this.#eventsCallback(this.event.DISCONNECTED); + } + }; + #wsOnMessage = async (event: MessageEvent) => { + const buffer8 = new Uint8Array(event.data); + if (buffer8.length < this.#PROTOCOL_SIZE) return; + if (buffer8[this.#PROTOCOL_SIGN] !== this.#WEBUI_SIGNATURE) return; + if (this.#isTextBasedCommand(buffer8[this.#PROTOCOL_CMD])) { + // UTF8 Text based commands + const callId = this.#getID(buffer8, this.#PROTOCOL_ID); + // Process Command + switch (buffer8[this.#PROTOCOL_CMD]) { + case this.#CMD_JS_QUICK: + case this.#CMD_JS: + { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Script] + const script = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + const scriptSanitize = script.replace(/(?:\r\n|\r|\n)/g, '\n'); + if (this.#log) console.log(`WebUI -> CMD -> JS [${scriptSanitize}]`); + // Get callback result + let FunReturn = 'undefined'; + let FunError = false; + try { + FunReturn = await AsyncFunction(scriptSanitize)(); + } catch (e) { + FunError = true; + FunReturn = e.message; + } + // Stop if this is a quick call + if (buffer8[this.#PROTOCOL_CMD] === this.#CMD_JS_QUICK) return; + // Get the call return + if (FunReturn === undefined) { + FunReturn = 'undefined'; + } + // Logging + if (this.#log && !FunError) console.log(`WebUI -> CMD -> JS -> Return Success [${FunReturn}]`); + if (this.#log && FunError) console.log(`WebUI -> CMD -> JS -> Return Error [${FunReturn}]`); + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Error, Script Response] + let packet = new Uint8Array(0); + const packetPush = (data: Uint8Array) => { + const newPacket = new Uint8Array(packet.length + data.length); + newPacket.set(packet); + newPacket.set(data, packet.length); + packet = newPacket; + }; + const packetPushStr = (data: string) => { + const chunkSize = 1024 * 8; + if (data.length > chunkSize) { + const encoder = new TextEncoder(); + for (let i = 0; i < data.length; i += chunkSize) { + const chunk = data.substring(i, Math.min(i + chunkSize, data.length)); + const encodedChunk = encoder.encode(chunk); + packetPush(encodedChunk); + } + } else { + packetPush(new TextEncoder().encode(data)); + } + }; + packetPush(new Uint8Array([this.#WEBUI_SIGNATURE])); + packetPush(new Uint8Array([0, 0, 0, 0])); // Token (4 Bytes) + packetPush(new Uint8Array([0, 0])); // ID (2 Bytes) + packetPush(new Uint8Array([this.#CMD_JS])); + packetPush(new Uint8Array(FunError ? [1] : [0])); + packetPushStr(FunReturn); + packetPush(new Uint8Array([0])); + this.#addToken(packet, this.#token, this.#PROTOCOL_TOKEN); + this.#addID(packet, callId, this.#PROTOCOL_ID); + this.#sendData(packet); + } + break; + case this.#CMD_CALL_FUNC: + { + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Call Response] + const callResponse = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + if (this.#log) { + console.log(`WebUI -> CMD -> Call Response [${callResponse}]`); + } + if (this.#callPromiseResolve[callId]) { + if (this.#log) { + console.log(`WebUI -> CMD -> Resolving Response #${callId}...`); + } + this.#callPromiseResolve[callId]?.(callResponse); + this.#callPromiseResolve[callId] = undefined; + } + } + break; + case this.#CMD_NAVIGATION: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [URL] + const url = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + console.log(`WebUI -> CMD -> Navigation [${url}]`); + this.#close(this.#CMD_NAVIGATION, url); + break; + case this.#CMD_NEW_ID: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [New Element] + const newElement = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + console.log(`WebUI -> CMD -> New Bind ID [${newElement}]`); + if (!this.#bindList.includes(newElement)) this.#bindList.push(newElement); + break; + case this.#CMD_CLOSE: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + if (this.#log) { + // Debug Close + console.log(`WebUI -> CMD -> Close`); + if (this.#wsIsConnected()) { + this.#wsStayAlive = false; + this.#ws.close(); + } + } + else { + // Release Close + globalThis.close(); + } + break; + case this.#CMD_CHECK_TK: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Status] + const status = (buffer8[this.#PROTOCOL_DATA] == 0 ? false : true); + if (status) { + if (this.#log) console.log(`WebUI -> CMD -> Token Accepted`); + this.#TokenAccepted = true; + if (this.#eventsCallback) { + this.#eventsCallback(this.event.CONNECTED); + } + } + else { + if (this.#log) console.log(`WebUI -> CMD -> Token Not Accepted`); + } + break; + } + } else { + // Raw-binary based commands + switch (buffer8[this.#PROTOCOL_CMD]) { + case this.#CMD_SEND_RAW: + // Protocol + // 0: [SIGNATURE] + // 1: [TOKEN] + // 2: [ID] + // 3: [CMD] + // 4: [Function,Null,Raw Data] + // Get function name + const functionName: string = this.#getDataStrFromPacket(buffer8, this.#PROTOCOL_DATA); + // Get the raw data + const rawDataIndex: number = this.#PROTOCOL_DATA + functionName.length + 1; + const rawDataSize: number = (buffer8.length - rawDataIndex) - 1; + const userRawData = buffer8.subarray(rawDataIndex, (rawDataIndex + rawDataSize)); + if (this.#log) console.log(`WebUI -> CMD -> Received Raw ${rawDataSize} bytes for [${functionName}()]`); + // Call the user function, and pass the raw data + if (typeof window[functionName] === 'function') window[functionName](userRawData); + else await AsyncFunction(functionName + '(userRawData)')(); + break; + } + } + }; // -- Public APIs -------------------------- /** * Call a backend function @@ -719,7 +748,7 @@ class WebuiBridge { async call(fn: string, ...args: DataTypes[]): Promise { if (!fn) return Promise.reject(new SyntaxError('No binding name is provided')); - if (!this.#wsStatus) return Promise.reject(new Error('WebSocket is not connected')); + if (!this.#wsIsConnected()) return Promise.reject(new Error('WebSocket is not connected')); // Check binding list if (!this.#hasEvents && !this.#bindList.includes(`${fn}`)) @@ -780,7 +809,7 @@ class WebuiBridge { * @return - Boolean `true` if connected */ isConnected(): boolean { - return (this.#wsStatus && this.#TokenAccepted); + return ((this.#wsIsConnected()) && (this.#TokenAccepted)); } /** * Get OS high contrast preference. diff --git a/src/webui.c b/src/webui.c index 6a5c6fd1..c530ea1f 100644 --- a/src/webui.c +++ b/src/webui.c @@ -8691,7 +8691,7 @@ static void _webui_receive(_webui_window_t* win, struct mg_connection* client, static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* client, size_t* connection_id) { #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_save([%zu])\n", win->num); + printf("[Core]\t\t_webui_connection_save([%zu])\n", win->num); #endif // Save new ws client @@ -8699,7 +8699,7 @@ static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* c for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { if (_webui.clients[i] == NULL) { #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_save() -> Registering client #%zu \n", i); + printf("[Core]\t\t_webui_connection_save() -> Registering client #%zu \n", i); #endif // Save if (win->single_client == NULL) { @@ -8718,7 +8718,7 @@ static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* c // List is full #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_save() -> Clients list is full\n"); + printf("[Core]\t\t_webui_connection_save() -> Clients list is full\n"); #endif _webui_mutex_unlock(&_webui.mutex_client); return false; @@ -8726,7 +8726,7 @@ static bool _webui_connection_save(_webui_window_t* win, struct mg_connection* c static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* client) { #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_remove([%zu])\n", win->num); + printf("[Core]\t\t_webui_connection_remove([%zu])\n", win->num); #endif _webui_mutex_lock(&_webui.mutex_client); @@ -8735,7 +8735,7 @@ static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* for (size_t i = 0; i < WEBUI_MAX_IDS; i++) { if (_webui.clients[i] == client) { #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_remove() -> Removing client #%zu \n", i); + printf("[Core]\t\t_webui_connection_remove() -> Removing client #%zu \n", i); #endif // Reset Token if (!_webui.config.multi_client) { @@ -8762,7 +8762,7 @@ static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* // Client not found #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_remove() -> Client not found\n"); + printf("[Core]\t\t_webui_connection_remove() -> Client not found\n"); #endif _webui_mutex_unlock(&_webui.mutex_client); mg_close_connection(client); @@ -8770,7 +8770,7 @@ static void _webui_connection_remove(_webui_window_t* win, struct mg_connection* static bool _webui_connection_get_id(_webui_window_t* win, struct mg_connection* client, size_t* connection_id) { #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_get_id([%zu], [%p])\n", win->num, client); + printf("[Core]\t\t_webui_connection_get_id([%zu], [%p])\n", win->num, client); #endif // Find a ws client @@ -8785,7 +8785,7 @@ static bool _webui_connection_get_id(_webui_window_t* win, struct mg_connection* // Client not found #ifdef WEBUI_LOG - printf("[Core]\t\t_webui_client_get_id() -> Client not found\n"); + printf("[Core]\t\t_webui_connection_get_id() -> Client not found\n"); #endif _webui_mutex_unlock(&_webui.mutex_client); return false; @@ -9296,6 +9296,17 @@ static void _webui_ws_process( ); #endif + // Send a void response to solve `.call()` promise + + // Packet Protocol Format: + // [...] + // [CMD] + + // Send the packet + _webui_send_client( + win, client, packet_id, 0x00, NULL, 0 + ); + // Forced close _webui_connection_remove(win, client); }